From d2315beda93202349212fd5c2d72d93a7e3990ad Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 24 Jul 2023 18:10:20 -0400 Subject: [PATCH 01/80] added AlertArmatureMask --- .../java/com/jme3/anim/AlertArmatureMask.java | 190 ++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java diff --git a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java new file mode 100644 index 0000000000..33912c28e3 --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java @@ -0,0 +1,190 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.jme3.anim; + +import com.jme3.scene.Spatial; +import java.util.Iterator; + +/** + * Extension of {@link ArmatureMask}. + * + *

Provides a feature which checks higher layers for joint use before it + * approves the layer to use a joint. + * + * @author codex + */ +public class AlertArmatureMask extends ArmatureMask { + + private final String layer; + private final AnimComposer anim; + private final SkinningControl skin; + private boolean checkUpperLayers = true; + + /** + * @param layer The layer this mask is targeted for. It is extremely important + * that this match the name of the layer this mask is (or will be) part of. You + * can use {@link makeLayer} to ensure this. + * @param spatial Spatial containing necessary controls ({@link AnimComposer} and {@link SkinningControl}) + */ + public AlertArmatureMask(String layer, Spatial spatial) { + super(); + this.layer = layer; + anim = spatial.getControl(AnimComposer.class); + skin = spatial.getControl(SkinningControl.class); + } + public AlertArmatureMask(String layer, AnimComposer anim, SkinningControl skin) { + super(); + this.layer = layer; + this.anim = anim; + this.skin = skin; + } + + /** + * Creates a copyFor of this {@code AlertArmatureMask} for the given layer. + * @param layer + * @return copyFor of this {@code AlertArmatureMask} for the layer + */ + public AlertArmatureMask copyFor(String layer) { + return new AlertArmatureMask(layer, anim, skin); + } + /** + * Makes a layer for this mask. + */ + public void makeLayer() { + anim.makeLayer(layer, this); + } + + /** + * Adds all joints to this mask. + * @return + */ + public AlertArmatureMask addAll() { + for (Joint j : skin.getArmature().getJointList()) { + super.addBones(skin.getArmature(), j.getName()); + } + return this; + } + /** + * Adds the given joint and all its children to this mask. + * @param joint + * @return + */ + public AlertArmatureMask addFromJoint(String joint) { + super.addFromJoint(skin.getArmature(), joint); + return this; + } + /** + * Adds the given joints to this mask. + * @param joints + * @return + */ + public AlertArmatureMask addJoints(String... joints) { + super.addBones(skin.getArmature(), joints); + return this; + } + + /** + * Makes this mask check if each joint is being used by a higher layer + * before it uses them. + *

Not checking is more efficient, but checking can avoid some + * interpolation issues between layers. Default=true + * @param check + */ + public void setCheckUpperLayers(boolean check) { + checkUpperLayers = check; + } + + /** + * Get the layer this mask is targeted for. + *

It is extremely important that this value match the actual layer + * this is included in, because checking upper layers may not work if + * they are different. + * @return target layer + */ + public String getTargetLayer() { + return layer; + } + /** + * Get the {@link AnimComposer} this mask is for. + * @return + */ + public AnimComposer getAnimComposer() { + return anim; + } + /** + * Get the {@link SkinningControl} this mask is for. + * @return + */ + public SkinningControl getSkinningControl() { + return skin; + } + /** + * Returns true if this mask is checking upper layers for joint use. + * @return + */ + public boolean isCheckUpperLayers() { + return checkUpperLayers; + } + + @Override + public boolean contains(Object target) { + return simpleContains(target) && (!checkUpperLayers || !isAffectedByUpperLayers(target)); + } + private boolean simpleContains(Object target) { + return super.contains(target); + } + private boolean isAffectedByUpperLayers(Object target) { + boolean higher = false; + /** + * ... Since AnimComposer does not provide a Collection that + * has a decending iterator, we will just have to skip over + * a bunch of lower layers before we actually need to do anything. + */ + for (String name : anim.getLayerNames()) { + if (name.equals(layer)) { + higher = true; + continue; + } + if (!higher) { + continue; + } + AnimLayer lyr = anim.getLayer(name); + // if there is no action playing, no joints are used, so we can skip + if (lyr.getCurrentAction() == null) continue; + if (lyr.getMask() instanceof AlertArmatureMask) { + // dodge some needless recursion by calling a simpler method + if (((AlertArmatureMask)lyr.getMask()).simpleContains(target)) { + return true; + } + } + else if (lyr.getMask().contains(target)) { + return true; + } + } + return false; + } + + /** + * Creates an {@code AlertArmatureMask} for all joints. + * @param layer + * @param spatial + * @return + */ + public static AlertArmatureMask all(String layer, Spatial spatial) { + return new AlertArmatureMask(layer, spatial).addAll(); + } + /** + * Creates an {@code AlertArmatureMask} for all joints. + * @param layer + * @param anim + * @param skin + * @return + */ + public static AlertArmatureMask all(String layer, AnimComposer anim, SkinningControl skin) { + return new AlertArmatureMask(layer, anim, skin).addAll(); + } + +} + From 2f1dae883262a0c69918fd1da445e3fa6dfb1211 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 24 Jul 2023 18:30:50 -0400 Subject: [PATCH 02/80] fixed docs and added another helper --- .../java/com/jme3/anim/AlertArmatureMask.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java index 33912c28e3..da8d1dcaed 100644 --- a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java +++ b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java @@ -44,7 +44,7 @@ public AlertArmatureMask(String layer, AnimComposer anim, SkinningControl skin) /** * Creates a copyFor of this {@code AlertArmatureMask} for the given layer. * @param layer - * @return copyFor of this {@code AlertArmatureMask} for the layer + * @return copy of this {@code AlertArmatureMask} for the layer */ public AlertArmatureMask copyFor(String layer) { return new AlertArmatureMask(layer, anim, skin); @@ -185,6 +185,21 @@ public static AlertArmatureMask all(String layer, Spatial spatial) { public static AlertArmatureMask all(String layer, AnimComposer anim, SkinningControl skin) { return new AlertArmatureMask(layer, anim, skin).addAll(); } + /** + * Creates an array of masks all sharing the same joint masking as {@code base}. + *

This is useful, for example, when you want to create several layers that all cover + * the entire armature. + * @param base base mask used to create other masks + * @param layers layer names to use + * @return array of new masks + */ + public static AlertArmatureMask[] create(AlertArmatureMask base, String... layers) { + AlertArmatureMask[] masks = new AlertArmatureMask[layers.length]; + for (int i = 0; i < layers.length; i++) { + masks[i] = base.copyFor(layers[i]); + } + return masks; + } } From a750f1cf1a461853a70941bd2897c555543795ff Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 24 Jul 2023 18:33:45 -0400 Subject: [PATCH 03/80] made it easier to turn off priority checking --- jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java index da8d1dcaed..a9e25607bc 100644 --- a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java +++ b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java @@ -91,9 +91,11 @@ public AlertArmatureMask addJoints(String... joints) { *

Not checking is more efficient, but checking can avoid some * interpolation issues between layers. Default=true * @param check + * @return */ - public void setCheckUpperLayers(boolean check) { + public AlertArmatureMask setCheckUpperLayers(boolean check) { checkUpperLayers = check; + return this; } /** From cd876d403e8039e7831616736fc00847ac661005 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 24 Jul 2023 20:09:58 -0400 Subject: [PATCH 04/80] removed copy methods --- .../java/com/jme3/anim/AlertArmatureMask.java | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java index a9e25607bc..e034b942a5 100644 --- a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java +++ b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java @@ -41,14 +41,6 @@ public AlertArmatureMask(String layer, AnimComposer anim, SkinningControl skin) this.skin = skin; } - /** - * Creates a copyFor of this {@code AlertArmatureMask} for the given layer. - * @param layer - * @return copy of this {@code AlertArmatureMask} for the layer - */ - public AlertArmatureMask copyFor(String layer) { - return new AlertArmatureMask(layer, anim, skin); - } /** * Makes a layer for this mask. */ @@ -187,21 +179,6 @@ public static AlertArmatureMask all(String layer, Spatial spatial) { public static AlertArmatureMask all(String layer, AnimComposer anim, SkinningControl skin) { return new AlertArmatureMask(layer, anim, skin).addAll(); } - /** - * Creates an array of masks all sharing the same joint masking as {@code base}. - *

This is useful, for example, when you want to create several layers that all cover - * the entire armature. - * @param base base mask used to create other masks - * @param layers layer names to use - * @return array of new masks - */ - public static AlertArmatureMask[] create(AlertArmatureMask base, String... layers) { - AlertArmatureMask[] masks = new AlertArmatureMask[layers.length]; - for (int i = 0; i < layers.length; i++) { - masks[i] = base.copyFor(layers[i]); - } - return masks; - } } From 9c9c2d8422bf6e216fed6e10754712651bf5906d Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Fri, 19 Jan 2024 08:06:28 -0500 Subject: [PATCH 05/80] updated license --- .../java/com/jme3/anim/AlertArmatureMask.java | 45 +++++++++++++++---- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java index e034b942a5..bc797599e9 100644 --- a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java +++ b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java @@ -1,11 +1,37 @@ /* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + * Copyright (c) 2024 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.jme3.anim; import com.jme3.scene.Spatial; -import java.util.Iterator; /** * Extension of {@link ArmatureMask}. @@ -58,6 +84,7 @@ public AlertArmatureMask addAll() { } return this; } + /** * Adds the given joint and all its children to this mask. * @param joint @@ -67,6 +94,7 @@ public AlertArmatureMask addFromJoint(String joint) { super.addFromJoint(skin.getArmature(), joint); return this; } + /** * Adds the given joints to this mask. * @param joints @@ -100,6 +128,7 @@ public AlertArmatureMask setCheckUpperLayers(boolean check) { public String getTargetLayer() { return layer; } + /** * Get the {@link AnimComposer} this mask is for. * @return @@ -107,6 +136,7 @@ public String getTargetLayer() { public AnimComposer getAnimComposer() { return anim; } + /** * Get the {@link SkinningControl} this mask is for. * @return @@ -114,6 +144,7 @@ public AnimComposer getAnimComposer() { public SkinningControl getSkinningControl() { return skin; } + /** * Returns true if this mask is checking upper layers for joint use. * @return @@ -126,16 +157,13 @@ public boolean isCheckUpperLayers() { public boolean contains(Object target) { return simpleContains(target) && (!checkUpperLayers || !isAffectedByUpperLayers(target)); } + private boolean simpleContains(Object target) { return super.contains(target); } + private boolean isAffectedByUpperLayers(Object target) { boolean higher = false; - /** - * ... Since AnimComposer does not provide a Collection that - * has a decending iterator, we will just have to skip over - * a bunch of lower layers before we actually need to do anything. - */ for (String name : anim.getLayerNames()) { if (name.equals(layer)) { higher = true; @@ -169,6 +197,7 @@ else if (lyr.getMask().contains(target)) { public static AlertArmatureMask all(String layer, Spatial spatial) { return new AlertArmatureMask(layer, spatial).addAll(); } + /** * Creates an {@code AlertArmatureMask} for all joints. * @param layer From 83c95e504b8d043e6d0f96f0ccd046d2e3429b1c Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 20 Jan 2024 16:39:33 -0500 Subject: [PATCH 06/80] updated javadoc --- .../java/com/jme3/anim/AlertArmatureMask.java | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java index bc797599e9..0af9f13779 100644 --- a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java +++ b/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java @@ -34,10 +34,8 @@ import com.jme3.scene.Spatial; /** - * Extension of {@link ArmatureMask}. - * - *

Provides a feature which checks higher layers for joint use before it - * approves the layer to use a joint. + * Mask that excludes joints from participating in the layer + * if a higher layer is using those joints in an animation. * * @author codex */ @@ -49,7 +47,7 @@ public class AlertArmatureMask extends ArmatureMask { private boolean checkUpperLayers = true; /** - * @param layer The layer this mask is targeted for. It is extremely important + * @param layer The layer this mask is targeted for. It is important * that this match the name of the layer this mask is (or will be) part of. You * can use {@link makeLayer} to ensure this. * @param spatial Spatial containing necessary controls ({@link AnimComposer} and {@link SkinningControl}) @@ -60,6 +58,13 @@ public AlertArmatureMask(String layer, Spatial spatial) { anim = spatial.getControl(AnimComposer.class); skin = spatial.getControl(SkinningControl.class); } + /** + * @param layer The layer this mask is targeted for. It is important + * that this match the name of the layer this mask is (or will be) part of. You + * can use {@link makeLayer} to ensure this. + * @param anim anim composer this mask is assigned to + * @param skin skinning control complimenting the anim composer. + */ public AlertArmatureMask(String layer, AnimComposer anim, SkinningControl skin) { super(); this.layer = layer; @@ -68,7 +73,7 @@ public AlertArmatureMask(String layer, AnimComposer anim, SkinningControl skin) } /** - * Makes a layer for this mask. + * Makes a layer from this mask. */ public void makeLayer() { anim.makeLayer(layer, this); @@ -76,7 +81,7 @@ public void makeLayer() { /** * Adds all joints to this mask. - * @return + * @return this.instance */ public AlertArmatureMask addAll() { for (Joint j : skin.getArmature().getJointList()) { @@ -88,7 +93,7 @@ public AlertArmatureMask addAll() { /** * Adds the given joint and all its children to this mask. * @param joint - * @return + * @return this instance */ public AlertArmatureMask addFromJoint(String joint) { super.addFromJoint(skin.getArmature(), joint); @@ -98,7 +103,7 @@ public AlertArmatureMask addFromJoint(String joint) { /** * Adds the given joints to this mask. * @param joints - * @return + * @return this instance */ public AlertArmatureMask addJoints(String... joints) { super.addBones(skin.getArmature(), joints); @@ -111,7 +116,7 @@ public AlertArmatureMask addJoints(String... joints) { *

Not checking is more efficient, but checking can avoid some * interpolation issues between layers. Default=true * @param check - * @return + * @return this instance */ public AlertArmatureMask setCheckUpperLayers(boolean check) { checkUpperLayers = check; @@ -131,7 +136,7 @@ public String getTargetLayer() { /** * Get the {@link AnimComposer} this mask is for. - * @return + * @return anim composer */ public AnimComposer getAnimComposer() { return anim; @@ -139,7 +144,7 @@ public AnimComposer getAnimComposer() { /** * Get the {@link SkinningControl} this mask is for. - * @return + * @return skinning control */ public SkinningControl getSkinningControl() { return skin; @@ -190,9 +195,9 @@ else if (lyr.getMask().contains(target)) { /** * Creates an {@code AlertArmatureMask} for all joints. - * @param layer - * @param spatial - * @return + * @param layer layer the returned mask is, or will be, be assigned to + * @param spatial spatial containing anim composer and skinning control + * @return new mask */ public static AlertArmatureMask all(String layer, Spatial spatial) { return new AlertArmatureMask(layer, spatial).addAll(); @@ -200,10 +205,10 @@ public static AlertArmatureMask all(String layer, Spatial spatial) { /** * Creates an {@code AlertArmatureMask} for all joints. - * @param layer - * @param anim - * @param skin - * @return + * @param layer layer the returned mask is, or will be, assigned to + * @param anim anim composer + * @param skin skinning control + * @return new mask */ public static AlertArmatureMask all(String layer, AnimComposer anim, SkinningControl skin) { return new AlertArmatureMask(layer, anim, skin).addAll(); From 90e6cd81feed8aa487998f23199f8f67a3cc51ed Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:48:49 -0500 Subject: [PATCH 07/80] renamed mask --- ...ask.java => SingleLayerInfluenceMask.java} | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) rename jme3-core/src/main/java/com/jme3/anim/{AlertArmatureMask.java => SingleLayerInfluenceMask.java} (85%) diff --git a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java b/jme3-core/src/main/java/com/jme3/anim/SingleLayerInfluenceMask.java similarity index 85% rename from jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java rename to jme3-core/src/main/java/com/jme3/anim/SingleLayerInfluenceMask.java index 0af9f13779..935cb99abd 100644 --- a/jme3-core/src/main/java/com/jme3/anim/AlertArmatureMask.java +++ b/jme3-core/src/main/java/com/jme3/anim/SingleLayerInfluenceMask.java @@ -39,7 +39,7 @@ * * @author codex */ -public class AlertArmatureMask extends ArmatureMask { +public class SingleLayerInfluenceMask extends ArmatureMask { private final String layer; private final AnimComposer anim; @@ -52,7 +52,7 @@ public class AlertArmatureMask extends ArmatureMask { * can use {@link makeLayer} to ensure this. * @param spatial Spatial containing necessary controls ({@link AnimComposer} and {@link SkinningControl}) */ - public AlertArmatureMask(String layer, Spatial spatial) { + public SingleLayerInfluenceMask(String layer, Spatial spatial) { super(); this.layer = layer; anim = spatial.getControl(AnimComposer.class); @@ -65,7 +65,7 @@ public AlertArmatureMask(String layer, Spatial spatial) { * @param anim anim composer this mask is assigned to * @param skin skinning control complimenting the anim composer. */ - public AlertArmatureMask(String layer, AnimComposer anim, SkinningControl skin) { + public SingleLayerInfluenceMask(String layer, AnimComposer anim, SkinningControl skin) { super(); this.layer = layer; this.anim = anim; @@ -83,7 +83,7 @@ public void makeLayer() { * Adds all joints to this mask. * @return this.instance */ - public AlertArmatureMask addAll() { + public SingleLayerInfluenceMask addAll() { for (Joint j : skin.getArmature().getJointList()) { super.addBones(skin.getArmature(), j.getName()); } @@ -95,7 +95,7 @@ public AlertArmatureMask addAll() { * @param joint * @return this instance */ - public AlertArmatureMask addFromJoint(String joint) { + public SingleLayerInfluenceMask addFromJoint(String joint) { super.addFromJoint(skin.getArmature(), joint); return this; } @@ -105,7 +105,7 @@ public AlertArmatureMask addFromJoint(String joint) { * @param joints * @return this instance */ - public AlertArmatureMask addJoints(String... joints) { + public SingleLayerInfluenceMask addJoints(String... joints) { super.addBones(skin.getArmature(), joints); return this; } @@ -118,7 +118,7 @@ public AlertArmatureMask addJoints(String... joints) { * @param check * @return this instance */ - public AlertArmatureMask setCheckUpperLayers(boolean check) { + public SingleLayerInfluenceMask setCheckUpperLayers(boolean check) { checkUpperLayers = check; return this; } @@ -180,9 +180,9 @@ private boolean isAffectedByUpperLayers(Object target) { AnimLayer lyr = anim.getLayer(name); // if there is no action playing, no joints are used, so we can skip if (lyr.getCurrentAction() == null) continue; - if (lyr.getMask() instanceof AlertArmatureMask) { + if (lyr.getMask() instanceof SingleLayerInfluenceMask) { // dodge some needless recursion by calling a simpler method - if (((AlertArmatureMask)lyr.getMask()).simpleContains(target)) { + if (((SingleLayerInfluenceMask)lyr.getMask()).simpleContains(target)) { return true; } } @@ -194,24 +194,24 @@ else if (lyr.getMask().contains(target)) { } /** - * Creates an {@code AlertArmatureMask} for all joints. + * Creates an {@code SingleLayerInfluenceMask} for all joints. * @param layer layer the returned mask is, or will be, be assigned to * @param spatial spatial containing anim composer and skinning control * @return new mask */ - public static AlertArmatureMask all(String layer, Spatial spatial) { - return new AlertArmatureMask(layer, spatial).addAll(); + public static SingleLayerInfluenceMask all(String layer, Spatial spatial) { + return new SingleLayerInfluenceMask(layer, spatial).addAll(); } /** - * Creates an {@code AlertArmatureMask} for all joints. + * Creates an {@code SingleLayerInfluenceMask} for all joints. * @param layer layer the returned mask is, or will be, assigned to * @param anim anim composer * @param skin skinning control * @return new mask */ - public static AlertArmatureMask all(String layer, AnimComposer anim, SkinningControl skin) { - return new AlertArmatureMask(layer, anim, skin).addAll(); + public static SingleLayerInfluenceMask all(String layer, AnimComposer anim, SkinningControl skin) { + return new SingleLayerInfluenceMask(layer, anim, skin).addAll(); } } From 0c2d187fda2757bac3722abaf8ee1c01ee7e94fd Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 23 Jun 2025 23:07:35 -0400 Subject: [PATCH 08/80] create vulkan context and prototyped vulkan instance creation in a test class --- gradle/libs.versions.toml | 1 + jme3-core/build.gradle | 49 ++ .../jme3/renderer/vulkan/VulkanRenderer.java | 10 + .../com/jme3/renderer/vulkan/VulkanUtils.java | 113 +++++ .../main/java/com/jme3/system/JmeContext.java | 19 +- jme3-examples/build.gradle | 4 +- .../main/java/jme3test/vulkan/VulkanTest.java | 215 +++++++++ jme3-lwjgl3/build.gradle | 1 + .../com/jme3/input/lwjgl/GlfwKeyInput.java | 7 +- .../com/jme3/input/lwjgl/GlfwMouseInput.java | 8 +- .../main/java/com/jme3/system/GlfwWindow.java | 17 + .../com/jme3/system/{lwjgl => }/Sync.java | 4 +- .../{lwjgl => }/WindowSizeListener.java | 4 +- .../com/jme3/system/lwjgl/LwjglWindow.java | 14 +- .../jme3/system/vulkan/DeviceEvaluator.java | 11 + .../system/vulkan/LwjglVulkanContext.java | 455 ++++++++++++++++++ 16 files changed, 911 insertions(+), 21 deletions(-) create mode 100644 jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanRenderer.java create mode 100644 jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java create mode 100644 jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/system/GlfwWindow.java rename jme3-lwjgl3/src/main/java/com/jme3/system/{lwjgl => }/Sync.java (99%) rename jme3-lwjgl3/src/main/java/com/jme3/system/{lwjgl => }/WindowSizeListener.java (97%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/DeviceEvaluator.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6b56daa8a7..fabebdcc8a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,6 +34,7 @@ lwjgl3-opencl = { module = "org.lwjgl:lwjgl-opencl", version.ref = "lwjgl3" lwjgl3-opengl = { module = "org.lwjgl:lwjgl-opengl", version.ref = "lwjgl3" } lwjgl3-openvr = { module = "org.lwjgl:lwjgl-openvr", version.ref = "lwjgl3" } lwjgl3-ovr = { module = "org.lwjgl:lwjgl-ovr", version.ref = "lwjgl3" } +lwjgl3-vulkan = { module = "org.lwjgl:lwjgl-vulkan", version.ref = "lwjgl3" } mokito-core = "org.mockito:mockito-core:3.12.4" diff --git a/jme3-core/build.gradle b/jme3-core/build.gradle index 58ac362921..b741fc18cc 100644 --- a/jme3-core/build.gradle +++ b/jme3-core/build.gradle @@ -19,6 +19,55 @@ dependencies { testRuntimeOnly project(':jme3-testdata') testImplementation project(':jme3-desktop') testRuntimeOnly project(':jme3-plugins') + + // Use LWJGL3 directly in core. This destroys LWJGL2 and JOGL compatibility. + api (libs.lwjgl3.awt) { + exclude group: 'org.lwjgl', module: 'lwjgl' + } + api libs.lwjgl3.base + api libs.lwjgl3.glfw + api libs.lwjgl3.jawt + api libs.lwjgl3.jemalloc + api libs.lwjgl3.openal + api libs.lwjgl3.opencl + api libs.lwjgl3.opengl + api libs.lwjgl3.vulkan + runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-windows') }) + runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-windows-x86') }) + runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-linux') }) + runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-linux-arm32') }) + runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-linux-arm64') }) + runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-macos') }) + runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-macos-arm64') }) + runtimeOnly(variantOf(libs.lwjgl3.glfw){ classifier('natives-windows') }) + runtimeOnly(variantOf(libs.lwjgl3.glfw){ classifier('natives-windows-x86') }) + runtimeOnly(variantOf(libs.lwjgl3.glfw){ classifier('natives-linux') }) + runtimeOnly(variantOf(libs.lwjgl3.glfw){ classifier('natives-linux-arm32') }) + runtimeOnly(variantOf(libs.lwjgl3.glfw){ classifier('natives-linux-arm64') }) + runtimeOnly(variantOf(libs.lwjgl3.glfw){ classifier('natives-macos') }) + runtimeOnly(variantOf(libs.lwjgl3.glfw){ classifier('natives-macos-arm64') }) + runtimeOnly(variantOf(libs.lwjgl3.jemalloc){ classifier('natives-windows') }) + runtimeOnly(variantOf(libs.lwjgl3.jemalloc){ classifier('natives-windows-x86') }) + runtimeOnly(variantOf(libs.lwjgl3.jemalloc){ classifier('natives-linux') }) + runtimeOnly(variantOf(libs.lwjgl3.jemalloc){ classifier('natives-linux-arm32') }) + runtimeOnly(variantOf(libs.lwjgl3.jemalloc){ classifier('natives-linux-arm64') }) + runtimeOnly(variantOf(libs.lwjgl3.jemalloc){ classifier('natives-macos') }) + runtimeOnly(variantOf(libs.lwjgl3.jemalloc){ classifier('natives-macos-arm64') }) + runtimeOnly(variantOf(libs.lwjgl3.opengl){ classifier('natives-windows') }) + runtimeOnly(variantOf(libs.lwjgl3.opengl){ classifier('natives-windows-x86') }) + runtimeOnly(variantOf(libs.lwjgl3.opengl){ classifier('natives-linux') }) + runtimeOnly(variantOf(libs.lwjgl3.opengl){ classifier('natives-linux-arm32') }) + runtimeOnly(variantOf(libs.lwjgl3.opengl){ classifier('natives-linux-arm64') }) + runtimeOnly(variantOf(libs.lwjgl3.opengl){ classifier('natives-macos') }) + runtimeOnly(variantOf(libs.lwjgl3.opengl){ classifier('natives-macos-arm64') }) + runtimeOnly(variantOf(libs.lwjgl3.openal){ classifier('natives-windows') }) + runtimeOnly(variantOf(libs.lwjgl3.openal){ classifier('natives-windows-x86') }) + runtimeOnly(variantOf(libs.lwjgl3.openal){ classifier('natives-linux') }) + runtimeOnly(variantOf(libs.lwjgl3.openal){ classifier('natives-linux-arm32') }) + runtimeOnly(variantOf(libs.lwjgl3.openal){ classifier('natives-linux-arm64') }) + runtimeOnly(variantOf(libs.lwjgl3.openal){ classifier('natives-macos') }) + runtimeOnly(variantOf(libs.lwjgl3.openal){ classifier('natives-macos-arm64') }) + } task updateVersionPropertiesFile { diff --git a/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanRenderer.java new file mode 100644 index 0000000000..a41424268c --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanRenderer.java @@ -0,0 +1,10 @@ +package com.jme3.renderer.vulkan; + +import com.jme3.system.NullRenderer; + +/** + * Temporary placeholder. + */ +public class VulkanRenderer extends NullRenderer { + +} diff --git a/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java b/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java new file mode 100644 index 0000000000..e3992ac3a3 --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java @@ -0,0 +1,113 @@ +package com.jme3.renderer.vulkan; + +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkInstance; + +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.util.Collection; +import java.util.Iterator; +import java.util.function.*; +import java.util.stream.Stream; + +import static org.lwjgl.vulkan.VK10.*; + +public class VulkanUtils { + + public static void check(int vulkanCode, String message) { + if (vulkanCode != VK_SUCCESS) { + throw new RuntimeException(message); + } + } + + public static T enumerateBuffer(MemoryStack stack, IntFunction factory, BiConsumer fetch) { + IntBuffer count = stack.callocInt(1); + fetch.accept(count, null); + T buffer = factory.apply(count.get(0)); + fetch.accept(count, buffer); + return buffer; + } + + public static PointerBuffer toPointers(MemoryStack stack, Stream stream, int count, Function toBytes) { + PointerBuffer ptrs = stack.mallocPointer(count); + stream.map(toBytes).forEach(ptrs::put); + return ptrs.rewind(); + } + + public static long getPointer(MemoryStack stack, Consumer action) { + PointerBuffer ptr = stack.mallocPointer(1); + action.accept(ptr); + return ptr.get(0); + } + + public static long getLong(MemoryStack stack, Consumer action) { + LongBuffer l = stack.mallocLong(1); + action.accept(l); + return l.get(0); + } + + public static PointerBuffer gatherPointers(MemoryStack stack, Collection pointers) { + int size = 0; + for (PointerBuffer p : pointers) { + size += p.limit(); + } + PointerBuffer gather = stack.mallocPointer(size); + for (PointerBuffer p : pointers) { + gather.put(p); + } + return gather.rewind(); + } + + public static void printListed(String label, Iterable list, Function toString) { + System.out.println(label); + for (T o : list) { + System.out.println(" " + toString.apply(o)); + } + } + + public static void verifyExtensionMethod(VkInstance instance, String name) { + if (vkGetInstanceProcAddr(instance, name) == MemoryUtil.NULL) { + throw new NullPointerException("Extension method " + name + " does not exist."); + } + } + + public static NativeIterator iteratePointers(PointerBuffer buffer, LongFunction func) { + return new NativeIterator<>(buffer, func); + } + + public static boolean isBitSet(int n, int bit) { + return (n & bit) > 0; + } + + public static class NativeIterator implements Iterable, Iterator { + + private final PointerBuffer pointers; + private final LongFunction func; + private int index = 0; + + public NativeIterator(PointerBuffer pointers, LongFunction func) { + this.pointers = pointers; + this.func = func; + } + + @Override + public Iterator iterator() { + return this; + } + + @Override + public boolean hasNext() { + return index < pointers.limit(); + } + + @Override + public T next() { + return func.apply(pointers.get(index++)); + } + + } + +} diff --git a/jme3-core/src/main/java/com/jme3/system/JmeContext.java b/jme3-core/src/main/java/com/jme3/system/JmeContext.java index c2ffe912ef..e162fc399a 100644 --- a/jme3-core/src/main/java/com/jme3/system/JmeContext.java +++ b/jme3-core/src/main/java/com/jme3/system/JmeContext.java @@ -44,7 +44,7 @@ public interface JmeContext { /** * The type of context. */ - public enum Type { + enum Type { /** * A display can represent a windowed or a fullscreen-exclusive display. * If windowed, the graphics are rendered to a new on-screen surface @@ -79,6 +79,23 @@ public enum Type { Headless, } + /** + * Enum specifying the backend to use. + */ + enum Backend { + + /** + * Specifies the OpenGL backend. + */ + OpenGL, + + /** + * Specifies the Vulkan backend. + */ + Vulkan; + + } + /** * @return The type of the context. */ diff --git a/jme3-examples/build.gradle b/jme3-examples/build.gradle index 4f5d41b501..75d4e8c098 100644 --- a/jme3-examples/build.gradle +++ b/jme3-examples/build.gradle @@ -19,8 +19,8 @@ dependencies { implementation project(':jme3-effects') implementation project(':jme3-jbullet') implementation project(':jme3-jogg') - implementation project(':jme3-lwjgl') -// implementation project(':jme3-lwjgl3') +// implementation project(':jme3-lwjgl') + implementation project(':jme3-lwjgl3') implementation project(':jme3-networking') implementation project(':jme3-niftygui') implementation project(':jme3-plugins') diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java new file mode 100644 index 0000000000..f9baced025 --- /dev/null +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java @@ -0,0 +1,215 @@ +package jme3test.vulkan; + +import com.jme3.app.SimpleApplication; +import com.jme3.system.AppSettings; +import com.jme3.system.vulkan.DeviceEvaluator; +import com.jme3.system.vulkan.LwjglVulkanContext; +import org.lwjgl.PointerBuffer; +import org.lwjgl.glfw.GLFWVulkan; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.*; + +import java.util.*; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.system.MemoryUtil.NULL; +import static org.lwjgl.vulkan.EXTDebugUtils.*; +import static org.lwjgl.vulkan.VK14.*; + +public class VulkanTest extends SimpleApplication { + + private static final Logger LOG = Logger.getLogger(VulkanTest.class.getName()); + + private VkInstance instance; + private VkPhysicalDevice device; + private QueueFamilies queues; + private final Collection extensions = new ArrayList<>(); + private final List layers = new ArrayList<>(); + private final Collection deviceEvaluators = new ArrayList<>(); + private final VkDebugUtilsMessengerCallbackEXT debugCallback = new VulkanDebugCallback(); + private long debugMessenger = NULL; + + public static void main(String[] args) { + VulkanTest app = new VulkanTest(); + AppSettings settings = new AppSettings(true); + settings.setWidth(800); + settings.setHeight(800); + settings.setRenderer("CUSTOM" + LwjglVulkanContext.class.getName()); + app.setSettings(settings); + app.start(); + } + + @Override + public void simpleInitApp() { + // basic validation layer from the Vulkan SDK + //layers.add("VK_LAYER_KHRONOS_validation"); + try (MemoryStack stack = MemoryStack.stackPush()) { + createInstance(stack); + createDebugMessenger(stack); + device = findPhysicalDevice(stack); + queues = populateQueueFamily(stack, device); + } + } + + @Override + public void stop() { + LOG.info("Destroying vulkan instance."); + if (debugMessenger != NULL) { + verifyExtensionMethod(instance, "vkDestroyDebugUtilsMessengerEXT"); + vkDestroyDebugUtilsMessengerEXT(instance, debugMessenger, null); + } + if (instance != null) { + vkDestroyInstance(instance, null); + } + super.stop(); + } + + private void createInstance(MemoryStack stack) { + VkApplicationInfo app = VkApplicationInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_APPLICATION_INFO) + .pApplicationName(stack.ASCII(context.getSettings().getTitle())) + .applicationVersion(VK_MAKE_VERSION(1, 0, 0)) + .pEngineName(stack.ASCII("JMonkeyEngine")) + .engineVersion(VK_MAKE_VERSION(3, 9, 0)) + .apiVersion(VK_API_VERSION_1_4); + VkInstanceCreateInfo create = VkInstanceCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO) + .pNext(createDebugger(stack, debugCallback)) + .pApplicationInfo(app); + if (!layers.isEmpty()) { + verifyValidationLayerSupport(stack); + create.ppEnabledLayerNames(toPointers(stack, layers.stream(), layers.size(), stack::UTF8)); + } + addExtension(Objects.requireNonNull(GLFWVulkan.glfwGetRequiredInstanceExtensions())); + addExtension(stack, VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + create.ppEnabledExtensionNames(gatherPointers(stack, extensions)); + instance = new VkInstance(getPointer(stack, + ptr -> check(vkCreateInstance(create, null, ptr), "Failed to create instance.")), create); + } + + private void createDebugMessenger(MemoryStack stack) { + verifyExtensionMethod(instance, "vkCreateDebugUtilsMessengerEXT"); + debugMessenger = getLong(stack, ptr -> vkCreateDebugUtilsMessengerEXT(instance, createDebugger(stack, debugCallback), null, ptr)); + } + + private VkPhysicalDevice findPhysicalDevice(MemoryStack stack) { + PointerBuffer devices = enumerateBuffer(stack, stack::mallocPointer, (count, buffer) -> vkEnumeratePhysicalDevices(instance, count, buffer)); + VkPhysicalDevice device = null; + float score = 0f; + for (VkPhysicalDevice d : iteratePointers(devices, p -> new VkPhysicalDevice(p, instance))) { + Float s = evaluateDevice(stack, d); + if (s != null && (device == null || s > score) && populateQueueFamily(stack, d).isComplete()) { + device = d; + score = s; + } + } + if (device == null) { + throw new NullPointerException("Failed to find suitable GPU."); + } + return device; + } + + private Float evaluateDevice(MemoryStack stack, VkPhysicalDevice device) { + if (deviceEvaluators.isEmpty()) { + return 0f; + } + VkPhysicalDeviceProperties props = VkPhysicalDeviceProperties.malloc(stack); + VkPhysicalDeviceFeatures features = VkPhysicalDeviceFeatures.malloc(stack); + vkGetPhysicalDeviceProperties(device, props); + vkGetPhysicalDeviceFeatures(device, features); + float score = 0f; + for (DeviceEvaluator e : deviceEvaluators) { + Float s = e.evaluateDevice(device, props, features); + if (s == null) { + return null; + } + score += s; + } + return score; + } + + private QueueFamilies populateQueueFamily(MemoryStack stack, VkPhysicalDevice device) { + QueueFamilies fams = new QueueFamilies(); + VkQueueFamilyProperties.Buffer props = enumerateBuffer(stack, VkQueueFamilyProperties::malloc, + (count, buffer) -> vkGetPhysicalDeviceQueueFamilyProperties(device, count, buffer)); + int i = 0; + for (VkQueueFamilyProperties p : props) { + if (isBitSet(p.queueFlags(), VK_QUEUE_GRAPHICS_BIT)) { + fams.graphics = i; + } + i++; + } + return fams; + } + + private void verifyValidationLayerSupport(MemoryStack stack) { + VkLayerProperties.Buffer supported = enumerateBuffer(stack, n -> VkLayerProperties.malloc(n, stack), + VK10::vkEnumerateInstanceLayerProperties); + requestLoop: for (String r : layers) { + for (VkLayerProperties l : supported) { + if (r.equals(l.layerNameString())) { + continue requestLoop; + } + } + throw new NullPointerException("Validation layer " + r + " is not available."); + } + } + + private VkDebugUtilsMessengerCreateInfoEXT createDebugger(MemoryStack stack, VkDebugUtilsMessengerCallbackEXT callback) { + return VkDebugUtilsMessengerCreateInfoEXT.malloc(stack) + .sType(VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) + .messageSeverity(VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT + | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) + .messageType(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) + .pfnUserCallback(callback); + } + + private void addExtension(MemoryStack stack, String ext) { + extensions.add(stack.mallocPointer(1).put(stack.UTF8(ext)).rewind()); + } + + private void addExtension(PointerBuffer ext) { + extensions.add(ext); + } + + private static class QueueFamilies { + + public Integer graphics; + + public boolean isComplete() { + return graphics != null; + } + + } + + private static class VulkanDebugCallback extends VkDebugUtilsMessengerCallbackEXT { + + @Override + public int invoke(int messageSeverity, int messageTypes, long pCallbackData, long pUserData) { + try (VkDebugUtilsMessengerCallbackDataEXT data = VkDebugUtilsMessengerCallbackDataEXT.create(pCallbackData)) { + LOG.log(getLoggingLevel(messageSeverity), data.pMessageString()); + } + return VK_FALSE; // always return false, true is only really used for testing validation layers + } + + public Level getLoggingLevel(int messageSeverity) { + switch (messageSeverity) { + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: + return Level.SEVERE; + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: + return Level.WARNING; + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: + return Level.INFO; + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: + return Level.FINE; + default: throw new UnsupportedOperationException("Unsupported severity bit: " + + Integer.numberOfTrailingZeros(Integer.highestOneBit(messageSeverity))); + } + } + + } + +} diff --git a/jme3-lwjgl3/build.gradle b/jme3-lwjgl3/build.gradle index 5e929e8c2f..82a83ac21c 100644 --- a/jme3-lwjgl3/build.gradle +++ b/jme3-lwjgl3/build.gradle @@ -12,6 +12,7 @@ dependencies { api libs.lwjgl3.openal api libs.lwjgl3.opencl api libs.lwjgl3.opengl + api libs.lwjgl3.vulkan runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-windows') }) runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-windows-x86') }) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/GlfwKeyInput.java b/jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/GlfwKeyInput.java index 980b07527e..a0662f1ff3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/GlfwKeyInput.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/GlfwKeyInput.java @@ -35,6 +35,7 @@ import com.jme3.input.KeyInput; import com.jme3.input.RawInputListener; import com.jme3.input.event.KeyInputEvent; +import com.jme3.system.GlfwWindow; import com.jme3.system.lwjgl.LwjglWindow; import java.util.ArrayDeque; import java.util.Queue; @@ -56,9 +57,9 @@ public class GlfwKeyInput implements KeyInput { private final Queue keyInputEvents = new ArrayDeque<>(); /** - * The LWJGL context. + * The GLFW window. */ - private final LwjglWindow context; + private final GlfwWindow context; /** * The key callback. @@ -77,7 +78,7 @@ public class GlfwKeyInput implements KeyInput { private boolean initialized; - public GlfwKeyInput(final LwjglWindow context) { + public GlfwKeyInput(final GlfwWindow context) { this.context = context; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/GlfwMouseInput.java b/jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/GlfwMouseInput.java index 1aba44d570..94562060f1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/GlfwMouseInput.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/GlfwMouseInput.java @@ -37,8 +37,8 @@ import com.jme3.input.event.MouseButtonEvent; import com.jme3.input.event.MouseMotionEvent; import com.jme3.math.Vector2f; -import com.jme3.system.lwjgl.LwjglWindow; -import com.jme3.system.lwjgl.WindowSizeListener; +import com.jme3.system.GlfwWindow; +import com.jme3.system.WindowSizeListener; import com.jme3.util.BufferUtils; import java.nio.ByteBuffer; import java.nio.IntBuffer; @@ -114,7 +114,7 @@ private static ByteBuffer transformCursorImage(final IntBuffer imageData, final private final Queue mouseMotionEvents = new ArrayDeque<>(); private final Queue mouseButtonEvents = new ArrayDeque<>(); - private final LwjglWindow context; + private final GlfwWindow context; private WindowSizeListener windowSizeListener; private RawInputListener listener; @@ -138,7 +138,7 @@ private static ByteBuffer transformCursorImage(final IntBuffer imageData, final private boolean initialized; private final Vector2f inputScale = new Vector2f(); - public GlfwMouseInput(final LwjglWindow context) { + public GlfwMouseInput(final GlfwWindow context) { this.context = context; this.cursorVisible = true; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/GlfwWindow.java b/jme3-lwjgl3/src/main/java/com/jme3/system/GlfwWindow.java new file mode 100644 index 0000000000..e18f38f0d8 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/system/GlfwWindow.java @@ -0,0 +1,17 @@ +package com.jme3.system; + +import com.jme3.math.Vector2f; + +public interface GlfwWindow { + + long getWindowHandle(); + + Vector2f getWindowContentScale(Vector2f store); + + boolean isRenderable(); + + void registerWindowSizeListener(WindowSizeListener listener); + + void removeWindowSizeListener(WindowSizeListener listener); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/Sync.java b/jme3-lwjgl3/src/main/java/com/jme3/system/Sync.java similarity index 99% rename from jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/Sync.java rename to jme3-lwjgl3/src/main/java/com/jme3/system/Sync.java index 3161f00a9b..6c0200c5ca 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/Sync.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/system/Sync.java @@ -29,7 +29,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package com.jme3.system.lwjgl; +package com.jme3.system; /** * A highly accurate sync method that continually adapts to the system @@ -38,7 +38,7 @@ * @author Riven * @author kappaOne */ -class Sync { +public class Sync { /** number of nanoseconds in a second */ private static final long NANOS_IN_SECOND = 1000L * 1000L * 1000L; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/WindowSizeListener.java b/jme3-lwjgl3/src/main/java/com/jme3/system/WindowSizeListener.java similarity index 97% rename from jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/WindowSizeListener.java rename to jme3-lwjgl3/src/main/java/com/jme3/system/WindowSizeListener.java index 2d2105b802..b3b687f0fc 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/WindowSizeListener.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/system/WindowSizeListener.java @@ -29,7 +29,9 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package com.jme3.system.lwjgl; +package com.jme3.system; + +import com.jme3.system.lwjgl.LwjglWindow; /** * Listen to window size changes. Note, GLFW does not support registering multiple callbacks diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglWindow.java b/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglWindow.java index 03085401a7..6a24633944 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglWindow.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglWindow.java @@ -43,21 +43,15 @@ import com.jme3.input.lwjgl.GlfwKeyInput; import com.jme3.input.lwjgl.GlfwMouseInput; import com.jme3.math.Vector2f; -import com.jme3.system.AppSettings; -import com.jme3.system.Displays; -import com.jme3.system.JmeContext; -import com.jme3.system.JmeSystem; -import com.jme3.system.NanoTimer; +import com.jme3.system.*; import com.jme3.util.BufferUtils; import com.jme3.util.SafeArrayList; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.nio.ByteBuffer; -import java.nio.IntBuffer; import java.util.EnumSet; import java.util.HashMap; import java.util.Map; -import java.util.Objects; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; import java.util.logging.Logger; @@ -76,7 +70,7 @@ * * @author Daniel Johansson */ -public abstract class LwjglWindow extends LwjglContext implements Runnable { +public abstract class LwjglWindow extends LwjglContext implements Runnable, GlfwWindow { private static final Logger LOGGER = Logger.getLogger(LwjglWindow.class.getName()); @@ -212,6 +206,7 @@ public LwjglWindow(final JmeContext.Type type) { * * @param listener The WindowSizeListener to register. */ + @Override public void registerWindowSizeListener(WindowSizeListener listener) { windowSizeListeners.add(listener); } @@ -221,6 +216,7 @@ public void registerWindowSizeListener(WindowSizeListener listener) { * * @param listener The WindowSizeListener to remove. */ + @Override public void removeWindowSizeListener(WindowSizeListener listener) { windowSizeListeners.remove(listener); } @@ -863,6 +859,7 @@ public void destroy(boolean waitFor) { } } + @Override public long getWindowHandle() { return window; } @@ -880,6 +877,7 @@ public long getWindowHandle() { * @return The window content scale * @see Window content scale */ + @Override public Vector2f getWindowContentScale(Vector2f store) { if (store == null) store = new Vector2f(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/DeviceEvaluator.java b/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/DeviceEvaluator.java new file mode 100644 index 0000000000..2cde580774 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/DeviceEvaluator.java @@ -0,0 +1,11 @@ +package com.jme3.system.vulkan; + +import org.lwjgl.vulkan.VkPhysicalDevice; +import org.lwjgl.vulkan.VkPhysicalDeviceFeatures; +import org.lwjgl.vulkan.VkPhysicalDeviceProperties; + +public interface DeviceEvaluator { + + Float evaluateDevice(VkPhysicalDevice device, VkPhysicalDeviceProperties props, VkPhysicalDeviceFeatures features); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java b/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java new file mode 100644 index 0000000000..406b9c667d --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java @@ -0,0 +1,455 @@ +package com.jme3.system.vulkan; + +import com.jme3.input.JoyInput; +import com.jme3.input.KeyInput; +import com.jme3.input.MouseInput; +import com.jme3.input.TouchInput; +import com.jme3.input.lwjgl.GlfwJoystickInput; +import com.jme3.input.lwjgl.GlfwKeyInput; +import com.jme3.input.lwjgl.GlfwMouseInput; +import com.jme3.math.Vector2f; +import com.jme3.opencl.Context; +import com.jme3.renderer.Renderer; +import com.jme3.renderer.vulkan.VulkanRenderer; +import com.jme3.system.*; +import com.jme3.system.Sync; +import com.jme3.system.WindowSizeListener; +import org.lwjgl.PointerBuffer; +import org.lwjgl.glfw.*; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static org.lwjgl.system.MemoryUtil.NULL; +import static org.lwjgl.glfw.GLFW.*; + +public class LwjglVulkanContext implements JmeContext, GlfwWindow, Runnable { + + private static final Logger LOGGER = Logger.getLogger(LwjglVulkanContext.class.getName()); + + private long window = NULL; + private SystemListener engine; + private VulkanRenderer renderer; + private Thread engineThread; + private Timer engineTimer; + private final AtomicBoolean created = new AtomicBoolean(false); + private final AtomicBoolean destroy = new AtomicBoolean(false); + private final AtomicBoolean restart = new AtomicBoolean(false); + private final AtomicBoolean focused = new AtomicBoolean(true); + private final AppSettings settings = new AppSettings(true); + private final Collection sizeListeners = new ArrayList<>(); + private final Vector2f windowScale = new Vector2f(1, 1); + private int frameBufferWidth, frameBufferHeight; + + private GLFWErrorCallback errorCallback; + private GLFWWindowFocusCallback focusCallback; + private GLFWWindowSizeCallback sizeCallback; + private GLFWFramebufferSizeCallback fbSizeCallback; + + private GlfwMouseInput mouseInput; + private GlfwKeyInput keyInput; + private JoyInput joyInput; + + private final int[] width = new int[1]; + private final int[] height = new int[1]; + + private boolean autoFlush = true; + + @Override + public void run() { + engineInitialize(); + engineLoop(); + engineTerminate(); + } + + @Override + public void create(boolean waitFor) { + (engineThread = new Thread(this, getClass().getSimpleName())).start(); + if (waitFor) { + waitForContextLifeEvent(true); + } + } + + protected void waitForContextLifeEvent(boolean creation) { + synchronized (created) { + while (created.get() != creation) try { + created.wait(); + } catch (InterruptedException ignored) {} + } + } + + protected void engineInitialize() { + glfwInitialize(); + rendererInitialize(); + engineTimer = new NanoTimer(); + engine.initialize(); + synchronized (created) { + created.set(true); + created.notifyAll(); + } + } + + protected void glfwInitialize() { + //if (!GLFWVulkan.glfwVulkanSupported()) { + // throw new NullPointerException("Hardware does not support Vulkan."); + //} + glfwSetErrorCallback(errorCallback = new GLFWErrorCallback() { + @Override + public void invoke(int error, long description) { + final String message = GLFWErrorCallback.getDescription(description); + engine.handleError(message, new Exception(message)); + } + }); + if (glfwPlatformSupported(GLFW_PLATFORM_WAYLAND)) { + // Disables the libdecor bar when creating a fullscreen context + // https://www.glfw.org/docs/latest/intro_guide.html#init_hints_wayland + glfwInitHint(GLFW_WAYLAND_LIBDECOR, settings.isFullscreen() ? GLFW_WAYLAND_DISABLE_LIBDECOR : GLFW_WAYLAND_PREFER_LIBDECOR); + } + glfwInit(); + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); + window = glfwCreateWindow(getSettings().getWidth(), getSettings().getHeight(), getSettings().getTitle(), NULL, NULL); + glfwSetWindowFocusCallback(window, focusCallback = new GLFWWindowFocusCallback() { + @Override + public void invoke(long window, boolean focus) { + if (focus != focused.get()) { + if (!focus) { + engine.loseFocus(); + } else { + engine.gainFocus(); + engineTimer.reset(); + } + focused.set(focus); + } + } + }); + glfwSetWindowSizeCallback(window, sizeCallback = new GLFWWindowSizeCallback() { + @Override + public void invoke(final long window, final int width, final int height) { + updateSizes(); + } + }); + glfwSetFramebufferSizeCallback(window, fbSizeCallback = new GLFWFramebufferSizeCallback() { + @Override + public void invoke(final long window, final int width, final int height) { + updateSizes(); + } + }); + } + + protected void rendererInitialize() { + renderer = new VulkanRenderer(); + } + + protected void engineLoop() { + while (true) { + if (restart.get()) { + restartContext(); + } + engine.update(); + if (renderer != null) { + renderer.postFrame(); + } + syncFrames(); + glfwPollEvents(); + if (destroy.get()) { + break; + } + if (glfwWindowShouldClose(window)) { + engine.requestClose(false); + } + } + } + + protected void syncFrames() { + if (autoFlush) { + Sync.sync(getSettings().getFrameRate()); + } else { + Sync.sync(20); + } + } + + protected void engineTerminate() { + engine.destroy(); + glfwDestroyWindow(window); + glfwTerminate(); + LOGGER.fine("Display destroyed."); + } + + protected void updateSizes() { + // framebuffer size (resolution) may differ from window size (e.g. HiDPI) + // resize window informants + glfwGetWindowSize(window, width, height); + int w = Math.max(width[0], 1); + int h = Math.max(height[0], 1); + if (settings.getWindowWidth() != w || settings.getWindowHeight() != h) { + settings.setWindowSize(w, h); + for (WindowSizeListener l : sizeListeners) { + l.onWindowSizeChanged(w, h); + } + } + // resize framebuffer informants + glfwGetFramebufferSize(window, width, height); + if (width[0] != frameBufferWidth || height[0] != frameBufferHeight) { + settings.setResolution(width[0], height[0]); + engine.reshape(width[0], height[0]); + frameBufferWidth = width[0]; + frameBufferHeight = height[0]; + } + // rescale engine + float xScale = (float)width[0] / w; + float yScale = (float)height[0] / h; + if (windowScale.x != xScale || windowScale.y != yScale) { + engine.rescale(xScale, yScale); + windowScale.set(xScale, yScale); + } + } + + protected void restartContext() { + try { + glfwDestroy(); + glfwInitialize(); + } catch (Exception ex) { + LOGGER.log(Level.SEVERE, "Failed to set display settings!", ex); + } + // Reinitialize context flags and such + rendererInitialize(); + + // We need to reinit the mouse and keyboard input as they are tied to a window handle + if (keyInput != null && keyInput.isInitialized()) { + keyInput.resetContext(); + } + if (mouseInput != null && mouseInput.isInitialized()) { + mouseInput.resetContext(); + } + + LOGGER.fine("Display restarted."); + } + + protected void glfwDestroy() { + try { + if (renderer != null) { + renderer.cleanup(); + } + if (errorCallback != null) { + // We need to specifically set this to null as we might set a new callback before we reinit GLFW + glfwSetErrorCallback(null); + errorCallback.close(); + errorCallback = null; + } + if (sizeCallback != null) { + sizeCallback.close(); + sizeCallback = null; + } + if (fbSizeCallback != null) { + fbSizeCallback.close(); + fbSizeCallback = null; + } + if (focusCallback != null) { + focusCallback.close(); + focusCallback = null; + } + if (window != NULL) { + glfwDestroyWindow(window); + window = NULL; + } + } catch (final Exception ex) { + engine.handleError("Failed to destroy context", ex); + } + } + + @Override + public Type getType() { + return Type.Display; + } + + @Override + public void setSettings(AppSettings settings) { + this.settings.copyFrom(settings); + } + + @Override + public SystemListener getSystemListener() { + return engine; + } + + @Override + public void setSystemListener(SystemListener listener) { + this.engine = listener; + } + + @Override + public AppSettings getSettings() { + return settings; + } + + @Override + public Renderer getRenderer() { + return renderer; + } + + @Override + public Context getOpenCLContext() { + return null; + } + + @Override + public MouseInput getMouseInput() { + if (mouseInput == null) { + mouseInput = new GlfwMouseInput(this); + } + return mouseInput; + } + + @Override + public KeyInput getKeyInput() { + if (keyInput == null) { + keyInput = new GlfwKeyInput(this); + } + return keyInput; + } + + @Override + public JoyInput getJoyInput() { + if (joyInput == null) { + joyInput = new GlfwJoystickInput(); + } + return joyInput; + } + + @Override + public TouchInput getTouchInput() { + return null; + } + + @Override + public Timer getTimer() { + return engineTimer; + } + + @Override + public void setTitle(String title) { + if (window != NULL) { + glfwSetWindowTitle(window, title); + } + } + + @Override + public boolean isCreated() { + return created.get(); + } + + @Override + public long getWindowHandle() { + return window; + } + + @Override + public Vector2f getWindowContentScale(Vector2f store) { + if (store == null) store = new Vector2f(); + glfwGetFramebufferSize(window, width, height); + store.set(width[0], height[0]); + glfwGetWindowSize(window, width, height); + store.x /= width[0]; + store.y /= height[0]; + return store; + } + + @Override + public boolean isRenderable() { + return renderer != null; + } + + @Override + public void registerWindowSizeListener(WindowSizeListener listener) { + sizeListeners.add(listener); + } + + @Override + public void removeWindowSizeListener(WindowSizeListener listener) { + sizeListeners.remove(listener); + } + + @Override + public void setAutoFlushFrames(boolean enabled) { + autoFlush = enabled; + } + + @Override + public void restart() { + if (created.get()) { + restart.set(true); + } else { + LOGGER.warning("Cannot restart context: not yet initialized."); + } + } + + @Override + public void destroy(boolean waitFor) { + destroy.set(true); + if (Thread.currentThread() != engineThread) { + waitForContextLifeEvent(false); + } + } + + @Override + public int getFramebufferHeight() { + glfwGetFramebufferSize(window, width, height); + return width[0]; + } + + @Override + public int getFramebufferWidth() { + glfwGetFramebufferSize(window, width, height); + return height[0]; + } + + @Override + public int getWindowXPosition() { + glfwGetWindowPos(window, width, height); + return width[0]; + } + + @Override + public int getWindowYPosition() { + glfwGetWindowPos(window, width, height); + return height[0]; + } + + @Override + public Displays getDisplays() { + PointerBuffer displays = glfwGetMonitors(); + long primary = glfwGetPrimaryMonitor(); + Displays displayList = new Displays(); + + for (int i = 0; i < displays.limit(); i++) { + long monitorI = displays.get(i); + int monPos = displayList.addNewMonitor(monitorI); + if (primary == monitorI) displayList.setPrimaryDisplay(monPos); + final GLFWVidMode modes = glfwGetVideoMode(monitorI); + String name = glfwGetMonitorName(monitorI); + int width = modes.width(); + int height = modes.height(); + int rate = modes.refreshRate(); + displayList.setInfo(monPos, name, width, height, rate); + LOGGER.log(Level.INFO, "Display id: " + monitorI + " Resolution: " + width + " x " + height + " @ " + rate); + } + return displayList; + } + + @Override + public int getPrimaryDisplay() { + long prim = glfwGetPrimaryMonitor(); + Displays monitors = getDisplays(); + for (int i = 0; i < monitors.size(); i++) { + long monitorI = monitors.get(i).getDisplay(); + if (monitorI == prim) return i; + } + LOGGER.log(Level.SEVERE, "Couldn't locate Primary Monitor in the list of Monitors."); + return -1; + } + +} From 061a7822438fe7d95eb874b2a54972d0a19f5fb0 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 24 Jun 2025 07:10:10 -0400 Subject: [PATCH 09/80] vulkan logical device --- .../main/java/jme3test/vulkan/VulkanTest.java | 119 ++++++++++++++---- 1 file changed, 94 insertions(+), 25 deletions(-) diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java index f9baced025..82580359ae 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java @@ -23,8 +23,8 @@ public class VulkanTest extends SimpleApplication { private static final Logger LOG = Logger.getLogger(VulkanTest.class.getName()); private VkInstance instance; - private VkPhysicalDevice device; - private QueueFamilies queues; + private VkDevice device; + private VkQueue graphics; private final Collection extensions = new ArrayList<>(); private final List layers = new ArrayList<>(); private final Collection deviceEvaluators = new ArrayList<>(); @@ -46,27 +46,38 @@ public void simpleInitApp() { // basic validation layer from the Vulkan SDK //layers.add("VK_LAYER_KHRONOS_validation"); try (MemoryStack stack = MemoryStack.stackPush()) { - createInstance(stack); + PointerBuffer layerPtrs = createLayerBuffer(stack, layers); + LOG.info("Validation layers: " + layers.size() + ", buffer: " + layerPtrs); + createInstance(stack, layerPtrs); createDebugMessenger(stack); - device = findPhysicalDevice(stack); - queues = populateQueueFamily(stack, device); + //PhysicalDevice physDevice = findPhysicalDevice(stack); + //QueueFamilyIndices queues = populateQueueFamily(stack, physDevice.getDevice()); + //device = createLogicalDevice(stack, physDevice, queues, layerPtrs); + //graphics = getQueue(stack, device, queues, 0); } } @Override public void stop() { - LOG.info("Destroying vulkan instance."); + LOG.info("Destroying vulkan device and instance."); + if (device != null) { + System.out.println("Destroy device"); + vkDeviceWaitIdle(device); + vkDestroyDevice(device, null); + } if (debugMessenger != NULL) { + System.out.println("Destroy messenger"); verifyExtensionMethod(instance, "vkDestroyDebugUtilsMessengerEXT"); vkDestroyDebugUtilsMessengerEXT(instance, debugMessenger, null); } if (instance != null) { + System.out.println("Destroy instance"); vkDestroyInstance(instance, null); } super.stop(); } - private void createInstance(MemoryStack stack) { + private void createInstance(MemoryStack stack, PointerBuffer layers) { VkApplicationInfo app = VkApplicationInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_APPLICATION_INFO) .pApplicationName(stack.ASCII(context.getSettings().getTitle())) @@ -78,15 +89,22 @@ private void createInstance(MemoryStack stack) { .sType(VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO) .pNext(createDebugger(stack, debugCallback)) .pApplicationInfo(app); - if (!layers.isEmpty()) { - verifyValidationLayerSupport(stack); - create.ppEnabledLayerNames(toPointers(stack, layers.stream(), layers.size(), stack::UTF8)); + if (layers != null) { + create.ppEnabledLayerNames(layers); } addExtension(Objects.requireNonNull(GLFWVulkan.glfwGetRequiredInstanceExtensions())); addExtension(stack, VK_EXT_DEBUG_UTILS_EXTENSION_NAME); create.ppEnabledExtensionNames(gatherPointers(stack, extensions)); instance = new VkInstance(getPointer(stack, ptr -> check(vkCreateInstance(create, null, ptr), "Failed to create instance.")), create); + if (instance.address() == NULL) { + throw new NullPointerException("Instance pointer is null."); + } + } + + private PointerBuffer createLayerBuffer(MemoryStack stack, Collection layers) { + verifyValidationLayerSupport(stack); + return layers.isEmpty() ? null : toPointers(stack, layers.stream(), layers.size(), stack::UTF8); } private void createDebugMessenger(MemoryStack stack) { @@ -94,13 +112,13 @@ private void createDebugMessenger(MemoryStack stack) { debugMessenger = getLong(stack, ptr -> vkCreateDebugUtilsMessengerEXT(instance, createDebugger(stack, debugCallback), null, ptr)); } - private VkPhysicalDevice findPhysicalDevice(MemoryStack stack) { + private PhysicalDevice findPhysicalDevice(MemoryStack stack) { PointerBuffer devices = enumerateBuffer(stack, stack::mallocPointer, (count, buffer) -> vkEnumeratePhysicalDevices(instance, count, buffer)); - VkPhysicalDevice device = null; + PhysicalDevice device = null; float score = 0f; - for (VkPhysicalDevice d : iteratePointers(devices, p -> new VkPhysicalDevice(p, instance))) { - Float s = evaluateDevice(stack, d); - if (s != null && (device == null || s > score) && populateQueueFamily(stack, d).isComplete()) { + for (PhysicalDevice d : iteratePointers(devices, p -> new PhysicalDevice(new VkPhysicalDevice(p, instance)))) { + Float s = evaluateDevice(d); + if (s != null && (device == null || s > score) && populateQueueFamily(stack, d.getDevice()).isComplete()) { device = d; score = s; } @@ -111,17 +129,13 @@ private VkPhysicalDevice findPhysicalDevice(MemoryStack stack) { return device; } - private Float evaluateDevice(MemoryStack stack, VkPhysicalDevice device) { + private Float evaluateDevice(PhysicalDevice device) { if (deviceEvaluators.isEmpty()) { return 0f; } - VkPhysicalDeviceProperties props = VkPhysicalDeviceProperties.malloc(stack); - VkPhysicalDeviceFeatures features = VkPhysicalDeviceFeatures.malloc(stack); - vkGetPhysicalDeviceProperties(device, props); - vkGetPhysicalDeviceFeatures(device, features); float score = 0f; for (DeviceEvaluator e : deviceEvaluators) { - Float s = e.evaluateDevice(device, props, features); + Float s = e.evaluateDevice(device.getDevice(), device.getProps(), device.getFeatures()); if (s == null) { return null; } @@ -130,8 +144,8 @@ private Float evaluateDevice(MemoryStack stack, VkPhysicalDevice device) { return score; } - private QueueFamilies populateQueueFamily(MemoryStack stack, VkPhysicalDevice device) { - QueueFamilies fams = new QueueFamilies(); + private QueueFamilyIndices populateQueueFamily(MemoryStack stack, VkPhysicalDevice device) { + QueueFamilyIndices fams = new QueueFamilyIndices(); VkQueueFamilyProperties.Buffer props = enumerateBuffer(stack, VkQueueFamilyProperties::malloc, (count, buffer) -> vkGetPhysicalDeviceQueueFamilyProperties(device, count, buffer)); int i = 0; @@ -144,6 +158,27 @@ private QueueFamilies populateQueueFamily(MemoryStack stack, VkPhysicalDevice de return fams; } + private VkDevice createLogicalDevice(MemoryStack stack, PhysicalDevice device, QueueFamilyIndices fams, PointerBuffer layers) { + VkDeviceQueueCreateInfo.Buffer queueCreate = VkDeviceQueueCreateInfo.malloc(1, stack) + .sType(VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) + .queueFamilyIndex(fams.graphics) + .pQueuePriorities(stack.floats(1f)); + VkDeviceCreateInfo deviceCreate = VkDeviceCreateInfo.malloc(stack) + .sType(VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO) + .pQueueCreateInfos(queueCreate) + .pEnabledFeatures(device.getFeatures()); + if (layers != null) { + deviceCreate.ppEnabledLayerNames(layers); + } + return new VkDevice(getPointer(stack, + ptr -> check(vkCreateDevice(device.getDevice(), deviceCreate, null, ptr), "Failed to create logical device.")), + device.getDevice(), deviceCreate); + } + + private VkQueue getQueue(MemoryStack stack, VkDevice device, QueueFamilyIndices fams, int i) { + return new VkQueue(getPointer(stack, ptr -> vkGetDeviceQueue(device, fams.graphics, i, ptr)), device); + } + private void verifyValidationLayerSupport(MemoryStack stack) { VkLayerProperties.Buffer supported = enumerateBuffer(stack, n -> VkLayerProperties.malloc(n, stack), VK10::vkEnumerateInstanceLayerProperties); @@ -175,7 +210,7 @@ private void addExtension(PointerBuffer ext) { extensions.add(ext); } - private static class QueueFamilies { + private static class QueueFamilyIndices { public Integer graphics; @@ -185,12 +220,46 @@ public boolean isComplete() { } + private static class PhysicalDevice { + + private final VkPhysicalDevice device; + private final VkPhysicalDeviceProperties props; + private final VkPhysicalDeviceFeatures features; + + private PhysicalDevice(VkPhysicalDevice device) { + props = VkPhysicalDeviceProperties.create(); + features = VkPhysicalDeviceFeatures.create(); + vkGetPhysicalDeviceProperties(device, props); + vkGetPhysicalDeviceFeatures(device, features); + this.device = device; + } + private PhysicalDevice(VkPhysicalDevice device, VkPhysicalDeviceProperties props, VkPhysicalDeviceFeatures features) { + this.device = device; + this.props = props; + this.features = features; + } + + public VkPhysicalDevice getDevice() { + return device; + } + + public VkPhysicalDeviceProperties getProps() { + return props; + } + + public VkPhysicalDeviceFeatures getFeatures() { + return features; + } + + } + private static class VulkanDebugCallback extends VkDebugUtilsMessengerCallbackEXT { @Override public int invoke(int messageSeverity, int messageTypes, long pCallbackData, long pUserData) { try (VkDebugUtilsMessengerCallbackDataEXT data = VkDebugUtilsMessengerCallbackDataEXT.create(pCallbackData)) { - LOG.log(getLoggingLevel(messageSeverity), data.pMessageString()); + //LOG.log(getLoggingLevel(messageSeverity), data.pMessageString()); + System.err.println(getLoggingLevel(messageSeverity).getName() + " " + data.pMessageString()); } return VK_FALSE; // always return false, true is only really used for testing validation layers } From 1b9f2e358d9a03beef5349eaa742b89b4f2f06b2 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 24 Jun 2025 07:21:58 -0400 Subject: [PATCH 10/80] vulkan logical device --- .../src/main/java/jme3test/vulkan/VulkanTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java index 82580359ae..935d8bc973 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java @@ -16,7 +16,7 @@ import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.system.MemoryUtil.NULL; import static org.lwjgl.vulkan.EXTDebugUtils.*; -import static org.lwjgl.vulkan.VK14.*; +import static org.lwjgl.vulkan.VK10.*; public class VulkanTest extends SimpleApplication { @@ -50,10 +50,10 @@ public void simpleInitApp() { LOG.info("Validation layers: " + layers.size() + ", buffer: " + layerPtrs); createInstance(stack, layerPtrs); createDebugMessenger(stack); - //PhysicalDevice physDevice = findPhysicalDevice(stack); - //QueueFamilyIndices queues = populateQueueFamily(stack, physDevice.getDevice()); - //device = createLogicalDevice(stack, physDevice, queues, layerPtrs); - //graphics = getQueue(stack, device, queues, 0); + PhysicalDevice physDevice = findPhysicalDevice(stack); + QueueFamilyIndices queues = populateQueueFamily(stack, physDevice.getDevice()); + device = createLogicalDevice(stack, physDevice, queues, layerPtrs); + graphics = getQueue(stack, device, queues, 0); } } @@ -84,10 +84,10 @@ private void createInstance(MemoryStack stack, PointerBuffer layers) { .applicationVersion(VK_MAKE_VERSION(1, 0, 0)) .pEngineName(stack.ASCII("JMonkeyEngine")) .engineVersion(VK_MAKE_VERSION(3, 9, 0)) - .apiVersion(VK_API_VERSION_1_4); + .apiVersion(VK_API_VERSION_1_0); VkInstanceCreateInfo create = VkInstanceCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO) - .pNext(createDebugger(stack, debugCallback)) + //.pNext(createDebugger(stack, debugCallback)) // causing native crashes when destroying instance .pApplicationInfo(app); if (layers != null) { create.ppEnabledLayerNames(layers); From 863e6a9fe14202bce384684b331af83421239158 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:38:28 -0400 Subject: [PATCH 11/80] create interface over vulkan API --- gradle/libs.versions.toml | 1 + hs_err_pid76953.log | 1571 ++++++++++++++++ hs_err_pid77449.log | 1426 +++++++++++++++ hs_err_pid84545.log | 1595 ++++++++++++++++ hs_err_pid84939.log | 1600 +++++++++++++++++ hs_err_pid85302.log | 1596 ++++++++++++++++ hs_err_pid85657.log | 1598 ++++++++++++++++ jme3-core/build.gradle | 1 + .../com/jme3/renderer/vulkan/VulkanUtils.java | 55 +- .../jme3/util/natives/BasicNativeManager.java | 104 ++ .../java/com/jme3/util/natives/Native.java | 36 + .../com/jme3/util/natives/NativeManager.java | 13 + .../jme3/util/natives/NativeReference.java | 9 + .../jme3test/vulkan/VulkanHelperTest.java | 394 ++++ .../main/java/jme3test/vulkan/VulkanTest.java | 755 +++++++- jme3-lwjgl3/build.gradle | 1 + .../java/com/jme3/shaderc/ShaderType.java | 37 + .../java/com/jme3/shaderc/ShadercLoader.java | 130 ++ .../jme3/system/vulkan/DeviceEvaluator.java | 11 - .../system/vulkan/LwjglVulkanContext.java | 9 +- .../main/java/com/jme3/vulkan/Attachment.java | 54 + .../java/com/jme3/vulkan/CommandBuffer.java | 87 + .../java/com/jme3/vulkan/CommandPool.java | 73 + .../java/com/jme3/vulkan/DeviceEvaluator.java | 57 + .../src/main/java/com/jme3/vulkan/Fence.java | 76 + .../java/com/jme3/vulkan/FrameBuffer.java | 83 + .../com/jme3/vulkan/GraphicsPipeline.java | 132 ++ .../src/main/java/com/jme3/vulkan/Image.java | 121 ++ .../main/java/com/jme3/vulkan/ImageView.java | 53 + .../java/com/jme3/vulkan/InstanceBuilder.java | 146 ++ .../java/com/jme3/vulkan/LogicalDevice.java | 68 + .../java/com/jme3/vulkan/MemoryBarrier.java | 4 + .../com/jme3/vulkan/OneTimeCommandBuffer.java | 62 + .../java/com/jme3/vulkan/PhysicalDevice.java | 138 ++ .../java/com/jme3/vulkan/PipelineLayout.java | 53 + .../src/main/java/com/jme3/vulkan/Queue.java | 57 + .../java/com/jme3/vulkan/QueueFamilies.java | 21 + .../main/java/com/jme3/vulkan/RenderPass.java | 73 + .../com/jme3/vulkan/RenderPassBuilder.java | 76 + .../com/jme3/vulkan/RenderStateToVulkan.java | 70 + .../main/java/com/jme3/vulkan/Semaphore.java | 60 + .../java/com/jme3/vulkan/ShaderModule.java | 58 + .../main/java/com/jme3/vulkan/Surface.java | 70 + .../main/java/com/jme3/vulkan/Swapchain.java | 189 ++ .../com/jme3/vulkan/SwapchainSupport.java | 18 + .../java/com/jme3/vulkan/VulkanInstance.java | 60 + .../com/jme3/vulkan/VulkanRenderManager.java | 34 + .../resources/Shaders/VulkanFragTest.glsl | 9 + .../resources/Shaders/VulkanVertTest.glsl | 19 + 49 files changed, 12880 insertions(+), 83 deletions(-) create mode 100644 hs_err_pid76953.log create mode 100644 hs_err_pid77449.log create mode 100644 hs_err_pid84545.log create mode 100644 hs_err_pid84939.log create mode 100644 hs_err_pid85302.log create mode 100644 hs_err_pid85657.log create mode 100644 jme3-core/src/main/java/com/jme3/util/natives/BasicNativeManager.java create mode 100644 jme3-core/src/main/java/com/jme3/util/natives/Native.java create mode 100644 jme3-core/src/main/java/com/jme3/util/natives/NativeManager.java create mode 100644 jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java create mode 100644 jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShaderType.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShadercLoader.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/DeviceEvaluator.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Attachment.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryBarrier.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainSupport.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java create mode 100644 jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl create mode 100644 jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fabebdcc8a..b08ae5bd7f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,6 +35,7 @@ lwjgl3-opengl = { module = "org.lwjgl:lwjgl-opengl", version.ref = "lwjgl3" lwjgl3-openvr = { module = "org.lwjgl:lwjgl-openvr", version.ref = "lwjgl3" } lwjgl3-ovr = { module = "org.lwjgl:lwjgl-ovr", version.ref = "lwjgl3" } lwjgl3-vulkan = { module = "org.lwjgl:lwjgl-vulkan", version.ref = "lwjgl3" } +lwjgl3-shaderc = { module = "org.lwjgl:lwjgl-shaderc", version.ref = "lwjgl3" } mokito-core = "org.mockito:mockito-core:3.12.4" diff --git a/hs_err_pid76953.log b/hs_err_pid76953.log new file mode 100644 index 0000000000..ed37f27859 --- /dev/null +++ b/hs_err_pid76953.log @@ -0,0 +1,1571 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x000078ab98a15645, pid=76953, tid=76987 +# +# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) +# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) +# Problematic frame: +# C [libjemalloc.so+0x15645] +# +# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.76953) +# +# 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: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanHelperTest + +Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS +Time: Wed Jul 2 22:32:45 2025 EDT elapsed time: 0.808817 seconds (0d 0h 0m 0s) + +--------------- T H R E A D --------------- + +Current thread (0x000078abc05a8d30): JavaThread "LwjglVulkanContext" [_thread_in_native, id=76987, stack(0x000078ab98100000,0x000078ab98200000) (1024K)] + +Stack: [0x000078ab98100000,0x000078ab98200000], sp=0x000078ab981fe350, free space=1016k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libjemalloc.so+0x15645] +Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) +j org.lwjgl.system.JNI.invokePV(JJ)V+0 +j org.lwjgl.system.jemalloc.JEmalloc.nje_free(J)V+6 +j org.lwjgl.system.jemalloc.JEmallocAllocator.free(J)V+1 +j org.lwjgl.system.MemoryUtil.nmemFree(J)V+4 +j org.lwjgl.system.Struct.free()V+4 +j com.jme3.vulkan.VulkanInstance.(Lorg/lwjgl/vulkan/VkApplicationInfo;Lorg/lwjgl/PointerBuffer;Lorg/lwjgl/PointerBuffer;)V+73 +j com.jme3.vulkan.InstanceBuilder.build()Lcom/jme3/vulkan/VulkanInstance;+16 +j jme3test.vulkan.VulkanHelperTest.simpleInitApp()V+52 +j com.jme3.app.SimpleApplication.initialize()V+282 +j com.jme3.system.vulkan.LwjglVulkanContext.engineInitialize()V+23 +j com.jme3.system.vulkan.LwjglVulkanContext.run()V+1 +j java.lang.Thread.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V+5 java.base@23.0.2 +j java.lang.Thread.run()V+19 java.base@23.0.2 +v ~StubRoutines::call_stub 0x000078abafd37c86 + +siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000002700 + +Registers: +RAX=0x0000000000002700, RBX=0x000078aaf0002510, RCX=0x000078ab98b71cf0, RDX=0x000078aaf00025d8 +RSP=0x000078ab981fe350, RBP=0x000078aaf0002420, RSI=0x000078aaf00026d8, RDI=0x000078aaf00026e8 +R8 =0x0000000000000001, R9 =0x000078aaf00026c8, R10=0x0000000000000001, R11=0x0000000000000000 +R12=0x000078abc04e00e0, R13=0x000078abc0000000, R14=0x000078aaf0002780, R15=0x000078abc05a8d30 +RIP=0x000078ab98a15645, EFLAGS=0x0000000000010206, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 + TRAPNO=0x000000000000000e + + +Register to memory mapping: + +RAX=0x0000000000002700 is an unknown value +RBX=0x000078aaf0002510 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 +RCX=0x000078ab98b71cf0: in /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so at 0x000078ab98a00000 +RDX=0x000078aaf00025d8 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 +RSP=0x000078ab981fe350 is pointing into the stack for thread: 0x000078abc05a8d30 +RBP=0x000078aaf0002420 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 +RSI=0x000078aaf00026d8 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 +RDI=0x000078aaf00026e8 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 +R8 =0x0000000000000001 is an unknown value +R9 =0x000078aaf00026c8 points into unknown readable memory: 0x000078abc0000000 | 00 00 00 c0 ab 78 00 00 +R10=0x0000000000000001 is an unknown value +R11=0x0 is null +R12=0x000078abc04e00e0 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 +R13=0x000078abc0000000 points into unknown readable memory: 0x000078abc0000030 | 30 00 00 c0 ab 78 00 00 +R14=0x000078aaf0002780 points into unknown readable memory: 0x000078aaf0002520 | 20 25 00 f0 aa 78 00 00 +R15=0x000078abc05a8d30 is a thread + +Top of Stack: (sp=0x000078ab981fe350) +0x000078ab981fe350: 000078aaf00025d8 000078ab430ac9b8 +0x000078ab981fe360: 0000000000000004 0000000000000000 +0x000078ab981fe370: 000078ab981fe390 000000000000000f +0x000078ab981fe380: 000078ab98a77fe0 000078abc0000000 +0x000078ab981fe390: 000078ab3852b1c8 000078ab981fe498 +0x000078ab981fe3a0: 000078abc05a8d30 000078abc915fd0c +0x000078ab981fe3b0: 000078ab981fe3c0 000078ab3852b1c8 +0x000078ab981fe3c0: 000078ab981fe460 0000000000000000 +0x000078ab981fe3d0: 000078ab3852b1c8 000078ab981fe498 +0x000078ab981fe3e0: 000078abc05a8d30 000078abafd43d7c +0x000078ab981fe3f0: 000078abc0475a48 000078ab424b05f0 +0x000078ab981fe400: 000078ab43011660 000078ab4301e4d8 +0x000078ab981fe410: 0000000000000000 fffffffffffffff7 +0x000078ab981fe420: 0000000000000000 0000000000000007 +0x000078ab981fe430: 000078ab38562f28 0000000000000000 +0x000078ab981fe440: 000000062a844740 000078ab3852b1c8 +0x000078ab981fe450: 0000000000000000 000078ab981fe480 +0x000078ab981fe460: 000078ab981fe4e8 000078abafd3f020 +0x000078ab981fe470: 000000062a844740 000078abafd411f7 +0x000078ab981fe480: 000078ab98a16160 0000000000000000 +0x000078ab981fe490: 000078abc04e00e0 0000000000000000 +0x000078ab981fe4a0: fffffffffffffff7 000078ab3850b486 +0x000078ab981fe4b0: 0000000000000005 000078ab385107a0 +0x000078ab981fe4c0: 0000000000000000 000000062aff01d0 +0x000078ab981fe4d0: 000078ab3850b4b0 fffffffffffffff3 +0x000078ab981fe4e0: 000078ab981fe508 000078ab981fe560 +0x000078ab981fe4f0: 000078abafd3f020 000078ab98a16160 +0x000078ab981fe500: 0000000000000000 000078abc04e00e0 +0x000078ab981fe510: 0000000000000000 fffffffffffffff7 +0x000078ab981fe520: 000078ab38508c71 0000000000000004 +0x000078ab981fe530: 000078ab385090b0 0000000000000000 +0x000078ab981fe540: 000000062afdf250 000078ab38508c98 + +Instructions: (pc=0x000078ab98a15645) +0x000078ab98a15545: 06 00 48 89 3c 24 48 89 ef 4c 89 44 24 10 e8 28 +0x000078ab98a15555: a7 ff ff 4c 8b 44 24 10 48 8b 3c 24 48 89 c3 e9 +0x000078ab98a15565: fb fb ff ff 4d 89 df e9 5d f6 ff ff b9 07 00 00 +0x000078ab98a15575: 00 48 c1 e1 3c 49 39 cc 77 37 4f 8d 34 24 41 ba +0x000078ab98a15585: 07 00 00 00 be 01 00 00 00 49 83 ee 01 49 0f bd +0x000078ab98a15595: c6 48 98 4c 39 d0 49 0f 42 c2 48 8d 48 fd 48 d3 +0x000078ab98a155a5: e6 4a 8d 54 26 ff 48 f7 de 48 21 f2 e9 c8 fe ff +0x000078ab98a155b5: ff 31 d2 e9 c1 fe ff ff 0f 1f 00 48 85 ff 0f 84 +0x000078ab98a155c5: 57 01 00 00 41 57 41 56 41 55 41 54 49 89 fc 55 +0x000078ab98a155d5: 53 48 83 ec 68 66 48 8d 3d fe 29 06 00 66 66 48 +0x000078ab98a155e5: e8 f6 2b ff ff 80 b8 38 03 00 00 00 48 89 c5 0f +0x000078ab98a155f5: 85 2e 01 00 00 4c 89 e3 4d 89 e5 4c 8d b5 60 03 +0x000078ab98a15605: 00 00 48 c1 eb 1a 49 81 e5 00 00 00 c0 48 8d 95 +0x000078ab98a15615: b8 01 00 00 81 e3 f0 00 00 00 48 01 eb 4c 8b 93 +0x000078ab98a15625: b8 01 00 00 4d 39 d5 0f 85 0e 03 00 00 4c 89 e0 +0x000078ab98a15635: 48 c1 e8 09 25 f8 ff 1f 00 48 03 83 c0 01 00 00 +0x000078ab98a15645: 4c 8b 10 4c 8d 3d 31 c4 26 00 4c 89 d0 48 c1 e8 +0x000078ab98a15655: 30 41 83 e2 01 89 c1 41 89 c1 4d 8b 3c cf 0f 84 +0x000078ab98a15665: 37 02 00 00 48 8d 3c 40 4c 8d 04 49 48 c1 e7 03 +0x000078ab98a15675: 4e 8d 6c c5 00 48 8d 5c 3d 00 48 8b b3 68 03 00 +0x000078ab98a15685: 00 66 41 39 b5 7a 03 00 00 0f 84 fc 02 00 00 4c +0x000078ab98a15695: 8d 5e f8 4c 89 9b 68 03 00 00 4c 89 66 f8 48 8b +0x000078ab98a156a5: 9d 50 03 00 00 4c 8b 45 20 4c 8d 4d 18 48 8d 55 +0x000078ab98a156b5: 20 66 49 0f 6e f1 66 48 0f 6e fa c6 44 24 30 00 +0x000078ab98a156c5: 4c 8d a5 50 03 00 00 48 8d bd 58 03 00 00 66 49 +0x000078ab98a156d5: 0f 6e ec 49 8d 34 1f 49 29 d8 66 4c 0f 6e c7 66 +0x000078ab98a156e5: 0f 6c ee 66 41 0f 6c f8 0f 11 6c 24 38 0f 11 7c +0x000078ab98a156f5: 24 48 48 89 b5 50 03 00 00 4d 39 c7 0f 83 81 01 +0x000078ab98a15705: 00 00 48 83 c4 68 5b 5d 41 5c 41 5d 41 5e 41 5f +0x000078ab98a15715: c3 66 2e 0f 1f 84 00 00 00 00 00 c3 0f 1f 80 00 +0x000078ab98a15725: 00 00 00 be 01 00 00 00 48 89 c7 e8 7b 8f 04 00 +0x000078ab98a15735: 80 b8 38 03 00 00 00 48 89 c5 0f 84 b5 fe ff ff + + +Stack slot to memory mapping: + +stack at sp + 0 slots: 0x000078aaf00025d8 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 +stack at sp + 1 slots: 0x000078ab430ac9b8 is a pointer to class: +org.lwjgl.vulkan.VkInstanceCreateInfo {0x000078ab430ac9b8} + - instance size: 3 + - klass size: 108 + - access: public synchronized + - flags: rewritten has_nonstatic_fields should_verify_class has_nonstatic_concrete_methods has_localvariable_table has_miranda_methods + - state: fully_initialized + - name: 'org/lwjgl/vulkan/VkInstanceCreateInfo' + - super: 'org/lwjgl/system/Struct' + - sub: + - arrays: null + - methods: Array(0x000078ab387e9640) + - method ordering: Array(0x000078ab426f1b90) + - default_methods: Array(0x000078ab387ed0c0) + - default vtable indices: Array(0x000078ab387ed0d0) + - local interfaces: Array(0x000078ab387e9630) + - trans. interfaces: Array(0x000078ab387ed028) + - secondary supers: Array(0x000078ab387ed0a0) + - hash_slot: 62 + - bitmap: 0x8a00000000000000 + - constants: constant pool [373] {0x000078ab387e8978} for 'org/lwjgl/vulkan/VkInstanceCreateInfo' cache=0x000078ab387ed8b0 + - class loader data: loader data: 0x000078abc01474b0 for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'{0x00000007ffd01490} + - source file: 'VkInstanceCreateInfo.java' + - generic signature: 'Lorg/lwjgl/system/Struct;Lorg/lwjgl/system/NativeResource;' + - inner classes: Array(0x000078ab387ed000) + - nest members: Array(0x000078ab42676730) + - permitted subclasses: Array(0x000078ab42676730) + - java mirror: a 'java/lang/Class'{0x0000000629d4a1e0} = 'org/lwjgl/vulkan/VkInstanceCreateInfo' + - vtable length 37 (start addr: 0x000078ab430acb88) + - itable length 12 (start addr: 0x000078ab430accb0) + - ---- static fields (5 words): + - public static final 'SIZEOF' 'I' @112 + - public static final 'ALIGNOF' 'I' @116 + - public static final 'STYPE' 'I' @120 + - public static final 'PNEXT' 'I' @124 + - public static final 'FLAGS' 'I' @128 + - public static final 'PAPPLICATIONINFO' 'I' @132 + - public static final 'ENABLEDLAYERCOUNT' 'I' @136 + - public static final 'PPENABLEDLAYERNAMES' 'I' @140 + - public static final 'ENABLEDEXTENSIONCOUNT' 'I' @144 + - public static final 'PPENABLEDEXTENSIONNAMES' 'I' @148 + - ---- non-static fields (3 words): + - protected 'address' 'J' @16 + - protected 'container' 'Ljava/nio/ByteBuffer;' @12 + - non-static oop maps: 12-12 +stack at sp + 2 slots: 0x0000000000000004 is an unknown value +stack at sp + 3 slots: 0x0 is null +stack at sp + 4 slots: 0x000078ab981fe390 is pointing into the stack for thread: 0x000078abc05a8d30 +stack at sp + 5 slots: 0x000000000000000f is an unknown value +stack at sp + 6 slots: 0x000078ab98a77fe0: in /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so at 0x000078ab98a00000 +stack at sp + 7 slots: 0x000078abc0000000 points into unknown readable memory: 0x000078abc0000030 | 30 00 00 c0 ab 78 00 00 + +Lock stack of current Java thread (top to bottom): + + +--------------- P R O C E S S --------------- + +Threads class SMR info: +_java_thread_list=0x000078aaf07641e0, length=14, elements={ +0x000078abc0137930, 0x000078abc0138ea0, 0x000078abc013a6b0, 0x000078abc013bcf0, +0x000078abc013d290, 0x000078abc013edb0, 0x000078abc01404c0, 0x000078abc014d1b0, +0x000078abc014fc90, 0x000078abc05a8d30, 0x000078abc002d0f0, 0x000078aaf05acb60, +0x000078ab084b7a10, 0x000078aaf0763530 +} + +Java Threads: ( => current thread ) + 0x000078abc0137930 JavaThread "Reference Handler" daemon [_thread_blocked, id=76967, stack(0x000078aba8700000,0x000078aba8800000) (1024K)] + 0x000078abc0138ea0 JavaThread "Finalizer" daemon [_thread_blocked, id=76968, stack(0x000078aba05fd000,0x000078aba06fd000) (1024K)] + 0x000078abc013a6b0 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=76969, stack(0x000078aba04fd000,0x000078aba05fd000) (1024K)] + 0x000078abc013bcf0 JavaThread "Service Thread" daemon [_thread_blocked, id=76970, stack(0x000078aba03fd000,0x000078aba04fd000) (1024K)] + 0x000078abc013d290 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=76971, stack(0x000078aba02fd000,0x000078aba03fd000) (1024K)] + 0x000078abc013edb0 JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=76972, stack(0x000078aba01fd000,0x000078aba02fd000) (1024K)] + 0x000078abc01404c0 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=76973, stack(0x000078aba00fd000,0x000078aba01fd000) (1024K)] + 0x000078abc014d1b0 JavaThread "Notification Thread" daemon [_thread_blocked, id=76974, stack(0x000078ab98f00000,0x000078ab99000000) (1024K)] + 0x000078abc014fc90 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=76975, stack(0x000078ab98e00000,0x000078ab98f00000) (1024K)] +=>0x000078abc05a8d30 JavaThread "LwjglVulkanContext" [_thread_in_native, id=76987, stack(0x000078ab98100000,0x000078ab98200000) (1024K)] + 0x000078abc002d0f0 JavaThread "DestroyJavaVM" [_thread_blocked, id=76959, stack(0x000078abc7700000,0x000078abc7800000) (1024K)] + 0x000078aaf05acb60 JavaThread "jME3 Audio Decoder" daemon [_thread_blocked, id=76998, stack(0x000078ab98d00000,0x000078ab98e00000) (1024K)] + 0x000078ab084b7a10 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=76999, stack(0x000078ab40d00000,0x000078ab40e00000) (1024K)] + 0x000078aaf0763530 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=77000, stack(0x000078ab40300000,0x000078ab40400000) (1024K)] +Total: 14 + +Other Threads: + 0x000078abc012e310 VMThread "VM Thread" [id=76966, stack(0x000078aba06fe000,0x000078aba07fe000) (1024K)] + 0x000078abc011c630 WatcherThread "VM Periodic Task Thread" [id=76965, stack(0x000078aba07ff000,0x000078aba08ff000) (1024K)] + 0x000078abc0058660 WorkerThread "GC Thread#0" [id=76960, stack(0x000078abc6ba1000,0x000078abc6ca1000) (1024K)] + 0x000078abc006d560 ConcurrentGCThread "G1 Main Marker" [id=76961, stack(0x000078abc4b00000,0x000078abc4c00000) (1024K)] + 0x000078abc006e500 WorkerThread "G1 Conc#0" [id=76962, stack(0x000078abc49ff000,0x000078abc4aff000) (1024K)] + 0x000078abc0101ec0 ConcurrentGCThread "G1 Refine#0" [id=76963, stack(0x000078abc40f6000,0x000078abc41f6000) (1024K)] + 0x000078abc0102e80 ConcurrentGCThread "G1 Service" [id=76964, stack(0x000078aba0900000,0x000078aba0a00000) (1024K)] +Total: 7 + +Threads with active compile tasks: +C2 CompilerThread0 813 1245 4 java.util.HashMap::putVal (300 bytes) +Total: 1 + +VM state: not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: None + +Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 + +CDS archive(s) mapped at: [0x000078ab42000000-0x000078ab42d91000-0x000078ab42d91000), size 14225408, SharedBaseAddress: 0x000078ab42000000, ArchiveRelocationMode: 1. +Compressed class space mapped at: 0x000078ab43000000-0x000078ab83000000, reserved size: 1073741824 +Narrow klass base: 0x000078ab42000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 + +GC Precious Log: + CardTable entry size: 512 + Card Set container configuration: InlinePtr #cards 4 size 8 Array Of Cards #cards 32 size 80 Howl #buckets 8 coarsen threshold 7372 Howl Bitmap #cards 1024 size 144 coarsen threshold 921 Card regions per heap region 1 cards per card region 8192 + CPUs: 8 total, 8 available + Memory: 31999M + Large Page Support: Disabled + NUMA Support: Disabled + Compressed Oops: Enabled (Zero based) + Heap Region Size: 4M + Heap Min Capacity: 8M + Heap Initial Capacity: 500M + Heap Max Capacity: 8000M + Pre-touch: Disabled + Parallel Workers: 8 + Concurrent Workers: 2 + Concurrent Refinement Workers: 8 + Periodic GC: Disabled + +Heap: + garbage-first heap total reserved 8192000K, committed 516096K, used 17531K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 6 young (24576K), 0 survivors (0K) + Metaspace used 8549K, committed 8768K, reserved 1114112K + class space used 754K, committed 832K, reserved 1048576K + +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|0x000000060c000000, 0x000000060c000000, 0x000000060c400000| 0%| F| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 +| 1|0x000000060c400000, 0x000000060c400000, 0x000000060c800000| 0%| F| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 +| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 +| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 +| 4|0x000000060d000000, 0x000000060d000000, 0x000000060d400000| 0%| F| |TAMS 0x000000060d000000| PB 0x000000060d000000| Untracked | 0 +| 5|0x000000060d400000, 0x000000060d400000, 0x000000060d800000| 0%| F| |TAMS 0x000000060d400000| PB 0x000000060d400000| Untracked | 0 +| 6|0x000000060d800000, 0x000000060d800000, 0x000000060dc00000| 0%| F| |TAMS 0x000000060d800000| PB 0x000000060d800000| Untracked | 0 +| 7|0x000000060dc00000, 0x000000060dc00000, 0x000000060e000000| 0%| F| |TAMS 0x000000060dc00000| PB 0x000000060dc00000| Untracked | 0 +| 8|0x000000060e000000, 0x000000060e000000, 0x000000060e400000| 0%| F| |TAMS 0x000000060e000000| PB 0x000000060e000000| Untracked | 0 +| 9|0x000000060e400000, 0x000000060e400000, 0x000000060e800000| 0%| F| |TAMS 0x000000060e400000| PB 0x000000060e400000| Untracked | 0 +| 10|0x000000060e800000, 0x000000060e800000, 0x000000060ec00000| 0%| F| |TAMS 0x000000060e800000| PB 0x000000060e800000| Untracked | 0 +| 11|0x000000060ec00000, 0x000000060ec00000, 0x000000060f000000| 0%| F| |TAMS 0x000000060ec00000| PB 0x000000060ec00000| Untracked | 0 +| 12|0x000000060f000000, 0x000000060f000000, 0x000000060f400000| 0%| F| |TAMS 0x000000060f000000| PB 0x000000060f000000| Untracked | 0 +| 13|0x000000060f400000, 0x000000060f400000, 0x000000060f800000| 0%| F| |TAMS 0x000000060f400000| PB 0x000000060f400000| Untracked | 0 +| 14|0x000000060f800000, 0x000000060f800000, 0x000000060fc00000| 0%| F| |TAMS 0x000000060f800000| PB 0x000000060f800000| Untracked | 0 +| 15|0x000000060fc00000, 0x000000060fc00000, 0x0000000610000000| 0%| F| |TAMS 0x000000060fc00000| PB 0x000000060fc00000| Untracked | 0 +| 16|0x0000000610000000, 0x0000000610000000, 0x0000000610400000| 0%| F| |TAMS 0x0000000610000000| PB 0x0000000610000000| Untracked | 0 +| 17|0x0000000610400000, 0x0000000610400000, 0x0000000610800000| 0%| F| |TAMS 0x0000000610400000| PB 0x0000000610400000| Untracked | 0 +| 18|0x0000000610800000, 0x0000000610800000, 0x0000000610c00000| 0%| F| |TAMS 0x0000000610800000| PB 0x0000000610800000| Untracked | 0 +| 19|0x0000000610c00000, 0x0000000610c00000, 0x0000000611000000| 0%| F| |TAMS 0x0000000610c00000| PB 0x0000000610c00000| Untracked | 0 +| 20|0x0000000611000000, 0x0000000611000000, 0x0000000611400000| 0%| F| |TAMS 0x0000000611000000| PB 0x0000000611000000| Untracked | 0 +| 21|0x0000000611400000, 0x0000000611400000, 0x0000000611800000| 0%| F| |TAMS 0x0000000611400000| PB 0x0000000611400000| Untracked | 0 +| 22|0x0000000611800000, 0x0000000611800000, 0x0000000611c00000| 0%| F| |TAMS 0x0000000611800000| PB 0x0000000611800000| Untracked | 0 +| 23|0x0000000611c00000, 0x0000000611c00000, 0x0000000612000000| 0%| F| |TAMS 0x0000000611c00000| PB 0x0000000611c00000| Untracked | 0 +| 24|0x0000000612000000, 0x0000000612000000, 0x0000000612400000| 0%| F| |TAMS 0x0000000612000000| PB 0x0000000612000000| Untracked | 0 +| 25|0x0000000612400000, 0x0000000612400000, 0x0000000612800000| 0%| F| |TAMS 0x0000000612400000| PB 0x0000000612400000| Untracked | 0 +| 26|0x0000000612800000, 0x0000000612800000, 0x0000000612c00000| 0%| F| |TAMS 0x0000000612800000| PB 0x0000000612800000| Untracked | 0 +| 27|0x0000000612c00000, 0x0000000612c00000, 0x0000000613000000| 0%| F| |TAMS 0x0000000612c00000| PB 0x0000000612c00000| Untracked | 0 +| 28|0x0000000613000000, 0x0000000613000000, 0x0000000613400000| 0%| F| |TAMS 0x0000000613000000| PB 0x0000000613000000| Untracked | 0 +| 29|0x0000000613400000, 0x0000000613400000, 0x0000000613800000| 0%| F| |TAMS 0x0000000613400000| PB 0x0000000613400000| Untracked | 0 +| 30|0x0000000613800000, 0x0000000613800000, 0x0000000613c00000| 0%| F| |TAMS 0x0000000613800000| PB 0x0000000613800000| Untracked | 0 +| 31|0x0000000613c00000, 0x0000000613c00000, 0x0000000614000000| 0%| F| |TAMS 0x0000000613c00000| PB 0x0000000613c00000| Untracked | 0 +| 32|0x0000000614000000, 0x0000000614000000, 0x0000000614400000| 0%| F| |TAMS 0x0000000614000000| PB 0x0000000614000000| Untracked | 0 +| 33|0x0000000614400000, 0x0000000614400000, 0x0000000614800000| 0%| F| |TAMS 0x0000000614400000| PB 0x0000000614400000| Untracked | 0 +| 34|0x0000000614800000, 0x0000000614800000, 0x0000000614c00000| 0%| F| |TAMS 0x0000000614800000| PB 0x0000000614800000| Untracked | 0 +| 35|0x0000000614c00000, 0x0000000614c00000, 0x0000000615000000| 0%| F| |TAMS 0x0000000614c00000| PB 0x0000000614c00000| Untracked | 0 +| 36|0x0000000615000000, 0x0000000615000000, 0x0000000615400000| 0%| F| |TAMS 0x0000000615000000| PB 0x0000000615000000| Untracked | 0 +| 37|0x0000000615400000, 0x0000000615400000, 0x0000000615800000| 0%| F| |TAMS 0x0000000615400000| PB 0x0000000615400000| Untracked | 0 +| 38|0x0000000615800000, 0x0000000615800000, 0x0000000615c00000| 0%| F| |TAMS 0x0000000615800000| PB 0x0000000615800000| Untracked | 0 +| 39|0x0000000615c00000, 0x0000000615c00000, 0x0000000616000000| 0%| F| |TAMS 0x0000000615c00000| PB 0x0000000615c00000| Untracked | 0 +| 40|0x0000000616000000, 0x0000000616000000, 0x0000000616400000| 0%| F| |TAMS 0x0000000616000000| PB 0x0000000616000000| Untracked | 0 +| 41|0x0000000616400000, 0x0000000616400000, 0x0000000616800000| 0%| F| |TAMS 0x0000000616400000| PB 0x0000000616400000| Untracked | 0 +| 42|0x0000000616800000, 0x0000000616800000, 0x0000000616c00000| 0%| F| |TAMS 0x0000000616800000| PB 0x0000000616800000| Untracked | 0 +| 43|0x0000000616c00000, 0x0000000616c00000, 0x0000000617000000| 0%| F| |TAMS 0x0000000616c00000| PB 0x0000000616c00000| Untracked | 0 +| 44|0x0000000617000000, 0x0000000617000000, 0x0000000617400000| 0%| F| |TAMS 0x0000000617000000| PB 0x0000000617000000| Untracked | 0 +| 45|0x0000000617400000, 0x0000000617400000, 0x0000000617800000| 0%| F| |TAMS 0x0000000617400000| PB 0x0000000617400000| Untracked | 0 +| 46|0x0000000617800000, 0x0000000617800000, 0x0000000617c00000| 0%| F| |TAMS 0x0000000617800000| PB 0x0000000617800000| Untracked | 0 +| 47|0x0000000617c00000, 0x0000000617c00000, 0x0000000618000000| 0%| F| |TAMS 0x0000000617c00000| PB 0x0000000617c00000| Untracked | 0 +| 48|0x0000000618000000, 0x0000000618000000, 0x0000000618400000| 0%| F| |TAMS 0x0000000618000000| PB 0x0000000618000000| Untracked | 0 +| 49|0x0000000618400000, 0x0000000618400000, 0x0000000618800000| 0%| F| |TAMS 0x0000000618400000| PB 0x0000000618400000| Untracked | 0 +| 50|0x0000000618800000, 0x0000000618800000, 0x0000000618c00000| 0%| F| |TAMS 0x0000000618800000| PB 0x0000000618800000| Untracked | 0 +| 51|0x0000000618c00000, 0x0000000618c00000, 0x0000000619000000| 0%| F| |TAMS 0x0000000618c00000| PB 0x0000000618c00000| Untracked | 0 +| 52|0x0000000619000000, 0x0000000619000000, 0x0000000619400000| 0%| F| |TAMS 0x0000000619000000| PB 0x0000000619000000| Untracked | 0 +| 53|0x0000000619400000, 0x0000000619400000, 0x0000000619800000| 0%| F| |TAMS 0x0000000619400000| PB 0x0000000619400000| Untracked | 0 +| 54|0x0000000619800000, 0x0000000619800000, 0x0000000619c00000| 0%| F| |TAMS 0x0000000619800000| PB 0x0000000619800000| Untracked | 0 +| 55|0x0000000619c00000, 0x0000000619c00000, 0x000000061a000000| 0%| F| |TAMS 0x0000000619c00000| PB 0x0000000619c00000| Untracked | 0 +| 56|0x000000061a000000, 0x000000061a000000, 0x000000061a400000| 0%| F| |TAMS 0x000000061a000000| PB 0x000000061a000000| Untracked | 0 +| 57|0x000000061a400000, 0x000000061a400000, 0x000000061a800000| 0%| F| |TAMS 0x000000061a400000| PB 0x000000061a400000| Untracked | 0 +| 58|0x000000061a800000, 0x000000061a800000, 0x000000061ac00000| 0%| F| |TAMS 0x000000061a800000| PB 0x000000061a800000| Untracked | 0 +| 59|0x000000061ac00000, 0x000000061ac00000, 0x000000061b000000| 0%| F| |TAMS 0x000000061ac00000| PB 0x000000061ac00000| Untracked | 0 +| 60|0x000000061b000000, 0x000000061b000000, 0x000000061b400000| 0%| F| |TAMS 0x000000061b000000| PB 0x000000061b000000| Untracked | 0 +| 61|0x000000061b400000, 0x000000061b400000, 0x000000061b800000| 0%| F| |TAMS 0x000000061b400000| PB 0x000000061b400000| Untracked | 0 +| 62|0x000000061b800000, 0x000000061b800000, 0x000000061bc00000| 0%| F| |TAMS 0x000000061b800000| PB 0x000000061b800000| Untracked | 0 +| 63|0x000000061bc00000, 0x000000061bc00000, 0x000000061c000000| 0%| F| |TAMS 0x000000061bc00000| PB 0x000000061bc00000| Untracked | 0 +| 64|0x000000061c000000, 0x000000061c000000, 0x000000061c400000| 0%| F| |TAMS 0x000000061c000000| PB 0x000000061c000000| Untracked | 0 +| 65|0x000000061c400000, 0x000000061c400000, 0x000000061c800000| 0%| F| |TAMS 0x000000061c400000| PB 0x000000061c400000| Untracked | 0 +| 66|0x000000061c800000, 0x000000061c800000, 0x000000061cc00000| 0%| F| |TAMS 0x000000061c800000| PB 0x000000061c800000| Untracked | 0 +| 67|0x000000061cc00000, 0x000000061cc00000, 0x000000061d000000| 0%| F| |TAMS 0x000000061cc00000| PB 0x000000061cc00000| Untracked | 0 +| 68|0x000000061d000000, 0x000000061d000000, 0x000000061d400000| 0%| F| |TAMS 0x000000061d000000| PB 0x000000061d000000| Untracked | 0 +| 69|0x000000061d400000, 0x000000061d400000, 0x000000061d800000| 0%| F| |TAMS 0x000000061d400000| PB 0x000000061d400000| Untracked | 0 +| 70|0x000000061d800000, 0x000000061d800000, 0x000000061dc00000| 0%| F| |TAMS 0x000000061d800000| PB 0x000000061d800000| Untracked | 0 +| 71|0x000000061dc00000, 0x000000061dc00000, 0x000000061e000000| 0%| F| |TAMS 0x000000061dc00000| PB 0x000000061dc00000| Untracked | 0 +| 72|0x000000061e000000, 0x000000061e000000, 0x000000061e400000| 0%| F| |TAMS 0x000000061e000000| PB 0x000000061e000000| Untracked | 0 +| 73|0x000000061e400000, 0x000000061e400000, 0x000000061e800000| 0%| F| |TAMS 0x000000061e400000| PB 0x000000061e400000| Untracked | 0 +| 74|0x000000061e800000, 0x000000061e800000, 0x000000061ec00000| 0%| F| |TAMS 0x000000061e800000| PB 0x000000061e800000| Untracked | 0 +| 75|0x000000061ec00000, 0x000000061ec00000, 0x000000061f000000| 0%| F| |TAMS 0x000000061ec00000| PB 0x000000061ec00000| Untracked | 0 +| 76|0x000000061f000000, 0x000000061f000000, 0x000000061f400000| 0%| F| |TAMS 0x000000061f000000| PB 0x000000061f000000| Untracked | 0 +| 77|0x000000061f400000, 0x000000061f400000, 0x000000061f800000| 0%| F| |TAMS 0x000000061f400000| PB 0x000000061f400000| Untracked | 0 +| 78|0x000000061f800000, 0x000000061f800000, 0x000000061fc00000| 0%| F| |TAMS 0x000000061f800000| PB 0x000000061f800000| Untracked | 0 +| 79|0x000000061fc00000, 0x000000061fc00000, 0x0000000620000000| 0%| F| |TAMS 0x000000061fc00000| PB 0x000000061fc00000| Untracked | 0 +| 80|0x0000000620000000, 0x0000000620000000, 0x0000000620400000| 0%| F| |TAMS 0x0000000620000000| PB 0x0000000620000000| Untracked | 0 +| 81|0x0000000620400000, 0x0000000620400000, 0x0000000620800000| 0%| F| |TAMS 0x0000000620400000| PB 0x0000000620400000| Untracked | 0 +| 82|0x0000000620800000, 0x0000000620800000, 0x0000000620c00000| 0%| F| |TAMS 0x0000000620800000| PB 0x0000000620800000| Untracked | 0 +| 83|0x0000000620c00000, 0x0000000620c00000, 0x0000000621000000| 0%| F| |TAMS 0x0000000620c00000| PB 0x0000000620c00000| Untracked | 0 +| 84|0x0000000621000000, 0x0000000621000000, 0x0000000621400000| 0%| F| |TAMS 0x0000000621000000| PB 0x0000000621000000| Untracked | 0 +| 85|0x0000000621400000, 0x0000000621400000, 0x0000000621800000| 0%| F| |TAMS 0x0000000621400000| PB 0x0000000621400000| Untracked | 0 +| 86|0x0000000621800000, 0x0000000621800000, 0x0000000621c00000| 0%| F| |TAMS 0x0000000621800000| PB 0x0000000621800000| Untracked | 0 +| 87|0x0000000621c00000, 0x0000000621c00000, 0x0000000622000000| 0%| F| |TAMS 0x0000000621c00000| PB 0x0000000621c00000| Untracked | 0 +| 88|0x0000000622000000, 0x0000000622000000, 0x0000000622400000| 0%| F| |TAMS 0x0000000622000000| PB 0x0000000622000000| Untracked | 0 +| 89|0x0000000622400000, 0x0000000622400000, 0x0000000622800000| 0%| F| |TAMS 0x0000000622400000| PB 0x0000000622400000| Untracked | 0 +| 90|0x0000000622800000, 0x0000000622800000, 0x0000000622c00000| 0%| F| |TAMS 0x0000000622800000| PB 0x0000000622800000| Untracked | 0 +| 91|0x0000000622c00000, 0x0000000622c00000, 0x0000000623000000| 0%| F| |TAMS 0x0000000622c00000| PB 0x0000000622c00000| Untracked | 0 +| 92|0x0000000623000000, 0x0000000623000000, 0x0000000623400000| 0%| F| |TAMS 0x0000000623000000| PB 0x0000000623000000| Untracked | 0 +| 93|0x0000000623400000, 0x0000000623400000, 0x0000000623800000| 0%| F| |TAMS 0x0000000623400000| PB 0x0000000623400000| Untracked | 0 +| 94|0x0000000623800000, 0x0000000623800000, 0x0000000623c00000| 0%| F| |TAMS 0x0000000623800000| PB 0x0000000623800000| Untracked | 0 +| 95|0x0000000623c00000, 0x0000000623c00000, 0x0000000624000000| 0%| F| |TAMS 0x0000000623c00000| PB 0x0000000623c00000| Untracked | 0 +| 96|0x0000000624000000, 0x0000000624000000, 0x0000000624400000| 0%| F| |TAMS 0x0000000624000000| PB 0x0000000624000000| Untracked | 0 +| 97|0x0000000624400000, 0x0000000624400000, 0x0000000624800000| 0%| F| |TAMS 0x0000000624400000| PB 0x0000000624400000| Untracked | 0 +| 98|0x0000000624800000, 0x0000000624800000, 0x0000000624c00000| 0%| F| |TAMS 0x0000000624800000| PB 0x0000000624800000| Untracked | 0 +| 99|0x0000000624c00000, 0x0000000624c00000, 0x0000000625000000| 0%| F| |TAMS 0x0000000624c00000| PB 0x0000000624c00000| Untracked | 0 +| 100|0x0000000625000000, 0x0000000625000000, 0x0000000625400000| 0%| F| |TAMS 0x0000000625000000| PB 0x0000000625000000| Untracked | 0 +| 101|0x0000000625400000, 0x0000000625400000, 0x0000000625800000| 0%| F| |TAMS 0x0000000625400000| PB 0x0000000625400000| Untracked | 0 +| 102|0x0000000625800000, 0x0000000625800000, 0x0000000625c00000| 0%| F| |TAMS 0x0000000625800000| PB 0x0000000625800000| Untracked | 0 +| 103|0x0000000625c00000, 0x0000000625c00000, 0x0000000626000000| 0%| F| |TAMS 0x0000000625c00000| PB 0x0000000625c00000| Untracked | 0 +| 104|0x0000000626000000, 0x0000000626000000, 0x0000000626400000| 0%| F| |TAMS 0x0000000626000000| PB 0x0000000626000000| Untracked | 0 +| 105|0x0000000626400000, 0x0000000626400000, 0x0000000626800000| 0%| F| |TAMS 0x0000000626400000| PB 0x0000000626400000| Untracked | 0 +| 106|0x0000000626800000, 0x0000000626800000, 0x0000000626c00000| 0%| F| |TAMS 0x0000000626800000| PB 0x0000000626800000| Untracked | 0 +| 107|0x0000000626c00000, 0x0000000626c00000, 0x0000000627000000| 0%| F| |TAMS 0x0000000626c00000| PB 0x0000000626c00000| Untracked | 0 +| 108|0x0000000627000000, 0x0000000627000000, 0x0000000627400000| 0%| F| |TAMS 0x0000000627000000| PB 0x0000000627000000| Untracked | 0 +| 109|0x0000000627400000, 0x0000000627400000, 0x0000000627800000| 0%| F| |TAMS 0x0000000627400000| PB 0x0000000627400000| Untracked | 0 +| 110|0x0000000627800000, 0x0000000627800000, 0x0000000627c00000| 0%| F| |TAMS 0x0000000627800000| PB 0x0000000627800000| Untracked | 0 +| 111|0x0000000627c00000, 0x0000000627c00000, 0x0000000628000000| 0%| F| |TAMS 0x0000000627c00000| PB 0x0000000627c00000| Untracked | 0 +| 112|0x0000000628000000, 0x0000000628000000, 0x0000000628400000| 0%| F| |TAMS 0x0000000628000000| PB 0x0000000628000000| Untracked | 0 +| 113|0x0000000628400000, 0x0000000628400000, 0x0000000628800000| 0%| F| |TAMS 0x0000000628400000| PB 0x0000000628400000| Untracked | 0 +| 114|0x0000000628800000, 0x0000000628800000, 0x0000000628c00000| 0%| F| |TAMS 0x0000000628800000| PB 0x0000000628800000| Untracked | 0 +| 115|0x0000000628c00000, 0x0000000628c00000, 0x0000000629000000| 0%| F| |TAMS 0x0000000628c00000| PB 0x0000000628c00000| Untracked | 0 +| 116|0x0000000629000000, 0x0000000629000000, 0x0000000629400000| 0%| F| |TAMS 0x0000000629000000| PB 0x0000000629000000| Untracked | 0 +| 117|0x0000000629400000, 0x0000000629400000, 0x0000000629800000| 0%| F| |TAMS 0x0000000629400000| PB 0x0000000629400000| Untracked | 0 +| 118|0x0000000629800000, 0x0000000629800000, 0x0000000629c00000| 0%| F| |TAMS 0x0000000629800000| PB 0x0000000629800000| Untracked | 0 +| 119|0x0000000629c00000, 0x0000000629e0f148, 0x000000062a000000| 51%| E| |TAMS 0x0000000629c00000| PB 0x0000000629c00000| Complete | 0 +| 120|0x000000062a000000, 0x000000062a400000, 0x000000062a400000|100%| E|CS|TAMS 0x000000062a000000| PB 0x000000062a000000| Complete | 0 +| 121|0x000000062a400000, 0x000000062a800000, 0x000000062a800000|100%| E| |TAMS 0x000000062a400000| PB 0x000000062a400000| Complete | 0 +| 122|0x000000062a800000, 0x000000062ac00000, 0x000000062ac00000|100%| E|CS|TAMS 0x000000062a800000| PB 0x000000062a800000| Complete | 0 +| 123|0x000000062ac00000, 0x000000062b000000, 0x000000062b000000|100%| E|CS|TAMS 0x000000062ac00000| PB 0x000000062ac00000| Complete | 0 +| 124|0x000000062b000000, 0x000000062b400000, 0x000000062b400000|100%| E|CS|TAMS 0x000000062b000000| PB 0x000000062b000000| Complete | 0 +|1999|0x00000007ffc00000, 0x00000007ffd1ec18, 0x0000000800000000| 28%| O| |TAMS 0x00000007ffc00000| PB 0x00000007ffc00000| Untracked | 0 + +Card table byte_map: [0x000078abc4c00000,0x000078abc5ba0000] _byte_map_base: 0x000078abc1ba0000 + +Marking Bits: (CMBitMap*) 0x000078abc0059190 + Bits: [0x000078aba0a00000, 0x000078aba8700000) + +Polling page: 0x000078abc9130000 + +Metaspace: + +Usage: + Non-class: 7.61 MB used. + Class: 754.40 KB used. + Both: 8.35 MB used. + +Virtual space: + Non-class space: 64.00 MB reserved, 7.75 MB ( 12%) committed, 1 nodes. + Class space: 1.00 GB reserved, 832.00 KB ( <1%) committed, 1 nodes. + Both: 1.06 GB reserved, 8.56 MB ( <1%) committed. + +Chunk freelists: + Non-Class: 7.98 MB + Class: 15.06 MB + Both: 23.05 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. + - use_allocation_guard: 0. + + +Internal statistics: + +num_allocs_failed_limit: 0. +num_arena_births: 142. +num_arena_deaths: 0. +num_vsnodes_births: 2. +num_vsnodes_deaths: 0. +num_space_committed: 137. +num_space_uncommitted: 0. +num_chunks_returned_to_freelist: 0. +num_chunks_taken_from_freelist: 355. +num_chunk_merges: 0. +num_chunk_splits: 242. +num_chunks_enlarged: 165. +num_inconsistent_stats: 0. + +CodeHeap 'non-profiled nmethods': size=120032Kb used=387Kb max_used=387Kb free=119645Kb + bounds [0x000078abb02c8000, 0x000078abb0538000, 0x000078abb7800000] +CodeHeap 'profiled nmethods': size=120028Kb used=1638Kb max_used=1638Kb free=118389Kb + bounds [0x000078aba8800000, 0x000078aba8a70000, 0x000078abafd37000] +CodeHeap 'non-nmethods': size=5700Kb used=2151Kb max_used=2169Kb free=3548Kb + bounds [0x000078abafd37000, 0x000078abaffa7000, 0x000078abb02c8000] +CodeCache: size=245760Kb, used=4176Kb, max_used=4194Kb, free=241582Kb + total_blobs=2418, nmethods=1248, adapters=1077, full_count=0 +Compilation: enabled, stopped_count=0, restarted_count=0 + +Compilation events (20 events): +Event: 0.803 Thread 0x000078abc01404c0 1235 3 java.lang.invoke.DirectMethodHandle::preparedLambdaForm (244 bytes) +Event: 0.804 Thread 0x000078abc01404c0 nmethod 1235 0x000078aba8994508 code [0x000078aba8994780, 0x000078aba8995630] +Event: 0.807 Thread 0x000078abc01404c0 1236 3 org.lwjgl.system.Checks::check (16 bytes) +Event: 0.807 Thread 0x000078abc01404c0 nmethod 1236 0x000078aba8995708 code [0x000078aba8995840, 0x000078aba8995a28] +Event: 0.807 Thread 0x000078abc01404c0 1237 3 sun.misc.Unsafe::getByte (12 bytes) +Event: 0.807 Thread 0x000078abc01404c0 nmethod 1237 0x000078aba8995a88 code [0x000078aba8995ba0, 0x000078aba8995d18] +Event: 0.807 Thread 0x000078abc01404c0 1238 ! 3 jdk.internal.misc.ScopedMemoryAccess::copyMemory (27 bytes) +Event: 0.807 Thread 0x000078abc01404c0 nmethod 1238 0x000078aba8995d88 code [0x000078aba8995f20, 0x000078aba8996530] +Event: 0.807 Thread 0x000078abc01404c0 1239 ! 3 jdk.internal.misc.ScopedMemoryAccess::copyMemoryInternal (56 bytes) +Event: 0.808 Thread 0x000078abc01404c0 nmethod 1239 0x000078aba8996588 code [0x000078aba8996700, 0x000078aba8996c20] +Event: 0.808 Thread 0x000078abc01404c0 1240 3 java.lang.ThreadLocal$ThreadLocalMap::nextIndex (15 bytes) +Event: 0.808 Thread 0x000078abc01404c0 nmethod 1240 0x000078aba8996c88 code [0x000078aba8996da0, 0x000078aba8996ed0] +Event: 0.808 Thread 0x000078abc01404c0 1241 3 org.lwjgl.system.Struct:: (11 bytes) +Event: 0.808 Thread 0x000078abc013edb0 1245 4 java.util.HashMap::putVal (300 bytes) +Event: 0.808 Thread 0x000078abc01404c0 nmethod 1241 0x000078aba8996f88 code [0x000078aba89970c0, 0x000078aba8997400] +Event: 0.808 Thread 0x000078abc01404c0 1244 3 org.lwjgl.system.MemoryUtil::strlen64NT1 (119 bytes) +Event: 0.808 Thread 0x000078abc01404c0 nmethod 1244 0x000078aba8997488 code [0x000078aba8997640, 0x000078aba8997ec0] +Event: 0.808 Thread 0x000078abc01404c0 1247 3 java.lang.ThreadLocal$ThreadLocalMap::getEntryAfterMiss (59 bytes) +Event: 0.808 Thread 0x000078abc01404c0 nmethod 1247 0x000078aba8997f08 code [0x000078aba8998080, 0x000078aba8998668] +Event: 0.808 Thread 0x000078abc01404c0 1242 3 org.lwjgl.system.StructBuffer::get (36 bytes) + +GC Heap History (0 events): +No events + +Dll operation events (10 events): +Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +Event: 0.016 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +Event: 0.016 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +Event: 0.024 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +Event: 0.027 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +Event: 0.067 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +Event: 0.117 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +Event: 0.122 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +Event: 0.387 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +Event: 0.390 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so + +Deoptimization events (20 events): +Event: 0.703 Thread 0x000078abc05a8d30 Uncommon trap: trap_request=0xffffff45 fr.pc=0x000078abb0306f5c relative=0x000000000000015c +Event: 0.703 Thread 0x000078abc05a8d30 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000078abb0306f5c method=java.util.concurrent.locks.ReentrantLock$NonfairSync.initialTryLock()Z @ 10 c2 +Event: 0.703 Thread 0x000078abc05a8d30 DEOPT PACKING pc=0x000078abb0306f5c sp=0x000078ab981fdec0 +Event: 0.703 Thread 0x000078abc05a8d30 DEOPT UNPACKING pc=0x000078abafd8abf9 sp=0x000078ab981fde68 mode 2 +Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: trap_request=0xffffffde fr.pc=0x000078abb03051cc relative=0x00000000000014cc +Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000078abb03051cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 +Event: 0.746 Thread 0x000078abc05a8d30 DEOPT PACKING pc=0x000078abb03051cc sp=0x000078ab981fdc40 +Event: 0.746 Thread 0x000078abc05a8d30 DEOPT UNPACKING pc=0x000078abafd8abf9 sp=0x000078ab981fdb40 mode 2 +Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: trap_request=0xffffffde fr.pc=0x000078abb03051cc relative=0x00000000000014cc +Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000078abb03051cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 +Event: 0.746 Thread 0x000078abc05a8d30 DEOPT PACKING pc=0x000078abb03051cc sp=0x000078ab981fdc40 +Event: 0.746 Thread 0x000078abc05a8d30 DEOPT UNPACKING pc=0x000078abafd8abf9 sp=0x000078ab981fdb40 mode 2 +Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: trap_request=0xffffffde fr.pc=0x000078abb03051cc relative=0x00000000000014cc +Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000078abb03051cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 +Event: 0.746 Thread 0x000078abc05a8d30 DEOPT PACKING pc=0x000078abb03051cc sp=0x000078ab981fdc40 +Event: 0.746 Thread 0x000078abc05a8d30 DEOPT UNPACKING pc=0x000078abafd8abf9 sp=0x000078ab981fdb40 mode 2 +Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: trap_request=0xffffffde fr.pc=0x000078abb03051cc relative=0x00000000000014cc +Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000078abb03051cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 +Event: 0.746 Thread 0x000078abc05a8d30 DEOPT PACKING pc=0x000078abb03051cc sp=0x000078ab981fdc40 +Event: 0.746 Thread 0x000078abc05a8d30 DEOPT UNPACKING pc=0x000078abafd8abf9 sp=0x000078ab981fdb40 mode 2 + +Classes loaded (20 events): +Event: 0.745 Loading class java/awt/image/WritableRenderedImage done +Event: 0.745 Loading class java/awt/Image +Event: 0.745 Loading class java/awt/Image done +Event: 0.745 Loading class java/awt/image/BufferedImage done +Event: 0.745 Loading class java/awt/ImageCapabilities +Event: 0.745 Loading class java/awt/ImageCapabilities done +Event: 0.745 Loading class java/awt/Image$1 +Event: 0.745 Loading class sun/awt/image/SurfaceManager$ImageAccessor +Event: 0.745 Loading class sun/awt/image/SurfaceManager$ImageAccessor done +Event: 0.745 Loading class java/awt/Image$1 done +Event: 0.745 Loading class sun/awt/image/SurfaceManager +Event: 0.745 Loading class sun/awt/image/SurfaceManager done +Event: 0.745 Loading class java/awt/image/BufferedImage$1 +Event: 0.745 Loading class java/awt/image/BufferedImage$1 done +Event: 0.745 Loading class sun/awt/image/IntegerComponentRaster +Event: 0.745 Loading class sun/awt/image/IntegerComponentRaster done +Event: 0.745 Loading class java/awt/image/IndexColorModel +Event: 0.745 Loading class java/awt/image/IndexColorModel done +Event: 0.745 Loading class sun/awt/image/ShortComponentRaster +Event: 0.745 Loading class sun/awt/image/ShortComponentRaster done + +Classes unloaded (0 events): +No events + +Classes redefined (0 events): +No events + +Internal exceptions (20 events): +Event: 0.108 Thread 0x000078abc002d0f0 Exception (0x000000062ae524c0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.109 Thread 0x000078abc002d0f0 Exception (0x000000062ae5dc50) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.109 Thread 0x000078abc002d0f0 Exception (0x000000062ae61b38) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.112 Thread 0x000078abc002d0f0 Exception (0x000000062ae7bf30) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.163 Thread 0x000078abc002d0f0 Exception (0x000000062af599d0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.163 Thread 0x000078abc002d0f0 Exception (0x000000062af5eb08) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.165 Thread 0x000078abc002d0f0 Exception (0x000000062af70568) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.166 Thread 0x000078abc002d0f0 Exception (0x000000062af76038) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.166 Thread 0x000078abc002d0f0 Exception (0x000000062af7a408) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.167 Thread 0x000078abc002d0f0 Exception (0x000000062af81660) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.227 Thread 0x000078abc002d0f0 Exception (0x000000062a929cf8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.237 Thread 0x000078abc002d0f0 Exception (0x000000062a981740) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 0.246 Thread 0x000078abc002d0f0 Exception (0x000000062a9ec330) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.248 Thread 0x000078abc002d0f0 Exception (0x000000062a9fa148) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.399 Thread 0x000078abc05a8d30 Exception (0x000000062a5b9fe8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.399 Thread 0x000078abc05a8d30 Exception (0x000000062a5bd538) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] +Event: 0.672 Thread 0x000078abc05a8d30 Exception (0x000000062a763a50) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.730 Thread 0x000078abc05a8d30 Exception (0x000000062a173530) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 0.731 Thread 0x000078abc05a8d30 Exception (0x000000062a179508) +thrown [open/src/hotspot/share/prims/jni.cpp, line 520] +Event: 0.735 Thread 0x000078abc05a8d30 Exception (0x000000062a1a4298) +thrown [open/src/hotspot/share/prims/jni.cpp, line 520] + +VM Operations (14 events): +Event: 0.099 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.099 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.107 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.107 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.119 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.119 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.129 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.130 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.404 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.404 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.687 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.687 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.728 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.728 Executing VM operation: HandshakeAllThreads (Deoptimize) done + +Memory protections (16 events): +Event: 0.001 Protecting memory [0x000078abc7700000,0x000078abc7704000] with protection modes 0 +Event: 0.015 Protecting memory [0x000078aba8700000,0x000078aba8704000] with protection modes 0 +Event: 0.015 Protecting memory [0x000078aba05fd000,0x000078aba0601000] with protection modes 0 +Event: 0.015 Protecting memory [0x000078aba04fd000,0x000078aba0501000] with protection modes 0 +Event: 0.015 Protecting memory [0x000078aba03fd000,0x000078aba0401000] with protection modes 0 +Event: 0.015 Protecting memory [0x000078aba02fd000,0x000078aba0301000] with protection modes 0 +Event: 0.015 Protecting memory [0x000078aba01fd000,0x000078aba0201000] with protection modes 0 +Event: 0.015 Protecting memory [0x000078aba00fd000,0x000078aba0101000] with protection modes 0 +Event: 0.021 Protecting memory [0x000078ab98f00000,0x000078ab98f04000] with protection modes 0 +Event: 0.022 Protecting memory [0x000078ab98e00000,0x000078ab98e04000] with protection modes 0 +Event: 0.163 Protecting memory [0x000078ab98d00000,0x000078ab98d04000] with protection modes 0 +Event: 0.252 Protecting memory [0x000078ab98100000,0x000078ab98104000] with protection modes 0 +Event: 0.252 Protecting memory [0x000078abc7700000,0x000078abc7704000] with protection modes 0 +Event: 0.697 Protecting memory [0x000078ab98d00000,0x000078ab98d04000] with protection modes 0 +Event: 0.705 Protecting memory [0x000078ab40d00000,0x000078ab40d04000] with protection modes 0 +Event: 0.742 Protecting memory [0x000078ab40300000,0x000078ab40304000] with protection modes 0 + +Nmethod flushes (0 events): +No events + +Events (18 events): +Event: 0.010 Thread 0x000078abc002d0f0 Thread added: 0x000078abc002d0f0 +Event: 0.014 Thread 0x000078abc002d0f0 Thread added: 0x000078abc0137930 +Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc0138ea0 +Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc013a6b0 +Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc013bcf0 +Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc013d290 +Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc013edb0 +Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc01404c0 +Event: 0.021 Thread 0x000078abc002d0f0 Thread added: 0x000078abc014d1b0 +Event: 0.022 Thread 0x000078abc002d0f0 Thread added: 0x000078abc014fc90 +Event: 0.163 Thread 0x000078abc01404c0 Thread added: 0x000078ab0815bc30 +Event: 0.252 Thread 0x000078abc002d0f0 Thread added: 0x000078abc05a8d30 +Event: 0.252 Thread 0x000078abc002d0f0 Thread exited: 0x000078abc002d0f0 +Event: 0.252 Thread 0x000078abc002d0f0 Thread added: 0x000078abc002d0f0 +Event: 0.672 Thread 0x000078ab0815bc30 Thread exited: 0x000078ab0815bc30 +Event: 0.697 Thread 0x000078abc05a8d30 Thread added: 0x000078aaf05acb60 +Event: 0.705 Thread 0x000078abc01404c0 Thread added: 0x000078ab084b7a10 +Event: 0.741 Thread 0x000078abc05a8d30 Thread added: 0x000078aaf0763530 + + +Dynamic libraries: +60c000000-62b400000 rw-p 00000000 00:00 0 +62b400000-7ffc00000 ---p 00000000 00:00 0 +7ffc00000-7ffd1f000 rw-p 00dc0000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa +7ffd1f000-800000000 rw-p 00000000 00:00 0 +649e5204b000-649e5204c000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +649e5204d000-649e5204e000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +649e5204e000-649e5204f000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +649e57a11000-649e57a5a000 rw-p 00000000 00:00 0 [heap] +78aab8000000-78aab8021000 rw-p 00000000 00:00 0 +78aab8021000-78aabc000000 ---p 00000000 00:00 0 +78aabc000000-78aabc021000 rw-p 00000000 00:00 0 +78aabc021000-78aac0000000 ---p 00000000 00:00 0 +78aac4000000-78aac4034000 rw-p 00000000 00:00 0 +78aac4034000-78aac8000000 ---p 00000000 00:00 0 +78aac8000000-78aac8021000 rw-p 00000000 00:00 0 +78aac8021000-78aacc000000 ---p 00000000 00:00 0 +78aad0000000-78aad00c8000 rw-p 00000000 00:00 0 +78aad00c8000-78aad4000000 ---p 00000000 00:00 0 +78aad4000000-78aad4021000 rw-p 00000000 00:00 0 +78aad4021000-78aad8000000 ---p 00000000 00:00 0 +78aadc000000-78aadc021000 rw-p 00000000 00:00 0 +78aadc021000-78aae0000000 ---p 00000000 00:00 0 +78aae1000000-78aae7712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +78aae7712000-78aae7f30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +78aae7f30000-78aae7f76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +78aae7f76000-78aae7ff2000 rw-p 00000000 00:00 0 +78aae8000000-78aae8021000 rw-p 00000000 00:00 0 +78aae8021000-78aaec000000 ---p 00000000 00:00 0 +78aaf0000000-78aaf0f2e000 rw-p 00000000 00:00 0 +78aaf0f2e000-78aaf4000000 ---p 00000000 00:00 0 +78aaf4000000-78aaf41d4000 rw-p 00000000 00:00 0 +78aaf41d4000-78aaf8000000 ---p 00000000 00:00 0 +78aafc000000-78aafc021000 rw-p 00000000 00:00 0 +78aafc021000-78ab00000000 ---p 00000000 00:00 0 +78ab00000000-78ab00021000 rw-p 00000000 00:00 0 +78ab00021000-78ab04000000 ---p 00000000 00:00 0 +78ab08000000-78ab084d8000 rw-p 00000000 00:00 0 +78ab084d8000-78ab0c000000 ---p 00000000 00:00 0 +78ab0c000000-78ab0c327000 rw-p 00000000 00:00 0 +78ab0c327000-78ab10000000 ---p 00000000 00:00 0 +78ab12000000-78ab12cf5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +78ab12cf5000-78ab136d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +78ab136d8000-78ab13ae9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +78ab13ae9000-78ab13f6b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +78ab13f6b000-78ab13f73000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +78ab13f73000-78ab13f7e000 rw-p 00000000 00:00 0 +78ab14000000-78ab14021000 rw-p 00000000 00:00 0 +78ab14021000-78ab18000000 ---p 00000000 00:00 0 +78ab18000000-78ab18021000 rw-p 00000000 00:00 0 +78ab18021000-78ab1c000000 ---p 00000000 00:00 0 +78ab1c400000-78ab1c401000 ---p 00000000 00:00 0 +78ab1c401000-78ab1cc01000 rw-p 00000000 00:00 0 +78ab1ce00000-78ab1ce2f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +78ab1ce2f000-78ab1d502000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +78ab1d502000-78ab1d624000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +78ab1d624000-78ab1d635000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +78ab1d635000-78ab1d6b3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +78ab1d6b3000-78ab1d6c7000 rw-p 00000000 00:00 0 +78ab1d800000-78ab1d801000 ---p 00000000 00:00 0 +78ab1d801000-78ab1e001000 rw-p 00000000 00:00 0 +78ab1e200000-78ab1e201000 ---p 00000000 00:00 0 +78ab1e201000-78ab1ea01000 rw-p 00000000 00:00 0 +78ab1ec00000-78ab1ec01000 ---p 00000000 00:00 0 +78ab1ec01000-78ab1f401000 rw-p 00000000 00:00 0 +78ab1f600000-78ab1f601000 ---p 00000000 00:00 0 +78ab1f601000-78ab1fe01000 rw-p 00000000 00:00 0 +78ab20000000-78ab20021000 rw-p 00000000 00:00 0 +78ab20021000-78ab24000000 ---p 00000000 00:00 0 +78ab24000000-78ab24021000 rw-p 00000000 00:00 0 +78ab24021000-78ab28000000 ---p 00000000 00:00 0 +78ab28400000-78ab28422000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +78ab28422000-78ab28621000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +78ab28621000-78ab28629000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +78ab28629000-78ab2862a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +78ab2862a000-78ab2862b000 rw-p 00000000 00:00 0 +78ab28a00000-78ab28a01000 ---p 00000000 00:00 0 +78ab28a01000-78ab29201000 rw-p 00000000 00:00 0 +78ab29400000-78ab29401000 ---p 00000000 00:00 0 +78ab29401000-78ab29c01000 rw-p 00000000 00:00 0 +78ab29e00000-78ab29e16000 r--p 00000000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +78ab29e16000-78ab29f06000 r-xp 00016000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +78ab29f06000-78ab29f79000 r--p 00106000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +78ab29f79000-78ab29f80000 r--p 00178000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +78ab29f80000-78ab29f87000 rw-p 0017f000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +78ab29f87000-78ab2a002000 rw-p 00000000 00:00 0 +78ab2a200000-78ab2a201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +78ab2a201000-78ab2a202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +78ab2a202000-78ab2be1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +78ab2be1c000-78ab2be1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +78ab2be1d000-78ab2be1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +78ab2c000000-78ab2c021000 rw-p 00000000 00:00 0 +78ab2c021000-78ab30000000 ---p 00000000 00:00 0 +78ab30000000-78ab30021000 rw-p 00000000 00:00 0 +78ab30021000-78ab34000000 ---p 00000000 00:00 0 +78ab34400000-78ab3448d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +78ab3448d000-78ab34bf5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +78ab34bf5000-78ab35482000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +78ab35482000-78ab354c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +78ab354c4000-78ab354c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +78ab354c7000-78ab354cd000 rw-p 00000000 00:00 0 +78ab35600000-78ab357c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +78ab357c4000-78ab374c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +78ab374c4000-78ab37b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +78ab37b39000-78ab37b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +78ab37b3a000-78ab37d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +78ab37d1a000-78ab37d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +78ab37d93000-78ab37e08000 rw-p 00000000 00:00 0 +78ab38000000-78ab383b0000 rw-p 00000000 00:00 0 +78ab383b0000-78ab38400000 ---p 00000000 00:00 0 +78ab38400000-78ab38810000 rw-p 00000000 00:00 0 +78ab38810000-78ab3c000000 ---p 00000000 00:00 0 +78ab3c000000-78ab3c021000 rw-p 00000000 00:00 0 +78ab3c021000-78ab40000000 ---p 00000000 00:00 0 +78ab401bf000-78ab40300000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index +78ab40300000-78ab40304000 ---p 00000000 00:00 0 +78ab40304000-78ab40400000 rw-p 00000000 00:00 0 +78ab40400000-78ab4045b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +78ab4045b000-78ab407d9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +78ab407d9000-78ab40bd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +78ab40bd5000-78ab40c10000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +78ab40c10000-78ab40c15000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +78ab40c15000-78ab40c40000 rw-p 00000000 00:00 0 +78ab40d00000-78ab40d04000 ---p 00000000 00:00 0 +78ab40d04000-78ab40e00000 rw-p 00000000 00:00 0 +78ab40e00000-78ab40e6e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +78ab40e6e000-78ab413d5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +78ab413d5000-78ab41ae8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +78ab41ae8000-78ab41ae9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +78ab41ae9000-78ab41b26000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +78ab41b26000-78ab41b29000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +78ab41b29000-78ab41b2b000 rw-p 00000000 00:00 0 +78ab41bed000-78ab41bef000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +78ab41bef000-78ab41bf8000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +78ab41bf8000-78ab41bfb000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +78ab41bfb000-78ab41bfc000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +78ab41bfc000-78ab41bfd000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +78ab41bfd000-78ab41bfe000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +78ab41bfe000-78ab41c00000 rw-p 00000000 00:00 0 +78ab41c00000-78ab41c9a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +78ab41c9a000-78ab41dab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +78ab41dab000-78ab41e1a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +78ab41e1a000-78ab41e1b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +78ab41e1b000-78ab41e26000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +78ab41e26000-78ab41e29000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +78ab41e29000-78ab41e2c000 rw-p 00000000 00:00 0 +78ab41e31000-78ab41e42000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +78ab41e42000-78ab41e84000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +78ab41e84000-78ab41e9c000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +78ab41e9c000-78ab41eaa000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +78ab41eaa000-78ab41eac000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +78ab41eac000-78ab41eb0000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +78ab41eb0000-78ab41ecc000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +78ab41ecc000-78ab41ed2000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +78ab41ed2000-78ab41ed3000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +78ab41ed3000-78ab41ed5000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +78ab41ed5000-78ab41ed6000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +78ab41ed6000-78ab41ee2000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +78ab41ee2000-78ab41f02000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +78ab41f02000-78ab41f0e000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +78ab41f0e000-78ab41f18000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +78ab41f18000-78ab41f19000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +78ab41f19000-78ab41f1b000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +78ab41f1b000-78ab41f86000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +78ab41f86000-78ab41fae000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +78ab41fae000-78ab41faf000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +78ab41faf000-78ab41fb0000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +78ab41fb0000-78ab41fc3000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +78ab41fc3000-78ab41fe2000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +78ab41fe2000-78ab41fef000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +78ab41fef000-78ab41fff000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +78ab41fff000-78ab42000000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +78ab42000000-78ab42d91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa +78ab42d91000-78ab43000000 ---p 00000000 00:00 0 +78ab43000000-78ab43030000 rw-p 00000000 00:00 0 +78ab43030000-78ab430b0000 rw-p 00000000 00:00 0 +78ab430b0000-78ab430c0000 ---p 00000000 00:00 0 +78ab430c0000-78ab430e0000 rw-p 00000000 00:00 0 +78ab430e0000-78ab83000000 ---p 00000000 00:00 0 +78ab83002000-78ab8300c000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +78ab8300c000-78ab83016000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +78ab83016000-78ab8301d000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +78ab8301d000-78ab83026000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +78ab83026000-78ab83027000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +78ab83027000-78ab83036000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +78ab83036000-78ab8311c000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +78ab8311c000-78ab8315a000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +78ab8315a000-78ab8315b000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +78ab8315b000-78ab8315e000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +78ab8315e000-78ab83164000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +78ab83164000-78ab83165000 rw-p 00000000 00:00 0 +78ab83165000-78ab83178000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +78ab83178000-78ab831f7000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +78ab831f7000-78ab83222000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +78ab83222000-78ab83223000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +78ab83223000-78ab8322a000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +78ab8322a000-78ab8322b000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +78ab8322b000-78ab8322c000 rw-p 00000000 00:00 0 +78ab8322c000-78ab8325f000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +78ab8325f000-78ab832c2000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +78ab832c2000-78ab832e1000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +78ab832e1000-78ab8330c000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +78ab8330c000-78ab8330d000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +78ab8330d000-78ab8330e000 rw-p 00000000 00:00 0 +78ab8330e000-78ab833cf000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +78ab833cf000-78ab833d0000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +78ab833d0000-78ab833db000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +78ab833db000-78ab83400000 rw-p 00000000 00:00 0 +78ab83400000-78ab83493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +78ab83493000-78ab838e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +78ab838e6000-78ab83dfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +78ab83dfc000-78ab83e34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +78ab83e34000-78ab83e44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +78ab83e44000-78ab83e49000 rw-p 00000000 00:00 0 +78ab83e52000-78ab83e56000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +78ab83e56000-78ab83e66000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +78ab83e66000-78ab83e69000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +78ab83e69000-78ab83e6a000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +78ab83e6a000-78ab83e6b000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +78ab83e6b000-78ab83e76000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +78ab83e76000-78ab83ea4000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +78ab83ea4000-78ab83eb6000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +78ab83eb6000-78ab83eb7000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +78ab83eb7000-78ab83eb8000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +78ab83eb8000-78ab83eb9000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +78ab83eb9000-78ab83ee8000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +78ab83ee8000-78ab83fa4000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +78ab83fa4000-78ab83fef000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +78ab83fef000-78ab83ffd000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +78ab83ffd000-78ab83fff000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +78ab83fff000-78ab84000000 rw-p 00000000 00:00 0 +78ab84000000-78ab84021000 rw-p 00000000 00:00 0 +78ab84021000-78ab88000000 ---p 00000000 00:00 0 +78ab88000000-78ab88021000 rw-p 00000000 00:00 0 +78ab88021000-78ab8c000000 ---p 00000000 00:00 0 +78ab8c023000-78ab8c089000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +78ab8c089000-78ab8c17c000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +78ab8c17c000-78ab8c208000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +78ab8c208000-78ab8c21b000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +78ab8c21b000-78ab8c21c000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +78ab8c21c000-78ab8c21e000 rw-p 00000000 00:00 0 +78ab8c21e000-78ab8c24d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +78ab8c24d000-78ab8c3a0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +78ab8c3a0000-78ab8c3f4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +78ab8c3f4000-78ab8c3f5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +78ab8c3f5000-78ab8c3fe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +78ab8c3fe000-78ab8c3ff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +78ab8c3ff000-78ab8cd22000 rw-p 00000000 00:00 0 +78ab8cd2b000-78ab8cd34000 rw-s 00000000 00:01 903423 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +78ab8cd34000-78ab8cd3a000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +78ab8cd3a000-78ab8cd54000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +78ab8cd54000-78ab8cd5b000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +78ab8cd5b000-78ab8cd5c000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +78ab8cd5c000-78ab8cd5d000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +78ab8cd5d000-78ab8cd5e000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +78ab8cd5e000-78ab8cd60000 rw-p 00000000 00:00 0 +78ab8cd60000-78ab8cd64000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +78ab8cd64000-78ab8cd7a000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +78ab8cd7a000-78ab8cd84000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +78ab8cd84000-78ab8cd85000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +78ab8cd85000-78ab8cd86000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +78ab8cd86000-78ab8cdf6000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +78ab8cdf6000-78ab8cdf7000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +78ab8cdf7000-78ab8cdfc000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +78ab8cdfc000-78ab8cdfe000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +78ab8cdfe000-78ab8ce00000 rw-p 00000000 00:00 0 +78ab8ce00000-78ab8ce01000 ---p 00000000 00:00 0 +78ab8ce01000-78ab8d601000 rw-p 00000000 00:00 0 +78ab8d606000-78ab8d60f000 rw-s 00000000 00:01 903422 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +78ab8d60f000-78ab8d611000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +78ab8d611000-78ab8d62a000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +78ab8d62a000-78ab8d62c000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +78ab8d62c000-78ab8d62d000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +78ab8d62d000-78ab8d62e000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +78ab8d62e000-78ab8d62f000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +78ab8d633000-78ab8d635000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +78ab8d635000-78ab8d63d000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +78ab8d63d000-78ab8d63f000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +78ab8d63f000-78ab8d640000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +78ab8d640000-78ab8d641000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +78ab8d641000-78ab8d643000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +78ab8d643000-78ab8d64b000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +78ab8d64b000-78ab8d64c000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +78ab8d64c000-78ab8d64d000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +78ab8d64d000-78ab8d64e000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +78ab8d64e000-78ab8d64f000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +78ab8d64f000-78ab8d653000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +78ab8d653000-78ab8d668000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +78ab8d668000-78ab8d66e000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +78ab8d66e000-78ab8d66f000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +78ab8d66f000-78ab8d671000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +78ab8d671000-78ab8d672000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +78ab8d672000-78ab8d675000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +78ab8d675000-78ab8d696000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +78ab8d696000-78ab8d6a2000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +78ab8d6a2000-78ab8d6a3000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +78ab8d6a3000-78ab8d6a4000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +78ab8d6a4000-78ab8d6a5000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +78ab8d6a5000-78ab8d6b3000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +78ab8d6b3000-78ab8d6c4000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +78ab8d6c4000-78ab8d6d2000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +78ab8d6d2000-78ab8d6d6000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +78ab8d6d6000-78ab8d6d7000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +78ab8d6d7000-78ab8d6df000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +78ab8d6df000-78ab8d6fd000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +78ab8d6fd000-78ab8d70a000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +78ab8d70a000-78ab8d70c000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +78ab8d70c000-78ab8d70d000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +78ab8d70d000-78ab8d711000 rw-p 00000000 00:00 0 +78ab8d711000-78ab8d714000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +78ab8d714000-78ab8d72b000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +78ab8d72b000-78ab8d72f000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +78ab8d72f000-78ab8d730000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +78ab8d730000-78ab8d731000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +78ab8d731000-78ab8d73b000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +78ab8d73b000-78ab8d7ed000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +78ab8d7ed000-78ab8d7fe000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +78ab8d7fe000-78ab8d7ff000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +78ab8d7ff000-78ab8d800000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +78ab8d800000-78ab8da41000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +78ab8da41000-78ab8da62000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +78ab8da62000-78ab8dc00000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +78ab8dc00000-78ab8e800000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +78ab8e800000-78ab8f6ab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +78ab8f6ab000-78ab8f810000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +78ab8f810000-78ab8f87e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +78ab8f87e000-78ab8f89c000 rw-p 00000000 00:00 0 +78ab8f89d000-78ab8f89f000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +78ab8f89f000-78ab8f8a3000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +78ab8f8a3000-78ab8f8a5000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +78ab8f8a5000-78ab8f8a6000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +78ab8f8a6000-78ab8f8a7000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +78ab8f8a7000-78ab8f8a9000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +78ab8f8a9000-78ab8f8b0000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +78ab8f8b0000-78ab8f8b1000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +78ab8f8b1000-78ab8f8b2000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +78ab8f8b2000-78ab8f8b3000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +78ab8f8b3000-78ab8f8b4000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +78ab8f8b4000-78ab8f8b8000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +78ab8f8b8000-78ab8f8d7000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +78ab8f8d7000-78ab8f8e1000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +78ab8f8e1000-78ab8f8e2000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +78ab8f8e2000-78ab8f8e4000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +78ab8f8e4000-78ab8f8e5000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +78ab8f8e5000-78ab8f8ea000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +78ab8f8ea000-78ab8f8f5000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +78ab8f8f5000-78ab8f8f9000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +78ab8f8f9000-78ab8f8fa000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +78ab8f8fa000-78ab8f8fb000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +78ab8f8fb000-78ab8f8fc000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +78ab8f8fc000-78ab8f90c000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +78ab8f90c000-78ab8f96a000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +78ab8f96a000-78ab8f986000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +78ab8f986000-78ab8f987000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +78ab8f987000-78ab8f98d000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +78ab8f98d000-78ab8f98e000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +78ab8f98e000-78ab8f996000 rw-p 00000000 00:00 0 +78ab8f996000-78ab8f9e7000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +78ab8f9e7000-78ab8fa43000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +78ab8fa43000-78ab8fa78000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +78ab8fa78000-78ab8fa79000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +78ab8fa79000-78ab8fa99000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +78ab8fa99000-78ab8fab9000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +78ab8fab9000-78ab8fabe000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +78ab8fabe000-78ab8fac0000 rw-p 00000000 00:00 0 +78ab8fac0000-78ab8fad9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +78ab8fad9000-78ab8fb65000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +78ab8fb65000-78ab8fbfa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +78ab8fbfa000-78ab8fbfb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +78ab8fbfb000-78ab8fbfc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +78ab8fbfc000-78ab8fc00000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +78ab8fc00000-78ab90021000 rw-p 00000000 00:00 0 +78ab90021000-78ab94000000 ---p 00000000 00:00 0 +78ab94000000-78ab94021000 rw-p 00000000 00:00 0 +78ab94021000-78ab98000000 ---p 00000000 00:00 0 +78ab98002000-78ab98004000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +78ab98004000-78ab98007000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +78ab98007000-78ab98008000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +78ab98008000-78ab98009000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +78ab98009000-78ab9800a000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +78ab9800a000-78ab9800b000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +78ab9800b000-78ab9800c000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +78ab9800c000-78ab9800d000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +78ab9800d000-78ab9800e000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +78ab9800e000-78ab9800f000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +78ab9800f000-78ab98010000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +78ab98010000-78ab98011000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +78ab98011000-78ab98012000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +78ab98012000-78ab98013000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +78ab98013000-78ab98014000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +78ab98014000-78ab98017000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +78ab98017000-78ab9801a000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +78ab9801a000-78ab9801b000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +78ab9801b000-78ab9801c000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +78ab9801c000-78ab9801d000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +78ab9801d000-78ab9801e000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +78ab9801e000-78ab98021000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +78ab98021000-78ab98024000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +78ab98024000-78ab98025000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +78ab98025000-78ab98026000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +78ab98026000-78ab98027000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +78ab98027000-78ab98028000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +78ab98028000-78ab98029000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +78ab98029000-78ab9802a000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +78ab9802a000-78ab9802b000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +78ab9802b000-78ab9802c000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +78ab9802c000-78ab9802d000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +78ab9802d000-78ab98032000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +78ab98032000-78ab98038000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +78ab98038000-78ab9803b000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +78ab9803b000-78ab9803d000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +78ab9803d000-78ab9803e000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +78ab9803e000-78ab98041000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +78ab98041000-78ab98055000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +78ab98055000-78ab98059000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +78ab98059000-78ab9805a000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +78ab9805a000-78ab9805b000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +78ab9805b000-78ab9805c000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +78ab9805c000-78ab9805f000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +78ab9805f000-78ab98065000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +78ab98065000-78ab98067000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +78ab98067000-78ab98068000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +78ab98068000-78ab98069000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +78ab98069000-78ab98079000 r--p 00000000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +78ab98079000-78ab9809a000 r-xp 00010000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +78ab9809a000-78ab980d6000 r--p 00031000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +78ab980d6000-78ab980da000 r--p 0006c000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +78ab980da000-78ab980dd000 rw-p 00070000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +78ab980dd000-78ab98100000 rw-p 00000000 00:00 0 +78ab98100000-78ab98104000 ---p 00000000 00:00 0 +78ab98104000-78ab98200000 rw-p 00000000 00:00 0 +78ab98200000-78ab98a00000 rw-p 00000000 00:00 0 +78ab98a00000-78ab98a08000 r--p 00000000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +78ab98a08000-78ab98a60000 r-xp 00008000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +78ab98a60000-78ab98a71000 r--p 00060000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +78ab98a71000-78ab98a72000 ---p 00071000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +78ab98a72000-78ab98a78000 r--p 00071000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +78ab98a78000-78ab98a79000 rw-p 00077000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +78ab98a79000-78ab98c83000 rw-p 00000000 00:00 0 +78ab98c84000-78ab98c8a000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +78ab98c8a000-78ab98cd4000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +78ab98cd4000-78ab98cfe000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +78ab98cfe000-78ab98cff000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +78ab98cff000-78ab98d00000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +78ab98d00000-78ab98d04000 ---p 00000000 00:00 0 +78ab98d04000-78ab98e00000 rw-p 00000000 00:00 0 +78ab98e00000-78ab98e04000 ---p 00000000 00:00 0 +78ab98e04000-78ab98f00000 rw-p 00000000 00:00 0 +78ab98f00000-78ab98f04000 ---p 00000000 00:00 0 +78ab98f04000-78ab99000000 rw-p 00000000 00:00 0 +78ab99000000-78ab99f06000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive +78ab99f08000-78ab99f0a000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +78ab99f0a000-78ab99f0c000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +78ab99f0c000-78ab99f0d000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +78ab99f0d000-78ab99f0e000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +78ab99f0e000-78ab99f0f000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +78ab99f0f000-78ab99f16000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +78ab99f16000-78ab99f1c000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +78ab99f1c000-78ab99f1f000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +78ab99f1f000-78ab99f20000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +78ab99f20000-78ab99f21000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +78ab99f21000-78ab99f22000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +78ab99f22000-78ab99f2d000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +78ab99f2d000-78ab99f36000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +78ab99f36000-78ab99f3b000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +78ab99f3b000-78ab99f3c000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +78ab99f3c000-78ab99f3e000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +78ab99f3e000-78ab99f3f000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +78ab99f3f000-78ab99f40000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +78ab99f40000-78ab99f42000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +78ab99f42000-78ab99f43000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +78ab99f43000-78ab99f44000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +78ab99f44000-78ab99f45000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +78ab99f45000-78ab99f46000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +78ab99f46000-78ab99f47000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +78ab99f47000-78ab99f48000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +78ab99f48000-78ab99f49000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +78ab99f49000-78ab99f4a000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +78ab99f4a000-78ab99f4c000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +78ab99f4c000-78ab99f52000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +78ab99f52000-78ab99f54000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +78ab99f54000-78ab99f55000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +78ab99f55000-78ab99f56000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +78ab99f56000-78ab99f58000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +78ab99f58000-78ab99f5f000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +78ab99f5f000-78ab99f61000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +78ab99f61000-78ab99f62000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +78ab99f62000-78ab99f63000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +78ab99f63000-78ab99f65000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +78ab99f65000-78ab99f6c000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +78ab99f6c000-78ab99f6e000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +78ab99f6e000-78ab99f6f000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +78ab99f6f000-78ab99f70000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +78ab99f70000-78ab99f73000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +78ab99f73000-78ab99f7f000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +78ab99f7f000-78ab99f82000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +78ab99f82000-78ab99f83000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +78ab99f83000-78ab99f84000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +78ab99f84000-78ab99fb0000 r--p 00000000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +78ab99fb0000-78ab99fe4000 r-xp 0002c000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +78ab99fe4000-78ab99ffe000 r--p 00060000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +78ab99ffe000-78ab99fff000 r--p 00079000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +78ab99fff000-78ab9a000000 rw-p 0007a000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +78ab9a000000-78ab9c000000 rw-p 00000000 00:00 0 +78ab9c000000-78ab9c021000 rw-p 00000000 00:00 0 +78ab9c021000-78aba0000000 ---p 00000000 00:00 0 +78aba0003000-78aba000e000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +78aba000e000-78aba0022000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +78aba0022000-78aba002b000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +78aba002b000-78aba002c000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +78aba002c000-78aba002d000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +78aba002d000-78aba00fb000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +78aba00fb000-78aba00fc000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +78aba00fc000-78aba00fd000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +78aba00fd000-78aba0101000 ---p 00000000 00:00 0 +78aba0101000-78aba01fd000 rw-p 00000000 00:00 0 +78aba01fd000-78aba0201000 ---p 00000000 00:00 0 +78aba0201000-78aba02fd000 rw-p 00000000 00:00 0 +78aba02fd000-78aba0301000 ---p 00000000 00:00 0 +78aba0301000-78aba03fd000 rw-p 00000000 00:00 0 +78aba03fd000-78aba0401000 ---p 00000000 00:00 0 +78aba0401000-78aba04fd000 rw-p 00000000 00:00 0 +78aba04fd000-78aba0501000 ---p 00000000 00:00 0 +78aba0501000-78aba05fd000 rw-p 00000000 00:00 0 +78aba05fd000-78aba0601000 ---p 00000000 00:00 0 +78aba0601000-78aba06fd000 rw-p 00000000 00:00 0 +78aba06fd000-78aba06fe000 ---p 00000000 00:00 0 +78aba06fe000-78aba07fe000 rw-p 00000000 00:00 0 +78aba07fe000-78aba07ff000 ---p 00000000 00:00 0 +78aba07ff000-78aba08ff000 rw-p 00000000 00:00 0 +78aba08ff000-78aba0900000 ---p 00000000 00:00 0 +78aba0900000-78aba0a00000 rw-p 00000000 00:00 0 +78aba0a00000-78aba11d0000 rw-p 00000000 00:00 0 +78aba11d0000-78aba86f0000 ---p 00000000 00:00 0 +78aba86f0000-78aba8700000 rw-p 00000000 00:00 0 +78aba8700000-78aba8704000 ---p 00000000 00:00 0 +78aba8704000-78aba8800000 rw-p 00000000 00:00 0 +78aba8800000-78aba8a70000 rwxp 00000000 00:00 0 +78aba8a70000-78abafd37000 ---p 00000000 00:00 0 +78abafd37000-78abaffa7000 rwxp 00000000 00:00 0 +78abaffa7000-78abb02c8000 ---p 00000000 00:00 0 +78abb02c8000-78abb0538000 rwxp 00000000 00:00 0 +78abb0538000-78abb7800000 ---p 00000000 00:00 0 +78abb7800000-78abbffb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules +78abbffb7000-78abbffb9000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +78abbffb9000-78abbffbc000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +78abbffbc000-78abbffbd000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +78abbffbd000-78abbffbe000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +78abbffbe000-78abbffbf000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +78abbffbf000-78abbfffd000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +78abbfffd000-78abbfffe000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +78abbfffe000-78abbffff000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +78abbffff000-78abc0000000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +78abc0000000-78abc05ad000 rw-p 00000000 00:00 0 +78abc05ad000-78abc4000000 ---p 00000000 00:00 0 +78abc4004000-78abc4008000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +78abc4008000-78abc4013000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +78abc4013000-78abc4017000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +78abc4017000-78abc4018000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +78abc4018000-78abc4019000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +78abc4019000-78abc40f5000 rw-p 00000000 00:00 0 +78abc40f5000-78abc40f6000 ---p 00000000 00:00 0 +78abc40f6000-78abc41f6000 rw-p 00000000 00:00 0 +78abc41f6000-78abc49fe000 rw-p 00000000 00:00 0 +78abc49fe000-78abc49ff000 ---p 00000000 00:00 0 +78abc49ff000-78abc4aff000 rw-p 00000000 00:00 0 +78abc4aff000-78abc4b00000 ---p 00000000 00:00 0 +78abc4b00000-78abc4c00000 rw-p 00000000 00:00 0 +78abc4c00000-78abc4cfa000 rw-p 00000000 00:00 0 +78abc4cfa000-78abc5b9e000 ---p 00000000 00:00 0 +78abc5b9e000-78abc5ba0000 rw-p 00000000 00:00 0 +78abc5ba0000-78abc5ba1000 r--s 00000000 00:06 1017 /dev/nvidiactl +78abc5ba1000-78abc5ba2000 rw-s 00000000 00:01 5128 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +78abc5ba2000-78abc5ba3000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +78abc5ba3000-78abc5ba4000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +78abc5ba4000-78abc5ba5000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +78abc5ba5000-78abc5ba6000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +78abc5ba6000-78abc5ba7000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +78abc5ba7000-78abc5bab000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +78abc5bab000-78abc5bb8000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +78abc5bb8000-78abc5bbb000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +78abc5bbb000-78abc5bbc000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +78abc5bbc000-78abc5bbd000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +78abc5bbd000-78abc5bbe000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +78abc5bbe000-78abc5cfa000 rw-p 00000000 00:00 0 +78abc5cfa000-78abc6b9e000 ---p 00000000 00:00 0 +78abc6b9e000-78abc6ba0000 rw-p 00000000 00:00 0 +78abc6ba0000-78abc6ba1000 ---p 00000000 00:00 0 +78abc6ba1000-78abc6ca1000 rw-p 00000000 00:00 0 +78abc6ca1000-78abc752f000 rw-p 00000000 00:00 0 +78abc752f000-78abc7615000 ---p 00000000 00:00 0 +78abc7615000-78abc761a000 rw-p 00000000 00:00 0 +78abc761a000-78abc7700000 ---p 00000000 00:00 0 +78abc7700000-78abc7704000 ---p 00000000 00:00 0 +78abc7704000-78abc7800000 rw-p 00000000 00:00 0 +78abc7800000-78abc8b30000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +78abc8b30000-78abc8c00000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +78abc8c00000-78abc8c2e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +78abc8c2e000-78abc8ca4000 rw-p 00000000 00:00 0 +78abc8ca4000-78abc8ca5000 rw-s 00000000 00:01 903421 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) +78abc8ca5000-78abc8ca6000 rw-s 00000000 00:01 903420 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +78abc8ca6000-78abc8ca7000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +78abc8ca7000-78abc8caa000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +78abc8caa000-78abc8cab000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +78abc8cab000-78abc8cac000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +78abc8cac000-78abc8cad000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +78abc8cad000-78abc8caf000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +78abc8caf000-78abc8cb6000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +78abc8cb6000-78abc8cb8000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +78abc8cb8000-78abc8cb9000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +78abc8cb9000-78abc8cba000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +78abc8cba000-78abc8cc1000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache +78abc8cc1000-78abc8cc2000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +78abc8cc2000-78abc8cc5000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +78abc8cc5000-78abc8cc6000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +78abc8cc6000-78abc8cc7000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +78abc8cc7000-78abc8cc8000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +78abc8cc8000-78abc8cc9000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +78abc8cc9000-78abc8ccc000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +78abc8ccc000-78abc8cd0000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +78abc8cd0000-78abc8cd2000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +78abc8cd2000-78abc8cd3000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +78abc8cd3000-78abc8cd4000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +78abc8cd4000-78abc8cd5000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +78abc8cd5000-78abc8cd7000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +78abc8cd7000-78abc8cd8000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +78abc8cd8000-78abc8cd9000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +78abc8cd9000-78abc8cda000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +78abc8cda000-78abc8d19000 rw-p 00000000 00:00 0 +78abc8d19000-78abc8d27000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +78abc8d27000-78abc8da3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +78abc8da3000-78abc8dfe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +78abc8dfe000-78abc8dff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +78abc8dff000-78abc8e00000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +78abc8e00000-78abc8e28000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +78abc8e28000-78abc8fbd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +78abc8fbd000-78abc9015000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +78abc9015000-78abc9016000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +78abc9016000-78abc901a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +78abc901a000-78abc901c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +78abc901c000-78abc9029000 rw-p 00000000 00:00 0 +78abc9029000-78abc902a000 rw-s 00000000 00:01 903419 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +78abc902a000-78abc902b000 r-xp 00000000 00:00 0 +78abc902b000-78abc902d000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +78abc902d000-78abc902f000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +78abc902f000-78abc9031000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +78abc9031000-78abc9032000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +78abc9032000-78abc9033000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +78abc9033000-78abc9034000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +78abc9034000-78abc9036000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +78abc9036000-78abc9037000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +78abc9037000-78abc9038000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +78abc9038000-78abc9039000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +78abc9039000-78abc903a000 rw-p 00000000 00:00 0 +78abc903a000-78abc903b000 r-xp 0005e000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +78abc903b000-78abc903c000 rw-p 00000000 00:00 0 +78abc903c000-78abc9047000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +78abc9047000-78abc9048000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +78abc9048000-78abc9049000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +78abc9049000-78abc904a000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +78abc904a000-78abc905d000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +78abc905d000-78abc905e000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +78abc905e000-78abc905f000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +78abc905f000-78abc9060000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +78abc9060000-78abc909f000 rw-p 00000000 00:00 0 +78abc909f000-78abc90bf000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +78abc90bf000-78abc90c0000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +78abc90c0000-78abc90c1000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +78abc90c1000-78abc90c2000 rw-p 00000000 00:00 0 +78abc90c2000-78abc90e0000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +78abc90e0000-78abc90e2000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +78abc90e2000-78abc90e3000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +78abc90e3000-78abc90e4000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +78abc90e4000-78abc90e5000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +78abc90e5000-78abc90e6000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +78abc90e6000-78abc90e7000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +78abc90e7000-78abc90e8000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +78abc90e8000-78abc90ec000 rw-p 00000000 00:00 0 +78abc90ec000-78abc90ed000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +78abc90ed000-78abc90ee000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +78abc90ee000-78abc90ef000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +78abc90ef000-78abc90f0000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +78abc90f0000-78abc90f1000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +78abc90f1000-78abc90f2000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +78abc90f2000-78abc90f3000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +78abc90f3000-78abc90f4000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +78abc90f4000-78abc90f5000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +78abc90f5000-78abc90f6000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +78abc90f6000-78abc90f8000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +78abc90f8000-78abc9109000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +78abc9109000-78abc910f000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +78abc910f000-78abc9110000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +78abc9110000-78abc9111000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +78abc9111000-78abc9112000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +78abc9112000-78abc9119000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +78abc9119000-78abc911a000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +78abc911a000-78abc911b000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +78abc911b000-78abc911c000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +78abc911c000-78abc9121000 rw-p 00000000 00:00 0 +78abc9121000-78abc9128000 ---p 00000000 00:00 0 +78abc9128000-78abc9130000 rw-s 00000000 103:03 4325438 /tmp/hsperfdata_codex/76953 +78abc9130000-78abc9131000 ---p 00000000 00:00 0 +78abc9131000-78abc9132000 r--p 00000000 00:00 0 +78abc9132000-78abc9141000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +78abc9141000-78abc9142000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +78abc9142000-78abc9143000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +78abc9143000-78abc9145000 rw-p 00000000 00:00 0 +78abc9145000-78abc9149000 r--p 00000000 00:00 0 [vvar] +78abc9149000-78abc914b000 r-xp 00000000 00:00 0 [vdso] +78abc914b000-78abc914d000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +78abc914d000-78abc9177000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +78abc9177000-78abc9182000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +78abc9182000-78abc9183000 ---p 00000000 00:00 0 +78abc9183000-78abc9185000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +78abc9185000-78abc9187000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7fffe1030000-7fffe1053000 rw-p 00000000 00:00 0 [stack] +ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] +Total number of mappings: 716 + + +VM Arguments: +jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant +java_command: jme3test.vulkan.VulkanHelperTest +java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar +Launcher Type: SUN_STANDARD + +[Global flags] + intx CICompilerCount = 4 {product} {ergonomic} + uint ConcGCThreads = 2 {product} {ergonomic} + uint G1ConcRefinementThreads = 8 {product} {ergonomic} + size_t G1HeapRegionSize = 4194304 {product} {ergonomic} + size_t InitialHeapSize = 524288000 {product} {ergonomic} + size_t MarkStackSize = 4194304 {product} {ergonomic} + size_t MarkStackSizeMax = 536870912 {product} {ergonomic} + size_t MaxHeapSize = 8388608000 {product} {ergonomic} + size_t MaxNewSize = 5033164800 {product} {ergonomic} + size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} + size_t MinHeapSize = 8388608 {product} {ergonomic} + uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} + uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} + uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} + uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} + bool SegmentedCodeCache = true {product} {ergonomic} + size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} + bool UseCompressedOops = true {product lp64_product} {ergonomic} + bool UseG1GC = true {product} {ergonomic} + +Logging: +Log output configuration: + #0: stdout all=warning uptime,level,tags foldmultilines=false + #1: stderr all=off uptime,level,tags foldmultilines=false + +Environment Variables: +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin +USERNAME=codex +SHELL=/bin/bash +DISPLAY=:1 +LANG=en_US.UTF-8 + +Active Locale: +LC_ALL=en_US.UTF-8 +LC_COLLATE=en_US.UTF-8 +LC_CTYPE=en_US.UTF-8 +LC_MESSAGES=en_US.UTF-8 +LC_MONETARY=en_US.UTF-8 +LC_NUMERIC=en_US.UTF-8 +LC_TIME=en_US.UTF-8 + +Signal Handlers: + SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked + SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + + +Periodic native trim disabled + +--------------- S Y S T E M --------------- + +OS: +DISTRIB_ID=Pop +DISTRIB_RELEASE=22.04 +DISTRIB_CODENAME=jammy +DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" +uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 +OS uptime: 0 days 15:05 hours +libc: glibc 2.35 NPTL 2.35 +rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k +load average: 0.54 0.94 1.14 + +/proc/meminfo: +MemTotal: 32767656 kB +MemFree: 19737520 kB +MemAvailable: 22385836 kB +Buffers: 331016 kB +Cached: 4278336 kB +SwapCached: 0 kB +Active: 10029528 kB +Inactive: 2104856 kB +Active(anon): 7554720 kB +Inactive(anon): 0 kB +Active(file): 2474808 kB +Inactive(file): 2104856 kB +Unevictable: 15220 kB +Mlocked: 88 kB +SwapTotal: 20970996 kB +SwapFree: 20970996 kB +Zswap: 0 kB +Zswapped: 0 kB +Dirty: 7772 kB +Writeback: 0 kB +AnonPages: 7540512 kB +Mapped: 1827672 kB +Shmem: 29688 kB +KReclaimable: 176164 kB +Slab: 356116 kB +SReclaimable: 176164 kB +SUnreclaim: 179952 kB +KernelStack: 20096 kB +PageTables: 52628 kB +SecPageTables: 0 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 37354824 kB +Committed_AS: 13773180 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 249512 kB +VmallocChunk: 0 kB +Percpu: 9152 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 6144 kB +ShmemPmdMapped: 0 kB +FileHugePages: 0 kB +FilePmdMapped: 0 kB +Unaccepted: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +Hugetlb: 0 kB +DirectMap4k: 796472 kB +DirectMap2M: 12736512 kB +DirectMap1G: 19922944 kB + +/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never +/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 +/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force +/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never + +Process Memory: +Virtual Size: 12184092K (peak: 12184092K) +Resident Set Size: 228396K (peak: 228396K) (anon: 112048K, file: 116348K, shmem: 0K) +Swapped out: 0K +C-Heap outstanding allocations: 58423K, retained: 7232K +glibc malloc tunables: (default) + +/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 +/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 +/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 +/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 + +container (cgroup) information: +container_type: cgroupv2 +cpu_cpuset_cpus: not supported +cpu_memory_nodes: not supported +active_processor_count: 8 +cpu_quota: not supported +cpu_period: not supported +cpu_shares: not supported +memory_limit_in_bytes: unlimited +memory_and_swap_limit_in_bytes: unlimited +memory_soft_limit_in_bytes: 0 +memory_usage_in_bytes: 5899768 k +memory_max_usage_in_bytes: not supported +rss_usage_in_bytes: 4042328 k +cache_usage_in_bytes: 1784848 k +memory_swap_current_in_bytes: 0 +memory_swap_max_limit_in_bytes: unlimited +maximum number of tasks: 38296 +current number of tasks: 295 + +Steal ticks since vm start: 0 +Steal ticks percentage since vm start: 0.000 + +CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c +CPU Model and flags from /proc/cpuinfo: +model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities + +Online cpus: 0-7 +Offline cpus: +BIOS frequency limitation: +Frequency switch latency (ns): 0 +Available cpu frequencies: +Current governor: powersave +Core performance/turbo boost: + +Memory: 4k page, physical 32767656k(22385836k free), swap 20970996k(20970996k free) +Page Sizes: 4k + +vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 + +END. diff --git a/hs_err_pid77449.log b/hs_err_pid77449.log new file mode 100644 index 0000000000..735aab6e1c --- /dev/null +++ b/hs_err_pid77449.log @@ -0,0 +1,1426 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x0000744bc7a5933a, pid=77449, tid=77480 +# +# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) +# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) +# Problematic frame: +# C [libjemalloc.so+0x5933a] +# +# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.77449) +# +# If you would like to submit a bug report, please visit: +# https://bugreport.java.com/bugreport/crash.jsp +# + +--------------- S U M M A R Y ------------ + +Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanHelperTest + +Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS +Time: Wed Jul 2 22:36:18 2025 EDT elapsed time: 0.812162 seconds (0d 0h 0m 0s) + +--------------- T H R E A D --------------- + +Current thread is native thread + +Stack: [0x0000744bc7100000,0x0000744bc7200000], sp=0x0000744bc71fe9d0, free space=1018k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libjemalloc.so+0x5933a] + +siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 + +Registers: +RAX=0x0000000000000000, RBX=0x0000000000000180, RCX=0x0000000000000000, RDX=0x0000744bc7a78440 +RSP=0x0000744bc71fe9d0, RBP=0x0000744bc71fedb0, RSI=0x0000000000000000, RDI=0x0000744bc7239020 +R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x0000744bc7239060 +R12=0x000000000000002f, R13=0x0000744bc71fed70, R14=0x000000000000002f, R15=0x0000744bc71feb50 +RIP=0x0000744bc7a5933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 + TRAPNO=0x000000000000000e + + +Top of Stack: (sp=0x0000744bc71fe9d0) +0x0000744bc71fe9d0: 0000744bf801cae8 0000000000000004 +0x0000744bc71fe9e0: 0000744bc71ffb58 0000744bf80dff71 +0x0000744bc71fe9f0: 0000000000000005 0000000000000000 +0x0000744bc71fea00: 0000744bf7e0d4d0 0000744bf7ea53e0 +0x0000744bc71fea10: 0000000000000000 0000744bc71fee00 +0x0000744bc71fea20: 0000744bf801caf8 0000000000000000 +0x0000744bc71fea30: 0000744bf801cae8 0000744bf80e2dae +0x0000744bc71fea40: 0000000000000001 000000000000006f +0x0000744bc71fea50: 0000744bc7cb17d0 0000000000000000 +0x0000744bc71fea60: 0000744b1cbc2dc0 0000000000000000 +0x0000744bc71fea70: 00000000000000ca b61693604baf4427 +0x0000744bc71fea80: 0000000000000213 0000744bf8017300 +0x0000744bc71fea90: 0000000000000000 0000ffff00001fa2 +0x0000744bc71feaa0: 0000000000000010 0000000000000002 +0x0000744bc71feab0: 0000000000000000 000000770000007c +0x0000744bc71feac0: 0000006b00000070 ffffffffffffffb8 +0x0000744bc71fead0: 0000000000000070 ffffffffffffffb8 +0x0000744bc71feae0: 0000000000000002 c5db6681efe38100 +0x0000744bc71feaf0: 0000744bc71feb90 0000000000000100 +0x0000744bc71feb00: 0000744bc71feb40 0000744bf001e698 +0x0000744bc71feb10: 0000744bf001ccb0 0000000000000180 +0x0000744bc71feb20: 0000744bc71fedb0 000000000000002f +0x0000744bc71feb30: 0000744bc71fed70 0000744bc71feb50 +0x0000744bc71feb40: 0000744b1c002420 0000744bc7a592f8 +0x0000744bc71feb50: 0000000000000000 0000000000000000 +0x0000744bc71feb60: 0000000000000000 0000000000000000 +0x0000744bc71feb70: 0000000000000000 0000000000000000 +0x0000744bc71feb80: 0000000000000000 0000000000000000 +0x0000744bc71feb90: 0000000000000000 0000000000000000 +0x0000744bc71feba0: 0000000000000000 0000000000000000 +0x0000744bc71febb0: 0000000000000000 0000000000000000 +0x0000744bc71febc0: 0000000000000000 0000000000000000 + +Instructions: (pc=0x0000744bc7a5933a) +0x0000744bc7a5923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff +0x0000744bc7a5924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 +0x0000744bc7a5925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 +0x0000744bc7a5926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c +0x0000744bc7a5927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b +0x0000744bc7a5928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 +0x0000744bc7a5929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 +0x0000744bc7a592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 +0x0000744bc7a592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 +0x0000744bc7a592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d +0x0000744bc7a592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c +0x0000744bc7a592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 +0x0000744bc7a592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b +0x0000744bc7a5930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 +0x0000744bc7a5931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 +0x0000744bc7a5932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 +0x0000744bc7a5933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 +0x0000744bc7a5934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c +0x0000744bc7a5935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 +0x0000744bc7a5936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 +0x0000744bc7a5937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c +0x0000744bc7a5938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 +0x0000744bc7a5939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 +0x0000744bc7a593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d +0x0000744bc7a593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 +0x0000744bc7a593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f +0x0000744bc7a593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 +0x0000744bc7a593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 +0x0000744bc7a593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 +0x0000744bc7a5940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff +0x0000744bc7a5941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 +0x0000744bc7a5942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 + + + +--------------- P R O C E S S --------------- + +VM state: not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: None + +Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 + +CDS archive(s) mapped at: [0x0000744b6e000000-0x0000744b6ed91000-0x0000744b6ed91000), size 14225408, SharedBaseAddress: 0x0000744b6e000000, ArchiveRelocationMode: 1. +Compressed class space mapped at: 0x0000744b6f000000-0x0000744baf000000, reserved size: 1073741824 +Narrow klass base: 0x0000744b6e000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 + +GC Precious Log: + + +Heap: + garbage-first heap total reserved 8192000K, committed 516096K, used 25198K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 6 young (24576K), 0 survivors (0K) + Metaspace used 8759K, committed 9024K, reserved 1114112K + class space used 779K, committed 896K, reserved 1048576K + +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|0x000000060c000000, 0x000000060c000000, 0x000000060c400000| 0%| F| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 +| 1|0x000000060c400000, 0x000000060c400000, 0x000000060c800000| 0%| F| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 +| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 +| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 +| 4|0x000000060d000000, 0x000000060d000000, 0x000000060d400000| 0%| F| |TAMS 0x000000060d000000| PB 0x000000060d000000| Untracked | 0 +| 5|0x000000060d400000, 0x000000060d400000, 0x000000060d800000| 0%| F| |TAMS 0x000000060d400000| PB 0x000000060d400000| Untracked | 0 +| 6|0x000000060d800000, 0x000000060d800000, 0x000000060dc00000| 0%| F| |TAMS 0x000000060d800000| PB 0x000000060d800000| Untracked | 0 +| 7|0x000000060dc00000, 0x000000060dc00000, 0x000000060e000000| 0%| F| |TAMS 0x000000060dc00000| PB 0x000000060dc00000| Untracked | 0 +| 8|0x000000060e000000, 0x000000060e000000, 0x000000060e400000| 0%| F| |TAMS 0x000000060e000000| PB 0x000000060e000000| Untracked | 0 +| 9|0x000000060e400000, 0x000000060e400000, 0x000000060e800000| 0%| F| |TAMS 0x000000060e400000| PB 0x000000060e400000| Untracked | 0 +| 10|0x000000060e800000, 0x000000060e800000, 0x000000060ec00000| 0%| F| |TAMS 0x000000060e800000| PB 0x000000060e800000| Untracked | 0 +| 11|0x000000060ec00000, 0x000000060ec00000, 0x000000060f000000| 0%| F| |TAMS 0x000000060ec00000| PB 0x000000060ec00000| Untracked | 0 +| 12|0x000000060f000000, 0x000000060f000000, 0x000000060f400000| 0%| F| |TAMS 0x000000060f000000| PB 0x000000060f000000| Untracked | 0 +| 13|0x000000060f400000, 0x000000060f400000, 0x000000060f800000| 0%| F| |TAMS 0x000000060f400000| PB 0x000000060f400000| Untracked | 0 +| 14|0x000000060f800000, 0x000000060f800000, 0x000000060fc00000| 0%| F| |TAMS 0x000000060f800000| PB 0x000000060f800000| Untracked | 0 +| 15|0x000000060fc00000, 0x000000060fc00000, 0x0000000610000000| 0%| F| |TAMS 0x000000060fc00000| PB 0x000000060fc00000| Untracked | 0 +| 16|0x0000000610000000, 0x0000000610000000, 0x0000000610400000| 0%| F| |TAMS 0x0000000610000000| PB 0x0000000610000000| Untracked | 0 +| 17|0x0000000610400000, 0x0000000610400000, 0x0000000610800000| 0%| F| |TAMS 0x0000000610400000| PB 0x0000000610400000| Untracked | 0 +| 18|0x0000000610800000, 0x0000000610800000, 0x0000000610c00000| 0%| F| |TAMS 0x0000000610800000| PB 0x0000000610800000| Untracked | 0 +| 19|0x0000000610c00000, 0x0000000610c00000, 0x0000000611000000| 0%| F| |TAMS 0x0000000610c00000| PB 0x0000000610c00000| Untracked | 0 +| 20|0x0000000611000000, 0x0000000611000000, 0x0000000611400000| 0%| F| |TAMS 0x0000000611000000| PB 0x0000000611000000| Untracked | 0 +| 21|0x0000000611400000, 0x0000000611400000, 0x0000000611800000| 0%| F| |TAMS 0x0000000611400000| PB 0x0000000611400000| Untracked | 0 +| 22|0x0000000611800000, 0x0000000611800000, 0x0000000611c00000| 0%| F| |TAMS 0x0000000611800000| PB 0x0000000611800000| Untracked | 0 +| 23|0x0000000611c00000, 0x0000000611c00000, 0x0000000612000000| 0%| F| |TAMS 0x0000000611c00000| PB 0x0000000611c00000| Untracked | 0 +| 24|0x0000000612000000, 0x0000000612000000, 0x0000000612400000| 0%| F| |TAMS 0x0000000612000000| PB 0x0000000612000000| Untracked | 0 +| 25|0x0000000612400000, 0x0000000612400000, 0x0000000612800000| 0%| F| |TAMS 0x0000000612400000| PB 0x0000000612400000| Untracked | 0 +| 26|0x0000000612800000, 0x0000000612800000, 0x0000000612c00000| 0%| F| |TAMS 0x0000000612800000| PB 0x0000000612800000| Untracked | 0 +| 27|0x0000000612c00000, 0x0000000612c00000, 0x0000000613000000| 0%| F| |TAMS 0x0000000612c00000| PB 0x0000000612c00000| Untracked | 0 +| 28|0x0000000613000000, 0x0000000613000000, 0x0000000613400000| 0%| F| |TAMS 0x0000000613000000| PB 0x0000000613000000| Untracked | 0 +| 29|0x0000000613400000, 0x0000000613400000, 0x0000000613800000| 0%| F| |TAMS 0x0000000613400000| PB 0x0000000613400000| Untracked | 0 +| 30|0x0000000613800000, 0x0000000613800000, 0x0000000613c00000| 0%| F| |TAMS 0x0000000613800000| PB 0x0000000613800000| Untracked | 0 +| 31|0x0000000613c00000, 0x0000000613c00000, 0x0000000614000000| 0%| F| |TAMS 0x0000000613c00000| PB 0x0000000613c00000| Untracked | 0 +| 32|0x0000000614000000, 0x0000000614000000, 0x0000000614400000| 0%| F| |TAMS 0x0000000614000000| PB 0x0000000614000000| Untracked | 0 +| 33|0x0000000614400000, 0x0000000614400000, 0x0000000614800000| 0%| F| |TAMS 0x0000000614400000| PB 0x0000000614400000| Untracked | 0 +| 34|0x0000000614800000, 0x0000000614800000, 0x0000000614c00000| 0%| F| |TAMS 0x0000000614800000| PB 0x0000000614800000| Untracked | 0 +| 35|0x0000000614c00000, 0x0000000614c00000, 0x0000000615000000| 0%| F| |TAMS 0x0000000614c00000| PB 0x0000000614c00000| Untracked | 0 +| 36|0x0000000615000000, 0x0000000615000000, 0x0000000615400000| 0%| F| |TAMS 0x0000000615000000| PB 0x0000000615000000| Untracked | 0 +| 37|0x0000000615400000, 0x0000000615400000, 0x0000000615800000| 0%| F| |TAMS 0x0000000615400000| PB 0x0000000615400000| Untracked | 0 +| 38|0x0000000615800000, 0x0000000615800000, 0x0000000615c00000| 0%| F| |TAMS 0x0000000615800000| PB 0x0000000615800000| Untracked | 0 +| 39|0x0000000615c00000, 0x0000000615c00000, 0x0000000616000000| 0%| F| |TAMS 0x0000000615c00000| PB 0x0000000615c00000| Untracked | 0 +| 40|0x0000000616000000, 0x0000000616000000, 0x0000000616400000| 0%| F| |TAMS 0x0000000616000000| PB 0x0000000616000000| Untracked | 0 +| 41|0x0000000616400000, 0x0000000616400000, 0x0000000616800000| 0%| F| |TAMS 0x0000000616400000| PB 0x0000000616400000| Untracked | 0 +| 42|0x0000000616800000, 0x0000000616800000, 0x0000000616c00000| 0%| F| |TAMS 0x0000000616800000| PB 0x0000000616800000| Untracked | 0 +| 43|0x0000000616c00000, 0x0000000616c00000, 0x0000000617000000| 0%| F| |TAMS 0x0000000616c00000| PB 0x0000000616c00000| Untracked | 0 +| 44|0x0000000617000000, 0x0000000617000000, 0x0000000617400000| 0%| F| |TAMS 0x0000000617000000| PB 0x0000000617000000| Untracked | 0 +| 45|0x0000000617400000, 0x0000000617400000, 0x0000000617800000| 0%| F| |TAMS 0x0000000617400000| PB 0x0000000617400000| Untracked | 0 +| 46|0x0000000617800000, 0x0000000617800000, 0x0000000617c00000| 0%| F| |TAMS 0x0000000617800000| PB 0x0000000617800000| Untracked | 0 +| 47|0x0000000617c00000, 0x0000000617c00000, 0x0000000618000000| 0%| F| |TAMS 0x0000000617c00000| PB 0x0000000617c00000| Untracked | 0 +| 48|0x0000000618000000, 0x0000000618000000, 0x0000000618400000| 0%| F| |TAMS 0x0000000618000000| PB 0x0000000618000000| Untracked | 0 +| 49|0x0000000618400000, 0x0000000618400000, 0x0000000618800000| 0%| F| |TAMS 0x0000000618400000| PB 0x0000000618400000| Untracked | 0 +| 50|0x0000000618800000, 0x0000000618800000, 0x0000000618c00000| 0%| F| |TAMS 0x0000000618800000| PB 0x0000000618800000| Untracked | 0 +| 51|0x0000000618c00000, 0x0000000618c00000, 0x0000000619000000| 0%| F| |TAMS 0x0000000618c00000| PB 0x0000000618c00000| Untracked | 0 +| 52|0x0000000619000000, 0x0000000619000000, 0x0000000619400000| 0%| F| |TAMS 0x0000000619000000| PB 0x0000000619000000| Untracked | 0 +| 53|0x0000000619400000, 0x0000000619400000, 0x0000000619800000| 0%| F| |TAMS 0x0000000619400000| PB 0x0000000619400000| Untracked | 0 +| 54|0x0000000619800000, 0x0000000619800000, 0x0000000619c00000| 0%| F| |TAMS 0x0000000619800000| PB 0x0000000619800000| Untracked | 0 +| 55|0x0000000619c00000, 0x0000000619c00000, 0x000000061a000000| 0%| F| |TAMS 0x0000000619c00000| PB 0x0000000619c00000| Untracked | 0 +| 56|0x000000061a000000, 0x000000061a000000, 0x000000061a400000| 0%| F| |TAMS 0x000000061a000000| PB 0x000000061a000000| Untracked | 0 +| 57|0x000000061a400000, 0x000000061a400000, 0x000000061a800000| 0%| F| |TAMS 0x000000061a400000| PB 0x000000061a400000| Untracked | 0 +| 58|0x000000061a800000, 0x000000061a800000, 0x000000061ac00000| 0%| F| |TAMS 0x000000061a800000| PB 0x000000061a800000| Untracked | 0 +| 59|0x000000061ac00000, 0x000000061ac00000, 0x000000061b000000| 0%| F| |TAMS 0x000000061ac00000| PB 0x000000061ac00000| Untracked | 0 +| 60|0x000000061b000000, 0x000000061b000000, 0x000000061b400000| 0%| F| |TAMS 0x000000061b000000| PB 0x000000061b000000| Untracked | 0 +| 61|0x000000061b400000, 0x000000061b400000, 0x000000061b800000| 0%| F| |TAMS 0x000000061b400000| PB 0x000000061b400000| Untracked | 0 +| 62|0x000000061b800000, 0x000000061b800000, 0x000000061bc00000| 0%| F| |TAMS 0x000000061b800000| PB 0x000000061b800000| Untracked | 0 +| 63|0x000000061bc00000, 0x000000061bc00000, 0x000000061c000000| 0%| F| |TAMS 0x000000061bc00000| PB 0x000000061bc00000| Untracked | 0 +| 64|0x000000061c000000, 0x000000061c000000, 0x000000061c400000| 0%| F| |TAMS 0x000000061c000000| PB 0x000000061c000000| Untracked | 0 +| 65|0x000000061c400000, 0x000000061c400000, 0x000000061c800000| 0%| F| |TAMS 0x000000061c400000| PB 0x000000061c400000| Untracked | 0 +| 66|0x000000061c800000, 0x000000061c800000, 0x000000061cc00000| 0%| F| |TAMS 0x000000061c800000| PB 0x000000061c800000| Untracked | 0 +| 67|0x000000061cc00000, 0x000000061cc00000, 0x000000061d000000| 0%| F| |TAMS 0x000000061cc00000| PB 0x000000061cc00000| Untracked | 0 +| 68|0x000000061d000000, 0x000000061d000000, 0x000000061d400000| 0%| F| |TAMS 0x000000061d000000| PB 0x000000061d000000| Untracked | 0 +| 69|0x000000061d400000, 0x000000061d400000, 0x000000061d800000| 0%| F| |TAMS 0x000000061d400000| PB 0x000000061d400000| Untracked | 0 +| 70|0x000000061d800000, 0x000000061d800000, 0x000000061dc00000| 0%| F| |TAMS 0x000000061d800000| PB 0x000000061d800000| Untracked | 0 +| 71|0x000000061dc00000, 0x000000061dc00000, 0x000000061e000000| 0%| F| |TAMS 0x000000061dc00000| PB 0x000000061dc00000| Untracked | 0 +| 72|0x000000061e000000, 0x000000061e000000, 0x000000061e400000| 0%| F| |TAMS 0x000000061e000000| PB 0x000000061e000000| Untracked | 0 +| 73|0x000000061e400000, 0x000000061e400000, 0x000000061e800000| 0%| F| |TAMS 0x000000061e400000| PB 0x000000061e400000| Untracked | 0 +| 74|0x000000061e800000, 0x000000061e800000, 0x000000061ec00000| 0%| F| |TAMS 0x000000061e800000| PB 0x000000061e800000| Untracked | 0 +| 75|0x000000061ec00000, 0x000000061ec00000, 0x000000061f000000| 0%| F| |TAMS 0x000000061ec00000| PB 0x000000061ec00000| Untracked | 0 +| 76|0x000000061f000000, 0x000000061f000000, 0x000000061f400000| 0%| F| |TAMS 0x000000061f000000| PB 0x000000061f000000| Untracked | 0 +| 77|0x000000061f400000, 0x000000061f400000, 0x000000061f800000| 0%| F| |TAMS 0x000000061f400000| PB 0x000000061f400000| Untracked | 0 +| 78|0x000000061f800000, 0x000000061f800000, 0x000000061fc00000| 0%| F| |TAMS 0x000000061f800000| PB 0x000000061f800000| Untracked | 0 +| 79|0x000000061fc00000, 0x000000061fc00000, 0x0000000620000000| 0%| F| |TAMS 0x000000061fc00000| PB 0x000000061fc00000| Untracked | 0 +| 80|0x0000000620000000, 0x0000000620000000, 0x0000000620400000| 0%| F| |TAMS 0x0000000620000000| PB 0x0000000620000000| Untracked | 0 +| 81|0x0000000620400000, 0x0000000620400000, 0x0000000620800000| 0%| F| |TAMS 0x0000000620400000| PB 0x0000000620400000| Untracked | 0 +| 82|0x0000000620800000, 0x0000000620800000, 0x0000000620c00000| 0%| F| |TAMS 0x0000000620800000| PB 0x0000000620800000| Untracked | 0 +| 83|0x0000000620c00000, 0x0000000620c00000, 0x0000000621000000| 0%| F| |TAMS 0x0000000620c00000| PB 0x0000000620c00000| Untracked | 0 +| 84|0x0000000621000000, 0x0000000621000000, 0x0000000621400000| 0%| F| |TAMS 0x0000000621000000| PB 0x0000000621000000| Untracked | 0 +| 85|0x0000000621400000, 0x0000000621400000, 0x0000000621800000| 0%| F| |TAMS 0x0000000621400000| PB 0x0000000621400000| Untracked | 0 +| 86|0x0000000621800000, 0x0000000621800000, 0x0000000621c00000| 0%| F| |TAMS 0x0000000621800000| PB 0x0000000621800000| Untracked | 0 +| 87|0x0000000621c00000, 0x0000000621c00000, 0x0000000622000000| 0%| F| |TAMS 0x0000000621c00000| PB 0x0000000621c00000| Untracked | 0 +| 88|0x0000000622000000, 0x0000000622000000, 0x0000000622400000| 0%| F| |TAMS 0x0000000622000000| PB 0x0000000622000000| Untracked | 0 +| 89|0x0000000622400000, 0x0000000622400000, 0x0000000622800000| 0%| F| |TAMS 0x0000000622400000| PB 0x0000000622400000| Untracked | 0 +| 90|0x0000000622800000, 0x0000000622800000, 0x0000000622c00000| 0%| F| |TAMS 0x0000000622800000| PB 0x0000000622800000| Untracked | 0 +| 91|0x0000000622c00000, 0x0000000622c00000, 0x0000000623000000| 0%| F| |TAMS 0x0000000622c00000| PB 0x0000000622c00000| Untracked | 0 +| 92|0x0000000623000000, 0x0000000623000000, 0x0000000623400000| 0%| F| |TAMS 0x0000000623000000| PB 0x0000000623000000| Untracked | 0 +| 93|0x0000000623400000, 0x0000000623400000, 0x0000000623800000| 0%| F| |TAMS 0x0000000623400000| PB 0x0000000623400000| Untracked | 0 +| 94|0x0000000623800000, 0x0000000623800000, 0x0000000623c00000| 0%| F| |TAMS 0x0000000623800000| PB 0x0000000623800000| Untracked | 0 +| 95|0x0000000623c00000, 0x0000000623c00000, 0x0000000624000000| 0%| F| |TAMS 0x0000000623c00000| PB 0x0000000623c00000| Untracked | 0 +| 96|0x0000000624000000, 0x0000000624000000, 0x0000000624400000| 0%| F| |TAMS 0x0000000624000000| PB 0x0000000624000000| Untracked | 0 +| 97|0x0000000624400000, 0x0000000624400000, 0x0000000624800000| 0%| F| |TAMS 0x0000000624400000| PB 0x0000000624400000| Untracked | 0 +| 98|0x0000000624800000, 0x0000000624800000, 0x0000000624c00000| 0%| F| |TAMS 0x0000000624800000| PB 0x0000000624800000| Untracked | 0 +| 99|0x0000000624c00000, 0x0000000624c00000, 0x0000000625000000| 0%| F| |TAMS 0x0000000624c00000| PB 0x0000000624c00000| Untracked | 0 +| 100|0x0000000625000000, 0x0000000625000000, 0x0000000625400000| 0%| F| |TAMS 0x0000000625000000| PB 0x0000000625000000| Untracked | 0 +| 101|0x0000000625400000, 0x0000000625400000, 0x0000000625800000| 0%| F| |TAMS 0x0000000625400000| PB 0x0000000625400000| Untracked | 0 +| 102|0x0000000625800000, 0x0000000625800000, 0x0000000625c00000| 0%| F| |TAMS 0x0000000625800000| PB 0x0000000625800000| Untracked | 0 +| 103|0x0000000625c00000, 0x0000000625c00000, 0x0000000626000000| 0%| F| |TAMS 0x0000000625c00000| PB 0x0000000625c00000| Untracked | 0 +| 104|0x0000000626000000, 0x0000000626000000, 0x0000000626400000| 0%| F| |TAMS 0x0000000626000000| PB 0x0000000626000000| Untracked | 0 +| 105|0x0000000626400000, 0x0000000626400000, 0x0000000626800000| 0%| F| |TAMS 0x0000000626400000| PB 0x0000000626400000| Untracked | 0 +| 106|0x0000000626800000, 0x0000000626800000, 0x0000000626c00000| 0%| F| |TAMS 0x0000000626800000| PB 0x0000000626800000| Untracked | 0 +| 107|0x0000000626c00000, 0x0000000626c00000, 0x0000000627000000| 0%| F| |TAMS 0x0000000626c00000| PB 0x0000000626c00000| Untracked | 0 +| 108|0x0000000627000000, 0x0000000627000000, 0x0000000627400000| 0%| F| |TAMS 0x0000000627000000| PB 0x0000000627000000| Untracked | 0 +| 109|0x0000000627400000, 0x0000000627400000, 0x0000000627800000| 0%| F| |TAMS 0x0000000627400000| PB 0x0000000627400000| Untracked | 0 +| 110|0x0000000627800000, 0x0000000627800000, 0x0000000627c00000| 0%| F| |TAMS 0x0000000627800000| PB 0x0000000627800000| Untracked | 0 +| 111|0x0000000627c00000, 0x0000000627c00000, 0x0000000628000000| 0%| F| |TAMS 0x0000000627c00000| PB 0x0000000627c00000| Untracked | 0 +| 112|0x0000000628000000, 0x0000000628000000, 0x0000000628400000| 0%| F| |TAMS 0x0000000628000000| PB 0x0000000628000000| Untracked | 0 +| 113|0x0000000628400000, 0x0000000628400000, 0x0000000628800000| 0%| F| |TAMS 0x0000000628400000| PB 0x0000000628400000| Untracked | 0 +| 114|0x0000000628800000, 0x0000000628800000, 0x0000000628c00000| 0%| F| |TAMS 0x0000000628800000| PB 0x0000000628800000| Untracked | 0 +| 115|0x0000000628c00000, 0x0000000628c00000, 0x0000000629000000| 0%| F| |TAMS 0x0000000628c00000| PB 0x0000000628c00000| Untracked | 0 +| 116|0x0000000629000000, 0x0000000629000000, 0x0000000629400000| 0%| F| |TAMS 0x0000000629000000| PB 0x0000000629000000| Untracked | 0 +| 117|0x0000000629400000, 0x0000000629400000, 0x0000000629800000| 0%| F| |TAMS 0x0000000629400000| PB 0x0000000629400000| Untracked | 0 +| 118|0x0000000629800000, 0x0000000629800000, 0x0000000629c00000| 0%| F| |TAMS 0x0000000629800000| PB 0x0000000629800000| Untracked | 0 +| 119|0x0000000629c00000, 0x0000000629f7cd70, 0x000000062a000000| 87%| E| |TAMS 0x0000000629c00000| PB 0x0000000629c00000| Complete | 0 +| 120|0x000000062a000000, 0x000000062a400000, 0x000000062a400000|100%| E|CS|TAMS 0x000000062a000000| PB 0x000000062a000000| Complete | 0 +| 121|0x000000062a400000, 0x000000062a800000, 0x000000062a800000|100%| E|CS|TAMS 0x000000062a400000| PB 0x000000062a400000| Complete | 0 +| 122|0x000000062a800000, 0x000000062ac00000, 0x000000062ac00000|100%| E|CS|TAMS 0x000000062a800000| PB 0x000000062a800000| Complete | 0 +| 123|0x000000062ac00000, 0x000000062b000000, 0x000000062b000000|100%| E|CS|TAMS 0x000000062ac00000| PB 0x000000062ac00000| Complete | 0 +| 124|0x000000062b000000, 0x000000062b400000, 0x000000062b400000|100%| E|CS|TAMS 0x000000062b000000| PB 0x000000062b000000| Complete | 0 +|1999|0x00000007ffc00000, 0x00000007ffd1ec18, 0x0000000800000000| 28%| O| |TAMS 0x00000007ffc00000| PB 0x00000007ffc00000| Untracked | 0 + +Card table byte_map: [0x0000744bd7800000,0x0000744bd87a0000] _byte_map_base: 0x0000744bd47a0000 + +Marking Bits: (CMBitMap*) 0x0000744bf0059190 + Bits: [0x0000744bcfa00000, 0x0000744bd7700000) + +Polling page: 0x0000744bf80b2000 + +Metaspace: + +Usage: + Non-class: 7.79 MB used. + Class: 779.01 KB used. + Both: 8.55 MB used. + +Virtual space: + Non-class space: 64.00 MB reserved, 7.94 MB ( 12%) committed, 1 nodes. + Class space: 1.00 GB reserved, 896.00 KB ( <1%) committed, 1 nodes. + Both: 1.06 GB reserved, 8.81 MB ( <1%) committed. + +Chunk freelists: + Non-Class: 7.84 MB + Class: 15.04 MB + Both: 22.89 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. + - use_allocation_guard: 0. + + +Internal statistics: + +num_allocs_failed_limit: 0. +num_arena_births: 152. +num_arena_deaths: 0. +num_vsnodes_births: 2. +num_vsnodes_deaths: 0. +num_space_committed: 141. +num_space_uncommitted: 0. +num_chunks_returned_to_freelist: 0. +num_chunks_taken_from_freelist: 378. +num_chunk_merges: 0. +num_chunk_splits: 252. +num_chunks_enlarged: 172. +num_inconsistent_stats: 0. + +CodeHeap 'non-profiled nmethods': size=120032Kb used=404Kb max_used=404Kb free=119628Kb + bounds [0x0000744be02c8000, 0x0000744be0538000, 0x0000744be7800000] +CodeHeap 'profiled nmethods': size=120028Kb used=1701Kb max_used=1701Kb free=118326Kb + bounds [0x0000744bd8800000, 0x0000744bd8a70000, 0x0000744bdfd37000] +CodeHeap 'non-nmethods': size=5700Kb used=2156Kb max_used=2182Kb free=3543Kb + bounds [0x0000744bdfd37000, 0x0000744bdffa7000, 0x0000744be02c8000] +CodeCache: size=245760Kb, used=4261Kb, max_used=4287Kb, free=241497Kb + total_blobs=2458, nmethods=1285, adapters=1080, full_count=0 +Compilation: enabled, stopped_count=0, restarted_count=0 + +Compilation events (20 events): +Event: 0.802 Thread 0x0000744b3441f420 nmethod 1266 0x0000744be032ad88 code [0x0000744be032ae80, 0x0000744be032af50] +Event: 0.803 Thread 0x0000744b3441f420 1271 4 java.lang.StringBuilder::append (8 bytes) +Event: 0.803 Thread 0x0000744bf01485d0 1272 3 java.lang.reflect.Modifier::isPrivate (12 bytes) +Event: 0.803 Thread 0x0000744bf01485d0 nmethod 1272 0x0000744bd89a6088 code [0x0000744bd89a61a0, 0x0000744bd89a62d0] +Event: 0.804 Thread 0x0000744bf01485d0 1274 3 jdk.internal.org.objectweb.asm.Frame::setLocal (65 bytes) +Event: 0.804 Thread 0x0000744bf01485d0 nmethod 1274 0x0000744bd89a6388 code [0x0000744bd89a64e0, 0x0000744bd89a69e0] +Event: 0.804 Thread 0x0000744bf01485d0 1275 3 jdk.internal.org.objectweb.asm.Frame::pop (46 bytes) +Event: 0.805 Thread 0x0000744bf01485d0 nmethod 1275 0x0000744bd89a6a08 code [0x0000744bd89a6b20, 0x0000744bd89a6cb0] +Event: 0.805 Thread 0x0000744bf01485d0 1276 3 jdk.internal.org.objectweb.asm.ClassWriter::visitMethod (57 bytes) +Event: 0.805 Thread 0x0000744bf01485d0 nmethod 1276 0x0000744bd89a6d08 code [0x0000744bd89a6e40, 0x0000744bd89a71b8] +Event: 0.805 Thread 0x0000744bf01485d0 1277 1 jdk.internal.org.objectweb.asm.SymbolTable::getConstantPoolCount (5 bytes) +Event: 0.805 Thread 0x0000744bf01485d0 nmethod 1277 0x0000744be032bc08 code [0x0000744be032bd20, 0x0000744be032bde0] +Event: 0.808 Thread 0x0000744b3441f420 nmethod 1271 0x0000744be032bf08 code [0x0000744be032c060, 0x0000744be032c930] +Event: 0.811 Thread 0x0000744bf01485d0 1278 3 java.lang.invoke.MethodHandleNatives::refKindIsMethod (19 bytes) +Event: 0.811 Thread 0x0000744bf01485d0 nmethod 1278 0x0000744bd89a7208 code [0x0000744bd89a7320, 0x0000744bd89a7538] +Event: 0.811 Thread 0x0000744bf01485d0 1279 ! 3 java.lang.invoke.MethodHandle::setVarargs (50 bytes) +Event: 0.811 Thread 0x0000744bf01485d0 nmethod 1279 0x0000744bd89a7588 code [0x0000744bd89a77c0, 0x0000744bd89a83c0] +Event: 0.811 Thread 0x0000744bf01485d0 1281 3 jdk.internal.misc.VM::isModuleSystemInited (13 bytes) +Event: 0.812 Thread 0x0000744bf01485d0 nmethod 1281 0x0000744bd89a8488 code [0x0000744bd89a85a0, 0x0000744bd89a86e0] +Event: 0.812 Thread 0x0000744bf01485d0 1280 3 jdk.internal.org.objectweb.asm.MethodWriter::endCurrentBasicBlockWithNoSuccessor (98 bytes) + +GC Heap History (0 events): +No events + +Dll operation events (10 events): +Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +Event: 0.027 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +Event: 0.029 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +Event: 0.078 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +Event: 0.125 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +Event: 0.130 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +Event: 0.381 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +Event: 0.383 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so + +Deoptimization events (20 events): +Event: 0.724 Thread 0x0000744bf05c1120 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000744be03036cc relative=0x00000000000014cc +Event: 0.724 Thread 0x0000744bf05c1120 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000744be03036cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 +Event: 0.724 Thread 0x0000744bf05c1120 DEOPT PACKING pc=0x0000744be03036cc sp=0x0000744bc71fdc40 +Event: 0.724 Thread 0x0000744bf05c1120 DEOPT UNPACKING pc=0x0000744bdfd8abf9 sp=0x0000744bc71fdb40 mode 2 +Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000744be03036cc relative=0x00000000000014cc +Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000744be03036cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 +Event: 0.725 Thread 0x0000744bf05c1120 DEOPT PACKING pc=0x0000744be03036cc sp=0x0000744bc71fdc40 +Event: 0.725 Thread 0x0000744bf05c1120 DEOPT UNPACKING pc=0x0000744bdfd8abf9 sp=0x0000744bc71fdb40 mode 2 +Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000744be03036cc relative=0x00000000000014cc +Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000744be03036cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 +Event: 0.725 Thread 0x0000744bf05c1120 DEOPT PACKING pc=0x0000744be03036cc sp=0x0000744bc71fdc40 +Event: 0.725 Thread 0x0000744bf05c1120 DEOPT UNPACKING pc=0x0000744bdfd8abf9 sp=0x0000744bc71fdb40 mode 2 +Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000744be0301adc relative=0x0000000000000afc +Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000744be0301adc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 +Event: 0.725 Thread 0x0000744bf05c1120 DEOPT PACKING pc=0x0000744be0301adc sp=0x0000744bc71fdb20 +Event: 0.725 Thread 0x0000744bf05c1120 DEOPT UNPACKING pc=0x0000744bdfd8abf9 sp=0x0000744bc71fdad8 mode 2 +Event: 0.744 Thread 0x0000744bf05c1120 Uncommon trap: trap_request=0xffffff6e fr.pc=0x0000744be03238e8 relative=0x0000000000000148 +Event: 0.744 Thread 0x0000744bf05c1120 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x0000744be03238e8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 +Event: 0.744 Thread 0x0000744bf05c1120 DEOPT PACKING pc=0x0000744be03238e8 sp=0x0000744bc71fe0a0 +Event: 0.744 Thread 0x0000744bf05c1120 DEOPT UNPACKING pc=0x0000744bdfd8abf9 sp=0x0000744bc71fe050 mode 2 + +Classes loaded (20 events): +Event: 0.724 Loading class sun/awt/image/SurfaceManager$ImageAccessor done +Event: 0.724 Loading class java/awt/Image$1 done +Event: 0.724 Loading class sun/awt/image/SurfaceManager +Event: 0.724 Loading class sun/awt/image/SurfaceManager done +Event: 0.724 Loading class java/awt/image/BufferedImage$1 +Event: 0.724 Loading class java/awt/image/BufferedImage$1 done +Event: 0.724 Loading class sun/awt/image/IntegerComponentRaster +Event: 0.724 Loading class sun/awt/image/IntegerComponentRaster done +Event: 0.724 Loading class java/awt/image/IndexColorModel +Event: 0.724 Loading class java/awt/image/IndexColorModel done +Event: 0.724 Loading class sun/awt/image/ShortComponentRaster +Event: 0.724 Loading class sun/awt/image/ShortComponentRaster done +Event: 0.803 Loading class java/util/function/LongFunction +Event: 0.803 Loading class java/util/function/LongFunction done +Event: 0.811 Loading class java/lang/Throwable$WrappedPrintStream +Event: 0.811 Loading class java/lang/Throwable$PrintStreamOrWriter +Event: 0.811 Loading class java/lang/Throwable$PrintStreamOrWriter done +Event: 0.811 Loading class java/lang/Throwable$WrappedPrintStream done +Event: 0.811 Loading class java/lang/StackTraceElement$HashedModules +Event: 0.811 Loading class java/lang/StackTraceElement$HashedModules done + +Classes unloaded (0 events): +No events + +Classes redefined (0 events): +No events + +Internal exceptions (20 events): +Event: 0.166 Thread 0x0000744bf002d0f0 Exception (0x000000062af599d0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.166 Thread 0x0000744bf002d0f0 Exception (0x000000062af5eb08) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.167 Thread 0x0000744bf002d0f0 Exception (0x000000062af70568) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.168 Thread 0x0000744bf002d0f0 Exception (0x000000062af76038) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.168 Thread 0x0000744bf002d0f0 Exception (0x000000062af7a408) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.168 Thread 0x0000744bf002d0f0 Exception (0x000000062af81660) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.212 Thread 0x0000744bf002d0f0 Exception (0x000000062a929cf8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.221 Thread 0x0000744bf002d0f0 Exception (0x000000062a981740) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 0.230 Thread 0x0000744bf002d0f0 Exception (0x000000062a9ec330) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.231 Thread 0x0000744bf002d0f0 Exception (0x000000062a9fa148) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.389 Thread 0x0000744bf05c1120 Exception (0x000000062a5b9f98) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.390 Thread 0x0000744bf05c1120 Exception (0x000000062a5bd4e8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] +Event: 0.649 Thread 0x0000744bf05c1120 Exception (0x000000062a76c258) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.710 Thread 0x0000744bf05c1120 Exception (0x000000062a1ebea0) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 0.711 Thread 0x0000744bf05c1120 Exception (0x000000062a1f1e78) +thrown [open/src/hotspot/share/prims/jni.cpp, line 520] +Event: 0.713 Thread 0x0000744bf05c1120 Exception (0x000000062a21cd28) +thrown [open/src/hotspot/share/prims/jni.cpp, line 520] +Event: 0.800 Thread 0x0000744bf05c1120 Exception (0x0000000629e5fe30) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.800 Thread 0x0000744bf05c1120 Exception (0x0000000629e65678) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.803 Thread 0x0000744bf05c1120 Exception (0x0000000629e7d8a0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.804 Thread 0x0000744bf05c1120 Exception (0x0000000629e8e9b0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] + +VM Operations (12 events): +Event: 0.110 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.110 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.117 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.117 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.127 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.127 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.138 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.138 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.664 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.664 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.707 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.707 Executing VM operation: HandshakeAllThreads (Deoptimize) done + +Memory protections (16 events): +Event: 0.001 Protecting memory [0x0000744bf6700000,0x0000744bf6704000] with protection modes 0 +Event: 0.015 Protecting memory [0x0000744bd7700000,0x0000744bd7704000] with protection modes 0 +Event: 0.015 Protecting memory [0x0000744bcc500000,0x0000744bcc504000] with protection modes 0 +Event: 0.015 Protecting memory [0x0000744bcc400000,0x0000744bcc404000] with protection modes 0 +Event: 0.015 Protecting memory [0x0000744bcc300000,0x0000744bcc304000] with protection modes 0 +Event: 0.015 Protecting memory [0x0000744bcc200000,0x0000744bcc204000] with protection modes 0 +Event: 0.015 Protecting memory [0x0000744bcc100000,0x0000744bcc104000] with protection modes 0 +Event: 0.015 Protecting memory [0x0000744bcc000000,0x0000744bcc004000] with protection modes 0 +Event: 0.024 Protecting memory [0x0000744bc7f00000,0x0000744bc7f04000] with protection modes 0 +Event: 0.025 Protecting memory [0x0000744bc7e00000,0x0000744bc7e04000] with protection modes 0 +Event: 0.057 Protecting memory [0x0000744bc7d00000,0x0000744bc7d04000] with protection modes 0 +Event: 0.235 Protecting memory [0x0000744bc7100000,0x0000744bc7104000] with protection modes 0 +Event: 0.235 Protecting memory [0x0000744bf6700000,0x0000744bf6704000] with protection modes 0 +Event: 0.675 Protecting memory [0x0000744bc7d00000,0x0000744bc7d04000] with protection modes 0 +Event: 0.685 Protecting memory [0x0000744baf285000,0x0000744baf289000] with protection modes 0 +Event: 0.720 Protecting memory [0x0000744baf185000,0x0000744baf189000] with protection modes 0 + +Nmethod flushes (0 events): +No events + +Events (19 events): +Event: 0.010 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf002d0f0 +Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf0137930 +Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf0138ea0 +Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf013a7d0 +Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf013be10 +Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf013d3b0 +Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf013eed0 +Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf01485d0 +Event: 0.024 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf01552a0 +Event: 0.025 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf0157d80 +Event: 0.057 Thread 0x0000744bf013eed0 Thread added: 0x0000744b380d8d00 +Event: 0.235 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf05c1120 +Event: 0.235 Thread 0x0000744bf002d0f0 Thread exited: 0x0000744bf002d0f0 +Event: 0.235 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf002d0f0 +Event: 0.649 Thread 0x0000744b380d8d00 Thread exited: 0x0000744b380d8d00 +Event: 0.675 Thread 0x0000744bf05c1120 Thread added: 0x0000744b1c5acd90 +Event: 0.685 Thread 0x0000744bf01485d0 Thread added: 0x0000744b3441f420 +Event: 0.720 Thread 0x0000744bf05c1120 Thread added: 0x0000744b1c763640 +Event: 0.812 Thread 0x0000744bf05c1120 Thread exited: 0x0000744bf05c1120 + + +Dynamic libraries: +60c000000-62b400000 rw-p 00000000 00:00 0 +62b400000-7ffc00000 ---p 00000000 00:00 0 +7ffc00000-7ffd1f000 rw-p 00dc0000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa +7ffd1f000-800000000 rw-p 00000000 00:00 0 +574fbc634000-574fbc635000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +574fbc636000-574fbc637000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +574fbc637000-574fbc638000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +574fdef4a000-574fdef93000 rw-p 00000000 00:00 0 [heap] +744adc000000-744adc021000 rw-p 00000000 00:00 0 +744adc021000-744ae0000000 ---p 00000000 00:00 0 +744ae4000000-744ae4021000 rw-p 00000000 00:00 0 +744ae4021000-744ae8000000 ---p 00000000 00:00 0 +744ae8000000-744ae8021000 rw-p 00000000 00:00 0 +744ae8021000-744aec000000 ---p 00000000 00:00 0 +744af0000000-744af007c000 rw-p 00000000 00:00 0 +744af007c000-744af4000000 ---p 00000000 00:00 0 +744af4000000-744af4021000 rw-p 00000000 00:00 0 +744af4021000-744af8000000 ---p 00000000 00:00 0 +744afc000000-744afc0c8000 rw-p 00000000 00:00 0 +744afc0c8000-744b00000000 ---p 00000000 00:00 0 +744b00000000-744b00021000 rw-p 00000000 00:00 0 +744b00021000-744b04000000 ---p 00000000 00:00 0 +744b08000000-744b08021000 rw-p 00000000 00:00 0 +744b08021000-744b0c000000 ---p 00000000 00:00 0 +744b0d000000-744b13712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +744b13712000-744b13f30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +744b13f30000-744b13f76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +744b13f76000-744b13ff2000 rw-p 00000000 00:00 0 +744b14000000-744b14021000 rw-p 00000000 00:00 0 +744b14021000-744b18000000 ---p 00000000 00:00 0 +744b1c000000-744b1cff0000 rw-p 00000000 00:00 0 +744b1cff0000-744b20000000 ---p 00000000 00:00 0 +744b20000000-744b20263000 rw-p 00000000 00:00 0 +744b20263000-744b24000000 ---p 00000000 00:00 0 +744b28000000-744b28021000 rw-p 00000000 00:00 0 +744b28021000-744b2c000000 ---p 00000000 00:00 0 +744b2c000000-744b2c021000 rw-p 00000000 00:00 0 +744b2c021000-744b30000000 ---p 00000000 00:00 0 +744b34000000-744b34447000 rw-p 00000000 00:00 0 +744b34447000-744b38000000 ---p 00000000 00:00 0 +744b38000000-744b3838a000 rw-p 00000000 00:00 0 +744b3838a000-744b3c000000 ---p 00000000 00:00 0 +744b40000000-744b40021000 rw-p 00000000 00:00 0 +744b40021000-744b44000000 ---p 00000000 00:00 0 +744b44000000-744b44021000 rw-p 00000000 00:00 0 +744b44021000-744b48000000 ---p 00000000 00:00 0 +744b49600000-744b49601000 ---p 00000000 00:00 0 +744b49601000-744b49e01000 rw-p 00000000 00:00 0 +744b4a000000-744b4acf5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +744b4acf5000-744b4b6d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +744b4b6d8000-744b4bae9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +744b4bae9000-744b4bf6b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +744b4bf6b000-744b4bf73000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +744b4bf73000-744b4bf7e000 rw-p 00000000 00:00 0 +744b4c000000-744b4c021000 rw-p 00000000 00:00 0 +744b4c021000-744b50000000 ---p 00000000 00:00 0 +744b50000000-744b50021000 rw-p 00000000 00:00 0 +744b50021000-744b54000000 ---p 00000000 00:00 0 +744b54400000-744b5442f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +744b5442f000-744b54b02000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +744b54b02000-744b54c24000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +744b54c24000-744b54c35000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +744b54c35000-744b54cb3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +744b54cb3000-744b54cc7000 rw-p 00000000 00:00 0 +744b54e00000-744b54e01000 ---p 00000000 00:00 0 +744b54e01000-744b55601000 rw-p 00000000 00:00 0 +744b55800000-744b55801000 ---p 00000000 00:00 0 +744b55801000-744b56001000 rw-p 00000000 00:00 0 +744b56200000-744b56201000 ---p 00000000 00:00 0 +744b56201000-744b56a01000 rw-p 00000000 00:00 0 +744b56c00000-744b56c01000 ---p 00000000 00:00 0 +744b56c01000-744b57401000 rw-p 00000000 00:00 0 +744b57600000-744b57601000 ---p 00000000 00:00 0 +744b57601000-744b57e01000 rw-p 00000000 00:00 0 +744b58000000-744b58021000 rw-p 00000000 00:00 0 +744b58021000-744b5c000000 ---p 00000000 00:00 0 +744b5c000000-744b5c021000 rw-p 00000000 00:00 0 +744b5c021000-744b60000000 ---p 00000000 00:00 0 +744b60200000-744b60222000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +744b60222000-744b60421000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +744b60421000-744b60429000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +744b60429000-744b6042a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +744b6042a000-744b6042b000 rw-p 00000000 00:00 0 +744b605bb000-744b60800000 rw-s 00000000 00:01 8 /memfd:/.nvidia_drv.XXXXXX (deleted) +744b60800000-744b60801000 ---p 00000000 00:00 0 +744b60801000-744b61001000 rw-p 00000000 00:00 0 +744b61200000-744b61216000 r--p 00000000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +744b61216000-744b61306000 r-xp 00016000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +744b61306000-744b61379000 r--p 00106000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +744b61379000-744b61380000 r--p 00178000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +744b61380000-744b61387000 rw-p 0017f000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +744b61387000-744b61402000 rw-p 00000000 00:00 0 +744b61600000-744b6168d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +744b6168d000-744b61df5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +744b61df5000-744b62682000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +744b62682000-744b626c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +744b626c4000-744b626c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +744b626c7000-744b626cd000 rw-p 00000000 00:00 0 +744b62800000-744b6285b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +744b6285b000-744b62bd9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +744b62bd9000-744b62fd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +744b62fd5000-744b63010000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +744b63010000-744b63015000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +744b63015000-744b63040000 rw-p 00000000 00:00 0 +744b63200000-744b6326e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +744b6326e000-744b637d5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +744b637d5000-744b63ee8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +744b63ee8000-744b63ee9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +744b63ee9000-744b63f26000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +744b63f26000-744b63f29000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +744b63f29000-744b63f2b000 rw-p 00000000 00:00 0 +744b64000000-744b643c0000 rw-p 00000000 00:00 0 +744b643c0000-744b64400000 ---p 00000000 00:00 0 +744b64400000-744b64830000 rw-p 00000000 00:00 0 +744b64830000-744b68000000 ---p 00000000 00:00 0 +744b68000000-744b68021000 rw-p 00000000 00:00 0 +744b68021000-744b6c000000 ---p 00000000 00:00 0 +744b6c200000-744b6c201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +744b6c201000-744b6c202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +744b6c202000-744b6de1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +744b6de1c000-744b6de1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +744b6de1d000-744b6de1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +744b6df00000-744b6df04000 ---p 00000000 00:00 0 +744b6df04000-744b6e000000 rw-p 00000000 00:00 0 +744b6e000000-744b6ed91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa +744b6ed91000-744b6f000000 ---p 00000000 00:00 0 +744b6f000000-744b6f030000 rw-p 00000000 00:00 0 +744b6f030000-744b6f0b0000 rw-p 00000000 00:00 0 +744b6f0b0000-744b6f0e0000 rw-p 00000000 00:00 0 +744b6f0e0000-744baf000000 ---p 00000000 00:00 0 +744baf018000-744baf159000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index +744baf159000-744baf15b000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +744baf15b000-744baf164000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +744baf164000-744baf167000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +744baf167000-744baf168000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +744baf168000-744baf169000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +744baf169000-744baf16a000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +744baf16a000-744baf16c000 rw-p 00000000 00:00 0 +744baf16c000-744baf170000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +744baf170000-744baf180000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +744baf180000-744baf183000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +744baf183000-744baf184000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +744baf184000-744baf185000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +744baf185000-744baf189000 ---p 00000000 00:00 0 +744baf189000-744baf285000 rw-p 00000000 00:00 0 +744baf285000-744baf289000 ---p 00000000 00:00 0 +744baf289000-744baf385000 rw-p 00000000 00:00 0 +744baf385000-744baf396000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +744baf396000-744baf3d8000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +744baf3d8000-744baf3f0000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +744baf3f0000-744baf3fe000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +744baf3fe000-744baf400000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +744baf400000-744baf493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +744baf493000-744baf8e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +744baf8e6000-744bafdfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +744bafdfc000-744bafe34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +744bafe34000-744bafe44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +744bafe44000-744bafe49000 rw-p 00000000 00:00 0 +744bafe55000-744bafe59000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +744bafe59000-744bafe75000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +744bafe75000-744bafe7b000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +744bafe7b000-744bafe7c000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +744bafe7c000-744bafe7e000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +744bafe7e000-744bafe7f000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +744bafe7f000-744bafe8b000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +744bafe8b000-744bafeab000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +744bafeab000-744bafeb7000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +744bafeb7000-744bafec1000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +744bafec1000-744bafec2000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +744bafec2000-744bafed1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +744bafed1000-744baffb7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +744baffb7000-744bafff5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +744bafff5000-744bafff6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +744bafff6000-744bafff9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +744bafff9000-744baffff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +744baffff000-744bb0000000 rw-p 00000000 00:00 0 +744bb0000000-744bb0021000 rw-p 00000000 00:00 0 +744bb0021000-744bb4000000 ---p 00000000 00:00 0 +744bb4000000-744bb4021000 rw-p 00000000 00:00 0 +744bb4021000-744bb8000000 ---p 00000000 00:00 0 +744bb8026000-744bb8028000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +744bb8028000-744bb8093000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +744bb8093000-744bb80bb000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +744bb80bb000-744bb80bc000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +744bb80bc000-744bb80bd000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +744bb80bd000-744bb80c3000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +744bb80c3000-744bb80dd000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +744bb80dd000-744bb80e4000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +744bb80e4000-744bb80e5000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +744bb80e5000-744bb80e6000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +744bb80e6000-744bb80e7000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +744bb80e7000-744bb80e9000 rw-p 00000000 00:00 0 +744bb80e9000-744bb80fc000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +744bb80fc000-744bb811b000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +744bb811b000-744bb8128000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +744bb8128000-744bb8138000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +744bb8138000-744bb8139000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +744bb8139000-744bb814c000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +744bb814c000-744bb81cb000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +744bb81cb000-744bb81f6000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +744bb81f6000-744bb81f7000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +744bb81f7000-744bb81fe000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +744bb81fe000-744bb81ff000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +744bb81ff000-744bb8b22000 rw-p 00000000 00:00 0 +744bb8b27000-744bb8b31000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +744bb8b31000-744bb8b3b000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +744bb8b3b000-744bb8b42000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +744bb8b42000-744bb8b4b000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +744bb8b4b000-744bb8b4c000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +744bb8b4c000-744bb8b57000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +744bb8b57000-744bb8b85000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +744bb8b85000-744bb8b97000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +744bb8b97000-744bb8b98000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +744bb8b98000-744bb8b99000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +744bb8b99000-744bb8b9a000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +744bb8b9a000-744bb8b9e000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +744bb8b9e000-744bb8bb4000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +744bb8bb4000-744bb8bbe000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +744bb8bbe000-744bb8bbf000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +744bb8bbf000-744bb8bc0000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +744bb8bc0000-744bb8bc2000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +744bb8bc2000-744bb8bdb000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +744bb8bdb000-744bb8bdd000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +744bb8bdd000-744bb8bde000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +744bb8bde000-744bb8bdf000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +744bb8bdf000-744bb8be0000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +744bb8bee000-744bb8bf7000 rw-s 00000000 00:01 904560 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +744bb8bf7000-744bb8c00000 rw-s 00000000 00:01 904559 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +744bb8c00000-744bb8c01000 ---p 00000000 00:00 0 +744bb8c01000-744bb9401000 rw-p 00000000 00:00 0 +744bb9405000-744bb946b000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +744bb946b000-744bb955e000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +744bb955e000-744bb95ea000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +744bb95ea000-744bb95fd000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +744bb95fd000-744bb95fe000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +744bb95fe000-744bb9600000 rw-p 00000000 00:00 0 +744bb9600000-744bb97c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +744bb97c4000-744bbb4c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +744bbb4c4000-744bbbb39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +744bbbb39000-744bbbb3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +744bbbb3a000-744bbbd1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +744bbbd1a000-744bbbd93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +744bbbd93000-744bbbe08000 rw-p 00000000 00:00 0 +744bbbe09000-744bbbe0d000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +744bbbe0d000-744bbbe22000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +744bbbe22000-744bbbe28000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +744bbbe28000-744bbbe29000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +744bbbe29000-744bbbe2b000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +744bbbe2b000-744bbbe2c000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +744bbbe2c000-744bbbe5f000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +744bbbe5f000-744bbbec2000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +744bbbec2000-744bbbee1000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +744bbbee1000-744bbbf0c000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +744bbbf0c000-744bbbf0d000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +744bbbf0d000-744bbbf0e000 rw-p 00000000 00:00 0 +744bbbf0e000-744bbbfcf000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +744bbbfcf000-744bbbfd0000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +744bbbfd0000-744bbbfdb000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +744bbbfdb000-744bbc000000 rw-p 00000000 00:00 0 +744bbc000000-744bbc021000 rw-p 00000000 00:00 0 +744bbc021000-744bc0000000 ---p 00000000 00:00 0 +744bc0000000-744bc0021000 rw-p 00000000 00:00 0 +744bc0021000-744bc4000000 ---p 00000000 00:00 0 +744bc4006000-744bc4008000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +744bc4008000-744bc400c000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +744bc400c000-744bc400e000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +744bc400e000-744bc400f000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +744bc400f000-744bc4010000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +744bc4010000-744bc4012000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +744bc4012000-744bc401a000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +744bc401a000-744bc401c000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +744bc401c000-744bc401d000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +744bc401d000-744bc401e000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +744bc401e000-744bc404d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +744bc404d000-744bc41a0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +744bc41a0000-744bc41f4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +744bc41f4000-744bc41f5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +744bc41f5000-744bc41fe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +744bc41fe000-744bc41ff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +744bc41ff000-744bc4200000 rw-p 00000000 00:00 0 +744bc4200000-744bc429a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +744bc429a000-744bc43ab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +744bc43ab000-744bc441a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +744bc441a000-744bc441b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +744bc441b000-744bc4426000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +744bc4426000-744bc4429000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +744bc4429000-744bc442c000 rw-p 00000000 00:00 0 +744bc4431000-744bc4433000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +744bc4433000-744bc443b000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +744bc443b000-744bc443c000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +744bc443c000-744bc443d000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +744bc443d000-744bc443e000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +744bc443e000-744bc443f000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +744bc443f000-744bc44af000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +744bc44af000-744bc44b0000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +744bc44b0000-744bc44b5000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +744bc44b5000-744bc44b7000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +744bc44b7000-744bc44b9000 rw-p 00000000 00:00 0 +744bc44b9000-744bc44e8000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +744bc44e8000-744bc45a4000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +744bc45a4000-744bc45ef000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +744bc45ef000-744bc45fd000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +744bc45fd000-744bc45ff000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +744bc45ff000-744bc4600000 rw-p 00000000 00:00 0 +744bc4600000-744bc4841000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +744bc4841000-744bc4862000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +744bc4862000-744bc4a00000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +744bc4a00000-744bc5600000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +744bc5600000-744bc64ab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +744bc64ab000-744bc6610000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +744bc6610000-744bc667e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +744bc667e000-744bc669c000 rw-p 00000000 00:00 0 +744bc66a2000-744bc66a4000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +744bc66a4000-744bc66a7000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +744bc66a7000-744bc66a8000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +744bc66a8000-744bc66a9000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +744bc66a9000-744bc66aa000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +744bc66aa000-744bc66ad000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +744bc66ad000-744bc66ce000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +744bc66ce000-744bc66da000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +744bc66da000-744bc66db000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +744bc66db000-744bc66dc000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +744bc66dc000-744bc66dd000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +744bc66dd000-744bc66eb000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +744bc66eb000-744bc66fc000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +744bc66fc000-744bc670a000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +744bc670a000-744bc670e000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +744bc670e000-744bc670f000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +744bc670f000-744bc6717000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +744bc6717000-744bc6735000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +744bc6735000-744bc6742000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +744bc6742000-744bc6744000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +744bc6744000-744bc6745000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +744bc6745000-744bc6749000 rw-p 00000000 00:00 0 +744bc6749000-744bc674c000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +744bc674c000-744bc6763000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +744bc6763000-744bc6767000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +744bc6767000-744bc6768000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +744bc6768000-744bc6769000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +744bc6769000-744bc676d000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +744bc676d000-744bc678c000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +744bc678c000-744bc6796000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +744bc6796000-744bc6797000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +744bc6797000-744bc6799000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +744bc6799000-744bc679a000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +744bc679a000-744bc679f000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +744bc679f000-744bc67aa000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +744bc67aa000-744bc67ae000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +744bc67ae000-744bc67af000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +744bc67af000-744bc67b0000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +744bc67b0000-744bc67b1000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +744bc67b1000-744bc67bb000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +744bc67bb000-744bc686d000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +744bc686d000-744bc687e000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +744bc687e000-744bc687f000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +744bc687f000-744bc6880000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +744bc6880000-744bc6890000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +744bc6890000-744bc68ee000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +744bc68ee000-744bc690a000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +744bc690a000-744bc690b000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +744bc690b000-744bc6911000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +744bc6911000-744bc6912000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +744bc6912000-744bc691a000 rw-p 00000000 00:00 0 +744bc691a000-744bc696b000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +744bc696b000-744bc69c7000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +744bc69c7000-744bc69fc000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +744bc69fc000-744bc69fd000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +744bc69fd000-744bc6a1d000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +744bc6a1d000-744bc6a3d000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +744bc6a3d000-744bc6a42000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +744bc6a42000-744bc6a44000 rw-p 00000000 00:00 0 +744bc6a44000-744bc6a4a000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +744bc6a4a000-744bc6a94000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +744bc6a94000-744bc6abe000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +744bc6abe000-744bc6abf000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +744bc6abf000-744bc6ac0000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +744bc6ac0000-744bc6ad9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +744bc6ad9000-744bc6b65000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +744bc6b65000-744bc6bfa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +744bc6bfa000-744bc6bfb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +744bc6bfb000-744bc6bfc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +744bc6bfc000-744bc6c00000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +744bc6c00000-744bc7000000 rw-p 00000000 00:00 0 +744bc7002000-744bc7004000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +744bc7004000-744bc700b000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +744bc700b000-744bc700c000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +744bc700c000-744bc700d000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +744bc700d000-744bc700e000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +744bc700e000-744bc700f000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +744bc700f000-744bc7010000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +744bc7010000-744bc7011000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +744bc7011000-744bc7012000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +744bc7012000-744bc7013000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +744bc7013000-744bc7014000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +744bc7014000-744bc7015000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +744bc7015000-744bc7016000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +744bc7016000-744bc7017000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +744bc7017000-744bc7018000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +744bc7018000-744bc7019000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +744bc7019000-744bc701c000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +744bc701c000-744bc701f000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +744bc701f000-744bc7020000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +744bc7020000-744bc7021000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +744bc7021000-744bc7022000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +744bc7022000-744bc7023000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +744bc7023000-744bc7026000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +744bc7026000-744bc7029000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +744bc7029000-744bc702a000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +744bc702a000-744bc702b000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +744bc702b000-744bc702c000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +744bc702c000-744bc702d000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +744bc702d000-744bc7032000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +744bc7032000-744bc7038000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +744bc7038000-744bc703b000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +744bc703b000-744bc703d000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +744bc703d000-744bc703e000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +744bc703e000-744bc7041000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +744bc7041000-744bc7055000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +744bc7055000-744bc7059000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +744bc7059000-744bc705a000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +744bc705a000-744bc705b000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +744bc705b000-744bc705c000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +744bc705c000-744bc705f000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +744bc705f000-744bc7065000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +744bc7065000-744bc7067000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +744bc7067000-744bc7068000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +744bc7068000-744bc7069000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +744bc7069000-744bc7079000 r--p 00000000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +744bc7079000-744bc709a000 r-xp 00010000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +744bc709a000-744bc70d6000 r--p 00031000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +744bc70d6000-744bc70da000 r--p 0006c000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +744bc70da000-744bc70dd000 rw-p 00070000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +744bc70dd000-744bc7100000 rw-p 00000000 00:00 0 +744bc7100000-744bc7104000 ---p 00000000 00:00 0 +744bc7104000-744bc7200000 rw-p 00000000 00:00 0 +744bc7200000-744bc7a00000 rw-p 00000000 00:00 0 +744bc7a00000-744bc7a08000 r--p 00000000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +744bc7a08000-744bc7a60000 r-xp 00008000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +744bc7a60000-744bc7a71000 r--p 00060000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +744bc7a71000-744bc7a72000 ---p 00071000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +744bc7a72000-744bc7a78000 r--p 00071000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +744bc7a78000-744bc7a79000 rw-p 00077000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +744bc7a79000-744bc7c83000 rw-p 00000000 00:00 0 +744bc7c84000-744bc7cb0000 r--p 00000000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +744bc7cb0000-744bc7ce4000 r-xp 0002c000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +744bc7ce4000-744bc7cfe000 r--p 00060000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +744bc7cfe000-744bc7cff000 r--p 00079000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +744bc7cff000-744bc7d00000 rw-p 0007a000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +744bc7d00000-744bc7d04000 ---p 00000000 00:00 0 +744bc7d04000-744bc7e00000 rw-p 00000000 00:00 0 +744bc7e00000-744bc7e04000 ---p 00000000 00:00 0 +744bc7e04000-744bc7f00000 rw-p 00000000 00:00 0 +744bc7f00000-744bc7f04000 ---p 00000000 00:00 0 +744bc7f04000-744bc8000000 rw-p 00000000 00:00 0 +744bc8000000-744bc8021000 rw-p 00000000 00:00 0 +744bc8021000-744bcc000000 ---p 00000000 00:00 0 +744bcc000000-744bcc004000 ---p 00000000 00:00 0 +744bcc004000-744bcc100000 rw-p 00000000 00:00 0 +744bcc100000-744bcc104000 ---p 00000000 00:00 0 +744bcc104000-744bcc200000 rw-p 00000000 00:00 0 +744bcc200000-744bcc204000 ---p 00000000 00:00 0 +744bcc204000-744bcc300000 rw-p 00000000 00:00 0 +744bcc300000-744bcc304000 ---p 00000000 00:00 0 +744bcc304000-744bcc400000 rw-p 00000000 00:00 0 +744bcc400000-744bcc404000 ---p 00000000 00:00 0 +744bcc404000-744bcc500000 rw-p 00000000 00:00 0 +744bcc500000-744bcc504000 ---p 00000000 00:00 0 +744bcc504000-744bcc600000 rw-p 00000000 00:00 0 +744bcc600000-744bcd506000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive +744bcd50a000-744bcd50b000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +744bcd50b000-744bcd50c000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +744bcd50c000-744bcd50d000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +744bcd50d000-744bcd50e000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +744bcd50e000-744bcd50f000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +744bcd50f000-744bcd51a000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +744bcd51a000-744bcd523000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +744bcd523000-744bcd528000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +744bcd528000-744bcd529000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +744bcd529000-744bcd52b000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +744bcd52b000-744bcd52c000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +744bcd52c000-744bcd5fa000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +744bcd5fa000-744bcd5fb000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +744bcd5fb000-744bcd5fc000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +744bcd5fc000-744bcd5fd000 ---p 00000000 00:00 0 +744bcd5fd000-744bcd6fd000 rw-p 00000000 00:00 0 +744bcd6fd000-744bcd6fe000 ---p 00000000 00:00 0 +744bcd6fe000-744bcd7fe000 rw-p 00000000 00:00 0 +744bcd7fe000-744bcd7ff000 ---p 00000000 00:00 0 +744bcd7ff000-744bcd8ff000 rw-p 00000000 00:00 0 +744bcd8ff000-744bcd900000 ---p 00000000 00:00 0 +744bcd900000-744bcda00000 rw-p 00000000 00:00 0 +744bcda00000-744bd01d0000 rw-p 00000000 00:00 0 +744bd01d0000-744bd76f0000 ---p 00000000 00:00 0 +744bd76f0000-744bd7700000 rw-p 00000000 00:00 0 +744bd7700000-744bd7704000 ---p 00000000 00:00 0 +744bd7704000-744bd7800000 rw-p 00000000 00:00 0 +744bd7800000-744bd78fa000 rw-p 00000000 00:00 0 +744bd78fa000-744bd879e000 ---p 00000000 00:00 0 +744bd879e000-744bd87a0000 rw-p 00000000 00:00 0 +744bd87a0000-744bd87a1000 r--s 00000000 00:06 1017 /dev/nvidiactl +744bd87a1000-744bd87a3000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +744bd87a3000-744bd87a5000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +744bd87a5000-744bd87a6000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +744bd87a6000-744bd87a7000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +744bd87a7000-744bd87a8000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +744bd87a8000-744bd87af000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +744bd87af000-744bd87b5000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +744bd87b5000-744bd87b8000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +744bd87b8000-744bd87b9000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +744bd87b9000-744bd87ba000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +744bd87ba000-744bd87bb000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +744bd87bb000-744bd87bc000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +744bd87bc000-744bd87be000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +744bd87be000-744bd87bf000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +744bd87bf000-744bd87c0000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +744bd87c0000-744bd87c1000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +744bd87c1000-744bd87c2000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +744bd87c2000-744bd87c3000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +744bd87c3000-744bd87c4000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +744bd87c4000-744bd87c5000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +744bd87c5000-744bd87c6000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +744bd87c6000-744bd87c8000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +744bd87c8000-744bd87ce000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +744bd87ce000-744bd87d0000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +744bd87d0000-744bd87d1000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +744bd87d1000-744bd87d2000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +744bd87d2000-744bd87d4000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +744bd87d4000-744bd87db000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +744bd87db000-744bd87dd000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +744bd87dd000-744bd87de000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +744bd87de000-744bd87df000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +744bd87df000-744bd87e1000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +744bd87e1000-744bd87e8000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +744bd87e8000-744bd87ea000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +744bd87ea000-744bd87eb000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +744bd87eb000-744bd87ec000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +744bd87ec000-744bd87ef000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +744bd87ef000-744bd87fb000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +744bd87fb000-744bd87fe000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +744bd87fe000-744bd87ff000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +744bd87ff000-744bd8800000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +744bd8800000-744bd8a70000 rwxp 00000000 00:00 0 +744bd8a70000-744bdfd37000 ---p 00000000 00:00 0 +744bdfd37000-744bdffa7000 rwxp 00000000 00:00 0 +744bdffa7000-744be02c8000 ---p 00000000 00:00 0 +744be02c8000-744be0538000 rwxp 00000000 00:00 0 +744be0538000-744be7800000 ---p 00000000 00:00 0 +744be7800000-744beffb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules +744beffb5000-744beffb6000 rw-s 00000000 00:01 5128 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +744beffb6000-744beffb7000 rw-s 00000000 00:01 905529 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) +744beffb7000-744beffb9000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +744beffb9000-744beffbc000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +744beffbc000-744beffbd000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +744beffbd000-744beffbe000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +744beffbe000-744beffbf000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +744beffbf000-744beffc3000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +744beffc3000-744beffce000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +744beffce000-744beffd2000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +744beffd2000-744beffd3000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +744beffd3000-744beffd4000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +744beffd4000-744beffd5000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +744beffd5000-744beffd8000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +744beffd8000-744beffd9000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +744beffd9000-744beffda000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +744beffda000-744beffdb000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +744beffdb000-744beffdd000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +744beffdd000-744beffe4000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +744beffe4000-744beffe6000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +744beffe6000-744beffe7000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +744beffe7000-744beffe8000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +744beffe8000-744beffec000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +744beffec000-744befff9000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +744befff9000-744befffc000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +744befffc000-744befffd000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +744befffd000-744befffe000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +744befffe000-744beffff000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +744beffff000-744bf0000000 rw-p 00000000 00:00 0 +744bf0000000-744bf05c5000 rw-p 00000000 00:00 0 +744bf05c5000-744bf4000000 ---p 00000000 00:00 0 +744bf4000000-744bf4001000 rw-s 00000000 00:01 905528 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +744bf4001000-744bf4003000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +744bf4003000-744bf4005000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +744bf4005000-744bf4007000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +744bf4007000-744bf4008000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +744bf4008000-744bf4009000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +744bf4009000-744bf4014000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +744bf4014000-744bf4028000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +744bf4028000-744bf4031000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +744bf4031000-744bf4032000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +744bf4032000-744bf4033000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +744bf4033000-744bf4071000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +744bf4071000-744bf4072000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +744bf4072000-744bf4073000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +744bf4073000-744bf4074000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +744bf4074000-744bf48fd000 rw-p 00000000 00:00 0 +744bf48fd000-744bf48fe000 ---p 00000000 00:00 0 +744bf48fe000-744bf49fe000 rw-p 00000000 00:00 0 +744bf49fe000-744bf49ff000 ---p 00000000 00:00 0 +744bf49ff000-744bf4aff000 rw-p 00000000 00:00 0 +744bf4aff000-744bf4b00000 ---p 00000000 00:00 0 +744bf4b00000-744bf4c00000 rw-p 00000000 00:00 0 +744bf4c00000-744bf4cfa000 rw-p 00000000 00:00 0 +744bf4cfa000-744bf5b9e000 ---p 00000000 00:00 0 +744bf5b9e000-744bf5ba0000 rw-p 00000000 00:00 0 +744bf5ba0000-744bf5ba1000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +744bf5ba1000-744bf5ba3000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +744bf5ba3000-744bf5ba4000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +744bf5ba4000-744bf5ba5000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +744bf5ba5000-744bf5ba6000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +744bf5ba6000-744bf5bad000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache +744bf5bad000-744bf5bae000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +744bf5bae000-744bf5bb1000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +744bf5bb1000-744bf5bb2000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +744bf5bb2000-744bf5bb3000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +744bf5bb3000-744bf5bb4000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +744bf5bb4000-744bf5bb5000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +744bf5bb5000-744bf5bb8000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +744bf5bb8000-744bf5bbc000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +744bf5bbc000-744bf5bbe000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +744bf5bbe000-744bf5bbf000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +744bf5bbf000-744bf5bc0000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +744bf5bc0000-744bf5bc1000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +744bf5bc1000-744bf5bc3000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +744bf5bc3000-744bf5bc4000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +744bf5bc4000-744bf5bc5000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +744bf5bc5000-744bf5bc6000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +744bf5bc6000-744bf652f000 rw-p 00000000 00:00 0 +744bf652f000-744bf6615000 ---p 00000000 00:00 0 +744bf6615000-744bf661a000 rw-p 00000000 00:00 0 +744bf661a000-744bf6700000 ---p 00000000 00:00 0 +744bf6700000-744bf6704000 ---p 00000000 00:00 0 +744bf6704000-744bf6800000 rw-p 00000000 00:00 0 +744bf6800000-744bf7b30000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +744bf7b30000-744bf7c00000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +744bf7c00000-744bf7c2e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +744bf7c2e000-744bf7ca4000 rw-p 00000000 00:00 0 +744bf7ca4000-744bf7ca5000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +744bf7ca5000-744bf7ca6000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +744bf7ca6000-744bf7ca7000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +744bf7ca7000-744bf7ca8000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +744bf7ca8000-744bf7ca9000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +744bf7ca9000-744bf7cb4000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +744bf7cb4000-744bf7cb5000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +744bf7cb5000-744bf7cb6000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +744bf7cb6000-744bf7cb7000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +744bf7cb7000-744bf7cf6000 rw-p 00000000 00:00 0 +744bf7cf6000-744bf7d16000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +744bf7d16000-744bf7d17000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +744bf7d17000-744bf7d18000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +744bf7d18000-744bf7d19000 rw-p 00000000 00:00 0 +744bf7d19000-744bf7d27000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +744bf7d27000-744bf7da3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +744bf7da3000-744bf7dfe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +744bf7dfe000-744bf7dff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +744bf7dff000-744bf7e00000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +744bf7e00000-744bf7e28000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +744bf7e28000-744bf7fbd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +744bf7fbd000-744bf8015000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +744bf8015000-744bf8016000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +744bf8016000-744bf801a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +744bf801a000-744bf801c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +744bf801c000-744bf8029000 rw-p 00000000 00:00 0 +744bf8029000-744bf802a000 rw-s 00000000 00:01 902416 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +744bf802a000-744bf802b000 r-xp 00000000 00:00 0 +744bf802b000-744bf802c000 rw-p 00000000 00:00 0 +744bf802c000-744bf802d000 r-xp 0005e000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +744bf802d000-744bf802e000 rw-p 00000000 00:00 0 +744bf802e000-744bf8041000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +744bf8041000-744bf8042000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +744bf8042000-744bf8043000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +744bf8043000-744bf8044000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +744bf8044000-744bf8062000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +744bf8062000-744bf8064000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +744bf8064000-744bf8065000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +744bf8065000-744bf8066000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +744bf8066000-744bf8067000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +744bf8067000-744bf8068000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +744bf8068000-744bf8069000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +744bf8069000-744bf806a000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +744bf806a000-744bf806e000 rw-p 00000000 00:00 0 +744bf806e000-744bf806f000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +744bf806f000-744bf8070000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +744bf8070000-744bf8071000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +744bf8071000-744bf8072000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +744bf8072000-744bf8073000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +744bf8073000-744bf8074000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +744bf8074000-744bf8075000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +744bf8075000-744bf8076000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +744bf8076000-744bf8077000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +744bf8077000-744bf8078000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +744bf8078000-744bf807a000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +744bf807a000-744bf808b000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +744bf808b000-744bf8091000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +744bf8091000-744bf8092000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +744bf8092000-744bf8093000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +744bf8093000-744bf8094000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +744bf8094000-744bf809b000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +744bf809b000-744bf809c000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +744bf809c000-744bf809d000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +744bf809d000-744bf809e000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +744bf809e000-744bf80a3000 rw-p 00000000 00:00 0 +744bf80a3000-744bf80aa000 ---p 00000000 00:00 0 +744bf80aa000-744bf80b2000 rw-s 00000000 103:03 4325438 /tmp/hsperfdata_codex/77449 +744bf80b2000-744bf80b3000 ---p 00000000 00:00 0 +744bf80b3000-744bf80b4000 r--p 00000000 00:00 0 +744bf80b4000-744bf80c3000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +744bf80c3000-744bf80c4000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +744bf80c4000-744bf80c5000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +744bf80c5000-744bf80c7000 rw-p 00000000 00:00 0 +744bf80c7000-744bf80cb000 r--p 00000000 00:00 0 [vvar] +744bf80cb000-744bf80cd000 r-xp 00000000 00:00 0 [vdso] +744bf80cd000-744bf80cf000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +744bf80cf000-744bf80f9000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +744bf80f9000-744bf8104000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +744bf8104000-744bf8105000 ---p 00000000 00:00 0 +744bf8105000-744bf8107000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +744bf8107000-744bf8109000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7ffd7475d000-7ffd74780000 rw-p 00000000 00:00 0 [stack] +ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] +Total number of mappings: 719 + + +VM Arguments: +jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant +java_command: jme3test.vulkan.VulkanHelperTest +java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar +Launcher Type: SUN_STANDARD + +[Global flags] + intx CICompilerCount = 4 {product} {ergonomic} + uint ConcGCThreads = 2 {product} {ergonomic} + uint G1ConcRefinementThreads = 8 {product} {ergonomic} + size_t G1HeapRegionSize = 4194304 {product} {ergonomic} + size_t InitialHeapSize = 524288000 {product} {ergonomic} + size_t MarkStackSize = 4194304 {product} {ergonomic} + size_t MarkStackSizeMax = 536870912 {product} {ergonomic} + size_t MaxHeapSize = 8388608000 {product} {ergonomic} + size_t MaxNewSize = 5033164800 {product} {ergonomic} + size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} + size_t MinHeapSize = 8388608 {product} {ergonomic} + uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} + uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} + uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} + uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} + bool SegmentedCodeCache = true {product} {ergonomic} + size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} + bool UseCompressedOops = true {product lp64_product} {ergonomic} + bool UseG1GC = true {product} {ergonomic} + +Logging: +Log output configuration: + #0: stdout all=warning uptime,level,tags foldmultilines=false + #1: stderr all=off uptime,level,tags foldmultilines=false + +Environment Variables: +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin +USERNAME=codex +SHELL=/bin/bash +DISPLAY=:1 +LANG=en_US.UTF-8 + +Active Locale: +LC_ALL=en_US.UTF-8 +LC_COLLATE=en_US.UTF-8 +LC_CTYPE=en_US.UTF-8 +LC_MESSAGES=en_US.UTF-8 +LC_MONETARY=en_US.UTF-8 +LC_NUMERIC=en_US.UTF-8 +LC_TIME=en_US.UTF-8 + +Signal Handlers: + SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked + SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + + +Periodic native trim disabled + +--------------- S Y S T E M --------------- + +OS: +DISTRIB_ID=Pop +DISTRIB_RELEASE=22.04 +DISTRIB_CODENAME=jammy +DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" +uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 +OS uptime: 0 days 15:09 hours +libc: glibc 2.35 NPTL 2.35 +rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k +load average: 1.73 1.04 1.12 + +/proc/meminfo: +MemTotal: 32767656 kB +MemFree: 19696668 kB +MemAvailable: 22349024 kB +Buffers: 331384 kB +Cached: 4282304 kB +SwapCached: 0 kB +Active: 10072868 kB +Inactive: 2105852 kB +Active(anon): 7594960 kB +Inactive(anon): 0 kB +Active(file): 2477908 kB +Inactive(file): 2105852 kB +Unevictable: 15148 kB +Mlocked: 16 kB +SwapTotal: 20970996 kB +SwapFree: 20970996 kB +Zswap: 0 kB +Zswapped: 0 kB +Dirty: 15100 kB +Writeback: 0 kB +AnonPages: 7580348 kB +Mapped: 1830520 kB +Shmem: 29636 kB +KReclaimable: 176052 kB +Slab: 355840 kB +SReclaimable: 176052 kB +SUnreclaim: 179788 kB +KernelStack: 20232 kB +PageTables: 51972 kB +SecPageTables: 0 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 37354824 kB +Committed_AS: 13813280 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 249800 kB +VmallocChunk: 0 kB +Percpu: 9152 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 6144 kB +ShmemPmdMapped: 0 kB +FileHugePages: 0 kB +FilePmdMapped: 0 kB +Unaccepted: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +Hugetlb: 0 kB +DirectMap4k: 796472 kB +DirectMap2M: 12736512 kB +DirectMap1G: 19922944 kB + +/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never +/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 +/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force +/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never + +Process Memory: +Virtual Size: 12252976K (peak: 12315664K) +Resident Set Size: 232084K (peak: 232084K) (anon: 114836K, file: 117248K, shmem: 0K) +Swapped out: 0K +C-Heap outstanding allocations: 58799K, retained: 8528K +glibc malloc tunables: (default) + +/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 +/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 +/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 +/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 + +container (cgroup) information: +container_type: cgroupv2 +cpu_cpuset_cpus: not supported +cpu_memory_nodes: not supported +active_processor_count: 8 +cpu_quota: not supported +cpu_period: not supported +cpu_shares: not supported +memory_limit_in_bytes: unlimited +memory_and_swap_limit_in_bytes: unlimited +memory_soft_limit_in_bytes: 0 +memory_usage_in_bytes: 5940604 k +memory_max_usage_in_bytes: not supported +rss_usage_in_bytes: 4078804 k +cache_usage_in_bytes: 1788376 k +memory_swap_current_in_bytes: 0 +memory_swap_max_limit_in_bytes: unlimited +maximum number of tasks: 38296 +current number of tasks: 302 + +Steal ticks since vm start: 0 +Steal ticks percentage since vm start: 0.000 + +CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c +CPU Model and flags from /proc/cpuinfo: +model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities + +Online cpus: 0-7 +Offline cpus: +BIOS frequency limitation: +Frequency switch latency (ns): 0 +Available cpu frequencies: +Current governor: powersave +Core performance/turbo boost: + +Memory: 4k page, physical 32767656k(22349024k free), swap 20970996k(20970996k free) +Page Sizes: 4k + +vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 + +END. diff --git a/hs_err_pid84545.log b/hs_err_pid84545.log new file mode 100644 index 0000000000..de478df0ec --- /dev/null +++ b/hs_err_pid84545.log @@ -0,0 +1,1595 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x0000732d79c5933a, pid=84545, tid=84592 +# +# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) +# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) +# Problematic frame: +# C [libjemalloc.so+0x5933a] +# +# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.84545) +# +# If you would like to submit a bug report, please visit: +# https://bugreport.java.com/bugreport/crash.jsp +# + +--------------- S U M M A R Y ------------ + +Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanTest + +Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS +Time: Thu Jun 26 22:31:30 2025 EDT elapsed time: 7.166298 seconds (0d 0h 0m 7s) + +--------------- T H R E A D --------------- + +Current thread is native thread + +Stack: [0x0000732d78bb2000,0x0000732d78cb2000], sp=0x0000732d78cb08d0, free space=1018k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libjemalloc.so+0x5933a] + +siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 + +Registers: +RAX=0x0000000000000000, RBX=0x0000000000000200, RCX=0x0000000000000000, RDX=0x0000732d79c78440 +RSP=0x0000732d78cb08d0, RBP=0x0000732d78cb0db0, RSI=0x0000000000000000, RDI=0x0000732d795c65b0 +R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x0000732d795c65f0 +R12=0x000000000000003e, R13=0x0000732d78cb0d70, R14=0x000000000000003e, R15=0x0000732d78cb0ad0 +RIP=0x0000732d79c5933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 + TRAPNO=0x000000000000000e + + +Top of Stack: (sp=0x0000732d78cb08d0) +0x0000732d78cb08d0: 0000732da44c43d0 0000732d78cb0960 +0x0000732d78cb08e0: 0000732d78cb0970 0000732daa5c6211 +0x0000732d78cb08f0: 0000000000000005 0000732da44c4588 +0x0000732d78cb0900: 0000000000000005 0000000000000000 +0x0000732d78cb0910: 0000000000000001 0000732da44c4060 +0x0000732d78cb0920: 0000732da44c4588 0000732da44c4060 +0x0000732d78cb0930: 0000000193d3f020 0000732da44c43d0 +0x0000732d78cb0940: 0000000000000000 6432333700000000 +0x0000732d78cb0950: 3035636300000000 d6dd233100000004 +0x0000732d78cb0960: 00000000ffffffff 0000000000000000 +0x0000732d78cb0970: 0000732daa20d4d0 0000732daa5b37c0 +0x0000732d78cb0980: 0000732d78cb09b0 0000732da9c78613 +0x0000732d78cb0990: 0000732d78cb0b88 0000732daa28849a +0x0000732d78cb09a0: 0000000000000000 0000732d78cb0aa0 +0x0000732d78cb09b0: 00000000fbad8001 0000000000000002 +0x0000732d78cb09c0: 0000732da44c4060 0000732d8a77e028 +0x0000732d78cb09d0: 0000732daa41cae8 0000000000000004 +0x0000732d78cb09e0: 0000732d78cb1b58 0000732daa5ccf71 +0x0000732d78cb09f0: 0000000000000005 0000000000000000 +0x0000732d78cb0a00: 0000732daa20d4d0 0000732daa2a53e0 +0x0000732d78cb0a10: 0000000000000000 0000732d78cb0e00 +0x0000732d78cb0a20: 0000732daa41caf8 0000000000000000 +0x0000732d78cb0a30: 0000732daa41cae8 0000732daa5cfdae +0x0000732d78cb0a40: 0000000000000001 000000000000006f +0x0000732d78cb0a50: 0000732d8a7307d0 0000000000000000 +0x0000732d78cb0a60: 0000732c80b80500 0000000000000000 +0x0000732d78cb0a70: 00000000000000ca 3a92cd60ea629989 +0x0000732d78cb0a80: 0000000000000213 0000732daa417300 +0x0000732d78cb0a90: 0000000000000000 0000000000000200 +0x0000732d78cb0aa0: 0000732d78cb0db0 000000000000003e +0x0000732d78cb0ab0: 0000732d78cb0d70 0000732d78cb0ad0 +0x0000732d78cb0ac0: 0000732c800024d0 0000732d79c592f8 + +Instructions: (pc=0x0000732d79c5933a) +0x0000732d79c5923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff +0x0000732d79c5924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 +0x0000732d79c5925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 +0x0000732d79c5926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c +0x0000732d79c5927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b +0x0000732d79c5928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 +0x0000732d79c5929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 +0x0000732d79c592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 +0x0000732d79c592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 +0x0000732d79c592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d +0x0000732d79c592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c +0x0000732d79c592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 +0x0000732d79c592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b +0x0000732d79c5930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 +0x0000732d79c5931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 +0x0000732d79c5932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 +0x0000732d79c5933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 +0x0000732d79c5934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c +0x0000732d79c5935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 +0x0000732d79c5936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 +0x0000732d79c5937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c +0x0000732d79c5938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 +0x0000732d79c5939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 +0x0000732d79c593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d +0x0000732d79c593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 +0x0000732d79c593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f +0x0000732d79c593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 +0x0000732d79c593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 +0x0000732d79c593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 +0x0000732d79c5940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff +0x0000732d79c5941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 +0x0000732d79c5942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 + + + +--------------- P R O C E S S --------------- + +VM state: not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: None + +Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 + +CDS archive(s) mapped at: [0x0000732d22000000-0x0000732d22d91000-0x0000732d22d91000), size 14225408, SharedBaseAddress: 0x0000732d22000000, ArchiveRelocationMode: 1. +Compressed class space mapped at: 0x0000732d23000000-0x0000732d63000000, reserved size: 1073741824 +Narrow klass base: 0x0000732d22000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 + +GC Precious Log: + + +Heap: + garbage-first heap total reserved 8192000K, committed 28672K, used 13653K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 3 young (12288K), 1 survivors (4096K) + Metaspace used 22010K, committed 22336K, reserved 1114112K + class space used 2288K, committed 2432K, reserved 1048576K + +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|0x000000060c000000, 0x000000060c367620, 0x000000060c400000| 85%| O| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 +| 1|0x000000060c400000, 0x000000060c6be0b8, 0x000000060c800000| 68%| O| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 +| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 +| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 +| 4|0x000000060d000000, 0x000000060d1d0e28, 0x000000060d400000| 45%| E| |TAMS 0x000000060d000000| PB 0x000000060d000000| Complete | 0 +| 5|0x000000060d400000, 0x000000060d55ef70, 0x000000060d800000| 34%| S|CS|TAMS 0x000000060d400000| PB 0x000000060d400000| Complete | 0 +| 6|0x000000060d800000, 0x000000060dc00000, 0x000000060dc00000|100%| E|CS|TAMS 0x000000060d800000| PB 0x000000060d800000| Complete | 0 + +Card table byte_map: [0x0000732d8a800000,0x0000732d8b7a0000] _byte_map_base: 0x0000732d877a0000 + +Marking Bits: (CMBitMap*) 0x0000732da4059190 + Bits: [0x0000732d82a00000, 0x0000732d8a700000) + +Polling page: 0x0000732daa59f000 + +Metaspace: + +Usage: + Non-class: 19.26 MB used. + Class: 2.24 MB used. + Both: 21.49 MB used. + +Virtual space: + Non-class space: 64.00 MB reserved, 19.44 MB ( 30%) committed, 1 nodes. + Class space: 1.00 GB reserved, 2.38 MB ( <1%) committed, 1 nodes. + Both: 1.06 GB reserved, 21.81 MB ( 2%) committed. + +Chunk freelists: + Non-Class: 11.98 MB + Class: 13.45 MB + Both: 25.44 MB + +MaxMetaspaceSize: unlimited +CompressedClassSpaceSize: 1.00 GB +Initial GC threshold: 21.00 MB +Current GC threshold: 27.12 MB +CDS: on + - commit_granule_bytes: 65536. + - commit_granule_words: 8192. + - virtual_space_node_default_size: 8388608. + - enlarge_chunks_in_place: 1. + - use_allocation_guard: 0. + + +Internal statistics: + +num_allocs_failed_limit: 0. +num_arena_births: 334. +num_arena_deaths: 0. +num_vsnodes_births: 2. +num_vsnodes_deaths: 0. +num_space_committed: 349. +num_space_uncommitted: 0. +num_chunks_returned_to_freelist: 0. +num_chunks_taken_from_freelist: 687. +num_chunk_merges: 0. +num_chunk_splits: 435. +num_chunks_enlarged: 279. +num_inconsistent_stats: 0. + +CodeHeap 'non-profiled nmethods': size=120032Kb used=679Kb max_used=679Kb free=119352Kb + bounds [0x0000732d942c8000, 0x0000732d94538000, 0x0000732d9b800000] +CodeHeap 'profiled nmethods': size=120028Kb used=2651Kb max_used=2651Kb free=117376Kb + bounds [0x0000732d8c800000, 0x0000732d8caa0000, 0x0000732d93d37000] +CodeHeap 'non-nmethods': size=5700Kb used=2459Kb max_used=2482Kb free=3240Kb + bounds [0x0000732d93d37000, 0x0000732d93fb7000, 0x0000732d942c8000] +CodeCache: size=245760Kb, used=5789Kb, max_used=5812Kb, free=239968Kb + total_blobs=3566, nmethods=2132, adapters=1341, full_count=0 +Compilation: enabled, stopped_count=0, restarted_count=0 + +Compilation events (20 events): +Event: 7.160 Thread 0x0000732da41405c0 2273 3 java.util.regex.Pattern::newCharProperty (39 bytes) +Event: 7.160 Thread 0x0000732da41405c0 nmethod 2273 0x0000732d8ca93e88 code [0x0000732d8ca94020, 0x0000732d8ca948c0] +Event: 7.160 Thread 0x0000732da41405c0 2268 3 java.util.regex.Pattern::nextEscaped (19 bytes) +Event: 7.160 Thread 0x0000732da41405c0 nmethod 2268 0x0000732d8ca94908 code [0x0000732d8ca94a20, 0x0000732d8ca94b58] +Event: 7.160 Thread 0x0000732da41405c0 2269 3 java.util.ArrayList$SubList::toArray (79 bytes) +Event: 7.160 Thread 0x0000732da41405c0 nmethod 2269 0x0000732d8ca94c08 code [0x0000732d8ca94d80, 0x0000732d8ca953f0] +Event: 7.160 Thread 0x0000732da41405c0 2270 3 java.lang.invoke.Invokers$Holder::linkToTargetMethod (10 bytes) +Event: 7.161 Thread 0x0000732da41405c0 nmethod 2270 0x0000732d8ca95488 code [0x0000732d8ca955c0, 0x0000732d8ca959d0] +Event: 7.161 Thread 0x0000732da41405c0 2271 3 java.util.regex.Pattern::qtype (39 bytes) +Event: 7.161 Thread 0x0000732da41405c0 nmethod 2271 0x0000732d8ca95a08 code [0x0000732d8ca95b60, 0x0000732d8ca95dc8] +Event: 7.161 Thread 0x0000732da41405c0 2266 3 javax.imageio.ImageReader::processImageUpdate (73 bytes) +Event: 7.161 Thread 0x0000732da41405c0 nmethod 2266 0x0000732d8ca95e08 code [0x0000732d8ca95f80, 0x0000732d8ca964f0] +Event: 7.161 Thread 0x0000732da41405c0 2276 3 java.lang.invoke.DirectMethodHandle::makeAllocator (132 bytes) +Event: 7.161 Thread 0x0000732da41405c0 nmethod 2276 0x0000732d8ca96508 code [0x0000732d8ca966a0, 0x0000732d8ca96b08] +Event: 7.163 Thread 0x0000732ce839beb0 nmethod 2256% 0x0000732d9436f808 code [0x0000732d9436f940, 0x0000732d943702c8] +Event: 7.163 Thread 0x0000732ce839beb0 2257 4 com.sun.imageio.plugins.png.PNGImageReader::paethPredictor (57 bytes) +Event: 7.164 Thread 0x0000732ce839beb0 nmethod 2257 0x0000732d94370308 code [0x0000732d94370400, 0x0000732d943704f8] +Event: 7.164 Thread 0x0000732ce839beb0 2275 4 java.lang.String::subSequence (7 bytes) +Event: 7.165 Thread 0x0000732da41405c0 2277 3 java.io.BufferedWriter::min (9 bytes) +Event: 7.166 Thread 0x0000732da41405c0 nmethod 2277 0x0000732d8ca96b88 code [0x0000732d8ca96ca0, 0x0000732d8ca96e00] + +GC Heap History (8 events): +Event: 6.261 GC heap before +{Heap before GC invocations=0 (full 0): + garbage-first heap total reserved 8192000K, committed 516096K, used 21627K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 6 young (24576K), 0 survivors (0K) + Metaspace used 16388K, committed 16640K, reserved 1114112K + class space used 1822K, committed 1920K, reserved 1048576K +} +Event: 6.272 GC heap after +{Heap after GC invocations=1 (full 1): + garbage-first heap total reserved 8192000K, committed 98304K, used 6293K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16388K, committed 16640K, reserved 1114112K + class space used 1822K, committed 1920K, reserved 1048576K +} +Event: 6.272 GC heap before +{Heap before GC invocations=1 (full 1): + garbage-first heap total reserved 8192000K, committed 98304K, used 6293K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16388K, committed 16640K, reserved 1114112K + class space used 1822K, committed 1920K, reserved 1048576K +} +Event: 6.284 GC heap after +{Heap after GC invocations=2 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 6293K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16388K, committed 16640K, reserved 1114112K + class space used 1822K, committed 1920K, reserved 1048576K +} +Event: 6.789 GC heap before +{Heap before GC invocations=2 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 14485K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 2 young (8192K), 0 survivors (0K) + Metaspace used 18736K, committed 19008K, reserved 1114112K + class space used 2041K, committed 2176K, reserved 1048576K +} +Event: 6.790 GC heap after +{Heap after GC invocations=3 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 7454K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 1 young (4096K), 1 survivors (4096K) + Metaspace used 18736K, committed 19008K, reserved 1114112K + class space used 2041K, committed 2176K, reserved 1048576K +} +Event: 6.861 GC heap before +{Heap before GC invocations=3 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 7454K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 2 young (8192K), 1 survivors (4096K) + Metaspace used 20171K, committed 20480K, reserved 1114112K + class space used 2173K, committed 2304K, reserved 1048576K +} +Event: 6.862 GC heap after +{Heap after GC invocations=4 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 7697K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 1 young (4096K), 1 survivors (4096K) + Metaspace used 20171K, committed 20480K, reserved 1114112K + class space used 2173K, committed 2304K, reserved 1048576K +} + +Dll operation events (12 events): +Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +Event: 0.028 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +Event: 0.030 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +Event: 0.077 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +Event: 0.128 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +Event: 0.134 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +Event: 0.231 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +Event: 0.233 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +Event: 0.259 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +Event: 0.327 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so + +Deoptimization events (20 events): +Event: 6.494 Thread 0x0000732da452cc50 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000732d94355db0 relative=0x0000000000000110 +Event: 6.494 Thread 0x0000732da452cc50 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000732d94355db0 method=jdk.internal.misc.Unsafe.allocateUninitializedArray(Ljava/lang/Class;I)Ljava/lang/Object; @ 51 c2 +Event: 6.494 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d94355db0 sp=0x0000732d78caf430 +Event: 6.494 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8abf9 sp=0x0000732d78caf3c8 mode 2 +Event: 6.507 Thread 0x0000732da452cc50 Uncommon trap: trap_request=0xffffff45 fr.pc=0x0000732d9434d8e4 relative=0x0000000000000ee4 +Event: 6.507 Thread 0x0000732da452cc50 Uncommon trap: reason=unstable_if action=reinterpret pc=0x0000732d9434d8e4 method=java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; @ 401 c2 +Event: 6.507 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d9434d8e4 sp=0x0000732d78cb0300 +Event: 6.507 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8abf9 sp=0x0000732d78cb0280 mode 2 +Event: 6.765 Thread 0x0000732da452cc50 Uncommon trap: trap_request=0xffffff76 fr.pc=0x0000732d9434e568 relative=0x00000000000001a8 +Event: 6.765 Thread 0x0000732da452cc50 Uncommon trap: reason=predicate action=maybe_recompile pc=0x0000732d9434e568 method=java.util.regex.Pattern$BmpCharPropertyGreedy.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 12 c2 +Event: 6.765 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d9434e568 sp=0x0000732d78cb00e0 +Event: 6.765 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8abf9 sp=0x0000732d78cb00b8 mode 2 +Event: 6.839 Thread 0x0000732da452cc50 Uncommon trap: trap_request=0xffffff6e fr.pc=0x0000732d94362168 relative=0x0000000000000148 +Event: 6.839 Thread 0x0000732da452cc50 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x0000732d94362168 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 +Event: 6.839 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d94362168 sp=0x0000732d78cb00a0 +Event: 6.839 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8abf9 sp=0x0000732d78cb0050 mode 2 +Event: 7.028 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d8ca29a9f sp=0x0000732d78caf7c0 +Event: 7.028 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8b30f sp=0x0000732d78caec00 mode 0 +Event: 7.030 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d8c8b4bd4 sp=0x0000732d78caf790 +Event: 7.030 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8b30f sp=0x0000732d78caec48 mode 0 + +Classes loaded (20 events): +Event: 6.819 Loading class java/awt/image/PixelInterleavedSampleModel +Event: 6.819 Loading class java/awt/image/ComponentSampleModel +Event: 6.819 Loading class java/awt/image/ComponentSampleModel done +Event: 6.819 Loading class java/awt/image/PixelInterleavedSampleModel done +Event: 6.819 Loading class javax/imageio/ImageTypeSpecifier$Packed +Event: 6.819 Loading class javax/imageio/ImageTypeSpecifier$Packed done +Event: 6.820 Loading class java/awt/image/DataBufferByte +Event: 6.820 Loading class java/awt/image/DataBufferByte done +Event: 6.820 Loading class sun/awt/image/ByteInterleavedRaster +Event: 6.820 Loading class sun/awt/image/ByteComponentRaster +Event: 6.820 Loading class sun/awt/image/ByteComponentRaster done +Event: 6.820 Loading class sun/awt/image/ByteInterleavedRaster done +Event: 6.820 Loading class sun/awt/image/ShortComponentRaster +Event: 6.820 Loading class sun/awt/image/ShortComponentRaster done +Event: 6.904 Loading class java/util/function/LongFunction +Event: 6.904 Loading class java/util/function/LongFunction done +Event: 7.165 Loading class java/lang/Throwable$WrappedPrintStream +Event: 7.166 Loading class java/lang/Throwable$PrintStreamOrWriter +Event: 7.166 Loading class java/lang/Throwable$PrintStreamOrWriter done +Event: 7.166 Loading class java/lang/Throwable$WrappedPrintStream done + +Classes unloaded (0 events): +No events + +Classes redefined (0 events): +No events + +Internal exceptions (20 events): +Event: 0.618 Thread 0x0000732da46242b0 Exception (0x000000062a0b8978) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.229 Thread 0x0000732da46242b0 Exception (0x000000062a35ef78) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 6.256 Thread 0x0000732da46242b0 Exception (0x0000000629cc8990) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.300 Thread 0x0000732da402d0f0 Exception (0x000000060d99d498) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 6.311 Thread 0x0000732da402d0f0 Exception (0x000000060d9fc958) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.312 Thread 0x0000732da402d0f0 Exception (0x000000060da0aa68) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.494 Thread 0x0000732da452cc50 Exception (0x000000060d51fda0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] +Event: 6.765 Thread 0x0000732da452cc50 Exception (0x000000060d702e88) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.855 Thread 0x0000732da452cc50 Exception (0x000000060db93d20) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.860 Thread 0x0000732da452cc50 Exception (0x000000060dbbc810) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.901 Thread 0x0000732da452cc50 Exception (0x000000060d8c45d8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.901 Thread 0x0000732da452cc50 Exception (0x000000060d8c9f48) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.918 Thread 0x0000732da452cc50 Exception (0x000000060d981f48) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.919 Thread 0x0000732da452cc50 Exception (0x000000060d9947c0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.919 Thread 0x0000732da452cc50 Exception (0x000000060d9989b8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.919 Thread 0x0000732da452cc50 Exception (0x000000060d99c078) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.926 Thread 0x0000732da452cc50 Exception (0x000000060da002d8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.960 Thread 0x0000732da452cc50 Exception (0x000000060da50dd8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.966 Thread 0x0000732da452cc50 Exception (0x000000060da6b6a8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 6.984 Thread 0x0000732da452cc50 Exception (0x000000060daab778) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] + +VM Operations (20 events): +Event: 0.130 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.130 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.244 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.244 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.261 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.261 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.269 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.269 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.648 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.648 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 6.261 Executing VM operation: G1CollectFull (System.gc()) +Event: 6.272 Executing VM operation: G1CollectFull (System.gc()) done +Event: 6.272 Executing VM operation: G1CollectFull (System.gc()) +Event: 6.284 Executing VM operation: G1CollectFull (System.gc()) done +Event: 6.308 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 6.308 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 6.789 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) +Event: 6.790 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done +Event: 6.861 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) +Event: 6.862 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done + +Memory protections (20 events): +Event: 0.016 Protecting memory [0x0000732d7a600000,0x0000732d7a604000] with protection modes 0 +Event: 0.016 Protecting memory [0x0000732d7a500000,0x0000732d7a504000] with protection modes 0 +Event: 0.016 Protecting memory [0x0000732d7a400000,0x0000732d7a404000] with protection modes 0 +Event: 0.016 Protecting memory [0x0000732d7a300000,0x0000732d7a304000] with protection modes 0 +Event: 0.024 Protecting memory [0x0000732d7a200000,0x0000732d7a204000] with protection modes 0 +Event: 0.025 Protecting memory [0x0000732d7a100000,0x0000732d7a104000] with protection modes 0 +Event: 0.056 Protecting memory [0x0000732d7a000000,0x0000732d7a004000] with protection modes 0 +Event: 0.282 Protecting memory [0x0000732d790b2000,0x0000732d790b6000] with protection modes 0 +Event: 0.283 Protecting memory [0x0000732d78fb2000,0x0000732d78fb6000] with protection modes 0 +Event: 0.286 Protecting memory [0x0000732d78eb2000,0x0000732d78eb6000] with protection modes 0 +Event: 0.286 Protecting memory [0x0000732d78db2000,0x0000732d78db6000] with protection modes 0 +Event: 0.328 Protecting memory [0x0000732d78cb2000,0x0000732d78cb6000] with protection modes 0 +Event: 0.554 Protecting memory [0x0000732d7a000000,0x0000732d7a004000] with protection modes 0 +Event: 0.646 Protecting memory [0x0000732d78bb2000,0x0000732d78bb6000] with protection modes 0 +Event: 0.675 Protecting memory [0x0000732d789b2000,0x0000732d789b6000] with protection modes 0 +Event: 6.235 Protecting memory [0x0000732d7a000000,0x0000732d7a004000] with protection modes 0 +Event: 6.316 Protecting memory [0x0000732d78bb2000,0x0000732d78bb6000] with protection modes 0 +Event: 6.316 Protecting memory [0x0000732daa100000,0x0000732daa104000] with protection modes 0 +Event: 6.782 Protecting memory [0x0000732d7a000000,0x0000732d7a004000] with protection modes 0 +Event: 7.155 Protecting memory [0x0000732d0bf00000,0x0000732d0bf04000] with protection modes 0 + +Nmethod flushes (20 events): +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c882b88 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c88e488 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c88e988 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c88ff88 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c890588 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c8de808 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c8ded88 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c8e0688 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c8f1008 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c916b08 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c91cf88 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c939288 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c946288 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c946588 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c949088 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c984c08 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c984f88 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c9acf08 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c9ad208 +Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c9bd208 + +Events (20 events): +Event: 0.056 Thread 0x0000732da41405c0 Thread added: 0x0000732ce80a2a30 +Event: 0.282 Thread 0x0000732da402d0f0 Thread added: 0x0000732da461f430 +Event: 0.283 Thread 0x0000732da402d0f0 Thread added: 0x0000732da4620e10 +Event: 0.286 Thread 0x0000732da402d0f0 Thread added: 0x0000732da46231a0 +Event: 0.286 Thread 0x0000732da402d0f0 Thread added: 0x0000732da46242b0 +Event: 0.328 Thread 0x0000732da46242b0 Thread added: 0x0000732cbc043cf0 +Event: 0.548 Thread 0x0000732ce80a2a30 Thread exited: 0x0000732ce80a2a30 +Event: 0.554 Thread 0x0000732da46242b0 Thread added: 0x0000732cbc061540 +Event: 0.646 Thread 0x0000732da41405c0 Thread added: 0x0000732ce8301fc0 +Event: 0.675 Thread 0x0000732da46242b0 Thread added: 0x0000732cbc0bd030 +Event: 1.089 Thread 0x0000732ce8301fc0 Thread exited: 0x0000732ce8301fc0 +Event: 5.583 Thread 0x0000732cbc061540 Thread exited: 0x0000732cbc061540 +Event: 6.235 Thread 0x0000732da41405c0 Thread added: 0x0000732ce80862d0 +Event: 6.316 Thread 0x0000732da402d0f0 Thread added: 0x0000732da452cc50 +Event: 6.316 Thread 0x0000732da402d0f0 Thread exited: 0x0000732da402d0f0 +Event: 6.316 Thread 0x0000732da402d0f0 Thread added: 0x0000732da402d0f0 +Event: 6.457 Thread 0x0000732ce80862d0 Thread exited: 0x0000732ce80862d0 +Event: 6.782 Thread 0x0000732da452cc50 Thread added: 0x0000732c8057f230 +Event: 7.155 Thread 0x0000732da41405c0 Thread added: 0x0000732ce839beb0 +Event: 7.166 Thread 0x0000732da452cc50 Thread exited: 0x0000732da452cc50 + + +Dynamic libraries: +60c000000-60dc00000 rw-p 00000000 00:00 0 +60dc00000-800000000 ---p 00000000 00:00 0 +60f647cf9000-60f647cfa000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +60f647cfb000-60f647cfc000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +60f647cfc000-60f647cfd000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +60f655b23000-60f655b6c000 rw-p 00000000 00:00 0 [heap] +732c34000000-732c34075000 rw-p 00000000 00:00 0 +732c34075000-732c38000000 ---p 00000000 00:00 0 +732c38000000-732c38021000 rw-p 00000000 00:00 0 +732c38021000-732c3c000000 ---p 00000000 00:00 0 +732c40000000-732c40021000 rw-p 00000000 00:00 0 +732c40021000-732c44000000 ---p 00000000 00:00 0 +732c44000000-732c44021000 rw-p 00000000 00:00 0 +732c44021000-732c48000000 ---p 00000000 00:00 0 +732c4c000000-732c4c021000 rw-p 00000000 00:00 0 +732c4c021000-732c50000000 ---p 00000000 00:00 0 +732c50000000-732c50021000 rw-p 00000000 00:00 0 +732c50021000-732c54000000 ---p 00000000 00:00 0 +732c58000000-732c58021000 rw-p 00000000 00:00 0 +732c58021000-732c5c000000 ---p 00000000 00:00 0 +732c5c000000-732c5c021000 rw-p 00000000 00:00 0 +732c5c021000-732c60000000 ---p 00000000 00:00 0 +732c64000000-732c64021000 rw-p 00000000 00:00 0 +732c64021000-732c68000000 ---p 00000000 00:00 0 +732c68000000-732c680c8000 rw-p 00000000 00:00 0 +732c680c8000-732c6c000000 ---p 00000000 00:00 0 +732c70000000-732c70021000 rw-p 00000000 00:00 0 +732c70021000-732c74000000 ---p 00000000 00:00 0 +732c75000000-732c7b712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +732c7b712000-732c7bf30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +732c7bf30000-732c7bf76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +732c7bf76000-732c7bff2000 rw-p 00000000 00:00 0 +732c7c000000-732c7c021000 rw-p 00000000 00:00 0 +732c7c021000-732c80000000 ---p 00000000 00:00 0 +732c80000000-732c83148000 rw-p 00000000 00:00 0 +732c83148000-732c84000000 ---p 00000000 00:00 0 +732c88000000-732c88021000 rw-p 00000000 00:00 0 +732c88021000-732c8c000000 ---p 00000000 00:00 0 +732c8c000000-732c8c021000 rw-p 00000000 00:00 0 +732c8c021000-732c90000000 ---p 00000000 00:00 0 +732c94000000-732c94021000 rw-p 00000000 00:00 0 +732c94021000-732c98000000 ---p 00000000 00:00 0 +732c98000000-732c98021000 rw-p 00000000 00:00 0 +732c98021000-732c9c000000 ---p 00000000 00:00 0 +732ca0000000-732ca0021000 rw-p 00000000 00:00 0 +732ca0021000-732ca4000000 ---p 00000000 00:00 0 +732ca4000000-732ca4021000 rw-p 00000000 00:00 0 +732ca4021000-732ca8000000 ---p 00000000 00:00 0 +732cac000000-732cac021000 rw-p 00000000 00:00 0 +732cac021000-732cb0000000 ---p 00000000 00:00 0 +732cb0000000-732cb00c1000 rw-p 00000000 00:00 0 +732cb00c1000-732cb4000000 ---p 00000000 00:00 0 +732cb8000000-732cb8021000 rw-p 00000000 00:00 0 +732cb8021000-732cbc000000 ---p 00000000 00:00 0 +732cbc000000-732cbc171000 rw-p 00000000 00:00 0 +732cbc171000-732cc0000000 ---p 00000000 00:00 0 +732cc4000000-732cc4021000 rw-p 00000000 00:00 0 +732cc4021000-732cc8000000 ---p 00000000 00:00 0 +732cc8000000-732cc8021000 rw-p 00000000 00:00 0 +732cc8021000-732ccc000000 ---p 00000000 00:00 0 +732cd0000000-732cd0021000 rw-p 00000000 00:00 0 +732cd0021000-732cd4000000 ---p 00000000 00:00 0 +732cd4000000-732cd437e000 rw-p 00000000 00:00 0 +732cd437e000-732cd8000000 ---p 00000000 00:00 0 +732cdc000000-732cdc021000 rw-p 00000000 00:00 0 +732cdc021000-732ce0000000 ---p 00000000 00:00 0 +732ce0000000-732ce0021000 rw-p 00000000 00:00 0 +732ce0021000-732ce4000000 ---p 00000000 00:00 0 +732ce6400000-732ce6525000 r--p 00000000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +732ce6525000-732ce69e5000 r-xp 00125000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +732ce69e5000-732ce6b19000 r--p 005e5000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +732ce6b19000-732ce6b1a000 ---p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +732ce6b1a000-732ce6b7d000 r--p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +732ce6b7d000-732ce6b87000 rw-p 0077c000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +732ce6b87000-732ce6b98000 rw-p 00000000 00:00 0 +732ce6c00000-732ce6c01000 ---p 00000000 00:00 0 +732ce6c01000-732ce7401000 rw-p 00000000 00:00 0 +732ce7600000-732ce7601000 ---p 00000000 00:00 0 +732ce7601000-732ce7e01000 rw-p 00000000 00:00 0 +732ce8000000-732ce83a5000 rw-p 00000000 00:00 0 +732ce83a5000-732cec000000 ---p 00000000 00:00 0 +732cec000000-732cec686000 rw-p 00000000 00:00 0 +732cec686000-732cf0000000 ---p 00000000 00:00 0 +732cf0200000-732cf0201000 ---p 00000000 00:00 0 +732cf0201000-732cf0a01000 rw-p 00000000 00:00 0 +732cf0c00000-732cf0c01000 ---p 00000000 00:00 0 +732cf0c01000-732cf1401000 rw-p 00000000 00:00 0 +732cf1600000-732cf1601000 ---p 00000000 00:00 0 +732cf1601000-732cf1e01000 rw-p 00000000 00:00 0 +732cf2000000-732cf2cf5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +732cf2cf5000-732cf36d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +732cf36d8000-732cf3ae9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +732cf3ae9000-732cf3f6b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +732cf3f6b000-732cf3f73000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +732cf3f73000-732cf3f7e000 rw-p 00000000 00:00 0 +732cf4000000-732cf4021000 rw-p 00000000 00:00 0 +732cf4021000-732cf8000000 ---p 00000000 00:00 0 +732cf8000000-732cf8021000 rw-p 00000000 00:00 0 +732cf8021000-732cfc000000 ---p 00000000 00:00 0 +732cfc400000-732cfc401000 ---p 00000000 00:00 0 +732cfc401000-732cfcc01000 rw-p 00000000 00:00 0 +732cfce00000-732cfce2f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +732cfce2f000-732cfd502000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +732cfd502000-732cfd624000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +732cfd624000-732cfd635000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +732cfd635000-732cfd6b3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +732cfd6b3000-732cfd6c7000 rw-p 00000000 00:00 0 +732cfd800000-732cfd801000 ---p 00000000 00:00 0 +732cfd801000-732cfe001000 rw-p 00000000 00:00 0 +732cfe200000-732cfe201000 ---p 00000000 00:00 0 +732cfe201000-732cfea01000 rw-p 00000000 00:00 0 +732cfec00000-732cfec01000 ---p 00000000 00:00 0 +732cfec01000-732cff401000 rw-p 00000000 00:00 0 +732cff600000-732cff601000 ---p 00000000 00:00 0 +732cff601000-732cffe01000 rw-p 00000000 00:00 0 +732d00000000-732d00021000 rw-p 00000000 00:00 0 +732d00021000-732d04000000 ---p 00000000 00:00 0 +732d04000000-732d04021000 rw-p 00000000 00:00 0 +732d04021000-732d08000000 ---p 00000000 00:00 0 +732d08400000-732d08422000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +732d08422000-732d08621000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +732d08621000-732d08629000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +732d08629000-732d0862a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +732d0862a000-732d0862b000 rw-p 00000000 00:00 0 +732d08800000-732d08a00000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d08a00000-732d08a01000 ---p 00000000 00:00 0 +732d08a01000-732d09201000 rw-p 00000000 00:00 0 +732d09400000-732d09401000 ---p 00000000 00:00 0 +732d09401000-732d09c01000 rw-p 00000000 00:00 0 +732d09e00000-732d09e16000 r--p 00000000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +732d09e16000-732d09f06000 r-xp 00016000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +732d09f06000-732d09f79000 r--p 00106000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +732d09f79000-732d09f80000 r--p 00178000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +732d09f80000-732d09f87000 rw-p 0017f000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +732d09f87000-732d0a002000 rw-p 00000000 00:00 0 +732d0a200000-732d0a201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +732d0a201000-732d0a202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +732d0a202000-732d0be1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +732d0be1c000-732d0be1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +732d0be1d000-732d0be1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +732d0bf00000-732d0bf04000 ---p 00000000 00:00 0 +732d0bf04000-732d0c000000 rw-p 00000000 00:00 0 +732d0c000000-732d0c021000 rw-p 00000000 00:00 0 +732d0c021000-732d10000000 ---p 00000000 00:00 0 +732d10000000-732d10637000 rw-p 00000000 00:00 0 +732d10637000-732d14000000 ---p 00000000 00:00 0 +732d14040000-732d140c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d140c0000-732d141c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d141c0000-732d14200000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d14200000-732d14400000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d14400000-732d1448d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +732d1448d000-732d14bf5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +732d14bf5000-732d15482000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +732d15482000-732d154c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +732d154c4000-732d154c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +732d154c7000-732d154cd000 rw-p 00000000 00:00 0 +732d154e0000-732d15500000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d15500000-732d15600000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d15600000-732d157c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +732d157c4000-732d174c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +732d174c4000-732d17b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +732d17b39000-732d17b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +732d17b3a000-732d17d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +732d17d1a000-732d17d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +732d17d93000-732d17e08000 rw-p 00000000 00:00 0 +732d17e1f000-732d17e20000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d17e20000-732d17e60000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d17e60000-732d17e80000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d17e80000-732d17f00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d17f00000-732d18000000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d18000000-732d183f0000 rw-p 00000000 00:00 0 +732d183f0000-732d185b0000 rw-p 00000000 00:00 0 +732d185b0000-732d186f0000 rw-p 00000000 00:00 0 +732d186f0000-732d18710000 rw-p 00000000 00:00 0 +732d18710000-732d18730000 rw-p 00000000 00:00 0 +732d18730000-732d18770000 rw-p 00000000 00:00 0 +732d18770000-732d189f0000 rw-p 00000000 00:00 0 +732d189f0000-732d18a10000 rw-p 00000000 00:00 0 +732d18a10000-732d18a30000 rw-p 00000000 00:00 0 +732d18a30000-732d18a70000 rw-p 00000000 00:00 0 +732d18a70000-732d18af0000 rw-p 00000000 00:00 0 +732d18af0000-732d18cf0000 rw-p 00000000 00:00 0 +732d18cf0000-732d18d10000 rw-p 00000000 00:00 0 +732d18d10000-732d18d30000 rw-p 00000000 00:00 0 +732d18d30000-732d18d70000 rw-p 00000000 00:00 0 +732d18d70000-732d18ef0000 rw-p 00000000 00:00 0 +732d18ef0000-732d18ff0000 rw-p 00000000 00:00 0 +732d18ff0000-732d190f0000 rw-p 00000000 00:00 0 +732d190f0000-732d19160000 rw-p 00000000 00:00 0 +732d19160000-732d19200000 ---p 00000000 00:00 0 +732d19200000-732d19410000 rw-p 00000000 00:00 0 +732d19410000-732d1c000000 ---p 00000000 00:00 0 +732d1c000000-732d1c021000 rw-p 00000000 00:00 0 +732d1c021000-732d20000000 ---p 00000000 00:00 0 +732d20000000-732d20004000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d20004000-732d20017000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d20017000-732d20018000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d20018000-732d2001a000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d2001a000-732d2001b000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d2001b000-732d2005b000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d2005b000-732d2007b000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d2007b000-732d200bb000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d200bb000-732d201bb000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d201bb000-732d20400000 rw-s 00000000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) +732d20400000-732d2045b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +732d2045b000-732d207d9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +732d207d9000-732d20bd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +732d20bd5000-732d20c10000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +732d20c10000-732d20c15000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +732d20c15000-732d20c40000 rw-p 00000000 00:00 0 +732d20c40000-732d20c60000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d20c60000-732d20ca0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d20ca0000-732d20cc0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d20cc0000-732d20d00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d20d00000-732d20e00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d20e00000-732d20e6e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +732d20e6e000-732d213d5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +732d213d5000-732d21ae8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +732d21ae8000-732d21ae9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +732d21ae9000-732d21b26000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +732d21b26000-732d21b29000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +732d21b29000-732d21b2b000 rw-p 00000000 00:00 0 +732d21b2b000-732d21b2c000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d21b2c000-732d21b2d000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d21b2d000-732d21b40000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21b40000-732d21b60000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21b60000-732d21ba0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21ba0000-732d21bc0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21bc0000-732d21c00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21c00000-732d21c9a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +732d21c9a000-732d21dab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +732d21dab000-732d21e1a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +732d21e1a000-732d21e1b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +732d21e1b000-732d21e26000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +732d21e26000-732d21e29000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +732d21e29000-732d21e2c000 rw-p 00000000 00:00 0 +732d21e2c000-732d21e2d000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21e2d000-732d21e40000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21e40000-732d21e60000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21e60000-732d21ee0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21ee0000-732d21f60000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21f60000-732d21fa0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21fa0000-732d21fc0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d21fc0000-732d22000000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d22000000-732d22d91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa +732d22d91000-732d23000000 ---p 00000000 00:00 0 +732d23000000-732d23030000 rw-p 00000000 00:00 0 +732d23030000-732d23090000 rw-p 00000000 00:00 0 +732d23090000-732d230b0000 rw-p 00000000 00:00 0 +732d230b0000-732d23130000 rw-p 00000000 00:00 0 +732d23130000-732d23150000 rw-p 00000000 00:00 0 +732d23150000-732d231b0000 rw-p 00000000 00:00 0 +732d231b0000-732d231d0000 rw-p 00000000 00:00 0 +732d231d0000-732d23230000 rw-p 00000000 00:00 0 +732d23230000-732d23250000 rw-p 00000000 00:00 0 +732d23250000-732d23280000 ---p 00000000 00:00 0 +732d23280000-732d23290000 rw-p 00000000 00:00 0 +732d23290000-732d63000000 ---p 00000000 00:00 0 +732d63000000-732d63001000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d63001000-732d63014000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d63014000-732d63034000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d63034000-732d63074000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d63074000-732d631b5000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index +732d631b5000-732d631c6000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +732d631c6000-732d63208000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +732d63208000-732d63220000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +732d63220000-732d6322e000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +732d6322e000-732d63230000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +732d63230000-732d63234000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +732d63234000-732d63250000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +732d63250000-732d63256000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +732d63256000-732d63257000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +732d63257000-732d63259000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +732d63259000-732d6325a000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +732d6325a000-732d63264000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +732d63264000-732d6326e000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +732d6326e000-732d63275000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +732d63275000-732d6327e000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +732d6327e000-732d6327f000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +732d6327f000-732d6328b000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +732d6328b000-732d632ab000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +732d632ab000-732d632b7000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +732d632b7000-732d632c1000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +732d632c1000-732d632c2000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +732d632c2000-732d632d1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +732d632d1000-732d633b7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +732d633b7000-732d633f5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +732d633f5000-732d633f6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +732d633f6000-732d633f9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +732d633f9000-732d633ff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +732d633ff000-732d63400000 rw-p 00000000 00:00 0 +732d63400000-732d63493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +732d63493000-732d638e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +732d638e6000-732d63dfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +732d63dfc000-732d63e34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +732d63e34000-732d63e44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +732d63e44000-732d63e49000 rw-p 00000000 00:00 0 +732d63e49000-732d63e4a000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d63e4a000-732d63e4b000 rw-s 00044000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) +732d63e4b000-732d63e4c000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d63e4c000-732d63e50000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d63e50000-732d63e51000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d63e51000-732d63e53000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d63e53000-732d63e54000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d63e54000-732d63e55000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d63e55000-732d63e59000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d63e59000-732d63e5b000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d63e5b000-732d63e5d000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +732d63e5d000-732d63ec8000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +732d63ec8000-732d63ef0000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +732d63ef0000-732d63ef1000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +732d63ef1000-732d63ef2000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +732d63ef2000-732d63ef8000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +732d63ef8000-732d63f12000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +732d63f12000-732d63f19000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +732d63f19000-732d63f1a000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +732d63f1a000-732d63f1b000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +732d63f1b000-732d63f1c000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +732d63f1c000-732d63f1e000 rw-p 00000000 00:00 0 +732d63f1e000-732d63f51000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +732d63f51000-732d63fb4000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +732d63fb4000-732d63fd3000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +732d63fd3000-732d63ffe000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +732d63ffe000-732d63fff000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +732d63fff000-732d64000000 rw-p 00000000 00:00 0 +732d64000000-732d64021000 rw-p 00000000 00:00 0 +732d64021000-732d68000000 ---p 00000000 00:00 0 +732d68000000-732d68021000 rw-p 00000000 00:00 0 +732d68021000-732d6c000000 ---p 00000000 00:00 0 +732d6c000000-732d6c020000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d6c020000-732d6c033000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +732d6c033000-732d6c052000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +732d6c052000-732d6c05f000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +732d6c05f000-732d6c06f000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +732d6c06f000-732d6c070000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +732d6c070000-732d6c07b000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +732d6c07b000-732d6c0a9000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +732d6c0a9000-732d6c0bb000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +732d6c0bb000-732d6c0bc000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +732d6c0bc000-732d6c0bd000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +732d6c0bd000-732d6c0be000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +732d6c0be000-732d6c0ed000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +732d6c0ed000-732d6c1a9000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +732d6c1a9000-732d6c1f4000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +732d6c1f4000-732d6c202000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +732d6c202000-732d6c204000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +732d6c204000-732d6c205000 rw-p 00000000 00:00 0 +732d6c205000-732d6c26b000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +732d6c26b000-732d6c35e000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +732d6c35e000-732d6c3ea000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +732d6c3ea000-732d6c3fd000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +732d6c3fd000-732d6c3fe000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +732d6c3fe000-732d6cd22000 rw-p 00000000 00:00 0 +732d6cd22000-732d6cd26000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d6cd26000-732d6cd39000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d6cd39000-732d6cd4c000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +732d6cd4c000-732d6cdcb000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +732d6cdcb000-732d6cdf6000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +732d6cdf6000-732d6cdf7000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +732d6cdf7000-732d6cdfe000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +732d6cdfe000-732d6cdff000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +732d6cdff000-732d6ce00000 rw-p 00000000 00:00 0 +732d6ce00000-732d6d041000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +732d6d041000-732d6d062000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +732d6d062000-732d6d200000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +732d6d200000-732d6de00000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +732d6de00000-732d6ecab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +732d6ecab000-732d6ee10000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +732d6ee10000-732d6ee7e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +732d6ee7e000-732d6ee9c000 rw-p 00000000 00:00 0 +732d6ee9c000-732d6eea0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d6eea0000-732d6eea4000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +732d6eea4000-732d6eeb4000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +732d6eeb4000-732d6eeb7000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +732d6eeb7000-732d6eeb8000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +732d6eeb8000-732d6eeb9000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +732d6eeb9000-732d6eebd000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +732d6eebd000-732d6eed3000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +732d6eed3000-732d6eedd000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +732d6eedd000-732d6eede000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +732d6eede000-732d6eedf000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +732d6eedf000-732d6eee1000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +732d6eee1000-732d6eefa000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +732d6eefa000-732d6eefc000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +732d6eefc000-732d6eefd000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +732d6eefd000-732d6eefe000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +732d6eefe000-732d6eeff000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +732d6eeff000-732d6ef00000 ---p 00000000 00:00 0 +732d6ef00000-732d6f000000 rw-p 00000000 00:00 0 +732d6f000000-732d6f001000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d6f001000-732d6f002000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d6f002000-732d6f004000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +732d6f004000-732d6f00d000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +732d6f00d000-732d6f010000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +732d6f010000-732d6f011000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +732d6f011000-732d6f012000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +732d6f012000-732d6f013000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +732d6f013000-732d6f015000 rw-p 00000000 00:00 0 +732d6f015000-732d6f01e000 rw-s 00000000 00:01 670431 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +732d6f01e000-732d6f04d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +732d6f04d000-732d6f1a0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +732d6f1a0000-732d6f1f4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +732d6f1f4000-732d6f1f5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +732d6f1f5000-732d6f1fe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +732d6f1fe000-732d6f1ff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +732d6f1ff000-732d6f200000 rw-p 00000000 00:00 0 +732d6f200000-732d6f201000 ---p 00000000 00:00 0 +732d6f201000-732d6fa01000 rw-p 00000000 00:00 0 +732d6fa01000-732d6fa02000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d6fa02000-732d6fa0b000 rw-s 00000000 00:01 670430 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +732d6fa0b000-732d6fa0d000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +732d6fa0d000-732d6fa11000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +732d6fa11000-732d6fa13000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +732d6fa13000-732d6fa14000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +732d6fa14000-732d6fa15000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +732d6fa15000-732d6fa17000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +732d6fa17000-732d6fa1f000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +732d6fa1f000-732d6fa21000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +732d6fa21000-732d6fa22000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +732d6fa22000-732d6fa23000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +732d6fa23000-732d6fa25000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +732d6fa25000-732d6fa2d000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +732d6fa2d000-732d6fa2e000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +732d6fa2e000-732d6fa2f000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +732d6fa2f000-732d6fa30000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +732d6fa30000-732d6fa31000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +732d6fa31000-732d6fa35000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +732d6fa35000-732d6fa4a000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +732d6fa4a000-732d6fa50000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +732d6fa50000-732d6fa51000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +732d6fa51000-732d6fa53000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +732d6fa53000-732d6fa54000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +732d6fa54000-732d6fa57000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +732d6fa57000-732d6fa78000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +732d6fa78000-732d6fa84000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +732d6fa84000-732d6fa85000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +732d6fa85000-732d6fa86000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +732d6fa86000-732d6fa87000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +732d6fa87000-732d6fa95000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +732d6fa95000-732d6faa6000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +732d6faa6000-732d6fab4000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +732d6fab4000-732d6fab8000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +732d6fab8000-732d6fab9000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +732d6fab9000-732d6fac1000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +732d6fac1000-732d6fadf000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +732d6fadf000-732d6faec000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +732d6faec000-732d6faee000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +732d6faee000-732d6faef000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +732d6faef000-732d6faf3000 rw-p 00000000 00:00 0 +732d6faf3000-732d6faf5000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +732d6faf5000-732d6fafc000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +732d6fafc000-732d6fafd000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +732d6fafd000-732d6fafe000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +732d6fafe000-732d6faff000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +732d6faff000-732d6fb00000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +732d6fb00000-732d6fb04000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +732d6fb04000-732d6fb23000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +732d6fb23000-732d6fb2d000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +732d6fb2d000-732d6fb2e000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +732d6fb2e000-732d6fb30000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +732d6fb30000-732d6fb31000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +732d6fb31000-732d6fb3b000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +732d6fb3b000-732d6fbed000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +732d6fbed000-732d6fbfe000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +732d6fbfe000-732d6fbff000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +732d6fbff000-732d6fc00000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +732d6fc00000-732d70021000 rw-p 00000000 00:00 0 +732d70021000-732d74000000 ---p 00000000 00:00 0 +732d74000000-732d74021000 rw-p 00000000 00:00 0 +732d74021000-732d78000000 ---p 00000000 00:00 0 +732d78000000-732d78001000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d78001000-732d78003000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d78003000-732d78007000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d78007000-732d7800a000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +732d7800a000-732d78021000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +732d78021000-732d78025000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +732d78025000-732d78026000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +732d78026000-732d78027000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +732d78027000-732d7802c000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +732d7802c000-732d78037000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +732d78037000-732d7803b000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +732d7803b000-732d7803c000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +732d7803c000-732d7803d000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +732d7803d000-732d7803e000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +732d7803e000-732d7803f000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +732d7803f000-732d78040000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +732d78040000-732d78041000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +732d78041000-732d78042000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +732d78042000-732d78043000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +732d78043000-732d78044000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +732d78044000-732d78045000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +732d78045000-732d78046000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +732d78046000-732d78047000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +732d78047000-732d78048000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +732d78048000-732d7804b000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +732d7804b000-732d7804e000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +732d7804e000-732d7804f000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +732d7804f000-732d78050000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +732d78050000-732d78051000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +732d78051000-732d78052000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +732d78052000-732d78055000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +732d78055000-732d78058000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +732d78058000-732d78059000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +732d78059000-732d7805a000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +732d7805a000-732d7805b000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +732d7805b000-732d7805c000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +732d7805c000-732d78061000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +732d78061000-732d78067000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +732d78067000-732d7806a000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +732d7806a000-732d7806c000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +732d7806c000-732d7806d000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +732d7806d000-732d78070000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +732d78070000-732d78084000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +732d78084000-732d78088000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +732d78088000-732d78089000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +732d78089000-732d7808a000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +732d7808a000-732d7808b000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +732d7808b000-732d7808e000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +732d7808e000-732d78094000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +732d78094000-732d78096000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +732d78096000-732d78097000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +732d78097000-732d78098000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +732d78098000-732d780a3000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +732d780a3000-732d780ac000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +732d780ac000-732d780b1000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +732d780b1000-732d780b2000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +732d780b2000-732d780b4000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +732d780b4000-732d780b5000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +732d780b5000-732d780c5000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +732d780c5000-732d78123000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +732d78123000-732d7813f000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +732d7813f000-732d78140000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +732d78140000-732d78146000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +732d78146000-732d78147000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +732d78147000-732d7814f000 rw-p 00000000 00:00 0 +732d7814f000-732d781a0000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +732d781a0000-732d781fc000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +732d781fc000-732d78231000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +732d78231000-732d78232000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +732d78232000-732d78252000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +732d78252000-732d78272000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +732d78272000-732d78277000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +732d78277000-732d78279000 rw-p 00000000 00:00 0 +732d78279000-732d7827f000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +732d7827f000-732d782c9000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +732d782c9000-732d782f3000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +732d782f3000-732d782f4000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +732d782f4000-732d782f5000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +732d782f5000-732d782fc000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache +732d782fc000-732d782fd000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +732d782fd000-732d78300000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +732d78300000-732d78301000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +732d78301000-732d78302000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +732d78302000-732d78303000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +732d78303000-732d78304000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +732d78304000-732d78307000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +732d78307000-732d7830b000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +732d7830b000-732d7830d000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +732d7830d000-732d7830e000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +732d7830e000-732d7830f000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +732d7830f000-732d78310000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +732d78310000-732d78312000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +732d78312000-732d78313000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +732d78313000-732d78314000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +732d78314000-732d78315000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +732d78315000-732d78325000 r--p 00000000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +732d78325000-732d78346000 r-xp 00010000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +732d78346000-732d78382000 r--p 00031000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +732d78382000-732d78386000 r--p 0006c000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +732d78386000-732d78389000 rw-p 00070000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +732d78389000-732d783ac000 rw-p 00000000 00:00 0 +732d783ac000-732d783ad000 ---p 00000000 00:00 0 +732d783ad000-732d784ad000 rw-p 00000000 00:00 0 +732d784ad000-732d784ae000 ---p 00000000 00:00 0 +732d784ae000-732d785ae000 rw-p 00000000 00:00 0 +732d785ae000-732d785af000 ---p 00000000 00:00 0 +732d785af000-732d786af000 rw-p 00000000 00:00 0 +732d786af000-732d786b0000 ---p 00000000 00:00 0 +732d786b0000-732d787b0000 rw-p 00000000 00:00 0 +732d787b0000-732d787b1000 ---p 00000000 00:00 0 +732d787b1000-732d788b1000 rw-p 00000000 00:00 0 +732d788b1000-732d788b2000 ---p 00000000 00:00 0 +732d788b2000-732d789b2000 rw-p 00000000 00:00 0 +732d789b2000-732d789b6000 ---p 00000000 00:00 0 +732d789b6000-732d78ab2000 rw-p 00000000 00:00 0 +732d78ab2000-732d78bb2000 rw-s 00000000 00:01 983077 /SYSV00000000 (deleted) +732d78bb2000-732d78bb6000 ---p 00000000 00:00 0 +732d78bb6000-732d78cb2000 rw-p 00000000 00:00 0 +732d78cb2000-732d78cb6000 ---p 00000000 00:00 0 +732d78cb6000-732d78db2000 rw-p 00000000 00:00 0 +732d78db2000-732d78db6000 ---p 00000000 00:00 0 +732d78db6000-732d78eb2000 rw-p 00000000 00:00 0 +732d78eb2000-732d78eb6000 ---p 00000000 00:00 0 +732d78eb6000-732d78fb2000 rw-p 00000000 00:00 0 +732d78fb2000-732d78fb6000 ---p 00000000 00:00 0 +732d78fb6000-732d790b2000 rw-p 00000000 00:00 0 +732d790b2000-732d790b6000 ---p 00000000 00:00 0 +732d790b6000-732d791b2000 rw-p 00000000 00:00 0 +732d791b2000-732d791bf000 r--p 00000000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +732d791bf000-732d79248000 r-xp 0000d000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +732d79248000-732d79271000 r--p 00096000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +732d79271000-732d79272000 ---p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +732d79272000-732d79279000 r--p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +732d79279000-732d7927a000 rw-p 000c6000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +732d7927a000-732d793fb000 r-xp 00000000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +732d793fb000-732d793fc000 ---p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +732d793fc000-732d793fe000 r--p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +732d793fe000-732d793ff000 rw-p 00183000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +732d793ff000-732d79400000 rw-p 00000000 00:00 0 +732d79400000-732d79c00000 rw-p 00000000 00:00 0 +732d79c00000-732d79c08000 r--p 00000000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +732d79c08000-732d79c60000 r-xp 00008000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +732d79c60000-732d79c71000 r--p 00060000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +732d79c71000-732d79c72000 ---p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +732d79c72000-732d79c78000 r--p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +732d79c78000-732d79c79000 rw-p 00077000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +732d79c79000-732d79e83000 rw-p 00000000 00:00 0 +732d79e83000-732d79e85000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +732d79e85000-732d79e87000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +732d79e87000-732d79e88000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +732d79e88000-732d79e89000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +732d79e89000-732d79e8a000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +732d79e8a000-732d79e91000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +732d79e91000-732d79e97000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +732d79e97000-732d79e9a000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +732d79e9a000-732d79e9b000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +732d79e9b000-732d79e9c000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +732d79e9c000-732d79e9d000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +732d79e9d000-732d79e9e000 r--p 00000000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +732d79e9e000-732d79e9f000 r-xp 00001000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +732d79e9f000-732d79ebe000 r--p 00002000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +732d79ebe000-732d79ebf000 r--p 00020000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +732d79ebf000-732d79ec0000 rw-p 00021000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +732d79ec0000-732d79ed9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +732d79ed9000-732d79f65000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +732d79f65000-732d79ffa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +732d79ffa000-732d79ffb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +732d79ffb000-732d79ffc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +732d79ffc000-732d7a000000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +732d7a000000-732d7a004000 ---p 00000000 00:00 0 +732d7a004000-732d7a100000 rw-p 00000000 00:00 0 +732d7a100000-732d7a104000 ---p 00000000 00:00 0 +732d7a104000-732d7a200000 rw-p 00000000 00:00 0 +732d7a200000-732d7a204000 ---p 00000000 00:00 0 +732d7a204000-732d7a300000 rw-p 00000000 00:00 0 +732d7a300000-732d7a304000 ---p 00000000 00:00 0 +732d7a304000-732d7a400000 rw-p 00000000 00:00 0 +732d7a400000-732d7a404000 ---p 00000000 00:00 0 +732d7a404000-732d7a500000 rw-p 00000000 00:00 0 +732d7a500000-732d7a504000 ---p 00000000 00:00 0 +732d7a504000-732d7a600000 rw-p 00000000 00:00 0 +732d7a600000-732d7a604000 ---p 00000000 00:00 0 +732d7a604000-732d7a700000 rw-p 00000000 00:00 0 +732d7a700000-732d7a704000 ---p 00000000 00:00 0 +732d7a704000-732d7a800000 rw-p 00000000 00:00 0 +732d7a800000-732d7a804000 ---p 00000000 00:00 0 +732d7a804000-732d7a900000 rw-p 00000000 00:00 0 +732d7a900000-732d7a904000 ---p 00000000 00:00 0 +732d7a904000-732d7aa00000 rw-p 00000000 00:00 0 +732d7aa00000-732d7b906000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive +732d7b906000-732d7b908000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +732d7b908000-732d7b90e000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +732d7b90e000-732d7b910000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +732d7b910000-732d7b911000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +732d7b911000-732d7b912000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +732d7b912000-732d7b913000 r--p 00000000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +732d7b913000-732d7b91b000 r-xp 00001000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +732d7b91b000-732d7b91e000 r--p 00009000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +732d7b91e000-732d7b91f000 r--p 0000b000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +732d7b91f000-732d7b920000 rw-p 0000c000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +732d7b920000-732d7b925000 r--p 00000000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +732d7b925000-732d7b94e000 r-xp 00005000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +732d7b94e000-732d7b959000 r--p 0002e000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +732d7b959000-732d7b95a000 r--p 00038000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +732d7b95a000-732d7b95b000 rw-p 00039000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +732d7b95b000-732d7b95d000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +732d7b95d000-732d7b964000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +732d7b964000-732d7b966000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +732d7b966000-732d7b967000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +732d7b967000-732d7b968000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +732d7b968000-732d7b96c000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +732d7b96c000-732d7b979000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +732d7b979000-732d7b97c000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +732d7b97c000-732d7b97d000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +732d7b97d000-732d7b97e000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +732d7b97e000-732d7b97f000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +732d7b97f000-732d7b980000 rw-p 00000000 00:00 0 +732d7b980000-732d7b9f0000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +732d7b9f0000-732d7b9f1000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +732d7b9f1000-732d7b9f6000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +732d7b9f6000-732d7b9f8000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +732d7b9f8000-732d7b9fa000 rw-p 00000000 00:00 0 +732d7b9fa000-732d7b9fb000 ---p 00000000 00:00 0 +732d7b9fb000-732d7bafb000 rw-p 00000000 00:00 0 +732d7bafb000-732d7bafc000 ---p 00000000 00:00 0 +732d7bafc000-732d7bbfc000 rw-p 00000000 00:00 0 +732d7bbfc000-732d7bbfd000 ---p 00000000 00:00 0 +732d7bbfd000-732d7bcfd000 rw-p 00000000 00:00 0 +732d7bcfd000-732d7bcfe000 ---p 00000000 00:00 0 +732d7bcfe000-732d7bdfe000 rw-p 00000000 00:00 0 +732d7bdfe000-732d7c000000 rw-p 00000000 00:00 0 +732d7c000000-732d7c021000 rw-p 00000000 00:00 0 +732d7c021000-732d80000000 ---p 00000000 00:00 0 +732d80000000-732d80001000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d80001000-732d80002000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d80002000-732d80003000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d80003000-732d80004000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +732d80004000-732d80006000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +732d80006000-732d80007000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +732d80007000-732d80008000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +732d80008000-732d80009000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +732d80009000-732d800ca000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +732d800ca000-732d800cb000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +732d800cb000-732d800d6000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +732d800d6000-732d82600000 rw-p 00000000 00:00 0 +732d82600000-732d82601000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d82601000-732d82603000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d82603000-732d8260e000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +732d8260e000-732d82622000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +732d82622000-732d8262b000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +732d8262b000-732d8262c000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +732d8262c000-732d8262d000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +732d8262d000-732d826fb000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +732d826fb000-732d826fc000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +732d826fc000-732d826fd000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +732d826fd000-732d827fe000 rw-p 00000000 00:00 0 +732d827fe000-732d827ff000 ---p 00000000 00:00 0 +732d827ff000-732d828ff000 rw-p 00000000 00:00 0 +732d828ff000-732d82900000 ---p 00000000 00:00 0 +732d82900000-732d82a00000 rw-p 00000000 00:00 0 +732d82a00000-732d82a70000 rw-p 00000000 00:00 0 +732d82a70000-732d8a700000 ---p 00000000 00:00 0 +732d8a700000-732d8a701000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d8a701000-732d8a702000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d8a702000-732d8a703000 rw-s 00000000 00:06 1022 /dev/nvidia0 +732d8a703000-732d8a72f000 r--p 00000000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +732d8a72f000-732d8a763000 r-xp 0002c000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +732d8a763000-732d8a77d000 r--p 00060000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +732d8a77d000-732d8a77e000 r--p 00079000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +732d8a77e000-732d8a77f000 rw-p 0007a000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +732d8a77f000-732d8a80e000 rw-p 00000000 00:00 0 +732d8a80e000-732d8b7a0000 ---p 00000000 00:00 0 +732d8b7a0000-732d8b7a1000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d8b7a1000-732d8b7a2000 rw-s 00000000 00:06 1017 /dev/nvidiactl +732d8b7a2000-732d8b7a3000 r--s 00000000 00:06 1017 /dev/nvidiactl +732d8b7a3000-732d8b7a5000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +732d8b7a5000-732d8b7a8000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +732d8b7a8000-732d8b7a9000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +732d8b7a9000-732d8b7aa000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +732d8b7aa000-732d8b7ab000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +732d8b7ab000-732d8b7ae000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +732d8b7ae000-732d8b7ba000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +732d8b7ba000-732d8b7bd000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +732d8b7bd000-732d8b7be000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +732d8b7be000-732d8b7bf000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +732d8b7bf000-732d8b7fd000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +732d8b7fd000-732d8b7fe000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +732d8b7fe000-732d8b7ff000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +732d8b7ff000-732d8b800000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +732d8b800000-732d8b80e000 rw-p 00000000 00:00 0 +732d8b80e000-732d8c7a0000 ---p 00000000 00:00 0 +732d8c7a0000-732d8c7a1000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +732d8c7a1000-732d8c7a2000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +732d8c7a2000-732d8c7a3000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +732d8c7a3000-732d8c7a4000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +732d8c7a4000-732d8c7a5000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +732d8c7a5000-732d8c800000 rw-p 00000000 00:00 0 +732d8c800000-732d8caa0000 rwxp 00000000 00:00 0 +732d8caa0000-732d93d37000 ---p 00000000 00:00 0 +732d93d37000-732d93fb7000 rwxp 00000000 00:00 0 +732d93fb7000-732d942c8000 ---p 00000000 00:00 0 +732d942c8000-732d94538000 rwxp 00000000 00:00 0 +732d94538000-732d9b800000 ---p 00000000 00:00 0 +732d9b800000-732da3fb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules +732da3fb5000-732da3fb6000 rw-s 00000000 00:01 1028 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +732da3fb6000-732da3fb7000 rw-s 00000000 00:01 670429 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) +732da3fb7000-732da3fb9000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +732da3fb9000-732da3fbb000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +732da3fbb000-732da3fbd000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +732da3fbd000-732da3fbe000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +732da3fbe000-732da3fbf000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +732da3fbf000-732da4000000 rw-p 00000000 00:00 0 +732da4000000-732da4628000 rw-p 00000000 00:00 0 +732da4628000-732da8000000 ---p 00000000 00:00 0 +732da8000000-732da8002000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +732da8002000-732da8009000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +732da8009000-732da800b000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +732da800b000-732da800c000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +732da800c000-732da800d000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +732da800d000-732da8011000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +732da8011000-732da801c000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +732da801c000-732da8020000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +732da8020000-732da8021000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +732da8021000-732da8022000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +732da8022000-732da8023000 ---p 00000000 00:00 0 +732da8023000-732da8123000 rw-p 00000000 00:00 0 +732da8123000-732da8a2f000 rw-p 00000000 00:00 0 +732da8a2f000-732da8b15000 ---p 00000000 00:00 0 +732da8b15000-732da8b1b000 rw-p 00000000 00:00 0 +732da8b1b000-732da8c00000 ---p 00000000 00:00 0 +732da8c00000-732da9f30000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +732da9f30000-732daa000000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +732daa000000-732daa02e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +732daa02e000-732daa0a4000 rw-p 00000000 00:00 0 +732daa0a4000-732daa0a5000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +732daa0a5000-732daa0a6000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +732daa0a6000-732daa0a7000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +732daa0a7000-732daa0a8000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +732daa0a8000-732daa0a9000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +732daa0a9000-732daa0aa000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +732daa0aa000-732daa0ac000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +732daa0ac000-732daa0ad000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +732daa0ad000-732daa0ae000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +732daa0ae000-732daa0af000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +732daa0af000-732daa0b0000 rw-s 00000000 00:01 670428 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +732daa0b0000-732daa0b1000 rw-s 00000000 00:01 669127 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +732daa0b1000-732daa0b2000 r-xp 00000000 00:00 0 +732daa0b2000-732daa0b3000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +732daa0b3000-732daa0b4000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +732daa0b4000-732daa0b5000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +732daa0b5000-732daa0b6000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +732daa0b6000-732daa0b7000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +732daa0b7000-732daa0b8000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +732daa0b8000-732daa0bb000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +732daa0bb000-732daa0bc000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +732daa0bc000-732daa0bd000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +732daa0bd000-732daa0be000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +732daa0be000-732daa0c0000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +732daa0c0000-732daa0c7000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +732daa0c7000-732daa0c9000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +732daa0c9000-732daa0ca000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +732daa0ca000-732daa0cb000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +732daa0cb000-732daa0cc000 r-xp 00000000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +732daa0cc000-732daa0cd000 ---p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +732daa0cd000-732daa0ce000 r--p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +732daa0ce000-732daa0cf000 rw-p 00002000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +732daa0cf000-732daa0da000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +732daa0da000-732daa0db000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +732daa0db000-732daa0dc000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +732daa0dc000-732daa0dd000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +732daa0dd000-732daa0fd000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +732daa0fd000-732daa0fe000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +732daa0fe000-732daa0ff000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +732daa0ff000-732daa100000 rw-p 00000000 00:00 0 +732daa100000-732daa104000 ---p 00000000 00:00 0 +732daa104000-732daa200000 rw-p 00000000 00:00 0 +732daa200000-732daa228000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +732daa228000-732daa3bd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +732daa3bd000-732daa415000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +732daa415000-732daa416000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +732daa416000-732daa41a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +732daa41a000-732daa41c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +732daa41c000-732daa429000 rw-p 00000000 00:00 0 +732daa429000-732daa42b000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +732daa42b000-732daa42e000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +732daa42e000-732daa42f000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +732daa42f000-732daa430000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +732daa430000-732daa431000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +732daa431000-732daa432000 rw-p 00000000 00:00 0 +732daa432000-732daa433000 r-xp 0005e000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +732daa433000-732daa434000 rw-p 00000000 00:00 0 +732daa434000-732daa447000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +732daa447000-732daa448000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +732daa448000-732daa449000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +732daa449000-732daa44a000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +732daa44a000-732daa468000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +732daa468000-732daa46a000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +732daa46a000-732daa46b000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +732daa46b000-732daa479000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +732daa479000-732daa4f5000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +732daa4f5000-732daa550000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +732daa550000-732daa551000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +732daa551000-732daa552000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +732daa552000-732daa553000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +732daa553000-732daa554000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +732daa554000-732daa555000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +732daa555000-732daa556000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +732daa556000-732daa557000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +732daa557000-732daa55b000 rw-p 00000000 00:00 0 +732daa55b000-732daa55c000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +732daa55c000-732daa55d000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +732daa55d000-732daa55e000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +732daa55e000-732daa55f000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +732daa55f000-732daa560000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +732daa560000-732daa561000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +732daa561000-732daa562000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +732daa562000-732daa563000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +732daa563000-732daa564000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +732daa564000-732daa565000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +732daa565000-732daa567000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +732daa567000-732daa578000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +732daa578000-732daa57e000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +732daa57e000-732daa57f000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +732daa57f000-732daa580000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +732daa580000-732daa581000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +732daa581000-732daa588000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +732daa588000-732daa589000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +732daa589000-732daa58a000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +732daa58a000-732daa58b000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +732daa58b000-732daa590000 rw-p 00000000 00:00 0 +732daa590000-732daa597000 ---p 00000000 00:00 0 +732daa597000-732daa59f000 rw-s 00000000 103:03 4325444 /tmp/hsperfdata_codex/84545 +732daa59f000-732daa5a0000 ---p 00000000 00:00 0 +732daa5a0000-732daa5a1000 r--p 00000000 00:00 0 +732daa5a1000-732daa5b0000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +732daa5b0000-732daa5b1000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +732daa5b1000-732daa5b2000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +732daa5b2000-732daa5b4000 rw-p 00000000 00:00 0 +732daa5b4000-732daa5b8000 r--p 00000000 00:00 0 [vvar] +732daa5b8000-732daa5ba000 r-xp 00000000 00:00 0 [vdso] +732daa5ba000-732daa5bc000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +732daa5bc000-732daa5e6000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +732daa5e6000-732daa5f1000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +732daa5f1000-732daa5f2000 ---p 00000000 00:00 0 +732daa5f2000-732daa5f4000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +732daa5f4000-732daa5f6000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7ffda949e000-7ffda94c1000 rw-p 00000000 00:00 0 [stack] +ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] +Total number of mappings: 918 + + +VM Arguments: +jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant +java_command: jme3test.vulkan.VulkanTest +java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar +Launcher Type: SUN_STANDARD + +[Global flags] + intx CICompilerCount = 4 {product} {ergonomic} + uint ConcGCThreads = 2 {product} {ergonomic} + uint G1ConcRefinementThreads = 8 {product} {ergonomic} + size_t G1HeapRegionSize = 4194304 {product} {ergonomic} + size_t InitialHeapSize = 524288000 {product} {ergonomic} + size_t MarkStackSize = 4194304 {product} {ergonomic} + size_t MarkStackSizeMax = 536870912 {product} {ergonomic} + size_t MaxHeapSize = 8388608000 {product} {ergonomic} + size_t MaxNewSize = 5033164800 {product} {ergonomic} + size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} + size_t MinHeapSize = 8388608 {product} {ergonomic} + uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} + uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} + uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} + uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} + bool SegmentedCodeCache = true {product} {ergonomic} + size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} + bool UseCompressedOops = true {product lp64_product} {ergonomic} + bool UseG1GC = true {product} {ergonomic} + +Logging: +Log output configuration: + #0: stdout all=warning uptime,level,tags foldmultilines=false + #1: stderr all=off uptime,level,tags foldmultilines=false + +Environment Variables: +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin +USERNAME=codex +SHELL=/bin/bash +DISPLAY=:1 +LANG=en_US.UTF-8 + +Active Locale: +LC_ALL=en_US.UTF-8 +LC_COLLATE=en_US.UTF-8 +LC_CTYPE=en_US.UTF-8 +LC_MESSAGES=en_US.UTF-8 +LC_MONETARY=en_US.UTF-8 +LC_NUMERIC=en_US.UTF-8 +LC_TIME=en_US.UTF-8 + +Signal Handlers: + SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked + SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + + +Periodic native trim disabled + +--------------- S Y S T E M --------------- + +OS: +DISTRIB_ID=Pop +DISTRIB_RELEASE=22.04 +DISTRIB_CODENAME=jammy +DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" +uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 +OS uptime: 0 days 15:13 hours +libc: glibc 2.35 NPTL 2.35 +rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k +load average: 0.91 0.86 0.83 + +/proc/meminfo: +MemTotal: 32767652 kB +MemFree: 20158592 kB +MemAvailable: 23559316 kB +Buffers: 346904 kB +Cached: 5008344 kB +SwapCached: 0 kB +Active: 8805936 kB +Inactive: 2811836 kB +Active(anon): 6296256 kB +Inactive(anon): 0 kB +Active(file): 2509680 kB +Inactive(file): 2811836 kB +Unevictable: 15204 kB +Mlocked: 72 kB +SwapTotal: 20970996 kB +SwapFree: 20970996 kB +Zswap: 0 kB +Zswapped: 0 kB +Dirty: 572 kB +Writeback: 0 kB +AnonPages: 6278416 kB +Mapped: 1825616 kB +Shmem: 33440 kB +KReclaimable: 197280 kB +Slab: 385420 kB +SReclaimable: 197280 kB +SUnreclaim: 188140 kB +KernelStack: 22604 kB +PageTables: 54152 kB +SecPageTables: 0 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 37354820 kB +Committed_AS: 12297512 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 252096 kB +VmallocChunk: 0 kB +Percpu: 9472 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 6144 kB +ShmemPmdMapped: 0 kB +FileHugePages: 0 kB +FilePmdMapped: 0 kB +Unaccepted: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +Hugetlb: 0 kB +DirectMap4k: 851768 kB +DirectMap2M: 15826944 kB +DirectMap1G: 16777216 kB + +/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never +/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 +/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force +/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never + +Process Memory: +Virtual Size: 13378692K (peak: 13378692K) +Resident Set Size: 308840K (peak: 308840K) (anon: 165076K, file: 142740K, shmem: 1024K) +Swapped out: 0K +C-Heap outstanding allocations: 84201K, retained: 22642K +glibc malloc tunables: (default) + +/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 +/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 +/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 +/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 + +container (cgroup) information: +container_type: cgroupv2 +cpu_cpuset_cpus: not supported +cpu_memory_nodes: not supported +active_processor_count: 8 +cpu_quota: not supported +cpu_period: not supported +cpu_shares: not supported +memory_limit_in_bytes: unlimited +memory_and_swap_limit_in_bytes: unlimited +memory_soft_limit_in_bytes: 0 +memory_usage_in_bytes: 5916456 k +memory_max_usage_in_bytes: not supported +rss_usage_in_bytes: 3510504 k +cache_usage_in_bytes: 2323036 k +memory_swap_current_in_bytes: 0 +memory_swap_max_limit_in_bytes: unlimited +maximum number of tasks: 38296 +current number of tasks: 318 + +Steal ticks since vm start: 0 +Steal ticks percentage since vm start: 0.000 + +CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c +CPU Model and flags from /proc/cpuinfo: +model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities + +Online cpus: 0-7 +Offline cpus: +BIOS frequency limitation: +Frequency switch latency (ns): 0 +Available cpu frequencies: +Current governor: powersave +Core performance/turbo boost: + +Memory: 4k page, physical 32767652k(23559316k free), swap 20970996k(20970996k free) +Page Sizes: 4k + +vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 + +END. diff --git a/hs_err_pid84939.log b/hs_err_pid84939.log new file mode 100644 index 0000000000..987a5c0e9f --- /dev/null +++ b/hs_err_pid84939.log @@ -0,0 +1,1600 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x000071ffebc5933a, pid=84939, tid=84983 +# +# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) +# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) +# Problematic frame: +# C [libjemalloc.so+0x5933a] +# +# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.84939) +# +# If you would like to submit a bug report, please visit: +# https://bugreport.java.com/bugreport/crash.jsp +# + +--------------- S U M M A R Y ------------ + +Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanTest + +Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS +Time: Thu Jun 26 22:33:32 2025 EDT elapsed time: 3.277063 seconds (0d 0h 0m 3s) + +--------------- T H R E A D --------------- + +Current thread is native thread + +Stack: [0x000071ffe9f72000,0x000071ffea072000], sp=0x000071ffea0708d0, free space=1018k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libjemalloc.so+0x5933a] + +siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 + +Registers: +RAX=0x0000000000000000, RBX=0x0000000000000200, RCX=0x0000000000000000, RDX=0x000071ffebc78440 +RSP=0x000071ffea0708d0, RBP=0x000071ffea070db0, RSI=0x0000000000000000, RDI=0x000071ffeb5503b0 +R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x000071ffeb5503f0 +R12=0x000000000000003e, R13=0x000071ffea070d70, R14=0x000000000000003e, R15=0x000071ffea070ad0 +RIP=0x000071ffebc5933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 + TRAPNO=0x000000000000000e + + +Top of Stack: (sp=0x000071ffea0708d0) +0x000071ffea0708d0: 00007200144d8790 000071ffea070960 +0x000071ffea0708e0: 000071ffea070970 000072001c369211 +0x000071ffea0708f0: 0000000000000005 00007200144d8988 +0x000071ffea070900: 0000000000000005 0000000000000000 +0x000071ffea070910: 0000000000000001 00007200144d8420 +0x000071ffea070920: 00007200144d8988 00007200144d8420 +0x000071ffea070930: 0000000103d3f020 00007200144d8790 +0x000071ffea070940: 0000000000000000 3030323700000000 +0x000071ffea070950: 3033633500000000 87651f3e00000004 +0x000071ffea070960: 00000000ffffffff 0000000000000000 +0x000071ffea070970: 000072001c00d4d0 000072001c3567c0 +0x000071ffea070980: 000071ffea0709b0 000072001ba78613 +0x000071ffea070990: 000071ffea070b88 000072001c08849a +0x000071ffea0709a0: 0000000000000000 000071ffea070aa0 +0x000071ffea0709b0: 00000000fbad8001 0000000000000002 +0x000071ffea0709c0: 00007200144d8420 000071ffebfff028 +0x000071ffea0709d0: 000072001c21cae8 0000000000000004 +0x000071ffea0709e0: 000071ffea071b58 000072001c36ff71 +0x000071ffea0709f0: 0000000000000005 0000000000000000 +0x000071ffea070a00: 000072001c00d4d0 000072001c0a53e0 +0x000071ffea070a10: 0000000000000000 000071ffea070e00 +0x000071ffea070a20: 000072001c21caf8 0000000000000000 +0x000071ffea070a30: 000072001c21cae8 000072001c372dae +0x000071ffea070a40: 0000000000000001 000000000000006f +0x000071ffea070a50: 000071ffebfb17d0 0000000000000000 +0x000071ffea070a60: 000071fee4b8ab30 0000000000000000 +0x000071ffea070a70: 00000000000000ca 28fd47b5e1463e18 +0x000071ffea070a80: 0000000000000213 000072001c217300 +0x000071ffea070a90: 0000000000000000 0000000000000200 +0x000071ffea070aa0: 000071ffea070db0 000000000000003e +0x000071ffea070ab0: 000071ffea070d70 000071ffea070ad0 +0x000071ffea070ac0: 000071fee40024d0 000071ffebc592f8 + +Instructions: (pc=0x000071ffebc5933a) +0x000071ffebc5923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff +0x000071ffebc5924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 +0x000071ffebc5925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 +0x000071ffebc5926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c +0x000071ffebc5927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b +0x000071ffebc5928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 +0x000071ffebc5929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 +0x000071ffebc592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 +0x000071ffebc592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 +0x000071ffebc592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d +0x000071ffebc592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c +0x000071ffebc592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 +0x000071ffebc592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b +0x000071ffebc5930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 +0x000071ffebc5931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 +0x000071ffebc5932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 +0x000071ffebc5933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 +0x000071ffebc5934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c +0x000071ffebc5935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 +0x000071ffebc5936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 +0x000071ffebc5937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c +0x000071ffebc5938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 +0x000071ffebc5939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 +0x000071ffebc593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d +0x000071ffebc593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 +0x000071ffebc593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f +0x000071ffebc593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 +0x000071ffebc593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 +0x000071ffebc593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 +0x000071ffebc5940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff +0x000071ffebc5941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 +0x000071ffebc5942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 + + + +--------------- P R O C E S S --------------- + +VM state: not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: None + +Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 + +CDS archive(s) mapped at: [0x000071ff92000000-0x000071ff92d91000-0x000071ff92d91000), size 14225408, SharedBaseAddress: 0x000071ff92000000, ArchiveRelocationMode: 1. +Compressed class space mapped at: 0x000071ff93000000-0x000071ffd3000000, reserved size: 1073741824 +Narrow klass base: 0x000071ff92000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 + +GC Precious Log: + + +Heap: + garbage-first heap total reserved 8192000K, committed 28672K, used 14249K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 3 young (12288K), 1 survivors (4096K) + Metaspace used 21955K, committed 22272K, reserved 1114112K + class space used 2290K, committed 2432K, reserved 1048576K + +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|0x000000060c000000, 0x000000060c3675b0, 0x000000060c400000| 85%| O| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 +| 1|0x000000060c400000, 0x000000060c6bd990, 0x000000060c800000| 68%| O| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 +| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 +| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 +| 4|0x000000060d000000, 0x000000060d255cf8, 0x000000060d400000| 58%| E| |TAMS 0x000000060d000000| PB 0x000000060d000000| Complete | 0 +| 5|0x000000060d400000, 0x000000060d56faa8, 0x000000060d800000| 35%| S|CS|TAMS 0x000000060d400000| PB 0x000000060d400000| Complete | 0 +| 6|0x000000060d800000, 0x000000060dc00000, 0x000000060dc00000|100%| E|CS|TAMS 0x000000060d800000| PB 0x000000060d800000| Complete | 0 + +Card table byte_map: [0x000071fffb800000,0x000071fffc7a0000] _byte_map_base: 0x000071fff87a0000 + +Marking Bits: (CMBitMap*) 0x0000720014059190 + Bits: [0x000071fff3a00000, 0x000071fffb700000) + +Polling page: 0x000072001c342000 + +Metaspace: + +Usage: + Non-class: 19.20 MB used. + Class: 2.24 MB used. + Both: 21.44 MB used. + +Virtual space: + Non-class space: 64.00 MB reserved, 19.38 MB ( 30%) committed, 1 nodes. + Class space: 1.00 GB reserved, 2.38 MB ( <1%) committed, 1 nodes. + Both: 1.06 GB reserved, 21.75 MB ( 2%) committed. + +Chunk freelists: + Non-Class: 11.98 MB + Class: 13.45 MB + Both: 25.44 MB + +MaxMetaspaceSize: unlimited +CompressedClassSpaceSize: 1.00 GB +Initial GC threshold: 21.00 MB +Current GC threshold: 27.00 MB +CDS: on + - commit_granule_bytes: 65536. + - commit_granule_words: 8192. + - virtual_space_node_default_size: 8388608. + - enlarge_chunks_in_place: 1. + - use_allocation_guard: 0. + + +Internal statistics: + +num_allocs_failed_limit: 0. +num_arena_births: 334. +num_arena_deaths: 0. +num_vsnodes_births: 2. +num_vsnodes_deaths: 0. +num_space_committed: 348. +num_space_uncommitted: 0. +num_chunks_returned_to_freelist: 0. +num_chunks_taken_from_freelist: 684. +num_chunk_merges: 0. +num_chunk_splits: 434. +num_chunks_enlarged: 278. +num_inconsistent_stats: 0. + +CodeHeap 'non-profiled nmethods': size=120032Kb used=678Kb max_used=678Kb free=119353Kb + bounds [0x00007200042c8000, 0x0000720004538000, 0x000072000b800000] +CodeHeap 'profiled nmethods': size=120028Kb used=2602Kb max_used=2602Kb free=117425Kb + bounds [0x000071fffc800000, 0x000071fffca90000, 0x0000720003d37000] +CodeHeap 'non-nmethods': size=5700Kb used=2461Kb max_used=2477Kb free=3239Kb + bounds [0x0000720003d37000, 0x0000720003fb7000, 0x00007200042c8000] +CodeCache: size=245760Kb, used=5741Kb, max_used=5757Kb, free=240017Kb + total_blobs=3531, nmethods=2097, adapters=1341, full_count=0 +Compilation: enabled, stopped_count=0, restarted_count=0 + +Compilation events (20 events): +Event: 3.270 Thread 0x00007200141485b0 2245 ! 3 java.util.regex.Pattern::closure (276 bytes) +Event: 3.271 Thread 0x00007200141485b0 nmethod 2245 0x000071fffca84388 code [0x000071fffca84720, 0x000071fffca86048] +Event: 3.271 Thread 0x00007200141485b0 2243 3 java.util.regex.Pattern::expr (142 bytes) +Event: 3.272 Thread 0x00007200141485b0 nmethod 2243 0x000071fffca86108 code [0x000071fffca862e0, 0x000071fffca86d88] +Event: 3.272 Thread 0x00007200141485b0 2246 3 java.lang.String::split (148 bytes) +Event: 3.272 Thread 0x000072001413eeb0 nmethod 2220 0x0000720004370288 code [0x00007200043703c0, 0x0000720004370b00] +Event: 3.272 Thread 0x000072001413eeb0 2235 4 java.io.BufferedInputStream::implRead (112 bytes) +Event: 3.273 Thread 0x00007200141485b0 nmethod 2246 0x000071fffca86e08 code [0x000071fffca870e0, 0x000071fffca88668] +Event: 3.273 Thread 0x00007200141485b0 2247 3 java.lang.String::split (8 bytes) +Event: 3.273 Thread 0x00007200141485b0 nmethod 2247 0x000071fffca88708 code [0x000071fffca88820, 0x000071fffca88968] +Event: 3.273 Thread 0x00007200141485b0 2241 3 java.util.ArrayList::subList (20 bytes) +Event: 3.273 Thread 0x00007200141485b0 nmethod 2241 0x000071fffca88a08 code [0x000071fffca88b60, 0x000071fffca88f20] +Event: 3.273 Thread 0x00007200141485b0 2242 ! 3 java.util.regex.Pattern:: (144 bytes) +Event: 3.273 Thread 0x00007200141485b0 nmethod 2242 0x000071fffca88f88 code [0x000071fffca89200, 0x000071fffca8a2a0] +Event: 3.273 Thread 0x00007200141485b0 2236 3 javax.imageio.ImageReader::processImageUpdate (73 bytes) +Event: 3.274 Thread 0x00007200141485b0 nmethod 2236 0x000071fffca8a388 code [0x000071fffca8a500, 0x000071fffca8aa70] +Event: 3.276 Thread 0x000071ff585b1560 nmethod 2227% 0x0000720004370b88 code [0x0000720004370cc0, 0x0000720004371648] +Event: 3.276 Thread 0x000071ff585b1560 2228 4 com.sun.imageio.plugins.png.PNGImageReader::paethPredictor (57 bytes) +Event: 3.276 Thread 0x000071ff585b1560 nmethod 2228 0x0000720004371688 code [0x0000720004371780, 0x0000720004371878] +Event: 3.276 Thread 0x000071ff585b1560 2248 4 java.lang.String::subSequence (7 bytes) + +GC Heap History (8 events): +Event: 2.407 GC heap before +{Heap before GC invocations=0 (full 0): + garbage-first heap total reserved 8192000K, committed 516096K, used 21627K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 6 young (24576K), 0 survivors (0K) + Metaspace used 16354K, committed 16576K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.418 GC heap after +{Heap after GC invocations=1 (full 1): + garbage-first heap total reserved 8192000K, committed 98304K, used 6293K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16354K, committed 16576K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.418 GC heap before +{Heap before GC invocations=1 (full 1): + garbage-first heap total reserved 8192000K, committed 98304K, used 6293K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16354K, committed 16576K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.429 GC heap after +{Heap after GC invocations=2 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 6291K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16354K, committed 16576K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.891 GC heap before +{Heap before GC invocations=2 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 10387K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 2 young (8192K), 0 survivors (0K) + Metaspace used 18559K, committed 18880K, reserved 1114112K + class space used 2036K, committed 2176K, reserved 1048576K +} +Event: 2.892 GC heap after +{Heap after GC invocations=3 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 7362K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 1 young (4096K), 1 survivors (4096K) + Metaspace used 18559K, committed 18880K, reserved 1114112K + class space used 2036K, committed 2176K, reserved 1048576K +} +Event: 2.963 GC heap before +{Heap before GC invocations=3 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 11458K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 2 young (8192K), 1 survivors (4096K) + Metaspace used 19953K, committed 20288K, reserved 1114112K + class space used 2161K, committed 2304K, reserved 1048576K +} +Event: 2.964 GC heap after +{Heap after GC invocations=4 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 7762K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 1 young (4096K), 1 survivors (4096K) + Metaspace used 19953K, committed 20288K, reserved 1114112K + class space used 2161K, committed 2304K, reserved 1048576K +} + +Dll operation events (12 events): +Event: 0.002 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +Event: 0.019 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +Event: 0.019 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +Event: 0.030 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +Event: 0.032 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +Event: 0.079 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +Event: 0.140 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +Event: 0.146 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +Event: 0.247 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +Event: 0.250 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +Event: 0.277 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +Event: 0.364 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so + +Deoptimization events (20 events): +Event: 2.879 Thread 0x00007200146d5c30 Uncommon trap: trap_request=0xffffff76 fr.pc=0x000072000434d868 relative=0x00000000000001a8 +Event: 2.879 Thread 0x00007200146d5c30 Uncommon trap: reason=predicate action=maybe_recompile pc=0x000072000434d868 method=java.util.regex.Pattern$BmpCharPropertyGreedy.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 12 c2 +Event: 2.879 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x000072000434d868 sp=0x000071ffea0700e0 +Event: 2.879 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8abf9 sp=0x000071ffea0700b8 mode 2 +Event: 2.889 Thread 0x00007200146d5c30 Uncommon trap: trap_request=0xffffff45 fr.pc=0x0000720004339774 relative=0x0000000000000074 +Event: 2.889 Thread 0x00007200146d5c30 Uncommon trap: reason=unstable_if action=reinterpret pc=0x0000720004339774 method=java.util.logging.Logger.isLoggable(Ljava/util/logging/Level;)Z @ 13 c2 +Event: 2.889 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x0000720004339774 sp=0x000071ffea070580 +Event: 2.889 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8abf9 sp=0x000071ffea0704e0 mode 2 +Event: 2.953 Thread 0x00007200146d5c30 Uncommon trap: trap_request=0xffffff6e fr.pc=0x0000720004363fe8 relative=0x0000000000000148 +Event: 2.953 Thread 0x00007200146d5c30 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x0000720004363fe8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 +Event: 2.953 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x0000720004363fe8 sp=0x000071ffea0700a0 +Event: 2.953 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8abf9 sp=0x000071ffea070050 mode 2 +Event: 3.104 Thread 0x00007200146d5c30 Uncommon trap: trap_request=0xffffff6e fr.pc=0x0000720004366dc8 relative=0x0000000000000a68 +Event: 3.104 Thread 0x00007200146d5c30 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x0000720004366dc8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 +Event: 3.104 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x0000720004366dc8 sp=0x000071ffea06fa50 +Event: 3.104 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8abf9 sp=0x000071ffea06f9d0 mode 2 +Event: 3.142 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x000071fffca20d9f sp=0x000071ffea06f7c0 +Event: 3.142 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8b30f sp=0x000071ffea06ec00 mode 0 +Event: 3.144 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x000071fffc8b3354 sp=0x000071ffea06f790 +Event: 3.144 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8b30f sp=0x000071ffea06ec48 mode 0 + +Classes loaded (20 events): +Event: 2.936 Loading class java/awt/image/PixelInterleavedSampleModel +Event: 2.936 Loading class java/awt/image/ComponentSampleModel +Event: 2.936 Loading class java/awt/image/ComponentSampleModel done +Event: 2.936 Loading class java/awt/image/PixelInterleavedSampleModel done +Event: 2.936 Loading class javax/imageio/ImageTypeSpecifier$Packed +Event: 2.936 Loading class javax/imageio/ImageTypeSpecifier$Packed done +Event: 2.936 Loading class java/awt/image/DataBufferByte +Event: 2.936 Loading class java/awt/image/DataBufferByte done +Event: 2.936 Loading class sun/awt/image/ByteInterleavedRaster +Event: 2.937 Loading class sun/awt/image/ByteComponentRaster +Event: 2.937 Loading class sun/awt/image/ByteComponentRaster done +Event: 2.937 Loading class sun/awt/image/ByteInterleavedRaster done +Event: 2.937 Loading class sun/awt/image/ShortComponentRaster +Event: 2.937 Loading class sun/awt/image/ShortComponentRaster done +Event: 3.006 Loading class java/util/function/LongFunction +Event: 3.007 Loading class java/util/function/LongFunction done +Event: 3.276 Loading class java/lang/Throwable$WrappedPrintStream +Event: 3.276 Loading class java/lang/Throwable$PrintStreamOrWriter +Event: 3.276 Loading class java/lang/Throwable$PrintStreamOrWriter done +Event: 3.276 Loading class java/lang/Throwable$WrappedPrintStream done + +Classes unloaded (0 events): +No events + +Classes redefined (0 events): +No events + +Internal exceptions (20 events): +Event: 0.653 Thread 0x00007200146bc010 Exception (0x000000062a0b8990) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.361 Thread 0x00007200146bc010 Exception (0x000000062a354398) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 2.402 Thread 0x00007200146bc010 Exception (0x0000000629cbdfc0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.445 Thread 0x000072001402d0f0 Exception (0x000000060d9db038) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 2.455 Thread 0x000072001402d0f0 Exception (0x000000060da3a090) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.456 Thread 0x000072001402d0f0 Exception (0x000000060da481a0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.603 Thread 0x00007200146d5c30 Exception (0x000000060d561810) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] +Event: 2.878 Thread 0x00007200146d5c30 Exception (0x000000060d782020) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.965 Thread 0x00007200146d5c30 Exception (0x000000060d828358) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.969 Thread 0x00007200146d5c30 Exception (0x000000060d850bb8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.004 Thread 0x00007200146d5c30 Exception (0x000000060d949c48) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.004 Thread 0x00007200146d5c30 Exception (0x000000060d94f310) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.019 Thread 0x00007200146d5c30 Exception (0x000000060da07a10) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.020 Thread 0x00007200146d5c30 Exception (0x000000060da1a280) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.021 Thread 0x00007200146d5c30 Exception (0x000000060da1e220) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.021 Thread 0x00007200146d5c30 Exception (0x000000060da218e0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.027 Thread 0x00007200146d5c30 Exception (0x000000060da85e10) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.064 Thread 0x00007200146d5c30 Exception (0x000000060dad6840) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.070 Thread 0x00007200146d5c30 Exception (0x000000060daf1198) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.101 Thread 0x00007200146d5c30 Exception (0x000000060db30f38) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] + +VM Operations (20 events): +Event: 0.154 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.154 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.261 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.261 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.279 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.279 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.288 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.288 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.684 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.684 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 2.407 Executing VM operation: G1CollectFull (System.gc()) +Event: 2.418 Executing VM operation: G1CollectFull (System.gc()) done +Event: 2.418 Executing VM operation: G1CollectFull (System.gc()) +Event: 2.429 Executing VM operation: G1CollectFull (System.gc()) done +Event: 2.453 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 2.453 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 2.891 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) +Event: 2.892 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done +Event: 2.963 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) +Event: 2.964 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done + +Memory protections (20 events): +Event: 0.017 Protecting memory [0x000071fff0500000,0x000071fff0504000] with protection modes 0 +Event: 0.018 Protecting memory [0x000071fff0400000,0x000071fff0404000] with protection modes 0 +Event: 0.018 Protecting memory [0x000071fff0300000,0x000071fff0304000] with protection modes 0 +Event: 0.026 Protecting memory [0x000071fff0200000,0x000071fff0204000] with protection modes 0 +Event: 0.027 Protecting memory [0x000071fff0100000,0x000071fff0104000] with protection modes 0 +Event: 0.059 Protecting memory [0x000071fff0000000,0x000071fff0004000] with protection modes 0 +Event: 0.302 Protecting memory [0x000071ffeae78000,0x000071ffeae7c000] with protection modes 0 +Event: 0.304 Protecting memory [0x000071ffead78000,0x000071ffead7c000] with protection modes 0 +Event: 0.306 Protecting memory [0x000071ffeac78000,0x000071ffeac7c000] with protection modes 0 +Event: 0.306 Protecting memory [0x000071ffeab78000,0x000071ffeab7c000] with protection modes 0 +Event: 0.364 Protecting memory [0x000071ffeaa78000,0x000071ffeaa7c000] with protection modes 0 +Event: 0.590 Protecting memory [0x000071fff0000000,0x000071fff0004000] with protection modes 0 +Event: 0.681 Protecting memory [0x000071ffea978000,0x000071ffea97c000] with protection modes 0 +Event: 0.710 Protecting memory [0x000071ffea778000,0x000071ffea77c000] with protection modes 0 +Event: 2.375 Protecting memory [0x000071ffea978000,0x000071ffea97c000] with protection modes 0 +Event: 2.432 Protecting memory [0x000071ffea072000,0x000071ffea076000] with protection modes 0 +Event: 2.460 Protecting memory [0x000071ffe9f72000,0x000071ffe9f76000] with protection modes 0 +Event: 2.460 Protecting memory [0x000072001a900000,0x000072001a904000] with protection modes 0 +Event: 2.896 Protecting memory [0x000071ffea978000,0x000071ffea97c000] with protection modes 0 +Event: 3.267 Protecting memory [0x000071ffea072000,0x000071ffea076000] with protection modes 0 + +Nmethod flushes (20 events): +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc88e088 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc88e488 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc88ff08 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc890a08 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc8da088 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc8da708 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc8dac88 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc8dcb08 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc918d08 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc929b08 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc92c788 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc940708 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc940a08 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc942988 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc943c08 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc949708 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc971088 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc972c88 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc9f5a08 +Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc9f7808 + +Events (20 events): +Event: 0.302 Thread 0x000072001402d0f0 Thread added: 0x00007200146b6f00 +Event: 0.304 Thread 0x000072001402d0f0 Thread added: 0x00007200146b8b70 +Event: 0.306 Thread 0x000072001402d0f0 Thread added: 0x00007200146baf00 +Event: 0.306 Thread 0x000072001402d0f0 Thread added: 0x00007200146bc010 +Event: 0.364 Thread 0x00007200146bc010 Thread added: 0x000071ff2c043cc0 +Event: 0.585 Thread 0x000071ff5c0e0c80 Thread exited: 0x000071ff5c0e0c80 +Event: 0.590 Thread 0x00007200146bc010 Thread added: 0x000071ff2c061470 +Event: 0.681 Thread 0x00007200141485b0 Thread added: 0x000071ff58542f60 +Event: 0.710 Thread 0x00007200146bc010 Thread added: 0x000071ff2c0bc7a0 +Event: 1.148 Thread 0x000071ff58542f60 Thread exited: 0x000071ff58542f60 +Event: 2.375 Thread 0x00007200141485b0 Thread added: 0x000071ff5856e360 +Event: 2.432 Thread 0x000072001413eeb0 Thread added: 0x000071ff5c2d16e0 +Event: 2.460 Thread 0x000072001402d0f0 Thread added: 0x00007200146d5c30 +Event: 2.460 Thread 0x000072001402d0f0 Thread exited: 0x000072001402d0f0 +Event: 2.460 Thread 0x000072001402d0f0 Thread added: 0x000072001402d0f0 +Event: 2.570 Thread 0x000071ff5c2d16e0 Thread exited: 0x000071ff5c2d16e0 +Event: 2.878 Thread 0x000071ff5856e360 Thread exited: 0x000071ff5856e360 +Event: 2.896 Thread 0x00007200146d5c30 Thread added: 0x000071fee4582550 +Event: 3.267 Thread 0x00007200141485b0 Thread added: 0x000071ff585b1560 +Event: 3.277 Thread 0x00007200146d5c30 Thread exited: 0x00007200146d5c30 + + +Dynamic libraries: +60c000000-60dc00000 rw-p 00000000 00:00 0 +60dc00000-800000000 ---p 00000000 00:00 0 +5f35736ce000-5f35736cf000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +5f35736d0000-5f35736d1000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +5f35736d1000-5f35736d2000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +5f35785ae000-5f35785f7000 rw-p 00000000 00:00 0 [heap] +71fe9c000000-71fe9c075000 rw-p 00000000 00:00 0 +71fe9c075000-71fea0000000 ---p 00000000 00:00 0 +71fea4000000-71fea4021000 rw-p 00000000 00:00 0 +71fea4021000-71fea8000000 ---p 00000000 00:00 0 +71fea8000000-71fea8021000 rw-p 00000000 00:00 0 +71fea8021000-71feac000000 ---p 00000000 00:00 0 +71feb0000000-71feb0021000 rw-p 00000000 00:00 0 +71feb0021000-71feb4000000 ---p 00000000 00:00 0 +71feb4000000-71feb4021000 rw-p 00000000 00:00 0 +71feb4021000-71feb8000000 ---p 00000000 00:00 0 +71febc000000-71febc021000 rw-p 00000000 00:00 0 +71febc021000-71fec0000000 ---p 00000000 00:00 0 +71fec0000000-71fec0021000 rw-p 00000000 00:00 0 +71fec0021000-71fec4000000 ---p 00000000 00:00 0 +71fec8000000-71fec8021000 rw-p 00000000 00:00 0 +71fec8021000-71fecc000000 ---p 00000000 00:00 0 +71fecc000000-71fecc0c8000 rw-p 00000000 00:00 0 +71fecc0c8000-71fed0000000 ---p 00000000 00:00 0 +71fed4000000-71fed4021000 rw-p 00000000 00:00 0 +71fed4021000-71fed8000000 ---p 00000000 00:00 0 +71fed9000000-71fedf712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +71fedf712000-71fedff30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +71fedff30000-71fedff76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +71fedff76000-71fedfff2000 rw-p 00000000 00:00 0 +71fee0000000-71fee0021000 rw-p 00000000 00:00 0 +71fee0021000-71fee4000000 ---p 00000000 00:00 0 +71fee4000000-71fee7148000 rw-p 00000000 00:00 0 +71fee7148000-71fee8000000 ---p 00000000 00:00 0 +71feec000000-71feec050000 rw-p 00000000 00:00 0 +71feec050000-71fef0000000 ---p 00000000 00:00 0 +71fef0000000-71fef0021000 rw-p 00000000 00:00 0 +71fef0021000-71fef4000000 ---p 00000000 00:00 0 +71fef8000000-71fef8021000 rw-p 00000000 00:00 0 +71fef8021000-71fefc000000 ---p 00000000 00:00 0 +71fefc000000-71fefc021000 rw-p 00000000 00:00 0 +71fefc021000-71ff00000000 ---p 00000000 00:00 0 +71ff04000000-71ff04021000 rw-p 00000000 00:00 0 +71ff04021000-71ff08000000 ---p 00000000 00:00 0 +71ff08000000-71ff08021000 rw-p 00000000 00:00 0 +71ff08021000-71ff0c000000 ---p 00000000 00:00 0 +71ff10000000-71ff10021000 rw-p 00000000 00:00 0 +71ff10021000-71ff14000000 ---p 00000000 00:00 0 +71ff14000000-71ff14021000 rw-p 00000000 00:00 0 +71ff14021000-71ff18000000 ---p 00000000 00:00 0 +71ff1c000000-71ff1c021000 rw-p 00000000 00:00 0 +71ff1c021000-71ff20000000 ---p 00000000 00:00 0 +71ff20000000-71ff201bc000 rw-p 00000000 00:00 0 +71ff201bc000-71ff24000000 ---p 00000000 00:00 0 +71ff28000000-71ff28021000 rw-p 00000000 00:00 0 +71ff28021000-71ff2c000000 ---p 00000000 00:00 0 +71ff2c000000-71ff2c102000 rw-p 00000000 00:00 0 +71ff2c102000-71ff30000000 ---p 00000000 00:00 0 +71ff34000000-71ff34021000 rw-p 00000000 00:00 0 +71ff34021000-71ff38000000 ---p 00000000 00:00 0 +71ff38000000-71ff38021000 rw-p 00000000 00:00 0 +71ff38021000-71ff3c000000 ---p 00000000 00:00 0 +71ff40000000-71ff40021000 rw-p 00000000 00:00 0 +71ff40021000-71ff44000000 ---p 00000000 00:00 0 +71ff44000000-71ff44184000 rw-p 00000000 00:00 0 +71ff44184000-71ff48000000 ---p 00000000 00:00 0 +71ff4c000000-71ff4c021000 rw-p 00000000 00:00 0 +71ff4c021000-71ff50000000 ---p 00000000 00:00 0 +71ff50000000-71ff50021000 rw-p 00000000 00:00 0 +71ff50021000-71ff54000000 ---p 00000000 00:00 0 +71ff58000000-71ff585b8000 rw-p 00000000 00:00 0 +71ff585b8000-71ff5c000000 ---p 00000000 00:00 0 +71ff5c000000-71ff5c52c000 rw-p 00000000 00:00 0 +71ff5c52c000-71ff60000000 ---p 00000000 00:00 0 +71ff60600000-71ff60725000 r--p 00000000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +71ff60725000-71ff60be5000 r-xp 00125000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +71ff60be5000-71ff60d19000 r--p 005e5000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +71ff60d19000-71ff60d1a000 ---p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +71ff60d1a000-71ff60d7d000 r--p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +71ff60d7d000-71ff60d87000 rw-p 0077c000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +71ff60d87000-71ff60d98000 rw-p 00000000 00:00 0 +71ff60e00000-71ff60e01000 ---p 00000000 00:00 0 +71ff60e01000-71ff61601000 rw-p 00000000 00:00 0 +71ff61800000-71ff61801000 ---p 00000000 00:00 0 +71ff61801000-71ff62001000 rw-p 00000000 00:00 0 +71ff62200000-71ff62201000 ---p 00000000 00:00 0 +71ff62201000-71ff62a01000 rw-p 00000000 00:00 0 +71ff62c00000-71ff62c01000 ---p 00000000 00:00 0 +71ff62c01000-71ff63401000 rw-p 00000000 00:00 0 +71ff63600000-71ff63601000 ---p 00000000 00:00 0 +71ff63601000-71ff63e01000 rw-p 00000000 00:00 0 +71ff64000000-71ff64021000 rw-p 00000000 00:00 0 +71ff64021000-71ff68000000 ---p 00000000 00:00 0 +71ff68000000-71ff68021000 rw-p 00000000 00:00 0 +71ff68021000-71ff6c000000 ---p 00000000 00:00 0 +71ff6c200000-71ff6c201000 ---p 00000000 00:00 0 +71ff6c201000-71ff6ca01000 rw-p 00000000 00:00 0 +71ff6cc00000-71ff6cc2f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +71ff6cc2f000-71ff6d302000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +71ff6d302000-71ff6d424000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +71ff6d424000-71ff6d435000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +71ff6d435000-71ff6d4b3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +71ff6d4b3000-71ff6d4c7000 rw-p 00000000 00:00 0 +71ff6d600000-71ff6e2f5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +71ff6e2f5000-71ff6ecd8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +71ff6ecd8000-71ff6f0e9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +71ff6f0e9000-71ff6f56b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +71ff6f56b000-71ff6f573000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +71ff6f573000-71ff6f57e000 rw-p 00000000 00:00 0 +71ff6f600000-71ff6f601000 ---p 00000000 00:00 0 +71ff6f601000-71ff6fe01000 rw-p 00000000 00:00 0 +71ff70000000-71ff70021000 rw-p 00000000 00:00 0 +71ff70021000-71ff74000000 ---p 00000000 00:00 0 +71ff74000000-71ff74021000 rw-p 00000000 00:00 0 +71ff74021000-71ff78000000 ---p 00000000 00:00 0 +71ff78600000-71ff78601000 ---p 00000000 00:00 0 +71ff78601000-71ff78e01000 rw-p 00000000 00:00 0 +71ff79000000-71ff79001000 ---p 00000000 00:00 0 +71ff79001000-71ff79801000 rw-p 00000000 00:00 0 +71ff79a00000-71ff79a01000 ---p 00000000 00:00 0 +71ff79a01000-71ff7a201000 rw-p 00000000 00:00 0 +71ff7a400000-71ff7a401000 ---p 00000000 00:00 0 +71ff7a401000-71ff7ac01000 rw-p 00000000 00:00 0 +71ff7ae00000-71ff7ae8d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +71ff7ae8d000-71ff7b5f5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +71ff7b5f5000-71ff7be82000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +71ff7be82000-71ff7bec4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +71ff7bec4000-71ff7bec7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +71ff7bec7000-71ff7becd000 rw-p 00000000 00:00 0 +71ff7c000000-71ff7c021000 rw-p 00000000 00:00 0 +71ff7c021000-71ff80000000 ---p 00000000 00:00 0 +71ff80000000-71ff80637000 rw-p 00000000 00:00 0 +71ff80637000-71ff84000000 ---p 00000000 00:00 0 +71ff84000000-71ff84200000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ff84200000-71ff84201000 ---p 00000000 00:00 0 +71ff84201000-71ff84a01000 rw-p 00000000 00:00 0 +71ff84c00000-71ff84c5b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +71ff84c5b000-71ff84fd9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +71ff84fd9000-71ff853d5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +71ff853d5000-71ff85410000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +71ff85410000-71ff85415000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +71ff85415000-71ff85440000 rw-p 00000000 00:00 0 +71ff85480000-71ff85500000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff85500000-71ff85600000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff85600000-71ff857c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +71ff857c4000-71ff874c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +71ff874c4000-71ff87b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +71ff87b39000-71ff87b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +71ff87b3a000-71ff87d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +71ff87d1a000-71ff87d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +71ff87d93000-71ff87e08000 rw-p 00000000 00:00 0 +71ff87e2d000-71ff87e40000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff87e40000-71ff87e80000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff87e80000-71ff87ea0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff87ea0000-71ff87ee0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff87ee0000-71ff87f00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff87f00000-71ff88000000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff88000000-71ff883f0000 rw-p 00000000 00:00 0 +71ff883f0000-71ff885b0000 rw-p 00000000 00:00 0 +71ff885b0000-71ff886f0000 rw-p 00000000 00:00 0 +71ff886f0000-71ff88710000 rw-p 00000000 00:00 0 +71ff88710000-71ff88730000 rw-p 00000000 00:00 0 +71ff88730000-71ff88770000 rw-p 00000000 00:00 0 +71ff88770000-71ff889f0000 rw-p 00000000 00:00 0 +71ff889f0000-71ff88a10000 rw-p 00000000 00:00 0 +71ff88a10000-71ff88a30000 rw-p 00000000 00:00 0 +71ff88a30000-71ff88a70000 rw-p 00000000 00:00 0 +71ff88a70000-71ff88af0000 rw-p 00000000 00:00 0 +71ff88af0000-71ff88cf0000 rw-p 00000000 00:00 0 +71ff88cf0000-71ff88d10000 rw-p 00000000 00:00 0 +71ff88d10000-71ff88d30000 rw-p 00000000 00:00 0 +71ff88d30000-71ff88d70000 rw-p 00000000 00:00 0 +71ff88d70000-71ff88ef0000 rw-p 00000000 00:00 0 +71ff88ef0000-71ff88ff0000 rw-p 00000000 00:00 0 +71ff88ff0000-71ff890f0000 rw-p 00000000 00:00 0 +71ff890f0000-71ff89150000 rw-p 00000000 00:00 0 +71ff89150000-71ff89200000 ---p 00000000 00:00 0 +71ff89200000-71ff89410000 rw-p 00000000 00:00 0 +71ff89410000-71ff8c000000 ---p 00000000 00:00 0 +71ff8c000000-71ff8c021000 rw-p 00000000 00:00 0 +71ff8c021000-71ff90000000 ---p 00000000 00:00 0 +71ff90000000-71ff90200000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff90200000-71ff90201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +71ff90201000-71ff90202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +71ff90202000-71ff91e1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +71ff91e1c000-71ff91e1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +71ff91e1d000-71ff91e1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +71ff91e20000-71ff91e60000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff91e60000-71ff91e80000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff91e80000-71ff91f00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff91f00000-71ff92000000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ff92000000-71ff92d91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa +71ff92d91000-71ff93000000 ---p 00000000 00:00 0 +71ff93000000-71ff93030000 rw-p 00000000 00:00 0 +71ff93030000-71ff93090000 rw-p 00000000 00:00 0 +71ff93090000-71ff930b0000 rw-p 00000000 00:00 0 +71ff930b0000-71ff93130000 rw-p 00000000 00:00 0 +71ff93130000-71ff93150000 rw-p 00000000 00:00 0 +71ff93150000-71ff931b0000 rw-p 00000000 00:00 0 +71ff931b0000-71ff931d0000 rw-p 00000000 00:00 0 +71ff931d0000-71ff93230000 rw-p 00000000 00:00 0 +71ff93230000-71ff93250000 rw-p 00000000 00:00 0 +71ff93250000-71ff93280000 ---p 00000000 00:00 0 +71ff93280000-71ff93290000 rw-p 00000000 00:00 0 +71ff93290000-71ffd3000000 ---p 00000000 00:00 0 +71ffd300d000-71ffd304d000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd304d000-71ffd306d000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd306d000-71ffd3080000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd3080000-71ffd30c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd30c0000-71ffd3100000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd3100000-71ffd3200000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd3200000-71ffd326e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +71ffd326e000-71ffd37d5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +71ffd37d5000-71ffd3ee8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +71ffd3ee8000-71ffd3ee9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +71ffd3ee9000-71ffd3f26000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +71ffd3f26000-71ffd3f29000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +71ffd3f29000-71ffd3f2b000 rw-p 00000000 00:00 0 +71ffd3f2d000-71ffd3f4d000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd3f4d000-71ffd3f60000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd3f60000-71ffd3f80000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd3f80000-71ffd3fc0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd3fc0000-71ffd4000000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffd4000000-71ffd4021000 rw-p 00000000 00:00 0 +71ffd4021000-71ffd8000000 ---p 00000000 00:00 0 +71ffd8000000-71ffd8021000 rw-p 00000000 00:00 0 +71ffd8021000-71ffdc000000 ---p 00000000 00:00 0 +71ffdc000000-71ffdc080000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdc080000-71ffdc180000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdc180000-71ffdc200000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdc200000-71ffdc222000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +71ffdc222000-71ffdc421000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +71ffdc421000-71ffdc429000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +71ffdc429000-71ffdc42a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +71ffdc42a000-71ffdc42b000 rw-p 00000000 00:00 0 +71ffdc43a000-71ffdc45a000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdc45a000-71ffdc47a000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdc47a000-71ffdc6bf000 rw-s 00000000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) +71ffdc6bf000-71ffdc800000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index +71ffdc800000-71ffdc893000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +71ffdc893000-71ffdcce6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +71ffdcce6000-71ffdd1fc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +71ffdd1fc000-71ffdd234000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +71ffdd234000-71ffdd244000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +71ffdd244000-71ffdd249000 rw-p 00000000 00:00 0 +71ffdd24c000-71ffdd25f000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdd25f000-71ffdd272000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdd272000-71ffdd2b2000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdd2b2000-71ffdd2d2000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdd2d2000-71ffdd312000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdd312000-71ffdd332000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdd332000-71ffdd372000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdd372000-71ffdd374000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +71ffdd374000-71ffdd37d000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +71ffdd37d000-71ffdd380000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +71ffdd380000-71ffdd381000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +71ffdd381000-71ffdd382000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +71ffdd382000-71ffdd383000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +71ffdd383000-71ffdd385000 rw-p 00000000 00:00 0 +71ffdd385000-71ffdd396000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +71ffdd396000-71ffdd3d8000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +71ffdd3d8000-71ffdd3f0000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +71ffdd3f0000-71ffdd3fe000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +71ffdd3fe000-71ffdd400000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +71ffdd400000-71ffddd22000 rw-p 00000000 00:00 0 +71ffddd26000-71ffddd2a000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +71ffddd2a000-71ffddd3a000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +71ffddd3a000-71ffddd3d000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +71ffddd3d000-71ffddd3e000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +71ffddd3e000-71ffddd3f000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +71ffddd3f000-71ffddd43000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +71ffddd43000-71ffddd5f000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +71ffddd5f000-71ffddd65000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +71ffddd65000-71ffddd66000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +71ffddd66000-71ffddd68000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +71ffddd68000-71ffddd69000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +71ffddd69000-71ffddd6b000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +71ffddd6b000-71ffdddd6000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +71ffdddd6000-71ffdddfe000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +71ffdddfe000-71ffdddff000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +71ffdddff000-71ffdde00000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +71ffdde00000-71ffde041000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +71ffde041000-71ffde062000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +71ffde062000-71ffde200000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +71ffde200000-71ffdee00000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +71ffdee00000-71ffdfcab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +71ffdfcab000-71ffdfe10000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +71ffdfe10000-71ffdfe7e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +71ffdfe7e000-71ffdfe9c000 rw-p 00000000 00:00 0 +71ffdfe9e000-71ffdfea2000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdfea2000-71ffdfec2000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffdfec2000-71ffdfed1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +71ffdfed1000-71ffdffb7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +71ffdffb7000-71ffdfff5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +71ffdfff5000-71ffdfff6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +71ffdfff6000-71ffdfff9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +71ffdfff9000-71ffdffff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +71ffdffff000-71ffe0000000 rw-p 00000000 00:00 0 +71ffe0000000-71ffe0021000 rw-p 00000000 00:00 0 +71ffe0021000-71ffe4000000 ---p 00000000 00:00 0 +71ffe4000000-71ffe4021000 rw-p 00000000 00:00 0 +71ffe4021000-71ffe8000000 ---p 00000000 00:00 0 +71ffe8001000-71ffe8002000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe8002000-71ffe8003000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe8003000-71ffe8005000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe8005000-71ffe8006000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe8006000-71ffe8007000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe8007000-71ffe8011000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +71ffe8011000-71ffe801b000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +71ffe801b000-71ffe8022000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +71ffe8022000-71ffe802b000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +71ffe802b000-71ffe802c000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +71ffe802c000-71ffe8038000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +71ffe8038000-71ffe8058000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +71ffe8058000-71ffe8064000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +71ffe8064000-71ffe806e000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +71ffe806e000-71ffe806f000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +71ffe806f000-71ffe8075000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +71ffe8075000-71ffe808f000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +71ffe808f000-71ffe8096000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +71ffe8096000-71ffe8097000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +71ffe8097000-71ffe8098000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +71ffe8098000-71ffe8099000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +71ffe8099000-71ffe809b000 rw-p 00000000 00:00 0 +71ffe809b000-71ffe80ae000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +71ffe80ae000-71ffe80cd000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +71ffe80cd000-71ffe80da000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +71ffe80da000-71ffe80ea000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +71ffe80ea000-71ffe80eb000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +71ffe80eb000-71ffe80f6000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +71ffe80f6000-71ffe8124000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +71ffe8124000-71ffe8136000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +71ffe8136000-71ffe8137000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +71ffe8137000-71ffe8138000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +71ffe8138000-71ffe8139000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +71ffe8139000-71ffe814c000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +71ffe814c000-71ffe81cb000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +71ffe81cb000-71ffe81f6000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +71ffe81f6000-71ffe81f7000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +71ffe81f7000-71ffe81fe000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +71ffe81fe000-71ffe81ff000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +71ffe81ff000-71ffe8200000 rw-p 00000000 00:00 0 +71ffe8200000-71ffe8216000 r--p 00000000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +71ffe8216000-71ffe8306000 r-xp 00016000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +71ffe8306000-71ffe8379000 r--p 00106000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +71ffe8379000-71ffe8380000 r--p 00178000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +71ffe8380000-71ffe8387000 rw-p 0017f000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +71ffe8387000-71ffe8402000 rw-p 00000000 00:00 0 +71ffe8402000-71ffe8403000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe8403000-71ffe8404000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe8404000-71ffe8405000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe8405000-71ffe8406000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe8406000-71ffe8407000 rw-s 00044000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) +71ffe8407000-71ffe8408000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe8408000-71ffe840c000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe840c000-71ffe840d000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe840d000-71ffe840f000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe840f000-71ffe8410000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe8410000-71ffe8414000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe8414000-71ffe841d000 rw-s 00000000 00:01 668318 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +71ffe841d000-71ffe8450000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +71ffe8450000-71ffe84b3000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +71ffe84b3000-71ffe84d2000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +71ffe84d2000-71ffe84fd000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +71ffe84fd000-71ffe84fe000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +71ffe84fe000-71ffe84ff000 rw-p 00000000 00:00 0 +71ffe84ff000-71ffe8500000 ---p 00000000 00:00 0 +71ffe8500000-71ffe8600000 rw-p 00000000 00:00 0 +71ffe8600000-71ffe8601000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe8601000-71ffe8602000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe8602000-71ffe8604000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe8604000-71ffe8605000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe8605000-71ffe8606000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe8606000-71ffe8608000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe8608000-71ffe8611000 rw-s 00000000 00:01 668317 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +71ffe8611000-71ffe8615000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +71ffe8615000-71ffe862b000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +71ffe862b000-71ffe8635000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +71ffe8635000-71ffe8636000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +71ffe8636000-71ffe8637000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +71ffe8637000-71ffe8639000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +71ffe8639000-71ffe8652000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +71ffe8652000-71ffe8654000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +71ffe8654000-71ffe8655000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +71ffe8655000-71ffe8656000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +71ffe8656000-71ffe8657000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +71ffe8657000-71ffe865b000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe865b000-71ffe865f000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe865f000-71ffe8661000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +71ffe8661000-71ffe8665000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +71ffe8665000-71ffe8667000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +71ffe8667000-71ffe8668000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +71ffe8668000-71ffe8669000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +71ffe8669000-71ffe866b000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +71ffe866b000-71ffe8673000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +71ffe8673000-71ffe8675000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +71ffe8675000-71ffe8676000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +71ffe8676000-71ffe8677000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +71ffe8677000-71ffe86a6000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +71ffe86a6000-71ffe8762000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +71ffe8762000-71ffe87ad000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +71ffe87ad000-71ffe87bb000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +71ffe87bb000-71ffe87bd000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +71ffe87bd000-71ffe87be000 rw-p 00000000 00:00 0 +71ffe87be000-71ffe87c1000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +71ffe87c1000-71ffe87e2000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +71ffe87e2000-71ffe87ee000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +71ffe87ee000-71ffe87ef000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +71ffe87ef000-71ffe87f0000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +71ffe87f0000-71ffe87f1000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +71ffe87f1000-71ffe8857000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +71ffe8857000-71ffe894a000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +71ffe894a000-71ffe89d6000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +71ffe89d6000-71ffe89e9000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +71ffe89e9000-71ffe89ea000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +71ffe89ea000-71ffe89ec000 rw-p 00000000 00:00 0 +71ffe89ec000-71ffe8a1b000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +71ffe8a1b000-71ffe8b6e000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +71ffe8b6e000-71ffe8bc2000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +71ffe8bc2000-71ffe8bc3000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +71ffe8bc3000-71ffe8bcc000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +71ffe8bcc000-71ffe8bcd000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +71ffe8bcd000-71ffe8bce000 rw-p 00000000 00:00 0 +71ffe8bce000-71ffe8bdc000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +71ffe8bdc000-71ffe8bed000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +71ffe8bed000-71ffe8bfb000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +71ffe8bfb000-71ffe8bff000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +71ffe8bff000-71ffe8c00000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +71ffe8c00000-71ffe8c9a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +71ffe8c9a000-71ffe8dab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +71ffe8dab000-71ffe8e1a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +71ffe8e1a000-71ffe8e1b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +71ffe8e1b000-71ffe8e26000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +71ffe8e26000-71ffe8e29000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +71ffe8e29000-71ffe8e2c000 rw-p 00000000 00:00 0 +71ffe8e2c000-71ffe8e2e000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +71ffe8e2e000-71ffe8e36000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +71ffe8e36000-71ffe8e37000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +71ffe8e37000-71ffe8e38000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +71ffe8e38000-71ffe8e39000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +71ffe8e39000-71ffe8e3a000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +71ffe8e3a000-71ffe8e3e000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +71ffe8e3e000-71ffe8e53000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +71ffe8e53000-71ffe8e59000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +71ffe8e59000-71ffe8e5a000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +71ffe8e5a000-71ffe8e5c000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +71ffe8e5c000-71ffe8e5d000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +71ffe8e5d000-71ffe8e65000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +71ffe8e65000-71ffe8e83000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +71ffe8e83000-71ffe8e90000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +71ffe8e90000-71ffe8e92000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +71ffe8e92000-71ffe8e93000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +71ffe8e93000-71ffe8e97000 rw-p 00000000 00:00 0 +71ffe8e97000-71ffe8e99000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +71ffe8e99000-71ffe8ea0000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +71ffe8ea0000-71ffe8ea1000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +71ffe8ea1000-71ffe8ea2000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +71ffe8ea2000-71ffe8ea3000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +71ffe8ea3000-71ffe8ea4000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +71ffe8ea4000-71ffe8ea7000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +71ffe8ea7000-71ffe8ebe000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +71ffe8ebe000-71ffe8ec2000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +71ffe8ec2000-71ffe8ec3000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +71ffe8ec3000-71ffe8ec4000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +71ffe8ec4000-71ffe8ec8000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +71ffe8ec8000-71ffe8ee7000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +71ffe8ee7000-71ffe8ef1000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +71ffe8ef1000-71ffe8ef2000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +71ffe8ef2000-71ffe8ef4000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +71ffe8ef4000-71ffe8ef5000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +71ffe8ef5000-71ffe8efa000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +71ffe8efa000-71ffe8f05000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +71ffe8f05000-71ffe8f09000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +71ffe8f09000-71ffe8f0a000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +71ffe8f0a000-71ffe8f0b000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +71ffe8f0b000-71ffe8f0c000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +71ffe8f0c000-71ffe8f0d000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +71ffe8f0d000-71ffe8f0e000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +71ffe8f0e000-71ffe8f0f000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +71ffe8f0f000-71ffe8f10000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +71ffe8f10000-71ffe8f11000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +71ffe8f11000-71ffe8f12000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +71ffe8f12000-71ffe8f13000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +71ffe8f13000-71ffe8f14000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +71ffe8f14000-71ffe8f15000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +71ffe8f15000-71ffe8f16000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +71ffe8f16000-71ffe8f19000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +71ffe8f19000-71ffe8f1c000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +71ffe8f1c000-71ffe8f1d000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +71ffe8f1d000-71ffe8f1e000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +71ffe8f1e000-71ffe8f1f000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +71ffe8f1f000-71ffe8f20000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +71ffe8f20000-71ffe8f2a000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +71ffe8f2a000-71ffe8fdc000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +71ffe8fdc000-71ffe8fed000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +71ffe8fed000-71ffe8fee000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +71ffe8fee000-71ffe8fef000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +71ffe8fef000-71ffe8ff4000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +71ffe8ff4000-71ffe8ffa000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +71ffe8ffa000-71ffe8ffd000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +71ffe8ffd000-71ffe8fff000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +71ffe8fff000-71ffe9000000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +71ffe9000000-71ffe9001000 ---p 00000000 00:00 0 +71ffe9001000-71ffe9801000 rw-p 00000000 00:00 0 +71ffe9801000-71ffe9802000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffe9802000-71ffe9805000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +71ffe9805000-71ffe9808000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +71ffe9808000-71ffe9809000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +71ffe9809000-71ffe980a000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +71ffe980a000-71ffe980b000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +71ffe980b000-71ffe980c000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +71ffe980c000-71ffe980d000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +71ffe980d000-71ffe980e000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +71ffe980e000-71ffe980f000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +71ffe980f000-71ffe9810000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +71ffe9810000-71ffe9811000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +71ffe9811000-71ffe9814000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +71ffe9814000-71ffe9828000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +71ffe9828000-71ffe982c000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +71ffe982c000-71ffe982d000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +71ffe982d000-71ffe982e000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +71ffe982e000-71ffe982f000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +71ffe982f000-71ffe9832000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +71ffe9832000-71ffe9838000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +71ffe9838000-71ffe983a000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +71ffe983a000-71ffe983b000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +71ffe983b000-71ffe983c000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +71ffe983c000-71ffe984c000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +71ffe984c000-71ffe98aa000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +71ffe98aa000-71ffe98c6000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +71ffe98c6000-71ffe98c7000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +71ffe98c7000-71ffe98cd000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +71ffe98cd000-71ffe98ce000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +71ffe98ce000-71ffe98d6000 rw-p 00000000 00:00 0 +71ffe98d6000-71ffe9927000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +71ffe9927000-71ffe9983000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +71ffe9983000-71ffe99b8000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +71ffe99b8000-71ffe99b9000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +71ffe99b9000-71ffe99d9000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +71ffe99d9000-71ffe99f9000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +71ffe99f9000-71ffe99fe000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +71ffe99fe000-71ffe9a00000 rw-p 00000000 00:00 0 +71ffe9a00000-71ffe9e00000 rw-p 00000000 00:00 0 +71ffe9e00000-71ffe9e01000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe9e01000-71ffe9e02000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffe9e02000-71ffe9e04000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +71ffe9e04000-71ffe9e06000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +71ffe9e06000-71ffe9e07000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +71ffe9e07000-71ffe9e08000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +71ffe9e08000-71ffe9e09000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +71ffe9e09000-71ffe9e10000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +71ffe9e10000-71ffe9e16000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +71ffe9e16000-71ffe9e19000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +71ffe9e19000-71ffe9e1a000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +71ffe9e1a000-71ffe9e1b000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +71ffe9e1b000-71ffe9e1c000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +71ffe9e1c000-71ffe9e27000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +71ffe9e27000-71ffe9e30000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +71ffe9e30000-71ffe9e35000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +71ffe9e35000-71ffe9e36000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +71ffe9e36000-71ffe9e38000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +71ffe9e38000-71ffe9e39000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +71ffe9e39000-71ffe9e3a000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +71ffe9e3a000-71ffe9e3c000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +71ffe9e3c000-71ffe9e3d000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +71ffe9e3d000-71ffe9e3e000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +71ffe9e3e000-71ffe9e3f000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +71ffe9e3f000-71ffe9e45000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +71ffe9e45000-71ffe9e8f000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +71ffe9e8f000-71ffe9eb9000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +71ffe9eb9000-71ffe9eba000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +71ffe9eba000-71ffe9ebb000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +71ffe9ebb000-71ffe9ec2000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache +71ffe9ec2000-71ffe9ec3000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +71ffe9ec3000-71ffe9ec6000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +71ffe9ec6000-71ffe9ec7000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +71ffe9ec7000-71ffe9ec8000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +71ffe9ec8000-71ffe9ec9000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +71ffe9ec9000-71ffe9eca000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +71ffe9eca000-71ffe9ecd000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +71ffe9ecd000-71ffe9ed1000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +71ffe9ed1000-71ffe9ed3000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +71ffe9ed3000-71ffe9ed4000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +71ffe9ed4000-71ffe9ed5000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +71ffe9ed5000-71ffe9ed6000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +71ffe9ed6000-71ffe9ed8000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +71ffe9ed8000-71ffe9ed9000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +71ffe9ed9000-71ffe9eda000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +71ffe9eda000-71ffe9edb000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +71ffe9edb000-71ffe9eeb000 r--p 00000000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +71ffe9eeb000-71ffe9f0c000 r-xp 00010000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +71ffe9f0c000-71ffe9f48000 r--p 00031000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +71ffe9f48000-71ffe9f4c000 r--p 0006c000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +71ffe9f4c000-71ffe9f4f000 rw-p 00070000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +71ffe9f4f000-71ffe9f72000 rw-p 00000000 00:00 0 +71ffe9f72000-71ffe9f76000 ---p 00000000 00:00 0 +71ffe9f76000-71ffea072000 rw-p 00000000 00:00 0 +71ffea072000-71ffea076000 ---p 00000000 00:00 0 +71ffea076000-71ffea172000 rw-p 00000000 00:00 0 +71ffea172000-71ffea173000 ---p 00000000 00:00 0 +71ffea173000-71ffea273000 rw-p 00000000 00:00 0 +71ffea273000-71ffea274000 ---p 00000000 00:00 0 +71ffea274000-71ffea374000 rw-p 00000000 00:00 0 +71ffea374000-71ffea375000 ---p 00000000 00:00 0 +71ffea375000-71ffea475000 rw-p 00000000 00:00 0 +71ffea475000-71ffea476000 ---p 00000000 00:00 0 +71ffea476000-71ffea576000 rw-p 00000000 00:00 0 +71ffea576000-71ffea577000 ---p 00000000 00:00 0 +71ffea577000-71ffea677000 rw-p 00000000 00:00 0 +71ffea677000-71ffea678000 ---p 00000000 00:00 0 +71ffea678000-71ffea778000 rw-p 00000000 00:00 0 +71ffea778000-71ffea77c000 ---p 00000000 00:00 0 +71ffea77c000-71ffea878000 rw-p 00000000 00:00 0 +71ffea878000-71ffea978000 rw-s 00000000 00:01 983093 /SYSV00000000 (deleted) +71ffea978000-71ffea97c000 ---p 00000000 00:00 0 +71ffea97c000-71ffeaa78000 rw-p 00000000 00:00 0 +71ffeaa78000-71ffeaa7c000 ---p 00000000 00:00 0 +71ffeaa7c000-71ffeab78000 rw-p 00000000 00:00 0 +71ffeab78000-71ffeab7c000 ---p 00000000 00:00 0 +71ffeab7c000-71ffeac78000 rw-p 00000000 00:00 0 +71ffeac78000-71ffeac7c000 ---p 00000000 00:00 0 +71ffeac7c000-71ffead78000 rw-p 00000000 00:00 0 +71ffead78000-71ffead7c000 ---p 00000000 00:00 0 +71ffead7c000-71ffeae78000 rw-p 00000000 00:00 0 +71ffeae78000-71ffeae7c000 ---p 00000000 00:00 0 +71ffeae7c000-71ffeaf78000 rw-p 00000000 00:00 0 +71ffeaf78000-71ffeaf7a000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +71ffeaf7a000-71ffeaf7d000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +71ffeaf7d000-71ffeaf7e000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +71ffeaf7e000-71ffeaf7f000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +71ffeaf7f000-71ffeaf80000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +71ffeaf80000-71ffeaf82000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +71ffeaf82000-71ffeaf88000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +71ffeaf88000-71ffeaf8a000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +71ffeaf8a000-71ffeaf8b000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +71ffeaf8b000-71ffeaf8c000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +71ffeaf8c000-71ffeaf8d000 r--p 00000000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +71ffeaf8d000-71ffeaf8e000 r-xp 00001000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +71ffeaf8e000-71ffeafad000 r--p 00002000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +71ffeafad000-71ffeafae000 r--p 00020000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +71ffeafae000-71ffeafaf000 rw-p 00021000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +71ffeafaf000-71ffeafb0000 r--p 00000000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +71ffeafb0000-71ffeafb8000 r-xp 00001000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +71ffeafb8000-71ffeafbb000 r--p 00009000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +71ffeafbb000-71ffeafbc000 r--p 0000b000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +71ffeafbc000-71ffeafbd000 rw-p 0000c000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +71ffeafbd000-71ffeafc2000 r--p 00000000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +71ffeafc2000-71ffeafeb000 r-xp 00005000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +71ffeafeb000-71ffeaff6000 r--p 0002e000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +71ffeaff6000-71ffeaff7000 r--p 00038000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +71ffeaff7000-71ffeaff8000 rw-p 00039000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +71ffeaff8000-71ffeb005000 r--p 00000000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +71ffeb005000-71ffeb08e000 r-xp 0000d000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +71ffeb08e000-71ffeb0b7000 r--p 00096000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +71ffeb0b7000-71ffeb0b8000 ---p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +71ffeb0b8000-71ffeb0bf000 r--p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +71ffeb0bf000-71ffeb0c0000 rw-p 000c6000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +71ffeb0c0000-71ffeb241000 r-xp 00000000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +71ffeb241000-71ffeb242000 ---p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +71ffeb242000-71ffeb244000 r--p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +71ffeb244000-71ffeb245000 rw-p 00183000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +71ffeb245000-71ffeb246000 rw-p 00000000 00:00 0 +71ffeb246000-71ffeb25f000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +71ffeb25f000-71ffeb2eb000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +71ffeb2eb000-71ffeb380000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +71ffeb380000-71ffeb381000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +71ffeb381000-71ffeb382000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +71ffeb382000-71ffeb386000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +71ffeb386000-71ffeb3f6000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +71ffeb3f6000-71ffeb3f7000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +71ffeb3f7000-71ffeb3fc000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +71ffeb3fc000-71ffeb3fe000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +71ffeb3fe000-71ffeb400000 rw-p 00000000 00:00 0 +71ffeb400000-71ffebc00000 rw-p 00000000 00:00 0 +71ffebc00000-71ffebc08000 r--p 00000000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +71ffebc08000-71ffebc60000 r-xp 00008000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +71ffebc60000-71ffebc71000 r--p 00060000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +71ffebc71000-71ffebc72000 ---p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +71ffebc72000-71ffebc78000 r--p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +71ffebc78000-71ffebc79000 rw-p 00077000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +71ffebc79000-71ffebe83000 rw-p 00000000 00:00 0 +71ffebe83000-71ffebe84000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71ffebe84000-71ffebe85000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71ffebe85000-71ffebe87000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +71ffebe87000-71ffebe8e000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +71ffebe8e000-71ffebe90000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +71ffebe90000-71ffebe91000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +71ffebe91000-71ffebe92000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +71ffebe92000-71ffebf53000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +71ffebf53000-71ffebf54000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +71ffebf54000-71ffebf5f000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +71ffebf5f000-71ffebf84000 rw-p 00000000 00:00 0 +71ffebf84000-71ffebfb0000 r--p 00000000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +71ffebfb0000-71ffebfe4000 r-xp 0002c000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +71ffebfe4000-71ffebffe000 r--p 00060000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +71ffebffe000-71ffebfff000 r--p 00079000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +71ffebfff000-71ffec000000 rw-p 0007a000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +71ffec000000-71ffec021000 rw-p 00000000 00:00 0 +71ffec021000-71fff0000000 ---p 00000000 00:00 0 +71fff0000000-71fff0004000 ---p 00000000 00:00 0 +71fff0004000-71fff0100000 rw-p 00000000 00:00 0 +71fff0100000-71fff0104000 ---p 00000000 00:00 0 +71fff0104000-71fff0200000 rw-p 00000000 00:00 0 +71fff0200000-71fff0204000 ---p 00000000 00:00 0 +71fff0204000-71fff0300000 rw-p 00000000 00:00 0 +71fff0300000-71fff0304000 ---p 00000000 00:00 0 +71fff0304000-71fff0400000 rw-p 00000000 00:00 0 +71fff0400000-71fff0404000 ---p 00000000 00:00 0 +71fff0404000-71fff0500000 rw-p 00000000 00:00 0 +71fff0500000-71fff0504000 ---p 00000000 00:00 0 +71fff0504000-71fff0600000 rw-p 00000000 00:00 0 +71fff0600000-71fff0604000 ---p 00000000 00:00 0 +71fff0604000-71fff0700000 rw-p 00000000 00:00 0 +71fff0700000-71fff0704000 ---p 00000000 00:00 0 +71fff0704000-71fff0800000 rw-p 00000000 00:00 0 +71fff0800000-71fff1706000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive +71fff1706000-71fff170a000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71fff170a000-71fff170b000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +71fff170b000-71fff170c000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +71fff170c000-71fff170d000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +71fff170d000-71fff170e000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +71fff170e000-71fff170f000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +71fff170f000-71fff1713000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +71fff1713000-71fff1720000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +71fff1720000-71fff1723000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +71fff1723000-71fff1724000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +71fff1724000-71fff1725000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +71fff1725000-71fff1726000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +71fff1726000-71fff1727000 rw-p 00000000 00:00 0 +71fff1727000-71fff1729000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +71fff1729000-71fff172b000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +71fff172b000-71fff172d000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +71fff172d000-71fff172e000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +71fff172e000-71fff172f000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +71fff172f000-71fff17fd000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +71fff17fd000-71fff17fe000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +71fff17fe000-71fff17ff000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +71fff17ff000-71fff1803000 ---p 00000000 00:00 0 +71fff1803000-71fff18ff000 rw-p 00000000 00:00 0 +71fff18ff000-71fff1900000 ---p 00000000 00:00 0 +71fff1900000-71fff1a00000 rw-p 00000000 00:00 0 +71fff1a00000-71fff3a70000 rw-p 00000000 00:00 0 +71fff3a70000-71fffb700000 ---p 00000000 00:00 0 +71fffb700000-71fffb704000 ---p 00000000 00:00 0 +71fffb704000-71fffb800000 rw-p 00000000 00:00 0 +71fffb800000-71fffb80e000 rw-p 00000000 00:00 0 +71fffb80e000-71fffc7a0000 ---p 00000000 00:00 0 +71fffc7a0000-71fffc7a2000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71fffc7a2000-71fffc7ad000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +71fffc7ad000-71fffc7c1000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +71fffc7c1000-71fffc7ca000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +71fffc7ca000-71fffc7cb000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +71fffc7cb000-71fffc7cc000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +71fffc7cc000-71fffc7cf000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +71fffc7cf000-71fffc7db000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +71fffc7db000-71fffc7de000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +71fffc7de000-71fffc7df000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +71fffc7df000-71fffc7e0000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +71fffc7e0000-71fffc7e1000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71fffc7e1000-71fffc7e2000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71fffc7e2000-71fffc7e3000 rw-s 00000000 00:06 1022 /dev/nvidia0 +71fffc7e3000-71fffc7e4000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +71fffc7e4000-71fffc7e5000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +71fffc7e5000-71fffc7e6000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +71fffc7e6000-71fffc7e7000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +71fffc7e7000-71fffc7e8000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +71fffc7e8000-71fffc7e9000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +71fffc7e9000-71fffc7ec000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +71fffc7ec000-71fffc7ed000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +71fffc7ed000-71fffc7ee000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +71fffc7ee000-71fffc7ef000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +71fffc7ef000-71fffc7f1000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +71fffc7f1000-71fffc7f8000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +71fffc7f8000-71fffc7fa000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +71fffc7fa000-71fffc7fb000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +71fffc7fb000-71fffc7fc000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +71fffc7fc000-71fffc7fd000 r-xp 00000000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +71fffc7fd000-71fffc7fe000 ---p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +71fffc7fe000-71fffc7ff000 r--p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +71fffc7ff000-71fffc800000 rw-p 00002000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +71fffc800000-71fffca90000 rwxp 00000000 00:00 0 +71fffca90000-720003d37000 ---p 00000000 00:00 0 +720003d37000-720003fb7000 rwxp 00000000 00:00 0 +720003fb7000-7200042c8000 ---p 00000000 00:00 0 +7200042c8000-720004538000 rwxp 00000000 00:00 0 +720004538000-72000b800000 ---p 00000000 00:00 0 +72000b800000-720013fb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules +720013fb5000-720013fb6000 rw-s 00000000 00:06 1017 /dev/nvidiactl +720013fb6000-720013fb7000 rw-s 00000000 00:06 1017 /dev/nvidiactl +720013fb7000-720013fb9000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +720013fb9000-720013fbc000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +720013fbc000-720013fbd000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +720013fbd000-720013fbe000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +720013fbe000-720013fbf000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +720013fbf000-720013ffd000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +720013ffd000-720013ffe000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +720013ffe000-720013fff000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +720013fff000-720014000000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +720014000000-7200146d9000 rw-p 00000000 00:00 0 +7200146d9000-720018000000 ---p 00000000 00:00 0 +720018000000-720018001000 r--s 00000000 00:06 1017 /dev/nvidiactl +720018001000-720018002000 rw-s 00000000 00:01 1028 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +720018002000-720018006000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +720018006000-720018011000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +720018011000-720018015000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +720018015000-720018016000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +720018016000-720018017000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +720018017000-720018018000 ---p 00000000 00:00 0 +720018018000-720018118000 rw-p 00000000 00:00 0 +720018118000-7200181f4000 rw-p 00000000 00:00 0 +7200181f4000-7200181f5000 ---p 00000000 00:00 0 +7200181f5000-7200182f5000 rw-p 00000000 00:00 0 +7200182f5000-7200182f6000 ---p 00000000 00:00 0 +7200182f6000-7200183f6000 rw-p 00000000 00:00 0 +7200183f6000-720018bfe000 rw-p 00000000 00:00 0 +720018bfe000-720018bff000 ---p 00000000 00:00 0 +720018bff000-720018cff000 rw-p 00000000 00:00 0 +720018cff000-720018d00000 ---p 00000000 00:00 0 +720018d00000-720018e00000 rw-p 00000000 00:00 0 +720018e00000-720018e0e000 rw-p 00000000 00:00 0 +720018e0e000-720019da0000 ---p 00000000 00:00 0 +720019da0000-720019da1000 ---p 00000000 00:00 0 +720019da1000-720019ea1000 rw-p 00000000 00:00 0 +720019ea1000-72001a72f000 rw-p 00000000 00:00 0 +72001a72f000-72001a815000 ---p 00000000 00:00 0 +72001a815000-72001a81b000 rw-p 00000000 00:00 0 +72001a81b000-72001a900000 ---p 00000000 00:00 0 +72001a900000-72001a904000 ---p 00000000 00:00 0 +72001a904000-72001aa00000 rw-p 00000000 00:00 0 +72001aa00000-72001bd30000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +72001bd30000-72001be00000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +72001be00000-72001be2e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +72001be2e000-72001bea4000 rw-p 00000000 00:00 0 +72001bea4000-72001bea5000 rw-s 00000000 00:01 668316 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) +72001bea5000-72001bea6000 rw-s 00000000 00:01 668315 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +72001bea6000-72001bea7000 rw-s 00000000 00:01 668314 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +72001bea7000-72001bea9000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +72001bea9000-72001beb0000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +72001beb0000-72001beb2000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +72001beb2000-72001beb3000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +72001beb3000-72001beb4000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +72001beb4000-72001bebf000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +72001bebf000-72001bec0000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +72001bec0000-72001bec1000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +72001bec1000-72001bec2000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +72001bec2000-72001bed5000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +72001bed5000-72001bed6000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +72001bed6000-72001bed7000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +72001bed7000-72001bed8000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +72001bed8000-72001bf19000 rw-p 00000000 00:00 0 +72001bf19000-72001bf27000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +72001bf27000-72001bfa3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +72001bfa3000-72001bffe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +72001bffe000-72001bfff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +72001bfff000-72001c000000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +72001c000000-72001c028000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +72001c028000-72001c1bd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +72001c1bd000-72001c215000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +72001c215000-72001c216000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +72001c216000-72001c21a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +72001c21a000-72001c21c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +72001c21c000-72001c229000 rw-p 00000000 00:00 0 +72001c229000-72001c22a000 r-xp 00000000 00:00 0 +72001c22a000-72001c22b000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +72001c22b000-72001c22d000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +72001c22d000-72001c22e000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +72001c22e000-72001c22f000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +72001c22f000-72001c230000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +72001c230000-72001c231000 rw-p 00000000 00:00 0 +72001c231000-72001c232000 r-xp 0005e000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +72001c232000-72001c2b1000 rw-p 00000000 00:00 0 +72001c2b1000-72001c2d1000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +72001c2d1000-72001c2d2000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +72001c2d2000-72001c2d3000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +72001c2d3000-72001c2d4000 rw-p 00000000 00:00 0 +72001c2d4000-72001c2f2000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +72001c2f2000-72001c2f4000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +72001c2f4000-72001c2f5000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +72001c2f5000-72001c2f6000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +72001c2f6000-72001c2f7000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +72001c2f7000-72001c2f8000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +72001c2f8000-72001c2f9000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +72001c2f9000-72001c2fa000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +72001c2fa000-72001c2fe000 rw-p 00000000 00:00 0 +72001c2fe000-72001c2ff000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +72001c2ff000-72001c300000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +72001c300000-72001c301000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +72001c301000-72001c302000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +72001c302000-72001c303000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +72001c303000-72001c304000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +72001c304000-72001c305000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +72001c305000-72001c306000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +72001c306000-72001c307000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +72001c307000-72001c308000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +72001c308000-72001c30a000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +72001c30a000-72001c31b000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +72001c31b000-72001c321000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +72001c321000-72001c322000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +72001c322000-72001c323000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +72001c323000-72001c324000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +72001c324000-72001c32b000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +72001c32b000-72001c32c000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +72001c32c000-72001c32d000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +72001c32d000-72001c32e000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +72001c32e000-72001c333000 rw-p 00000000 00:00 0 +72001c333000-72001c33a000 ---p 00000000 00:00 0 +72001c33a000-72001c342000 rw-s 00000000 103:03 4325444 /tmp/hsperfdata_codex/84939 +72001c342000-72001c343000 ---p 00000000 00:00 0 +72001c343000-72001c344000 r--p 00000000 00:00 0 +72001c344000-72001c353000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +72001c353000-72001c354000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +72001c354000-72001c355000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +72001c355000-72001c357000 rw-p 00000000 00:00 0 +72001c357000-72001c35b000 r--p 00000000 00:00 0 [vvar] +72001c35b000-72001c35d000 r-xp 00000000 00:00 0 [vdso] +72001c35d000-72001c35f000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +72001c35f000-72001c389000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +72001c389000-72001c394000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +72001c394000-72001c395000 ---p 00000000 00:00 0 +72001c395000-72001c397000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +72001c397000-72001c399000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7ffc09f44000-7ffc09f67000 rw-p 00000000 00:00 0 [stack] +ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] +Total number of mappings: 923 + + +VM Arguments: +jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant +java_command: jme3test.vulkan.VulkanTest +java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar +Launcher Type: SUN_STANDARD + +[Global flags] + intx CICompilerCount = 4 {product} {ergonomic} + uint ConcGCThreads = 2 {product} {ergonomic} + uint G1ConcRefinementThreads = 8 {product} {ergonomic} + size_t G1HeapRegionSize = 4194304 {product} {ergonomic} + size_t InitialHeapSize = 524288000 {product} {ergonomic} + size_t MarkStackSize = 4194304 {product} {ergonomic} + size_t MarkStackSizeMax = 536870912 {product} {ergonomic} + size_t MaxHeapSize = 8388608000 {product} {ergonomic} + size_t MaxNewSize = 5033164800 {product} {ergonomic} + size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} + size_t MinHeapSize = 8388608 {product} {ergonomic} + uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} + uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} + uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} + uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} + bool SegmentedCodeCache = true {product} {ergonomic} + size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} + bool UseCompressedOops = true {product lp64_product} {ergonomic} + bool UseG1GC = true {product} {ergonomic} + +Logging: +Log output configuration: + #0: stdout all=warning uptime,level,tags foldmultilines=false + #1: stderr all=off uptime,level,tags foldmultilines=false + +Environment Variables: +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin +USERNAME=codex +SHELL=/bin/bash +DISPLAY=:1 +LANG=en_US.UTF-8 + +Active Locale: +LC_ALL=en_US.UTF-8 +LC_COLLATE=en_US.UTF-8 +LC_CTYPE=en_US.UTF-8 +LC_MESSAGES=en_US.UTF-8 +LC_MONETARY=en_US.UTF-8 +LC_NUMERIC=en_US.UTF-8 +LC_TIME=en_US.UTF-8 + +Signal Handlers: + SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked + SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + + +Periodic native trim disabled + +--------------- S Y S T E M --------------- + +OS: +DISTRIB_ID=Pop +DISTRIB_RELEASE=22.04 +DISTRIB_CODENAME=jammy +DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" +uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 +OS uptime: 0 days 15:15 hours +libc: glibc 2.35 NPTL 2.35 +rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k +load average: 1.24 0.88 0.84 + +/proc/meminfo: +MemTotal: 32767652 kB +MemFree: 20132288 kB +MemAvailable: 23534048 kB +Buffers: 347160 kB +Cached: 5008804 kB +SwapCached: 0 kB +Active: 8769136 kB +Inactive: 2812368 kB +Active(anon): 6258988 kB +Inactive(anon): 0 kB +Active(file): 2510148 kB +Inactive(file): 2812368 kB +Unevictable: 15204 kB +Mlocked: 72 kB +SwapTotal: 20970996 kB +SwapFree: 20970996 kB +Zswap: 0 kB +Zswapped: 0 kB +Dirty: 832 kB +Writeback: 0 kB +AnonPages: 6241144 kB +Mapped: 1824364 kB +Shmem: 33440 kB +KReclaimable: 197352 kB +Slab: 385632 kB +SReclaimable: 197352 kB +SUnreclaim: 188280 kB +KernelStack: 22608 kB +PageTables: 54196 kB +SecPageTables: 0 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 37354820 kB +Committed_AS: 12287808 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 252112 kB +VmallocChunk: 0 kB +Percpu: 9472 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 6144 kB +ShmemPmdMapped: 0 kB +FileHugePages: 0 kB +FilePmdMapped: 0 kB +Unaccepted: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +Hugetlb: 0 kB +DirectMap4k: 851768 kB +DirectMap2M: 15826944 kB +DirectMap1G: 16777216 kB + +/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never +/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 +/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force +/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never + +Process Memory: +Virtual Size: 13445252K (peak: 13510788K) +Resident Set Size: 309200K (peak: 309200K) (anon: 165796K, file: 142380K, shmem: 1024K) +Swapped out: 0K +C-Heap outstanding allocations: 84790K, retained: 22997K +glibc malloc tunables: (default) + +/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 +/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 +/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 +/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 + +container (cgroup) information: +container_type: cgroupv2 +cpu_cpuset_cpus: not supported +cpu_memory_nodes: not supported +active_processor_count: 8 +cpu_quota: not supported +cpu_period: not supported +cpu_shares: not supported +memory_limit_in_bytes: unlimited +memory_and_swap_limit_in_bytes: unlimited +memory_soft_limit_in_bytes: 0 +memory_usage_in_bytes: 5924904 k +memory_max_usage_in_bytes: not supported +rss_usage_in_bytes: 3518740 k +cache_usage_in_bytes: 2323460 k +memory_swap_current_in_bytes: 0 +memory_swap_max_limit_in_bytes: unlimited +maximum number of tasks: 38296 +current number of tasks: 317 + +Steal ticks since vm start: 0 +Steal ticks percentage since vm start: 0.000 + +CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c +CPU Model and flags from /proc/cpuinfo: +model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities + +Online cpus: 0-7 +Offline cpus: +BIOS frequency limitation: +Frequency switch latency (ns): 0 +Available cpu frequencies: +Current governor: powersave +Core performance/turbo boost: + +Memory: 4k page, physical 32767652k(23534048k free), swap 20970996k(20970996k free) +Page Sizes: 4k + +vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 + +END. diff --git a/hs_err_pid85302.log b/hs_err_pid85302.log new file mode 100644 index 0000000000..3c641b6200 --- /dev/null +++ b/hs_err_pid85302.log @@ -0,0 +1,1596 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x00007177b465933a, pid=85302, tid=85350 +# +# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) +# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) +# Problematic frame: +# C [libjemalloc.so+0x5933a] +# +# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.85302) +# +# If you would like to submit a bug report, please visit: +# https://bugreport.java.com/bugreport/crash.jsp +# + +--------------- S U M M A R Y ------------ + +Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanTest + +Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS +Time: Thu Jun 26 22:34:55 2025 EDT elapsed time: 6.953641 seconds (0d 0h 0m 6s) + +--------------- T H R E A D --------------- + +Current thread is native thread + +Stack: [0x00007177aa9ac000,0x00007177aaaac000], sp=0x00007177aaaaa8d0, free space=1018k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libjemalloc.so+0x5933a] + +siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 + +Registers: +RAX=0x0000000000000000, RBX=0x0000000000000200, RCX=0x0000000000000000, RDX=0x00007177b4678440 +RSP=0x00007177aaaaa8d0, RBP=0x00007177aaaaadb0, RSI=0x0000000000000000, RDI=0x00007177abd55580 +R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x00007177abd555c0 +R12=0x000000000000003f, R13=0x00007177aaaaad70, R14=0x000000000000003f, R15=0x00007177aaaaaad0 +RIP=0x00007177b465933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 + TRAPNO=0x000000000000000e + + +Top of Stack: (sp=0x00007177aaaaa8d0) +0x00007177aaaaa8d0: 00007177dc4d8680 00007177aaaaa960 +0x00007177aaaaa8e0: 00007177aaaaa970 00007177e4f05211 +0x00007177aaaaa8f0: 0000000000000005 00007177dc4d8878 +0x00007177aaaaa900: 0000000000000005 0000000000000000 +0x00007177aaaaa910: 0000000000000001 00007177dc4d8310 +0x00007177aaaaa920: 00007177dc4d8878 00007177dc4d8310 +0x00007177aaaaa930: 00000001cbd3f020 00007177dc4d8680 +0x00007177aaaaa940: 0000000000000000 3737313700000000 +0x00007177aaaaa950: 3062636400000000 aa8a397500000004 +0x00007177aaaaa960: 00000000ffffffff 0000000000000000 +0x00007177aaaaa970: 00007177e4c0d4d0 00007177e4ef27c0 +0x00007177aaaaa980: 00007177aaaaa9b0 00007177e4678613 +0x00007177aaaaa990: 00007177aaaaab88 00007177e4c8849a +0x00007177aaaaa9a0: 0000000000000000 00007177aaaaaaa0 +0x00007177aaaaa9b0: 00000000fbad8001 0000000000000002 +0x00007177aaaaa9c0: 00007177dc4d8310 00007177b5fff028 +0x00007177aaaaa9d0: 00007177e4e1cae8 0000000000000004 +0x00007177aaaaa9e0: 00007177aaaabb58 00007177e4f0bf71 +0x00007177aaaaa9f0: 0000000000000005 0000000000000000 +0x00007177aaaaaa00: 00007177e4c0d4d0 00007177e4ca53e0 +0x00007177aaaaaa10: 0000000000000000 00007177aaaaae00 +0x00007177aaaaaa20: 00007177e4e1caf8 0000000000000000 +0x00007177aaaaaa30: 00007177e4e1cae8 00007177e4f0edae +0x00007177aaaaaa40: 0000000000000001 000000000000006f +0x00007177aaaaaa50: 00007177b5fb17d0 0000000000000000 +0x00007177aaaaaa60: 00007176b0b8aaa0 0000000000000000 +0x00007177aaaaaa70: 00000000000000ca 68751852672165a1 +0x00007177aaaaaa80: 0000000000000213 00007177e4e17300 +0x00007177aaaaaa90: 0000000000000000 0000000000000200 +0x00007177aaaaaaa0: 00007177aaaaadb0 000000000000003f +0x00007177aaaaaab0: 00007177aaaaad70 00007177aaaaaad0 +0x00007177aaaaaac0: 00007176b00024d0 00007177b46592f8 + +Instructions: (pc=0x00007177b465933a) +0x00007177b465923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff +0x00007177b465924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 +0x00007177b465925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 +0x00007177b465926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c +0x00007177b465927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b +0x00007177b465928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 +0x00007177b465929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 +0x00007177b46592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 +0x00007177b46592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 +0x00007177b46592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d +0x00007177b46592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c +0x00007177b46592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 +0x00007177b46592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b +0x00007177b465930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 +0x00007177b465931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 +0x00007177b465932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 +0x00007177b465933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 +0x00007177b465934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c +0x00007177b465935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 +0x00007177b465936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 +0x00007177b465937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c +0x00007177b465938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 +0x00007177b465939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 +0x00007177b46593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d +0x00007177b46593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 +0x00007177b46593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f +0x00007177b46593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 +0x00007177b46593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 +0x00007177b46593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 +0x00007177b465940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff +0x00007177b465941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 +0x00007177b465942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 + + + +--------------- P R O C E S S --------------- + +VM state: not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: None + +Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 + +CDS archive(s) mapped at: [0x000071775e000000-0x000071775ed91000-0x000071775ed91000), size 14225408, SharedBaseAddress: 0x000071775e000000, ArchiveRelocationMode: 1. +Compressed class space mapped at: 0x000071775f000000-0x000071779f000000, reserved size: 1073741824 +Narrow klass base: 0x000071775e000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 + +GC Precious Log: + + +Heap: + garbage-first heap total reserved 8192000K, committed 28672K, used 14737K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 3 young (12288K), 1 survivors (4096K) + Metaspace used 22132K, committed 22464K, reserved 1114112K + class space used 2300K, committed 2432K, reserved 1048576K + +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|0x000000060c000000, 0x000000060c367560, 0x000000060c400000| 85%| O| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 +| 1|0x000000060c400000, 0x000000060c6cd070, 0x000000060c800000| 70%| O| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 +| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 +| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 +| 4|0x000000060d000000, 0x000000060d2f1650, 0x000000060d400000| 73%| E| |TAMS 0x000000060d000000| PB 0x000000060d000000| Complete | 0 +| 5|0x000000060d400000, 0x000000060d53e8d0, 0x000000060d800000| 31%| S|CS|TAMS 0x000000060d400000| PB 0x000000060d400000| Complete | 0 +| 6|0x000000060d800000, 0x000000060dc00000, 0x000000060dc00000|100%| E|CS|TAMS 0x000000060d800000| PB 0x000000060d800000| Complete | 0 + +Card table byte_map: [0x00007177e0a00000,0x00007177e19a0000] _byte_map_base: 0x00007177dd9a0000 + +Marking Bits: (CMBitMap*) 0x00007177dc059190 + Bits: [0x00007177bca00000, 0x00007177c4700000) + +Polling page: 0x00007177e4ede000 + +Metaspace: + +Usage: + Non-class: 19.37 MB used. + Class: 2.25 MB used. + Both: 21.61 MB used. + +Virtual space: + Non-class space: 64.00 MB reserved, 19.56 MB ( 31%) committed, 1 nodes. + Class space: 1.00 GB reserved, 2.38 MB ( <1%) committed, 1 nodes. + Both: 1.06 GB reserved, 21.94 MB ( 2%) committed. + +Chunk freelists: + Non-Class: 11.89 MB + Class: 13.44 MB + Both: 25.33 MB + +MaxMetaspaceSize: unlimited +CompressedClassSpaceSize: 1.00 GB +Initial GC threshold: 21.00 MB +Current GC threshold: 27.12 MB +CDS: on + - commit_granule_bytes: 65536. + - commit_granule_words: 8192. + - virtual_space_node_default_size: 8388608. + - enlarge_chunks_in_place: 1. + - use_allocation_guard: 0. + + +Internal statistics: + +num_allocs_failed_limit: 0. +num_arena_births: 334. +num_arena_deaths: 0. +num_vsnodes_births: 2. +num_vsnodes_deaths: 0. +num_space_committed: 351. +num_space_uncommitted: 0. +num_chunks_returned_to_freelist: 0. +num_chunks_taken_from_freelist: 689. +num_chunk_merges: 0. +num_chunk_splits: 437. +num_chunks_enlarged: 282. +num_inconsistent_stats: 0. + +CodeHeap 'non-profiled nmethods': size=120032Kb used=733Kb max_used=733Kb free=119298Kb + bounds [0x00007177cc2c8000, 0x00007177cc538000, 0x00007177d3800000] +CodeHeap 'profiled nmethods': size=120028Kb used=2878Kb max_used=2878Kb free=117149Kb + bounds [0x00007177c4800000, 0x00007177c4ad0000, 0x00007177cbd37000] +CodeHeap 'non-nmethods': size=5700Kb used=2461Kb max_used=2497Kb free=3238Kb + bounds [0x00007177cbd37000, 0x00007177cbfb7000, 0x00007177cc2c8000] +CodeCache: size=245760Kb, used=6072Kb, max_used=6108Kb, free=239685Kb + total_blobs=3783, nmethods=2349, adapters=1341, full_count=0 +Compilation: enabled, stopped_count=0, restarted_count=0 + +Compilation events (20 events): +Event: 6.566 Thread 0x00007177dc13eed0 2473 4 org.lwjgl.vulkan.VkSubmitInfo::sizeof (4 bytes) +Event: 6.567 Thread 0x00007177dc13eed0 nmethod 2473 0x00007177cc37f188 code [0x00007177cc37f280, 0x00007177cc37f300] +Event: 6.783 Thread 0x00007177dc13eed0 2474 4 org.lwjgl.system.MemoryStack::nmalloc (61 bytes) +Event: 6.783 Thread 0x00007177dc13eed0 nmethod 2474 0x00007177cc37f488 code [0x00007177cc37f580, 0x00007177cc37f638] +Event: 6.817 Thread 0x00007177dc1405e0 2475 3 org.lwjgl.PointerBuffer:: (15 bytes) +Event: 6.817 Thread 0x00007177dc1405e0 nmethod 2475 0x00007177c4aca708 code [0x00007177c4aca860, 0x00007177c4acac40] +Event: 6.833 Thread 0x00007177dc1405e0 2476 3 org.lwjgl.PointerBuffer::sizeof (4 bytes) +Event: 6.833 Thread 0x00007177dc1405e0 nmethod 2476 0x00007177c4acac88 code [0x00007177c4acada0, 0x00007177c4acaea8] +Event: 6.833 Thread 0x00007177dc1405e0 2477 3 java.lang.ThreadLocal$ThreadLocalMap::set (133 bytes) +Event: 6.834 Thread 0x00007177dc1405e0 nmethod 2477 0x00007177c4acaf88 code [0x00007177c4acb1a0, 0x00007177c4acbe48] +Event: 6.834 Thread 0x00007177dc1405e0 2480 3 jdk.internal.misc.Blocker::begin (38 bytes) +Event: 6.834 Thread 0x00007177dc1405e0 nmethod 2480 0x00007177c4acbf08 code [0x00007177c4acc080, 0x00007177c4acc768] +Event: 6.834 Thread 0x00007177dc1405e0 2478 3 java.io.BufferedOutputStream::implWrite (71 bytes) +Event: 6.835 Thread 0x00007177dc1405e0 nmethod 2478 0x00007177c4acc808 code [0x00007177c4acc9a0, 0x00007177c4acd038] +Event: 6.835 Thread 0x00007177dc1405e0 2479 ! 3 java.lang.System$Out::write (31 bytes) +Event: 6.835 Thread 0x00007177dc1405e0 nmethod 2479 0x00007177c4acd088 code [0x00007177c4acd240, 0x00007177c4acd998] +Event: 6.866 Thread 0x00007177dc1405e0 2481 3 org.lwjgl.PointerBuffer::create (14 bytes) +Event: 6.867 Thread 0x00007177dc1405e0 nmethod 2481 0x00007177c4acda08 code [0x00007177c4acdb20, 0x00007177c4acdcd0] +Event: 6.950 Thread 0x00007177dc1405e0 2482 3 org.lwjgl.PointerBuffer::put (14 bytes) +Event: 6.950 Thread 0x00007177dc1405e0 nmethod 2482 0x00007177c4acdd08 code [0x00007177c4acde40, 0x00007177c4ace070] + +GC Heap History (8 events): +Event: 2.386 GC heap before +{Heap before GC invocations=0 (full 0): + garbage-first heap total reserved 8192000K, committed 516096K, used 21627K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 6 young (24576K), 0 survivors (0K) + Metaspace used 16364K, committed 16640K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.396 GC heap after +{Heap after GC invocations=1 (full 1): + garbage-first heap total reserved 8192000K, committed 98304K, used 6353K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16364K, committed 16640K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.396 GC heap before +{Heap before GC invocations=1 (full 1): + garbage-first heap total reserved 8192000K, committed 98304K, used 6353K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16364K, committed 16640K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.407 GC heap after +{Heap after GC invocations=2 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 6353K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16364K, committed 16640K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.855 GC heap before +{Heap before GC invocations=2 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 10449K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 2 young (8192K), 0 survivors (0K) + Metaspace used 18557K, committed 18880K, reserved 1114112K + class space used 2036K, committed 2176K, reserved 1048576K +} +Event: 2.856 GC heap after +{Heap after GC invocations=3 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 7475K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 1 young (4096K), 1 survivors (4096K) + Metaspace used 18557K, committed 18880K, reserved 1114112K + class space used 2036K, committed 2176K, reserved 1048576K +} +Event: 2.923 GC heap before +{Heap before GC invocations=3 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 11571K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 2 young (8192K), 1 survivors (4096K) + Metaspace used 19967K, committed 20288K, reserved 1114112K + class space used 2161K, committed 2304K, reserved 1048576K +} +Event: 2.924 GC heap after +{Heap after GC invocations=4 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 7627K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 1 young (4096K), 1 survivors (4096K) + Metaspace used 19967K, committed 20288K, reserved 1114112K + class space used 2161K, committed 2304K, reserved 1048576K +} + +Dll operation events (12 events): +Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +Event: 0.025 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +Event: 0.027 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +Event: 0.068 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +Event: 0.112 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +Event: 0.117 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +Event: 0.197 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +Event: 0.199 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +Event: 0.225 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +Event: 0.351 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so + +Deoptimization events (20 events): +Event: 2.606 Thread 0x00007177dc69dcb0 Uncommon trap: trap_request=0xffffffde fr.pc=0x00007177cc354130 relative=0x0000000000000110 +Event: 2.606 Thread 0x00007177dc69dcb0 Uncommon trap: reason=class_check action=maybe_recompile pc=0x00007177cc354130 method=jdk.internal.misc.Unsafe.allocateUninitializedArray(Ljava/lang/Class;I)Ljava/lang/Object; @ 51 c2 +Event: 2.606 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177cc354130 sp=0x00007177aaaa97a0 +Event: 2.606 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8abf9 sp=0x00007177aaaa9738 mode 2 +Event: 2.611 Thread 0x00007177dc69dcb0 Uncommon trap: trap_request=0xffffff45 fr.pc=0x00007177cc34c464 relative=0x0000000000000ee4 +Event: 2.611 Thread 0x00007177dc69dcb0 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00007177cc34c464 method=java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; @ 401 c2 +Event: 2.611 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177cc34c464 sp=0x00007177aaaaa300 +Event: 2.611 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8abf9 sp=0x00007177aaaaa280 mode 2 +Event: 2.847 Thread 0x00007177dc69dcb0 Uncommon trap: trap_request=0xffffff76 fr.pc=0x00007177cc34b168 relative=0x00000000000001a8 +Event: 2.847 Thread 0x00007177dc69dcb0 Uncommon trap: reason=predicate action=maybe_recompile pc=0x00007177cc34b168 method=java.util.regex.Pattern$BmpCharPropertyGreedy.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 12 c2 +Event: 2.847 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177cc34b168 sp=0x00007177aaaaa0e0 +Event: 2.847 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8abf9 sp=0x00007177aaaaa0b8 mode 2 +Event: 2.911 Thread 0x00007177dc69dcb0 Uncommon trap: trap_request=0xffffff6e fr.pc=0x00007177cc35e6e8 relative=0x0000000000000148 +Event: 2.911 Thread 0x00007177dc69dcb0 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x00007177cc35e6e8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 +Event: 2.911 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177cc35e6e8 sp=0x00007177aaaaa0a0 +Event: 2.912 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8abf9 sp=0x00007177aaaaa050 mode 2 +Event: 3.091 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177c4a2451f sp=0x00007177aaaa97c0 +Event: 3.091 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8b30f sp=0x00007177aaaa8c00 mode 0 +Event: 3.093 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177c48acc54 sp=0x00007177aaaa9790 +Event: 3.093 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8b30f sp=0x00007177aaaa8c48 mode 0 + +Classes loaded (20 events): +Event: 2.893 Loading class javax/imageio/ImageTypeSpecifier$Packed +Event: 2.893 Loading class javax/imageio/ImageTypeSpecifier$Packed done +Event: 2.893 Loading class java/awt/image/DataBufferByte +Event: 2.893 Loading class java/awt/image/DataBufferByte done +Event: 2.893 Loading class sun/awt/image/ByteInterleavedRaster +Event: 2.893 Loading class sun/awt/image/ByteComponentRaster +Event: 2.893 Loading class sun/awt/image/ByteComponentRaster done +Event: 2.893 Loading class sun/awt/image/ByteInterleavedRaster done +Event: 2.894 Loading class sun/awt/image/ShortComponentRaster +Event: 2.894 Loading class sun/awt/image/ShortComponentRaster done +Event: 2.972 Loading class java/util/function/LongFunction +Event: 2.972 Loading class java/util/function/LongFunction done +Event: 3.408 Loading class sun/awt/AppContext$PostShutdownEventRunnable +Event: 3.408 Loading class sun/awt/AppContext$PostShutdownEventRunnable done +Event: 3.408 Loading class sun/awt/AWTAutoShutdown$1 +Event: 3.408 Loading class sun/awt/AWTAutoShutdown$1 done +Event: 6.952 Loading class java/lang/Throwable$WrappedPrintStream +Event: 6.952 Loading class java/lang/Throwable$PrintStreamOrWriter +Event: 6.952 Loading class java/lang/Throwable$PrintStreamOrWriter done +Event: 6.952 Loading class java/lang/Throwable$WrappedPrintStream done + +Classes unloaded (0 events): +No events + +Classes redefined (0 events): +No events + +Internal exceptions (20 events): +Event: 0.653 Thread 0x00007177dc683fa0 Exception (0x000000062a0b8978) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.326 Thread 0x00007177dc683fa0 Exception (0x000000062a353ed8) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 2.379 Thread 0x00007177dc683fa0 Exception (0x0000000629cbdb28) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.423 Thread 0x00007177dc02d0f0 Exception (0x000000060d9ca708) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 2.434 Thread 0x00007177dc02d0f0 Exception (0x000000060da66f58) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.435 Thread 0x00007177dc02d0f0 Exception (0x000000060da74e20) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.598 Thread 0x00007177dc69dcb0 Exception (0x000000060d59e850) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] +Event: 2.847 Thread 0x00007177dc69dcb0 Exception (0x000000060d781928) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.925 Thread 0x00007177dc69dcb0 Exception (0x000000060d828338) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.929 Thread 0x00007177dc69dcb0 Exception (0x000000060d850bc0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.968 Thread 0x00007177dc69dcb0 Exception (0x000000060d9497e0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.968 Thread 0x00007177dc69dcb0 Exception (0x000000060d94ef08) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.985 Thread 0x00007177dc69dcb0 Exception (0x000000060da07168) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.986 Thread 0x00007177dc69dcb0 Exception (0x000000060da199e8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.986 Thread 0x00007177dc69dcb0 Exception (0x000000060da1d988) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.986 Thread 0x00007177dc69dcb0 Exception (0x000000060da21048) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.992 Thread 0x00007177dc69dcb0 Exception (0x000000060da854f0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.027 Thread 0x00007177dc69dcb0 Exception (0x000000060dad5f50) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.033 Thread 0x00007177dc69dcb0 Exception (0x000000060daf08c8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.051 Thread 0x00007177dc69dcb0 Exception (0x000000060db30400) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] + +VM Operations (20 events): +Event: 0.123 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.123 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.211 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.211 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.227 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.227 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.236 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.236 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.690 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.690 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 2.386 Executing VM operation: G1CollectFull (System.gc()) +Event: 2.396 Executing VM operation: G1CollectFull (System.gc()) done +Event: 2.396 Executing VM operation: G1CollectFull (System.gc()) +Event: 2.407 Executing VM operation: G1CollectFull (System.gc()) done +Event: 2.431 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 2.431 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 2.855 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) +Event: 2.856 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done +Event: 2.923 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) +Event: 2.924 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done + +Memory protections (20 events): +Event: 0.016 Protecting memory [0x00007177b4e00000,0x00007177b4e04000] with protection modes 0 +Event: 0.016 Protecting memory [0x00007177b4d00000,0x00007177b4d04000] with protection modes 0 +Event: 0.022 Protecting memory [0x00007177b4c00000,0x00007177b4c04000] with protection modes 0 +Event: 0.023 Protecting memory [0x00007177b4b00000,0x00007177b4b04000] with protection modes 0 +Event: 0.047 Protecting memory [0x00007177b4a00000,0x00007177b4a04000] with protection modes 0 +Event: 0.247 Protecting memory [0x00007177ab8b2000,0x00007177ab8b6000] with protection modes 0 +Event: 0.249 Protecting memory [0x00007177ab7b2000,0x00007177ab7b6000] with protection modes 0 +Event: 0.251 Protecting memory [0x00007177ab6b2000,0x00007177ab6b6000] with protection modes 0 +Event: 0.251 Protecting memory [0x00007177ab5b2000,0x00007177ab5b6000] with protection modes 0 +Event: 0.351 Protecting memory [0x00007177ab4b2000,0x00007177ab4b6000] with protection modes 0 +Event: 0.580 Protecting memory [0x00007177b4a00000,0x00007177b4a04000] with protection modes 0 +Event: 0.678 Protecting memory [0x00007177ab3b2000,0x00007177ab3b6000] with protection modes 0 +Event: 0.687 Protecting memory [0x00007177ab2b2000,0x00007177ab2b6000] with protection modes 0 +Event: 0.721 Protecting memory [0x00007177ab0b2000,0x00007177ab0b6000] with protection modes 0 +Event: 2.341 Protecting memory [0x00007177ab3b2000,0x00007177ab3b6000] with protection modes 0 +Event: 2.407 Protecting memory [0x00007177ab2b2000,0x00007177ab2b6000] with protection modes 0 +Event: 2.439 Protecting memory [0x00007177aa9ac000,0x00007177aa9b0000] with protection modes 0 +Event: 2.439 Protecting memory [0x00007177e3500000,0x00007177e3504000] with protection modes 0 +Event: 2.860 Protecting memory [0x00007177ab3b2000,0x00007177ab3b6000] with protection modes 0 +Event: 3.228 Protecting memory [0x00007177ab2b2000,0x00007177ab2b6000] with protection modes 0 + +Nmethod flushes (20 events): +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c488a588 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c48da388 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4917108 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c491d588 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c493d288 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c493d888 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c493fd88 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4940d08 +Event: 2.401 Thread 0x00007177dc12e310 flushing osr nmethod 0x00007177c4944888 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4945288 +Event: 2.401 Thread 0x00007177dc12e310 flushing osr nmethod 0x00007177c4947c88 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4971188 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4971808 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4981708 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4982708 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4985088 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4985408 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c49ae708 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c49f2b08 +Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c49f2f88 + +Events (20 events): +Event: 0.580 Thread 0x00007177dc683fa0 Thread added: 0x00007176f8061490 +Event: 0.678 Thread 0x00007177dc1405e0 Thread added: 0x00007177245007b0 +Event: 0.687 Thread 0x00007177dc1405e0 Thread added: 0x000071772453cbc0 +Event: 0.721 Thread 0x00007177dc683fa0 Thread added: 0x00007176f80f5850 +Event: 0.867 Thread 0x000071772453cbc0 Thread exited: 0x000071772453cbc0 +Event: 0.867 Thread 0x00007177245007b0 Thread exited: 0x00007177245007b0 +Event: 2.341 Thread 0x00007177dc1405e0 Thread added: 0x00007177245652b0 +Event: 2.407 Thread 0x00007177dc1405e0 Thread added: 0x0000717724571960 +Event: 2.439 Thread 0x00007177dc02d0f0 Thread added: 0x00007177dc69dcb0 +Event: 2.439 Thread 0x00007177dc02d0f0 Thread exited: 0x00007177dc02d0f0 +Event: 2.439 Thread 0x00007177dc02d0f0 Thread added: 0x00007177dc02d0f0 +Event: 2.566 Thread 0x0000717724571960 Thread exited: 0x0000717724571960 +Event: 2.566 Thread 0x00007177245652b0 Thread exited: 0x00007177245652b0 +Event: 2.859 Thread 0x00007177dc69dcb0 Thread added: 0x00007176b057f650 +Event: 3.228 Thread 0x00007177dc1405e0 Thread added: 0x00007177245aca20 +Event: 3.399 Thread 0x00007177245aca20 Thread exited: 0x00007177245aca20 +Event: 3.408 Thread 0x00007177dc682e90 Thread exited: 0x00007177dc682e90 +Event: 3.408 Thread 0x00007177dc683fa0 Thread exited: 0x00007177dc683fa0 +Event: 5.608 Thread 0x00007176f8061490 Thread exited: 0x00007176f8061490 +Event: 6.953 Thread 0x00007177dc69dcb0 Thread exited: 0x00007177dc69dcb0 + + +Dynamic libraries: +60c000000-60dc00000 rw-p 00000000 00:00 0 +60dc00000-800000000 ---p 00000000 00:00 0 +567ff61f2000-567ff61f3000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +567ff61f4000-567ff61f5000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +567ff61f5000-567ff61f6000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +568003a6b000-568003ab4000 rw-p 00000000 00:00 0 [heap] +717668000000-717668075000 rw-p 00000000 00:00 0 +717668075000-71766c000000 ---p 00000000 00:00 0 +717670000000-717670021000 rw-p 00000000 00:00 0 +717670021000-717674000000 ---p 00000000 00:00 0 +717674000000-717674021000 rw-p 00000000 00:00 0 +717674021000-717678000000 ---p 00000000 00:00 0 +71767c000000-71767c021000 rw-p 00000000 00:00 0 +71767c021000-717680000000 ---p 00000000 00:00 0 +717680000000-717680021000 rw-p 00000000 00:00 0 +717680021000-717684000000 ---p 00000000 00:00 0 +717688000000-717688021000 rw-p 00000000 00:00 0 +717688021000-71768c000000 ---p 00000000 00:00 0 +71768c000000-71768c021000 rw-p 00000000 00:00 0 +71768c021000-717690000000 ---p 00000000 00:00 0 +717694000000-717694021000 rw-p 00000000 00:00 0 +717694021000-717698000000 ---p 00000000 00:00 0 +717698000000-717698021000 rw-p 00000000 00:00 0 +717698021000-71769c000000 ---p 00000000 00:00 0 +7176a0000000-7176a00c8000 rw-p 00000000 00:00 0 +7176a00c8000-7176a4000000 ---p 00000000 00:00 0 +7176a5000000-7176ab712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +7176ab712000-7176abf30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +7176abf30000-7176abf76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +7176abf76000-7176abff2000 rw-p 00000000 00:00 0 +7176ac000000-7176ac021000 rw-p 00000000 00:00 0 +7176ac021000-7176b0000000 ---p 00000000 00:00 0 +7176b0000000-7176b3148000 rw-p 00000000 00:00 0 +7176b3148000-7176b4000000 ---p 00000000 00:00 0 +7176b8000000-7176b80f8000 rw-p 00000000 00:00 0 +7176b80f8000-7176bc000000 ---p 00000000 00:00 0 +7176bc000000-7176bc021000 rw-p 00000000 00:00 0 +7176bc021000-7176c0000000 ---p 00000000 00:00 0 +7176c4000000-7176c4021000 rw-p 00000000 00:00 0 +7176c4021000-7176c8000000 ---p 00000000 00:00 0 +7176c8000000-7176c8021000 rw-p 00000000 00:00 0 +7176c8021000-7176cc000000 ---p 00000000 00:00 0 +7176d0000000-7176d0021000 rw-p 00000000 00:00 0 +7176d0021000-7176d4000000 ---p 00000000 00:00 0 +7176d4000000-7176d4021000 rw-p 00000000 00:00 0 +7176d4021000-7176d8000000 ---p 00000000 00:00 0 +7176dc000000-7176dc021000 rw-p 00000000 00:00 0 +7176dc021000-7176e0000000 ---p 00000000 00:00 0 +7176e0000000-7176e0021000 rw-p 00000000 00:00 0 +7176e0021000-7176e4000000 ---p 00000000 00:00 0 +7176e8000000-7176e8128000 rw-p 00000000 00:00 0 +7176e8128000-7176ec000000 ---p 00000000 00:00 0 +7176ec000000-7176ec39a000 rw-p 00000000 00:00 0 +7176ec39a000-7176f0000000 ---p 00000000 00:00 0 +7176f4000000-7176f4021000 rw-p 00000000 00:00 0 +7176f4021000-7176f8000000 ---p 00000000 00:00 0 +7176f8000000-7176f813a000 rw-p 00000000 00:00 0 +7176f813a000-7176fc000000 ---p 00000000 00:00 0 +717700000000-717700021000 rw-p 00000000 00:00 0 +717700021000-717704000000 ---p 00000000 00:00 0 +717704000000-717704021000 rw-p 00000000 00:00 0 +717704021000-717708000000 ---p 00000000 00:00 0 +71770c000000-71770c021000 rw-p 00000000 00:00 0 +71770c021000-717710000000 ---p 00000000 00:00 0 +717710000000-7177100cf000 rw-p 00000000 00:00 0 +7177100cf000-717714000000 ---p 00000000 00:00 0 +717718000000-717718021000 rw-p 00000000 00:00 0 +717718021000-71771c000000 ---p 00000000 00:00 0 +71771c000000-71771c021000 rw-p 00000000 00:00 0 +71771c021000-717720000000 ---p 00000000 00:00 0 +717720600000-717720725000 r--p 00000000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +717720725000-717720be5000 r-xp 00125000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +717720be5000-717720d19000 r--p 005e5000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +717720d19000-717720d1a000 ---p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +717720d1a000-717720d7d000 r--p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +717720d7d000-717720d87000 rw-p 0077c000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +717720d87000-717720d98000 rw-p 00000000 00:00 0 +717720e00000-717720e01000 ---p 00000000 00:00 0 +717720e01000-717721601000 rw-p 00000000 00:00 0 +717721800000-717721801000 ---p 00000000 00:00 0 +717721801000-717722001000 rw-p 00000000 00:00 0 +717722200000-717722201000 ---p 00000000 00:00 0 +717722201000-717722a01000 rw-p 00000000 00:00 0 +717722c00000-717722c01000 ---p 00000000 00:00 0 +717722c01000-717723401000 rw-p 00000000 00:00 0 +717723600000-717723601000 ---p 00000000 00:00 0 +717723601000-717723e01000 rw-p 00000000 00:00 0 +717724000000-7177245c2000 rw-p 00000000 00:00 0 +7177245c2000-717728000000 ---p 00000000 00:00 0 +717728000000-7177288c4000 rw-p 00000000 00:00 0 +7177288c4000-71772c000000 ---p 00000000 00:00 0 +71772c600000-71772c601000 ---p 00000000 00:00 0 +71772c601000-71772ce01000 rw-p 00000000 00:00 0 +71772d000000-71772d02f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +71772d02f000-71772d702000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +71772d702000-71772d824000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +71772d824000-71772d835000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +71772d835000-71772d8b3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +71772d8b3000-71772d8c7000 rw-p 00000000 00:00 0 +71772da00000-71772da22000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +71772da22000-71772dc21000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +71772dc21000-71772dc29000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +71772dc29000-71772dc2a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +71772dc2a000-71772dc2b000 rw-p 00000000 00:00 0 +71772e000000-71772ecf5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +71772ecf5000-71772f6d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +71772f6d8000-71772fae9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +71772fae9000-71772ff6b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +71772ff6b000-71772ff73000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +71772ff73000-71772ff7e000 rw-p 00000000 00:00 0 +717730000000-717730021000 rw-p 00000000 00:00 0 +717730021000-717734000000 ---p 00000000 00:00 0 +717734000000-717734021000 rw-p 00000000 00:00 0 +717734021000-717738000000 ---p 00000000 00:00 0 +717738400000-717738401000 ---p 00000000 00:00 0 +717738401000-717738c01000 rw-p 00000000 00:00 0 +717738e00000-717738e01000 ---p 00000000 00:00 0 +717738e01000-717739601000 rw-p 00000000 00:00 0 +717739800000-717739801000 ---p 00000000 00:00 0 +717739801000-71773a001000 rw-p 00000000 00:00 0 +71773a200000-71773a201000 ---p 00000000 00:00 0 +71773a201000-71773aa01000 rw-p 00000000 00:00 0 +71773ac00000-71773ac01000 ---p 00000000 00:00 0 +71773ac01000-71773b401000 rw-p 00000000 00:00 0 +71773b600000-71773b601000 ---p 00000000 00:00 0 +71773b601000-71773be01000 rw-p 00000000 00:00 0 +71773c000000-71773c021000 rw-p 00000000 00:00 0 +71773c021000-717740000000 ---p 00000000 00:00 0 +717740000000-717740021000 rw-p 00000000 00:00 0 +717740021000-717744000000 ---p 00000000 00:00 0 +717744200000-717744400000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717744400000-71774448d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +71774448d000-717744bf5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +717744bf5000-717745482000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +717745482000-7177454c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +7177454c4000-7177454c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +7177454c7000-7177454cd000 rw-p 00000000 00:00 0 +717745600000-7177457c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +7177457c4000-7177474c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +7177474c4000-717747b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +717747b39000-717747b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +717747b3a000-717747d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +717747d1a000-717747d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +717747d93000-717747e08000 rw-p 00000000 00:00 0 +717748000000-717748021000 rw-p 00000000 00:00 0 +717748021000-71774c000000 ---p 00000000 00:00 0 +71774c000000-71774c635000 rw-p 00000000 00:00 0 +71774c635000-717750000000 ---p 00000000 00:00 0 +717750040000-7177500c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177500c0000-7177502c0000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177502c0000-7177503c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177503c0000-717750400000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717750400000-717750600000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717750600000-71775065b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +71775065b000-7177509d9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +7177509d9000-717750dd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +717750dd5000-717750e10000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +717750e10000-717750e15000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +717750e15000-717750e40000 rw-p 00000000 00:00 0 +717750e60000-717750ea0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717750ea0000-717750ec0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717750ec0000-717750f00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717750f00000-717751000000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717751000000-71775106e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +71775106e000-7177515d5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +7177515d5000-717751ce8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +717751ce8000-717751ce9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +717751ce9000-717751d26000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +717751d26000-717751d29000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +717751d29000-717751d2b000 rw-p 00000000 00:00 0 +717751d2d000-717751d40000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717751d40000-717751dc0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717751dc0000-717751e00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717751e00000-717752041000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +717752041000-717752062000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +717752062000-717752200000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +717752200000-717752e00000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +717752e00000-717753cab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +717753cab000-717753e10000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +717753e10000-717753e7e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +717753e7e000-717753e9c000 rw-p 00000000 00:00 0 +717753ea0000-717753ec0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717753ec0000-717753f00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717753f00000-717754000000 rw-s 00000000 00:06 1017 /dev/nvidiactl +717754000000-7177543f0000 rw-p 00000000 00:00 0 +7177543f0000-7177545b0000 rw-p 00000000 00:00 0 +7177545b0000-7177546f0000 rw-p 00000000 00:00 0 +7177546f0000-717754710000 rw-p 00000000 00:00 0 +717754710000-717754730000 rw-p 00000000 00:00 0 +717754730000-717754770000 rw-p 00000000 00:00 0 +717754770000-7177549f0000 rw-p 00000000 00:00 0 +7177549f0000-717754a10000 rw-p 00000000 00:00 0 +717754a10000-717754a30000 rw-p 00000000 00:00 0 +717754a30000-717754a70000 rw-p 00000000 00:00 0 +717754a70000-717754af0000 rw-p 00000000 00:00 0 +717754af0000-717754cf0000 rw-p 00000000 00:00 0 +717754cf0000-717754d10000 rw-p 00000000 00:00 0 +717754d10000-717754d30000 rw-p 00000000 00:00 0 +717754d30000-717754d70000 rw-p 00000000 00:00 0 +717754d70000-717754ef0000 rw-p 00000000 00:00 0 +717754ef0000-717754ff0000 rw-p 00000000 00:00 0 +717754ff0000-7177550f0000 rw-p 00000000 00:00 0 +7177550f0000-717755170000 rw-p 00000000 00:00 0 +717755170000-717755200000 ---p 00000000 00:00 0 +717755200000-717755420000 rw-p 00000000 00:00 0 +717755420000-717758000000 ---p 00000000 00:00 0 +717758000000-717758021000 rw-p 00000000 00:00 0 +717758021000-71775c000000 ---p 00000000 00:00 0 +71775c020000-71775c040000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71775c040000-71775c080000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71775c080000-71775c180000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71775c180000-71775c200000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71775c200000-71775c201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +71775c201000-71775c202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +71775c202000-71775de1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +71775de1c000-71775de1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +71775de1d000-71775de1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +71775de20000-71775de40000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71775de40000-71775de80000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71775de80000-71775df80000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71775df80000-71775e000000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71775e000000-71775ed91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa +71775ed91000-71775f000000 ---p 00000000 00:00 0 +71775f000000-71775f030000 rw-p 00000000 00:00 0 +71775f030000-71775f090000 rw-p 00000000 00:00 0 +71775f090000-71775f0b0000 rw-p 00000000 00:00 0 +71775f0b0000-71775f130000 rw-p 00000000 00:00 0 +71775f130000-71775f150000 rw-p 00000000 00:00 0 +71775f150000-71775f1b0000 rw-p 00000000 00:00 0 +71775f1b0000-71775f1d0000 rw-p 00000000 00:00 0 +71775f1d0000-71775f230000 rw-p 00000000 00:00 0 +71775f230000-71775f250000 rw-p 00000000 00:00 0 +71775f250000-71775f280000 ---p 00000000 00:00 0 +71775f280000-71775f290000 rw-p 00000000 00:00 0 +71775f290000-71779f000000 ---p 00000000 00:00 0 +71779f007000-71779f01a000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71779f03a000-71779f07a000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71779f07a000-71779f2bf000 rw-s 00000000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) +71779f2bf000-71779f400000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index +71779f400000-71779f493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +71779f493000-71779f8e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +71779f8e6000-71779fdfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +71779fdfc000-71779fe34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +71779fe34000-71779fe44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +71779fe44000-71779fe49000 rw-p 00000000 00:00 0 +71779fe4c000-71779fe5f000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71779fe5f000-71779fe72000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71779fe72000-71779fe92000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71779fe92000-71779fea5000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71779fea5000-71779fee5000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71779fee5000-71779ff05000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71779ff05000-71779ff45000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71779ff45000-71779ff85000 rw-s 00000000 00:06 1017 /dev/nvidiactl +71779ff85000-71779ff96000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +71779ff96000-71779ffd8000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +71779ffd8000-71779fff0000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +71779fff0000-71779fffe000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +71779fffe000-7177a0000000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +7177a0000000-7177a0021000 rw-p 00000000 00:00 0 +7177a0021000-7177a4000000 ---p 00000000 00:00 0 +7177a4000000-7177a4021000 rw-p 00000000 00:00 0 +7177a4021000-7177a8000000 ---p 00000000 00:00 0 +7177a800c000-7177a8010000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a8010000-7177a8030000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a8030000-7177a8034000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7177a8034000-7177a8050000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7177a8050000-7177a8056000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7177a8056000-7177a8057000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7177a8057000-7177a8059000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7177a8059000-7177a805a000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7177a805a000-7177a8064000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +7177a8064000-7177a806e000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +7177a806e000-7177a8075000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +7177a8075000-7177a807e000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +7177a807e000-7177a807f000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +7177a807f000-7177a808b000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +7177a808b000-7177a80ab000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +7177a80ab000-7177a80b7000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +7177a80b7000-7177a80c1000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +7177a80c1000-7177a80c2000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +7177a80c2000-7177a80d1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7177a80d1000-7177a81b7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7177a81b7000-7177a81f5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7177a81f5000-7177a81f6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7177a81f6000-7177a81f9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7177a81f9000-7177a81ff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7177a81ff000-7177a8200000 rw-p 00000000 00:00 0 +7177a8200000-7177a8216000 r--p 00000000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +7177a8216000-7177a8306000 r-xp 00016000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +7177a8306000-7177a8379000 r--p 00106000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +7177a8379000-7177a8380000 r--p 00178000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +7177a8380000-7177a8387000 rw-p 0017f000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +7177a8387000-7177a8402000 rw-p 00000000 00:00 0 +7177a8402000-7177a8403000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a8403000-7177a8404000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a8404000-7177a8406000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a8406000-7177a8407000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a8407000-7177a8408000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a8408000-7177a8409000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a8409000-7177a840a000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a840a000-7177a840b000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a840b000-7177a840c000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a840c000-7177a840d000 rw-s 00044000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) +7177a840d000-7177a840e000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a840e000-7177a8412000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a8412000-7177a8413000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a8413000-7177a8415000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7177a8415000-7177a841e000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7177a841e000-7177a8421000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7177a8421000-7177a8422000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7177a8422000-7177a8423000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7177a8423000-7177a8424000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7177a8424000-7177a8426000 rw-p 00000000 00:00 0 +7177a8426000-7177a8428000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +7177a8428000-7177a8493000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +7177a8493000-7177a84bb000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +7177a84bb000-7177a84bc000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +7177a84bc000-7177a84bd000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +7177a84bd000-7177a84c3000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7177a84c3000-7177a84dd000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7177a84dd000-7177a84e4000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7177a84e4000-7177a84e5000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7177a84e5000-7177a84e6000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7177a84e6000-7177a84e7000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7177a84e7000-7177a84e9000 rw-p 00000000 00:00 0 +7177a84e9000-7177a84fc000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +7177a84fc000-7177a851b000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +7177a851b000-7177a8528000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +7177a8528000-7177a8538000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +7177a8538000-7177a8539000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +7177a8539000-7177a854c000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7177a854c000-7177a85cb000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7177a85cb000-7177a85f6000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7177a85f6000-7177a85f7000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7177a85f7000-7177a85fe000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7177a85fe000-7177a85ff000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7177a85ff000-7177a8f22000 rw-p 00000000 00:00 0 +7177a8f22000-7177a8f24000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a8f24000-7177a8f25000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a8f25000-7177a8f26000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a8f26000-7177a8f2a000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a8f2a000-7177a8f2b000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a8f2b000-7177a8f2f000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +7177a8f2f000-7177a8f3f000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +7177a8f3f000-7177a8f42000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +7177a8f42000-7177a8f43000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +7177a8f43000-7177a8f44000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +7177a8f44000-7177a8f4f000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7177a8f4f000-7177a8f7d000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7177a8f7d000-7177a8f8f000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7177a8f8f000-7177a8f90000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7177a8f90000-7177a8f91000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7177a8f91000-7177a8f92000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7177a8f92000-7177a8f96000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +7177a8f96000-7177a8fac000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +7177a8fac000-7177a8fb6000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +7177a8fb6000-7177a8fb7000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +7177a8fb7000-7177a8fb8000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +7177a8fb8000-7177a8fe7000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +7177a8fe7000-7177a90a3000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +7177a90a3000-7177a90ee000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +7177a90ee000-7177a90fc000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +7177a90fc000-7177a90fe000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +7177a90fe000-7177a90ff000 rw-p 00000000 00:00 0 +7177a90ff000-7177a9100000 ---p 00000000 00:00 0 +7177a9100000-7177a9200000 rw-p 00000000 00:00 0 +7177a9200000-7177a9202000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a9202000-7177a9203000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a9203000-7177a9223000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a9223000-7177a9289000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +7177a9289000-7177a937c000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +7177a937c000-7177a9408000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +7177a9408000-7177a941b000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +7177a941b000-7177a941c000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +7177a941c000-7177a941e000 rw-p 00000000 00:00 0 +7177a941e000-7177a944d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7177a944d000-7177a95a0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7177a95a0000-7177a95f4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7177a95f4000-7177a95f5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7177a95f5000-7177a95fe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7177a95fe000-7177a95ff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7177a95ff000-7177a9600000 rw-p 00000000 00:00 0 +7177a9600000-7177a969a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7177a969a000-7177a97ab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7177a97ab000-7177a981a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7177a981a000-7177a981b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7177a981b000-7177a9826000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7177a9826000-7177a9829000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7177a9829000-7177a982c000 rw-p 00000000 00:00 0 +7177a982c000-7177a982d000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177a982d000-7177a9836000 rw-s 00000000 00:01 672023 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +7177a9836000-7177a983f000 rw-s 00000000 00:01 672022 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +7177a983f000-7177a9841000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7177a9841000-7177a985a000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7177a985a000-7177a985c000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7177a985c000-7177a985d000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7177a985d000-7177a985e000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7177a985e000-7177a985f000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7177a985f000-7177a9863000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177a9863000-7177a9865000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +7177a9865000-7177a986d000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +7177a986d000-7177a986f000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +7177a986f000-7177a9870000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +7177a9870000-7177a9871000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +7177a9871000-7177a9873000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7177a9873000-7177a987b000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7177a987b000-7177a987c000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7177a987c000-7177a987d000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7177a987d000-7177a987e000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7177a987e000-7177a987f000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7177a987f000-7177a98b2000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +7177a98b2000-7177a9915000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +7177a9915000-7177a9934000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +7177a9934000-7177a995f000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +7177a995f000-7177a9960000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +7177a9960000-7177a9961000 rw-p 00000000 00:00 0 +7177a9961000-7177a9964000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7177a9964000-7177a9985000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7177a9985000-7177a9991000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7177a9991000-7177a9992000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7177a9992000-7177a9993000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7177a9993000-7177a9994000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7177a9994000-7177a99a2000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +7177a99a2000-7177a99b3000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +7177a99b3000-7177a99c1000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +7177a99c1000-7177a99c5000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +7177a99c5000-7177a99c6000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +7177a99c6000-7177a99ce000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +7177a99ce000-7177a99ec000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +7177a99ec000-7177a99f9000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +7177a99f9000-7177a99fb000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +7177a99fb000-7177a99fc000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +7177a99fc000-7177a9a00000 rw-p 00000000 00:00 0 +7177a9a00000-7177a9a01000 ---p 00000000 00:00 0 +7177a9a01000-7177aa201000 rw-p 00000000 00:00 0 +7177aa201000-7177aa202000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177aa202000-7177aa204000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +7177aa204000-7177aa208000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +7177aa208000-7177aa20a000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +7177aa20a000-7177aa20b000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +7177aa20b000-7177aa20c000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +7177aa20c000-7177aa210000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7177aa210000-7177aa225000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7177aa225000-7177aa22b000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7177aa22b000-7177aa22c000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7177aa22c000-7177aa22e000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7177aa22e000-7177aa22f000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7177aa22f000-7177aa232000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +7177aa232000-7177aa249000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +7177aa249000-7177aa24d000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +7177aa24d000-7177aa24e000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +7177aa24e000-7177aa24f000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +7177aa24f000-7177aa253000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7177aa253000-7177aa272000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7177aa272000-7177aa27c000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7177aa27c000-7177aa27d000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7177aa27d000-7177aa27f000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7177aa27f000-7177aa280000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7177aa280000-7177aa285000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7177aa285000-7177aa290000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7177aa290000-7177aa294000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7177aa294000-7177aa295000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7177aa295000-7177aa296000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7177aa296000-7177aa297000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7177aa297000-7177aa2a1000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +7177aa2a1000-7177aa353000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +7177aa353000-7177aa364000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +7177aa364000-7177aa365000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +7177aa365000-7177aa366000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +7177aa366000-7177aa376000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7177aa376000-7177aa3d4000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7177aa3d4000-7177aa3f0000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7177aa3f0000-7177aa3f1000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7177aa3f1000-7177aa3f7000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7177aa3f7000-7177aa3f8000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7177aa3f8000-7177aa400000 rw-p 00000000 00:00 0 +7177aa400000-7177aa800000 rw-p 00000000 00:00 0 +7177aa800000-7177aa802000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177aa802000-7177aa806000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177aa806000-7177aa857000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7177aa857000-7177aa8b3000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7177aa8b3000-7177aa8e8000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7177aa8e8000-7177aa8e9000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7177aa8e9000-7177aa909000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7177aa909000-7177aa929000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7177aa929000-7177aa92e000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7177aa92e000-7177aa930000 rw-p 00000000 00:00 0 +7177aa930000-7177aa936000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +7177aa936000-7177aa980000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +7177aa980000-7177aa9aa000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +7177aa9aa000-7177aa9ab000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +7177aa9ab000-7177aa9ac000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +7177aa9ac000-7177aa9b0000 ---p 00000000 00:00 0 +7177aa9b0000-7177aaaac000 rw-p 00000000 00:00 0 +7177aaaac000-7177aaaad000 ---p 00000000 00:00 0 +7177aaaad000-7177aabad000 rw-p 00000000 00:00 0 +7177aabad000-7177aabae000 ---p 00000000 00:00 0 +7177aabae000-7177aacae000 rw-p 00000000 00:00 0 +7177aacae000-7177aacaf000 ---p 00000000 00:00 0 +7177aacaf000-7177aadaf000 rw-p 00000000 00:00 0 +7177aadaf000-7177aadb0000 ---p 00000000 00:00 0 +7177aadb0000-7177aaeb0000 rw-p 00000000 00:00 0 +7177aaeb0000-7177aaeb1000 ---p 00000000 00:00 0 +7177aaeb1000-7177aafb1000 rw-p 00000000 00:00 0 +7177aafb1000-7177aafb2000 ---p 00000000 00:00 0 +7177aafb2000-7177ab0b2000 rw-p 00000000 00:00 0 +7177ab0b2000-7177ab0b6000 ---p 00000000 00:00 0 +7177ab0b6000-7177ab1b2000 rw-p 00000000 00:00 0 +7177ab1b2000-7177ab2b2000 rw-s 00000000 00:01 1015832 /SYSV00000000 (deleted) +7177ab2b2000-7177ab2b6000 ---p 00000000 00:00 0 +7177ab2b6000-7177ab3b2000 rw-p 00000000 00:00 0 +7177ab3b2000-7177ab3b6000 ---p 00000000 00:00 0 +7177ab3b6000-7177ab4b2000 rw-p 00000000 00:00 0 +7177ab4b2000-7177ab4b6000 ---p 00000000 00:00 0 +7177ab4b6000-7177ab5b2000 rw-p 00000000 00:00 0 +7177ab5b2000-7177ab5b6000 ---p 00000000 00:00 0 +7177ab5b6000-7177ab6b2000 rw-p 00000000 00:00 0 +7177ab6b2000-7177ab6b6000 ---p 00000000 00:00 0 +7177ab6b6000-7177ab7b2000 rw-p 00000000 00:00 0 +7177ab7b2000-7177ab7b6000 ---p 00000000 00:00 0 +7177ab7b6000-7177ab8b2000 rw-p 00000000 00:00 0 +7177ab8b2000-7177ab8b6000 ---p 00000000 00:00 0 +7177ab8b6000-7177ab9b2000 rw-p 00000000 00:00 0 +7177ab9b2000-7177ab9bf000 r--p 00000000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7177ab9bf000-7177aba48000 r-xp 0000d000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7177aba48000-7177aba71000 r--p 00096000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7177aba71000-7177aba72000 ---p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7177aba72000-7177aba79000 r--p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7177aba79000-7177aba7a000 rw-p 000c6000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7177aba7a000-7177abbfb000 r-xp 00000000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +7177abbfb000-7177abbfc000 ---p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +7177abbfc000-7177abbfe000 r--p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +7177abbfe000-7177abbff000 rw-p 00183000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +7177abbff000-7177abc00000 rw-p 00000000 00:00 0 +7177abc00000-7177ac021000 rw-p 00000000 00:00 0 +7177ac021000-7177b0000000 ---p 00000000 00:00 0 +7177b0000000-7177b0021000 rw-p 00000000 00:00 0 +7177b0021000-7177b4000000 ---p 00000000 00:00 0 +7177b4000000-7177b4001000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177b4001000-7177b4003000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7177b4003000-7177b400a000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7177b400a000-7177b400b000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7177b400b000-7177b400c000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7177b400c000-7177b400d000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7177b400d000-7177b400e000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7177b400e000-7177b4011000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7177b4011000-7177b4014000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7177b4014000-7177b4015000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7177b4015000-7177b4016000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7177b4016000-7177b4017000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7177b4017000-7177b4018000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7177b4018000-7177b401d000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +7177b401d000-7177b4023000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +7177b4023000-7177b4026000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +7177b4026000-7177b4028000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +7177b4028000-7177b4029000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +7177b4029000-7177b4039000 r--p 00000000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +7177b4039000-7177b405a000 r-xp 00010000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +7177b405a000-7177b4096000 r--p 00031000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +7177b4096000-7177b409a000 r--p 0006c000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +7177b409a000-7177b409d000 rw-p 00070000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +7177b409d000-7177b40c0000 rw-p 00000000 00:00 0 +7177b40c0000-7177b40d9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7177b40d9000-7177b4165000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7177b4165000-7177b41fa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7177b41fa000-7177b41fb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7177b41fb000-7177b41fc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7177b41fc000-7177b4200000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7177b4200000-7177b4600000 rw-p 00000000 00:00 0 +7177b4600000-7177b4608000 r--p 00000000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7177b4608000-7177b4660000 r-xp 00008000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7177b4660000-7177b4671000 r--p 00060000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7177b4671000-7177b4672000 ---p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7177b4672000-7177b4678000 r--p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7177b4678000-7177b4679000 rw-p 00077000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7177b4679000-7177b4883000 rw-p 00000000 00:00 0 +7177b4883000-7177b4884000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177b4884000-7177b4885000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177b4885000-7177b4889000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177b4889000-7177b488c000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7177b488c000-7177b488f000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7177b488f000-7177b4890000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7177b4890000-7177b4891000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7177b4891000-7177b4892000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7177b4892000-7177b4893000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7177b4893000-7177b4896000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7177b4896000-7177b48aa000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7177b48aa000-7177b48ae000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7177b48ae000-7177b48af000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7177b48af000-7177b48b0000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7177b48b0000-7177b48b1000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7177b48b1000-7177b48b4000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +7177b48b4000-7177b48ba000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +7177b48ba000-7177b48bc000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +7177b48bc000-7177b48bd000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +7177b48bd000-7177b48be000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +7177b48be000-7177b48c5000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7177b48c5000-7177b48cb000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7177b48cb000-7177b48ce000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7177b48ce000-7177b48cf000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7177b48cf000-7177b48d0000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7177b48d0000-7177b48d1000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7177b48d1000-7177b48dc000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7177b48dc000-7177b48e5000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7177b48e5000-7177b48ea000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7177b48ea000-7177b48eb000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7177b48eb000-7177b48ed000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7177b48ed000-7177b48ee000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7177b48ee000-7177b48f5000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache +7177b48f5000-7177b48f6000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7177b48f6000-7177b48f9000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7177b48f9000-7177b48fa000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7177b48fa000-7177b48fb000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7177b48fb000-7177b48fc000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7177b48fc000-7177b48fd000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7177b48fd000-7177b4900000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +7177b4900000-7177b4904000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +7177b4904000-7177b4906000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +7177b4906000-7177b4907000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +7177b4907000-7177b4908000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +7177b4908000-7177b4909000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +7177b4909000-7177b490b000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +7177b490b000-7177b490c000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +7177b490c000-7177b490d000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +7177b490d000-7177b490e000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +7177b490e000-7177b49cf000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +7177b49cf000-7177b49d0000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +7177b49d0000-7177b49db000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +7177b49db000-7177b4a00000 rw-p 00000000 00:00 0 +7177b4a00000-7177b4a04000 ---p 00000000 00:00 0 +7177b4a04000-7177b4b00000 rw-p 00000000 00:00 0 +7177b4b00000-7177b4b04000 ---p 00000000 00:00 0 +7177b4b04000-7177b4c00000 rw-p 00000000 00:00 0 +7177b4c00000-7177b4c04000 ---p 00000000 00:00 0 +7177b4c04000-7177b4d00000 rw-p 00000000 00:00 0 +7177b4d00000-7177b4d04000 ---p 00000000 00:00 0 +7177b4d04000-7177b4e00000 rw-p 00000000 00:00 0 +7177b4e00000-7177b4e04000 ---p 00000000 00:00 0 +7177b4e04000-7177b4f00000 rw-p 00000000 00:00 0 +7177b4f00000-7177b4f04000 ---p 00000000 00:00 0 +7177b4f04000-7177b5000000 rw-p 00000000 00:00 0 +7177b5000000-7177b5f06000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive +7177b5f06000-7177b5f07000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177b5f07000-7177b5f09000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177b5f09000-7177b5f0a000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177b5f0a000-7177b5f7a000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +7177b5f7a000-7177b5f7b000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +7177b5f7b000-7177b5f80000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +7177b5f80000-7177b5f82000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +7177b5f82000-7177b5f84000 rw-p 00000000 00:00 0 +7177b5f84000-7177b5fb0000 r--p 00000000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7177b5fb0000-7177b5fe4000 r-xp 0002c000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7177b5fe4000-7177b5ffe000 r--p 00060000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7177b5ffe000-7177b5fff000 r--p 00079000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7177b5fff000-7177b6000000 rw-p 0007a000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7177b6000000-7177b8000000 rw-p 00000000 00:00 0 +7177b8000000-7177b8021000 rw-p 00000000 00:00 0 +7177b8021000-7177bc000000 ---p 00000000 00:00 0 +7177bc000000-7177bc001000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177bc001000-7177bc002000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7177bc002000-7177bc003000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +7177bc003000-7177bc004000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +7177bc004000-7177bc005000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +7177bc005000-7177bc006000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +7177bc006000-7177bc007000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +7177bc007000-7177bc008000 r--p 00000000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +7177bc008000-7177bc009000 r-xp 00001000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +7177bc009000-7177bc028000 r--p 00002000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +7177bc028000-7177bc029000 r--p 00020000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +7177bc029000-7177bc02a000 rw-p 00021000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +7177bc02a000-7177bc0f8000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +7177bc0f8000-7177bc0f9000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +7177bc0f9000-7177bc0fa000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +7177bc0fa000-7177bc0fe000 ---p 00000000 00:00 0 +7177bc0fe000-7177bc1fa000 rw-p 00000000 00:00 0 +7177bc1fa000-7177bc1fe000 ---p 00000000 00:00 0 +7177bc1fe000-7177bc2fa000 rw-p 00000000 00:00 0 +7177bc2fa000-7177bc2fe000 ---p 00000000 00:00 0 +7177bc2fe000-7177bc3fa000 rw-p 00000000 00:00 0 +7177bc3fa000-7177bc3fb000 ---p 00000000 00:00 0 +7177bc3fb000-7177bc4fb000 rw-p 00000000 00:00 0 +7177bc4fb000-7177bc4fc000 ---p 00000000 00:00 0 +7177bc4fc000-7177bc5fc000 rw-p 00000000 00:00 0 +7177bc5fc000-7177bc5fd000 ---p 00000000 00:00 0 +7177bc5fd000-7177bc6fd000 rw-p 00000000 00:00 0 +7177bc6fd000-7177bc6fe000 ---p 00000000 00:00 0 +7177bc6fe000-7177bc7fe000 rw-p 00000000 00:00 0 +7177bc7fe000-7177bca70000 rw-p 00000000 00:00 0 +7177bca70000-7177c4700000 ---p 00000000 00:00 0 +7177c4700000-7177c4704000 ---p 00000000 00:00 0 +7177c4704000-7177c4800000 rw-p 00000000 00:00 0 +7177c4800000-7177c4ad0000 rwxp 00000000 00:00 0 +7177c4ad0000-7177cbd37000 ---p 00000000 00:00 0 +7177cbd37000-7177cbfb7000 rwxp 00000000 00:00 0 +7177cbfb7000-7177cc2c8000 ---p 00000000 00:00 0 +7177cc2c8000-7177cc538000 rwxp 00000000 00:00 0 +7177cc538000-7177d3800000 ---p 00000000 00:00 0 +7177d3800000-7177dbfb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules +7177dbfb5000-7177dbfb6000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177dbfb6000-7177dbfb7000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7177dbfb7000-7177dbfb8000 r--s 00000000 00:06 1017 /dev/nvidiactl +7177dbfb8000-7177dbfb9000 rw-s 00000000 00:01 1028 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +7177dbfb9000-7177dbfba000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +7177dbfba000-7177dbfbb000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +7177dbfbb000-7177dbfbc000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +7177dbfbc000-7177dbfbd000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +7177dbfbd000-7177dbfbe000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +7177dbfbe000-7177dbfc0000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +7177dbfc0000-7177dbfc2000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +7177dbfc2000-7177dbfc3000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +7177dbfc3000-7177dbfc4000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +7177dbfc4000-7177dbfc5000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +7177dbfc5000-7177dbfca000 r--p 00000000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +7177dbfca000-7177dbff3000 r-xp 00005000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +7177dbff3000-7177dbffe000 r--p 0002e000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +7177dbffe000-7177dbfff000 r--p 00038000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +7177dbfff000-7177dc000000 rw-p 00039000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +7177dc000000-7177dc6a1000 rw-p 00000000 00:00 0 +7177dc6a1000-7177e0000000 ---p 00000000 00:00 0 +7177e0000000-7177e0001000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +7177e0001000-7177e0002000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +7177e0002000-7177e0003000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +7177e0003000-7177e0004000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +7177e0004000-7177e0005000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +7177e0005000-7177e0007000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +7177e0007000-7177e000a000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +7177e000a000-7177e000b000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +7177e000b000-7177e000c000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +7177e000c000-7177e000d000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +7177e000d000-7177e000f000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +7177e000f000-7177e0015000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +7177e0015000-7177e0017000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +7177e0017000-7177e0018000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +7177e0018000-7177e0019000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +7177e0019000-7177e001a000 r--p 00000000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +7177e001a000-7177e0022000 r-xp 00001000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +7177e0022000-7177e0025000 r--p 00009000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +7177e0025000-7177e0026000 r--p 0000b000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +7177e0026000-7177e0027000 rw-p 0000c000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +7177e0027000-7177e0029000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +7177e0029000-7177e0030000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +7177e0030000-7177e0032000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +7177e0032000-7177e0033000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +7177e0033000-7177e0034000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +7177e0034000-7177e0038000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +7177e0038000-7177e0045000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +7177e0045000-7177e0048000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +7177e0048000-7177e0049000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +7177e0049000-7177e004a000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +7177e004a000-7177e004b000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +7177e004b000-7177e004c000 rw-p 00000000 00:00 0 +7177e004c000-7177e0057000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +7177e0057000-7177e006b000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +7177e006b000-7177e0074000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +7177e0074000-7177e0075000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +7177e0075000-7177e0076000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +7177e0076000-7177e06fd000 rw-p 00000000 00:00 0 +7177e06fd000-7177e06fe000 ---p 00000000 00:00 0 +7177e06fe000-7177e07fe000 rw-p 00000000 00:00 0 +7177e07fe000-7177e07ff000 ---p 00000000 00:00 0 +7177e07ff000-7177e08ff000 rw-p 00000000 00:00 0 +7177e08ff000-7177e0900000 ---p 00000000 00:00 0 +7177e0900000-7177e0a00000 rw-p 00000000 00:00 0 +7177e0a00000-7177e0a0e000 rw-p 00000000 00:00 0 +7177e0a0e000-7177e19a0000 ---p 00000000 00:00 0 +7177e19a0000-7177e19a1000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +7177e19a1000-7177e19a3000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +7177e19a3000-7177e19a4000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +7177e19a4000-7177e19a5000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +7177e19a5000-7177e19a6000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +7177e19a6000-7177e19a7000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +7177e19a7000-7177e19a8000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +7177e19a8000-7177e19a9000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +7177e19a9000-7177e19aa000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +7177e19aa000-7177e19ab000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +7177e19ab000-7177e19ae000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +7177e19ae000-7177e19ba000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +7177e19ba000-7177e19bd000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +7177e19bd000-7177e19be000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +7177e19be000-7177e19bf000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +7177e19bf000-7177e19fd000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +7177e19fd000-7177e19fe000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +7177e19fe000-7177e19ff000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +7177e19ff000-7177e1a00000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +7177e1a00000-7177e1a0e000 rw-p 00000000 00:00 0 +7177e1a0e000-7177e29a0000 ---p 00000000 00:00 0 +7177e29a0000-7177e29a1000 rw-s 00000000 00:01 672021 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) +7177e29a1000-7177e29a3000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +7177e29a3000-7177e29a5000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +7177e29a5000-7177e29a7000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +7177e29a7000-7177e29a8000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +7177e29a8000-7177e29a9000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +7177e29a9000-7177e29ab000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +7177e29ab000-7177e29ae000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +7177e29ae000-7177e29af000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +7177e29af000-7177e29b0000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +7177e29b0000-7177e29b1000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +7177e29b1000-7177e29b5000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +7177e29b5000-7177e29c0000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +7177e29c0000-7177e29c4000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +7177e29c4000-7177e29c5000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +7177e29c5000-7177e29c6000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +7177e29c6000-7177e332f000 rw-p 00000000 00:00 0 +7177e332f000-7177e3415000 ---p 00000000 00:00 0 +7177e3415000-7177e341b000 rw-p 00000000 00:00 0 +7177e341b000-7177e3500000 ---p 00000000 00:00 0 +7177e3500000-7177e3504000 ---p 00000000 00:00 0 +7177e3504000-7177e3600000 rw-p 00000000 00:00 0 +7177e3600000-7177e4930000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +7177e4930000-7177e4a00000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +7177e4a00000-7177e4a2e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +7177e4a2e000-7177e4aa4000 rw-p 00000000 00:00 0 +7177e4aa4000-7177e4aa5000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +7177e4aa5000-7177e4aa7000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +7177e4aa7000-7177e4aa8000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +7177e4aa8000-7177e4aa9000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +7177e4aa9000-7177e4aaa000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +7177e4aaa000-7177e4aac000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +7177e4aac000-7177e4ab3000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +7177e4ab3000-7177e4ab5000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +7177e4ab5000-7177e4ab6000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +7177e4ab6000-7177e4ab7000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +7177e4ab7000-7177e4ab8000 rw-s 00000000 00:01 672020 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +7177e4ab8000-7177e4ab9000 rw-s 00000000 00:01 671055 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +7177e4ab9000-7177e4aba000 r-xp 00000000 00:00 0 +7177e4aba000-7177e4abb000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +7177e4abb000-7177e4abc000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +7177e4abc000-7177e4abd000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +7177e4abd000-7177e4abe000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +7177e4abe000-7177e4abf000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +7177e4abf000-7177e4ac0000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +7177e4ac0000-7177e4ac3000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +7177e4ac3000-7177e4ac4000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +7177e4ac4000-7177e4ac5000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +7177e4ac5000-7177e4ac6000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +7177e4ac6000-7177e4ac8000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +7177e4ac8000-7177e4acf000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +7177e4acf000-7177e4ad1000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +7177e4ad1000-7177e4ad2000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +7177e4ad2000-7177e4ad3000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +7177e4ad3000-7177e4ad4000 r-xp 00000000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +7177e4ad4000-7177e4ad5000 ---p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +7177e4ad5000-7177e4ad6000 r--p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +7177e4ad6000-7177e4ad7000 rw-p 00002000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +7177e4ad7000-7177e4ad8000 rw-p 00000000 00:00 0 +7177e4ad8000-7177e4ad9000 r-xp 0005e000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7177e4ad9000-7177e4b19000 rw-p 00000000 00:00 0 +7177e4b19000-7177e4b27000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +7177e4b27000-7177e4ba3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +7177e4ba3000-7177e4bfe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +7177e4bfe000-7177e4bff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +7177e4bff000-7177e4c00000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +7177e4c00000-7177e4c28000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +7177e4c28000-7177e4dbd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +7177e4dbd000-7177e4e15000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +7177e4e15000-7177e4e16000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +7177e4e16000-7177e4e1a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +7177e4e1a000-7177e4e1c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +7177e4e1c000-7177e4e29000 rw-p 00000000 00:00 0 +7177e4e29000-7177e4e34000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +7177e4e34000-7177e4e35000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +7177e4e35000-7177e4e36000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +7177e4e36000-7177e4e37000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +7177e4e37000-7177e4e4a000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +7177e4e4a000-7177e4e4b000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +7177e4e4b000-7177e4e4c000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +7177e4e4c000-7177e4e4d000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +7177e4e4d000-7177e4e6d000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +7177e4e6d000-7177e4e6e000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +7177e4e6e000-7177e4e6f000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +7177e4e6f000-7177e4e70000 rw-p 00000000 00:00 0 +7177e4e70000-7177e4e8e000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +7177e4e8e000-7177e4e90000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +7177e4e90000-7177e4e91000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +7177e4e91000-7177e4e92000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +7177e4e92000-7177e4e93000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +7177e4e93000-7177e4e94000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +7177e4e94000-7177e4e95000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +7177e4e95000-7177e4e96000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +7177e4e96000-7177e4e9a000 rw-p 00000000 00:00 0 +7177e4e9a000-7177e4e9b000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +7177e4e9b000-7177e4e9c000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +7177e4e9c000-7177e4e9d000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +7177e4e9d000-7177e4e9e000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +7177e4e9e000-7177e4e9f000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +7177e4e9f000-7177e4ea0000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +7177e4ea0000-7177e4ea1000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +7177e4ea1000-7177e4ea2000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +7177e4ea2000-7177e4ea3000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +7177e4ea3000-7177e4ea4000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +7177e4ea4000-7177e4ea6000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +7177e4ea6000-7177e4eb7000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +7177e4eb7000-7177e4ebd000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +7177e4ebd000-7177e4ebe000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +7177e4ebe000-7177e4ebf000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +7177e4ebf000-7177e4ec0000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +7177e4ec0000-7177e4ec7000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +7177e4ec7000-7177e4ec8000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +7177e4ec8000-7177e4ec9000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +7177e4ec9000-7177e4eca000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +7177e4eca000-7177e4ecf000 rw-p 00000000 00:00 0 +7177e4ecf000-7177e4ed6000 ---p 00000000 00:00 0 +7177e4ed6000-7177e4ede000 rw-s 00000000 103:03 4325444 /tmp/hsperfdata_codex/85302 +7177e4ede000-7177e4edf000 ---p 00000000 00:00 0 +7177e4edf000-7177e4ee0000 r--p 00000000 00:00 0 +7177e4ee0000-7177e4eef000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +7177e4eef000-7177e4ef0000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +7177e4ef0000-7177e4ef1000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +7177e4ef1000-7177e4ef3000 rw-p 00000000 00:00 0 +7177e4ef3000-7177e4ef7000 r--p 00000000 00:00 0 [vvar] +7177e4ef7000-7177e4ef9000 r-xp 00000000 00:00 0 [vdso] +7177e4ef9000-7177e4efb000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7177e4efb000-7177e4f25000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7177e4f25000-7177e4f30000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7177e4f30000-7177e4f31000 ---p 00000000 00:00 0 +7177e4f31000-7177e4f33000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7177e4f33000-7177e4f35000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7ffd1cda5000-7ffd1cdc8000 rw-p 00000000 00:00 0 [stack] +ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] +Total number of mappings: 919 + + +VM Arguments: +jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant +java_command: jme3test.vulkan.VulkanTest +java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar +Launcher Type: SUN_STANDARD + +[Global flags] + intx CICompilerCount = 4 {product} {ergonomic} + uint ConcGCThreads = 2 {product} {ergonomic} + uint G1ConcRefinementThreads = 8 {product} {ergonomic} + size_t G1HeapRegionSize = 4194304 {product} {ergonomic} + size_t InitialHeapSize = 524288000 {product} {ergonomic} + size_t MarkStackSize = 4194304 {product} {ergonomic} + size_t MarkStackSizeMax = 536870912 {product} {ergonomic} + size_t MaxHeapSize = 8388608000 {product} {ergonomic} + size_t MaxNewSize = 5033164800 {product} {ergonomic} + size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} + size_t MinHeapSize = 8388608 {product} {ergonomic} + uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} + uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} + uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} + uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} + bool SegmentedCodeCache = true {product} {ergonomic} + size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} + bool UseCompressedOops = true {product lp64_product} {ergonomic} + bool UseG1GC = true {product} {ergonomic} + +Logging: +Log output configuration: + #0: stdout all=warning uptime,level,tags foldmultilines=false + #1: stderr all=off uptime,level,tags foldmultilines=false + +Environment Variables: +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin +USERNAME=codex +SHELL=/bin/bash +DISPLAY=:1 +LANG=en_US.UTF-8 + +Active Locale: +LC_ALL=en_US.UTF-8 +LC_COLLATE=en_US.UTF-8 +LC_CTYPE=en_US.UTF-8 +LC_MESSAGES=en_US.UTF-8 +LC_MONETARY=en_US.UTF-8 +LC_NUMERIC=en_US.UTF-8 +LC_TIME=en_US.UTF-8 + +Signal Handlers: + SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked + SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + + +Periodic native trim disabled + +--------------- S Y S T E M --------------- + +OS: +DISTRIB_ID=Pop +DISTRIB_RELEASE=22.04 +DISTRIB_CODENAME=jammy +DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" +uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 +OS uptime: 0 days 15:17 hours +libc: glibc 2.35 NPTL 2.35 +rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k +load average: 2.88 1.79 1.18 + +/proc/meminfo: +MemTotal: 32767652 kB +MemFree: 20156988 kB +MemAvailable: 23562748 kB +Buffers: 347352 kB +Cached: 5014400 kB +SwapCached: 0 kB +Active: 8810016 kB +Inactive: 2815840 kB +Active(anon): 6299316 kB +Inactive(anon): 0 kB +Active(file): 2510700 kB +Inactive(file): 2815840 kB +Unevictable: 15204 kB +Mlocked: 72 kB +SwapTotal: 20970996 kB +SwapFree: 20970996 kB +Zswap: 0 kB +Zswapped: 0 kB +Dirty: 44 kB +Writeback: 0 kB +AnonPages: 6279364 kB +Mapped: 1830436 kB +Shmem: 35212 kB +KReclaimable: 197300 kB +Slab: 385968 kB +SReclaimable: 197300 kB +SUnreclaim: 188668 kB +KernelStack: 22928 kB +PageTables: 54400 kB +SecPageTables: 0 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 37354820 kB +Committed_AS: 12319684 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 252496 kB +VmallocChunk: 0 kB +Percpu: 9472 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 6144 kB +ShmemPmdMapped: 0 kB +FileHugePages: 0 kB +FilePmdMapped: 0 kB +Unaccepted: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +Hugetlb: 0 kB +DirectMap4k: 851768 kB +DirectMap2M: 15826944 kB +DirectMap1G: 16777216 kB + +/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never +/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 +/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force +/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never + +Process Memory: +Virtual Size: 13446916K (peak: 13510788K) +Resident Set Size: 319092K (peak: 319092K) (anon: 173400K, file: 144668K, shmem: 1024K) +Swapped out: 0K +C-Heap outstanding allocations: 78977K, retained: 34794K +glibc malloc tunables: (default) + +/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 +/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 +/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 +/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 + +container (cgroup) information: +container_type: cgroupv2 +cpu_cpuset_cpus: not supported +cpu_memory_nodes: not supported +active_processor_count: 8 +cpu_quota: not supported +cpu_period: not supported +cpu_shares: not supported +memory_limit_in_bytes: unlimited +memory_and_swap_limit_in_bytes: unlimited +memory_soft_limit_in_bytes: 0 +memory_usage_in_bytes: 5973584 k +memory_max_usage_in_bytes: not supported +rss_usage_in_bytes: 3563880 k +cache_usage_in_bytes: 2326868 k +memory_swap_current_in_bytes: 0 +memory_swap_max_limit_in_bytes: unlimited +maximum number of tasks: 38296 +current number of tasks: 330 + +Steal ticks since vm start: 0 +Steal ticks percentage since vm start: 0.000 + +CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c +CPU Model and flags from /proc/cpuinfo: +model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities + +Online cpus: 0-7 +Offline cpus: +BIOS frequency limitation: +Frequency switch latency (ns): 0 +Available cpu frequencies: +Current governor: powersave +Core performance/turbo boost: + +Memory: 4k page, physical 32767652k(23562748k free), swap 20970996k(20970996k free) +Page Sizes: 4k + +vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 + +END. diff --git a/hs_err_pid85657.log b/hs_err_pid85657.log new file mode 100644 index 0000000000..e5175b0904 --- /dev/null +++ b/hs_err_pid85657.log @@ -0,0 +1,1598 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x00007903f6c5933a, pid=85657, tid=85703 +# +# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) +# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) +# Problematic frame: +# C [libjemalloc.so+0x5933a] +# +# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.85657) +# +# If you would like to submit a bug report, please visit: +# https://bugreport.java.com/bugreport/crash.jsp +# + +--------------- S U M M A R Y ------------ + +Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanTest + +Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS +Time: Thu Jun 26 22:36:15 2025 EDT elapsed time: 6.457410 seconds (0d 0h 0m 6s) + +--------------- T H R E A D --------------- + +Current thread is native thread + +Stack: [0x00007903f4f3d000,0x00007903f503d000], sp=0x00007903f503b8d0, free space=1018k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libjemalloc.so+0x5933a] + +siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 + +Registers: +RAX=0x0000000000000000, RBX=0x0000000000000200, RCX=0x0000000000000000, RDX=0x00007903f6c78440 +RSP=0x00007903f503b8d0, RBP=0x00007903f503bdb0, RSI=0x0000000000000000, RDI=0x00007903f65a8208 +R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x00007903f65a8248 +R12=0x000000000000003f, R13=0x00007903f503bd70, R14=0x000000000000003f, R15=0x00007903f503bad0 +RIP=0x00007903f6c5933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 + TRAPNO=0x000000000000000e + + +Top of Stack: (sp=0x00007903f503b8d0) +0x00007903f503b8d0: 00007904204e05a0 00007903f503b960 +0x00007903f503b8e0: 00007903f503b970 000079042754f211 +0x00007903f503b8f0: 0000000000000005 00007904204e0798 +0x00007903f503b900: 0000000000000005 0000000000000000 +0x00007903f503b910: 0000000000000001 00007904204e0230 +0x00007903f503b920: 00007904204e0798 00007904204e0230 +0x00007903f503b930: 000000010fd3f020 00007904204e05a0 +0x00007903f503b940: 0000000000000000 3430393700000000 +0x00007903f503b950: 3039306500000000 bf8eef8900000004 +0x00007903f503b960: 00000000ffffffff 0000000000000000 +0x00007903f503b970: 000079042720d4d0 000079042753c7c0 +0x00007903f503b980: 00007903f503b9b0 0000790426c78613 +0x00007903f503b990: 00007903f503bb88 000079042728849a +0x00007903f503b9a0: 0000000000000000 00007903f503baa0 +0x00007903f503b9b0: 00000000fbad8001 0000000000000002 +0x00007903f503b9c0: 00007904204e0230 00007903f7fff028 +0x00007903f503b9d0: 000079042741cae8 0000000000000004 +0x00007903f503b9e0: 00007903f503cb58 0000790427555f71 +0x00007903f503b9f0: 0000000000000005 0000000000000000 +0x00007903f503ba00: 000079042720d4d0 00007904272a53e0 +0x00007903f503ba10: 0000000000000000 00007903f503be00 +0x00007903f503ba20: 000079042741caf8 0000000000000000 +0x00007903f503ba30: 000079042741cae8 0000790427558dae +0x00007903f503ba40: 0000000000000001 000000000000006f +0x00007903f503ba50: 00007903f7fb17d0 0000000000000000 +0x00007903f503ba60: 00007902f0b80660 0000000000000000 +0x00007903f503ba70: 00000000000000ca f2eded9b3df5b717 +0x00007903f503ba80: 0000000000000213 0000790427417300 +0x00007903f503ba90: 0000000000000000 0000000000000200 +0x00007903f503baa0: 00007903f503bdb0 000000000000003f +0x00007903f503bab0: 00007903f503bd70 00007903f503bad0 +0x00007903f503bac0: 00007902f00024d0 00007903f6c592f8 + +Instructions: (pc=0x00007903f6c5933a) +0x00007903f6c5923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff +0x00007903f6c5924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 +0x00007903f6c5925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 +0x00007903f6c5926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c +0x00007903f6c5927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b +0x00007903f6c5928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 +0x00007903f6c5929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 +0x00007903f6c592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 +0x00007903f6c592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 +0x00007903f6c592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d +0x00007903f6c592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c +0x00007903f6c592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 +0x00007903f6c592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b +0x00007903f6c5930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 +0x00007903f6c5931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 +0x00007903f6c5932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 +0x00007903f6c5933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 +0x00007903f6c5934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c +0x00007903f6c5935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 +0x00007903f6c5936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 +0x00007903f6c5937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c +0x00007903f6c5938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 +0x00007903f6c5939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 +0x00007903f6c593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d +0x00007903f6c593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 +0x00007903f6c593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f +0x00007903f6c593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 +0x00007903f6c593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 +0x00007903f6c593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 +0x00007903f6c5940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff +0x00007903f6c5941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 +0x00007903f6c5942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 + + + +--------------- P R O C E S S --------------- + +VM state: not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: None + +Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 + +CDS archive(s) mapped at: [0x000079039e000000-0x000079039ed91000-0x000079039ed91000), size 14225408, SharedBaseAddress: 0x000079039e000000, ArchiveRelocationMode: 1. +Compressed class space mapped at: 0x000079039f000000-0x00007903df000000, reserved size: 1073741824 +Narrow klass base: 0x000079039e000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 + +GC Precious Log: + + +Heap: + garbage-first heap total reserved 8192000K, committed 28672K, used 14493K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 3 young (12288K), 1 survivors (4096K) + Metaspace used 22161K, committed 22464K, reserved 1114112K + class space used 2300K, committed 2432K, reserved 1048576K + +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|0x000000060c000000, 0x000000060c367560, 0x000000060c400000| 85%| O| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 +| 1|0x000000060c400000, 0x000000060c6c3790, 0x000000060c800000| 69%| O| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 +| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 +| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 +| 4|0x000000060d000000, 0x000000060d2a9c00, 0x000000060d400000| 66%| E| |TAMS 0x000000060d000000| PB 0x000000060d000000| Complete | 0 +| 5|0x000000060d400000, 0x000000060d552c20, 0x000000060d800000| 33%| S|CS|TAMS 0x000000060d400000| PB 0x000000060d400000| Complete | 0 +| 6|0x000000060d800000, 0x000000060dc00000, 0x000000060dc00000|100%| E|CS|TAMS 0x000000060d800000| PB 0x000000060d800000| Complete | 0 + +Card table byte_map: [0x0000790406800000,0x00007904077a0000] _byte_map_base: 0x00007904037a0000 + +Marking Bits: (CMBitMap*) 0x0000790420059190 + Bits: [0x00007903fea00000, 0x0000790406700000) + +Polling page: 0x0000790427528000 + +Metaspace: + +Usage: + Non-class: 19.40 MB used. + Class: 2.25 MB used. + Both: 21.64 MB used. + +Virtual space: + Non-class space: 64.00 MB reserved, 19.56 MB ( 31%) committed, 1 nodes. + Class space: 1.00 GB reserved, 2.38 MB ( <1%) committed, 1 nodes. + Both: 1.06 GB reserved, 21.94 MB ( 2%) committed. + +Chunk freelists: + Non-Class: 11.89 MB + Class: 13.44 MB + Both: 25.33 MB + +MaxMetaspaceSize: unlimited +CompressedClassSpaceSize: 1.00 GB +Initial GC threshold: 21.00 MB +Current GC threshold: 27.12 MB +CDS: on + - commit_granule_bytes: 65536. + - commit_granule_words: 8192. + - virtual_space_node_default_size: 8388608. + - enlarge_chunks_in_place: 1. + - use_allocation_guard: 0. + + +Internal statistics: + +num_allocs_failed_limit: 0. +num_arena_births: 334. +num_arena_deaths: 0. +num_vsnodes_births: 2. +num_vsnodes_deaths: 0. +num_space_committed: 351. +num_space_uncommitted: 0. +num_chunks_returned_to_freelist: 0. +num_chunks_taken_from_freelist: 687. +num_chunk_merges: 0. +num_chunk_splits: 437. +num_chunks_enlarged: 282. +num_inconsistent_stats: 0. + +CodeHeap 'non-profiled nmethods': size=120032Kb used=764Kb max_used=764Kb free=119267Kb + bounds [0x00007904102c8000, 0x0000790410538000, 0x0000790417800000] +CodeHeap 'profiled nmethods': size=120028Kb used=2918Kb max_used=2918Kb free=117109Kb + bounds [0x0000790408800000, 0x0000790408ae0000, 0x000079040fd37000] +CodeHeap 'non-nmethods': size=5700Kb used=2463Kb max_used=2482Kb free=3237Kb + bounds [0x000079040fd37000, 0x000079040ffb7000, 0x00007904102c8000] +CodeCache: size=245760Kb, used=6145Kb, max_used=6164Kb, free=239613Kb + total_blobs=3788, nmethods=2353, adapters=1341, full_count=0 +Compilation: enabled, stopped_count=0, restarted_count=0 + +Compilation events (20 events): +Event: 6.437 Thread 0x00007904201485b0 2487 3 com.jme3.util.IntMap::iterator (15 bytes) +Event: 6.438 Thread 0x00007904201485b0 nmethod 2487 0x0000790408ad4a88 code [0x0000790408ad4bc0, 0x0000790408ad4f50] +Event: 6.438 Thread 0x00007904201485b0 2488 3 com.jme3.util.IntMap$IntMapIterator:: (20 bytes) +Event: 6.438 Thread 0x00007904201485b0 nmethod 2488 0x0000790408ad4f88 code [0x0000790408ad50a0, 0x0000790408ad5278] +Event: 6.438 Thread 0x00007904201485b0 2489 3 com.jme3.util.IntMap$IntMapIterator::beginUse (24 bytes) +Event: 6.438 Thread 0x00007904201485b0 nmethod 2489 0x0000790408ad5308 code [0x0000790408ad5420, 0x0000790408ad55e8] +Event: 6.438 Thread 0x00007904201485b0 2490 3 com.jme3.util.IntMap$IntMapIterator::hasNext (20 bytes) +Event: 6.439 Thread 0x00007904201485b0 nmethod 2490 0x0000790408ad5608 code [0x0000790408ad5720, 0x0000790408ad5898] +Event: 6.453 Thread 0x00007904201485b0 2491 3 org.lwjgl.vulkan.VkClearValue::sizeof (4 bytes) +Event: 6.454 Thread 0x00007904201485b0 nmethod 2491 0x0000790408ad5908 code [0x0000790408ad5a20, 0x0000790408ad5b28] +Event: 6.454 Thread 0x00007904201485b0 2493 3 org.lwjgl.vulkan.VkOffset2D:: (7 bytes) +Event: 6.454 Thread 0x00007904201485b0 nmethod 2493 0x0000790408ad5c08 code [0x0000790408ad5d60, 0x0000790408ad6108] +Event: 6.454 Thread 0x00007904201485b0 2494 3 org.lwjgl.vulkan.VkOffset2D::set (14 bytes) +Event: 6.455 Thread 0x00007904201485b0 nmethod 2494 0x0000790408ad6188 code [0x0000790408ad62e0, 0x0000790408ad6730] +Event: 6.455 Thread 0x00007904201485b0 2495 3 org.lwjgl.vulkan.VkOffset2D::x (10 bytes) +Event: 6.455 Thread 0x00007904201485b0 nmethod 2495 0x0000790408ad6788 code [0x0000790408ad68c0, 0x0000790408ad6af8] +Event: 6.455 Thread 0x00007904201485b0 2492 3 org.lwjgl.vulkan.VkRenderPassBeginInfo::nclearValueCount (11 bytes) +Event: 6.455 Thread 0x00007904201485b0 nmethod 2492 0x0000790408ad6b88 code [0x0000790408ad6ca0, 0x0000790408ad6dc0] +Event: 6.455 Thread 0x00007904201485b0 2496 3 org.lwjgl.vulkan.VkOffset2D::malloc (19 bytes) +Event: 6.456 Thread 0x00007904201485b0 nmethod 2496 0x0000790408ad6e88 code [0x0000790408ad6fe0, 0x0000790408ad7330] + +GC Heap History (8 events): +Event: 2.375 GC heap before +{Heap before GC invocations=0 (full 0): + garbage-first heap total reserved 8192000K, committed 516096K, used 21627K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 6 young (24576K), 0 survivors (0K) + Metaspace used 16391K, committed 16640K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.386 GC heap after +{Heap after GC invocations=1 (full 1): + garbage-first heap total reserved 8192000K, committed 98304K, used 6315K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16391K, committed 16640K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.387 GC heap before +{Heap before GC invocations=1 (full 1): + garbage-first heap total reserved 8192000K, committed 98304K, used 6315K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16391K, committed 16640K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.399 GC heap after +{Heap after GC invocations=2 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 6315K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 0 young (0K), 0 survivors (0K) + Metaspace used 16391K, committed 16640K, reserved 1114112K + class space used 1823K, committed 1920K, reserved 1048576K +} +Event: 2.930 GC heap before +{Heap before GC invocations=2 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 14507K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 2 young (8192K), 0 survivors (0K) + Metaspace used 18709K, committed 19008K, reserved 1114112K + class space used 2041K, committed 2176K, reserved 1048576K +} +Event: 2.931 GC heap after +{Heap after GC invocations=3 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 7432K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 1 young (4096K), 1 survivors (4096K) + Metaspace used 18709K, committed 19008K, reserved 1114112K + class space used 2041K, committed 2176K, reserved 1048576K +} +Event: 2.983 GC heap before +{Heap before GC invocations=3 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 11528K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 2 young (8192K), 1 survivors (4096K) + Metaspace used 20103K, committed 20416K, reserved 1114112K + class space used 2172K, committed 2304K, reserved 1048576K +} +Event: 2.984 GC heap after +{Heap after GC invocations=4 (full 2): + garbage-first heap total reserved 8192000K, committed 28672K, used 7670K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 1 young (4096K), 1 survivors (4096K) + Metaspace used 20103K, committed 20416K, reserved 1114112K + class space used 2172K, committed 2304K, reserved 1048576K +} + +Dll operation events (12 events): +Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +Event: 0.016 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +Event: 0.024 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +Event: 0.026 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +Event: 0.071 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +Event: 0.121 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +Event: 0.127 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +Event: 0.217 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +Event: 0.219 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +Event: 0.246 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +Event: 0.323 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so + +Deoptimization events (20 events): +Event: 2.675 Thread 0x00007904206ae090 DEOPT PACKING pc=0x000079040888f38b sp=0x00007903f503a650 +Event: 2.675 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8b30f sp=0x00007903f5039b08 mode 0 +Event: 2.676 Thread 0x00007904206ae090 DEOPT PACKING pc=0x000079040888f38b sp=0x00007903f503a650 +Event: 2.676 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8b30f sp=0x00007903f5039b08 mode 0 +Event: 2.914 Thread 0x00007904206ae090 Uncommon trap: trap_request=0xffffff76 fr.pc=0x000079041034cde8 relative=0x00000000000001a8 +Event: 2.914 Thread 0x00007904206ae090 Uncommon trap: reason=predicate action=maybe_recompile pc=0x000079041034cde8 method=java.util.regex.Pattern$BmpCharPropertyGreedy.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 12 c2 +Event: 2.914 Thread 0x00007904206ae090 DEOPT PACKING pc=0x000079041034cde8 sp=0x00007903f503b0e0 +Event: 2.914 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8abf9 sp=0x00007903f503b0b8 mode 2 +Event: 2.968 Thread 0x00007904206ae090 Uncommon trap: trap_request=0xffffff6e fr.pc=0x00007904103669e8 relative=0x0000000000000148 +Event: 2.968 Thread 0x00007904206ae090 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x00007904103669e8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 +Event: 2.968 Thread 0x00007904206ae090 DEOPT PACKING pc=0x00007904103669e8 sp=0x00007903f503b0a0 +Event: 2.968 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8abf9 sp=0x00007903f503b050 mode 2 +Event: 3.109 Thread 0x00007904206ae090 Uncommon trap: trap_request=0xffffff6e fr.pc=0x0000790410369538 relative=0x0000000000000538 +Event: 3.109 Thread 0x00007904206ae090 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x0000790410369538 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 +Event: 3.109 Thread 0x00007904206ae090 DEOPT PACKING pc=0x0000790410369538 sp=0x00007903f503aa60 +Event: 3.109 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8abf9 sp=0x00007903f503a9c0 mode 2 +Event: 3.145 Thread 0x00007904206ae090 DEOPT PACKING pc=0x0000790408a30c1f sp=0x00007903f503a7c0 +Event: 3.145 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8b30f sp=0x00007903f5039c00 mode 0 +Event: 3.147 Thread 0x00007904206ae090 DEOPT PACKING pc=0x00007904088b3254 sp=0x00007903f503a790 +Event: 3.147 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8b30f sp=0x00007903f5039c48 mode 0 + +Classes loaded (20 events): +Event: 2.954 Loading class javax/imageio/ImageTypeSpecifier$Packed +Event: 2.954 Loading class javax/imageio/ImageTypeSpecifier$Packed done +Event: 2.955 Loading class java/awt/image/DataBufferByte +Event: 2.955 Loading class java/awt/image/DataBufferByte done +Event: 2.955 Loading class sun/awt/image/ByteInterleavedRaster +Event: 2.955 Loading class sun/awt/image/ByteComponentRaster +Event: 2.955 Loading class sun/awt/image/ByteComponentRaster done +Event: 2.955 Loading class sun/awt/image/ByteInterleavedRaster done +Event: 2.955 Loading class sun/awt/image/ShortComponentRaster +Event: 2.955 Loading class sun/awt/image/ShortComponentRaster done +Event: 3.023 Loading class java/util/function/LongFunction +Event: 3.023 Loading class java/util/function/LongFunction done +Event: 3.401 Loading class sun/awt/AppContext$PostShutdownEventRunnable +Event: 3.401 Loading class sun/awt/AppContext$PostShutdownEventRunnable done +Event: 3.401 Loading class sun/awt/AWTAutoShutdown$1 +Event: 3.401 Loading class sun/awt/AWTAutoShutdown$1 done +Event: 6.456 Loading class java/lang/Throwable$WrappedPrintStream +Event: 6.456 Loading class java/lang/Throwable$PrintStreamOrWriter +Event: 6.456 Loading class java/lang/Throwable$PrintStreamOrWriter done +Event: 6.456 Loading class java/lang/Throwable$WrappedPrintStream done + +Classes unloaded (0 events): +No events + +Classes redefined (0 events): +No events + +Internal exceptions (20 events): +Event: 0.617 Thread 0x000079042067c030 Exception (0x000000062a0b8978) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.325 Thread 0x000079042067c030 Exception (0x000000062a3573b0) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 2.369 Thread 0x000079042067c030 Exception (0x0000000629cc2cd0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.416 Thread 0x000079042002d0f0 Exception (0x000000060d996940) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 2.425 Thread 0x000079042002d0f0 Exception (0x000000060d9f4c80) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.426 Thread 0x000079042002d0f0 Exception (0x000000060da02ff0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.601 Thread 0x00007904206ae090 Exception (0x000000060d599078) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] +Event: 2.914 Thread 0x00007904206ae090 Exception (0x000000060d73e808) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.980 Thread 0x00007904206ae090 Exception (0x000000060dbd2d10) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 2.983 Thread 0x00007904206ae090 Exception (0x000000060dbfbc78) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.020 Thread 0x00007904206ae090 Exception (0x000000060d900098) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.021 Thread 0x00007904206ae090 Exception (0x000000060d9057e0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.035 Thread 0x00007904206ae090 Exception (0x000000060d9be038) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.036 Thread 0x00007904206ae090 Exception (0x000000060d9d08c8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.037 Thread 0x00007904206ae090 Exception (0x000000060d9d4868) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.037 Thread 0x00007904206ae090 Exception (0x000000060d9d8168) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.043 Thread 0x00007904206ae090 Exception (0x000000060da3c3d0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.077 Thread 0x00007904206ae090 Exception (0x000000060da8ce90) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.083 Thread 0x00007904206ae090 Exception (0x000000060daa78d0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 3.105 Thread 0x00007904206ae090 Exception (0x000000060dae73e0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] + +VM Operations (20 events): +Event: 0.135 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.135 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.231 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.231 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.248 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.248 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.257 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.257 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.651 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.651 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 2.375 Executing VM operation: G1CollectFull (System.gc()) +Event: 2.386 Executing VM operation: G1CollectFull (System.gc()) done +Event: 2.387 Executing VM operation: G1CollectFull (System.gc()) +Event: 2.399 Executing VM operation: G1CollectFull (System.gc()) done +Event: 2.423 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 2.423 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 2.930 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) +Event: 2.931 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done +Event: 2.983 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) +Event: 2.984 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done + +Memory protections (20 events): +Event: 0.016 Protecting memory [0x00007903fc500000,0x00007903fc504000] with protection modes 0 +Event: 0.016 Protecting memory [0x00007903fc400000,0x00007903fc404000] with protection modes 0 +Event: 0.021 Protecting memory [0x00007903fc230000,0x00007903fc234000] with protection modes 0 +Event: 0.022 Protecting memory [0x00007903fc130000,0x00007903fc134000] with protection modes 0 +Event: 0.052 Protecting memory [0x00007903fc030000,0x00007903fc034000] with protection modes 0 +Event: 0.269 Protecting memory [0x00007903f5f72000,0x00007903f5f76000] with protection modes 0 +Event: 0.271 Protecting memory [0x00007903f5e72000,0x00007903f5e76000] with protection modes 0 +Event: 0.273 Protecting memory [0x00007903f5d72000,0x00007903f5d76000] with protection modes 0 +Event: 0.273 Protecting memory [0x00007903f5c72000,0x00007903f5c76000] with protection modes 0 +Event: 0.323 Protecting memory [0x00007903f5b72000,0x00007903f5b76000] with protection modes 0 +Event: 0.544 Protecting memory [0x00007903fc030000,0x00007903fc034000] with protection modes 0 +Event: 0.648 Protecting memory [0x00007903f5a72000,0x00007903f5a76000] with protection modes 0 +Event: 0.681 Protecting memory [0x00007903f5872000,0x00007903f5876000] with protection modes 0 +Event: 2.348 Protecting memory [0x00007903f5a72000,0x00007903f5a76000] with protection modes 0 +Event: 2.371 Protecting memory [0x00007903f5772000,0x00007903f5776000] with protection modes 0 +Event: 2.431 Protecting memory [0x00007903f4f3d000,0x00007903f4f41000] with protection modes 0 +Event: 2.431 Protecting memory [0x0000790425b00000,0x0000790425b04000] with protection modes 0 +Event: 2.579 Protecting memory [0x00007903f5772000,0x00007903f5776000] with protection modes 0 +Event: 2.928 Protecting memory [0x00007903f5772000,0x00007903f5776000] with protection modes 0 +Event: 3.289 Protecting memory [0x00007903f5a72000,0x00007903f5a76000] with protection modes 0 + +Nmethod flushes (20 events): +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x000079040888aa08 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x000079040888db88 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088adf88 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088ae888 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088dbd08 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088dcb08 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088dd588 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088fd388 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408923988 +Event: 2.391 Thread 0x000079042012e2f0 flushing osr nmethod 0x0000790408923e08 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x000079040893ec08 +Event: 2.391 Thread 0x000079042012e2f0 flushing osr nmethod 0x000079040894f808 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408976408 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408977b88 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408988308 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408989008 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x000079040898c808 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904089b5d08 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904089b6008 +Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408a0fc88 + +Events (20 events): +Event: 0.544 Thread 0x000079042067c030 Thread added: 0x0000790338061560 +Event: 0.648 Thread 0x00007904201485b0 Thread added: 0x000079036437f070 +Event: 0.681 Thread 0x000079042067c030 Thread added: 0x00007903380dcdf0 +Event: 1.035 Thread 0x000079036437f070 Thread exited: 0x000079036437f070 +Event: 2.348 Thread 0x000079042013eeb0 Thread added: 0x00007903682bda80 +Event: 2.371 Thread 0x00007904201485b0 Thread added: 0x0000790364420100 +Event: 2.431 Thread 0x000079042002d0f0 Thread added: 0x00007904206ae090 +Event: 2.431 Thread 0x000079042002d0f0 Thread exited: 0x000079042002d0f0 +Event: 2.431 Thread 0x000079042002d0f0 Thread added: 0x000079042002d0f0 +Event: 2.564 Thread 0x0000790364420100 Thread exited: 0x0000790364420100 +Event: 2.564 Thread 0x00007903682bda80 Thread exited: 0x00007903682bda80 +Event: 2.579 Thread 0x00007904201485b0 Thread added: 0x0000790364363310 +Event: 2.914 Thread 0x0000790364363310 Thread exited: 0x0000790364363310 +Event: 2.928 Thread 0x00007904206ae090 Thread added: 0x00007902f057f190 +Event: 3.289 Thread 0x00007904201485b0 Thread added: 0x0000790364489930 +Event: 3.402 Thread 0x000079042067af20 Thread exited: 0x000079042067af20 +Event: 3.402 Thread 0x000079042067c030 Thread exited: 0x000079042067c030 +Event: 3.420 Thread 0x0000790364489930 Thread exited: 0x0000790364489930 +Event: 5.580 Thread 0x0000790338061560 Thread exited: 0x0000790338061560 +Event: 6.456 Thread 0x00007904206ae090 Thread exited: 0x00007904206ae090 + + +Dynamic libraries: +60c000000-60dc00000 rw-p 00000000 00:00 0 +60dc00000-800000000 ---p 00000000 00:00 0 +558c5a9d0000-558c5a9d1000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +558c5a9d2000-558c5a9d3000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +558c5a9d3000-558c5a9d4000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +558c6796b000-558c679b4000 rw-p 00000000 00:00 0 [heap] +7902a8000000-7902a80e0000 rw-p 00000000 00:00 0 +7902a80e0000-7902ac000000 ---p 00000000 00:00 0 +7902b0000000-7902b0021000 rw-p 00000000 00:00 0 +7902b0021000-7902b4000000 ---p 00000000 00:00 0 +7902b4000000-7902b4021000 rw-p 00000000 00:00 0 +7902b4021000-7902b8000000 ---p 00000000 00:00 0 +7902bc000000-7902bc021000 rw-p 00000000 00:00 0 +7902bc021000-7902c0000000 ---p 00000000 00:00 0 +7902c0000000-7902c0021000 rw-p 00000000 00:00 0 +7902c0021000-7902c4000000 ---p 00000000 00:00 0 +7902c8000000-7902c8021000 rw-p 00000000 00:00 0 +7902c8021000-7902cc000000 ---p 00000000 00:00 0 +7902cc000000-7902cc021000 rw-p 00000000 00:00 0 +7902cc021000-7902d0000000 ---p 00000000 00:00 0 +7902d4000000-7902d4021000 rw-p 00000000 00:00 0 +7902d4021000-7902d8000000 ---p 00000000 00:00 0 +7902d8000000-7902d80c8000 rw-p 00000000 00:00 0 +7902d80c8000-7902dc000000 ---p 00000000 00:00 0 +7902e0000000-7902e0021000 rw-p 00000000 00:00 0 +7902e0021000-7902e4000000 ---p 00000000 00:00 0 +7902e5000000-7902eb712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +7902eb712000-7902ebf30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +7902ebf30000-7902ebf76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +7902ebf76000-7902ebff2000 rw-p 00000000 00:00 0 +7902ec000000-7902ec021000 rw-p 00000000 00:00 0 +7902ec021000-7902f0000000 ---p 00000000 00:00 0 +7902f0000000-7902f3148000 rw-p 00000000 00:00 0 +7902f3148000-7902f4000000 ---p 00000000 00:00 0 +7902f8000000-7902f8021000 rw-p 00000000 00:00 0 +7902f8021000-7902fc000000 ---p 00000000 00:00 0 +7902fc000000-7902fc021000 rw-p 00000000 00:00 0 +7902fc021000-790300000000 ---p 00000000 00:00 0 +790304000000-790304021000 rw-p 00000000 00:00 0 +790304021000-790308000000 ---p 00000000 00:00 0 +790308000000-790308021000 rw-p 00000000 00:00 0 +790308021000-79030c000000 ---p 00000000 00:00 0 +790310000000-790310021000 rw-p 00000000 00:00 0 +790310021000-790314000000 ---p 00000000 00:00 0 +790314000000-790314021000 rw-p 00000000 00:00 0 +790314021000-790318000000 ---p 00000000 00:00 0 +79031c000000-79031c021000 rw-p 00000000 00:00 0 +79031c021000-790320000000 ---p 00000000 00:00 0 +790320000000-7903202bd000 rw-p 00000000 00:00 0 +7903202bd000-790324000000 ---p 00000000 00:00 0 +790328000000-790328021000 rw-p 00000000 00:00 0 +790328021000-79032c000000 ---p 00000000 00:00 0 +79032c000000-79032c36a000 rw-p 00000000 00:00 0 +79032c36a000-790330000000 ---p 00000000 00:00 0 +790334000000-790334021000 rw-p 00000000 00:00 0 +790334021000-790338000000 ---p 00000000 00:00 0 +790338000000-790338142000 rw-p 00000000 00:00 0 +790338142000-79033c000000 ---p 00000000 00:00 0 +790340000000-790340021000 rw-p 00000000 00:00 0 +790340021000-790344000000 ---p 00000000 00:00 0 +790344000000-790344021000 rw-p 00000000 00:00 0 +790344021000-790348000000 ---p 00000000 00:00 0 +79034c000000-79034c021000 rw-p 00000000 00:00 0 +79034c021000-790350000000 ---p 00000000 00:00 0 +790350000000-7903501a6000 rw-p 00000000 00:00 0 +7903501a6000-790354000000 ---p 00000000 00:00 0 +790358000000-790358021000 rw-p 00000000 00:00 0 +790358021000-79035c000000 ---p 00000000 00:00 0 +79035c000000-79035c021000 rw-p 00000000 00:00 0 +79035c021000-790360000000 ---p 00000000 00:00 0 +790362e00000-790362f25000 r--p 00000000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +790362f25000-7903633e5000 r-xp 00125000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +7903633e5000-790363519000 r--p 005e5000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +790363519000-79036351a000 ---p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +79036351a000-79036357d000 r--p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +79036357d000-790363587000 rw-p 0077c000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +790363587000-790363598000 rw-p 00000000 00:00 0 +790363600000-790363601000 ---p 00000000 00:00 0 +790363601000-790363e01000 rw-p 00000000 00:00 0 +790364000000-7903644a1000 rw-p 00000000 00:00 0 +7903644a1000-790368000000 ---p 00000000 00:00 0 +790368000000-790368591000 rw-p 00000000 00:00 0 +790368591000-79036c000000 ---p 00000000 00:00 0 +79036c400000-79036c401000 ---p 00000000 00:00 0 +79036c401000-79036cc01000 rw-p 00000000 00:00 0 +79036ce00000-79036ce01000 ---p 00000000 00:00 0 +79036ce01000-79036d601000 rw-p 00000000 00:00 0 +79036d800000-79036d801000 ---p 00000000 00:00 0 +79036d801000-79036e001000 rw-p 00000000 00:00 0 +79036e200000-79036e201000 ---p 00000000 00:00 0 +79036e201000-79036ea01000 rw-p 00000000 00:00 0 +79036ec00000-79036ec01000 ---p 00000000 00:00 0 +79036ec01000-79036f401000 rw-p 00000000 00:00 0 +79036f600000-79036f62f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +79036f62f000-79036fd02000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +79036fd02000-79036fe24000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +79036fe24000-79036fe35000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +79036fe35000-79036feb3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +79036feb3000-79036fec7000 rw-p 00000000 00:00 0 +790370000000-790370021000 rw-p 00000000 00:00 0 +790370021000-790374000000 ---p 00000000 00:00 0 +790374000000-790374021000 rw-p 00000000 00:00 0 +790374021000-790378000000 ---p 00000000 00:00 0 +790378200000-790378ef5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +790378ef5000-7903798d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +7903798d8000-790379ce9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +790379ce9000-79037a16b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +79037a16b000-79037a173000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +79037a173000-79037a17e000 rw-p 00000000 00:00 0 +79037a200000-79037a201000 ---p 00000000 00:00 0 +79037a201000-79037aa01000 rw-p 00000000 00:00 0 +79037ac00000-79037ac01000 ---p 00000000 00:00 0 +79037ac01000-79037b401000 rw-p 00000000 00:00 0 +79037b600000-79037b601000 ---p 00000000 00:00 0 +79037b601000-79037be01000 rw-p 00000000 00:00 0 +79037c000000-79037c021000 rw-p 00000000 00:00 0 +79037c021000-790380000000 ---p 00000000 00:00 0 +790380000000-790380021000 rw-p 00000000 00:00 0 +790380021000-790384000000 ---p 00000000 00:00 0 +790384600000-790384601000 ---p 00000000 00:00 0 +790384601000-790384e01000 rw-p 00000000 00:00 0 +790385000000-790385001000 ---p 00000000 00:00 0 +790385001000-790385801000 rw-p 00000000 00:00 0 +790385a00000-790385a01000 ---p 00000000 00:00 0 +790385a01000-790386201000 rw-p 00000000 00:00 0 +790386400000-79038648d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +79038648d000-790386bf5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +790386bf5000-790387482000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +790387482000-7903874c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +7903874c4000-7903874c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +7903874c7000-7903874cd000 rw-p 00000000 00:00 0 +790387600000-79038765b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +79038765b000-7903879d9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +7903879d9000-790387dd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +790387dd5000-790387e10000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +790387e10000-790387e15000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +790387e15000-790387e40000 rw-p 00000000 00:00 0 +790388000000-790388021000 rw-p 00000000 00:00 0 +790388021000-79038c000000 ---p 00000000 00:00 0 +79038c000000-79038c638000 rw-p 00000000 00:00 0 +79038c638000-790390000000 ---p 00000000 00:00 0 +790390000000-790390200000 rw-s 00000000 00:06 1017 /dev/nvidiactl +790390200000-790390222000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +790390222000-790390421000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +790390421000-790390429000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +790390429000-79039042a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +79039042a000-79039042b000 rw-p 00000000 00:00 0 +790390600000-790390800000 rw-s 00000000 00:06 1022 /dev/nvidia0 +790390800000-79039086e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +79039086e000-790390dd5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +790390dd5000-7903914e8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +7903914e8000-7903914e9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +7903914e9000-790391526000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +790391526000-790391529000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +790391529000-79039152b000 rw-p 00000000 00:00 0 +790391600000-7903917c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +7903917c4000-7903934c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +7903934c4000-790393b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +790393b39000-790393b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +790393b3a000-790393d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +790393d1a000-790393d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +790393d93000-790393e08000 rw-p 00000000 00:00 0 +790393e0d000-790393e8d000 rw-s 00000000 00:06 1017 /dev/nvidiactl +790393e8d000-790393f8d000 rw-s 00000000 00:06 1017 /dev/nvidiactl +790393f8d000-790393fa0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +790393fa0000-790393fe0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +790394000000-7903943f0000 rw-p 00000000 00:00 0 +7903943f0000-7903945b0000 rw-p 00000000 00:00 0 +7903945b0000-7903946f0000 rw-p 00000000 00:00 0 +7903946f0000-790394710000 rw-p 00000000 00:00 0 +790394710000-790394730000 rw-p 00000000 00:00 0 +790394730000-790394770000 rw-p 00000000 00:00 0 +790394770000-7903949f0000 rw-p 00000000 00:00 0 +7903949f0000-790394a10000 rw-p 00000000 00:00 0 +790394a10000-790394a30000 rw-p 00000000 00:00 0 +790394a30000-790394a70000 rw-p 00000000 00:00 0 +790394a70000-790394af0000 rw-p 00000000 00:00 0 +790394af0000-790394cf0000 rw-p 00000000 00:00 0 +790394cf0000-790394d10000 rw-p 00000000 00:00 0 +790394d10000-790394d30000 rw-p 00000000 00:00 0 +790394d30000-790394d70000 rw-p 00000000 00:00 0 +790394d70000-790394ef0000 rw-p 00000000 00:00 0 +790394ef0000-790394ff0000 rw-p 00000000 00:00 0 +790394ff0000-7903950f0000 rw-p 00000000 00:00 0 +7903950f0000-790395170000 rw-p 00000000 00:00 0 +790395170000-790395200000 ---p 00000000 00:00 0 +790395200000-790395420000 rw-p 00000000 00:00 0 +790395420000-790398000000 ---p 00000000 00:00 0 +790398000000-790398021000 rw-p 00000000 00:00 0 +790398021000-79039c000000 ---p 00000000 00:00 0 +79039c000000-79039c200000 rw-s 00000000 00:06 1017 /dev/nvidiactl +79039c200000-79039c201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +79039c201000-79039c202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +79039c202000-79039de1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +79039de1c000-79039de1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +79039de1d000-79039de1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +79039de20000-79039de60000 rw-s 00000000 00:06 1017 /dev/nvidiactl +79039de60000-79039de80000 rw-s 00000000 00:06 1017 /dev/nvidiactl +79039de80000-79039df00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +79039df00000-79039e000000 rw-s 00000000 00:06 1017 /dev/nvidiactl +79039e000000-79039ed91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa +79039ed91000-79039f000000 ---p 00000000 00:00 0 +79039f000000-79039f030000 rw-p 00000000 00:00 0 +79039f030000-79039f090000 rw-p 00000000 00:00 0 +79039f090000-79039f0b0000 rw-p 00000000 00:00 0 +79039f0b0000-79039f130000 rw-p 00000000 00:00 0 +79039f130000-79039f150000 rw-p 00000000 00:00 0 +79039f150000-79039f1b0000 rw-p 00000000 00:00 0 +79039f1b0000-79039f1d0000 rw-p 00000000 00:00 0 +79039f1d0000-79039f230000 rw-p 00000000 00:00 0 +79039f230000-79039f250000 rw-p 00000000 00:00 0 +79039f250000-79039f280000 ---p 00000000 00:00 0 +79039f280000-79039f290000 rw-p 00000000 00:00 0 +79039f290000-7903df000000 ---p 00000000 00:00 0 +7903df004000-7903df005000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903df005000-7903df009000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df009000-7903df00a000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903df00a000-7903df00c000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df00c000-7903df00d000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903df00d000-7903df04d000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df04d000-7903df06d000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df06d000-7903df0ad000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df0cd000-7903df0e0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df0e0000-7903df120000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df120000-7903df140000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df140000-7903df240000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df240000-7903df280000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df280000-7903df2c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df2c0000-7903df3c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df3c0000-7903df400000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903df400000-7903df493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +7903df493000-7903df8e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +7903df8e6000-7903dfdfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +7903dfdfc000-7903dfe34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +7903dfe34000-7903dfe44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +7903dfe44000-7903dfe49000 rw-p 00000000 00:00 0 +7903dfe49000-7903dfe4d000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903dfe4d000-7903dfe60000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903dfe60000-7903dfe80000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903dfe80000-7903dff00000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903dff00000-7903e0000000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e0000000-7903e0021000 rw-p 00000000 00:00 0 +7903e0021000-7903e4000000 ---p 00000000 00:00 0 +7903e4000000-7903e4021000 rw-p 00000000 00:00 0 +7903e4021000-7903e8000000 ---p 00000000 00:00 0 +7903e8000000-7903e8001000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903e8001000-7903e8002000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903e8022000-7903e8035000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e8035000-7903e8055000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e8055000-7903e80d5000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e80d5000-7903e8115000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e8115000-7903e8135000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e8135000-7903e8175000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e8175000-7903e8195000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e8195000-7903e81d5000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e81d5000-7903e841a000 rw-s 00000000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) +7903e841a000-7903e855b000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index +7903e855b000-7903e856c000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +7903e856c000-7903e85ae000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +7903e85ae000-7903e85c6000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +7903e85c6000-7903e85d4000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +7903e85d4000-7903e85d6000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so +7903e85d6000-7903e85da000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7903e85da000-7903e85f6000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7903e85f6000-7903e85fc000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7903e85fc000-7903e85fd000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7903e85fd000-7903e85ff000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7903e85ff000-7903e8600000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +7903e8600000-7903e8616000 r--p 00000000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +7903e8616000-7903e8706000 r-xp 00016000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +7903e8706000-7903e8779000 r--p 00106000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +7903e8779000-7903e8780000 r--p 00178000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +7903e8780000-7903e8787000 rw-p 0017f000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +7903e8787000-7903e8802000 rw-p 00000000 00:00 0 +7903e8802000-7903e8803000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e8803000-7903e8804000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e8804000-7903e8805000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e8805000-7903e8818000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e8818000-7903e881a000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7903e881a000-7903e8823000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7903e8823000-7903e8826000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7903e8826000-7903e8827000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7903e8827000-7903e8828000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7903e8828000-7903e8829000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +7903e8829000-7903e882b000 rw-p 00000000 00:00 0 +7903e882b000-7903e882d000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +7903e882d000-7903e8898000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +7903e8898000-7903e88c0000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +7903e88c0000-7903e88c1000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +7903e88c1000-7903e88c2000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +7903e88c2000-7903e88d1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7903e88d1000-7903e89b7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7903e89b7000-7903e89f5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7903e89f5000-7903e89f6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7903e89f6000-7903e89f9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7903e89f9000-7903e89ff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +7903e89ff000-7903e9322000 rw-p 00000000 00:00 0 +7903e9322000-7903e9323000 rw-s 00044000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) +7903e9323000-7903e9324000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903e9324000-7903e9325000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903e9325000-7903e9327000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e9327000-7903e9328000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903e9328000-7903e9348000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e9348000-7903e9352000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +7903e9352000-7903e935c000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +7903e935c000-7903e9363000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +7903e9363000-7903e936c000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +7903e936c000-7903e936d000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +7903e936d000-7903e9379000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +7903e9379000-7903e9399000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +7903e9399000-7903e93a5000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +7903e93a5000-7903e93af000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +7903e93af000-7903e93b0000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +7903e93b0000-7903e93c3000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +7903e93c3000-7903e93e2000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +7903e93e2000-7903e93ef000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +7903e93ef000-7903e93ff000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +7903e93ff000-7903e9400000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +7903e9400000-7903e9401000 ---p 00000000 00:00 0 +7903e9401000-7903e9c01000 rw-p 00000000 00:00 0 +7903e9c01000-7903e9c02000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e9c02000-7903e9c06000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e9c06000-7903e9c07000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903e9c07000-7903e9c09000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903e9c09000-7903e9c14000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7903e9c14000-7903e9c42000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7903e9c42000-7903e9c54000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7903e9c54000-7903e9c55000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7903e9c55000-7903e9c56000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7903e9c56000-7903e9c57000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +7903e9c57000-7903e9c6a000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7903e9c6a000-7903e9ce9000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7903e9ce9000-7903e9d14000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7903e9d14000-7903e9d15000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7903e9d15000-7903e9d1c000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7903e9d1c000-7903e9d1d000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +7903e9d1d000-7903e9d1e000 rw-p 00000000 00:00 0 +7903e9d1e000-7903e9d51000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +7903e9d51000-7903e9db4000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +7903e9db4000-7903e9dd3000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +7903e9dd3000-7903e9dfe000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +7903e9dfe000-7903e9dff000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +7903e9dff000-7903e9e00000 rw-p 00000000 00:00 0 +7903e9e00000-7903ea041000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +7903ea041000-7903ea062000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +7903ea062000-7903ea200000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +7903ea200000-7903eae00000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +7903eae00000-7903ebcab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +7903ebcab000-7903ebe10000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +7903ebe10000-7903ebe7e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +7903ebe7e000-7903ebe9c000 rw-p 00000000 00:00 0 +7903ebe9c000-7903ebea0000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903ebea0000-7903ebea4000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +7903ebea4000-7903ebeb4000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +7903ebeb4000-7903ebeb7000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +7903ebeb7000-7903ebeb8000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +7903ebeb8000-7903ebeb9000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +7903ebeb9000-7903ebee8000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +7903ebee8000-7903ebfa4000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +7903ebfa4000-7903ebfef000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +7903ebfef000-7903ebffd000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +7903ebffd000-7903ebfff000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +7903ebfff000-7903ec000000 rw-p 00000000 00:00 0 +7903ec000000-7903ec021000 rw-p 00000000 00:00 0 +7903ec021000-7903f0000000 ---p 00000000 00:00 0 +7903f0000000-7903f0021000 rw-p 00000000 00:00 0 +7903f0021000-7903f4000000 ---p 00000000 00:00 0 +7903f4000000-7903f4001000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903f4001000-7903f4002000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903f4002000-7903f4003000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903f4003000-7903f4007000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903f4007000-7903f4010000 rw-s 00000000 00:01 666571 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +7903f4010000-7903f4019000 rw-s 00000000 00:01 666570 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) +7903f4019000-7903f401b000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +7903f401b000-7903f401f000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +7903f401f000-7903f4021000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +7903f4021000-7903f4022000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +7903f4022000-7903f4023000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so +7903f4023000-7903f4089000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +7903f4089000-7903f417c000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +7903f417c000-7903f4208000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +7903f4208000-7903f421b000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +7903f421b000-7903f421c000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +7903f421c000-7903f421e000 rw-p 00000000 00:00 0 +7903f421e000-7903f424d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7903f424d000-7903f43a0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7903f43a0000-7903f43f4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7903f43f4000-7903f43f5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7903f43f5000-7903f43fe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7903f43fe000-7903f43ff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +7903f43ff000-7903f4400000 rw-p 00000000 00:00 0 +7903f4400000-7903f449a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7903f449a000-7903f45ab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7903f45ab000-7903f461a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7903f461a000-7903f461b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7903f461b000-7903f4626000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7903f4626000-7903f4629000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +7903f4629000-7903f462c000 rw-p 00000000 00:00 0 +7903f462c000-7903f462d000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903f462d000-7903f4633000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7903f4633000-7903f464d000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7903f464d000-7903f4654000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7903f4654000-7903f4655000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7903f4655000-7903f4656000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7903f4656000-7903f4657000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +7903f4657000-7903f4659000 rw-p 00000000 00:00 0 +7903f4659000-7903f465d000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +7903f465d000-7903f4673000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +7903f4673000-7903f467d000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +7903f467d000-7903f467e000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +7903f467e000-7903f467f000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +7903f467f000-7903f4681000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7903f4681000-7903f469a000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7903f469a000-7903f469c000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7903f469c000-7903f469d000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7903f469d000-7903f469e000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7903f469e000-7903f469f000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +7903f469f000-7903f46a3000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903f46a3000-7903f46a5000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +7903f46a5000-7903f46ad000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +7903f46ad000-7903f46af000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +7903f46af000-7903f46b0000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +7903f46b0000-7903f46b1000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +7903f46b1000-7903f46b3000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7903f46b3000-7903f46bb000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7903f46bb000-7903f46bc000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7903f46bc000-7903f46bd000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7903f46bd000-7903f46be000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7903f46be000-7903f46bf000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +7903f46bf000-7903f46c3000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7903f46c3000-7903f46d8000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7903f46d8000-7903f46de000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7903f46de000-7903f46df000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7903f46df000-7903f46e1000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7903f46e1000-7903f46e2000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +7903f46e2000-7903f46e5000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7903f46e5000-7903f4706000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7903f4706000-7903f4712000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7903f4712000-7903f4713000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7903f4713000-7903f4714000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7903f4714000-7903f4715000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +7903f4715000-7903f4723000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +7903f4723000-7903f4734000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +7903f4734000-7903f4742000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +7903f4742000-7903f4746000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +7903f4746000-7903f4747000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +7903f4747000-7903f474f000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +7903f474f000-7903f476d000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +7903f476d000-7903f477a000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +7903f477a000-7903f477c000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +7903f477c000-7903f477d000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +7903f477d000-7903f4781000 rw-p 00000000 00:00 0 +7903f4781000-7903f4783000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7903f4783000-7903f478a000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7903f478a000-7903f478b000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7903f478b000-7903f478c000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7903f478c000-7903f478d000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7903f478d000-7903f478e000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +7903f478e000-7903f4791000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +7903f4791000-7903f47a8000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +7903f47a8000-7903f47ac000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +7903f47ac000-7903f47ad000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +7903f47ad000-7903f47ae000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +7903f47ae000-7903f47b2000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7903f47b2000-7903f47d1000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7903f47d1000-7903f47db000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7903f47db000-7903f47dc000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7903f47dc000-7903f47de000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7903f47de000-7903f47df000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +7903f47df000-7903f47e4000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7903f47e4000-7903f47ef000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7903f47ef000-7903f47f3000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7903f47f3000-7903f47f4000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7903f47f4000-7903f47f5000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7903f47f5000-7903f47f6000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +7903f47f6000-7903f4800000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +7903f4800000-7903f48b2000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +7903f48b2000-7903f48c3000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +7903f48c3000-7903f48c4000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +7903f48c4000-7903f48c5000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +7903f48c5000-7903f48ca000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +7903f48ca000-7903f48d0000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +7903f48d0000-7903f48d3000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +7903f48d3000-7903f48d5000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +7903f48d5000-7903f48d6000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +7903f48d6000-7903f4927000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7903f4927000-7903f4983000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7903f4983000-7903f49b8000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7903f49b8000-7903f49b9000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7903f49b9000-7903f49d9000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7903f49d9000-7903f49f9000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7903f49f9000-7903f49fe000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +7903f49fe000-7903f4a00000 rw-p 00000000 00:00 0 +7903f4a00000-7903f4e00000 rw-p 00000000 00:00 0 +7903f4e00000-7903f4e02000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903f4e02000-7903f4e05000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7903f4e05000-7903f4e08000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7903f4e08000-7903f4e09000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7903f4e09000-7903f4e0a000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7903f4e0a000-7903f4e0b000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7903f4e0b000-7903f4e0c000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +7903f4e0c000-7903f4e1c000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7903f4e1c000-7903f4e7a000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7903f4e7a000-7903f4e96000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7903f4e96000-7903f4e97000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7903f4e97000-7903f4e9d000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7903f4e9d000-7903f4e9e000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +7903f4e9e000-7903f4ea6000 rw-p 00000000 00:00 0 +7903f4ea6000-7903f4eb6000 r--p 00000000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +7903f4eb6000-7903f4ed7000 r-xp 00010000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +7903f4ed7000-7903f4f13000 r--p 00031000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +7903f4f13000-7903f4f17000 r--p 0006c000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +7903f4f17000-7903f4f1a000 rw-p 00070000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +7903f4f1a000-7903f4f3d000 rw-p 00000000 00:00 0 +7903f4f3d000-7903f4f41000 ---p 00000000 00:00 0 +7903f4f41000-7903f503d000 rw-p 00000000 00:00 0 +7903f503d000-7903f503e000 ---p 00000000 00:00 0 +7903f503e000-7903f513e000 rw-p 00000000 00:00 0 +7903f513e000-7903f513f000 ---p 00000000 00:00 0 +7903f513f000-7903f523f000 rw-p 00000000 00:00 0 +7903f523f000-7903f5240000 ---p 00000000 00:00 0 +7903f5240000-7903f5340000 rw-p 00000000 00:00 0 +7903f5340000-7903f5341000 ---p 00000000 00:00 0 +7903f5341000-7903f5441000 rw-p 00000000 00:00 0 +7903f5441000-7903f5442000 ---p 00000000 00:00 0 +7903f5442000-7903f5542000 rw-p 00000000 00:00 0 +7903f5542000-7903f5543000 ---p 00000000 00:00 0 +7903f5543000-7903f5643000 rw-p 00000000 00:00 0 +7903f5643000-7903f5644000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903f5644000-7903f5645000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +7903f5645000-7903f5646000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +7903f5646000-7903f5647000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +7903f5647000-7903f5648000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +7903f5648000-7903f5649000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +7903f5649000-7903f564c000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7903f564c000-7903f564f000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7903f564f000-7903f5650000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7903f5650000-7903f5651000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7903f5651000-7903f5652000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7903f5652000-7903f5653000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +7903f5653000-7903f5656000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7903f5656000-7903f566a000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7903f566a000-7903f566e000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7903f566e000-7903f566f000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7903f566f000-7903f5670000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7903f5670000-7903f5671000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +7903f5671000-7903f5672000 ---p 00000000 00:00 0 +7903f5672000-7903f5772000 rw-p 00000000 00:00 0 +7903f5772000-7903f5776000 ---p 00000000 00:00 0 +7903f5776000-7903f5872000 rw-p 00000000 00:00 0 +7903f5872000-7903f5876000 ---p 00000000 00:00 0 +7903f5876000-7903f5972000 rw-p 00000000 00:00 0 +7903f5972000-7903f5a72000 rw-s 00000000 00:01 1015856 /SYSV00000000 (deleted) +7903f5a72000-7903f5a76000 ---p 00000000 00:00 0 +7903f5a76000-7903f5b72000 rw-p 00000000 00:00 0 +7903f5b72000-7903f5b76000 ---p 00000000 00:00 0 +7903f5b76000-7903f5c72000 rw-p 00000000 00:00 0 +7903f5c72000-7903f5c76000 ---p 00000000 00:00 0 +7903f5c76000-7903f5d72000 rw-p 00000000 00:00 0 +7903f5d72000-7903f5d76000 ---p 00000000 00:00 0 +7903f5d76000-7903f5e72000 rw-p 00000000 00:00 0 +7903f5e72000-7903f5e76000 ---p 00000000 00:00 0 +7903f5e76000-7903f5f72000 rw-p 00000000 00:00 0 +7903f5f72000-7903f5f76000 ---p 00000000 00:00 0 +7903f5f76000-7903f6072000 rw-p 00000000 00:00 0 +7903f6072000-7903f607f000 r--p 00000000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7903f607f000-7903f6108000 r-xp 0000d000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7903f6108000-7903f6131000 r--p 00096000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7903f6131000-7903f6132000 ---p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7903f6132000-7903f6139000 r--p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7903f6139000-7903f613a000 rw-p 000c6000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 +7903f613a000-7903f62bb000 r-xp 00000000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +7903f62bb000-7903f62bc000 ---p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +7903f62bc000-7903f62be000 r--p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +7903f62be000-7903f62bf000 rw-p 00183000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so +7903f62bf000-7903f62c0000 rw-p 00000000 00:00 0 +7903f62c0000-7903f62d9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7903f62d9000-7903f6365000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7903f6365000-7903f63fa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7903f63fa000-7903f63fb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7903f63fb000-7903f63fc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7903f63fc000-7903f6400000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +7903f6400000-7903f6c00000 rw-p 00000000 00:00 0 +7903f6c00000-7903f6c08000 r--p 00000000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7903f6c08000-7903f6c60000 r-xp 00008000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7903f6c60000-7903f6c71000 r--p 00060000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7903f6c71000-7903f6c72000 ---p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7903f6c72000-7903f6c78000 r--p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7903f6c78000-7903f6c79000 rw-p 00077000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +7903f6c79000-7903f6e83000 rw-p 00000000 00:00 0 +7903f6e83000-7903f6e84000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903f6e84000-7903f6e85000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903f6e85000-7903f6e88000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +7903f6e88000-7903f6e8e000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +7903f6e8e000-7903f6e90000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +7903f6e90000-7903f6e91000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +7903f6e91000-7903f6e92000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +7903f6e92000-7903f6e98000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +7903f6e98000-7903f6ee2000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +7903f6ee2000-7903f6f0c000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +7903f6f0c000-7903f6f0d000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +7903f6f0d000-7903f6f0e000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +7903f6f0e000-7903f6fcf000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +7903f6fcf000-7903f6fd0000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +7903f6fd0000-7903f6fdb000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +7903f6fdb000-7903f7000000 rw-p 00000000 00:00 0 +7903f7000000-7903f7f06000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive +7903f7f06000-7903f7f08000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7903f7f08000-7903f7f09000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903f7f09000-7903f7f0a000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7903f7f0a000-7903f7f7a000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +7903f7f7a000-7903f7f7b000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +7903f7f7b000-7903f7f80000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +7903f7f80000-7903f7f82000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +7903f7f82000-7903f7f84000 rw-p 00000000 00:00 0 +7903f7f84000-7903f7fb0000 r--p 00000000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7903f7fb0000-7903f7fe4000 r-xp 0002c000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7903f7fe4000-7903f7ffe000 r--p 00060000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7903f7ffe000-7903f7fff000 r--p 00079000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7903f7fff000-7903f8000000 rw-p 0007a000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +7903f8000000-7903f8021000 rw-p 00000000 00:00 0 +7903f8021000-7903fc000000 ---p 00000000 00:00 0 +7903fc000000-7903fc007000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7903fc007000-7903fc00d000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7903fc00d000-7903fc010000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7903fc010000-7903fc011000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7903fc011000-7903fc012000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7903fc012000-7903fc013000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +7903fc013000-7903fc01e000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7903fc01e000-7903fc027000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7903fc027000-7903fc02c000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7903fc02c000-7903fc02d000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7903fc02d000-7903fc02f000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7903fc02f000-7903fc030000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +7903fc030000-7903fc034000 ---p 00000000 00:00 0 +7903fc034000-7903fc130000 rw-p 00000000 00:00 0 +7903fc130000-7903fc134000 ---p 00000000 00:00 0 +7903fc134000-7903fc230000 rw-p 00000000 00:00 0 +7903fc230000-7903fc234000 ---p 00000000 00:00 0 +7903fc234000-7903fc330000 rw-p 00000000 00:00 0 +7903fc330000-7903fc3fe000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +7903fc3fe000-7903fc3ff000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +7903fc3ff000-7903fc400000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +7903fc400000-7903fc404000 ---p 00000000 00:00 0 +7903fc404000-7903fc500000 rw-p 00000000 00:00 0 +7903fc500000-7903fc504000 ---p 00000000 00:00 0 +7903fc504000-7903fc600000 rw-p 00000000 00:00 0 +7903fc600000-7903fc604000 ---p 00000000 00:00 0 +7903fc604000-7903fc700000 rw-p 00000000 00:00 0 +7903fc700000-7903fc704000 ---p 00000000 00:00 0 +7903fc704000-7903fc800000 rw-p 00000000 00:00 0 +7903fc800000-7903fc804000 ---p 00000000 00:00 0 +7903fc804000-7903fc900000 rw-p 00000000 00:00 0 +7903fc900000-7903fc904000 ---p 00000000 00:00 0 +7903fc904000-7903fca00000 rw-p 00000000 00:00 0 +7903fca00000-7903fea70000 rw-p 00000000 00:00 0 +7903fea70000-790406700000 ---p 00000000 00:00 0 +790406700000-790406704000 ---p 00000000 00:00 0 +790406704000-790406800000 rw-p 00000000 00:00 0 +790406800000-79040680e000 rw-p 00000000 00:00 0 +79040680e000-7904077a0000 ---p 00000000 00:00 0 +7904077a0000-7904077a1000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +7904077a1000-7904077a2000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +7904077a2000-7904077a3000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +7904077a3000-7904077a4000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +7904077a4000-7904077a5000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +7904077a5000-7904077a6000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +7904077a6000-7904077a7000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +7904077a7000-7904077a8000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +7904077a8000-7904077a9000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +7904077a9000-7904077aa000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +7904077aa000-7904077ac000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +7904077ac000-7904077ae000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +7904077ae000-7904077af000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +7904077af000-7904077b0000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +7904077b0000-7904077b1000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +7904077b1000-7904077b8000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache +7904077b8000-7904077b9000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7904077b9000-7904077bc000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7904077bc000-7904077bd000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7904077bd000-7904077be000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7904077be000-7904077bf000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7904077bf000-7904077c0000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +7904077c0000-7904077c3000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +7904077c3000-7904077c7000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +7904077c7000-7904077c9000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +7904077c9000-7904077ca000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +7904077ca000-7904077cb000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +7904077cb000-7904077cc000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +7904077cc000-7904077ce000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +7904077ce000-7904077cf000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +7904077cf000-7904077d0000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +7904077d0000-7904077d1000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +7904077d1000-7904077d3000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +7904077d3000-7904077d9000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +7904077d9000-7904077db000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +7904077db000-7904077dc000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +7904077dc000-7904077dd000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 +7904077dd000-7904077de000 r--p 00000000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +7904077de000-7904077df000 r-xp 00001000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +7904077df000-7904077fe000 r--p 00002000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +7904077fe000-7904077ff000 r--p 00020000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +7904077ff000-790407800000 rw-p 00021000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 +790407800000-79040780e000 rw-p 00000000 00:00 0 +79040780e000-7904087a0000 ---p 00000000 00:00 0 +7904087a0000-7904087a1000 rw-s 00000000 00:06 1022 /dev/nvidia0 +7904087a1000-7904087a2000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7904087a2000-7904087a3000 rw-s 00000000 00:06 1017 /dev/nvidiactl +7904087a3000-7904087a4000 r--s 00000000 00:06 1017 /dev/nvidiactl +7904087a4000-7904087a5000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +7904087a5000-7904087a7000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +7904087a7000-7904087a8000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +7904087a8000-7904087a9000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +7904087a9000-7904087aa000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +7904087aa000-7904087ab000 r--p 00000000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +7904087ab000-7904087b3000 r-xp 00001000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +7904087b3000-7904087b6000 r--p 00009000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +7904087b6000-7904087b7000 r--p 0000b000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +7904087b7000-7904087b8000 rw-p 0000c000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 +7904087b8000-7904087bd000 r--p 00000000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +7904087bd000-7904087e6000 r-xp 00005000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +7904087e6000-7904087f1000 r--p 0002e000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +7904087f1000-7904087f2000 r--p 00038000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +7904087f2000-7904087f3000 rw-p 00039000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 +7904087f3000-7904087f5000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +7904087f5000-7904087fc000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +7904087fc000-7904087fe000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +7904087fe000-7904087ff000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +7904087ff000-790408800000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +790408800000-790408ae0000 rwxp 00000000 00:00 0 +790408ae0000-79040fd37000 ---p 00000000 00:00 0 +79040fd37000-79040ffb7000 rwxp 00000000 00:00 0 +79040ffb7000-7904102c8000 ---p 00000000 00:00 0 +7904102c8000-790410538000 rwxp 00000000 00:00 0 +790410538000-790417800000 ---p 00000000 00:00 0 +790417800000-79041ffb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules +79041ffb5000-79041ffb6000 rw-s 00000000 00:01 1028 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +79041ffb6000-79041ffb8000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +79041ffb8000-79041ffbb000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +79041ffbb000-79041ffbc000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +79041ffbc000-79041ffbd000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +79041ffbd000-79041ffbe000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 +79041ffbe000-79041ffc2000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +79041ffc2000-79041ffcf000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +79041ffcf000-79041ffd2000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +79041ffd2000-79041ffd3000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +79041ffd3000-79041ffd4000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +79041ffd4000-79041ffd5000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +79041ffd5000-79041ffd6000 rw-p 00000000 00:00 0 +79041ffd6000-79041ffe1000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +79041ffe1000-79041fff5000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +79041fff5000-79041fffe000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +79041fffe000-79041ffff000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +79041ffff000-790420000000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +790420000000-7904206b1000 rw-p 00000000 00:00 0 +7904206b1000-790424000000 ---p 00000000 00:00 0 +790424000000-790424001000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +790424001000-790424002000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +790424002000-790424003000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +790424003000-790424004000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +790424004000-790424005000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 +790424005000-790424007000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +790424007000-790424009000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +790424009000-79042400b000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +79042400b000-79042400c000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +79042400c000-79042400d000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +79042400d000-79042400e000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +79042400e000-790424010000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +790424010000-790424011000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +790424011000-790424012000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +790424012000-790424013000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +790424013000-790424015000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +790424015000-79042401c000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +79042401c000-79042401e000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +79042401e000-79042401f000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +79042401f000-790424020000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +790424020000-790424023000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +790424023000-79042402f000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +79042402f000-790424032000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +790424032000-790424033000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +790424033000-790424034000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +790424034000-790424072000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +790424072000-790424073000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +790424073000-790424074000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +790424074000-790424075000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +790424075000-790424076000 ---p 00000000 00:00 0 +790424076000-790424176000 rw-p 00000000 00:00 0 +790424176000-790424177000 ---p 00000000 00:00 0 +790424177000-790424277000 rw-p 00000000 00:00 0 +790424277000-790424394000 rw-p 00000000 00:00 0 +790424394000-790424395000 ---p 00000000 00:00 0 +790424395000-790424495000 rw-p 00000000 00:00 0 +790424495000-790424496000 ---p 00000000 00:00 0 +790424496000-790424596000 rw-p 00000000 00:00 0 +790424596000-790424d9e000 rw-p 00000000 00:00 0 +790424d9e000-790424d9f000 ---p 00000000 00:00 0 +790424d9f000-790424e9f000 rw-p 00000000 00:00 0 +790424e9f000-790424ea0000 ---p 00000000 00:00 0 +790424ea0000-790424fa0000 rw-p 00000000 00:00 0 +790424fa0000-790424fa1000 ---p 00000000 00:00 0 +790424fa1000-7904250a1000 rw-p 00000000 00:00 0 +7904250a1000-79042592f000 rw-p 00000000 00:00 0 +79042592f000-790425a15000 ---p 00000000 00:00 0 +790425a15000-790425a1b000 rw-p 00000000 00:00 0 +790425a1b000-790425b00000 ---p 00000000 00:00 0 +790425b00000-790425b04000 ---p 00000000 00:00 0 +790425b04000-790425c00000 rw-p 00000000 00:00 0 +790425c00000-790426f30000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +790426f30000-790427000000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +790427000000-79042702e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +79042702e000-7904270a4000 rw-p 00000000 00:00 0 +7904270a4000-7904270a5000 rw-s 00000000 00:01 668325 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) +7904270a5000-7904270a9000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +7904270a9000-7904270b4000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +7904270b4000-7904270b8000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +7904270b8000-7904270b9000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +7904270b9000-7904270ba000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +7904270ba000-7904270bb000 rw-s 00000000 00:01 668324 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +7904270bb000-7904270bc000 rw-s 00000000 00:01 668323 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) +7904270bc000-7904270bd000 r-xp 00000000 00:00 0 +7904270bd000-7904270be000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +7904270be000-7904270bf000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +7904270bf000-7904270c0000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +7904270c0000-7904270c1000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +7904270c1000-7904270c2000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +7904270c2000-7904270c3000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +7904270c3000-7904270c6000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +7904270c6000-7904270c7000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +7904270c7000-7904270c8000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +7904270c8000-7904270c9000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 +7904270c9000-7904270cb000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +7904270cb000-7904270d2000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +7904270d2000-7904270d4000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +7904270d4000-7904270d5000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +7904270d5000-7904270d6000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 +7904270d6000-7904270d7000 r-xp 00000000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +7904270d7000-7904270d8000 ---p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +7904270d8000-7904270d9000 r--p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +7904270d9000-7904270da000 rw-p 00002000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so +7904270da000-790427119000 rw-p 00000000 00:00 0 +790427119000-790427127000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +790427127000-7904271a3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +7904271a3000-7904271fe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +7904271fe000-7904271ff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +7904271ff000-790427200000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +790427200000-790427228000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +790427228000-7904273bd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +7904273bd000-790427415000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +790427415000-790427416000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +790427416000-79042741a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +79042741a000-79042741c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +79042741c000-790427429000 rw-p 00000000 00:00 0 +790427429000-79042742b000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +79042742b000-79042742e000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +79042742e000-79042742f000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +79042742f000-790427430000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +790427430000-790427431000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +790427431000-790427432000 rw-p 00000000 00:00 0 +790427432000-790427433000 r-xp 0005e000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +790427433000-790427434000 rw-p 00000000 00:00 0 +790427434000-79042743f000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +79042743f000-790427440000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +790427440000-790427441000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +790427441000-790427442000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +790427442000-790427455000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +790427455000-790427456000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +790427456000-790427457000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +790427457000-790427458000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +790427458000-790427497000 rw-p 00000000 00:00 0 +790427497000-7904274b7000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +7904274b7000-7904274b8000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +7904274b8000-7904274b9000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +7904274b9000-7904274ba000 rw-p 00000000 00:00 0 +7904274ba000-7904274d8000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +7904274d8000-7904274da000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +7904274da000-7904274db000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +7904274db000-7904274dc000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +7904274dc000-7904274dd000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +7904274dd000-7904274de000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +7904274de000-7904274df000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +7904274df000-7904274e0000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +7904274e0000-7904274e4000 rw-p 00000000 00:00 0 +7904274e4000-7904274e5000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +7904274e5000-7904274e6000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +7904274e6000-7904274e7000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +7904274e7000-7904274e8000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +7904274e8000-7904274e9000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +7904274e9000-7904274ea000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +7904274ea000-7904274eb000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +7904274eb000-7904274ec000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +7904274ec000-7904274ed000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +7904274ed000-7904274ee000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +7904274ee000-7904274f0000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +7904274f0000-790427501000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +790427501000-790427507000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +790427507000-790427508000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +790427508000-790427509000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +790427509000-79042750a000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +79042750a000-790427511000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +790427511000-790427512000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +790427512000-790427513000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +790427513000-790427514000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +790427514000-790427519000 rw-p 00000000 00:00 0 +790427519000-790427520000 ---p 00000000 00:00 0 +790427520000-790427528000 rw-s 00000000 103:03 4325444 /tmp/hsperfdata_codex/85657 +790427528000-790427529000 ---p 00000000 00:00 0 +790427529000-79042752a000 r--p 00000000 00:00 0 +79042752a000-790427539000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +790427539000-79042753a000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +79042753a000-79042753b000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +79042753b000-79042753d000 rw-p 00000000 00:00 0 +79042753d000-790427541000 r--p 00000000 00:00 0 [vvar] +790427541000-790427543000 r-xp 00000000 00:00 0 [vdso] +790427543000-790427545000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +790427545000-79042756f000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +79042756f000-79042757a000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +79042757a000-79042757b000 ---p 00000000 00:00 0 +79042757b000-79042757d000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +79042757d000-79042757f000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7fffd44b6000-7fffd44d9000 rw-p 00000000 00:00 0 [stack] +ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] +Total number of mappings: 921 + + +VM Arguments: +jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant +java_command: jme3test.vulkan.VulkanTest +java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar +Launcher Type: SUN_STANDARD + +[Global flags] + intx CICompilerCount = 4 {product} {ergonomic} + uint ConcGCThreads = 2 {product} {ergonomic} + uint G1ConcRefinementThreads = 8 {product} {ergonomic} + size_t G1HeapRegionSize = 4194304 {product} {ergonomic} + size_t InitialHeapSize = 524288000 {product} {ergonomic} + size_t MarkStackSize = 4194304 {product} {ergonomic} + size_t MarkStackSizeMax = 536870912 {product} {ergonomic} + size_t MaxHeapSize = 8388608000 {product} {ergonomic} + size_t MaxNewSize = 5033164800 {product} {ergonomic} + size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} + size_t MinHeapSize = 8388608 {product} {ergonomic} + uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} + uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} + uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} + uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} + bool SegmentedCodeCache = true {product} {ergonomic} + size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} + bool UseCompressedOops = true {product lp64_product} {ergonomic} + bool UseG1GC = true {product} {ergonomic} + +Logging: +Log output configuration: + #0: stdout all=warning uptime,level,tags foldmultilines=false + #1: stderr all=off uptime,level,tags foldmultilines=false + +Environment Variables: +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin +USERNAME=codex +SHELL=/bin/bash +DISPLAY=:1 +LANG=en_US.UTF-8 + +Active Locale: +LC_ALL=en_US.UTF-8 +LC_COLLATE=en_US.UTF-8 +LC_CTYPE=en_US.UTF-8 +LC_MESSAGES=en_US.UTF-8 +LC_MONETARY=en_US.UTF-8 +LC_NUMERIC=en_US.UTF-8 +LC_TIME=en_US.UTF-8 + +Signal Handlers: + SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked + SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + + +Periodic native trim disabled + +--------------- S Y S T E M --------------- + +OS: +DISTRIB_ID=Pop +DISTRIB_RELEASE=22.04 +DISTRIB_CODENAME=jammy +DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" +uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 +OS uptime: 0 days 15:18 hours +libc: glibc 2.35 NPTL 2.35 +rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k +load average: 1.41 1.57 1.15 + +/proc/meminfo: +MemTotal: 32767652 kB +MemFree: 20134740 kB +MemAvailable: 23540972 kB +Buffers: 347504 kB +Cached: 5014736 kB +SwapCached: 0 kB +Active: 8818268 kB +Inactive: 2816324 kB +Active(anon): 6307560 kB +Inactive(anon): 0 kB +Active(file): 2510708 kB +Inactive(file): 2816324 kB +Unevictable: 15204 kB +Mlocked: 72 kB +SwapTotal: 20970996 kB +SwapFree: 20970996 kB +Zswap: 0 kB +Zswapped: 0 kB +Dirty: 324 kB +Writeback: 0 kB +AnonPages: 6287800 kB +Mapped: 1828896 kB +Shmem: 35208 kB +KReclaimable: 197260 kB +Slab: 386392 kB +SReclaimable: 197260 kB +SUnreclaim: 189132 kB +KernelStack: 22880 kB +PageTables: 54428 kB +SecPageTables: 0 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 37354820 kB +Committed_AS: 12325568 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 252400 kB +VmallocChunk: 0 kB +Percpu: 9472 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 6144 kB +ShmemPmdMapped: 0 kB +FileHugePages: 0 kB +FilePmdMapped: 0 kB +Unaccepted: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +Hugetlb: 0 kB +DirectMap4k: 851768 kB +DirectMap2M: 15826944 kB +DirectMap1G: 16777216 kB + +/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never +/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 +/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force +/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never + +Process Memory: +Virtual Size: 13446916K (peak: 13510788K) +Resident Set Size: 317340K (peak: 317340K) (anon: 171248K, file: 145068K, shmem: 1024K) +Swapped out: 0K +C-Heap outstanding allocations: 79001K, retained: 32298K +glibc malloc tunables: (default) + +/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 +/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 +/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 +/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 + +container (cgroup) information: +container_type: cgroupv2 +cpu_cpuset_cpus: not supported +cpu_memory_nodes: not supported +active_processor_count: 8 +cpu_quota: not supported +cpu_period: not supported +cpu_shares: not supported +memory_limit_in_bytes: unlimited +memory_and_swap_limit_in_bytes: unlimited +memory_soft_limit_in_bytes: 0 +memory_usage_in_bytes: 5982148 k +memory_max_usage_in_bytes: not supported +rss_usage_in_bytes: 3571588 k +cache_usage_in_bytes: 2327152 k +memory_swap_current_in_bytes: 0 +memory_swap_max_limit_in_bytes: unlimited +maximum number of tasks: 38296 +current number of tasks: 328 + +Steal ticks since vm start: 0 +Steal ticks percentage since vm start: 0.000 + +CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c +CPU Model and flags from /proc/cpuinfo: +model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities + +Online cpus: 0-7 +Offline cpus: +BIOS frequency limitation: +Frequency switch latency (ns): 0 +Available cpu frequencies: +Current governor: powersave +Core performance/turbo boost: + +Memory: 4k page, physical 32767652k(23540972k free), swap 20970996k(20970996k free) +Page Sizes: 4k + +vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 + +END. diff --git a/jme3-core/build.gradle b/jme3-core/build.gradle index b741fc18cc..b3a96bdab7 100644 --- a/jme3-core/build.gradle +++ b/jme3-core/build.gradle @@ -67,6 +67,7 @@ dependencies { runtimeOnly(variantOf(libs.lwjgl3.openal){ classifier('natives-linux-arm64') }) runtimeOnly(variantOf(libs.lwjgl3.openal){ classifier('natives-macos') }) runtimeOnly(variantOf(libs.lwjgl3.openal){ classifier('natives-macos-arm64') }) + runtimeOnly(variantOf(libs.lwjgl3.shaderc) { classifier('natives-linux') }) } diff --git a/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java b/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java index e3992ac3a3..2e9ce16e45 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java +++ b/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java @@ -3,6 +3,8 @@ import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; +import org.lwjgl.system.Struct; +import org.lwjgl.system.StructBuffer; import org.lwjgl.vulkan.VkInstance; import java.nio.ByteBuffer; @@ -17,26 +19,63 @@ public class VulkanUtils { - public static void check(int vulkanCode, String message) { + public static final int UINT32_MAX = 0xFFFFFFFF; + + public static int check(int vulkanCode, String message) { if (vulkanCode != VK_SUCCESS) { throw new RuntimeException(message); } + return vulkanCode; + } + + public static int check(int vulkanCode) { + return check(vulkanCode, "Operation unsuccessful: " + vulkanCode); + } + + public static long nonNull(long id, String message) { + if (id == MemoryUtil.NULL) { + throw new NullPointerException(message); + } + return id; + } + + public static long nonNull(long id) { + return nonNull(id, "Pointer ID is NULL."); } public static T enumerateBuffer(MemoryStack stack, IntFunction factory, BiConsumer fetch) { IntBuffer count = stack.callocInt(1); fetch.accept(count, null); + if (count.get(0) <= 0) { + return null; + } T buffer = factory.apply(count.get(0)); fetch.accept(count, buffer); return buffer; } + public static T enumerateBuffer(IntFunction factory, BiConsumer fetch) { + IntBuffer count = MemoryUtil.memAllocInt(1); + fetch.accept(count, null); + if (count.get(0) <= 0) { + return null; + } + T buffer = factory.apply(count.get(0)); + fetch.accept(count, buffer); + MemoryUtil.memFree(count); + return buffer; + } + public static PointerBuffer toPointers(MemoryStack stack, Stream stream, int count, Function toBytes) { PointerBuffer ptrs = stack.mallocPointer(count); stream.map(toBytes).forEach(ptrs::put); return ptrs.rewind(); } + public static PointerBuffer toPointers(MemoryStack stack, Collection collection, Function toBytes) { + return toPointers(stack, collection.stream(), collection.size(), toBytes); + } + public static long getPointer(MemoryStack stack, Consumer action) { PointerBuffer ptr = stack.mallocPointer(1); action.accept(ptr); @@ -49,6 +88,12 @@ public static long getLong(MemoryStack stack, Consumer action) { return l.get(0); } + public static int getInt(MemoryStack stack, Consumer action) { + IntBuffer i = stack.mallocInt(1); + action.accept(i); + return i.get(0); + } + public static PointerBuffer gatherPointers(MemoryStack stack, Collection pointers) { int size = 0; for (PointerBuffer p : pointers) { @@ -82,6 +127,14 @@ public static boolean isBitSet(int n, int bit) { return (n & bit) > 0; } + public static , E extends Struct> T accumulate(Collection collection, IntFunction allocate) { + T buffer = allocate.apply(collection.size()); + for (E e : collection) { + buffer.put(e); + } + return buffer.rewind(); + } + public static class NativeIterator implements Iterable, Iterator { private final PointerBuffer pointers; diff --git a/jme3-core/src/main/java/com/jme3/util/natives/BasicNativeManager.java b/jme3-core/src/main/java/com/jme3/util/natives/BasicNativeManager.java new file mode 100644 index 0000000000..6bfcfdb68f --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/util/natives/BasicNativeManager.java @@ -0,0 +1,104 @@ +package com.jme3.util.natives; + +import java.lang.ref.PhantomReference; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; + +public class BasicNativeManager implements NativeManager { + + private static NativeManager globalInstance = new BasicNativeManager(); + + public static void setGlobalInstance(NativeManager instance) { + globalInstance = Objects.requireNonNull(instance, "NativeManager global instance cannot be null."); + } + + public static NativeManager getGlobalInstance() { + return globalInstance; + } + + private final ReferenceQueue unreachable = new ReferenceQueue<>(); + private final Map refMap = new ConcurrentHashMap<>(); + private final AtomicLong nextId = new AtomicLong(0L); + + @Override + public NativeRef register(Native object) { + NativeRef ref = new NativeRef(nextId.getAndIncrement(), object, unreachable); + refMap.put(ref.getId(), ref); + return ref; + } + + @Override + public int flush() { + int flushed = 0; + for (NativeRef ref; (ref = (NativeRef)unreachable.poll()) != null;) { + ref.destroy(); + flushed++; + } + return flushed; + } + + @Override + public int clear() { + int size = refMap.size(); + for (NativeRef ref : refMap.values()) { + ref.destroyNoRemove(); + } + refMap.clear(); + return size; + } + + public class NativeRef extends WeakReference implements NativeReference { + + private final long id; + private final Runnable destroyer; + private final WeakReference weakRef; + private final AtomicBoolean active = new AtomicBoolean(true); + private final Collection dependents = new ArrayList<>(); + + private NativeRef(long id, Native referent, ReferenceQueue q) { + super(referent, q); + this.id = id; + destroyer = referent.createNativeDestroyer(); + weakRef = new WeakReference<>(referent); + } + + @Override + public void destroy() { + if (active.getAndSet(false)) { + dependents.clear(); + destroyNoRemove(); + refMap.remove(id, this); + } + } + + @Override + public void addDependent(NativeReference reference) { + dependents.add(reference); + } + + private long getId() { + return id; + } + + private void destroyNoRemove() { + for (NativeReference ref : dependents) { + ref.destroy(); + } + dependents.clear(); + destroyer.run(); + Native referent = weakRef.get(); + if (referent != null) { + referent.prematureNativeDestruction(); + } + } + + } + +} diff --git a/jme3-core/src/main/java/com/jme3/util/natives/Native.java b/jme3-core/src/main/java/com/jme3/util/natives/Native.java new file mode 100644 index 0000000000..9ba9f8775c --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/util/natives/Native.java @@ -0,0 +1,36 @@ +package com.jme3.util.natives; + +import org.lwjgl.system.MemoryUtil; + +public interface Native extends AutoCloseable { + + T getNativeObject(); + + Runnable createNativeDestroyer(); + + void prematureNativeDestruction(); + + NativeReference getNativeReference(); + + @Override + default void close() { + getNativeReference().destroy(); + } + + static void set(NativeManager manager) { + BasicNativeManager.setGlobalInstance(manager); + } + + static NativeManager get() { + return BasicNativeManager.getGlobalInstance(); + } + + static T getObject(Native n) { + return n != null ? n.getNativeObject() : null; + } + + static long getId(Native n) { + return n != null ? n.getNativeObject() : MemoryUtil.NULL; + } + +} diff --git a/jme3-core/src/main/java/com/jme3/util/natives/NativeManager.java b/jme3-core/src/main/java/com/jme3/util/natives/NativeManager.java new file mode 100644 index 0000000000..95e2dce698 --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/util/natives/NativeManager.java @@ -0,0 +1,13 @@ +package com.jme3.util.natives; + +import org.lwjgl.system.NativeResource; + +public interface NativeManager { + + NativeReference register(Native object); + + int flush(); + + int clear(); + +} diff --git a/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java b/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java new file mode 100644 index 0000000000..ddbefb178a --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java @@ -0,0 +1,9 @@ +package com.jme3.util.natives; + +public interface NativeReference { + + void destroy(); + + void addDependent(NativeReference reference); + +} diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java new file mode 100644 index 0000000000..f374d7f5a8 --- /dev/null +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -0,0 +1,394 @@ +package jme3test.vulkan; + +import com.jme3.app.SimpleApplication; +import com.jme3.material.RenderState; +import com.jme3.shaderc.ShaderType; +import com.jme3.shaderc.ShadercLoader; +import com.jme3.system.AppSettings; +import com.jme3.system.vulkan.LwjglVulkanContext; +import com.jme3.vulkan.*; +import org.lwjgl.glfw.GLFW; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.*; + +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Level; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.system.MemoryUtil.NULL; +import static org.lwjgl.vulkan.EXTDebugUtils.*; +import static org.lwjgl.vulkan.EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; +import static org.lwjgl.vulkan.VK13.*; + +public class VulkanHelperTest extends SimpleApplication { + + private VulkanInstance instance; + private Surface surface; + private LogicalDevice device; + private SimpleQueueFamilies queues; + private Swapchain swapchain; + private List swapchainImages; + private ShaderModule vertModule, fragModule; + private PipelineLayout pipelineLayout; + private RenderPass renderPass; + private GraphicsPipeline pipeline; + private final List frameBuffers = new ArrayList<>(); + private CommandBuffer graphicsCommands; + private VulkanRenderManager renderer; + + private long debugMessenger = NULL; + private final VkDebugUtilsMessengerCallbackEXT debugCallback = new VulkanDebugCallback(Level.SEVERE); + + public static void main(String[] args) { + VulkanHelperTest app = new VulkanHelperTest(); + AppSettings settings = new AppSettings(true); + settings.setWidth(800); + settings.setHeight(800); + settings.setRenderer("CUSTOM" + LwjglVulkanContext.class.getName()); + app.setSettings(settings); + app.setShowSettings(false); + app.start(); + } + + @Override + public void simpleInitApp() { + long window = ((LwjglVulkanContext)context).getWindowHandle(); + try (InstanceBuilder inst = new InstanceBuilder(VK13.VK_API_VERSION_1_3)) { + inst.addGlfwExtensions(); + inst.addDebugExtension(); + inst.addLunarGLayer(); + inst.setApplicationName(VulkanHelperTest.class.getSimpleName()); + inst.setApplicationVersion(1, 0, 0); + instance = inst.build(); + try (MemoryStack stack = MemoryStack.stackPush()) { + createDebugMessenger(stack); + } + surface = new Surface(instance, window); + PhysicalDevice physDevice = PhysicalDevice.getPhysicalDevice( + instance.getNativeObject(), + Arrays.asList(surface, DeviceEvaluator.extensions(inst.getNamedExtensions()), DeviceEvaluator.swapchain(surface)), + () -> new SimpleQueueFamilies(surface)); + queues = physDevice.getQueueFamilies(); + device = new LogicalDevice(physDevice, inst.getExtensions(), inst.getLayers()); + physDevice.getQueueFamilies().createQueues(device); + try (SimpleSwapchainSupport support = new SimpleSwapchainSupport(physDevice, surface, window)) { + swapchain = new Swapchain(device, surface, support); + } + } + swapchainImages = swapchain.createViews(); + vertModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( + "Shaders/VulkanVertTest.glsl", ShaderType.Vertex)), "main"); + fragModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( + "Shader/VulkanFragTest.glsl", ShaderType.Fragment)), "main"); + pipelineLayout = new PipelineLayout(device); + try (RenderPassBuilder pass = new RenderPassBuilder()) { + int color = pass.createAttachment(a -> a + .format(swapchain.getFormat()) + .samples(VK_SAMPLE_COUNT_1_BIT) + .loadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) + .storeOp(VK_ATTACHMENT_STORE_OP_STORE) + .stencilLoadOp(VK_ATTACHMENT_LOAD_OP_DONT_CARE) + .stencilStoreOp(VK_ATTACHMENT_STORE_OP_DONT_CARE) + .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) + .finalLayout(KHRSwapchain.VK_IMAGE_LAYOUT_PRESENT_SRC_KHR)); + int subpass = pass.createSubpass(s -> { + VkAttachmentReference.Buffer ref = VkAttachmentReference.calloc(1, pass.getStack()) + .attachment(color) + .layout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); + s.pipelineBindPoint(VK_PIPELINE_BIND_POINT_GRAPHICS) + .colorAttachmentCount(1) + .pColorAttachments(ref); + }); + pass.createDependency() + .srcSubpass(VK_SUBPASS_EXTERNAL) + .dstSubpass(subpass) + .srcStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) + .srcAccessMask(subpass) + .dstStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) + .dstAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT); + renderPass = pass.build(device); + } + pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, new RenderState(), vertModule, fragModule); + for (ImageView v : swapchainImages) { + frameBuffers.add(new FrameBuffer(device, renderPass, + swapchain.getExtent().width(), swapchain.getExtent().height(), 1, v)); + } + CommandPool graphicsPool = new CommandPool(device, queues.getGraphicsQueue(), false, true); + graphicsCommands = graphicsPool.allocateCommandBuffer(); + renderer = new VulkanRenderManager(2, Frame::new); + } + + @Override + public void stop() { + if (debugMessenger != NULL) { + System.out.println(" destroy debug messenger"); + verifyExtensionMethod(instance.getNativeObject(), "vkDestroyDebugUtilsMessengerEXT"); + vkDestroyDebugUtilsMessengerEXT(instance.getNativeObject(), debugMessenger, null); + } + super.stop(); + } + + @Override + public void simpleUpdate(float tpf) { + renderer.render(tpf); + } + + private VkDebugUtilsMessengerCreateInfoEXT createDebugger(MemoryStack stack, VkDebugUtilsMessengerCallbackEXT callback) { + VkDebugUtilsMessengerCreateInfoEXT create = VkDebugUtilsMessengerCreateInfoEXT.calloc(stack) + .sType(VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) + .messageSeverity(VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT + | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) + .messageType(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT); + if (callback != null) { + create.pfnUserCallback(callback); + } + return create; + } + + private void createDebugMessenger(MemoryStack stack) { + verifyExtensionMethod(instance.getNativeObject(), "vkCreateDebugUtilsMessengerEXT"); + debugMessenger = getLong(stack, ptr -> vkCreateDebugUtilsMessengerEXT( + instance.getNativeObject(), createDebugger(stack, debugCallback), null, ptr)); + } + + private class Frame implements Runnable { + + private final int index; + private final Semaphore imageAvailable = new Semaphore(device); + private final Semaphore renderFinished = new Semaphore(device); + private final Fence inFlight = new Fence(device, true); + + private Frame(int index) { + this.index = index; + } + + @Override + public void run() { + inFlight.blockThenReset(5000); + Swapchain.SwapchainImage image = swapchain.acquireNextImage(imageAvailable, null, 5000); + graphicsCommands.reset(); + graphicsCommands.begin(); + renderPass.begin(graphicsCommands, frameBuffers.get(index)); + pipeline.bind(graphicsCommands); + try (MemoryStack stack = MemoryStack.stackPush()) { + VkViewport.Buffer vp = VkViewport.calloc(1, stack) + .x(0f).y(0f) + .width(swapchain.getExtent().width()) + .height(swapchain.getExtent().height()) + .minDepth(0f).maxDepth(1f); + vkCmdSetViewport(graphicsCommands.getBuffer(), 0, vp); + VkRect2D.Buffer scissor = VkRect2D.calloc(1, stack); + scissor.offset().set(0, 0); + scissor.extent(swapchain.getExtent()); + vkCmdSetScissor(graphicsCommands.getBuffer(), 0, scissor); + } + vkCmdDraw(graphicsCommands.getBuffer(), 3, 1, 0, 0); + vkCmdEndRenderPass(graphicsCommands.getBuffer()); + graphicsCommands.end(); + graphicsCommands.submit(imageAvailable, renderFinished, inFlight); + swapchain.present(queues.getPresentQueue(), image, renderFinished); + } + + } + + private static class SimpleQueueFamilies implements QueueFamilies { + + public static final int NUM_QUEUES = 2; + + private final Surface surface; + private Integer graphicsIndex = null; + private Integer presentIndex = null; + private Queue graphics, present; + + public SimpleQueueFamilies(Surface surface) { + this.surface = surface; + } + + @Override + public boolean populate(PhysicalDevice device, VkQueueFamilyProperties.Buffer properties) { + IntBuffer ibuf = MemoryUtil.memAllocInt(1); + for (int i = 0; i < properties.limit(); i++) { + VkQueueFamilyProperties props = properties.get(i); + if (graphicsIndex == null && (props.queueFlags() & VK13.VK_QUEUE_GRAPHICS_BIT) > 0) { + graphicsIndex = i; + } + if (presentIndex == null) { + KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR( + device.getDevice(), i, surface.getNativeObject(), ibuf); + if (ibuf.get(0) == VK13.VK_TRUE) { + presentIndex = i; + } + } + } + MemoryUtil.memFree(ibuf); + return isComplete(); + } + + @Override + public VkDeviceQueueCreateInfo.Buffer createLogicalBuffers(MemoryStack stack) { + VkDeviceQueueCreateInfo.Buffer create = VkDeviceQueueCreateInfo.calloc(NUM_QUEUES, stack); + create.get(0).sType(VK13.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) + .queueFamilyIndex(graphicsIndex) + .pQueuePriorities(stack.floats(1f)); + create.get(1).sType(VK13.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) + .queueFamilyIndex(presentIndex) + .pQueuePriorities(stack.floats(1f)); + return create; + } + + @Override + public void createQueues(LogicalDevice device) { + graphics = new Queue(device, graphicsIndex, 0); + present = new Queue(device, presentIndex, 0); + } + + @Override + public boolean isComplete() { + return graphicsIndex != null && presentIndex != null; + } + + @Override + public IntBuffer getSwapchainConcurrentBuffers(MemoryStack stack) { + return null; + } + + public Queue getGraphicsQueue() { + return graphics; + } + + public Queue getPresentQueue() { + return present; + } + + } + + private static class SimpleSwapchainSupport implements SwapchainSupport, AutoCloseable { + + private final MemoryStack stack; + private final VkSurfaceCapabilitiesKHR caps; + private final VkSurfaceFormatKHR.Buffer formats; + private final IntBuffer modes; + private final long window; + + public SimpleSwapchainSupport(PhysicalDevice device, Surface surface, long window) { + stack = MemoryStack.stackPush(); + caps = VkSurfaceCapabilitiesKHR.malloc(stack); + KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device.getDevice(), surface.getNativeObject(), caps); + formats = enumerateBuffer(stack, n -> VkSurfaceFormatKHR.malloc(n, stack), + (count, buffer) -> KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR( + device.getDevice(), surface.getNativeObject(), count, buffer)); + modes = enumerateBuffer(stack, stack::mallocInt, + (count, buffer) -> KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR( + device.getDevice(), surface.getNativeObject(), count, buffer)); + this.window = window; + } + + @Override + public void close() { + stack.pop(); + } + + @Override + public VkSurfaceFormatKHR selectFormat() { + return formats.stream() + .filter(f -> f.format() == VK_FORMAT_B8G8R8A8_SRGB) + .filter(f -> f.colorSpace() == KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) + .findAny().orElse(formats.get(0)); + } + + @Override + public int selectMode() { + for (int i = 0; i < modes.limit(); i++) { + if (modes.get(i) == KHRSurface.VK_PRESENT_MODE_MAILBOX_KHR) { + return modes.get(i); + } + } + return KHRSurface.VK_PRESENT_MODE_FIFO_KHR; + } + + @Override + public VkExtent2D selectExtent() { + if (caps.currentExtent().width() != UINT32_MAX) { + return caps.currentExtent(); + } + try (MemoryStack stack = MemoryStack.stackPush()) { + IntBuffer width = stack.mallocInt(1); + IntBuffer height = stack.mallocInt(1); + GLFW.glfwGetFramebufferSize(window, width, height); + VkExtent2D ext = VkExtent2D.malloc(stack); + ext.width(Math.min(Math.max(width.get(0), caps.minImageExtent().width()), caps.maxImageExtent().width())); + ext.height(Math.min(Math.max(width.get(0), caps.minImageExtent().height()), caps.maxImageExtent().height())); + return ext; + } + } + + @Override + public int selectImageCount() { + int n = caps.minImageCount() + 1; + return caps.minImageCount() > 0 ? Math.min(n, caps.minImageCount()) : n; + } + + @Override + public boolean isSupported() { + return formats != null && modes != null; + } + + public VkSurfaceCapabilitiesKHR getCaps() { + return caps; + } + + public VkSurfaceFormatKHR.Buffer getFormats() { + return formats; + } + + public IntBuffer getModes() { + return modes; + } + + } + + private static class VulkanDebugCallback extends VkDebugUtilsMessengerCallbackEXT { + + private final Level exceptionThreshold; + + public VulkanDebugCallback(Level exceptionThreshold) { + this.exceptionThreshold = exceptionThreshold; + } + + @Override + public int invoke(int messageSeverity, int messageTypes, long pCallbackData, long pUserData) { + try (VkDebugUtilsMessengerCallbackDataEXT data = VkDebugUtilsMessengerCallbackDataEXT.create(pCallbackData)) { + //LOG.log(getLoggingLevel(messageSeverity), data.pMessageString()); + Level lvl = getLoggingLevel(messageSeverity); + if (exceptionThreshold != null && lvl.intValue() >= exceptionThreshold.intValue()) { + throw new RuntimeException(lvl.getName() + ": " + data.pMessageString()); + } else { + System.err.println(lvl.getName() + " " + data.pMessageString()); + } + } + return VK_FALSE; // always return false, true is only really used for testing validation layers + } + + public Level getLoggingLevel(int messageSeverity) { + switch (messageSeverity) { + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: + return Level.SEVERE; + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: + return Level.WARNING; + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: + return Level.INFO; + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: + return Level.FINE; + default: throw new UnsupportedOperationException("Unsupported severity bit: " + + Integer.numberOfTrailingZeros(Integer.highestOneBit(messageSeverity))); + } + } + + } + +} diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java index 935d8bc973..49133a1c8b 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java @@ -1,22 +1,40 @@ package jme3test.vulkan; import com.jme3.app.SimpleApplication; +import com.jme3.asset.AssetInfo; +import com.jme3.asset.AssetKey; +import com.jme3.asset.AssetLoader; +import com.jme3.shaderc.ShaderType; +import com.jme3.shaderc.ShadercLoader; import com.jme3.system.AppSettings; -import com.jme3.system.vulkan.DeviceEvaluator; +import com.jme3.util.natives.Native; +import com.jme3.vulkan.DeviceEvaluator; import com.jme3.system.vulkan.LwjglVulkanContext; +import com.jme3.vulkan.Fence; +import com.jme3.vulkan.Semaphore; +import com.jme3.vulkan.VulkanRenderManager; +import jme3tools.shader.ShaderDebug; +import org.lwjgl.BufferUtils; import org.lwjgl.PointerBuffer; +import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFWVulkan; import org.lwjgl.system.MemoryStack; +import org.lwjgl.util.shaderc.Shaderc; import org.lwjgl.vulkan.*; +import java.io.*; +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.system.MemoryUtil.NULL; import static org.lwjgl.vulkan.EXTDebugUtils.*; -import static org.lwjgl.vulkan.VK10.*; +import static org.lwjgl.vulkan.VK13.*; public class VulkanTest extends SimpleApplication { @@ -24,12 +42,29 @@ public class VulkanTest extends SimpleApplication { private VkInstance instance; private VkDevice device; - private VkQueue graphics; - private final Collection extensions = new ArrayList<>(); + private VkQueue graphicsQueue, presentQueue; + private VkCommandBuffer commandBuffer; + private final VulkanRenderManager renderer = new VulkanRenderManager(2, n -> new Frame()); + private final Collection instanceExtensions = new ArrayList<>(); + private final Collection deviceExtensions = new ArrayList<>(); private final List layers = new ArrayList<>(); private final Collection deviceEvaluators = new ArrayList<>(); - private final VkDebugUtilsMessengerCallbackEXT debugCallback = new VulkanDebugCallback(); + private final VkDebugUtilsMessengerCallbackEXT debugCallback = new VulkanDebugCallback(Level.SEVERE); + private LwjglVulkanContext vulkanContext; + private Swapchain swapchain; + private LongBuffer imageViews; + private LongBuffer frameBuffers; + private long surface = NULL; + private long vertModule = NULL; + private long fragModule = NULL; + private long pipelineLayout = NULL; + private long renderPass = NULL; + private long pipeline = NULL; private long debugMessenger = NULL; + private long commandPool = NULL; + private Semaphore imageAvailableSemaphore; + private Semaphore renderFinishedSemaphore; + private Fence inFlightFence; public static void main(String[] args) { VulkanTest app = new VulkanTest(); @@ -43,40 +78,113 @@ public static void main(String[] args) { @Override public void simpleInitApp() { - // basic validation layer from the Vulkan SDK - //layers.add("VK_LAYER_KHRONOS_validation"); + vulkanContext = (LwjglVulkanContext)context; + assetManager.registerLoader(ShadercLoader.class, "glsl"); + flyCam.setDragToRotate(true); + + deviceExtensions.add(KHRSwapchain.VK_KHR_SWAPCHAIN_EXTENSION_NAME); + layers.add("VK_LAYER_KHRONOS_validation"); // basic validation layer from the Vulkan SDK try (MemoryStack stack = MemoryStack.stackPush()) { PointerBuffer layerPtrs = createLayerBuffer(stack, layers); - LOG.info("Validation layers: " + layers.size() + ", buffer: " + layerPtrs); createInstance(stack, layerPtrs); - createDebugMessenger(stack); - PhysicalDevice physDevice = findPhysicalDevice(stack); - QueueFamilyIndices queues = populateQueueFamily(stack, physDevice.getDevice()); - device = createLogicalDevice(stack, physDevice, queues, layerPtrs); - graphics = getQueue(stack, device, queues, 0); + if (layerPtrs != null) { + createDebugMessenger(stack); + } + surface = createSurface(stack, instance); + PhysicalDevice physDevice = findPhysicalDevice(stack, instance, surface); + QueueFamilyIndices queues = populateQueueFamilies(stack, physDevice.getDevice()); + device = createLogicalDevice(stack, physDevice, queues, createLayerBuffer(stack, layers)); + graphicsQueue = getQueue(stack, device, queues.getGraphics(), 0); + presentQueue = getQueue(stack, device, queues.getPresents(), 0); + swapchain = new Swapchain(stack, new SwapchainSupport(stack, physDevice.getDevice(), surface), + device, queues, surface, vulkanContext.getWindowHandle()); + imageViews = swapchain.createImageViews(stack, device); + vertModule = createVertexModule(stack, device); + fragModule = createFragmentModule(stack, device); + pipelineLayout = createPipelineLayout(stack, device); + renderPass = createRenderPass(stack, device, swapchain); + pipeline = createGraphicsPipeline(stack, device, vertModule, fragModule, pipelineLayout, renderPass); + frameBuffers = createFrameBuffers(stack, device, swapchain, imageViews, renderPass); + commandPool = createCommandPool(stack, device, queues); + commandBuffer = createCommandBuffer(stack, device, commandPool); + createSyncObjects(device); } + } @Override public void stop() { - LOG.info("Destroying vulkan device and instance."); + Native.get().clear(); // clear all native objects + // destruction will later be handled by a NativeObjectManager + System.out.println("Destroy vulkan objects..."); + if (commandPool != NULL) { + System.out.println(" destroy command pool"); + vkDestroyCommandPool(device, commandPool, null); + } + if (frameBuffers != null) { + System.out.println(" destroy framebuffers (" + frameBuffers.limit() + ")"); + for (int i = 0; i < frameBuffers.limit(); i++) { + vkDestroyFramebuffer(device, frameBuffers.get(i), null); + } + } + if (vertModule != NULL) { + System.out.println(" destroy vertex module"); + vkDestroyShaderModule(device, vertModule, null); + } + if (fragModule != NULL) { + System.out.println(" destroy fragment module"); + vkDestroyShaderModule(device, fragModule, null); + } + if (renderPass != NULL) { + System.out.println(" destroy render pass"); + vkDestroyRenderPass(device, renderPass, null); + } + if (pipeline != NULL) { + System.out.println(" destroy graphics pipeline"); + vkDestroyPipeline(device, pipeline, null); + } + if (pipelineLayout != NULL) { + System.out.println(" destroy pipeline layout"); + vkDestroyPipelineLayout(device, pipelineLayout, null); + } + if (imageViews != null) { + System.out.println(" destroy image views"); + for (int i = 0; i < imageViews.limit(); i++) { + vkDestroyImageView(device, imageViews.get(i), null); + } + } + if (swapchain != null) { + System.out.println(" destroy swapchain"); + swapchain.destroy(device); + } if (device != null) { - System.out.println("Destroy device"); + System.out.println(" destroy device"); vkDeviceWaitIdle(device); vkDestroyDevice(device, null); } if (debugMessenger != NULL) { - System.out.println("Destroy messenger"); + System.out.println(" destroy debug messenger"); verifyExtensionMethod(instance, "vkDestroyDebugUtilsMessengerEXT"); vkDestroyDebugUtilsMessengerEXT(instance, debugMessenger, null); } + if (surface != NULL) { + System.out.println(" destroy surface"); + KHRSurface.vkDestroySurfaceKHR(instance, surface, null); + } if (instance != null) { - System.out.println("Destroy instance"); + System.out.println(" destroy instance"); vkDestroyInstance(instance, null); } + System.out.println("Vulkan destruction complete!"); super.stop(); } + @Override + public void simpleUpdate(float tpf) { + renderer.render(tpf); + Native.get().flush(); // flush unused native objects + } + private void createInstance(MemoryStack stack, PointerBuffer layers) { VkApplicationInfo app = VkApplicationInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_APPLICATION_INFO) @@ -84,22 +192,19 @@ private void createInstance(MemoryStack stack, PointerBuffer layers) { .applicationVersion(VK_MAKE_VERSION(1, 0, 0)) .pEngineName(stack.ASCII("JMonkeyEngine")) .engineVersion(VK_MAKE_VERSION(3, 9, 0)) - .apiVersion(VK_API_VERSION_1_0); + .apiVersion(VK_API_VERSION_1_3); VkInstanceCreateInfo create = VkInstanceCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO) - //.pNext(createDebugger(stack, debugCallback)) // causing native crashes when destroying instance .pApplicationInfo(app); + addExtension(Objects.requireNonNull(GLFWVulkan.glfwGetRequiredInstanceExtensions())); + addExtension(stack, VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + create.ppEnabledExtensionNames(gatherPointers(stack, instanceExtensions)); if (layers != null) { + //create.pNext(createDebugger(stack, debugCallback)); // causing native crashes? create.ppEnabledLayerNames(layers); } - addExtension(Objects.requireNonNull(GLFWVulkan.glfwGetRequiredInstanceExtensions())); - addExtension(stack, VK_EXT_DEBUG_UTILS_EXTENSION_NAME); - create.ppEnabledExtensionNames(gatherPointers(stack, extensions)); instance = new VkInstance(getPointer(stack, ptr -> check(vkCreateInstance(create, null, ptr), "Failed to create instance.")), create); - if (instance.address() == NULL) { - throw new NullPointerException("Instance pointer is null."); - } } private PointerBuffer createLayerBuffer(MemoryStack stack, Collection layers) { @@ -112,13 +217,18 @@ private void createDebugMessenger(MemoryStack stack) { debugMessenger = getLong(stack, ptr -> vkCreateDebugUtilsMessengerEXT(instance, createDebugger(stack, debugCallback), null, ptr)); } - private PhysicalDevice findPhysicalDevice(MemoryStack stack) { - PointerBuffer devices = enumerateBuffer(stack, stack::mallocPointer, (count, buffer) -> vkEnumeratePhysicalDevices(instance, count, buffer)); + private long createSurface(MemoryStack stack, VkInstance instance) { + return getLong(stack, ptr -> GLFWVulkan.glfwCreateWindowSurface(instance, vulkanContext.getWindowHandle(), null, ptr)); + } + + private PhysicalDevice findPhysicalDevice(MemoryStack stack, VkInstance instance, long surface) { + PointerBuffer devices = enumerateBuffer(stack, stack::mallocPointer, + (count, buffer) -> check(vkEnumeratePhysicalDevices(instance, count, buffer), "Failed to enumerate physical devices")); PhysicalDevice device = null; float score = 0f; for (PhysicalDevice d : iteratePointers(devices, p -> new PhysicalDevice(new VkPhysicalDevice(p, instance)))) { - Float s = evaluateDevice(d); - if (s != null && (device == null || s > score) && populateQueueFamily(stack, d.getDevice()).isComplete()) { + Float s = evaluateDevice(d, surface); + if (s != null && (device == null || s > score) && populateQueueFamilies(stack, d.getDevice()).isComplete()) { device = d; score = s; } @@ -129,59 +239,296 @@ private PhysicalDevice findPhysicalDevice(MemoryStack stack) { return device; } - private Float evaluateDevice(PhysicalDevice device) { - if (deviceEvaluators.isEmpty()) { - return 0f; - } - float score = 0f; - for (DeviceEvaluator e : deviceEvaluators) { - Float s = e.evaluateDevice(device.getDevice(), device.getProps(), device.getFeatures()); - if (s == null) { + private Float evaluateDevice(PhysicalDevice device, long surface) { + try (MemoryStack stack = MemoryStack.stackPush()) { + System.out.println("evaluating device"); + VkExtensionProperties.Buffer exts = Objects.requireNonNull(enumerateBuffer(stack, n -> { + System.out.println("create extension properties buffer: " + n); + return VkExtensionProperties.malloc(n, stack); + }, + (count, buffer) -> vkEnumerateDeviceExtensionProperties(device.getDevice(), (ByteBuffer) null, count, buffer))); + if (!deviceExtensions.stream().allMatch(e -> { + for (VkExtensionProperties p : exts) { + if (p.extensionNameString().equals(e)) { + return true; + } + } + return false; + })) return null; + if (!new SwapchainSupport(stack, device.getDevice(), surface).isSupported()) { return null; } - score += s; + if (deviceEvaluators.isEmpty()) { + return 0f; + } + float score = 0f; + for (DeviceEvaluator e : deviceEvaluators) { + //Float s = e.evaluateDevice(device.getDevice()); + Float s = 0f; + if (s == null) { + return null; + } + score += s; + } + return score; } - return score; } - private QueueFamilyIndices populateQueueFamily(MemoryStack stack, VkPhysicalDevice device) { + private QueueFamilyIndices populateQueueFamilies(MemoryStack stack, VkPhysicalDevice device) { QueueFamilyIndices fams = new QueueFamilyIndices(); VkQueueFamilyProperties.Buffer props = enumerateBuffer(stack, VkQueueFamilyProperties::malloc, (count, buffer) -> vkGetPhysicalDeviceQueueFamilyProperties(device, count, buffer)); - int i = 0; + int index = 0; for (VkQueueFamilyProperties p : props) { + final int i = index; if (isBitSet(p.queueFlags(), VK_QUEUE_GRAPHICS_BIT)) { - fams.graphics = i; + fams.setGraphics(i); + } + if (getInt(stack, result -> KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR(device, i, surface, result)) == VK_TRUE) { + fams.setPresents(i); } - i++; + index++; } return fams; } private VkDevice createLogicalDevice(MemoryStack stack, PhysicalDevice device, QueueFamilyIndices fams, PointerBuffer layers) { - VkDeviceQueueCreateInfo.Buffer queueCreate = VkDeviceQueueCreateInfo.malloc(1, stack) - .sType(VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) - .queueFamilyIndex(fams.graphics) - .pQueuePriorities(stack.floats(1f)); - VkDeviceCreateInfo deviceCreate = VkDeviceCreateInfo.malloc(stack) + // todo: register present queue here + VkDeviceQueueCreateInfo.Buffer queueCreate = VkDeviceQueueCreateInfo.calloc(fams.getLength(), stack); + for (int i = 0; i < fams.getLength(); i++) { + System.out.println("Queue family index: " + fams.getQueue(i)); + queueCreate.get(i).sType(VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) + .queueFamilyIndex(fams.getQueue(i)) + .pQueuePriorities(stack.floats(1f)); + } + queueCreate.rewind(); + PointerBuffer exts = toPointers(stack, deviceExtensions.stream(), deviceExtensions.size(), stack::UTF8); + VkDeviceCreateInfo deviceCreate = VkDeviceCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO) .pQueueCreateInfos(queueCreate) - .pEnabledFeatures(device.getFeatures()); + .pEnabledFeatures(device.getFeatures()) + .ppEnabledExtensionNames(exts); if (layers != null) { deviceCreate.ppEnabledLayerNames(layers); } - return new VkDevice(getPointer(stack, - ptr -> check(vkCreateDevice(device.getDevice(), deviceCreate, null, ptr), "Failed to create logical device.")), - device.getDevice(), deviceCreate); + System.out.println("device: " + device.getDevice() + ", device_create: " + deviceCreate); + long devHandle = getPointer(stack, ptr -> check(vkCreateDevice(device.getDevice(), deviceCreate, null, ptr), + "Failed to create logical device.")); + return new VkDevice(devHandle, device.getDevice(), deviceCreate); } - private VkQueue getQueue(MemoryStack stack, VkDevice device, QueueFamilyIndices fams, int i) { - return new VkQueue(getPointer(stack, ptr -> vkGetDeviceQueue(device, fams.graphics, i, ptr)), device); + private VkQueue getQueue(MemoryStack stack, VkDevice device, int queueIndex, int i) { + return new VkQueue(getPointer(stack, ptr -> vkGetDeviceQueue(device, queueIndex, i, ptr)), device); + } + + private long createVertexModule(MemoryStack stack, VkDevice device) { + return createShaderModule(stack, device, assetManager.loadAsset(ShadercLoader.key("Shaders/VulkanVertTest.glsl", ShaderType.Vertex))); + } + + private long createFragmentModule(MemoryStack stack, VkDevice device) { + return createShaderModule(stack, device, assetManager.loadAsset(ShadercLoader.key("Shaders/VulkanFragTest.glsl", ShaderType.Fragment))); + } + + private long createPipelineLayout(MemoryStack stack, VkDevice device) { + VkPipelineLayoutCreateInfo layoutCreate = VkPipelineLayoutCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO); + return getLong(stack, ptr -> check(vkCreatePipelineLayout(device, layoutCreate, null, ptr), + "Failed to create pipeline layout.")); + } + + private long createShaderModule(MemoryStack stack, VkDevice device, ByteBuffer code) { + VkShaderModuleCreateInfo create = VkShaderModuleCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) + .pCode(code); + return getLong(stack, ptr -> check(vkCreateShaderModule(device, create, null, ptr), + "Failed to create shader module.")); + } + + private long createGraphicsPipeline(MemoryStack stack, VkDevice device, long vert, long frag, long layout, long renderPass) { + VkPipelineShaderStageCreateInfo.Buffer stages = VkPipelineShaderStageCreateInfo.calloc(2, stack); + stages.get(0).sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) + .stage(VK_SHADER_STAGE_VERTEX_BIT) + .module(vert) + .pName(stack.UTF8("main")); // function initially called in the shader + stages.get(1).sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) + .stage(VK_SHADER_STAGE_FRAGMENT_BIT) + .module(frag) + .pName(stack.UTF8("main")); + VkPipelineDynamicStateCreateInfo dynamic = VkPipelineDynamicStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO) + .pDynamicStates(stack.ints(VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR)); + VkPipelineVertexInputStateCreateInfo vertInput = VkPipelineVertexInputStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO); + VkPipelineInputAssemblyStateCreateInfo assembly = VkPipelineInputAssemblyStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO) + .topology(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST) + .primitiveRestartEnable(false); + VkViewport.Buffer viewport = VkViewport.calloc(1, stack) + .x(0f).y(0f) + .width(swapchain.getExtent().width()).height(swapchain.getExtent().height()) + .minDepth(0f).maxDepth(1f); + VkRect2D.Buffer scissor = VkRect2D.calloc(1, stack) + .offset(VkOffset2D.calloc(stack).set(0, 0)) + .extent(swapchain.getExtent()); + VkPipelineViewportStateCreateInfo vpState = VkPipelineViewportStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO) + .pViewports(viewport) + .pScissors(scissor); + VkPipelineRasterizationStateCreateInfo raster = VkPipelineRasterizationStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO) + .depthClampEnable(false) + .rasterizerDiscardEnable(false) + .polygonMode(VK_POLYGON_MODE_FILL) + .lineWidth(1f) + .cullMode(VK_CULL_MODE_BACK_BIT) + .frontFace(VK_FRONT_FACE_CLOCKWISE) + .depthBiasEnable(false); + VkPipelineMultisampleStateCreateInfo multisample = VkPipelineMultisampleStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO) + .sampleShadingEnable(false) + .rasterizationSamples(VK_SAMPLE_COUNT_1_BIT); + // todo: configure depth and stencil buffers + VkPipelineColorBlendAttachmentState.Buffer blendAtt = VkPipelineColorBlendAttachmentState.calloc(1, stack) + .colorWriteMask(VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT) + .blendEnable(false) + .srcColorBlendFactor(VK_BLEND_FACTOR_ONE) + .dstColorBlendFactor(VK_BLEND_FACTOR_ZERO) + .colorBlendOp(VK_BLEND_OP_ADD) + .srcAlphaBlendFactor(VK_BLEND_FACTOR_ONE) + .srcAlphaBlendFactor(VK_BLEND_FACTOR_ZERO) + .alphaBlendOp(VK_BLEND_OP_ADD); + VkPipelineColorBlendStateCreateInfo blend = VkPipelineColorBlendStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO) + .logicOpEnable(false) + .logicOp(VK_LOGIC_OP_COPY) + .pAttachments(blendAtt); + VkGraphicsPipelineCreateInfo.Buffer pipeline = VkGraphicsPipelineCreateInfo.calloc(1, stack) + .sType(VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO) + .stageCount(2) + .pStages(stages) + .pVertexInputState(vertInput) + .pInputAssemblyState(assembly) + .pViewportState(vpState) + .pRasterizationState(raster) + .pMultisampleState(multisample) + .pColorBlendState(blend) + .pDynamicState(dynamic) + .layout(layout) + .renderPass(renderPass) + .subpass(0) + .basePipelineHandle(VK_NULL_HANDLE) + .basePipelineIndex(-1); + return getLong(stack, ptr -> check(vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, pipeline, null, ptr), + "Failed to create graphics pipeline.")); + } + + private long createRenderPass(MemoryStack stack, VkDevice device, Swapchain swapchain) { + VkAttachmentDescription.Buffer color = VkAttachmentDescription.calloc(1, stack) + .format(swapchain.getFormat()) + .samples(VK_SAMPLE_COUNT_1_BIT) + .loadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) + .storeOp(VK_ATTACHMENT_STORE_OP_STORE) + .stencilLoadOp(VK_ATTACHMENT_LOAD_OP_DONT_CARE) + .stencilStoreOp(VK_ATTACHMENT_STORE_OP_DONT_CARE) + .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) + .finalLayout(KHRSwapchain.VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + VkAttachmentReference.Buffer refs = VkAttachmentReference.calloc(1, stack) + .attachment(0) // references the attachment in the render pass attachment array + .layout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); + VkSubpassDescription.Buffer subpass = VkSubpassDescription.calloc(1, stack) + .pipelineBindPoint(VK_PIPELINE_BIND_POINT_GRAPHICS) + .colorAttachmentCount(1) + .pColorAttachments(refs); + VkSubpassDependency.Buffer dependency = VkSubpassDependency.calloc(1, stack) + .srcSubpass(VK_SUBPASS_EXTERNAL) // refers to the implicit pass before our subpass + .dstSubpass(0) // refers to our only subpass + .srcStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) + .srcAccessMask(0) + .dstStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) + .dstAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT); + VkRenderPassCreateInfo create = VkRenderPassCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO) + .pAttachments(color) // render pass attachment array + .pSubpasses(subpass) + .pDependencies(dependency); + return getLong(stack, ptr -> check(vkCreateRenderPass(device, create, null, ptr), + "Failed to create render pass.")); + } + + private LongBuffer createFrameBuffers(MemoryStack stack, VkDevice device, Swapchain swapchain, LongBuffer imageViews, long renderPass) { + LongBuffer buffers = BufferUtils.createLongBuffer(imageViews.limit()); + for (int i = 0; i < imageViews.limit(); i++) { + VkFramebufferCreateInfo create = VkFramebufferCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO) + .renderPass(renderPass) + .pAttachments(stack.longs(imageViews.get(i))) + .width(swapchain.getExtent().width()) + .height(swapchain.getExtent().height()) + .layers(1); + buffers.put(i, getLong(stack, ptr -> check(vkCreateFramebuffer(device, create, null, ptr), + "Failed to create framebuffer."))); + } + return buffers; + } + + private long createCommandPool(MemoryStack stack, VkDevice device, QueueFamilyIndices queues) { + VkCommandPoolCreateInfo create = VkCommandPoolCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO) + .flags(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT) + .queueFamilyIndex(queues.getGraphics()); + return getLong(stack, ptr -> check(vkCreateCommandPool(device, create, null, ptr), + "Failed to create command pool.")); + } + + private VkCommandBuffer createCommandBuffer(MemoryStack stack, VkDevice device, long commandPool) { + VkCommandBufferAllocateInfo allocate = VkCommandBufferAllocateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO) + .commandPool(commandPool) + .level(VK_COMMAND_BUFFER_LEVEL_PRIMARY) + .commandBufferCount(1); + return new VkCommandBuffer(getPointer(stack, ptr -> check(vkAllocateCommandBuffers(device, allocate, ptr), + "Failed to create command buffer.")), device); + } + + private void recordCommandBuffer(MemoryStack stack, int imageIndex) { + VkCommandBufferBeginInfo commandBegin = VkCommandBufferBeginInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO); + check(vkBeginCommandBuffer(commandBuffer, commandBegin), "Failed to begin recording command buffer"); + VkRenderPassBeginInfo passBegin = VkRenderPassBeginInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO) + .renderPass(renderPass) + .framebuffer(frameBuffers.get(imageIndex)) + .clearValueCount(1); + VkClearValue.Buffer clear = VkClearValue.calloc(1, stack); + clear.color().float32(stack.floats(0f, 0f, 0f, 1f)); + passBegin.pClearValues(clear); + passBegin.renderArea().offset(VkOffset2D.malloc(stack).set(0, 0)) + .extent(swapchain.getExtent()); + vkCmdBeginRenderPass(commandBuffer, passBegin, VK_SUBPASS_CONTENTS_INLINE); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline); + VkViewport.Buffer vp = VkViewport.calloc(1, stack) + .x(0f).y(0f).width(swapchain.getExtent().width()).height(swapchain.getExtent().height()) + .minDepth(0f).maxDepth(1f); + vkCmdSetViewport(commandBuffer, 0, vp); + VkRect2D.Buffer scissor = VkRect2D.calloc(1, stack) + .offset(VkOffset2D.malloc(stack).set(0, 0)) + .extent(swapchain.getExtent()); + vkCmdSetScissor(commandBuffer, 0, scissor); + vkCmdDraw(commandBuffer, 3, 1, 0, 0); + vkCmdEndRenderPass(commandBuffer); + check(vkEndCommandBuffer(commandBuffer), "Failed to record command buffer."); + } + + private void createSyncObjects(VkDevice device) { + //imageAvailableSemaphore = new Semaphore(device); + //renderFinishedSemaphore = new Semaphore(device); + //inFlightFence = new Fence(device, true); } private void verifyValidationLayerSupport(MemoryStack stack) { VkLayerProperties.Buffer supported = enumerateBuffer(stack, n -> VkLayerProperties.malloc(n, stack), VK10::vkEnumerateInstanceLayerProperties); + Objects.requireNonNull(supported); requestLoop: for (String r : layers) { for (VkLayerProperties l : supported) { if (r.equals(l.layerNameString())) { @@ -193,29 +540,145 @@ private void verifyValidationLayerSupport(MemoryStack stack) { } private VkDebugUtilsMessengerCreateInfoEXT createDebugger(MemoryStack stack, VkDebugUtilsMessengerCallbackEXT callback) { - return VkDebugUtilsMessengerCreateInfoEXT.malloc(stack) + VkDebugUtilsMessengerCreateInfoEXT create = VkDebugUtilsMessengerCreateInfoEXT.calloc(stack) .sType(VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) .messageSeverity(VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) .messageType(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) - .pfnUserCallback(callback); + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT); + if (callback != null) { + create.pfnUserCallback(callback); + } + return create; } private void addExtension(MemoryStack stack, String ext) { - extensions.add(stack.mallocPointer(1).put(stack.UTF8(ext)).rewind()); + instanceExtensions.add(stack.mallocPointer(1).put(stack.UTF8(ext)).rewind()); } private void addExtension(PointerBuffer ext) { - extensions.add(ext); + instanceExtensions.add(ext); + } + + private class Frame implements Runnable { + + private final Semaphore imageAvailable = null; + private final Semaphore renderFinished = null; + private final Fence inFlight = null; + + public Frame() {} + + @Override + public void run() { + try (MemoryStack stack = MemoryStack.stackPush()) { + System.out.println("start frame render commands"); + inFlight.blockThenReset(5000); + int image = getInt(stack, i -> check(KHRSwapchain.vkAcquireNextImageKHR( + device, swapchain.getSwapchain(), TimeUnit.SECONDS.toNanos(5), imageAvailable.getId(), VK_NULL_HANDLE, i), + "Failed to acquire next swapchain image.")); // forces rendering to wait for image availability + vkResetCommandBuffer(commandBuffer, 0); + recordCommandBuffer(stack, image); + VkSubmitInfo.Buffer submit = VkSubmitInfo.calloc(1, stack) + .sType(VK_STRUCTURE_TYPE_SUBMIT_INFO) + .waitSemaphoreCount(1) + .pWaitSemaphores(imageAvailableSemaphore.toBuffer(stack)) // waits until the image has been acquired + .pWaitDstStageMask(stack.ints(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)) + .pCommandBuffers(stack.pointers(commandBuffer)) + .pSignalSemaphores(stack.longs(renderFinished.getId())); // forces the present operation to wait + check(vkQueueSubmit(graphicsQueue, submit, inFlightFence.getId()), "Failed to submit commands to graphics queue."); + VkPresentInfoKHR present = VkPresentInfoKHR.calloc(stack) + .sType(KHRSwapchain.VK_STRUCTURE_TYPE_PRESENT_INFO_KHR) + .pWaitSemaphores(renderFinishedSemaphore.toBuffer(stack)) // waits until rendering has completed + .swapchainCount(1) + .pSwapchains(stack.longs(swapchain.getSwapchain())) + .pImageIndices(stack.ints(image)); + check(KHRSwapchain.vkQueuePresentKHR(presentQueue, present), "Failed to present image to swapchain"); + System.out.println("end frame render commands"); + } + } + + private void recordCommandBuffer(MemoryStack stack, int imageIndex) { + VkCommandBufferBeginInfo commandBegin = VkCommandBufferBeginInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO); + check(vkBeginCommandBuffer(commandBuffer, commandBegin), "Failed to begin recording command buffer"); + VkRenderPassBeginInfo passBegin = VkRenderPassBeginInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO) + .renderPass(renderPass) + .framebuffer(frameBuffers.get(imageIndex)) + .clearValueCount(1); + + VkClearValue.Buffer clear = VkClearValue.calloc(1, stack); + clear.color().float32(stack.floats(0f, 0f, 0f, 1f)); + passBegin.pClearValues(clear); + passBegin.renderArea().offset(VkOffset2D.malloc(stack).set(0, 0)) + .extent(swapchain.getExtent()); + vkCmdBeginRenderPass(commandBuffer, passBegin, VK_SUBPASS_CONTENTS_INLINE); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline); + VkViewport.Buffer vp = VkViewport.calloc(1, stack) + .x(0f).y(0f).width(swapchain.getExtent().width()).height(swapchain.getExtent().height()) + .minDepth(0f).maxDepth(1f); + vkCmdSetViewport(commandBuffer, 0, vp); + VkRect2D.Buffer scissor = VkRect2D.calloc(1, stack) + .offset(VkOffset2D.malloc(stack).set(0, 0)) + .extent(swapchain.getExtent()); + vkCmdSetScissor(commandBuffer, 0, scissor); + vkCmdDraw(commandBuffer, 3, 1, 0, 0); + vkCmdEndRenderPass(commandBuffer); + check(vkEndCommandBuffer(commandBuffer), "Failed to record command buffer."); + } + } private static class QueueFamilyIndices { - public Integer graphics; + public static final int GRAPHICS = 0, PRESENTS = 1; + private final Integer[] queues = new Integer[2]; + + public void setGraphics(Integer graphics) { + queues[GRAPHICS] = graphics; + } + + public void setPresents(Integer presents) { + queues[PRESENTS] = presents; + } + + public Integer[] getQueues() { + return queues; + } + + public Integer getQueue(int i) { + return queues[i]; + } + + public Integer getGraphics() { + return queues[GRAPHICS]; + } + + public Integer getPresents() { + return queues[PRESENTS]; + } + + public int getLength() { + return queues.length; + } public boolean isComplete() { - return graphics != null; + return Arrays.stream(queues).allMatch(Objects::nonNull); + } + + public boolean requiresConcurrentSharing() { + return !Objects.equals(getGraphics(), getPresents()); + } + + private IntBuffer toBuffer(MemoryStack stack) { + if (!isComplete()) { + throw new IllegalStateException("Not all queues found in this context."); + } + IntBuffer buf = stack.mallocInt(queues.length); + for (int i = 0; i < queues.length; i++) { + buf.put(i, queues[i]); + } + return buf; } } @@ -233,11 +696,6 @@ private PhysicalDevice(VkPhysicalDevice device) { vkGetPhysicalDeviceFeatures(device, features); this.device = device; } - private PhysicalDevice(VkPhysicalDevice device, VkPhysicalDeviceProperties props, VkPhysicalDeviceFeatures features) { - this.device = device; - this.props = props; - this.features = features; - } public VkPhysicalDevice getDevice() { return device; @@ -253,13 +711,176 @@ public VkPhysicalDeviceFeatures getFeatures() { } + private static class SwapchainSupport { + + private final VkSurfaceCapabilitiesKHR caps; + private final VkSurfaceFormatKHR.Buffer formats; + private final IntBuffer modes; + + public SwapchainSupport(MemoryStack stack, VkPhysicalDevice device, long surface) { + caps = VkSurfaceCapabilitiesKHR.malloc(stack); + KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, surface, caps); + formats = enumerateBuffer(stack, n -> VkSurfaceFormatKHR.malloc(n, stack), + (count, buffer) -> KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, count, buffer)); + modes = enumerateBuffer(stack, stack::mallocInt, + (count, buffer) -> KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, count, buffer)); + } + + public VkSurfaceFormatKHR selectFormat() { + return formats.stream() + .filter(f -> f.format() == VK_FORMAT_B8G8R8A8_SRGB) + .filter(f -> f.colorSpace() == KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) + .findAny().orElse(formats.get(0)); + } + + public int selectMode() { + for (int i = 0; i < modes.limit(); i++) { + if (modes.get(i) == KHRSurface.VK_PRESENT_MODE_MAILBOX_KHR) { + return modes.get(i); + } + } + return KHRSurface.VK_PRESENT_MODE_FIFO_KHR; + } + + public VkExtent2D selectExtent(MemoryStack stack, long window) { + if (caps.currentExtent().width() != UINT32_MAX) { + return caps.currentExtent(); + } + IntBuffer width = stack.mallocInt(1); + IntBuffer height = stack.mallocInt(1); + GLFW.glfwGetFramebufferSize(window, width, height); + VkExtent2D ext = VkExtent2D.malloc(stack); + ext.width(Math.min(Math.max(width.get(0), caps.minImageExtent().width()), caps.maxImageExtent().width())); + ext.height(Math.min(Math.max(width.get(0), caps.minImageExtent().height()), caps.maxImageExtent().height())); + return ext; + } + + public int selectImageCount() { + int n = caps.minImageCount() + 1; + return caps.minImageCount() > 0 ? Math.min(n, caps.minImageCount()) : n; + } + + public boolean isSupported() { + return formats != null && modes != null; + } + + public VkSurfaceCapabilitiesKHR getCaps() { + return caps; + } + + public VkSurfaceFormatKHR.Buffer getFormats() { + return formats; + } + + public IntBuffer getModes() { + return modes; + } + + } + + private static class Swapchain { + + private final long swapchain; + private final LongBuffer images; + private final int format; + private final VkExtent2D extent; + + @SuppressWarnings("resource") // todo: watch for memory leaks + public Swapchain(MemoryStack stack, SwapchainSupport support, VkDevice device, QueueFamilyIndices queues, long surface, long window) { + VkSurfaceFormatKHR fmt = support.selectFormat(); + format = fmt.format(); + extent = support.selectExtent(stack, window); + VkSwapchainCreateInfoKHR create = VkSwapchainCreateInfoKHR.calloc(stack) + .sType(KHRSwapchain.VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR) + .surface(surface) + .minImageCount(support.selectImageCount()) + .imageFormat(format) + .imageColorSpace(fmt.colorSpace()) + .imageExtent(extent) + .imageArrayLayers(1) // this will probably never change for games + .imageUsage(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) // rendering directly to the swapchain images + .preTransform(support.getCaps().currentTransform()) + .compositeAlpha(KHRSurface.VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) // blending with other windows + .presentMode(support.selectMode()) + .clipped(true) + .oldSwapchain(VK_NULL_HANDLE); + if (queues.requiresConcurrentSharing()) { // different graphics and present queues + create.imageSharingMode(VK_SHARING_MODE_CONCURRENT) + .queueFamilyIndexCount(queues.getLength()) + .pQueueFamilyIndices(queues.toBuffer(stack)); + } else { // use a faster sharing mode + create.imageSharingMode(VK_SHARING_MODE_EXCLUSIVE); + } + swapchain = getLong(stack, ptr -> check(KHRSwapchain.vkCreateSwapchainKHR(device, create, null, ptr), + "Failed to create swapchain.")); + images = enumerateBuffer(stack, BufferUtils::createLongBuffer, + (count, buffer) -> KHRSwapchain.vkGetSwapchainImagesKHR(device, swapchain, count, buffer)); + } + + public LongBuffer createImageViews(MemoryStack stack, VkDevice device) { + LongBuffer views = BufferUtils.createLongBuffer(images.limit()); + for (int i = 0; i < images.limit(); i++) { + VkImageViewCreateInfo create = VkImageViewCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) + .image(images.get(i)) + .viewType(VK_IMAGE_VIEW_TYPE_2D) + .format(format); + create.components().r(VK_COMPONENT_SWIZZLE_IDENTITY) + .g(VK_COMPONENT_SWIZZLE_IDENTITY) + .b(VK_COMPONENT_SWIZZLE_IDENTITY) + .a(VK_COMPONENT_SWIZZLE_IDENTITY); + create.subresourceRange().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + .baseMipLevel(0) + .levelCount(1) + .baseArrayLayer(0) + .layerCount(1); + views.put(getLong(stack, ptr -> check(vkCreateImageView(device, create, null, ptr), + "Failed to create image view."))); + } + views.rewind(); + return views; + } + + public void destroy(VkDevice device) { + KHRSwapchain.vkDestroySwapchainKHR(device, swapchain, null); + } + + public long getSwapchain() { + return swapchain; + } + + public LongBuffer getImages() { + return images; + } + + public int getFormat() { + return format; + } + + public VkExtent2D getExtent() { + return extent; + } + + } + private static class VulkanDebugCallback extends VkDebugUtilsMessengerCallbackEXT { + private Level exceptionThreshold; + + public VulkanDebugCallback(Level exceptionThreshold) { + this.exceptionThreshold = exceptionThreshold; + } + @Override public int invoke(int messageSeverity, int messageTypes, long pCallbackData, long pUserData) { try (VkDebugUtilsMessengerCallbackDataEXT data = VkDebugUtilsMessengerCallbackDataEXT.create(pCallbackData)) { //LOG.log(getLoggingLevel(messageSeverity), data.pMessageString()); - System.err.println(getLoggingLevel(messageSeverity).getName() + " " + data.pMessageString()); + Level lvl = getLoggingLevel(messageSeverity); + if (exceptionThreshold != null && lvl.intValue() >= exceptionThreshold.intValue()) { + throw new RuntimeException(lvl.getName() + ": " + data.pMessageString()); + } else { + System.err.println(lvl.getName() + " " + data.pMessageString()); + } } return VK_FALSE; // always return false, true is only really used for testing validation layers } diff --git a/jme3-lwjgl3/build.gradle b/jme3-lwjgl3/build.gradle index 82a83ac21c..efd0863fea 100644 --- a/jme3-lwjgl3/build.gradle +++ b/jme3-lwjgl3/build.gradle @@ -13,6 +13,7 @@ dependencies { api libs.lwjgl3.opencl api libs.lwjgl3.opengl api libs.lwjgl3.vulkan + api libs.lwjgl3.shaderc runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-windows') }) runtimeOnly(variantOf(libs.lwjgl3.base){ classifier('natives-windows-x86') }) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShaderType.java b/jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShaderType.java new file mode 100644 index 0000000000..2aff284de9 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShaderType.java @@ -0,0 +1,37 @@ +package com.jme3.shaderc; + +import org.lwjgl.util.shaderc.Shaderc; +import org.lwjgl.vulkan.VK10; + +public enum ShaderType { + + Vertex(VK10.VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK10.VK_SHADER_STAGE_VERTEX_BIT, Shaderc.shaderc_vertex_shader), + Fragment(VK10.VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, VK10.VK_SHADER_STAGE_FRAGMENT_BIT, Shaderc.shaderc_fragment_shader), + Tessellation(VK10.VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, VK10.VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, Shaderc.shaderc_tess_evaluation_shader), + TessellationControl(VK10.VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, VK10.VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, Shaderc.shaderc_tess_control_shader), + Geometry(VK10.VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, VK10.VK_SHADER_STAGE_GEOMETRY_BIT, Shaderc.shaderc_geometry_shader), + Compute(VK10.VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK10.VK_SHADER_STAGE_COMPUTE_BIT, Shaderc.shaderc_compute_shader); + + private final int vulkanPipeline; + private final int vulkanShader; + private final int shaderc; + + ShaderType(int vulkanPipeline, int vulkanShader, int shaderc) { + this.vulkanPipeline = vulkanPipeline; + this.vulkanShader = vulkanShader; + this.shaderc = shaderc; + } + + public int getVulkanPipeline() { + return vulkanPipeline; + } + + public int getVulkanShader() { + return vulkanShader; + } + + public int getShaderc() { + return shaderc; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShadercLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShadercLoader.java new file mode 100644 index 0000000000..a816e1b0b4 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShadercLoader.java @@ -0,0 +1,130 @@ +package com.jme3.shaderc; + +import com.jme3.asset.AssetInfo; +import com.jme3.asset.AssetKey; +import com.jme3.asset.AssetLoader; +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import jme3tools.shader.ShaderDebug; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.util.shaderc.Shaderc; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.ByteBuffer; +import java.util.Objects; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static org.lwjgl.system.MemoryUtil.NULL; + +public class ShadercLoader implements AssetLoader { + + private static final Logger LOG = Logger.getLogger(ShadercLoader.class.getName()); + private static final Compiler compiler = new Compiler(); + + @Override + public Object load(AssetInfo assetInfo) throws IOException { + if (!(assetInfo.getKey() instanceof Key)) { + throw new IllegalArgumentException("Requires " + Key.class.getName()); + } + Key key = (Key)assetInfo.getKey(); + try (InputStream in = assetInfo.openStream()) { + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + StringBuilder code = new StringBuilder(); + for (String line; (line = reader.readLine()) != null; ) { + code.append(line).append('\n'); + } + return compile(key.getName(), code.toString(), key.getShaderType(), key.getEntryPoint()); + } + } + + public static ByteBuffer compile(String name, String code, ShaderType type, String entry) { + synchronized (compiler) { try (MemoryStack stack = MemoryStack.stackPush()) { + long preprocessed = Shaderc.shaderc_compile_into_preprocessed_text(compiler.getNativeObject(), code, + type.getShaderc(), name, entry, NULL); + ByteBuffer bytecode = Objects.requireNonNull(Shaderc.shaderc_result_get_bytes(preprocessed)); + long compiled = Shaderc.shaderc_compile_into_spv(compiler.getNativeObject(), bytecode, + type.getShaderc(), stack.UTF8(name), stack.UTF8(entry), NULL); + if (Shaderc.shaderc_result_get_compilation_status(compiled) != Shaderc.shaderc_compilation_status_success) { + LOG.log(Level.SEVERE, "Bad compile of\n{0}", ShaderDebug.formatShaderSource(code)); + throw new RuntimeException("Failed to compile " + name + ":\n" + + Shaderc.shaderc_result_get_error_message(compiled)); + } + long warnings = Shaderc.shaderc_result_get_num_warnings(compiled); + if (warnings > 0) { + LOG.warning("Compiled with " + warnings + " warning" + (warnings == 1 ? "" : "s") + ": " + name); + } else { + LOG.fine("Compiled with no warnings: " + name); + } + return Shaderc.shaderc_result_get_bytes(compiled); + }} + } + + public static AssetKey key(String name, ShaderType type) { + return new Key(name, type, "main"); + } + + public static AssetKey key(String name, ShaderType type, String entry) { + return new Key(name, type, entry); + } + + private static class Compiler implements Native { + + private final NativeReference ref; + private long id; + + private Compiler() { + id = Shaderc.shaderc_compiler_initialize(); + if (id == NULL) { + throw new NullPointerException("Unable to initialize Shaderc compiler."); + } + ref = Native.get().register(this); + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> Shaderc.shaderc_compiler_release(id); + } + + @Override + public void prematureNativeDestruction() { + id = NULL; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + + } + + public static class Key extends AssetKey { + + private final ShaderType shaderType; + private final String entryPoint; + + public Key(String name, ShaderType shaderType, String entryPoint) { + super(name); + this.shaderType = shaderType; + this.entryPoint = entryPoint; + } + + public ShaderType getShaderType() { + return shaderType; + } + + public String getEntryPoint() { + return entryPoint; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/DeviceEvaluator.java b/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/DeviceEvaluator.java deleted file mode 100644 index 2cde580774..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/DeviceEvaluator.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.jme3.system.vulkan; - -import org.lwjgl.vulkan.VkPhysicalDevice; -import org.lwjgl.vulkan.VkPhysicalDeviceFeatures; -import org.lwjgl.vulkan.VkPhysicalDeviceProperties; - -public interface DeviceEvaluator { - - Float evaluateDevice(VkPhysicalDevice device, VkPhysicalDeviceProperties props, VkPhysicalDeviceFeatures features); - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java b/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java index 406b9c667d..af3853d0c8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java @@ -93,9 +93,6 @@ protected void engineInitialize() { } protected void glfwInitialize() { - //if (!GLFWVulkan.glfwVulkanSupported()) { - // throw new NullPointerException("Hardware does not support Vulkan."); - //} glfwSetErrorCallback(errorCallback = new GLFWErrorCallback() { @Override public void invoke(int error, long description) { @@ -109,6 +106,9 @@ public void invoke(int error, long description) { glfwInitHint(GLFW_WAYLAND_LIBDECOR, settings.isFullscreen() ? GLFW_WAYLAND_DISABLE_LIBDECOR : GLFW_WAYLAND_PREFER_LIBDECOR); } glfwInit(); + if (!GLFWVulkan.glfwVulkanSupported()) { + throw new NullPointerException("Hardware does not support Vulkan."); + } glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); window = glfwCreateWindow(getSettings().getWidth(), getSettings().getHeight(), getSettings().getTitle(), NULL, NULL); @@ -173,10 +173,11 @@ protected void syncFrames() { } protected void engineTerminate() { + System.out.println("terminate engine"); engine.destroy(); glfwDestroyWindow(window); glfwTerminate(); - LOGGER.fine("Display destroyed."); + LOGGER.info("Display destroyed."); } protected void updateSizes() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Attachment.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Attachment.java new file mode 100644 index 0000000000..73689892db --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Attachment.java @@ -0,0 +1,54 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.vulkan.VkAttachmentDescription; +import org.lwjgl.vulkan.VkAttachmentReference; + +import static org.lwjgl.vulkan.VK10.*; + +public class Attachment implements Native { + + private final NativeReference ref; + private VkAttachmentDescription description; + private VkAttachmentReference reference; + + public Attachment(int format, int samples, int finalLayout) { + description = VkAttachmentDescription.create() + .format(format) + .samples(samples) + .loadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) + .storeOp(VK_ATTACHMENT_STORE_OP_STORE) + .stencilLoadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) + .stencilLoadOp(VK_ATTACHMENT_STORE_OP_STORE) + .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) + .finalLayout(finalLayout); + reference = VkAttachmentReference.create(); + ref = Native.get().register(this); + } + + @Override + public VkAttachmentDescription getNativeObject() { + return description; + } + + @Override + public Runnable createNativeDestroyer() { + return description::free; + } + + @Override + public void prematureNativeDestruction() { + description = null; + } + + @Override + public NativeReference getNativeReference() { + return null; + } + + public VkAttachmentDescription getDescription() { + return description; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java new file mode 100644 index 0000000000..621467db72 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java @@ -0,0 +1,87 @@ +package com.jme3.vulkan; + +import org.lwjgl.BufferUtils; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkCommandBuffer; +import org.lwjgl.vulkan.VkCommandBufferAllocateInfo; +import org.lwjgl.vulkan.VkCommandBufferBeginInfo; +import org.lwjgl.vulkan.VkSubmitInfo; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class CommandBuffer { + + protected final CommandPool pool; + protected final VkCommandBuffer buffer; + protected boolean recording = false; + + public CommandBuffer(CommandPool pool) { + this.pool = pool; + VkCommandBufferAllocateInfo allocate = VkCommandBufferAllocateInfo.create() + .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO) + .commandPool(pool.getNativeObject()) + .level(VK_COMMAND_BUFFER_LEVEL_PRIMARY) + .commandBufferCount(1); + PointerBuffer ptr = MemoryUtil.memAllocPointer(1); + check(vkAllocateCommandBuffers(pool.getDevice().getNativeObject(), allocate, ptr), + "Failed to allocate command buffer"); + buffer = new VkCommandBuffer(ptr.get(0), pool.getDevice().getNativeObject()); + allocate.close(); + MemoryUtil.memFree(ptr); + } + + public void begin() { + if (recording) { + throw new IllegalStateException("Command buffer already recording."); + } + VkCommandBufferBeginInfo begin = VkCommandBufferBeginInfo.create() + .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO); + check(vkBeginCommandBuffer(buffer, begin), "Failed to begin command buffer"); + begin.close(); + recording = true; + } + + public void end() { + check(vkEndCommandBuffer(buffer), "Failed to record command buffer"); + } + + public void submit(Semaphore wait, Semaphore signal, Fence fence) { + if (!recording) { + throw new IllegalStateException("Command buffer has not begun recording."); + } + try (MemoryStack stack = MemoryStack.stackPush()) { + VkSubmitInfo.Buffer submit = VkSubmitInfo.calloc(1, stack) + .sType(VK_STRUCTURE_TYPE_SUBMIT_INFO) + .pCommandBuffers(stack.pointers(buffer)); + if (wait != null) { + submit.waitSemaphoreCount(1).pWaitSemaphores(stack.longs(wait.getNativeObject())) + .pWaitDstStageMask(stack.ints(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)); + } + if (signal != null) { + submit.pSignalSemaphores(stack.longs(signal.getNativeObject())); + } + pool.getQueue().submit(submit, fence); + } + recording = false; + } + + public void reset() { + vkResetCommandBuffer(buffer, 0); + } + + public CommandPool getPool() { + return pool; + } + + public VkCommandBuffer getBuffer() { + return buffer; + } + + public boolean isRecording() { + return recording; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java new file mode 100644 index 0000000000..aca0119358 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java @@ -0,0 +1,73 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkCommandPoolCreateInfo; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class CommandPool implements Native { + + private final LogicalDevice device; + private final Queue queue; + private final NativeReference ref; + private LongBuffer id = MemoryUtil.memAllocLong(1); + + public CommandPool(LogicalDevice device, Queue queue, boolean isTransient, boolean reset) { + this.device = device; + this.queue = queue; + VkCommandPoolCreateInfo create = VkCommandPoolCreateInfo.create() + .sType(VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO) + .flags((isTransient ? VK_COMMAND_POOL_CREATE_TRANSIENT_BIT : 0) + | (reset ? VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT : 0)) + .queueFamilyIndex(queue.getFamilyIndex()); + check(vkCreateCommandPool(device.getNativeObject(), create, null, id), "Failed to create command pool."); + create.close(); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id != null ? id.get(0) : null; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + vkDestroyCommandPool(device.getNativeObject(), id.get(0), null); + MemoryUtil.memFree(id); + }; + } + + @Override + public void prematureNativeDestruction() { + id = null; + } + + @Override + public NativeReference getNativeReference() { + return null; + } + + public CommandBuffer allocateCommandBuffer() { + return new CommandBuffer(this); + } + + public OneTimeCommandBuffer allocateOneTimeCommandBuffer() { + return new OneTimeCommandBuffer(this); + } + + public LogicalDevice getDevice() { + return device; + } + + public Queue getQueue() { + return queue; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java new file mode 100644 index 0000000000..44e9ed7925 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java @@ -0,0 +1,57 @@ +package com.jme3.vulkan; + +import org.lwjgl.vulkan.VkExtensionProperties; + +import java.util.Arrays; +import java.util.Collection; + +public interface DeviceEvaluator { + + Float evaluateDevice(PhysicalDevice device); + + static DeviceExtensionSupport extensions(String... exts) { + return new DeviceExtensionSupport(Arrays.asList(exts)); + } + + static DeviceExtensionSupport extensions(Collection exts) { + return new DeviceExtensionSupport(exts); + } + + static DeviceSwapchainSupport swapchain(Surface surface) { + return new DeviceSwapchainSupport(surface); + } + + class DeviceExtensionSupport implements DeviceEvaluator { + + private final Collection extensions; + + public DeviceExtensionSupport(Collection extensions) { + this.extensions = extensions; + } + + @Override + public Float evaluateDevice(PhysicalDevice device) { + VkExtensionProperties.Buffer exts = device.getExtensions(); + if (extensions.stream().allMatch(e -> exts.stream().anyMatch( + p -> p.extensionNameString().equals(e)))) return 0f; + return null; + } + + } + + class DeviceSwapchainSupport implements DeviceEvaluator { + + private final Surface surface; + + public DeviceSwapchainSupport(Surface surface) { + this.surface = surface; + } + + @Override + public Float evaluateDevice(PhysicalDevice device) { + return device.querySwapchainSupport(surface) ? 0f : null; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java new file mode 100644 index 0000000000..3f21ff483c --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java @@ -0,0 +1,76 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkDevice; +import org.lwjgl.vulkan.VkFenceCreateInfo; + +import java.util.concurrent.TimeUnit; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.system.MemoryUtil.NULL; +import static org.lwjgl.vulkan.VK10.*; + +public class Fence implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private long id; + + public Fence(LogicalDevice device) { + this(device, false); + } + + public Fence(LogicalDevice device, boolean signal) { + this.device = device; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkFenceCreateInfo create = VkFenceCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_FENCE_CREATE_INFO) + .flags(signal ? VK_FENCE_CREATE_SIGNALED_BIT : 0); + id = getLong(stack, ptr -> check(vkCreateFence(device.getNativeObject(), create, null, ptr), + "Failed to create fence.")); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyFence(device.getNativeObject(), nonNull(id), null); + } + + @Override + public void prematureNativeDestruction() { + id = NULL; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public void block(long timeoutMillis) { + check(vkWaitForFences(device.getNativeObject(), id, true, TimeUnit.MILLISECONDS.toNanos(timeoutMillis)), + "Fence wait expired."); + } + + public void blockThenReset(long timeoutMillis) { + block(timeoutMillis); + reset(); + } + + public void reset() { + vkResetFences(device.getNativeObject(), id); + } + + public long getId() { + return id; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java new file mode 100644 index 0000000000..b94f3ddff4 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java @@ -0,0 +1,83 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkFramebufferCreateInfo; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class FrameBuffer implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private final int width, height, layers; + private final ImageView[] attachments; + private LongBuffer id = MemoryUtil.memAllocLong(1); + + public FrameBuffer(LogicalDevice device, RenderPass compat, int width, int height, int layers, ImageView... attachments) { + this.device = device; + this.width = width; + this.height = height; + this.layers = layers; + this.attachments = attachments; + LongBuffer att = MemoryUtil.memAllocLong(attachments.length); + for (int i = 0; i < attachments.length; i++) { + att.put(i, attachments[i].getNativeObject()); + } + VkFramebufferCreateInfo create = VkFramebufferCreateInfo.create() + .sType(VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO) + .renderPass(compat.getNativeObject()) + .pAttachments(att) + .width(width).height(height) + .layers(layers); + check(vkCreateFramebuffer(device.getNativeObject(), create, null, id)); + MemoryUtil.memFree(att); + create.close(); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id != null ? id.get(0) : null; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + vkDestroyFramebuffer(device.getNativeObject(), id.get(0), null); + MemoryUtil.memFree(id); + }; + } + + @Override + public void prematureNativeDestruction() { + id = null; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public int getLayers() { + return layers; + } + + public ImageView[] getAttachments() { + return attachments; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java new file mode 100644 index 0000000000..9719122fee --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java @@ -0,0 +1,132 @@ +package com.jme3.vulkan; + +import com.jme3.material.RenderState; +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.*; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.check; +import static org.lwjgl.vulkan.VK10.*; +import static org.lwjgl.vulkan.VK10.VK_NULL_HANDLE; + +public class GraphicsPipeline implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private LongBuffer id = MemoryUtil.memAllocLong(1); + + public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass compat, RenderState state, ShaderModule vert, ShaderModule frag) { + this.device = device; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkPipelineShaderStageCreateInfo.Buffer stages = VkPipelineShaderStageCreateInfo.calloc(2, stack); + stages.get(0).sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) + .stage(VK_SHADER_STAGE_VERTEX_BIT) + .module(vert.getNativeObject()) + .pName(stack.UTF8(vert.getEntryPoint())); // function initially called in the shader + stages.get(1).sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) + .stage(VK_SHADER_STAGE_FRAGMENT_BIT) + .module(frag.getNativeObject()) + .pName(stack.UTF8(frag.getEntryPoint())); + VkPipelineDynamicStateCreateInfo dynamic = VkPipelineDynamicStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO) + .pDynamicStates(stack.ints(VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR)); + VkPipelineVertexInputStateCreateInfo vertInput = VkPipelineVertexInputStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO); + VkPipelineInputAssemblyStateCreateInfo assembly = VkPipelineInputAssemblyStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO) + .topology(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST) + .primitiveRestartEnable(false); + VkViewport.Buffer viewport = VkViewport.calloc(1, stack) + .x(0f).y(0f) + .width(1024).height(1024) // todo: ensure passing random values here is acceptable + .minDepth(0f).maxDepth(1f); + VkRect2D.Buffer scissor = VkRect2D.calloc(1, stack); + scissor.offset().set(0, 0); + scissor.extent().width(1024).height(1024); // todo: ensure passing random values here is acceptable + VkPipelineViewportStateCreateInfo vpState = VkPipelineViewportStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO) + .pViewports(viewport) + .pScissors(scissor); + VkPipelineRasterizationStateCreateInfo raster = VkPipelineRasterizationStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO) + .depthClampEnable(false) + .rasterizerDiscardEnable(false) + .polygonMode(VK_POLYGON_MODE_FILL) + .lineWidth(1f) + .cullMode(RenderStateToVulkan.faceCull(state.getFaceCullMode())) + .frontFace(VK_FRONT_FACE_CLOCKWISE) + .depthBiasEnable(false); + VkPipelineMultisampleStateCreateInfo multisample = VkPipelineMultisampleStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO) + .sampleShadingEnable(false) + .rasterizationSamples(VK_SAMPLE_COUNT_1_BIT); + // todo: configure depth and stencil buffers + VkPipelineColorBlendAttachmentState.Buffer blendAtt = VkPipelineColorBlendAttachmentState.calloc(1, stack) + .colorWriteMask(VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT) + .blendEnable(state.getBlendMode() != RenderState.BlendMode.Off) + .srcColorBlendFactor(VK_BLEND_FACTOR_ONE) // todo: control with render state + .dstColorBlendFactor(VK_BLEND_FACTOR_ZERO) + .colorBlendOp(RenderStateToVulkan.blendEquation(state.getBlendEquation())) + .srcAlphaBlendFactor(VK_BLEND_FACTOR_ONE) + .srcAlphaBlendFactor(VK_BLEND_FACTOR_ZERO) + .alphaBlendOp(RenderStateToVulkan.blendEquationAlpha(state.getBlendEquationAlpha(), state.getBlendEquation())); + VkPipelineColorBlendStateCreateInfo blend = VkPipelineColorBlendStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO) + .logicOpEnable(false) + .logicOp(VK_LOGIC_OP_COPY) + .pAttachments(blendAtt); + VkGraphicsPipelineCreateInfo.Buffer pipeline = VkGraphicsPipelineCreateInfo.calloc(1, stack) + .sType(VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO) + .stageCount(2) + .pStages(stages) + .pVertexInputState(vertInput) + .pInputAssemblyState(assembly) + .pViewportState(vpState) + .pRasterizationState(raster) + .pMultisampleState(multisample) + .pColorBlendState(blend) + .pDynamicState(dynamic) + .layout(layout.getNativeObject()) + .renderPass(compat.getNativeObject()) + .subpass(0) + .basePipelineHandle(VK_NULL_HANDLE) + .basePipelineIndex(-1); + check(vkCreateGraphicsPipelines(device.getNativeObject(), VK_NULL_HANDLE, pipeline, null, id), + "Failed to create graphics pipeline"); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id != null ? id.get(0) : null; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + vkDestroyPipeline(device.getNativeObject(), id.get(0), null); + MemoryUtil.memFree(id); + }; + } + + @Override + public void prematureNativeDestruction() { + id = null; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public void bind(CommandBuffer cmd) { + vkCmdBindPipeline(cmd.getBuffer(), VK_PIPELINE_BIND_POINT_GRAPHICS, id.get(0)); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java new file mode 100644 index 0000000000..9bf5755a14 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java @@ -0,0 +1,121 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.*; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class Image implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private final int width, height, format, tiling, usage, mem; + protected LongBuffer id = MemoryUtil.memAllocLong(1); + protected LongBuffer memory = MemoryUtil.memAllocLong(1); + + public Image(LogicalDevice device, int width, int height, int format, int tiling, int usage, int mem) { + this.device = device; + this.width = width; + this.height = height; + this.format = format; + this.tiling = tiling; + this.usage = usage; + this.mem = mem; + VkImageCreateInfo create = VkImageCreateInfo.create() + .sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) + .imageType(VK_IMAGE_TYPE_2D) + .mipLevels(1) + .arrayLayers(1) + .format(format) + .tiling(tiling) + .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) + .usage(usage) + .samples(VK_SAMPLE_COUNT_1_BIT) + .sharingMode(VK_SHARING_MODE_EXCLUSIVE); + create.extent().width(width).height(height).depth(1); + createImageMemory(create, mem); + create.free(); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + public Image(LogicalDevice device, VkImageCreateInfo create, int mem) { + this.device = device; + this.width = create.extent().width(); + this.height = create.extent().height(); + this.format = create.format(); + this.tiling = create.tiling(); + this.usage = create.usage(); + this.mem = mem; + createImageMemory(create, mem); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + public Image(LogicalDevice device, long id) { + width = height = format = tiling = usage = mem = 0; // todo: fix image interfacing + this.device = device; + this.id.put(0, id); + this.memory.put(0, MemoryUtil.NULL); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + private void createImageMemory(VkImageCreateInfo create, int mem) { + create.sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO); + vkCreateImage(device.getNativeObject(), create, null, id); + VkMemoryRequirements memReq = VkMemoryRequirements.create(); + vkGetImageMemoryRequirements(device.getNativeObject(), id.get(0), memReq); + VkMemoryAllocateInfo allocate = VkMemoryAllocateInfo.create() + .sType(VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO) + .allocationSize(memReq.size()) + .memoryTypeIndex(device.getPhysicalDevice().findMemoryType(memReq.memoryTypeBits(), mem)); + check(vkAllocateMemory(device.getNativeObject(), allocate, null, memory), "Failed to allocate image memory"); + vkBindImageMemory(device.getNativeObject(), id.get(0), memory.get(0), 0); + memReq.free(); + allocate.free(); + } + + @Override + public Long getNativeObject() { + return id != null ? id.get(0) : null; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + vkDestroyImage(device.getNativeObject(), id.get(0), null); + MemoryUtil.memFree(id); + MemoryUtil.memFree(memory); + }; + } + + @Override + public void prematureNativeDestruction() { + id = null; + memory = null; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public LogicalDevice getDevice() { + return device; + } + + public long getMemory() { + return memory != null ? memory.get(0) : MemoryUtil.NULL; + } + + public ImageView createView(VkImageViewCreateInfo create) { + return new ImageView(this, create); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java new file mode 100644 index 0000000000..377e4d4b70 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java @@ -0,0 +1,53 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkImageViewCreateInfo; + +import java.nio.LongBuffer; + +public class ImageView implements Native { + + private final Image image; + private final NativeReference ref; + private LongBuffer id = MemoryUtil.memAllocLong(1); + + public ImageView(Image image, VkImageViewCreateInfo create) { + this.image = image; + create.sType(VK10.VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO); + create.image(image.getNativeObject()); + VK10.vkCreateImageView(image.getDevice().getNativeObject(), create, null, id); + ref = Native.get().register(this); + image.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id != null ? id.get(0) : null; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + VK10.vkDestroyImageView(image.getDevice().getNativeObject(), id.get(0), null); + MemoryUtil.memFree(id); + }; + } + + @Override + public void prematureNativeDestruction() { + id = null; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public Image getImage() { + return image; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java new file mode 100644 index 0000000000..6ad8d52c5d --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java @@ -0,0 +1,146 @@ +package com.jme3.vulkan; + +import com.jme3.system.JmeVersion; +import org.lwjgl.PointerBuffer; +import org.lwjgl.glfw.GLFWVulkan; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.EXTDebugUtils; +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkApplicationInfo; +import org.lwjgl.vulkan.VkInstanceCreateInfo; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Objects; + +import static org.lwjgl.vulkan.VK10.*; + +public class InstanceBuilder implements AutoCloseable { + + public static final String LUNARG_LAYER = "VK_LAYER_KHRONOS_validation"; + + private final MemoryStack stack; + private final VkApplicationInfo info; + private final Collection extPointers = new ArrayList<>(); + private final Collection extensions = new ArrayList<>(); + private final Collection layers = new ArrayList<>(); + + public InstanceBuilder() { + this(VK_API_VERSION_1_0); + } + + public InstanceBuilder(int vulkanApi) { + stack = MemoryStack.stackPush(); + String[] ver = JmeVersion.VERSION_NUMBER.split("\\.", 3); + info = VkApplicationInfo.calloc(stack).sType(VK_STRUCTURE_TYPE_APPLICATION_INFO) + .pEngineName(stack.UTF8("jMonkeyEngine")) + .engineVersion(VK_MAKE_VERSION( + Integer.parseInt(ver[0]), + Integer.parseInt(ver[1]), + Integer.parseInt(ver[2]))) + .apiVersion(vulkanApi); + } + + @Override + public void close() { + stack.pop(); + } + + public VulkanInstance build() { + return new VulkanInstance(info, getExtensions(), getLayers()); + } + + public void setApplicationName(String name) { + info.pApplicationName(stack.UTF8(name)); + } + + public void setApplicationVersion(int major, int minor, int patch) { + info.applicationVersion(VK_MAKE_VERSION(major, minor, patch)); + } + + public void addGlfwExtensions() { + addExtensions(Objects.requireNonNull(GLFWVulkan.glfwGetRequiredInstanceExtensions())); + } + + public void addDebugExtension() { + addExtension(EXTDebugUtils.VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + } + + public void addLunarGLayer() { + addLayer(LUNARG_LAYER); + } + + public void addExtensions(PointerBuffer exts) { + extPointers.add(exts); + } + + public void addExtension(String ext) { + extensions.add(ext); + } + + public void addLayer(String layer) { + layers.add(layer); + } + + public VkApplicationInfo getInfo() { + return info; + } + + public PointerBuffer getExtensions() { + return getExtensions(stack.mallocPointer(getNumExtensions())); + } + + public PointerBuffer getExtensions(PointerBuffer exts) { + for (PointerBuffer ptr : extPointers) { + for (int i = 0; i < ptr.limit(); i++) { + if (exts.hasRemaining()) { + exts.put(ptr.get(i)); + } else return exts.rewind(); + } + } + for (String e : extensions) { + if (exts.hasRemaining()) { + exts.put(stack.UTF8(e)); + } else break; + } + return exts.rewind(); + } + + public Collection getUnnamedExtensions() { + return extPointers; + } + + public Collection getNamedExtensions() { + return extensions; + } + + public int getNumExtensions() { + int size = extensions.size(); + for (PointerBuffer exts : extPointers) { + size += exts.limit(); + } + return size; + } + + public PointerBuffer getLayers() { + return getLayers(stack.mallocPointer(layers.size())); + } + + public PointerBuffer getLayers(PointerBuffer lyrs) { + for (String l : layers) { + if (lyrs.hasRemaining()) { + lyrs.put(stack.UTF8(l)); + } + } + return lyrs.rewind(); + } + + public Collection getNamedLayers() { + return layers; + } + + public int getNumLayers() { + return layers.size(); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java new file mode 100644 index 0000000000..0b841e29d1 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java @@ -0,0 +1,68 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkDevice; +import org.lwjgl.vulkan.VkDeviceCreateInfo; +import org.lwjgl.vulkan.VkPhysicalDeviceFeatures; + +import java.util.Collection; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class LogicalDevice implements Native { + + private final PhysicalDevice physical; + private final NativeReference ref; + private VkDevice device; + + public LogicalDevice(PhysicalDevice physical, PointerBuffer extensions, PointerBuffer layers) { + this.physical = physical; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkDeviceCreateInfo create = VkDeviceCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO) + .pQueueCreateInfos(physical.getQueueFamilies().createLogicalBuffers(stack)) + .pEnabledFeatures(physical.getFeatures()); + if (extensions != null) { + create.ppEnabledExtensionNames(extensions); + } + if (layers != null) { + create.ppEnabledLayerNames(layers); + } + PointerBuffer ptr = stack.mallocPointer(1); + device = new VkDevice(check(vkCreateDevice(physical.getDevice(), create, null, ptr), + "Failed to create logical device."), physical.getDevice(), create); + MemoryUtil.memFree(ptr); + } + ref = Native.get().register(this); + } + + @Override + public VkDevice getNativeObject() { + return device; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyDevice(device, null); + } + + @Override + public void prematureNativeDestruction() { + device = null; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public PhysicalDevice getPhysicalDevice() { + return physical; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryBarrier.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryBarrier.java new file mode 100644 index 0000000000..c7322df3db --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryBarrier.java @@ -0,0 +1,4 @@ +package com.jme3.vulkan; + +public class MemoryBarrier { +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java new file mode 100644 index 0000000000..92e4991add --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java @@ -0,0 +1,62 @@ +package com.jme3.vulkan; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkCommandBufferBeginInfo; +import org.lwjgl.vulkan.VkSubmitInfo; + +import static org.lwjgl.vulkan.VK10.*; + +public class OneTimeCommandBuffer extends CommandBuffer { + + private boolean active = false; + + public OneTimeCommandBuffer(CommandPool pool) { + super(pool); + } + + @Override + public void begin() { + if (recording) { + throw new IllegalStateException("Command buffer already recording."); + } + if (active) { + throw new IllegalStateException("Buffer already freed."); + } + VkCommandBufferBeginInfo begin = VkCommandBufferBeginInfo.create() + .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO) + .flags(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); + vkBeginCommandBuffer(buffer, begin); + begin.close(); + recording = true; + } + + @Override + public void submit(Semaphore wait, Semaphore signal, Fence fence) { + if (!recording) { + throw new IllegalStateException("Command buffer has not begun recording."); + } + try (MemoryStack stack = MemoryStack.stackPush()) { + VkSubmitInfo.Buffer submit = VkSubmitInfo.calloc(1, stack) + .sType(VK_STRUCTURE_TYPE_SUBMIT_INFO) + .pCommandBuffers(stack.pointers(buffer)); + if (wait != null) { + submit.waitSemaphoreCount(1).pWaitSemaphores(stack.longs(wait.getNativeObject())) + .pWaitDstStageMask(stack.ints(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)); + } + if (signal != null) { + submit.pSignalSemaphores(stack.longs(signal.getNativeObject())); + } + pool.getQueue().submit(submit, fence); + pool.getQueue().waitIdle(); + vkFreeCommandBuffers(pool.getDevice().getNativeObject(), + pool.getNativeObject(), buffer); + } + active = false; + recording = false; + } + + public boolean isActive() { + return active; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java new file mode 100644 index 0000000000..c9a591edc7 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java @@ -0,0 +1,138 @@ +package com.jme3.vulkan; + +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.*; + +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.util.Collection; +import java.util.function.Supplier; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class PhysicalDevice { + + private final VkPhysicalDevice device; + private final T queues; + private final VkQueueFamilyProperties.Buffer queueProperties; + + public PhysicalDevice(VkInstance instance, T queues, long id) { + try (MemoryStack stack = MemoryStack.stackPush()) { + this.queues = queues; + this.device = new VkPhysicalDevice(id, instance); + this.queueProperties = enumerateBuffer(stack, VkQueueFamilyProperties::malloc, + (count, buffer) -> vkGetPhysicalDeviceQueueFamilyProperties(device, count, buffer)); + this.queues.populate(this, getQueueFamilyProperties()); + } + } + + public Float evaluate(Collection evaluators) { + if (evaluators.isEmpty()) { + return 0f; + } + float score = 0f; + for (DeviceEvaluator e : evaluators) { + Float s = e.evaluateDevice(this); + if (s == null) return null; + score += s; + } + return score; + } + + public VkPhysicalDevice getDevice() { + return device; + } + + public T getQueueFamilies() { + return queues; + } + + public VkQueueFamilyProperties.Buffer getQueueFamilyProperties() { + return queueProperties; + } + + public VkPhysicalDeviceProperties getProperties() { + VkPhysicalDeviceProperties props = VkPhysicalDeviceProperties.create(); + vkGetPhysicalDeviceProperties(device, props); + return props; + } + + public VkPhysicalDeviceFeatures getFeatures() { + VkPhysicalDeviceFeatures features = VkPhysicalDeviceFeatures.create(); + vkGetPhysicalDeviceFeatures(device, features); + return features; + } + + public VkExtensionProperties.Buffer getExtensions() { + return enumerateBuffer(VkExtensionProperties::create, (count, buffer) -> + vkEnumerateDeviceExtensionProperties(device, (ByteBuffer)null, count, buffer)); + } + + public int findSupportedFormat(int tiling, int features, int... candidates) { + VkFormatProperties props = VkFormatProperties.create(); + for (int f : candidates) { + vkGetPhysicalDeviceFormatProperties(device, f, props); + if ((tiling == VK_IMAGE_TILING_LINEAR && (props.linearTilingFeatures() & features) == features) + || (tiling == VK_IMAGE_TILING_OPTIMAL && (props.optimalTilingFeatures() & features) == features)) { + return f; + } + } + throw new NullPointerException("Failed to find supported format."); + } + + public int findMemoryType(int filter, int properties) { + try (MemoryStack stack = MemoryStack.stackPush()) { + VkPhysicalDeviceMemoryProperties memProps = VkPhysicalDeviceMemoryProperties.malloc(stack); + vkGetPhysicalDeviceMemoryProperties(device, memProps); + for (int i = 0; i < memProps.memoryTypeCount(); i++) { + if ((filter & (1 << i)) != 0 && (memProps.memoryTypes(i).propertyFlags() & properties) == properties) { + return i; + } + } + throw new NullPointerException("Failed to find suitable memory type."); + } + } + + public boolean querySwapchainSupport(Surface surface) { + IntBuffer count = MemoryUtil.memAllocInt(1); + KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface.getNativeObject(), count, null); + if (count.get(0) <= 0) { + return false; + } + KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface.getNativeObject(), count, null); + int n = count.get(0); + MemoryUtil.memFree(count); + return n > 0; + } + + @SuppressWarnings("unchecked") + public static PhysicalDevice getPhysicalDevice(VkInstance instance, + Collection evaluators, + Supplier queueFactory) { + try (MemoryStack stack = MemoryStack.stackPush()) { + PointerBuffer devices = enumerateBuffer(stack, stack::mallocPointer, + (count, buffer) -> check(vkEnumeratePhysicalDevices(instance, count, buffer), + "Failed to enumerate physical devices.")); + PhysicalDevice device = null; + float score = 0f; + for (PhysicalDevice d : iteratePointers(devices, ptr -> new PhysicalDevice(instance, queueFactory.get(), ptr))) { + if (!d.queues.isComplete()) { + continue; + } + Float s = d.evaluate(evaluators); + if (s != null && (device == null || s > score)) { + device = d; + score = s; + } + } + if (device == null) { + throw new NullPointerException("Failed to find suitable physical device."); + } + return device; + } + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java new file mode 100644 index 0000000000..6ff22e8bb6 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java @@ -0,0 +1,53 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkPipelineLayoutCreateInfo; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class PipelineLayout implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private LongBuffer id = MemoryUtil.memAllocLong(1); + + public PipelineLayout(LogicalDevice device) { + this.device = device; + VkPipelineLayoutCreateInfo create = VkPipelineLayoutCreateInfo.create() + .sType(VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO); + check(vkCreatePipelineLayout(device.getNativeObject(), create, null, id), + "Failed to create pipeline."); + create.close(); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id != null ? id.get(0) : null; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + vkDestroyPipelineLayout(device.getNativeObject(), id.get(0), null); + MemoryUtil.memFree(id); + }; + } + + @Override + public void prematureNativeDestruction() { + id = null; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java new file mode 100644 index 0000000000..a8ca8563b0 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java @@ -0,0 +1,57 @@ +package com.jme3.vulkan; + +import com.jme3.renderer.vulkan.VulkanUtils; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkQueue; +import org.lwjgl.vulkan.VkSubmitInfo; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class Queue { + + private final LogicalDevice device; + private final VkQueue queue; + private final int familyIndex, queueIndex; + + public Queue(LogicalDevice device, int familyIndex, int queueIndex) { + this.device = device; + this.familyIndex = familyIndex; + this.queueIndex = queueIndex; + try (MemoryStack stack = MemoryStack.stackPush()) { + queue = new VkQueue(VulkanUtils.getPointer(stack, + ptr -> vkGetDeviceQueue(device.getNativeObject(), familyIndex, queueIndex, ptr)), + device.getNativeObject()); + } + } + + public void submit(VkSubmitInfo.Buffer info) { + submit(info, null); + } + + public void submit(VkSubmitInfo.Buffer info, Fence fence) { + check(vkQueueSubmit(queue, info, fence != null ? fence.getNativeObject() : VK_NULL_HANDLE), + "Failed to submit to queue."); + } + + public void waitIdle() { + vkQueueWaitIdle(queue); + } + + public LogicalDevice getDevice() { + return device; + } + + public VkQueue getQueue() { + return queue; + } + + public int getFamilyIndex() { + return familyIndex; + } + + public int getQueueIndex() { + return queueIndex; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java new file mode 100644 index 0000000000..73948fe46f --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java @@ -0,0 +1,21 @@ +package com.jme3.vulkan; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkDeviceQueueCreateInfo; +import org.lwjgl.vulkan.VkQueueFamilyProperties; + +import java.nio.IntBuffer; + +public interface QueueFamilies { + + boolean populate(PhysicalDevice device, VkQueueFamilyProperties.Buffer properties); + + VkDeviceQueueCreateInfo.Buffer createLogicalBuffers(MemoryStack stack); + + void createQueues(LogicalDevice device); + + boolean isComplete(); + + IntBuffer getSwapchainConcurrentBuffers(MemoryStack stack); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java new file mode 100644 index 0000000000..cd2e4889e0 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java @@ -0,0 +1,73 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkClearValue; +import org.lwjgl.vulkan.VkRenderPassBeginInfo; +import org.lwjgl.vulkan.VkRenderPassCreateInfo; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class RenderPass implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private LongBuffer id = MemoryUtil.memAllocLong(1); + + public RenderPass(LogicalDevice device, VkRenderPassCreateInfo create) { + this.device = device; + check(vkCreateRenderPass(device.getNativeObject(), create, null, id), + "Failed to create render pass."); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id != null ? id.get(0) : null; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + vkDestroyRenderPass(device.getNativeObject(), id.get(0), null); + MemoryUtil.memFree(id); + }; + } + + @Override + public void prematureNativeDestruction() { + id = null; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public void begin(CommandBuffer cmd, FrameBuffer fbo) { + try (MemoryStack stack = MemoryStack.stackPush()) { + VkClearValue.Buffer clear = VkClearValue.calloc(1, stack); + clear.color().float32(stack.floats(0f, 0f, 0f, 1f)); + VkRenderPassBeginInfo begin = VkRenderPassBeginInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO) + .renderPass(id.get(0)) + .framebuffer(fbo.getNativeObject()) + .clearValueCount(clear.limit()) + .pClearValues(clear); + begin.renderArea().offset().set(0, 0); + begin.renderArea().extent().width(fbo.getWidth()).height(fbo.getHeight()); + vkCmdBeginRenderPass(cmd.getBuffer(), begin, VK_SUBPASS_CONTENTS_INLINE); + } + } + + public LogicalDevice getDevice() { + return device; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java new file mode 100644 index 0000000000..3be74d53bf --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java @@ -0,0 +1,76 @@ +package com.jme3.vulkan; + +import com.jme3.renderer.vulkan.VulkanUtils; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.Struct; +import org.lwjgl.vulkan.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +import static org.lwjgl.vulkan.VK10.*; + +public class RenderPassBuilder implements AutoCloseable { + + private final MemoryStack stack = MemoryStack.stackPush(); + private final List attachments = new ArrayList<>(); + private final List subpasses = new ArrayList<>(); + private final List dependencies = new ArrayList<>(); + + @Override + public void close() { + attachments.clear(); + subpasses.clear(); + dependencies.clear(); + stack.pop(); + } + + public RenderPass build(LogicalDevice device) { + VkAttachmentDescription.Buffer attBuf = VulkanUtils.accumulate(attachments, n -> VkAttachmentDescription.malloc(n, stack)); + VkSubpassDescription.Buffer subBuf = VulkanUtils.accumulate(subpasses, n -> VkSubpassDescription.malloc(n, stack)); + VkSubpassDependency.Buffer depBuf = VulkanUtils.accumulate(dependencies, n -> VkSubpassDependency.malloc(n, stack)); + VkRenderPassCreateInfo create = VkRenderPassCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO) + .pAttachments(attBuf) + .pSubpasses(subBuf) + .pDependencies(depBuf); + return new RenderPass(device, create); + } + + public int createAttachment(Consumer config) { + VkAttachmentDescription a = VkAttachmentDescription.calloc(stack); + config.accept(a); + return addAttachment(a); + } + + public int createSubpass(Consumer config) { + VkSubpassDescription s = VkSubpassDescription.calloc(stack); + config.accept(s); + return addSubpass(s); + } + + public VkSubpassDependency createDependency() { + return addDependency(VkSubpassDependency.calloc(stack)); + } + + public int addAttachment(VkAttachmentDescription attachment) { + attachments.add(attachment); + return attachments.size() - 1; + } + + public int addSubpass(VkSubpassDescription subpass) { + subpasses.add(subpass); + return subpasses.size() - 1; + } + + public VkSubpassDependency addDependency(VkSubpassDependency dependency) { + dependencies.add(dependency); + return dependency; + } + + public MemoryStack getStack() { + return stack; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java new file mode 100644 index 0000000000..932fddd4d3 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java @@ -0,0 +1,70 @@ +package com.jme3.vulkan; + +import com.jme3.material.RenderState.*; +import static org.lwjgl.vulkan.VK10.*; + +public class RenderStateToVulkan { + + private static RuntimeException unrecognized(Object state) { + return new UnsupportedOperationException("Unrecognized: " + state); + } + + public static int blendEquation(BlendEquation eq) { + switch (eq) { + case Add: return VK_BLEND_OP_ADD; + case Subtract: return VK_BLEND_OP_SUBTRACT; + case ReverseSubtract: return VK_BLEND_OP_REVERSE_SUBTRACT; + case Min: return VK_BLEND_OP_MIN; + case Max: return VK_BLEND_OP_MAX; + default: throw unrecognized(eq); + } + } + + public static int blendEquationAlpha(BlendEquationAlpha eqA, BlendEquation eq) { + switch (eqA) { + case InheritColor: return blendEquation(eq); + case Add: return VK_BLEND_OP_ADD; + case Subtract: return VK_BLEND_OP_SUBTRACT; + case ReverseSubtract: return VK_BLEND_OP_REVERSE_SUBTRACT; + case Min: return VK_BLEND_OP_MIN; + case Max: return VK_BLEND_OP_MAX; + default: throw unrecognized(eqA); + } + } + + public static int blendFunc(BlendFunc func) { + switch (func) { + case Zero: return VK_BLEND_FACTOR_ZERO; + case One: return VK_BLEND_FACTOR_ONE; + case Src_Color: return VK_BLEND_FACTOR_SRC_COLOR; + case One_Minus_Src_Color: return VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR; + case Dst_Color: return VK_BLEND_FACTOR_DST_COLOR; + case One_Minus_Dst_Color: return VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR; + case Src_Alpha: return VK_BLEND_FACTOR_SRC_ALPHA; + case One_Minus_Src_Alpha: return VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; + case Dst_Alpha: return VK_BLEND_FACTOR_DST_ALPHA; + case One_Minus_Dst_Alpha: return VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA; + case Src_Alpha_Saturate: return VK_BLEND_FACTOR_SRC_ALPHA_SATURATE; + default: throw unrecognized(func); + } + } + + public static int faceCull(FaceCullMode mode) { + switch (mode) { + case Off: return VK_CULL_MODE_NONE; + case Front: return VK_CULL_MODE_FRONT_BIT; + case Back: return VK_CULL_MODE_BACK_BIT; + case FrontAndBack: return VK_CULL_MODE_FRONT_AND_BACK; + default: throw unrecognized(mode); + } + } + + public static int wireframe(boolean wireframe, int def) { + return wireframe ? VK_POLYGON_MODE_LINE : def; + } + + public static int wireframe(boolean wireframe) { + return wireframe(wireframe, VK_POLYGON_MODE_FILL); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java new file mode 100644 index 0000000000..27488eb934 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java @@ -0,0 +1,60 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkSemaphoreCreateInfo; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class Semaphore implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private long id; + + public Semaphore(LogicalDevice device) { + this.device = device; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkSemaphoreCreateInfo create = VkSemaphoreCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO); + id = getLong(stack, ptr -> check(vkCreateSemaphore(device.getNativeObject(), create, null, ptr), + "Failed to create semaphore.")); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroySemaphore(device.getNativeObject(), nonNull(id), null); + } + + @Override + public void prematureNativeDestruction() { + id = MemoryUtil.NULL; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public long getId() { + return id; + } + + public LongBuffer toBuffer(MemoryStack stack) { + return stack.longs(id); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java new file mode 100644 index 0000000000..79d2c5d169 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java @@ -0,0 +1,58 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkShaderModuleCreateInfo; + +import java.nio.ByteBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class ShaderModule implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private final String entryPoint; + private long id; + + public ShaderModule(LogicalDevice device, ByteBuffer code, String entryPoint) { + this.device = device; + this.entryPoint = entryPoint; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkShaderModuleCreateInfo create = VkShaderModuleCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) + .pCode(code); + id = getLong(stack, ptr -> check(vkCreateShaderModule(device.getNativeObject(), create, null, ptr), + "Failed to create shader module.")); + } + ref = Native.get().register(this); + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyShaderModule(device.getNativeObject(), id, null); + } + + @Override + public void prematureNativeDestruction() { + id = MemoryUtil.NULL; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public String getEntryPoint() { + return entryPoint; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java new file mode 100644 index 0000000000..81fbf0f595 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java @@ -0,0 +1,70 @@ +package com.jme3.vulkan; + +import com.jme3.renderer.vulkan.VulkanUtils; +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.glfw.GLFWVulkan; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.KHRSurface; + +import java.nio.IntBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; + +public class Surface implements Native, DeviceEvaluator { + + private final VulkanInstance instance; + private final NativeReference ref; + private final long window; + private long id; + + public Surface(VulkanInstance instance, long window) { + this.instance = instance; + this.window = window; + try (MemoryStack stack = MemoryStack.stackPush()) { + id = getLong(stack, ptr -> check(GLFWVulkan.glfwCreateWindowSurface( + instance.getNativeObject(), window, null, ptr), + "Failed to create surface for GLFW window.")); + ref = Native.get().register(this); + instance.getNativeReference().addDependent(ref); + } + } + + @Override + public Float evaluateDevice(PhysicalDevice device) { + try (MemoryStack stack = MemoryStack.stackPush()) { + IntBuffer count = stack.mallocInt(1); + KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device.getDevice(), id, count, null); + if (count.get(0) == 0) { + return null; + } + KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device.getDevice(), id, count, null); + if (count.get(0) == 0) { + return null; + } + return 0f; + } + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> KHRSurface.vkDestroySurfaceKHR(instance.getNativeObject(), id, null); + } + + @Override + public void prematureNativeDestruction() { + id = MemoryUtil.NULL; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java new file mode 100644 index 0000000000..2184eb3973 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java @@ -0,0 +1,189 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.*; + +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.util.*; +import java.util.concurrent.TimeUnit; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class Swapchain implements Native { + + private final LogicalDevice device; + private final Surface surface; + private final NativeReference ref; + private final List images = new ArrayList<>(); + private final VkExtent2D extent; + private final int format; + private LongBuffer id = MemoryUtil.memAllocLong(1); + private VkSurfaceCapabilitiesKHR caps; + + public Swapchain(LogicalDevice device, Surface surface, SwapchainSupport support) { + assert support.isSupported() : "Swapchain for device is not supported."; + this.device = device; + this.surface = surface; + caps = VkSurfaceCapabilitiesKHR.create(); + KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( + device.getPhysicalDevice().getDevice(), surface.getNativeObject(), caps); + VkSurfaceFormatKHR fmt = support.selectFormat(); + try (MemoryStack stack = MemoryStack.stackPush()) { + format = fmt.format(); + extent = support.selectExtent(); + VkSwapchainCreateInfoKHR create = VkSwapchainCreateInfoKHR.calloc(stack) + .sType(KHRSwapchain.VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR) + .surface(surface.getNativeObject()) + .minImageCount(support.selectImageCount()) + .imageFormat(format) + .imageColorSpace(fmt.colorSpace()) + .imageExtent(extent) + .imageArrayLayers(1) + .imageUsage(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) + .preTransform(caps.currentTransform()) + .compositeAlpha(KHRSurface.VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) + .presentMode(support.selectMode()) + .clipped(true) + .oldSwapchain(VK_NULL_HANDLE); + IntBuffer concurrent = device.getPhysicalDevice().getQueueFamilies().getSwapchainConcurrentBuffers(stack); + if (concurrent != null) { + create.imageSharingMode(VK_SHARING_MODE_CONCURRENT) + .queueFamilyIndexCount(concurrent.limit()) + .pQueueFamilyIndices(concurrent); + } else { + create.imageSharingMode(VK_SHARING_MODE_EXCLUSIVE); + } + check(KHRSwapchain.vkCreateSwapchainKHR(device.getNativeObject(), create, null, id), + "Failed to create swapchain."); + LongBuffer imgs = enumerateBuffer(stack, stack::mallocLong, (c, b) -> + KHRSwapchain.vkGetSwapchainImagesKHR(device.getNativeObject(), id.get(0), c, b)); + Objects.requireNonNull(imgs, "Swapchain contains no images."); + for (int i = 0; i < imgs.limit(); i++) { + images.add(new SwapchainImage(device, imgs.get(i))); + } + } + fmt.close(); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + surface.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id != null ? id.get(0) : null; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + KHRSwapchain.vkDestroySwapchainKHR(device.getNativeObject(), id.get(0), null); + MemoryUtil.memFree(id); + caps.free(); + }; + } + + @Override + public void prematureNativeDestruction() { + id = null; + caps = null; + } + + @Override + public NativeReference getNativeReference() { + return null; + } + + public SwapchainImage acquireNextImage(Semaphore semaphore, Fence fence, long timeout) { + IntBuffer i = MemoryUtil.memAllocInt(1); + check(KHRSwapchain.vkAcquireNextImageKHR(device.getNativeObject(), id.get(0), + TimeUnit.MILLISECONDS.toNanos(timeout), Native.getId(semaphore), Native.getId(fence), i), + "Failed to acquire next swapchain image."); + SwapchainImage img = getImage(i.get(0)); + MemoryUtil.memFree(i); + return img; + } + + public void present(Queue presentQueue, SwapchainImage image, Semaphore wait) { + try (MemoryStack stack = MemoryStack.stackPush()) { + VkPresentInfoKHR info = VkPresentInfoKHR.calloc(stack) + .sType(KHRSwapchain.VK_STRUCTURE_TYPE_PRESENT_INFO_KHR) + .swapchainCount(1) + .pSwapchains(id) + .pImageIndices(stack.ints(images.indexOf(image))); + if (wait != null) { + info.pWaitSemaphores(stack.longs(wait.getNativeObject())); + } + check(KHRSwapchain.vkQueuePresentKHR(presentQueue.getQueue(), info)); + } + } + + public List createViews() { + List result = new ArrayList<>(images.size()); + for (SwapchainImage img : images) { + VkImageViewCreateInfo create = VkImageViewCreateInfo.create() + .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) + .image(img.getNativeObject()) + .viewType(VK_IMAGE_VIEW_TYPE_2D) + .format(format); + create.components().r(VK_COMPONENT_SWIZZLE_IDENTITY) + .g(VK_COMPONENT_SWIZZLE_IDENTITY) + .b(VK_COMPONENT_SWIZZLE_IDENTITY) + .a(VK_COMPONENT_SWIZZLE_IDENTITY); + create.subresourceRange().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + .baseMipLevel(0) + .levelCount(1) + .baseArrayLayer(0) + .layerCount(1); + result.add(new ImageView(img, create)); + create.free(); + } + return result; + } + + public LogicalDevice getDevice() { + return device; + } + + public Surface getSurface() { + return surface; + } + + public List getImages() { + return Collections.unmodifiableList(images); + } + + public SwapchainImage getImage(long id) { + return images.stream().filter(i -> i.getNativeObject() == id) + .findAny().orElseThrow(() -> new NoSuchElementException("Image not found.")); + } + + public VkExtent2D getExtent() { + return extent; + } + + public int getFormat() { + return format; + } + + public static class SwapchainImage extends Image { + + private SwapchainImage(LogicalDevice device, long id) { + super(device, id); + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + MemoryUtil.memFree(id); + MemoryUtil.memFree(memory); + }; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainSupport.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainSupport.java new file mode 100644 index 0000000000..33275aa453 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainSupport.java @@ -0,0 +1,18 @@ +package com.jme3.vulkan; + +import org.lwjgl.vulkan.VkExtent2D; +import org.lwjgl.vulkan.VkSurfaceFormatKHR; + +public interface SwapchainSupport { + + VkSurfaceFormatKHR selectFormat(); + + VkExtent2D selectExtent(); + + int selectMode(); + + int selectImageCount(); + + boolean isSupported(); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java new file mode 100644 index 0000000000..1f97c48591 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java @@ -0,0 +1,60 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkApplicationInfo; +import org.lwjgl.vulkan.VkInstance; +import org.lwjgl.vulkan.VkInstanceCreateInfo; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class VulkanInstance implements Native { + + private final NativeReference ref; + private VkInstance instance; + + public VulkanInstance(VkApplicationInfo appInfo, PointerBuffer extensions, PointerBuffer layers) { + try (MemoryStack stack = MemoryStack.stackPush()) { + VkInstanceCreateInfo create = VkInstanceCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO) + .pApplicationInfo(appInfo) + .ppEnabledExtensionNames(extensions); + if (layers != null) { + create.ppEnabledLayerNames(layers); + } + PointerBuffer ptr = stack.mallocPointer(1); + check(vkCreateInstance(create, null, ptr), "Failed to create instance."); + instance = new VkInstance(ptr.get(0), create); + } + ref = Native.get().register(this); + } + + public Surface createGlfwSurface(long window) { + return new Surface(this, window); + } + + @Override + public VkInstance getNativeObject() { + return instance; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyInstance(instance, null); + } + + @Override + public void prematureNativeDestruction() { + instance = null; + } + + @Override + public NativeReference getNativeReference() { + return ref; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java new file mode 100644 index 0000000000..b76424a749 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java @@ -0,0 +1,34 @@ +package com.jme3.vulkan; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.IntFunction; + +public class VulkanRenderManager { + + private final IntFunction frameFactory; + private final List frames = new ArrayList<>(); + private int currentFrame = 0; + + public VulkanRenderManager(int frames, IntFunction frameFactory) { + this.frameFactory = frameFactory; + setFrames(frames); + } + + public void render(float tpf) { + frames.get(currentFrame).run(); + if (++currentFrame >= frames.size()) { + currentFrame = 0; + } + } + + public void setFrames(int n) { + while (n > frames.size()) { + frames.add(frameFactory.apply(frames.size())); + } + while (n < frames.size()) { + frames.remove(frames.size() - 1); + } + } + +} diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl new file mode 100644 index 0000000000..13009da8fe --- /dev/null +++ b/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl @@ -0,0 +1,9 @@ +#version 450 + +layout(location = 0) in vec3 fragColor; + +layout(location = 0) out vec4 outColor; + +void main() { + outColor = vec4(fragColor, 1.0); +} \ No newline at end of file diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl new file mode 100644 index 0000000000..ad32c2cc70 --- /dev/null +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl @@ -0,0 +1,19 @@ +#version 450 + +vec2 positions[3] = vec2[] ( + vec2(0.0, -0.5), + vec2(0.5, 0.5), + vec2(-0.5, 0.5) +); +vec3 colors[3] = vec3[] ( + vec3(1.0, 0.0, 0.0), + vec3(0.0, 1.0, 0.0), + vec3(0.0, 0.0, 1.0) +); + +layout(location = 0) out vec3 fragColor; + +void main() { + gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0); + fragColor = colors[gl_VertexIndex]; +} \ No newline at end of file From 1b2ee3d938061933000089b6b76c7fc345498df3 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 26 Jul 2025 21:57:13 -0400 Subject: [PATCH 12/80] debug initial vulkan engine interface --- hs_err_pid76953.log | 1571 ---------------- hs_err_pid77449.log | 1426 --------------- hs_err_pid84545.log | 1595 ---------------- hs_err_pid84939.log | 1600 ----------------- hs_err_pid85302.log | 1596 ---------------- hs_err_pid85657.log | 1598 ---------------- .../jme3test/vulkan/VulkanHelperTest.java | 99 +- .../main/java/jme3test/vulkan/VulkanTest.java | 1 + .../java/com/jme3/vulkan/CommandBuffer.java | 36 +- .../java/com/jme3/vulkan/CommandPool.java | 27 +- .../java/com/jme3/vulkan/DeviceEvaluator.java | 24 +- .../main/java/com/jme3/vulkan/Extent2.java | 58 + .../src/main/java/com/jme3/vulkan/Fence.java | 8 + .../java/com/jme3/vulkan/FrameBuffer.java | 37 +- .../com/jme3/vulkan/GraphicsPipeline.java | 16 +- .../src/main/java/com/jme3/vulkan/Image.java | 117 +- .../main/java/com/jme3/vulkan/ImageView.java | 20 +- .../java/com/jme3/vulkan/InstanceBuilder.java | 4 + .../java/com/jme3/vulkan/LogicalDevice.java | 10 +- .../java/com/jme3/vulkan/PhysicalDevice.java | 24 +- .../java/com/jme3/vulkan/PipelineLayout.java | 26 +- .../main/java/com/jme3/vulkan/RenderPass.java | 21 +- .../main/java/com/jme3/vulkan/Surface.java | 2 + .../main/java/com/jme3/vulkan/Swapchain.java | 176 +- .../com/jme3/vulkan/SwapchainUpdater.java | 7 + .../resources/Shaders/VulkanVertTest.glsl | 14 +- 26 files changed, 379 insertions(+), 9734 deletions(-) delete mode 100644 hs_err_pid76953.log delete mode 100644 hs_err_pid77449.log delete mode 100644 hs_err_pid84545.log delete mode 100644 hs_err_pid84939.log delete mode 100644 hs_err_pid85302.log delete mode 100644 hs_err_pid85657.log create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Extent2.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainUpdater.java diff --git a/hs_err_pid76953.log b/hs_err_pid76953.log deleted file mode 100644 index ed37f27859..0000000000 --- a/hs_err_pid76953.log +++ /dev/null @@ -1,1571 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGSEGV (0xb) at pc=0x000078ab98a15645, pid=76953, tid=76987 -# -# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) -# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) -# Problematic frame: -# C [libjemalloc.so+0x15645] -# -# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.76953) -# -# 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: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanHelperTest - -Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS -Time: Wed Jul 2 22:32:45 2025 EDT elapsed time: 0.808817 seconds (0d 0h 0m 0s) - ---------------- T H R E A D --------------- - -Current thread (0x000078abc05a8d30): JavaThread "LwjglVulkanContext" [_thread_in_native, id=76987, stack(0x000078ab98100000,0x000078ab98200000) (1024K)] - -Stack: [0x000078ab98100000,0x000078ab98200000], sp=0x000078ab981fe350, free space=1016k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libjemalloc.so+0x15645] -Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) -j org.lwjgl.system.JNI.invokePV(JJ)V+0 -j org.lwjgl.system.jemalloc.JEmalloc.nje_free(J)V+6 -j org.lwjgl.system.jemalloc.JEmallocAllocator.free(J)V+1 -j org.lwjgl.system.MemoryUtil.nmemFree(J)V+4 -j org.lwjgl.system.Struct.free()V+4 -j com.jme3.vulkan.VulkanInstance.(Lorg/lwjgl/vulkan/VkApplicationInfo;Lorg/lwjgl/PointerBuffer;Lorg/lwjgl/PointerBuffer;)V+73 -j com.jme3.vulkan.InstanceBuilder.build()Lcom/jme3/vulkan/VulkanInstance;+16 -j jme3test.vulkan.VulkanHelperTest.simpleInitApp()V+52 -j com.jme3.app.SimpleApplication.initialize()V+282 -j com.jme3.system.vulkan.LwjglVulkanContext.engineInitialize()V+23 -j com.jme3.system.vulkan.LwjglVulkanContext.run()V+1 -j java.lang.Thread.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V+5 java.base@23.0.2 -j java.lang.Thread.run()V+19 java.base@23.0.2 -v ~StubRoutines::call_stub 0x000078abafd37c86 - -siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000002700 - -Registers: -RAX=0x0000000000002700, RBX=0x000078aaf0002510, RCX=0x000078ab98b71cf0, RDX=0x000078aaf00025d8 -RSP=0x000078ab981fe350, RBP=0x000078aaf0002420, RSI=0x000078aaf00026d8, RDI=0x000078aaf00026e8 -R8 =0x0000000000000001, R9 =0x000078aaf00026c8, R10=0x0000000000000001, R11=0x0000000000000000 -R12=0x000078abc04e00e0, R13=0x000078abc0000000, R14=0x000078aaf0002780, R15=0x000078abc05a8d30 -RIP=0x000078ab98a15645, EFLAGS=0x0000000000010206, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 - TRAPNO=0x000000000000000e - - -Register to memory mapping: - -RAX=0x0000000000002700 is an unknown value -RBX=0x000078aaf0002510 points into unknown readable memory: 0x0000000000000000 | 00 00 00 00 00 00 00 00 -RCX=0x000078ab98b71cf0: in /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so at 0x000078ab98a00000 -RDX=0x000078aaf00025d8 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 -RSP=0x000078ab981fe350 is pointing into the stack for thread: 0x000078abc05a8d30 -RBP=0x000078aaf0002420 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 -RSI=0x000078aaf00026d8 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 -RDI=0x000078aaf00026e8 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 -R8 =0x0000000000000001 is an unknown value -R9 =0x000078aaf00026c8 points into unknown readable memory: 0x000078abc0000000 | 00 00 00 c0 ab 78 00 00 -R10=0x0000000000000001 is an unknown value -R11=0x0 is null -R12=0x000078abc04e00e0 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 -R13=0x000078abc0000000 points into unknown readable memory: 0x000078abc0000030 | 30 00 00 c0 ab 78 00 00 -R14=0x000078aaf0002780 points into unknown readable memory: 0x000078aaf0002520 | 20 25 00 f0 aa 78 00 00 -R15=0x000078abc05a8d30 is a thread - -Top of Stack: (sp=0x000078ab981fe350) -0x000078ab981fe350: 000078aaf00025d8 000078ab430ac9b8 -0x000078ab981fe360: 0000000000000004 0000000000000000 -0x000078ab981fe370: 000078ab981fe390 000000000000000f -0x000078ab981fe380: 000078ab98a77fe0 000078abc0000000 -0x000078ab981fe390: 000078ab3852b1c8 000078ab981fe498 -0x000078ab981fe3a0: 000078abc05a8d30 000078abc915fd0c -0x000078ab981fe3b0: 000078ab981fe3c0 000078ab3852b1c8 -0x000078ab981fe3c0: 000078ab981fe460 0000000000000000 -0x000078ab981fe3d0: 000078ab3852b1c8 000078ab981fe498 -0x000078ab981fe3e0: 000078abc05a8d30 000078abafd43d7c -0x000078ab981fe3f0: 000078abc0475a48 000078ab424b05f0 -0x000078ab981fe400: 000078ab43011660 000078ab4301e4d8 -0x000078ab981fe410: 0000000000000000 fffffffffffffff7 -0x000078ab981fe420: 0000000000000000 0000000000000007 -0x000078ab981fe430: 000078ab38562f28 0000000000000000 -0x000078ab981fe440: 000000062a844740 000078ab3852b1c8 -0x000078ab981fe450: 0000000000000000 000078ab981fe480 -0x000078ab981fe460: 000078ab981fe4e8 000078abafd3f020 -0x000078ab981fe470: 000000062a844740 000078abafd411f7 -0x000078ab981fe480: 000078ab98a16160 0000000000000000 -0x000078ab981fe490: 000078abc04e00e0 0000000000000000 -0x000078ab981fe4a0: fffffffffffffff7 000078ab3850b486 -0x000078ab981fe4b0: 0000000000000005 000078ab385107a0 -0x000078ab981fe4c0: 0000000000000000 000000062aff01d0 -0x000078ab981fe4d0: 000078ab3850b4b0 fffffffffffffff3 -0x000078ab981fe4e0: 000078ab981fe508 000078ab981fe560 -0x000078ab981fe4f0: 000078abafd3f020 000078ab98a16160 -0x000078ab981fe500: 0000000000000000 000078abc04e00e0 -0x000078ab981fe510: 0000000000000000 fffffffffffffff7 -0x000078ab981fe520: 000078ab38508c71 0000000000000004 -0x000078ab981fe530: 000078ab385090b0 0000000000000000 -0x000078ab981fe540: 000000062afdf250 000078ab38508c98 - -Instructions: (pc=0x000078ab98a15645) -0x000078ab98a15545: 06 00 48 89 3c 24 48 89 ef 4c 89 44 24 10 e8 28 -0x000078ab98a15555: a7 ff ff 4c 8b 44 24 10 48 8b 3c 24 48 89 c3 e9 -0x000078ab98a15565: fb fb ff ff 4d 89 df e9 5d f6 ff ff b9 07 00 00 -0x000078ab98a15575: 00 48 c1 e1 3c 49 39 cc 77 37 4f 8d 34 24 41 ba -0x000078ab98a15585: 07 00 00 00 be 01 00 00 00 49 83 ee 01 49 0f bd -0x000078ab98a15595: c6 48 98 4c 39 d0 49 0f 42 c2 48 8d 48 fd 48 d3 -0x000078ab98a155a5: e6 4a 8d 54 26 ff 48 f7 de 48 21 f2 e9 c8 fe ff -0x000078ab98a155b5: ff 31 d2 e9 c1 fe ff ff 0f 1f 00 48 85 ff 0f 84 -0x000078ab98a155c5: 57 01 00 00 41 57 41 56 41 55 41 54 49 89 fc 55 -0x000078ab98a155d5: 53 48 83 ec 68 66 48 8d 3d fe 29 06 00 66 66 48 -0x000078ab98a155e5: e8 f6 2b ff ff 80 b8 38 03 00 00 00 48 89 c5 0f -0x000078ab98a155f5: 85 2e 01 00 00 4c 89 e3 4d 89 e5 4c 8d b5 60 03 -0x000078ab98a15605: 00 00 48 c1 eb 1a 49 81 e5 00 00 00 c0 48 8d 95 -0x000078ab98a15615: b8 01 00 00 81 e3 f0 00 00 00 48 01 eb 4c 8b 93 -0x000078ab98a15625: b8 01 00 00 4d 39 d5 0f 85 0e 03 00 00 4c 89 e0 -0x000078ab98a15635: 48 c1 e8 09 25 f8 ff 1f 00 48 03 83 c0 01 00 00 -0x000078ab98a15645: 4c 8b 10 4c 8d 3d 31 c4 26 00 4c 89 d0 48 c1 e8 -0x000078ab98a15655: 30 41 83 e2 01 89 c1 41 89 c1 4d 8b 3c cf 0f 84 -0x000078ab98a15665: 37 02 00 00 48 8d 3c 40 4c 8d 04 49 48 c1 e7 03 -0x000078ab98a15675: 4e 8d 6c c5 00 48 8d 5c 3d 00 48 8b b3 68 03 00 -0x000078ab98a15685: 00 66 41 39 b5 7a 03 00 00 0f 84 fc 02 00 00 4c -0x000078ab98a15695: 8d 5e f8 4c 89 9b 68 03 00 00 4c 89 66 f8 48 8b -0x000078ab98a156a5: 9d 50 03 00 00 4c 8b 45 20 4c 8d 4d 18 48 8d 55 -0x000078ab98a156b5: 20 66 49 0f 6e f1 66 48 0f 6e fa c6 44 24 30 00 -0x000078ab98a156c5: 4c 8d a5 50 03 00 00 48 8d bd 58 03 00 00 66 49 -0x000078ab98a156d5: 0f 6e ec 49 8d 34 1f 49 29 d8 66 4c 0f 6e c7 66 -0x000078ab98a156e5: 0f 6c ee 66 41 0f 6c f8 0f 11 6c 24 38 0f 11 7c -0x000078ab98a156f5: 24 48 48 89 b5 50 03 00 00 4d 39 c7 0f 83 81 01 -0x000078ab98a15705: 00 00 48 83 c4 68 5b 5d 41 5c 41 5d 41 5e 41 5f -0x000078ab98a15715: c3 66 2e 0f 1f 84 00 00 00 00 00 c3 0f 1f 80 00 -0x000078ab98a15725: 00 00 00 be 01 00 00 00 48 89 c7 e8 7b 8f 04 00 -0x000078ab98a15735: 80 b8 38 03 00 00 00 48 89 c5 0f 84 b5 fe ff ff - - -Stack slot to memory mapping: - -stack at sp + 0 slots: 0x000078aaf00025d8 points into unknown readable memory: 0x0000000000000001 | 01 00 00 00 00 00 00 00 -stack at sp + 1 slots: 0x000078ab430ac9b8 is a pointer to class: -org.lwjgl.vulkan.VkInstanceCreateInfo {0x000078ab430ac9b8} - - instance size: 3 - - klass size: 108 - - access: public synchronized - - flags: rewritten has_nonstatic_fields should_verify_class has_nonstatic_concrete_methods has_localvariable_table has_miranda_methods - - state: fully_initialized - - name: 'org/lwjgl/vulkan/VkInstanceCreateInfo' - - super: 'org/lwjgl/system/Struct' - - sub: - - arrays: null - - methods: Array(0x000078ab387e9640) - - method ordering: Array(0x000078ab426f1b90) - - default_methods: Array(0x000078ab387ed0c0) - - default vtable indices: Array(0x000078ab387ed0d0) - - local interfaces: Array(0x000078ab387e9630) - - trans. interfaces: Array(0x000078ab387ed028) - - secondary supers: Array(0x000078ab387ed0a0) - - hash_slot: 62 - - bitmap: 0x8a00000000000000 - - constants: constant pool [373] {0x000078ab387e8978} for 'org/lwjgl/vulkan/VkInstanceCreateInfo' cache=0x000078ab387ed8b0 - - class loader data: loader data: 0x000078abc01474b0 for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'{0x00000007ffd01490} - - source file: 'VkInstanceCreateInfo.java' - - generic signature: 'Lorg/lwjgl/system/Struct;Lorg/lwjgl/system/NativeResource;' - - inner classes: Array(0x000078ab387ed000) - - nest members: Array(0x000078ab42676730) - - permitted subclasses: Array(0x000078ab42676730) - - java mirror: a 'java/lang/Class'{0x0000000629d4a1e0} = 'org/lwjgl/vulkan/VkInstanceCreateInfo' - - vtable length 37 (start addr: 0x000078ab430acb88) - - itable length 12 (start addr: 0x000078ab430accb0) - - ---- static fields (5 words): - - public static final 'SIZEOF' 'I' @112 - - public static final 'ALIGNOF' 'I' @116 - - public static final 'STYPE' 'I' @120 - - public static final 'PNEXT' 'I' @124 - - public static final 'FLAGS' 'I' @128 - - public static final 'PAPPLICATIONINFO' 'I' @132 - - public static final 'ENABLEDLAYERCOUNT' 'I' @136 - - public static final 'PPENABLEDLAYERNAMES' 'I' @140 - - public static final 'ENABLEDEXTENSIONCOUNT' 'I' @144 - - public static final 'PPENABLEDEXTENSIONNAMES' 'I' @148 - - ---- non-static fields (3 words): - - protected 'address' 'J' @16 - - protected 'container' 'Ljava/nio/ByteBuffer;' @12 - - non-static oop maps: 12-12 -stack at sp + 2 slots: 0x0000000000000004 is an unknown value -stack at sp + 3 slots: 0x0 is null -stack at sp + 4 slots: 0x000078ab981fe390 is pointing into the stack for thread: 0x000078abc05a8d30 -stack at sp + 5 slots: 0x000000000000000f is an unknown value -stack at sp + 6 slots: 0x000078ab98a77fe0: in /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so at 0x000078ab98a00000 -stack at sp + 7 slots: 0x000078abc0000000 points into unknown readable memory: 0x000078abc0000030 | 30 00 00 c0 ab 78 00 00 - -Lock stack of current Java thread (top to bottom): - - ---------------- P R O C E S S --------------- - -Threads class SMR info: -_java_thread_list=0x000078aaf07641e0, length=14, elements={ -0x000078abc0137930, 0x000078abc0138ea0, 0x000078abc013a6b0, 0x000078abc013bcf0, -0x000078abc013d290, 0x000078abc013edb0, 0x000078abc01404c0, 0x000078abc014d1b0, -0x000078abc014fc90, 0x000078abc05a8d30, 0x000078abc002d0f0, 0x000078aaf05acb60, -0x000078ab084b7a10, 0x000078aaf0763530 -} - -Java Threads: ( => current thread ) - 0x000078abc0137930 JavaThread "Reference Handler" daemon [_thread_blocked, id=76967, stack(0x000078aba8700000,0x000078aba8800000) (1024K)] - 0x000078abc0138ea0 JavaThread "Finalizer" daemon [_thread_blocked, id=76968, stack(0x000078aba05fd000,0x000078aba06fd000) (1024K)] - 0x000078abc013a6b0 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=76969, stack(0x000078aba04fd000,0x000078aba05fd000) (1024K)] - 0x000078abc013bcf0 JavaThread "Service Thread" daemon [_thread_blocked, id=76970, stack(0x000078aba03fd000,0x000078aba04fd000) (1024K)] - 0x000078abc013d290 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=76971, stack(0x000078aba02fd000,0x000078aba03fd000) (1024K)] - 0x000078abc013edb0 JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=76972, stack(0x000078aba01fd000,0x000078aba02fd000) (1024K)] - 0x000078abc01404c0 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=76973, stack(0x000078aba00fd000,0x000078aba01fd000) (1024K)] - 0x000078abc014d1b0 JavaThread "Notification Thread" daemon [_thread_blocked, id=76974, stack(0x000078ab98f00000,0x000078ab99000000) (1024K)] - 0x000078abc014fc90 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=76975, stack(0x000078ab98e00000,0x000078ab98f00000) (1024K)] -=>0x000078abc05a8d30 JavaThread "LwjglVulkanContext" [_thread_in_native, id=76987, stack(0x000078ab98100000,0x000078ab98200000) (1024K)] - 0x000078abc002d0f0 JavaThread "DestroyJavaVM" [_thread_blocked, id=76959, stack(0x000078abc7700000,0x000078abc7800000) (1024K)] - 0x000078aaf05acb60 JavaThread "jME3 Audio Decoder" daemon [_thread_blocked, id=76998, stack(0x000078ab98d00000,0x000078ab98e00000) (1024K)] - 0x000078ab084b7a10 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=76999, stack(0x000078ab40d00000,0x000078ab40e00000) (1024K)] - 0x000078aaf0763530 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=77000, stack(0x000078ab40300000,0x000078ab40400000) (1024K)] -Total: 14 - -Other Threads: - 0x000078abc012e310 VMThread "VM Thread" [id=76966, stack(0x000078aba06fe000,0x000078aba07fe000) (1024K)] - 0x000078abc011c630 WatcherThread "VM Periodic Task Thread" [id=76965, stack(0x000078aba07ff000,0x000078aba08ff000) (1024K)] - 0x000078abc0058660 WorkerThread "GC Thread#0" [id=76960, stack(0x000078abc6ba1000,0x000078abc6ca1000) (1024K)] - 0x000078abc006d560 ConcurrentGCThread "G1 Main Marker" [id=76961, stack(0x000078abc4b00000,0x000078abc4c00000) (1024K)] - 0x000078abc006e500 WorkerThread "G1 Conc#0" [id=76962, stack(0x000078abc49ff000,0x000078abc4aff000) (1024K)] - 0x000078abc0101ec0 ConcurrentGCThread "G1 Refine#0" [id=76963, stack(0x000078abc40f6000,0x000078abc41f6000) (1024K)] - 0x000078abc0102e80 ConcurrentGCThread "G1 Service" [id=76964, stack(0x000078aba0900000,0x000078aba0a00000) (1024K)] -Total: 7 - -Threads with active compile tasks: -C2 CompilerThread0 813 1245 4 java.util.HashMap::putVal (300 bytes) -Total: 1 - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x000078ab42000000-0x000078ab42d91000-0x000078ab42d91000), size 14225408, SharedBaseAddress: 0x000078ab42000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x000078ab43000000-0x000078ab83000000, reserved size: 1073741824 -Narrow klass base: 0x000078ab42000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - CardTable entry size: 512 - Card Set container configuration: InlinePtr #cards 4 size 8 Array Of Cards #cards 32 size 80 Howl #buckets 8 coarsen threshold 7372 Howl Bitmap #cards 1024 size 144 coarsen threshold 921 Card regions per heap region 1 cards per card region 8192 - CPUs: 8 total, 8 available - Memory: 31999M - Large Page Support: Disabled - NUMA Support: Disabled - Compressed Oops: Enabled (Zero based) - Heap Region Size: 4M - Heap Min Capacity: 8M - Heap Initial Capacity: 500M - Heap Max Capacity: 8000M - Pre-touch: Disabled - Parallel Workers: 8 - Concurrent Workers: 2 - Concurrent Refinement Workers: 8 - Periodic GC: Disabled - -Heap: - garbage-first heap total reserved 8192000K, committed 516096K, used 17531K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 6 young (24576K), 0 survivors (0K) - Metaspace used 8549K, committed 8768K, reserved 1114112K - class space used 754K, committed 832K, reserved 1048576K - -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|0x000000060c000000, 0x000000060c000000, 0x000000060c400000| 0%| F| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 -| 1|0x000000060c400000, 0x000000060c400000, 0x000000060c800000| 0%| F| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 -| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 -| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 -| 4|0x000000060d000000, 0x000000060d000000, 0x000000060d400000| 0%| F| |TAMS 0x000000060d000000| PB 0x000000060d000000| Untracked | 0 -| 5|0x000000060d400000, 0x000000060d400000, 0x000000060d800000| 0%| F| |TAMS 0x000000060d400000| PB 0x000000060d400000| Untracked | 0 -| 6|0x000000060d800000, 0x000000060d800000, 0x000000060dc00000| 0%| F| |TAMS 0x000000060d800000| PB 0x000000060d800000| Untracked | 0 -| 7|0x000000060dc00000, 0x000000060dc00000, 0x000000060e000000| 0%| F| |TAMS 0x000000060dc00000| PB 0x000000060dc00000| Untracked | 0 -| 8|0x000000060e000000, 0x000000060e000000, 0x000000060e400000| 0%| F| |TAMS 0x000000060e000000| PB 0x000000060e000000| Untracked | 0 -| 9|0x000000060e400000, 0x000000060e400000, 0x000000060e800000| 0%| F| |TAMS 0x000000060e400000| PB 0x000000060e400000| Untracked | 0 -| 10|0x000000060e800000, 0x000000060e800000, 0x000000060ec00000| 0%| F| |TAMS 0x000000060e800000| PB 0x000000060e800000| Untracked | 0 -| 11|0x000000060ec00000, 0x000000060ec00000, 0x000000060f000000| 0%| F| |TAMS 0x000000060ec00000| PB 0x000000060ec00000| Untracked | 0 -| 12|0x000000060f000000, 0x000000060f000000, 0x000000060f400000| 0%| F| |TAMS 0x000000060f000000| PB 0x000000060f000000| Untracked | 0 -| 13|0x000000060f400000, 0x000000060f400000, 0x000000060f800000| 0%| F| |TAMS 0x000000060f400000| PB 0x000000060f400000| Untracked | 0 -| 14|0x000000060f800000, 0x000000060f800000, 0x000000060fc00000| 0%| F| |TAMS 0x000000060f800000| PB 0x000000060f800000| Untracked | 0 -| 15|0x000000060fc00000, 0x000000060fc00000, 0x0000000610000000| 0%| F| |TAMS 0x000000060fc00000| PB 0x000000060fc00000| Untracked | 0 -| 16|0x0000000610000000, 0x0000000610000000, 0x0000000610400000| 0%| F| |TAMS 0x0000000610000000| PB 0x0000000610000000| Untracked | 0 -| 17|0x0000000610400000, 0x0000000610400000, 0x0000000610800000| 0%| F| |TAMS 0x0000000610400000| PB 0x0000000610400000| Untracked | 0 -| 18|0x0000000610800000, 0x0000000610800000, 0x0000000610c00000| 0%| F| |TAMS 0x0000000610800000| PB 0x0000000610800000| Untracked | 0 -| 19|0x0000000610c00000, 0x0000000610c00000, 0x0000000611000000| 0%| F| |TAMS 0x0000000610c00000| PB 0x0000000610c00000| Untracked | 0 -| 20|0x0000000611000000, 0x0000000611000000, 0x0000000611400000| 0%| F| |TAMS 0x0000000611000000| PB 0x0000000611000000| Untracked | 0 -| 21|0x0000000611400000, 0x0000000611400000, 0x0000000611800000| 0%| F| |TAMS 0x0000000611400000| PB 0x0000000611400000| Untracked | 0 -| 22|0x0000000611800000, 0x0000000611800000, 0x0000000611c00000| 0%| F| |TAMS 0x0000000611800000| PB 0x0000000611800000| Untracked | 0 -| 23|0x0000000611c00000, 0x0000000611c00000, 0x0000000612000000| 0%| F| |TAMS 0x0000000611c00000| PB 0x0000000611c00000| Untracked | 0 -| 24|0x0000000612000000, 0x0000000612000000, 0x0000000612400000| 0%| F| |TAMS 0x0000000612000000| PB 0x0000000612000000| Untracked | 0 -| 25|0x0000000612400000, 0x0000000612400000, 0x0000000612800000| 0%| F| |TAMS 0x0000000612400000| PB 0x0000000612400000| Untracked | 0 -| 26|0x0000000612800000, 0x0000000612800000, 0x0000000612c00000| 0%| F| |TAMS 0x0000000612800000| PB 0x0000000612800000| Untracked | 0 -| 27|0x0000000612c00000, 0x0000000612c00000, 0x0000000613000000| 0%| F| |TAMS 0x0000000612c00000| PB 0x0000000612c00000| Untracked | 0 -| 28|0x0000000613000000, 0x0000000613000000, 0x0000000613400000| 0%| F| |TAMS 0x0000000613000000| PB 0x0000000613000000| Untracked | 0 -| 29|0x0000000613400000, 0x0000000613400000, 0x0000000613800000| 0%| F| |TAMS 0x0000000613400000| PB 0x0000000613400000| Untracked | 0 -| 30|0x0000000613800000, 0x0000000613800000, 0x0000000613c00000| 0%| F| |TAMS 0x0000000613800000| PB 0x0000000613800000| Untracked | 0 -| 31|0x0000000613c00000, 0x0000000613c00000, 0x0000000614000000| 0%| F| |TAMS 0x0000000613c00000| PB 0x0000000613c00000| Untracked | 0 -| 32|0x0000000614000000, 0x0000000614000000, 0x0000000614400000| 0%| F| |TAMS 0x0000000614000000| PB 0x0000000614000000| Untracked | 0 -| 33|0x0000000614400000, 0x0000000614400000, 0x0000000614800000| 0%| F| |TAMS 0x0000000614400000| PB 0x0000000614400000| Untracked | 0 -| 34|0x0000000614800000, 0x0000000614800000, 0x0000000614c00000| 0%| F| |TAMS 0x0000000614800000| PB 0x0000000614800000| Untracked | 0 -| 35|0x0000000614c00000, 0x0000000614c00000, 0x0000000615000000| 0%| F| |TAMS 0x0000000614c00000| PB 0x0000000614c00000| Untracked | 0 -| 36|0x0000000615000000, 0x0000000615000000, 0x0000000615400000| 0%| F| |TAMS 0x0000000615000000| PB 0x0000000615000000| Untracked | 0 -| 37|0x0000000615400000, 0x0000000615400000, 0x0000000615800000| 0%| F| |TAMS 0x0000000615400000| PB 0x0000000615400000| Untracked | 0 -| 38|0x0000000615800000, 0x0000000615800000, 0x0000000615c00000| 0%| F| |TAMS 0x0000000615800000| PB 0x0000000615800000| Untracked | 0 -| 39|0x0000000615c00000, 0x0000000615c00000, 0x0000000616000000| 0%| F| |TAMS 0x0000000615c00000| PB 0x0000000615c00000| Untracked | 0 -| 40|0x0000000616000000, 0x0000000616000000, 0x0000000616400000| 0%| F| |TAMS 0x0000000616000000| PB 0x0000000616000000| Untracked | 0 -| 41|0x0000000616400000, 0x0000000616400000, 0x0000000616800000| 0%| F| |TAMS 0x0000000616400000| PB 0x0000000616400000| Untracked | 0 -| 42|0x0000000616800000, 0x0000000616800000, 0x0000000616c00000| 0%| F| |TAMS 0x0000000616800000| PB 0x0000000616800000| Untracked | 0 -| 43|0x0000000616c00000, 0x0000000616c00000, 0x0000000617000000| 0%| F| |TAMS 0x0000000616c00000| PB 0x0000000616c00000| Untracked | 0 -| 44|0x0000000617000000, 0x0000000617000000, 0x0000000617400000| 0%| F| |TAMS 0x0000000617000000| PB 0x0000000617000000| Untracked | 0 -| 45|0x0000000617400000, 0x0000000617400000, 0x0000000617800000| 0%| F| |TAMS 0x0000000617400000| PB 0x0000000617400000| Untracked | 0 -| 46|0x0000000617800000, 0x0000000617800000, 0x0000000617c00000| 0%| F| |TAMS 0x0000000617800000| PB 0x0000000617800000| Untracked | 0 -| 47|0x0000000617c00000, 0x0000000617c00000, 0x0000000618000000| 0%| F| |TAMS 0x0000000617c00000| PB 0x0000000617c00000| Untracked | 0 -| 48|0x0000000618000000, 0x0000000618000000, 0x0000000618400000| 0%| F| |TAMS 0x0000000618000000| PB 0x0000000618000000| Untracked | 0 -| 49|0x0000000618400000, 0x0000000618400000, 0x0000000618800000| 0%| F| |TAMS 0x0000000618400000| PB 0x0000000618400000| Untracked | 0 -| 50|0x0000000618800000, 0x0000000618800000, 0x0000000618c00000| 0%| F| |TAMS 0x0000000618800000| PB 0x0000000618800000| Untracked | 0 -| 51|0x0000000618c00000, 0x0000000618c00000, 0x0000000619000000| 0%| F| |TAMS 0x0000000618c00000| PB 0x0000000618c00000| Untracked | 0 -| 52|0x0000000619000000, 0x0000000619000000, 0x0000000619400000| 0%| F| |TAMS 0x0000000619000000| PB 0x0000000619000000| Untracked | 0 -| 53|0x0000000619400000, 0x0000000619400000, 0x0000000619800000| 0%| F| |TAMS 0x0000000619400000| PB 0x0000000619400000| Untracked | 0 -| 54|0x0000000619800000, 0x0000000619800000, 0x0000000619c00000| 0%| F| |TAMS 0x0000000619800000| PB 0x0000000619800000| Untracked | 0 -| 55|0x0000000619c00000, 0x0000000619c00000, 0x000000061a000000| 0%| F| |TAMS 0x0000000619c00000| PB 0x0000000619c00000| Untracked | 0 -| 56|0x000000061a000000, 0x000000061a000000, 0x000000061a400000| 0%| F| |TAMS 0x000000061a000000| PB 0x000000061a000000| Untracked | 0 -| 57|0x000000061a400000, 0x000000061a400000, 0x000000061a800000| 0%| F| |TAMS 0x000000061a400000| PB 0x000000061a400000| Untracked | 0 -| 58|0x000000061a800000, 0x000000061a800000, 0x000000061ac00000| 0%| F| |TAMS 0x000000061a800000| PB 0x000000061a800000| Untracked | 0 -| 59|0x000000061ac00000, 0x000000061ac00000, 0x000000061b000000| 0%| F| |TAMS 0x000000061ac00000| PB 0x000000061ac00000| Untracked | 0 -| 60|0x000000061b000000, 0x000000061b000000, 0x000000061b400000| 0%| F| |TAMS 0x000000061b000000| PB 0x000000061b000000| Untracked | 0 -| 61|0x000000061b400000, 0x000000061b400000, 0x000000061b800000| 0%| F| |TAMS 0x000000061b400000| PB 0x000000061b400000| Untracked | 0 -| 62|0x000000061b800000, 0x000000061b800000, 0x000000061bc00000| 0%| F| |TAMS 0x000000061b800000| PB 0x000000061b800000| Untracked | 0 -| 63|0x000000061bc00000, 0x000000061bc00000, 0x000000061c000000| 0%| F| |TAMS 0x000000061bc00000| PB 0x000000061bc00000| Untracked | 0 -| 64|0x000000061c000000, 0x000000061c000000, 0x000000061c400000| 0%| F| |TAMS 0x000000061c000000| PB 0x000000061c000000| Untracked | 0 -| 65|0x000000061c400000, 0x000000061c400000, 0x000000061c800000| 0%| F| |TAMS 0x000000061c400000| PB 0x000000061c400000| Untracked | 0 -| 66|0x000000061c800000, 0x000000061c800000, 0x000000061cc00000| 0%| F| |TAMS 0x000000061c800000| PB 0x000000061c800000| Untracked | 0 -| 67|0x000000061cc00000, 0x000000061cc00000, 0x000000061d000000| 0%| F| |TAMS 0x000000061cc00000| PB 0x000000061cc00000| Untracked | 0 -| 68|0x000000061d000000, 0x000000061d000000, 0x000000061d400000| 0%| F| |TAMS 0x000000061d000000| PB 0x000000061d000000| Untracked | 0 -| 69|0x000000061d400000, 0x000000061d400000, 0x000000061d800000| 0%| F| |TAMS 0x000000061d400000| PB 0x000000061d400000| Untracked | 0 -| 70|0x000000061d800000, 0x000000061d800000, 0x000000061dc00000| 0%| F| |TAMS 0x000000061d800000| PB 0x000000061d800000| Untracked | 0 -| 71|0x000000061dc00000, 0x000000061dc00000, 0x000000061e000000| 0%| F| |TAMS 0x000000061dc00000| PB 0x000000061dc00000| Untracked | 0 -| 72|0x000000061e000000, 0x000000061e000000, 0x000000061e400000| 0%| F| |TAMS 0x000000061e000000| PB 0x000000061e000000| Untracked | 0 -| 73|0x000000061e400000, 0x000000061e400000, 0x000000061e800000| 0%| F| |TAMS 0x000000061e400000| PB 0x000000061e400000| Untracked | 0 -| 74|0x000000061e800000, 0x000000061e800000, 0x000000061ec00000| 0%| F| |TAMS 0x000000061e800000| PB 0x000000061e800000| Untracked | 0 -| 75|0x000000061ec00000, 0x000000061ec00000, 0x000000061f000000| 0%| F| |TAMS 0x000000061ec00000| PB 0x000000061ec00000| Untracked | 0 -| 76|0x000000061f000000, 0x000000061f000000, 0x000000061f400000| 0%| F| |TAMS 0x000000061f000000| PB 0x000000061f000000| Untracked | 0 -| 77|0x000000061f400000, 0x000000061f400000, 0x000000061f800000| 0%| F| |TAMS 0x000000061f400000| PB 0x000000061f400000| Untracked | 0 -| 78|0x000000061f800000, 0x000000061f800000, 0x000000061fc00000| 0%| F| |TAMS 0x000000061f800000| PB 0x000000061f800000| Untracked | 0 -| 79|0x000000061fc00000, 0x000000061fc00000, 0x0000000620000000| 0%| F| |TAMS 0x000000061fc00000| PB 0x000000061fc00000| Untracked | 0 -| 80|0x0000000620000000, 0x0000000620000000, 0x0000000620400000| 0%| F| |TAMS 0x0000000620000000| PB 0x0000000620000000| Untracked | 0 -| 81|0x0000000620400000, 0x0000000620400000, 0x0000000620800000| 0%| F| |TAMS 0x0000000620400000| PB 0x0000000620400000| Untracked | 0 -| 82|0x0000000620800000, 0x0000000620800000, 0x0000000620c00000| 0%| F| |TAMS 0x0000000620800000| PB 0x0000000620800000| Untracked | 0 -| 83|0x0000000620c00000, 0x0000000620c00000, 0x0000000621000000| 0%| F| |TAMS 0x0000000620c00000| PB 0x0000000620c00000| Untracked | 0 -| 84|0x0000000621000000, 0x0000000621000000, 0x0000000621400000| 0%| F| |TAMS 0x0000000621000000| PB 0x0000000621000000| Untracked | 0 -| 85|0x0000000621400000, 0x0000000621400000, 0x0000000621800000| 0%| F| |TAMS 0x0000000621400000| PB 0x0000000621400000| Untracked | 0 -| 86|0x0000000621800000, 0x0000000621800000, 0x0000000621c00000| 0%| F| |TAMS 0x0000000621800000| PB 0x0000000621800000| Untracked | 0 -| 87|0x0000000621c00000, 0x0000000621c00000, 0x0000000622000000| 0%| F| |TAMS 0x0000000621c00000| PB 0x0000000621c00000| Untracked | 0 -| 88|0x0000000622000000, 0x0000000622000000, 0x0000000622400000| 0%| F| |TAMS 0x0000000622000000| PB 0x0000000622000000| Untracked | 0 -| 89|0x0000000622400000, 0x0000000622400000, 0x0000000622800000| 0%| F| |TAMS 0x0000000622400000| PB 0x0000000622400000| Untracked | 0 -| 90|0x0000000622800000, 0x0000000622800000, 0x0000000622c00000| 0%| F| |TAMS 0x0000000622800000| PB 0x0000000622800000| Untracked | 0 -| 91|0x0000000622c00000, 0x0000000622c00000, 0x0000000623000000| 0%| F| |TAMS 0x0000000622c00000| PB 0x0000000622c00000| Untracked | 0 -| 92|0x0000000623000000, 0x0000000623000000, 0x0000000623400000| 0%| F| |TAMS 0x0000000623000000| PB 0x0000000623000000| Untracked | 0 -| 93|0x0000000623400000, 0x0000000623400000, 0x0000000623800000| 0%| F| |TAMS 0x0000000623400000| PB 0x0000000623400000| Untracked | 0 -| 94|0x0000000623800000, 0x0000000623800000, 0x0000000623c00000| 0%| F| |TAMS 0x0000000623800000| PB 0x0000000623800000| Untracked | 0 -| 95|0x0000000623c00000, 0x0000000623c00000, 0x0000000624000000| 0%| F| |TAMS 0x0000000623c00000| PB 0x0000000623c00000| Untracked | 0 -| 96|0x0000000624000000, 0x0000000624000000, 0x0000000624400000| 0%| F| |TAMS 0x0000000624000000| PB 0x0000000624000000| Untracked | 0 -| 97|0x0000000624400000, 0x0000000624400000, 0x0000000624800000| 0%| F| |TAMS 0x0000000624400000| PB 0x0000000624400000| Untracked | 0 -| 98|0x0000000624800000, 0x0000000624800000, 0x0000000624c00000| 0%| F| |TAMS 0x0000000624800000| PB 0x0000000624800000| Untracked | 0 -| 99|0x0000000624c00000, 0x0000000624c00000, 0x0000000625000000| 0%| F| |TAMS 0x0000000624c00000| PB 0x0000000624c00000| Untracked | 0 -| 100|0x0000000625000000, 0x0000000625000000, 0x0000000625400000| 0%| F| |TAMS 0x0000000625000000| PB 0x0000000625000000| Untracked | 0 -| 101|0x0000000625400000, 0x0000000625400000, 0x0000000625800000| 0%| F| |TAMS 0x0000000625400000| PB 0x0000000625400000| Untracked | 0 -| 102|0x0000000625800000, 0x0000000625800000, 0x0000000625c00000| 0%| F| |TAMS 0x0000000625800000| PB 0x0000000625800000| Untracked | 0 -| 103|0x0000000625c00000, 0x0000000625c00000, 0x0000000626000000| 0%| F| |TAMS 0x0000000625c00000| PB 0x0000000625c00000| Untracked | 0 -| 104|0x0000000626000000, 0x0000000626000000, 0x0000000626400000| 0%| F| |TAMS 0x0000000626000000| PB 0x0000000626000000| Untracked | 0 -| 105|0x0000000626400000, 0x0000000626400000, 0x0000000626800000| 0%| F| |TAMS 0x0000000626400000| PB 0x0000000626400000| Untracked | 0 -| 106|0x0000000626800000, 0x0000000626800000, 0x0000000626c00000| 0%| F| |TAMS 0x0000000626800000| PB 0x0000000626800000| Untracked | 0 -| 107|0x0000000626c00000, 0x0000000626c00000, 0x0000000627000000| 0%| F| |TAMS 0x0000000626c00000| PB 0x0000000626c00000| Untracked | 0 -| 108|0x0000000627000000, 0x0000000627000000, 0x0000000627400000| 0%| F| |TAMS 0x0000000627000000| PB 0x0000000627000000| Untracked | 0 -| 109|0x0000000627400000, 0x0000000627400000, 0x0000000627800000| 0%| F| |TAMS 0x0000000627400000| PB 0x0000000627400000| Untracked | 0 -| 110|0x0000000627800000, 0x0000000627800000, 0x0000000627c00000| 0%| F| |TAMS 0x0000000627800000| PB 0x0000000627800000| Untracked | 0 -| 111|0x0000000627c00000, 0x0000000627c00000, 0x0000000628000000| 0%| F| |TAMS 0x0000000627c00000| PB 0x0000000627c00000| Untracked | 0 -| 112|0x0000000628000000, 0x0000000628000000, 0x0000000628400000| 0%| F| |TAMS 0x0000000628000000| PB 0x0000000628000000| Untracked | 0 -| 113|0x0000000628400000, 0x0000000628400000, 0x0000000628800000| 0%| F| |TAMS 0x0000000628400000| PB 0x0000000628400000| Untracked | 0 -| 114|0x0000000628800000, 0x0000000628800000, 0x0000000628c00000| 0%| F| |TAMS 0x0000000628800000| PB 0x0000000628800000| Untracked | 0 -| 115|0x0000000628c00000, 0x0000000628c00000, 0x0000000629000000| 0%| F| |TAMS 0x0000000628c00000| PB 0x0000000628c00000| Untracked | 0 -| 116|0x0000000629000000, 0x0000000629000000, 0x0000000629400000| 0%| F| |TAMS 0x0000000629000000| PB 0x0000000629000000| Untracked | 0 -| 117|0x0000000629400000, 0x0000000629400000, 0x0000000629800000| 0%| F| |TAMS 0x0000000629400000| PB 0x0000000629400000| Untracked | 0 -| 118|0x0000000629800000, 0x0000000629800000, 0x0000000629c00000| 0%| F| |TAMS 0x0000000629800000| PB 0x0000000629800000| Untracked | 0 -| 119|0x0000000629c00000, 0x0000000629e0f148, 0x000000062a000000| 51%| E| |TAMS 0x0000000629c00000| PB 0x0000000629c00000| Complete | 0 -| 120|0x000000062a000000, 0x000000062a400000, 0x000000062a400000|100%| E|CS|TAMS 0x000000062a000000| PB 0x000000062a000000| Complete | 0 -| 121|0x000000062a400000, 0x000000062a800000, 0x000000062a800000|100%| E| |TAMS 0x000000062a400000| PB 0x000000062a400000| Complete | 0 -| 122|0x000000062a800000, 0x000000062ac00000, 0x000000062ac00000|100%| E|CS|TAMS 0x000000062a800000| PB 0x000000062a800000| Complete | 0 -| 123|0x000000062ac00000, 0x000000062b000000, 0x000000062b000000|100%| E|CS|TAMS 0x000000062ac00000| PB 0x000000062ac00000| Complete | 0 -| 124|0x000000062b000000, 0x000000062b400000, 0x000000062b400000|100%| E|CS|TAMS 0x000000062b000000| PB 0x000000062b000000| Complete | 0 -|1999|0x00000007ffc00000, 0x00000007ffd1ec18, 0x0000000800000000| 28%| O| |TAMS 0x00000007ffc00000| PB 0x00000007ffc00000| Untracked | 0 - -Card table byte_map: [0x000078abc4c00000,0x000078abc5ba0000] _byte_map_base: 0x000078abc1ba0000 - -Marking Bits: (CMBitMap*) 0x000078abc0059190 - Bits: [0x000078aba0a00000, 0x000078aba8700000) - -Polling page: 0x000078abc9130000 - -Metaspace: - -Usage: - Non-class: 7.61 MB used. - Class: 754.40 KB used. - Both: 8.35 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 7.75 MB ( 12%) committed, 1 nodes. - Class space: 1.00 GB reserved, 832.00 KB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 8.56 MB ( <1%) committed. - -Chunk freelists: - Non-Class: 7.98 MB - Class: 15.06 MB - Both: 23.05 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. - - use_allocation_guard: 0. - - -Internal statistics: - -num_allocs_failed_limit: 0. -num_arena_births: 142. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 137. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 0. -num_chunks_taken_from_freelist: 355. -num_chunk_merges: 0. -num_chunk_splits: 242. -num_chunks_enlarged: 165. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=120032Kb used=387Kb max_used=387Kb free=119645Kb - bounds [0x000078abb02c8000, 0x000078abb0538000, 0x000078abb7800000] -CodeHeap 'profiled nmethods': size=120028Kb used=1638Kb max_used=1638Kb free=118389Kb - bounds [0x000078aba8800000, 0x000078aba8a70000, 0x000078abafd37000] -CodeHeap 'non-nmethods': size=5700Kb used=2151Kb max_used=2169Kb free=3548Kb - bounds [0x000078abafd37000, 0x000078abaffa7000, 0x000078abb02c8000] -CodeCache: size=245760Kb, used=4176Kb, max_used=4194Kb, free=241582Kb - total_blobs=2418, nmethods=1248, adapters=1077, full_count=0 -Compilation: enabled, stopped_count=0, restarted_count=0 - -Compilation events (20 events): -Event: 0.803 Thread 0x000078abc01404c0 1235 3 java.lang.invoke.DirectMethodHandle::preparedLambdaForm (244 bytes) -Event: 0.804 Thread 0x000078abc01404c0 nmethod 1235 0x000078aba8994508 code [0x000078aba8994780, 0x000078aba8995630] -Event: 0.807 Thread 0x000078abc01404c0 1236 3 org.lwjgl.system.Checks::check (16 bytes) -Event: 0.807 Thread 0x000078abc01404c0 nmethod 1236 0x000078aba8995708 code [0x000078aba8995840, 0x000078aba8995a28] -Event: 0.807 Thread 0x000078abc01404c0 1237 3 sun.misc.Unsafe::getByte (12 bytes) -Event: 0.807 Thread 0x000078abc01404c0 nmethod 1237 0x000078aba8995a88 code [0x000078aba8995ba0, 0x000078aba8995d18] -Event: 0.807 Thread 0x000078abc01404c0 1238 ! 3 jdk.internal.misc.ScopedMemoryAccess::copyMemory (27 bytes) -Event: 0.807 Thread 0x000078abc01404c0 nmethod 1238 0x000078aba8995d88 code [0x000078aba8995f20, 0x000078aba8996530] -Event: 0.807 Thread 0x000078abc01404c0 1239 ! 3 jdk.internal.misc.ScopedMemoryAccess::copyMemoryInternal (56 bytes) -Event: 0.808 Thread 0x000078abc01404c0 nmethod 1239 0x000078aba8996588 code [0x000078aba8996700, 0x000078aba8996c20] -Event: 0.808 Thread 0x000078abc01404c0 1240 3 java.lang.ThreadLocal$ThreadLocalMap::nextIndex (15 bytes) -Event: 0.808 Thread 0x000078abc01404c0 nmethod 1240 0x000078aba8996c88 code [0x000078aba8996da0, 0x000078aba8996ed0] -Event: 0.808 Thread 0x000078abc01404c0 1241 3 org.lwjgl.system.Struct:: (11 bytes) -Event: 0.808 Thread 0x000078abc013edb0 1245 4 java.util.HashMap::putVal (300 bytes) -Event: 0.808 Thread 0x000078abc01404c0 nmethod 1241 0x000078aba8996f88 code [0x000078aba89970c0, 0x000078aba8997400] -Event: 0.808 Thread 0x000078abc01404c0 1244 3 org.lwjgl.system.MemoryUtil::strlen64NT1 (119 bytes) -Event: 0.808 Thread 0x000078abc01404c0 nmethod 1244 0x000078aba8997488 code [0x000078aba8997640, 0x000078aba8997ec0] -Event: 0.808 Thread 0x000078abc01404c0 1247 3 java.lang.ThreadLocal$ThreadLocalMap::getEntryAfterMiss (59 bytes) -Event: 0.808 Thread 0x000078abc01404c0 nmethod 1247 0x000078aba8997f08 code [0x000078aba8998080, 0x000078aba8998668] -Event: 0.808 Thread 0x000078abc01404c0 1242 3 org.lwjgl.system.StructBuffer::get (36 bytes) - -GC Heap History (0 events): -No events - -Dll operation events (10 events): -Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -Event: 0.016 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -Event: 0.016 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -Event: 0.024 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -Event: 0.027 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -Event: 0.067 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -Event: 0.117 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -Event: 0.122 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -Event: 0.387 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -Event: 0.390 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so - -Deoptimization events (20 events): -Event: 0.703 Thread 0x000078abc05a8d30 Uncommon trap: trap_request=0xffffff45 fr.pc=0x000078abb0306f5c relative=0x000000000000015c -Event: 0.703 Thread 0x000078abc05a8d30 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000078abb0306f5c method=java.util.concurrent.locks.ReentrantLock$NonfairSync.initialTryLock()Z @ 10 c2 -Event: 0.703 Thread 0x000078abc05a8d30 DEOPT PACKING pc=0x000078abb0306f5c sp=0x000078ab981fdec0 -Event: 0.703 Thread 0x000078abc05a8d30 DEOPT UNPACKING pc=0x000078abafd8abf9 sp=0x000078ab981fde68 mode 2 -Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: trap_request=0xffffffde fr.pc=0x000078abb03051cc relative=0x00000000000014cc -Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000078abb03051cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 -Event: 0.746 Thread 0x000078abc05a8d30 DEOPT PACKING pc=0x000078abb03051cc sp=0x000078ab981fdc40 -Event: 0.746 Thread 0x000078abc05a8d30 DEOPT UNPACKING pc=0x000078abafd8abf9 sp=0x000078ab981fdb40 mode 2 -Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: trap_request=0xffffffde fr.pc=0x000078abb03051cc relative=0x00000000000014cc -Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000078abb03051cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 -Event: 0.746 Thread 0x000078abc05a8d30 DEOPT PACKING pc=0x000078abb03051cc sp=0x000078ab981fdc40 -Event: 0.746 Thread 0x000078abc05a8d30 DEOPT UNPACKING pc=0x000078abafd8abf9 sp=0x000078ab981fdb40 mode 2 -Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: trap_request=0xffffffde fr.pc=0x000078abb03051cc relative=0x00000000000014cc -Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000078abb03051cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 -Event: 0.746 Thread 0x000078abc05a8d30 DEOPT PACKING pc=0x000078abb03051cc sp=0x000078ab981fdc40 -Event: 0.746 Thread 0x000078abc05a8d30 DEOPT UNPACKING pc=0x000078abafd8abf9 sp=0x000078ab981fdb40 mode 2 -Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: trap_request=0xffffffde fr.pc=0x000078abb03051cc relative=0x00000000000014cc -Event: 0.746 Thread 0x000078abc05a8d30 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000078abb03051cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 -Event: 0.746 Thread 0x000078abc05a8d30 DEOPT PACKING pc=0x000078abb03051cc sp=0x000078ab981fdc40 -Event: 0.746 Thread 0x000078abc05a8d30 DEOPT UNPACKING pc=0x000078abafd8abf9 sp=0x000078ab981fdb40 mode 2 - -Classes loaded (20 events): -Event: 0.745 Loading class java/awt/image/WritableRenderedImage done -Event: 0.745 Loading class java/awt/Image -Event: 0.745 Loading class java/awt/Image done -Event: 0.745 Loading class java/awt/image/BufferedImage done -Event: 0.745 Loading class java/awt/ImageCapabilities -Event: 0.745 Loading class java/awt/ImageCapabilities done -Event: 0.745 Loading class java/awt/Image$1 -Event: 0.745 Loading class sun/awt/image/SurfaceManager$ImageAccessor -Event: 0.745 Loading class sun/awt/image/SurfaceManager$ImageAccessor done -Event: 0.745 Loading class java/awt/Image$1 done -Event: 0.745 Loading class sun/awt/image/SurfaceManager -Event: 0.745 Loading class sun/awt/image/SurfaceManager done -Event: 0.745 Loading class java/awt/image/BufferedImage$1 -Event: 0.745 Loading class java/awt/image/BufferedImage$1 done -Event: 0.745 Loading class sun/awt/image/IntegerComponentRaster -Event: 0.745 Loading class sun/awt/image/IntegerComponentRaster done -Event: 0.745 Loading class java/awt/image/IndexColorModel -Event: 0.745 Loading class java/awt/image/IndexColorModel done -Event: 0.745 Loading class sun/awt/image/ShortComponentRaster -Event: 0.745 Loading class sun/awt/image/ShortComponentRaster done - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (20 events): -Event: 0.108 Thread 0x000078abc002d0f0 Exception (0x000000062ae524c0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.109 Thread 0x000078abc002d0f0 Exception (0x000000062ae5dc50) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.109 Thread 0x000078abc002d0f0 Exception (0x000000062ae61b38) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.112 Thread 0x000078abc002d0f0 Exception (0x000000062ae7bf30) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.163 Thread 0x000078abc002d0f0 Exception (0x000000062af599d0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.163 Thread 0x000078abc002d0f0 Exception (0x000000062af5eb08) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.165 Thread 0x000078abc002d0f0 Exception (0x000000062af70568) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.166 Thread 0x000078abc002d0f0 Exception (0x000000062af76038) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.166 Thread 0x000078abc002d0f0 Exception (0x000000062af7a408) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.167 Thread 0x000078abc002d0f0 Exception (0x000000062af81660) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.227 Thread 0x000078abc002d0f0 Exception (0x000000062a929cf8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.237 Thread 0x000078abc002d0f0 Exception (0x000000062a981740) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 0.246 Thread 0x000078abc002d0f0 Exception (0x000000062a9ec330) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.248 Thread 0x000078abc002d0f0 Exception (0x000000062a9fa148) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.399 Thread 0x000078abc05a8d30 Exception (0x000000062a5b9fe8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.399 Thread 0x000078abc05a8d30 Exception (0x000000062a5bd538) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] -Event: 0.672 Thread 0x000078abc05a8d30 Exception (0x000000062a763a50) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.730 Thread 0x000078abc05a8d30 Exception (0x000000062a173530) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 0.731 Thread 0x000078abc05a8d30 Exception (0x000000062a179508) -thrown [open/src/hotspot/share/prims/jni.cpp, line 520] -Event: 0.735 Thread 0x000078abc05a8d30 Exception (0x000000062a1a4298) -thrown [open/src/hotspot/share/prims/jni.cpp, line 520] - -VM Operations (14 events): -Event: 0.099 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.099 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.107 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.107 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.119 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.119 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.129 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.130 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.404 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.404 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.687 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.687 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.728 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.728 Executing VM operation: HandshakeAllThreads (Deoptimize) done - -Memory protections (16 events): -Event: 0.001 Protecting memory [0x000078abc7700000,0x000078abc7704000] with protection modes 0 -Event: 0.015 Protecting memory [0x000078aba8700000,0x000078aba8704000] with protection modes 0 -Event: 0.015 Protecting memory [0x000078aba05fd000,0x000078aba0601000] with protection modes 0 -Event: 0.015 Protecting memory [0x000078aba04fd000,0x000078aba0501000] with protection modes 0 -Event: 0.015 Protecting memory [0x000078aba03fd000,0x000078aba0401000] with protection modes 0 -Event: 0.015 Protecting memory [0x000078aba02fd000,0x000078aba0301000] with protection modes 0 -Event: 0.015 Protecting memory [0x000078aba01fd000,0x000078aba0201000] with protection modes 0 -Event: 0.015 Protecting memory [0x000078aba00fd000,0x000078aba0101000] with protection modes 0 -Event: 0.021 Protecting memory [0x000078ab98f00000,0x000078ab98f04000] with protection modes 0 -Event: 0.022 Protecting memory [0x000078ab98e00000,0x000078ab98e04000] with protection modes 0 -Event: 0.163 Protecting memory [0x000078ab98d00000,0x000078ab98d04000] with protection modes 0 -Event: 0.252 Protecting memory [0x000078ab98100000,0x000078ab98104000] with protection modes 0 -Event: 0.252 Protecting memory [0x000078abc7700000,0x000078abc7704000] with protection modes 0 -Event: 0.697 Protecting memory [0x000078ab98d00000,0x000078ab98d04000] with protection modes 0 -Event: 0.705 Protecting memory [0x000078ab40d00000,0x000078ab40d04000] with protection modes 0 -Event: 0.742 Protecting memory [0x000078ab40300000,0x000078ab40304000] with protection modes 0 - -Nmethod flushes (0 events): -No events - -Events (18 events): -Event: 0.010 Thread 0x000078abc002d0f0 Thread added: 0x000078abc002d0f0 -Event: 0.014 Thread 0x000078abc002d0f0 Thread added: 0x000078abc0137930 -Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc0138ea0 -Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc013a6b0 -Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc013bcf0 -Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc013d290 -Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc013edb0 -Event: 0.015 Thread 0x000078abc002d0f0 Thread added: 0x000078abc01404c0 -Event: 0.021 Thread 0x000078abc002d0f0 Thread added: 0x000078abc014d1b0 -Event: 0.022 Thread 0x000078abc002d0f0 Thread added: 0x000078abc014fc90 -Event: 0.163 Thread 0x000078abc01404c0 Thread added: 0x000078ab0815bc30 -Event: 0.252 Thread 0x000078abc002d0f0 Thread added: 0x000078abc05a8d30 -Event: 0.252 Thread 0x000078abc002d0f0 Thread exited: 0x000078abc002d0f0 -Event: 0.252 Thread 0x000078abc002d0f0 Thread added: 0x000078abc002d0f0 -Event: 0.672 Thread 0x000078ab0815bc30 Thread exited: 0x000078ab0815bc30 -Event: 0.697 Thread 0x000078abc05a8d30 Thread added: 0x000078aaf05acb60 -Event: 0.705 Thread 0x000078abc01404c0 Thread added: 0x000078ab084b7a10 -Event: 0.741 Thread 0x000078abc05a8d30 Thread added: 0x000078aaf0763530 - - -Dynamic libraries: -60c000000-62b400000 rw-p 00000000 00:00 0 -62b400000-7ffc00000 ---p 00000000 00:00 0 -7ffc00000-7ffd1f000 rw-p 00dc0000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa -7ffd1f000-800000000 rw-p 00000000 00:00 0 -649e5204b000-649e5204c000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -649e5204d000-649e5204e000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -649e5204e000-649e5204f000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -649e57a11000-649e57a5a000 rw-p 00000000 00:00 0 [heap] -78aab8000000-78aab8021000 rw-p 00000000 00:00 0 -78aab8021000-78aabc000000 ---p 00000000 00:00 0 -78aabc000000-78aabc021000 rw-p 00000000 00:00 0 -78aabc021000-78aac0000000 ---p 00000000 00:00 0 -78aac4000000-78aac4034000 rw-p 00000000 00:00 0 -78aac4034000-78aac8000000 ---p 00000000 00:00 0 -78aac8000000-78aac8021000 rw-p 00000000 00:00 0 -78aac8021000-78aacc000000 ---p 00000000 00:00 0 -78aad0000000-78aad00c8000 rw-p 00000000 00:00 0 -78aad00c8000-78aad4000000 ---p 00000000 00:00 0 -78aad4000000-78aad4021000 rw-p 00000000 00:00 0 -78aad4021000-78aad8000000 ---p 00000000 00:00 0 -78aadc000000-78aadc021000 rw-p 00000000 00:00 0 -78aadc021000-78aae0000000 ---p 00000000 00:00 0 -78aae1000000-78aae7712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -78aae7712000-78aae7f30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -78aae7f30000-78aae7f76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -78aae7f76000-78aae7ff2000 rw-p 00000000 00:00 0 -78aae8000000-78aae8021000 rw-p 00000000 00:00 0 -78aae8021000-78aaec000000 ---p 00000000 00:00 0 -78aaf0000000-78aaf0f2e000 rw-p 00000000 00:00 0 -78aaf0f2e000-78aaf4000000 ---p 00000000 00:00 0 -78aaf4000000-78aaf41d4000 rw-p 00000000 00:00 0 -78aaf41d4000-78aaf8000000 ---p 00000000 00:00 0 -78aafc000000-78aafc021000 rw-p 00000000 00:00 0 -78aafc021000-78ab00000000 ---p 00000000 00:00 0 -78ab00000000-78ab00021000 rw-p 00000000 00:00 0 -78ab00021000-78ab04000000 ---p 00000000 00:00 0 -78ab08000000-78ab084d8000 rw-p 00000000 00:00 0 -78ab084d8000-78ab0c000000 ---p 00000000 00:00 0 -78ab0c000000-78ab0c327000 rw-p 00000000 00:00 0 -78ab0c327000-78ab10000000 ---p 00000000 00:00 0 -78ab12000000-78ab12cf5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -78ab12cf5000-78ab136d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -78ab136d8000-78ab13ae9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -78ab13ae9000-78ab13f6b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -78ab13f6b000-78ab13f73000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -78ab13f73000-78ab13f7e000 rw-p 00000000 00:00 0 -78ab14000000-78ab14021000 rw-p 00000000 00:00 0 -78ab14021000-78ab18000000 ---p 00000000 00:00 0 -78ab18000000-78ab18021000 rw-p 00000000 00:00 0 -78ab18021000-78ab1c000000 ---p 00000000 00:00 0 -78ab1c400000-78ab1c401000 ---p 00000000 00:00 0 -78ab1c401000-78ab1cc01000 rw-p 00000000 00:00 0 -78ab1ce00000-78ab1ce2f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -78ab1ce2f000-78ab1d502000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -78ab1d502000-78ab1d624000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -78ab1d624000-78ab1d635000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -78ab1d635000-78ab1d6b3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -78ab1d6b3000-78ab1d6c7000 rw-p 00000000 00:00 0 -78ab1d800000-78ab1d801000 ---p 00000000 00:00 0 -78ab1d801000-78ab1e001000 rw-p 00000000 00:00 0 -78ab1e200000-78ab1e201000 ---p 00000000 00:00 0 -78ab1e201000-78ab1ea01000 rw-p 00000000 00:00 0 -78ab1ec00000-78ab1ec01000 ---p 00000000 00:00 0 -78ab1ec01000-78ab1f401000 rw-p 00000000 00:00 0 -78ab1f600000-78ab1f601000 ---p 00000000 00:00 0 -78ab1f601000-78ab1fe01000 rw-p 00000000 00:00 0 -78ab20000000-78ab20021000 rw-p 00000000 00:00 0 -78ab20021000-78ab24000000 ---p 00000000 00:00 0 -78ab24000000-78ab24021000 rw-p 00000000 00:00 0 -78ab24021000-78ab28000000 ---p 00000000 00:00 0 -78ab28400000-78ab28422000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -78ab28422000-78ab28621000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -78ab28621000-78ab28629000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -78ab28629000-78ab2862a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -78ab2862a000-78ab2862b000 rw-p 00000000 00:00 0 -78ab28a00000-78ab28a01000 ---p 00000000 00:00 0 -78ab28a01000-78ab29201000 rw-p 00000000 00:00 0 -78ab29400000-78ab29401000 ---p 00000000 00:00 0 -78ab29401000-78ab29c01000 rw-p 00000000 00:00 0 -78ab29e00000-78ab29e16000 r--p 00000000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -78ab29e16000-78ab29f06000 r-xp 00016000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -78ab29f06000-78ab29f79000 r--p 00106000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -78ab29f79000-78ab29f80000 r--p 00178000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -78ab29f80000-78ab29f87000 rw-p 0017f000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -78ab29f87000-78ab2a002000 rw-p 00000000 00:00 0 -78ab2a200000-78ab2a201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -78ab2a201000-78ab2a202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -78ab2a202000-78ab2be1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -78ab2be1c000-78ab2be1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -78ab2be1d000-78ab2be1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -78ab2c000000-78ab2c021000 rw-p 00000000 00:00 0 -78ab2c021000-78ab30000000 ---p 00000000 00:00 0 -78ab30000000-78ab30021000 rw-p 00000000 00:00 0 -78ab30021000-78ab34000000 ---p 00000000 00:00 0 -78ab34400000-78ab3448d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -78ab3448d000-78ab34bf5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -78ab34bf5000-78ab35482000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -78ab35482000-78ab354c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -78ab354c4000-78ab354c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -78ab354c7000-78ab354cd000 rw-p 00000000 00:00 0 -78ab35600000-78ab357c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -78ab357c4000-78ab374c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -78ab374c4000-78ab37b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -78ab37b39000-78ab37b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -78ab37b3a000-78ab37d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -78ab37d1a000-78ab37d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -78ab37d93000-78ab37e08000 rw-p 00000000 00:00 0 -78ab38000000-78ab383b0000 rw-p 00000000 00:00 0 -78ab383b0000-78ab38400000 ---p 00000000 00:00 0 -78ab38400000-78ab38810000 rw-p 00000000 00:00 0 -78ab38810000-78ab3c000000 ---p 00000000 00:00 0 -78ab3c000000-78ab3c021000 rw-p 00000000 00:00 0 -78ab3c021000-78ab40000000 ---p 00000000 00:00 0 -78ab401bf000-78ab40300000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index -78ab40300000-78ab40304000 ---p 00000000 00:00 0 -78ab40304000-78ab40400000 rw-p 00000000 00:00 0 -78ab40400000-78ab4045b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -78ab4045b000-78ab407d9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -78ab407d9000-78ab40bd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -78ab40bd5000-78ab40c10000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -78ab40c10000-78ab40c15000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -78ab40c15000-78ab40c40000 rw-p 00000000 00:00 0 -78ab40d00000-78ab40d04000 ---p 00000000 00:00 0 -78ab40d04000-78ab40e00000 rw-p 00000000 00:00 0 -78ab40e00000-78ab40e6e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -78ab40e6e000-78ab413d5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -78ab413d5000-78ab41ae8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -78ab41ae8000-78ab41ae9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -78ab41ae9000-78ab41b26000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -78ab41b26000-78ab41b29000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -78ab41b29000-78ab41b2b000 rw-p 00000000 00:00 0 -78ab41bed000-78ab41bef000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -78ab41bef000-78ab41bf8000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -78ab41bf8000-78ab41bfb000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -78ab41bfb000-78ab41bfc000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -78ab41bfc000-78ab41bfd000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -78ab41bfd000-78ab41bfe000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -78ab41bfe000-78ab41c00000 rw-p 00000000 00:00 0 -78ab41c00000-78ab41c9a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -78ab41c9a000-78ab41dab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -78ab41dab000-78ab41e1a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -78ab41e1a000-78ab41e1b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -78ab41e1b000-78ab41e26000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -78ab41e26000-78ab41e29000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -78ab41e29000-78ab41e2c000 rw-p 00000000 00:00 0 -78ab41e31000-78ab41e42000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -78ab41e42000-78ab41e84000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -78ab41e84000-78ab41e9c000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -78ab41e9c000-78ab41eaa000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -78ab41eaa000-78ab41eac000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -78ab41eac000-78ab41eb0000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -78ab41eb0000-78ab41ecc000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -78ab41ecc000-78ab41ed2000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -78ab41ed2000-78ab41ed3000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -78ab41ed3000-78ab41ed5000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -78ab41ed5000-78ab41ed6000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -78ab41ed6000-78ab41ee2000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -78ab41ee2000-78ab41f02000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -78ab41f02000-78ab41f0e000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -78ab41f0e000-78ab41f18000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -78ab41f18000-78ab41f19000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -78ab41f19000-78ab41f1b000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -78ab41f1b000-78ab41f86000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -78ab41f86000-78ab41fae000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -78ab41fae000-78ab41faf000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -78ab41faf000-78ab41fb0000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -78ab41fb0000-78ab41fc3000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -78ab41fc3000-78ab41fe2000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -78ab41fe2000-78ab41fef000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -78ab41fef000-78ab41fff000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -78ab41fff000-78ab42000000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -78ab42000000-78ab42d91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa -78ab42d91000-78ab43000000 ---p 00000000 00:00 0 -78ab43000000-78ab43030000 rw-p 00000000 00:00 0 -78ab43030000-78ab430b0000 rw-p 00000000 00:00 0 -78ab430b0000-78ab430c0000 ---p 00000000 00:00 0 -78ab430c0000-78ab430e0000 rw-p 00000000 00:00 0 -78ab430e0000-78ab83000000 ---p 00000000 00:00 0 -78ab83002000-78ab8300c000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -78ab8300c000-78ab83016000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -78ab83016000-78ab8301d000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -78ab8301d000-78ab83026000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -78ab83026000-78ab83027000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -78ab83027000-78ab83036000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -78ab83036000-78ab8311c000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -78ab8311c000-78ab8315a000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -78ab8315a000-78ab8315b000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -78ab8315b000-78ab8315e000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -78ab8315e000-78ab83164000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -78ab83164000-78ab83165000 rw-p 00000000 00:00 0 -78ab83165000-78ab83178000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -78ab83178000-78ab831f7000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -78ab831f7000-78ab83222000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -78ab83222000-78ab83223000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -78ab83223000-78ab8322a000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -78ab8322a000-78ab8322b000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -78ab8322b000-78ab8322c000 rw-p 00000000 00:00 0 -78ab8322c000-78ab8325f000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -78ab8325f000-78ab832c2000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -78ab832c2000-78ab832e1000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -78ab832e1000-78ab8330c000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -78ab8330c000-78ab8330d000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -78ab8330d000-78ab8330e000 rw-p 00000000 00:00 0 -78ab8330e000-78ab833cf000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -78ab833cf000-78ab833d0000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -78ab833d0000-78ab833db000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -78ab833db000-78ab83400000 rw-p 00000000 00:00 0 -78ab83400000-78ab83493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -78ab83493000-78ab838e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -78ab838e6000-78ab83dfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -78ab83dfc000-78ab83e34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -78ab83e34000-78ab83e44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -78ab83e44000-78ab83e49000 rw-p 00000000 00:00 0 -78ab83e52000-78ab83e56000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -78ab83e56000-78ab83e66000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -78ab83e66000-78ab83e69000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -78ab83e69000-78ab83e6a000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -78ab83e6a000-78ab83e6b000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -78ab83e6b000-78ab83e76000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -78ab83e76000-78ab83ea4000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -78ab83ea4000-78ab83eb6000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -78ab83eb6000-78ab83eb7000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -78ab83eb7000-78ab83eb8000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -78ab83eb8000-78ab83eb9000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -78ab83eb9000-78ab83ee8000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -78ab83ee8000-78ab83fa4000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -78ab83fa4000-78ab83fef000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -78ab83fef000-78ab83ffd000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -78ab83ffd000-78ab83fff000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -78ab83fff000-78ab84000000 rw-p 00000000 00:00 0 -78ab84000000-78ab84021000 rw-p 00000000 00:00 0 -78ab84021000-78ab88000000 ---p 00000000 00:00 0 -78ab88000000-78ab88021000 rw-p 00000000 00:00 0 -78ab88021000-78ab8c000000 ---p 00000000 00:00 0 -78ab8c023000-78ab8c089000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -78ab8c089000-78ab8c17c000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -78ab8c17c000-78ab8c208000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -78ab8c208000-78ab8c21b000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -78ab8c21b000-78ab8c21c000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -78ab8c21c000-78ab8c21e000 rw-p 00000000 00:00 0 -78ab8c21e000-78ab8c24d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -78ab8c24d000-78ab8c3a0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -78ab8c3a0000-78ab8c3f4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -78ab8c3f4000-78ab8c3f5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -78ab8c3f5000-78ab8c3fe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -78ab8c3fe000-78ab8c3ff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -78ab8c3ff000-78ab8cd22000 rw-p 00000000 00:00 0 -78ab8cd2b000-78ab8cd34000 rw-s 00000000 00:01 903423 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -78ab8cd34000-78ab8cd3a000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -78ab8cd3a000-78ab8cd54000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -78ab8cd54000-78ab8cd5b000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -78ab8cd5b000-78ab8cd5c000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -78ab8cd5c000-78ab8cd5d000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -78ab8cd5d000-78ab8cd5e000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -78ab8cd5e000-78ab8cd60000 rw-p 00000000 00:00 0 -78ab8cd60000-78ab8cd64000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -78ab8cd64000-78ab8cd7a000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -78ab8cd7a000-78ab8cd84000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -78ab8cd84000-78ab8cd85000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -78ab8cd85000-78ab8cd86000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -78ab8cd86000-78ab8cdf6000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -78ab8cdf6000-78ab8cdf7000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -78ab8cdf7000-78ab8cdfc000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -78ab8cdfc000-78ab8cdfe000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -78ab8cdfe000-78ab8ce00000 rw-p 00000000 00:00 0 -78ab8ce00000-78ab8ce01000 ---p 00000000 00:00 0 -78ab8ce01000-78ab8d601000 rw-p 00000000 00:00 0 -78ab8d606000-78ab8d60f000 rw-s 00000000 00:01 903422 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -78ab8d60f000-78ab8d611000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -78ab8d611000-78ab8d62a000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -78ab8d62a000-78ab8d62c000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -78ab8d62c000-78ab8d62d000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -78ab8d62d000-78ab8d62e000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -78ab8d62e000-78ab8d62f000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -78ab8d633000-78ab8d635000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -78ab8d635000-78ab8d63d000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -78ab8d63d000-78ab8d63f000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -78ab8d63f000-78ab8d640000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -78ab8d640000-78ab8d641000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -78ab8d641000-78ab8d643000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -78ab8d643000-78ab8d64b000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -78ab8d64b000-78ab8d64c000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -78ab8d64c000-78ab8d64d000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -78ab8d64d000-78ab8d64e000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -78ab8d64e000-78ab8d64f000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -78ab8d64f000-78ab8d653000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -78ab8d653000-78ab8d668000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -78ab8d668000-78ab8d66e000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -78ab8d66e000-78ab8d66f000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -78ab8d66f000-78ab8d671000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -78ab8d671000-78ab8d672000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -78ab8d672000-78ab8d675000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -78ab8d675000-78ab8d696000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -78ab8d696000-78ab8d6a2000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -78ab8d6a2000-78ab8d6a3000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -78ab8d6a3000-78ab8d6a4000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -78ab8d6a4000-78ab8d6a5000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -78ab8d6a5000-78ab8d6b3000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -78ab8d6b3000-78ab8d6c4000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -78ab8d6c4000-78ab8d6d2000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -78ab8d6d2000-78ab8d6d6000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -78ab8d6d6000-78ab8d6d7000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -78ab8d6d7000-78ab8d6df000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -78ab8d6df000-78ab8d6fd000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -78ab8d6fd000-78ab8d70a000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -78ab8d70a000-78ab8d70c000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -78ab8d70c000-78ab8d70d000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -78ab8d70d000-78ab8d711000 rw-p 00000000 00:00 0 -78ab8d711000-78ab8d714000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -78ab8d714000-78ab8d72b000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -78ab8d72b000-78ab8d72f000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -78ab8d72f000-78ab8d730000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -78ab8d730000-78ab8d731000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -78ab8d731000-78ab8d73b000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -78ab8d73b000-78ab8d7ed000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -78ab8d7ed000-78ab8d7fe000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -78ab8d7fe000-78ab8d7ff000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -78ab8d7ff000-78ab8d800000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -78ab8d800000-78ab8da41000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -78ab8da41000-78ab8da62000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -78ab8da62000-78ab8dc00000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -78ab8dc00000-78ab8e800000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -78ab8e800000-78ab8f6ab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -78ab8f6ab000-78ab8f810000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -78ab8f810000-78ab8f87e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -78ab8f87e000-78ab8f89c000 rw-p 00000000 00:00 0 -78ab8f89d000-78ab8f89f000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -78ab8f89f000-78ab8f8a3000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -78ab8f8a3000-78ab8f8a5000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -78ab8f8a5000-78ab8f8a6000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -78ab8f8a6000-78ab8f8a7000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -78ab8f8a7000-78ab8f8a9000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -78ab8f8a9000-78ab8f8b0000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -78ab8f8b0000-78ab8f8b1000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -78ab8f8b1000-78ab8f8b2000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -78ab8f8b2000-78ab8f8b3000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -78ab8f8b3000-78ab8f8b4000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -78ab8f8b4000-78ab8f8b8000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -78ab8f8b8000-78ab8f8d7000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -78ab8f8d7000-78ab8f8e1000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -78ab8f8e1000-78ab8f8e2000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -78ab8f8e2000-78ab8f8e4000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -78ab8f8e4000-78ab8f8e5000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -78ab8f8e5000-78ab8f8ea000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -78ab8f8ea000-78ab8f8f5000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -78ab8f8f5000-78ab8f8f9000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -78ab8f8f9000-78ab8f8fa000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -78ab8f8fa000-78ab8f8fb000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -78ab8f8fb000-78ab8f8fc000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -78ab8f8fc000-78ab8f90c000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -78ab8f90c000-78ab8f96a000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -78ab8f96a000-78ab8f986000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -78ab8f986000-78ab8f987000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -78ab8f987000-78ab8f98d000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -78ab8f98d000-78ab8f98e000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -78ab8f98e000-78ab8f996000 rw-p 00000000 00:00 0 -78ab8f996000-78ab8f9e7000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -78ab8f9e7000-78ab8fa43000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -78ab8fa43000-78ab8fa78000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -78ab8fa78000-78ab8fa79000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -78ab8fa79000-78ab8fa99000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -78ab8fa99000-78ab8fab9000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -78ab8fab9000-78ab8fabe000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -78ab8fabe000-78ab8fac0000 rw-p 00000000 00:00 0 -78ab8fac0000-78ab8fad9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -78ab8fad9000-78ab8fb65000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -78ab8fb65000-78ab8fbfa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -78ab8fbfa000-78ab8fbfb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -78ab8fbfb000-78ab8fbfc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -78ab8fbfc000-78ab8fc00000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -78ab8fc00000-78ab90021000 rw-p 00000000 00:00 0 -78ab90021000-78ab94000000 ---p 00000000 00:00 0 -78ab94000000-78ab94021000 rw-p 00000000 00:00 0 -78ab94021000-78ab98000000 ---p 00000000 00:00 0 -78ab98002000-78ab98004000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -78ab98004000-78ab98007000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -78ab98007000-78ab98008000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -78ab98008000-78ab98009000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -78ab98009000-78ab9800a000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -78ab9800a000-78ab9800b000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -78ab9800b000-78ab9800c000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -78ab9800c000-78ab9800d000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -78ab9800d000-78ab9800e000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -78ab9800e000-78ab9800f000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -78ab9800f000-78ab98010000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -78ab98010000-78ab98011000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -78ab98011000-78ab98012000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -78ab98012000-78ab98013000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -78ab98013000-78ab98014000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -78ab98014000-78ab98017000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -78ab98017000-78ab9801a000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -78ab9801a000-78ab9801b000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -78ab9801b000-78ab9801c000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -78ab9801c000-78ab9801d000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -78ab9801d000-78ab9801e000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -78ab9801e000-78ab98021000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -78ab98021000-78ab98024000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -78ab98024000-78ab98025000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -78ab98025000-78ab98026000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -78ab98026000-78ab98027000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -78ab98027000-78ab98028000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -78ab98028000-78ab98029000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -78ab98029000-78ab9802a000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -78ab9802a000-78ab9802b000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -78ab9802b000-78ab9802c000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -78ab9802c000-78ab9802d000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -78ab9802d000-78ab98032000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -78ab98032000-78ab98038000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -78ab98038000-78ab9803b000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -78ab9803b000-78ab9803d000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -78ab9803d000-78ab9803e000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -78ab9803e000-78ab98041000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -78ab98041000-78ab98055000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -78ab98055000-78ab98059000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -78ab98059000-78ab9805a000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -78ab9805a000-78ab9805b000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -78ab9805b000-78ab9805c000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -78ab9805c000-78ab9805f000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -78ab9805f000-78ab98065000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -78ab98065000-78ab98067000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -78ab98067000-78ab98068000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -78ab98068000-78ab98069000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -78ab98069000-78ab98079000 r--p 00000000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -78ab98079000-78ab9809a000 r-xp 00010000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -78ab9809a000-78ab980d6000 r--p 00031000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -78ab980d6000-78ab980da000 r--p 0006c000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -78ab980da000-78ab980dd000 rw-p 00070000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -78ab980dd000-78ab98100000 rw-p 00000000 00:00 0 -78ab98100000-78ab98104000 ---p 00000000 00:00 0 -78ab98104000-78ab98200000 rw-p 00000000 00:00 0 -78ab98200000-78ab98a00000 rw-p 00000000 00:00 0 -78ab98a00000-78ab98a08000 r--p 00000000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -78ab98a08000-78ab98a60000 r-xp 00008000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -78ab98a60000-78ab98a71000 r--p 00060000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -78ab98a71000-78ab98a72000 ---p 00071000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -78ab98a72000-78ab98a78000 r--p 00071000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -78ab98a78000-78ab98a79000 rw-p 00077000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -78ab98a79000-78ab98c83000 rw-p 00000000 00:00 0 -78ab98c84000-78ab98c8a000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -78ab98c8a000-78ab98cd4000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -78ab98cd4000-78ab98cfe000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -78ab98cfe000-78ab98cff000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -78ab98cff000-78ab98d00000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -78ab98d00000-78ab98d04000 ---p 00000000 00:00 0 -78ab98d04000-78ab98e00000 rw-p 00000000 00:00 0 -78ab98e00000-78ab98e04000 ---p 00000000 00:00 0 -78ab98e04000-78ab98f00000 rw-p 00000000 00:00 0 -78ab98f00000-78ab98f04000 ---p 00000000 00:00 0 -78ab98f04000-78ab99000000 rw-p 00000000 00:00 0 -78ab99000000-78ab99f06000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive -78ab99f08000-78ab99f0a000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -78ab99f0a000-78ab99f0c000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -78ab99f0c000-78ab99f0d000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -78ab99f0d000-78ab99f0e000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -78ab99f0e000-78ab99f0f000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -78ab99f0f000-78ab99f16000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -78ab99f16000-78ab99f1c000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -78ab99f1c000-78ab99f1f000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -78ab99f1f000-78ab99f20000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -78ab99f20000-78ab99f21000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -78ab99f21000-78ab99f22000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -78ab99f22000-78ab99f2d000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -78ab99f2d000-78ab99f36000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -78ab99f36000-78ab99f3b000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -78ab99f3b000-78ab99f3c000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -78ab99f3c000-78ab99f3e000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -78ab99f3e000-78ab99f3f000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -78ab99f3f000-78ab99f40000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -78ab99f40000-78ab99f42000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -78ab99f42000-78ab99f43000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -78ab99f43000-78ab99f44000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -78ab99f44000-78ab99f45000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -78ab99f45000-78ab99f46000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -78ab99f46000-78ab99f47000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -78ab99f47000-78ab99f48000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -78ab99f48000-78ab99f49000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -78ab99f49000-78ab99f4a000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -78ab99f4a000-78ab99f4c000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -78ab99f4c000-78ab99f52000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -78ab99f52000-78ab99f54000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -78ab99f54000-78ab99f55000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -78ab99f55000-78ab99f56000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -78ab99f56000-78ab99f58000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -78ab99f58000-78ab99f5f000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -78ab99f5f000-78ab99f61000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -78ab99f61000-78ab99f62000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -78ab99f62000-78ab99f63000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -78ab99f63000-78ab99f65000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -78ab99f65000-78ab99f6c000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -78ab99f6c000-78ab99f6e000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -78ab99f6e000-78ab99f6f000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -78ab99f6f000-78ab99f70000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -78ab99f70000-78ab99f73000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -78ab99f73000-78ab99f7f000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -78ab99f7f000-78ab99f82000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -78ab99f82000-78ab99f83000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -78ab99f83000-78ab99f84000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -78ab99f84000-78ab99fb0000 r--p 00000000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -78ab99fb0000-78ab99fe4000 r-xp 0002c000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -78ab99fe4000-78ab99ffe000 r--p 00060000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -78ab99ffe000-78ab99fff000 r--p 00079000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -78ab99fff000-78ab9a000000 rw-p 0007a000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -78ab9a000000-78ab9c000000 rw-p 00000000 00:00 0 -78ab9c000000-78ab9c021000 rw-p 00000000 00:00 0 -78ab9c021000-78aba0000000 ---p 00000000 00:00 0 -78aba0003000-78aba000e000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -78aba000e000-78aba0022000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -78aba0022000-78aba002b000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -78aba002b000-78aba002c000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -78aba002c000-78aba002d000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -78aba002d000-78aba00fb000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -78aba00fb000-78aba00fc000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -78aba00fc000-78aba00fd000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -78aba00fd000-78aba0101000 ---p 00000000 00:00 0 -78aba0101000-78aba01fd000 rw-p 00000000 00:00 0 -78aba01fd000-78aba0201000 ---p 00000000 00:00 0 -78aba0201000-78aba02fd000 rw-p 00000000 00:00 0 -78aba02fd000-78aba0301000 ---p 00000000 00:00 0 -78aba0301000-78aba03fd000 rw-p 00000000 00:00 0 -78aba03fd000-78aba0401000 ---p 00000000 00:00 0 -78aba0401000-78aba04fd000 rw-p 00000000 00:00 0 -78aba04fd000-78aba0501000 ---p 00000000 00:00 0 -78aba0501000-78aba05fd000 rw-p 00000000 00:00 0 -78aba05fd000-78aba0601000 ---p 00000000 00:00 0 -78aba0601000-78aba06fd000 rw-p 00000000 00:00 0 -78aba06fd000-78aba06fe000 ---p 00000000 00:00 0 -78aba06fe000-78aba07fe000 rw-p 00000000 00:00 0 -78aba07fe000-78aba07ff000 ---p 00000000 00:00 0 -78aba07ff000-78aba08ff000 rw-p 00000000 00:00 0 -78aba08ff000-78aba0900000 ---p 00000000 00:00 0 -78aba0900000-78aba0a00000 rw-p 00000000 00:00 0 -78aba0a00000-78aba11d0000 rw-p 00000000 00:00 0 -78aba11d0000-78aba86f0000 ---p 00000000 00:00 0 -78aba86f0000-78aba8700000 rw-p 00000000 00:00 0 -78aba8700000-78aba8704000 ---p 00000000 00:00 0 -78aba8704000-78aba8800000 rw-p 00000000 00:00 0 -78aba8800000-78aba8a70000 rwxp 00000000 00:00 0 -78aba8a70000-78abafd37000 ---p 00000000 00:00 0 -78abafd37000-78abaffa7000 rwxp 00000000 00:00 0 -78abaffa7000-78abb02c8000 ---p 00000000 00:00 0 -78abb02c8000-78abb0538000 rwxp 00000000 00:00 0 -78abb0538000-78abb7800000 ---p 00000000 00:00 0 -78abb7800000-78abbffb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules -78abbffb7000-78abbffb9000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -78abbffb9000-78abbffbc000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -78abbffbc000-78abbffbd000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -78abbffbd000-78abbffbe000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -78abbffbe000-78abbffbf000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -78abbffbf000-78abbfffd000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -78abbfffd000-78abbfffe000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -78abbfffe000-78abbffff000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -78abbffff000-78abc0000000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -78abc0000000-78abc05ad000 rw-p 00000000 00:00 0 -78abc05ad000-78abc4000000 ---p 00000000 00:00 0 -78abc4004000-78abc4008000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -78abc4008000-78abc4013000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -78abc4013000-78abc4017000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -78abc4017000-78abc4018000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -78abc4018000-78abc4019000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -78abc4019000-78abc40f5000 rw-p 00000000 00:00 0 -78abc40f5000-78abc40f6000 ---p 00000000 00:00 0 -78abc40f6000-78abc41f6000 rw-p 00000000 00:00 0 -78abc41f6000-78abc49fe000 rw-p 00000000 00:00 0 -78abc49fe000-78abc49ff000 ---p 00000000 00:00 0 -78abc49ff000-78abc4aff000 rw-p 00000000 00:00 0 -78abc4aff000-78abc4b00000 ---p 00000000 00:00 0 -78abc4b00000-78abc4c00000 rw-p 00000000 00:00 0 -78abc4c00000-78abc4cfa000 rw-p 00000000 00:00 0 -78abc4cfa000-78abc5b9e000 ---p 00000000 00:00 0 -78abc5b9e000-78abc5ba0000 rw-p 00000000 00:00 0 -78abc5ba0000-78abc5ba1000 r--s 00000000 00:06 1017 /dev/nvidiactl -78abc5ba1000-78abc5ba2000 rw-s 00000000 00:01 5128 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -78abc5ba2000-78abc5ba3000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -78abc5ba3000-78abc5ba4000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -78abc5ba4000-78abc5ba5000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -78abc5ba5000-78abc5ba6000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -78abc5ba6000-78abc5ba7000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -78abc5ba7000-78abc5bab000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -78abc5bab000-78abc5bb8000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -78abc5bb8000-78abc5bbb000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -78abc5bbb000-78abc5bbc000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -78abc5bbc000-78abc5bbd000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -78abc5bbd000-78abc5bbe000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -78abc5bbe000-78abc5cfa000 rw-p 00000000 00:00 0 -78abc5cfa000-78abc6b9e000 ---p 00000000 00:00 0 -78abc6b9e000-78abc6ba0000 rw-p 00000000 00:00 0 -78abc6ba0000-78abc6ba1000 ---p 00000000 00:00 0 -78abc6ba1000-78abc6ca1000 rw-p 00000000 00:00 0 -78abc6ca1000-78abc752f000 rw-p 00000000 00:00 0 -78abc752f000-78abc7615000 ---p 00000000 00:00 0 -78abc7615000-78abc761a000 rw-p 00000000 00:00 0 -78abc761a000-78abc7700000 ---p 00000000 00:00 0 -78abc7700000-78abc7704000 ---p 00000000 00:00 0 -78abc7704000-78abc7800000 rw-p 00000000 00:00 0 -78abc7800000-78abc8b30000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -78abc8b30000-78abc8c00000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -78abc8c00000-78abc8c2e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -78abc8c2e000-78abc8ca4000 rw-p 00000000 00:00 0 -78abc8ca4000-78abc8ca5000 rw-s 00000000 00:01 903421 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) -78abc8ca5000-78abc8ca6000 rw-s 00000000 00:01 903420 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -78abc8ca6000-78abc8ca7000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -78abc8ca7000-78abc8caa000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -78abc8caa000-78abc8cab000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -78abc8cab000-78abc8cac000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -78abc8cac000-78abc8cad000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -78abc8cad000-78abc8caf000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -78abc8caf000-78abc8cb6000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -78abc8cb6000-78abc8cb8000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -78abc8cb8000-78abc8cb9000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -78abc8cb9000-78abc8cba000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -78abc8cba000-78abc8cc1000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache -78abc8cc1000-78abc8cc2000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -78abc8cc2000-78abc8cc5000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -78abc8cc5000-78abc8cc6000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -78abc8cc6000-78abc8cc7000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -78abc8cc7000-78abc8cc8000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -78abc8cc8000-78abc8cc9000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -78abc8cc9000-78abc8ccc000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -78abc8ccc000-78abc8cd0000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -78abc8cd0000-78abc8cd2000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -78abc8cd2000-78abc8cd3000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -78abc8cd3000-78abc8cd4000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -78abc8cd4000-78abc8cd5000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -78abc8cd5000-78abc8cd7000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -78abc8cd7000-78abc8cd8000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -78abc8cd8000-78abc8cd9000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -78abc8cd9000-78abc8cda000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -78abc8cda000-78abc8d19000 rw-p 00000000 00:00 0 -78abc8d19000-78abc8d27000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -78abc8d27000-78abc8da3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -78abc8da3000-78abc8dfe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -78abc8dfe000-78abc8dff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -78abc8dff000-78abc8e00000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -78abc8e00000-78abc8e28000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -78abc8e28000-78abc8fbd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -78abc8fbd000-78abc9015000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -78abc9015000-78abc9016000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -78abc9016000-78abc901a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -78abc901a000-78abc901c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -78abc901c000-78abc9029000 rw-p 00000000 00:00 0 -78abc9029000-78abc902a000 rw-s 00000000 00:01 903419 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -78abc902a000-78abc902b000 r-xp 00000000 00:00 0 -78abc902b000-78abc902d000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -78abc902d000-78abc902f000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -78abc902f000-78abc9031000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -78abc9031000-78abc9032000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -78abc9032000-78abc9033000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -78abc9033000-78abc9034000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -78abc9034000-78abc9036000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -78abc9036000-78abc9037000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -78abc9037000-78abc9038000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -78abc9038000-78abc9039000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -78abc9039000-78abc903a000 rw-p 00000000 00:00 0 -78abc903a000-78abc903b000 r-xp 0005e000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -78abc903b000-78abc903c000 rw-p 00000000 00:00 0 -78abc903c000-78abc9047000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -78abc9047000-78abc9048000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -78abc9048000-78abc9049000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -78abc9049000-78abc904a000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -78abc904a000-78abc905d000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -78abc905d000-78abc905e000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -78abc905e000-78abc905f000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -78abc905f000-78abc9060000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -78abc9060000-78abc909f000 rw-p 00000000 00:00 0 -78abc909f000-78abc90bf000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -78abc90bf000-78abc90c0000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -78abc90c0000-78abc90c1000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -78abc90c1000-78abc90c2000 rw-p 00000000 00:00 0 -78abc90c2000-78abc90e0000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -78abc90e0000-78abc90e2000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -78abc90e2000-78abc90e3000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -78abc90e3000-78abc90e4000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -78abc90e4000-78abc90e5000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -78abc90e5000-78abc90e6000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -78abc90e6000-78abc90e7000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -78abc90e7000-78abc90e8000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -78abc90e8000-78abc90ec000 rw-p 00000000 00:00 0 -78abc90ec000-78abc90ed000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -78abc90ed000-78abc90ee000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -78abc90ee000-78abc90ef000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -78abc90ef000-78abc90f0000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -78abc90f0000-78abc90f1000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -78abc90f1000-78abc90f2000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -78abc90f2000-78abc90f3000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -78abc90f3000-78abc90f4000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -78abc90f4000-78abc90f5000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -78abc90f5000-78abc90f6000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -78abc90f6000-78abc90f8000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -78abc90f8000-78abc9109000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -78abc9109000-78abc910f000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -78abc910f000-78abc9110000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -78abc9110000-78abc9111000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -78abc9111000-78abc9112000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -78abc9112000-78abc9119000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -78abc9119000-78abc911a000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -78abc911a000-78abc911b000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -78abc911b000-78abc911c000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -78abc911c000-78abc9121000 rw-p 00000000 00:00 0 -78abc9121000-78abc9128000 ---p 00000000 00:00 0 -78abc9128000-78abc9130000 rw-s 00000000 103:03 4325438 /tmp/hsperfdata_codex/76953 -78abc9130000-78abc9131000 ---p 00000000 00:00 0 -78abc9131000-78abc9132000 r--p 00000000 00:00 0 -78abc9132000-78abc9141000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -78abc9141000-78abc9142000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -78abc9142000-78abc9143000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -78abc9143000-78abc9145000 rw-p 00000000 00:00 0 -78abc9145000-78abc9149000 r--p 00000000 00:00 0 [vvar] -78abc9149000-78abc914b000 r-xp 00000000 00:00 0 [vdso] -78abc914b000-78abc914d000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -78abc914d000-78abc9177000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -78abc9177000-78abc9182000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -78abc9182000-78abc9183000 ---p 00000000 00:00 0 -78abc9183000-78abc9185000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -78abc9185000-78abc9187000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7fffe1030000-7fffe1053000 rw-p 00000000 00:00 0 [stack] -ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] -Total number of mappings: 716 - - -VM Arguments: -jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -java_command: jme3test.vulkan.VulkanHelperTest -java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 2 {product} {ergonomic} - uint G1ConcRefinementThreads = 8 {product} {ergonomic} - size_t G1HeapRegionSize = 4194304 {product} {ergonomic} - size_t InitialHeapSize = 524288000 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MarkStackSizeMax = 536870912 {product} {ergonomic} - size_t MaxHeapSize = 8388608000 {product} {ergonomic} - size_t MaxNewSize = 5033164800 {product} {ergonomic} - size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags foldmultilines=false - #1: stderr all=off uptime,level,tags foldmultilines=false - -Environment Variables: -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin -USERNAME=codex -SHELL=/bin/bash -DISPLAY=:1 -LANG=en_US.UTF-8 - -Active Locale: -LC_ALL=en_US.UTF-8 -LC_COLLATE=en_US.UTF-8 -LC_CTYPE=en_US.UTF-8 -LC_MESSAGES=en_US.UTF-8 -LC_MONETARY=en_US.UTF-8 -LC_NUMERIC=en_US.UTF-8 -LC_TIME=en_US.UTF-8 - -Signal Handlers: - SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked - SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - - -Periodic native trim disabled - ---------------- S Y S T E M --------------- - -OS: -DISTRIB_ID=Pop -DISTRIB_RELEASE=22.04 -DISTRIB_CODENAME=jammy -DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" -uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 -OS uptime: 0 days 15:05 hours -libc: glibc 2.35 NPTL 2.35 -rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k -load average: 0.54 0.94 1.14 - -/proc/meminfo: -MemTotal: 32767656 kB -MemFree: 19737520 kB -MemAvailable: 22385836 kB -Buffers: 331016 kB -Cached: 4278336 kB -SwapCached: 0 kB -Active: 10029528 kB -Inactive: 2104856 kB -Active(anon): 7554720 kB -Inactive(anon): 0 kB -Active(file): 2474808 kB -Inactive(file): 2104856 kB -Unevictable: 15220 kB -Mlocked: 88 kB -SwapTotal: 20970996 kB -SwapFree: 20970996 kB -Zswap: 0 kB -Zswapped: 0 kB -Dirty: 7772 kB -Writeback: 0 kB -AnonPages: 7540512 kB -Mapped: 1827672 kB -Shmem: 29688 kB -KReclaimable: 176164 kB -Slab: 356116 kB -SReclaimable: 176164 kB -SUnreclaim: 179952 kB -KernelStack: 20096 kB -PageTables: 52628 kB -SecPageTables: 0 kB -NFS_Unstable: 0 kB -Bounce: 0 kB -WritebackTmp: 0 kB -CommitLimit: 37354824 kB -Committed_AS: 13773180 kB -VmallocTotal: 34359738367 kB -VmallocUsed: 249512 kB -VmallocChunk: 0 kB -Percpu: 9152 kB -HardwareCorrupted: 0 kB -AnonHugePages: 0 kB -ShmemHugePages: 6144 kB -ShmemPmdMapped: 0 kB -FileHugePages: 0 kB -FilePmdMapped: 0 kB -Unaccepted: 0 kB -HugePages_Total: 0 -HugePages_Free: 0 -HugePages_Rsvd: 0 -HugePages_Surp: 0 -Hugepagesize: 2048 kB -Hugetlb: 0 kB -DirectMap4k: 796472 kB -DirectMap2M: 12736512 kB -DirectMap1G: 19922944 kB - -/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never -/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 -/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force -/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never - -Process Memory: -Virtual Size: 12184092K (peak: 12184092K) -Resident Set Size: 228396K (peak: 228396K) (anon: 112048K, file: 116348K, shmem: 0K) -Swapped out: 0K -C-Heap outstanding allocations: 58423K, retained: 7232K -glibc malloc tunables: (default) - -/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 -/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 -/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 -/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 - -container (cgroup) information: -container_type: cgroupv2 -cpu_cpuset_cpus: not supported -cpu_memory_nodes: not supported -active_processor_count: 8 -cpu_quota: not supported -cpu_period: not supported -cpu_shares: not supported -memory_limit_in_bytes: unlimited -memory_and_swap_limit_in_bytes: unlimited -memory_soft_limit_in_bytes: 0 -memory_usage_in_bytes: 5899768 k -memory_max_usage_in_bytes: not supported -rss_usage_in_bytes: 4042328 k -cache_usage_in_bytes: 1784848 k -memory_swap_current_in_bytes: 0 -memory_swap_max_limit_in_bytes: unlimited -maximum number of tasks: 38296 -current number of tasks: 295 - -Steal ticks since vm start: 0 -Steal ticks percentage since vm start: 0.000 - -CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c -CPU Model and flags from /proc/cpuinfo: -model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities - -Online cpus: 0-7 -Offline cpus: -BIOS frequency limitation: -Frequency switch latency (ns): 0 -Available cpu frequencies: -Current governor: powersave -Core performance/turbo boost: - -Memory: 4k page, physical 32767656k(22385836k free), swap 20970996k(20970996k free) -Page Sizes: 4k - -vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 - -END. diff --git a/hs_err_pid77449.log b/hs_err_pid77449.log deleted file mode 100644 index 735aab6e1c..0000000000 --- a/hs_err_pid77449.log +++ /dev/null @@ -1,1426 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGSEGV (0xb) at pc=0x0000744bc7a5933a, pid=77449, tid=77480 -# -# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) -# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) -# Problematic frame: -# C [libjemalloc.so+0x5933a] -# -# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.77449) -# -# If you would like to submit a bug report, please visit: -# https://bugreport.java.com/bugreport/crash.jsp -# - ---------------- S U M M A R Y ------------ - -Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanHelperTest - -Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS -Time: Wed Jul 2 22:36:18 2025 EDT elapsed time: 0.812162 seconds (0d 0h 0m 0s) - ---------------- T H R E A D --------------- - -Current thread is native thread - -Stack: [0x0000744bc7100000,0x0000744bc7200000], sp=0x0000744bc71fe9d0, free space=1018k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libjemalloc.so+0x5933a] - -siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 - -Registers: -RAX=0x0000000000000000, RBX=0x0000000000000180, RCX=0x0000000000000000, RDX=0x0000744bc7a78440 -RSP=0x0000744bc71fe9d0, RBP=0x0000744bc71fedb0, RSI=0x0000000000000000, RDI=0x0000744bc7239020 -R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x0000744bc7239060 -R12=0x000000000000002f, R13=0x0000744bc71fed70, R14=0x000000000000002f, R15=0x0000744bc71feb50 -RIP=0x0000744bc7a5933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 - TRAPNO=0x000000000000000e - - -Top of Stack: (sp=0x0000744bc71fe9d0) -0x0000744bc71fe9d0: 0000744bf801cae8 0000000000000004 -0x0000744bc71fe9e0: 0000744bc71ffb58 0000744bf80dff71 -0x0000744bc71fe9f0: 0000000000000005 0000000000000000 -0x0000744bc71fea00: 0000744bf7e0d4d0 0000744bf7ea53e0 -0x0000744bc71fea10: 0000000000000000 0000744bc71fee00 -0x0000744bc71fea20: 0000744bf801caf8 0000000000000000 -0x0000744bc71fea30: 0000744bf801cae8 0000744bf80e2dae -0x0000744bc71fea40: 0000000000000001 000000000000006f -0x0000744bc71fea50: 0000744bc7cb17d0 0000000000000000 -0x0000744bc71fea60: 0000744b1cbc2dc0 0000000000000000 -0x0000744bc71fea70: 00000000000000ca b61693604baf4427 -0x0000744bc71fea80: 0000000000000213 0000744bf8017300 -0x0000744bc71fea90: 0000000000000000 0000ffff00001fa2 -0x0000744bc71feaa0: 0000000000000010 0000000000000002 -0x0000744bc71feab0: 0000000000000000 000000770000007c -0x0000744bc71feac0: 0000006b00000070 ffffffffffffffb8 -0x0000744bc71fead0: 0000000000000070 ffffffffffffffb8 -0x0000744bc71feae0: 0000000000000002 c5db6681efe38100 -0x0000744bc71feaf0: 0000744bc71feb90 0000000000000100 -0x0000744bc71feb00: 0000744bc71feb40 0000744bf001e698 -0x0000744bc71feb10: 0000744bf001ccb0 0000000000000180 -0x0000744bc71feb20: 0000744bc71fedb0 000000000000002f -0x0000744bc71feb30: 0000744bc71fed70 0000744bc71feb50 -0x0000744bc71feb40: 0000744b1c002420 0000744bc7a592f8 -0x0000744bc71feb50: 0000000000000000 0000000000000000 -0x0000744bc71feb60: 0000000000000000 0000000000000000 -0x0000744bc71feb70: 0000000000000000 0000000000000000 -0x0000744bc71feb80: 0000000000000000 0000000000000000 -0x0000744bc71feb90: 0000000000000000 0000000000000000 -0x0000744bc71feba0: 0000000000000000 0000000000000000 -0x0000744bc71febb0: 0000000000000000 0000000000000000 -0x0000744bc71febc0: 0000000000000000 0000000000000000 - -Instructions: (pc=0x0000744bc7a5933a) -0x0000744bc7a5923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff -0x0000744bc7a5924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 -0x0000744bc7a5925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 -0x0000744bc7a5926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c -0x0000744bc7a5927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b -0x0000744bc7a5928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 -0x0000744bc7a5929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 -0x0000744bc7a592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 -0x0000744bc7a592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 -0x0000744bc7a592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d -0x0000744bc7a592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c -0x0000744bc7a592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 -0x0000744bc7a592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b -0x0000744bc7a5930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 -0x0000744bc7a5931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 -0x0000744bc7a5932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 -0x0000744bc7a5933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 -0x0000744bc7a5934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c -0x0000744bc7a5935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 -0x0000744bc7a5936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 -0x0000744bc7a5937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c -0x0000744bc7a5938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 -0x0000744bc7a5939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 -0x0000744bc7a593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d -0x0000744bc7a593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 -0x0000744bc7a593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f -0x0000744bc7a593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 -0x0000744bc7a593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 -0x0000744bc7a593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 -0x0000744bc7a5940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff -0x0000744bc7a5941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 -0x0000744bc7a5942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 - - - ---------------- P R O C E S S --------------- - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x0000744b6e000000-0x0000744b6ed91000-0x0000744b6ed91000), size 14225408, SharedBaseAddress: 0x0000744b6e000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x0000744b6f000000-0x0000744baf000000, reserved size: 1073741824 -Narrow klass base: 0x0000744b6e000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - - -Heap: - garbage-first heap total reserved 8192000K, committed 516096K, used 25198K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 6 young (24576K), 0 survivors (0K) - Metaspace used 8759K, committed 9024K, reserved 1114112K - class space used 779K, committed 896K, reserved 1048576K - -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|0x000000060c000000, 0x000000060c000000, 0x000000060c400000| 0%| F| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 -| 1|0x000000060c400000, 0x000000060c400000, 0x000000060c800000| 0%| F| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 -| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 -| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 -| 4|0x000000060d000000, 0x000000060d000000, 0x000000060d400000| 0%| F| |TAMS 0x000000060d000000| PB 0x000000060d000000| Untracked | 0 -| 5|0x000000060d400000, 0x000000060d400000, 0x000000060d800000| 0%| F| |TAMS 0x000000060d400000| PB 0x000000060d400000| Untracked | 0 -| 6|0x000000060d800000, 0x000000060d800000, 0x000000060dc00000| 0%| F| |TAMS 0x000000060d800000| PB 0x000000060d800000| Untracked | 0 -| 7|0x000000060dc00000, 0x000000060dc00000, 0x000000060e000000| 0%| F| |TAMS 0x000000060dc00000| PB 0x000000060dc00000| Untracked | 0 -| 8|0x000000060e000000, 0x000000060e000000, 0x000000060e400000| 0%| F| |TAMS 0x000000060e000000| PB 0x000000060e000000| Untracked | 0 -| 9|0x000000060e400000, 0x000000060e400000, 0x000000060e800000| 0%| F| |TAMS 0x000000060e400000| PB 0x000000060e400000| Untracked | 0 -| 10|0x000000060e800000, 0x000000060e800000, 0x000000060ec00000| 0%| F| |TAMS 0x000000060e800000| PB 0x000000060e800000| Untracked | 0 -| 11|0x000000060ec00000, 0x000000060ec00000, 0x000000060f000000| 0%| F| |TAMS 0x000000060ec00000| PB 0x000000060ec00000| Untracked | 0 -| 12|0x000000060f000000, 0x000000060f000000, 0x000000060f400000| 0%| F| |TAMS 0x000000060f000000| PB 0x000000060f000000| Untracked | 0 -| 13|0x000000060f400000, 0x000000060f400000, 0x000000060f800000| 0%| F| |TAMS 0x000000060f400000| PB 0x000000060f400000| Untracked | 0 -| 14|0x000000060f800000, 0x000000060f800000, 0x000000060fc00000| 0%| F| |TAMS 0x000000060f800000| PB 0x000000060f800000| Untracked | 0 -| 15|0x000000060fc00000, 0x000000060fc00000, 0x0000000610000000| 0%| F| |TAMS 0x000000060fc00000| PB 0x000000060fc00000| Untracked | 0 -| 16|0x0000000610000000, 0x0000000610000000, 0x0000000610400000| 0%| F| |TAMS 0x0000000610000000| PB 0x0000000610000000| Untracked | 0 -| 17|0x0000000610400000, 0x0000000610400000, 0x0000000610800000| 0%| F| |TAMS 0x0000000610400000| PB 0x0000000610400000| Untracked | 0 -| 18|0x0000000610800000, 0x0000000610800000, 0x0000000610c00000| 0%| F| |TAMS 0x0000000610800000| PB 0x0000000610800000| Untracked | 0 -| 19|0x0000000610c00000, 0x0000000610c00000, 0x0000000611000000| 0%| F| |TAMS 0x0000000610c00000| PB 0x0000000610c00000| Untracked | 0 -| 20|0x0000000611000000, 0x0000000611000000, 0x0000000611400000| 0%| F| |TAMS 0x0000000611000000| PB 0x0000000611000000| Untracked | 0 -| 21|0x0000000611400000, 0x0000000611400000, 0x0000000611800000| 0%| F| |TAMS 0x0000000611400000| PB 0x0000000611400000| Untracked | 0 -| 22|0x0000000611800000, 0x0000000611800000, 0x0000000611c00000| 0%| F| |TAMS 0x0000000611800000| PB 0x0000000611800000| Untracked | 0 -| 23|0x0000000611c00000, 0x0000000611c00000, 0x0000000612000000| 0%| F| |TAMS 0x0000000611c00000| PB 0x0000000611c00000| Untracked | 0 -| 24|0x0000000612000000, 0x0000000612000000, 0x0000000612400000| 0%| F| |TAMS 0x0000000612000000| PB 0x0000000612000000| Untracked | 0 -| 25|0x0000000612400000, 0x0000000612400000, 0x0000000612800000| 0%| F| |TAMS 0x0000000612400000| PB 0x0000000612400000| Untracked | 0 -| 26|0x0000000612800000, 0x0000000612800000, 0x0000000612c00000| 0%| F| |TAMS 0x0000000612800000| PB 0x0000000612800000| Untracked | 0 -| 27|0x0000000612c00000, 0x0000000612c00000, 0x0000000613000000| 0%| F| |TAMS 0x0000000612c00000| PB 0x0000000612c00000| Untracked | 0 -| 28|0x0000000613000000, 0x0000000613000000, 0x0000000613400000| 0%| F| |TAMS 0x0000000613000000| PB 0x0000000613000000| Untracked | 0 -| 29|0x0000000613400000, 0x0000000613400000, 0x0000000613800000| 0%| F| |TAMS 0x0000000613400000| PB 0x0000000613400000| Untracked | 0 -| 30|0x0000000613800000, 0x0000000613800000, 0x0000000613c00000| 0%| F| |TAMS 0x0000000613800000| PB 0x0000000613800000| Untracked | 0 -| 31|0x0000000613c00000, 0x0000000613c00000, 0x0000000614000000| 0%| F| |TAMS 0x0000000613c00000| PB 0x0000000613c00000| Untracked | 0 -| 32|0x0000000614000000, 0x0000000614000000, 0x0000000614400000| 0%| F| |TAMS 0x0000000614000000| PB 0x0000000614000000| Untracked | 0 -| 33|0x0000000614400000, 0x0000000614400000, 0x0000000614800000| 0%| F| |TAMS 0x0000000614400000| PB 0x0000000614400000| Untracked | 0 -| 34|0x0000000614800000, 0x0000000614800000, 0x0000000614c00000| 0%| F| |TAMS 0x0000000614800000| PB 0x0000000614800000| Untracked | 0 -| 35|0x0000000614c00000, 0x0000000614c00000, 0x0000000615000000| 0%| F| |TAMS 0x0000000614c00000| PB 0x0000000614c00000| Untracked | 0 -| 36|0x0000000615000000, 0x0000000615000000, 0x0000000615400000| 0%| F| |TAMS 0x0000000615000000| PB 0x0000000615000000| Untracked | 0 -| 37|0x0000000615400000, 0x0000000615400000, 0x0000000615800000| 0%| F| |TAMS 0x0000000615400000| PB 0x0000000615400000| Untracked | 0 -| 38|0x0000000615800000, 0x0000000615800000, 0x0000000615c00000| 0%| F| |TAMS 0x0000000615800000| PB 0x0000000615800000| Untracked | 0 -| 39|0x0000000615c00000, 0x0000000615c00000, 0x0000000616000000| 0%| F| |TAMS 0x0000000615c00000| PB 0x0000000615c00000| Untracked | 0 -| 40|0x0000000616000000, 0x0000000616000000, 0x0000000616400000| 0%| F| |TAMS 0x0000000616000000| PB 0x0000000616000000| Untracked | 0 -| 41|0x0000000616400000, 0x0000000616400000, 0x0000000616800000| 0%| F| |TAMS 0x0000000616400000| PB 0x0000000616400000| Untracked | 0 -| 42|0x0000000616800000, 0x0000000616800000, 0x0000000616c00000| 0%| F| |TAMS 0x0000000616800000| PB 0x0000000616800000| Untracked | 0 -| 43|0x0000000616c00000, 0x0000000616c00000, 0x0000000617000000| 0%| F| |TAMS 0x0000000616c00000| PB 0x0000000616c00000| Untracked | 0 -| 44|0x0000000617000000, 0x0000000617000000, 0x0000000617400000| 0%| F| |TAMS 0x0000000617000000| PB 0x0000000617000000| Untracked | 0 -| 45|0x0000000617400000, 0x0000000617400000, 0x0000000617800000| 0%| F| |TAMS 0x0000000617400000| PB 0x0000000617400000| Untracked | 0 -| 46|0x0000000617800000, 0x0000000617800000, 0x0000000617c00000| 0%| F| |TAMS 0x0000000617800000| PB 0x0000000617800000| Untracked | 0 -| 47|0x0000000617c00000, 0x0000000617c00000, 0x0000000618000000| 0%| F| |TAMS 0x0000000617c00000| PB 0x0000000617c00000| Untracked | 0 -| 48|0x0000000618000000, 0x0000000618000000, 0x0000000618400000| 0%| F| |TAMS 0x0000000618000000| PB 0x0000000618000000| Untracked | 0 -| 49|0x0000000618400000, 0x0000000618400000, 0x0000000618800000| 0%| F| |TAMS 0x0000000618400000| PB 0x0000000618400000| Untracked | 0 -| 50|0x0000000618800000, 0x0000000618800000, 0x0000000618c00000| 0%| F| |TAMS 0x0000000618800000| PB 0x0000000618800000| Untracked | 0 -| 51|0x0000000618c00000, 0x0000000618c00000, 0x0000000619000000| 0%| F| |TAMS 0x0000000618c00000| PB 0x0000000618c00000| Untracked | 0 -| 52|0x0000000619000000, 0x0000000619000000, 0x0000000619400000| 0%| F| |TAMS 0x0000000619000000| PB 0x0000000619000000| Untracked | 0 -| 53|0x0000000619400000, 0x0000000619400000, 0x0000000619800000| 0%| F| |TAMS 0x0000000619400000| PB 0x0000000619400000| Untracked | 0 -| 54|0x0000000619800000, 0x0000000619800000, 0x0000000619c00000| 0%| F| |TAMS 0x0000000619800000| PB 0x0000000619800000| Untracked | 0 -| 55|0x0000000619c00000, 0x0000000619c00000, 0x000000061a000000| 0%| F| |TAMS 0x0000000619c00000| PB 0x0000000619c00000| Untracked | 0 -| 56|0x000000061a000000, 0x000000061a000000, 0x000000061a400000| 0%| F| |TAMS 0x000000061a000000| PB 0x000000061a000000| Untracked | 0 -| 57|0x000000061a400000, 0x000000061a400000, 0x000000061a800000| 0%| F| |TAMS 0x000000061a400000| PB 0x000000061a400000| Untracked | 0 -| 58|0x000000061a800000, 0x000000061a800000, 0x000000061ac00000| 0%| F| |TAMS 0x000000061a800000| PB 0x000000061a800000| Untracked | 0 -| 59|0x000000061ac00000, 0x000000061ac00000, 0x000000061b000000| 0%| F| |TAMS 0x000000061ac00000| PB 0x000000061ac00000| Untracked | 0 -| 60|0x000000061b000000, 0x000000061b000000, 0x000000061b400000| 0%| F| |TAMS 0x000000061b000000| PB 0x000000061b000000| Untracked | 0 -| 61|0x000000061b400000, 0x000000061b400000, 0x000000061b800000| 0%| F| |TAMS 0x000000061b400000| PB 0x000000061b400000| Untracked | 0 -| 62|0x000000061b800000, 0x000000061b800000, 0x000000061bc00000| 0%| F| |TAMS 0x000000061b800000| PB 0x000000061b800000| Untracked | 0 -| 63|0x000000061bc00000, 0x000000061bc00000, 0x000000061c000000| 0%| F| |TAMS 0x000000061bc00000| PB 0x000000061bc00000| Untracked | 0 -| 64|0x000000061c000000, 0x000000061c000000, 0x000000061c400000| 0%| F| |TAMS 0x000000061c000000| PB 0x000000061c000000| Untracked | 0 -| 65|0x000000061c400000, 0x000000061c400000, 0x000000061c800000| 0%| F| |TAMS 0x000000061c400000| PB 0x000000061c400000| Untracked | 0 -| 66|0x000000061c800000, 0x000000061c800000, 0x000000061cc00000| 0%| F| |TAMS 0x000000061c800000| PB 0x000000061c800000| Untracked | 0 -| 67|0x000000061cc00000, 0x000000061cc00000, 0x000000061d000000| 0%| F| |TAMS 0x000000061cc00000| PB 0x000000061cc00000| Untracked | 0 -| 68|0x000000061d000000, 0x000000061d000000, 0x000000061d400000| 0%| F| |TAMS 0x000000061d000000| PB 0x000000061d000000| Untracked | 0 -| 69|0x000000061d400000, 0x000000061d400000, 0x000000061d800000| 0%| F| |TAMS 0x000000061d400000| PB 0x000000061d400000| Untracked | 0 -| 70|0x000000061d800000, 0x000000061d800000, 0x000000061dc00000| 0%| F| |TAMS 0x000000061d800000| PB 0x000000061d800000| Untracked | 0 -| 71|0x000000061dc00000, 0x000000061dc00000, 0x000000061e000000| 0%| F| |TAMS 0x000000061dc00000| PB 0x000000061dc00000| Untracked | 0 -| 72|0x000000061e000000, 0x000000061e000000, 0x000000061e400000| 0%| F| |TAMS 0x000000061e000000| PB 0x000000061e000000| Untracked | 0 -| 73|0x000000061e400000, 0x000000061e400000, 0x000000061e800000| 0%| F| |TAMS 0x000000061e400000| PB 0x000000061e400000| Untracked | 0 -| 74|0x000000061e800000, 0x000000061e800000, 0x000000061ec00000| 0%| F| |TAMS 0x000000061e800000| PB 0x000000061e800000| Untracked | 0 -| 75|0x000000061ec00000, 0x000000061ec00000, 0x000000061f000000| 0%| F| |TAMS 0x000000061ec00000| PB 0x000000061ec00000| Untracked | 0 -| 76|0x000000061f000000, 0x000000061f000000, 0x000000061f400000| 0%| F| |TAMS 0x000000061f000000| PB 0x000000061f000000| Untracked | 0 -| 77|0x000000061f400000, 0x000000061f400000, 0x000000061f800000| 0%| F| |TAMS 0x000000061f400000| PB 0x000000061f400000| Untracked | 0 -| 78|0x000000061f800000, 0x000000061f800000, 0x000000061fc00000| 0%| F| |TAMS 0x000000061f800000| PB 0x000000061f800000| Untracked | 0 -| 79|0x000000061fc00000, 0x000000061fc00000, 0x0000000620000000| 0%| F| |TAMS 0x000000061fc00000| PB 0x000000061fc00000| Untracked | 0 -| 80|0x0000000620000000, 0x0000000620000000, 0x0000000620400000| 0%| F| |TAMS 0x0000000620000000| PB 0x0000000620000000| Untracked | 0 -| 81|0x0000000620400000, 0x0000000620400000, 0x0000000620800000| 0%| F| |TAMS 0x0000000620400000| PB 0x0000000620400000| Untracked | 0 -| 82|0x0000000620800000, 0x0000000620800000, 0x0000000620c00000| 0%| F| |TAMS 0x0000000620800000| PB 0x0000000620800000| Untracked | 0 -| 83|0x0000000620c00000, 0x0000000620c00000, 0x0000000621000000| 0%| F| |TAMS 0x0000000620c00000| PB 0x0000000620c00000| Untracked | 0 -| 84|0x0000000621000000, 0x0000000621000000, 0x0000000621400000| 0%| F| |TAMS 0x0000000621000000| PB 0x0000000621000000| Untracked | 0 -| 85|0x0000000621400000, 0x0000000621400000, 0x0000000621800000| 0%| F| |TAMS 0x0000000621400000| PB 0x0000000621400000| Untracked | 0 -| 86|0x0000000621800000, 0x0000000621800000, 0x0000000621c00000| 0%| F| |TAMS 0x0000000621800000| PB 0x0000000621800000| Untracked | 0 -| 87|0x0000000621c00000, 0x0000000621c00000, 0x0000000622000000| 0%| F| |TAMS 0x0000000621c00000| PB 0x0000000621c00000| Untracked | 0 -| 88|0x0000000622000000, 0x0000000622000000, 0x0000000622400000| 0%| F| |TAMS 0x0000000622000000| PB 0x0000000622000000| Untracked | 0 -| 89|0x0000000622400000, 0x0000000622400000, 0x0000000622800000| 0%| F| |TAMS 0x0000000622400000| PB 0x0000000622400000| Untracked | 0 -| 90|0x0000000622800000, 0x0000000622800000, 0x0000000622c00000| 0%| F| |TAMS 0x0000000622800000| PB 0x0000000622800000| Untracked | 0 -| 91|0x0000000622c00000, 0x0000000622c00000, 0x0000000623000000| 0%| F| |TAMS 0x0000000622c00000| PB 0x0000000622c00000| Untracked | 0 -| 92|0x0000000623000000, 0x0000000623000000, 0x0000000623400000| 0%| F| |TAMS 0x0000000623000000| PB 0x0000000623000000| Untracked | 0 -| 93|0x0000000623400000, 0x0000000623400000, 0x0000000623800000| 0%| F| |TAMS 0x0000000623400000| PB 0x0000000623400000| Untracked | 0 -| 94|0x0000000623800000, 0x0000000623800000, 0x0000000623c00000| 0%| F| |TAMS 0x0000000623800000| PB 0x0000000623800000| Untracked | 0 -| 95|0x0000000623c00000, 0x0000000623c00000, 0x0000000624000000| 0%| F| |TAMS 0x0000000623c00000| PB 0x0000000623c00000| Untracked | 0 -| 96|0x0000000624000000, 0x0000000624000000, 0x0000000624400000| 0%| F| |TAMS 0x0000000624000000| PB 0x0000000624000000| Untracked | 0 -| 97|0x0000000624400000, 0x0000000624400000, 0x0000000624800000| 0%| F| |TAMS 0x0000000624400000| PB 0x0000000624400000| Untracked | 0 -| 98|0x0000000624800000, 0x0000000624800000, 0x0000000624c00000| 0%| F| |TAMS 0x0000000624800000| PB 0x0000000624800000| Untracked | 0 -| 99|0x0000000624c00000, 0x0000000624c00000, 0x0000000625000000| 0%| F| |TAMS 0x0000000624c00000| PB 0x0000000624c00000| Untracked | 0 -| 100|0x0000000625000000, 0x0000000625000000, 0x0000000625400000| 0%| F| |TAMS 0x0000000625000000| PB 0x0000000625000000| Untracked | 0 -| 101|0x0000000625400000, 0x0000000625400000, 0x0000000625800000| 0%| F| |TAMS 0x0000000625400000| PB 0x0000000625400000| Untracked | 0 -| 102|0x0000000625800000, 0x0000000625800000, 0x0000000625c00000| 0%| F| |TAMS 0x0000000625800000| PB 0x0000000625800000| Untracked | 0 -| 103|0x0000000625c00000, 0x0000000625c00000, 0x0000000626000000| 0%| F| |TAMS 0x0000000625c00000| PB 0x0000000625c00000| Untracked | 0 -| 104|0x0000000626000000, 0x0000000626000000, 0x0000000626400000| 0%| F| |TAMS 0x0000000626000000| PB 0x0000000626000000| Untracked | 0 -| 105|0x0000000626400000, 0x0000000626400000, 0x0000000626800000| 0%| F| |TAMS 0x0000000626400000| PB 0x0000000626400000| Untracked | 0 -| 106|0x0000000626800000, 0x0000000626800000, 0x0000000626c00000| 0%| F| |TAMS 0x0000000626800000| PB 0x0000000626800000| Untracked | 0 -| 107|0x0000000626c00000, 0x0000000626c00000, 0x0000000627000000| 0%| F| |TAMS 0x0000000626c00000| PB 0x0000000626c00000| Untracked | 0 -| 108|0x0000000627000000, 0x0000000627000000, 0x0000000627400000| 0%| F| |TAMS 0x0000000627000000| PB 0x0000000627000000| Untracked | 0 -| 109|0x0000000627400000, 0x0000000627400000, 0x0000000627800000| 0%| F| |TAMS 0x0000000627400000| PB 0x0000000627400000| Untracked | 0 -| 110|0x0000000627800000, 0x0000000627800000, 0x0000000627c00000| 0%| F| |TAMS 0x0000000627800000| PB 0x0000000627800000| Untracked | 0 -| 111|0x0000000627c00000, 0x0000000627c00000, 0x0000000628000000| 0%| F| |TAMS 0x0000000627c00000| PB 0x0000000627c00000| Untracked | 0 -| 112|0x0000000628000000, 0x0000000628000000, 0x0000000628400000| 0%| F| |TAMS 0x0000000628000000| PB 0x0000000628000000| Untracked | 0 -| 113|0x0000000628400000, 0x0000000628400000, 0x0000000628800000| 0%| F| |TAMS 0x0000000628400000| PB 0x0000000628400000| Untracked | 0 -| 114|0x0000000628800000, 0x0000000628800000, 0x0000000628c00000| 0%| F| |TAMS 0x0000000628800000| PB 0x0000000628800000| Untracked | 0 -| 115|0x0000000628c00000, 0x0000000628c00000, 0x0000000629000000| 0%| F| |TAMS 0x0000000628c00000| PB 0x0000000628c00000| Untracked | 0 -| 116|0x0000000629000000, 0x0000000629000000, 0x0000000629400000| 0%| F| |TAMS 0x0000000629000000| PB 0x0000000629000000| Untracked | 0 -| 117|0x0000000629400000, 0x0000000629400000, 0x0000000629800000| 0%| F| |TAMS 0x0000000629400000| PB 0x0000000629400000| Untracked | 0 -| 118|0x0000000629800000, 0x0000000629800000, 0x0000000629c00000| 0%| F| |TAMS 0x0000000629800000| PB 0x0000000629800000| Untracked | 0 -| 119|0x0000000629c00000, 0x0000000629f7cd70, 0x000000062a000000| 87%| E| |TAMS 0x0000000629c00000| PB 0x0000000629c00000| Complete | 0 -| 120|0x000000062a000000, 0x000000062a400000, 0x000000062a400000|100%| E|CS|TAMS 0x000000062a000000| PB 0x000000062a000000| Complete | 0 -| 121|0x000000062a400000, 0x000000062a800000, 0x000000062a800000|100%| E|CS|TAMS 0x000000062a400000| PB 0x000000062a400000| Complete | 0 -| 122|0x000000062a800000, 0x000000062ac00000, 0x000000062ac00000|100%| E|CS|TAMS 0x000000062a800000| PB 0x000000062a800000| Complete | 0 -| 123|0x000000062ac00000, 0x000000062b000000, 0x000000062b000000|100%| E|CS|TAMS 0x000000062ac00000| PB 0x000000062ac00000| Complete | 0 -| 124|0x000000062b000000, 0x000000062b400000, 0x000000062b400000|100%| E|CS|TAMS 0x000000062b000000| PB 0x000000062b000000| Complete | 0 -|1999|0x00000007ffc00000, 0x00000007ffd1ec18, 0x0000000800000000| 28%| O| |TAMS 0x00000007ffc00000| PB 0x00000007ffc00000| Untracked | 0 - -Card table byte_map: [0x0000744bd7800000,0x0000744bd87a0000] _byte_map_base: 0x0000744bd47a0000 - -Marking Bits: (CMBitMap*) 0x0000744bf0059190 - Bits: [0x0000744bcfa00000, 0x0000744bd7700000) - -Polling page: 0x0000744bf80b2000 - -Metaspace: - -Usage: - Non-class: 7.79 MB used. - Class: 779.01 KB used. - Both: 8.55 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 7.94 MB ( 12%) committed, 1 nodes. - Class space: 1.00 GB reserved, 896.00 KB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 8.81 MB ( <1%) committed. - -Chunk freelists: - Non-Class: 7.84 MB - Class: 15.04 MB - Both: 22.89 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. - - use_allocation_guard: 0. - - -Internal statistics: - -num_allocs_failed_limit: 0. -num_arena_births: 152. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 141. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 0. -num_chunks_taken_from_freelist: 378. -num_chunk_merges: 0. -num_chunk_splits: 252. -num_chunks_enlarged: 172. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=120032Kb used=404Kb max_used=404Kb free=119628Kb - bounds [0x0000744be02c8000, 0x0000744be0538000, 0x0000744be7800000] -CodeHeap 'profiled nmethods': size=120028Kb used=1701Kb max_used=1701Kb free=118326Kb - bounds [0x0000744bd8800000, 0x0000744bd8a70000, 0x0000744bdfd37000] -CodeHeap 'non-nmethods': size=5700Kb used=2156Kb max_used=2182Kb free=3543Kb - bounds [0x0000744bdfd37000, 0x0000744bdffa7000, 0x0000744be02c8000] -CodeCache: size=245760Kb, used=4261Kb, max_used=4287Kb, free=241497Kb - total_blobs=2458, nmethods=1285, adapters=1080, full_count=0 -Compilation: enabled, stopped_count=0, restarted_count=0 - -Compilation events (20 events): -Event: 0.802 Thread 0x0000744b3441f420 nmethod 1266 0x0000744be032ad88 code [0x0000744be032ae80, 0x0000744be032af50] -Event: 0.803 Thread 0x0000744b3441f420 1271 4 java.lang.StringBuilder::append (8 bytes) -Event: 0.803 Thread 0x0000744bf01485d0 1272 3 java.lang.reflect.Modifier::isPrivate (12 bytes) -Event: 0.803 Thread 0x0000744bf01485d0 nmethod 1272 0x0000744bd89a6088 code [0x0000744bd89a61a0, 0x0000744bd89a62d0] -Event: 0.804 Thread 0x0000744bf01485d0 1274 3 jdk.internal.org.objectweb.asm.Frame::setLocal (65 bytes) -Event: 0.804 Thread 0x0000744bf01485d0 nmethod 1274 0x0000744bd89a6388 code [0x0000744bd89a64e0, 0x0000744bd89a69e0] -Event: 0.804 Thread 0x0000744bf01485d0 1275 3 jdk.internal.org.objectweb.asm.Frame::pop (46 bytes) -Event: 0.805 Thread 0x0000744bf01485d0 nmethod 1275 0x0000744bd89a6a08 code [0x0000744bd89a6b20, 0x0000744bd89a6cb0] -Event: 0.805 Thread 0x0000744bf01485d0 1276 3 jdk.internal.org.objectweb.asm.ClassWriter::visitMethod (57 bytes) -Event: 0.805 Thread 0x0000744bf01485d0 nmethod 1276 0x0000744bd89a6d08 code [0x0000744bd89a6e40, 0x0000744bd89a71b8] -Event: 0.805 Thread 0x0000744bf01485d0 1277 1 jdk.internal.org.objectweb.asm.SymbolTable::getConstantPoolCount (5 bytes) -Event: 0.805 Thread 0x0000744bf01485d0 nmethod 1277 0x0000744be032bc08 code [0x0000744be032bd20, 0x0000744be032bde0] -Event: 0.808 Thread 0x0000744b3441f420 nmethod 1271 0x0000744be032bf08 code [0x0000744be032c060, 0x0000744be032c930] -Event: 0.811 Thread 0x0000744bf01485d0 1278 3 java.lang.invoke.MethodHandleNatives::refKindIsMethod (19 bytes) -Event: 0.811 Thread 0x0000744bf01485d0 nmethod 1278 0x0000744bd89a7208 code [0x0000744bd89a7320, 0x0000744bd89a7538] -Event: 0.811 Thread 0x0000744bf01485d0 1279 ! 3 java.lang.invoke.MethodHandle::setVarargs (50 bytes) -Event: 0.811 Thread 0x0000744bf01485d0 nmethod 1279 0x0000744bd89a7588 code [0x0000744bd89a77c0, 0x0000744bd89a83c0] -Event: 0.811 Thread 0x0000744bf01485d0 1281 3 jdk.internal.misc.VM::isModuleSystemInited (13 bytes) -Event: 0.812 Thread 0x0000744bf01485d0 nmethod 1281 0x0000744bd89a8488 code [0x0000744bd89a85a0, 0x0000744bd89a86e0] -Event: 0.812 Thread 0x0000744bf01485d0 1280 3 jdk.internal.org.objectweb.asm.MethodWriter::endCurrentBasicBlockWithNoSuccessor (98 bytes) - -GC Heap History (0 events): -No events - -Dll operation events (10 events): -Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -Event: 0.027 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -Event: 0.029 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -Event: 0.078 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -Event: 0.125 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -Event: 0.130 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -Event: 0.381 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -Event: 0.383 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so - -Deoptimization events (20 events): -Event: 0.724 Thread 0x0000744bf05c1120 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000744be03036cc relative=0x00000000000014cc -Event: 0.724 Thread 0x0000744bf05c1120 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000744be03036cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 -Event: 0.724 Thread 0x0000744bf05c1120 DEOPT PACKING pc=0x0000744be03036cc sp=0x0000744bc71fdc40 -Event: 0.724 Thread 0x0000744bf05c1120 DEOPT UNPACKING pc=0x0000744bdfd8abf9 sp=0x0000744bc71fdb40 mode 2 -Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000744be03036cc relative=0x00000000000014cc -Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000744be03036cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 -Event: 0.725 Thread 0x0000744bf05c1120 DEOPT PACKING pc=0x0000744be03036cc sp=0x0000744bc71fdc40 -Event: 0.725 Thread 0x0000744bf05c1120 DEOPT UNPACKING pc=0x0000744bdfd8abf9 sp=0x0000744bc71fdb40 mode 2 -Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000744be03036cc relative=0x00000000000014cc -Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000744be03036cc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 -Event: 0.725 Thread 0x0000744bf05c1120 DEOPT PACKING pc=0x0000744be03036cc sp=0x0000744bc71fdc40 -Event: 0.725 Thread 0x0000744bf05c1120 DEOPT UNPACKING pc=0x0000744bdfd8abf9 sp=0x0000744bc71fdb40 mode 2 -Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000744be0301adc relative=0x0000000000000afc -Event: 0.725 Thread 0x0000744bf05c1120 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000744be0301adc method=java.io.BufferedInputStream.implRead([BII)I @ 100 c2 -Event: 0.725 Thread 0x0000744bf05c1120 DEOPT PACKING pc=0x0000744be0301adc sp=0x0000744bc71fdb20 -Event: 0.725 Thread 0x0000744bf05c1120 DEOPT UNPACKING pc=0x0000744bdfd8abf9 sp=0x0000744bc71fdad8 mode 2 -Event: 0.744 Thread 0x0000744bf05c1120 Uncommon trap: trap_request=0xffffff6e fr.pc=0x0000744be03238e8 relative=0x0000000000000148 -Event: 0.744 Thread 0x0000744bf05c1120 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x0000744be03238e8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 -Event: 0.744 Thread 0x0000744bf05c1120 DEOPT PACKING pc=0x0000744be03238e8 sp=0x0000744bc71fe0a0 -Event: 0.744 Thread 0x0000744bf05c1120 DEOPT UNPACKING pc=0x0000744bdfd8abf9 sp=0x0000744bc71fe050 mode 2 - -Classes loaded (20 events): -Event: 0.724 Loading class sun/awt/image/SurfaceManager$ImageAccessor done -Event: 0.724 Loading class java/awt/Image$1 done -Event: 0.724 Loading class sun/awt/image/SurfaceManager -Event: 0.724 Loading class sun/awt/image/SurfaceManager done -Event: 0.724 Loading class java/awt/image/BufferedImage$1 -Event: 0.724 Loading class java/awt/image/BufferedImage$1 done -Event: 0.724 Loading class sun/awt/image/IntegerComponentRaster -Event: 0.724 Loading class sun/awt/image/IntegerComponentRaster done -Event: 0.724 Loading class java/awt/image/IndexColorModel -Event: 0.724 Loading class java/awt/image/IndexColorModel done -Event: 0.724 Loading class sun/awt/image/ShortComponentRaster -Event: 0.724 Loading class sun/awt/image/ShortComponentRaster done -Event: 0.803 Loading class java/util/function/LongFunction -Event: 0.803 Loading class java/util/function/LongFunction done -Event: 0.811 Loading class java/lang/Throwable$WrappedPrintStream -Event: 0.811 Loading class java/lang/Throwable$PrintStreamOrWriter -Event: 0.811 Loading class java/lang/Throwable$PrintStreamOrWriter done -Event: 0.811 Loading class java/lang/Throwable$WrappedPrintStream done -Event: 0.811 Loading class java/lang/StackTraceElement$HashedModules -Event: 0.811 Loading class java/lang/StackTraceElement$HashedModules done - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (20 events): -Event: 0.166 Thread 0x0000744bf002d0f0 Exception (0x000000062af599d0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.166 Thread 0x0000744bf002d0f0 Exception (0x000000062af5eb08) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.167 Thread 0x0000744bf002d0f0 Exception (0x000000062af70568) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.168 Thread 0x0000744bf002d0f0 Exception (0x000000062af76038) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.168 Thread 0x0000744bf002d0f0 Exception (0x000000062af7a408) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.168 Thread 0x0000744bf002d0f0 Exception (0x000000062af81660) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.212 Thread 0x0000744bf002d0f0 Exception (0x000000062a929cf8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.221 Thread 0x0000744bf002d0f0 Exception (0x000000062a981740) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 0.230 Thread 0x0000744bf002d0f0 Exception (0x000000062a9ec330) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.231 Thread 0x0000744bf002d0f0 Exception (0x000000062a9fa148) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.389 Thread 0x0000744bf05c1120 Exception (0x000000062a5b9f98) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.390 Thread 0x0000744bf05c1120 Exception (0x000000062a5bd4e8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] -Event: 0.649 Thread 0x0000744bf05c1120 Exception (0x000000062a76c258) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.710 Thread 0x0000744bf05c1120 Exception (0x000000062a1ebea0) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 0.711 Thread 0x0000744bf05c1120 Exception (0x000000062a1f1e78) -thrown [open/src/hotspot/share/prims/jni.cpp, line 520] -Event: 0.713 Thread 0x0000744bf05c1120 Exception (0x000000062a21cd28) -thrown [open/src/hotspot/share/prims/jni.cpp, line 520] -Event: 0.800 Thread 0x0000744bf05c1120 Exception (0x0000000629e5fe30) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.800 Thread 0x0000744bf05c1120 Exception (0x0000000629e65678) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.803 Thread 0x0000744bf05c1120 Exception (0x0000000629e7d8a0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.804 Thread 0x0000744bf05c1120 Exception (0x0000000629e8e9b0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] - -VM Operations (12 events): -Event: 0.110 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.110 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.117 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.117 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.127 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.127 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.138 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.138 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.664 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.664 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.707 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.707 Executing VM operation: HandshakeAllThreads (Deoptimize) done - -Memory protections (16 events): -Event: 0.001 Protecting memory [0x0000744bf6700000,0x0000744bf6704000] with protection modes 0 -Event: 0.015 Protecting memory [0x0000744bd7700000,0x0000744bd7704000] with protection modes 0 -Event: 0.015 Protecting memory [0x0000744bcc500000,0x0000744bcc504000] with protection modes 0 -Event: 0.015 Protecting memory [0x0000744bcc400000,0x0000744bcc404000] with protection modes 0 -Event: 0.015 Protecting memory [0x0000744bcc300000,0x0000744bcc304000] with protection modes 0 -Event: 0.015 Protecting memory [0x0000744bcc200000,0x0000744bcc204000] with protection modes 0 -Event: 0.015 Protecting memory [0x0000744bcc100000,0x0000744bcc104000] with protection modes 0 -Event: 0.015 Protecting memory [0x0000744bcc000000,0x0000744bcc004000] with protection modes 0 -Event: 0.024 Protecting memory [0x0000744bc7f00000,0x0000744bc7f04000] with protection modes 0 -Event: 0.025 Protecting memory [0x0000744bc7e00000,0x0000744bc7e04000] with protection modes 0 -Event: 0.057 Protecting memory [0x0000744bc7d00000,0x0000744bc7d04000] with protection modes 0 -Event: 0.235 Protecting memory [0x0000744bc7100000,0x0000744bc7104000] with protection modes 0 -Event: 0.235 Protecting memory [0x0000744bf6700000,0x0000744bf6704000] with protection modes 0 -Event: 0.675 Protecting memory [0x0000744bc7d00000,0x0000744bc7d04000] with protection modes 0 -Event: 0.685 Protecting memory [0x0000744baf285000,0x0000744baf289000] with protection modes 0 -Event: 0.720 Protecting memory [0x0000744baf185000,0x0000744baf189000] with protection modes 0 - -Nmethod flushes (0 events): -No events - -Events (19 events): -Event: 0.010 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf002d0f0 -Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf0137930 -Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf0138ea0 -Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf013a7d0 -Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf013be10 -Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf013d3b0 -Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf013eed0 -Event: 0.015 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf01485d0 -Event: 0.024 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf01552a0 -Event: 0.025 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf0157d80 -Event: 0.057 Thread 0x0000744bf013eed0 Thread added: 0x0000744b380d8d00 -Event: 0.235 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf05c1120 -Event: 0.235 Thread 0x0000744bf002d0f0 Thread exited: 0x0000744bf002d0f0 -Event: 0.235 Thread 0x0000744bf002d0f0 Thread added: 0x0000744bf002d0f0 -Event: 0.649 Thread 0x0000744b380d8d00 Thread exited: 0x0000744b380d8d00 -Event: 0.675 Thread 0x0000744bf05c1120 Thread added: 0x0000744b1c5acd90 -Event: 0.685 Thread 0x0000744bf01485d0 Thread added: 0x0000744b3441f420 -Event: 0.720 Thread 0x0000744bf05c1120 Thread added: 0x0000744b1c763640 -Event: 0.812 Thread 0x0000744bf05c1120 Thread exited: 0x0000744bf05c1120 - - -Dynamic libraries: -60c000000-62b400000 rw-p 00000000 00:00 0 -62b400000-7ffc00000 ---p 00000000 00:00 0 -7ffc00000-7ffd1f000 rw-p 00dc0000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa -7ffd1f000-800000000 rw-p 00000000 00:00 0 -574fbc634000-574fbc635000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -574fbc636000-574fbc637000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -574fbc637000-574fbc638000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -574fdef4a000-574fdef93000 rw-p 00000000 00:00 0 [heap] -744adc000000-744adc021000 rw-p 00000000 00:00 0 -744adc021000-744ae0000000 ---p 00000000 00:00 0 -744ae4000000-744ae4021000 rw-p 00000000 00:00 0 -744ae4021000-744ae8000000 ---p 00000000 00:00 0 -744ae8000000-744ae8021000 rw-p 00000000 00:00 0 -744ae8021000-744aec000000 ---p 00000000 00:00 0 -744af0000000-744af007c000 rw-p 00000000 00:00 0 -744af007c000-744af4000000 ---p 00000000 00:00 0 -744af4000000-744af4021000 rw-p 00000000 00:00 0 -744af4021000-744af8000000 ---p 00000000 00:00 0 -744afc000000-744afc0c8000 rw-p 00000000 00:00 0 -744afc0c8000-744b00000000 ---p 00000000 00:00 0 -744b00000000-744b00021000 rw-p 00000000 00:00 0 -744b00021000-744b04000000 ---p 00000000 00:00 0 -744b08000000-744b08021000 rw-p 00000000 00:00 0 -744b08021000-744b0c000000 ---p 00000000 00:00 0 -744b0d000000-744b13712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -744b13712000-744b13f30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -744b13f30000-744b13f76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -744b13f76000-744b13ff2000 rw-p 00000000 00:00 0 -744b14000000-744b14021000 rw-p 00000000 00:00 0 -744b14021000-744b18000000 ---p 00000000 00:00 0 -744b1c000000-744b1cff0000 rw-p 00000000 00:00 0 -744b1cff0000-744b20000000 ---p 00000000 00:00 0 -744b20000000-744b20263000 rw-p 00000000 00:00 0 -744b20263000-744b24000000 ---p 00000000 00:00 0 -744b28000000-744b28021000 rw-p 00000000 00:00 0 -744b28021000-744b2c000000 ---p 00000000 00:00 0 -744b2c000000-744b2c021000 rw-p 00000000 00:00 0 -744b2c021000-744b30000000 ---p 00000000 00:00 0 -744b34000000-744b34447000 rw-p 00000000 00:00 0 -744b34447000-744b38000000 ---p 00000000 00:00 0 -744b38000000-744b3838a000 rw-p 00000000 00:00 0 -744b3838a000-744b3c000000 ---p 00000000 00:00 0 -744b40000000-744b40021000 rw-p 00000000 00:00 0 -744b40021000-744b44000000 ---p 00000000 00:00 0 -744b44000000-744b44021000 rw-p 00000000 00:00 0 -744b44021000-744b48000000 ---p 00000000 00:00 0 -744b49600000-744b49601000 ---p 00000000 00:00 0 -744b49601000-744b49e01000 rw-p 00000000 00:00 0 -744b4a000000-744b4acf5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -744b4acf5000-744b4b6d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -744b4b6d8000-744b4bae9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -744b4bae9000-744b4bf6b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -744b4bf6b000-744b4bf73000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -744b4bf73000-744b4bf7e000 rw-p 00000000 00:00 0 -744b4c000000-744b4c021000 rw-p 00000000 00:00 0 -744b4c021000-744b50000000 ---p 00000000 00:00 0 -744b50000000-744b50021000 rw-p 00000000 00:00 0 -744b50021000-744b54000000 ---p 00000000 00:00 0 -744b54400000-744b5442f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -744b5442f000-744b54b02000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -744b54b02000-744b54c24000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -744b54c24000-744b54c35000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -744b54c35000-744b54cb3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -744b54cb3000-744b54cc7000 rw-p 00000000 00:00 0 -744b54e00000-744b54e01000 ---p 00000000 00:00 0 -744b54e01000-744b55601000 rw-p 00000000 00:00 0 -744b55800000-744b55801000 ---p 00000000 00:00 0 -744b55801000-744b56001000 rw-p 00000000 00:00 0 -744b56200000-744b56201000 ---p 00000000 00:00 0 -744b56201000-744b56a01000 rw-p 00000000 00:00 0 -744b56c00000-744b56c01000 ---p 00000000 00:00 0 -744b56c01000-744b57401000 rw-p 00000000 00:00 0 -744b57600000-744b57601000 ---p 00000000 00:00 0 -744b57601000-744b57e01000 rw-p 00000000 00:00 0 -744b58000000-744b58021000 rw-p 00000000 00:00 0 -744b58021000-744b5c000000 ---p 00000000 00:00 0 -744b5c000000-744b5c021000 rw-p 00000000 00:00 0 -744b5c021000-744b60000000 ---p 00000000 00:00 0 -744b60200000-744b60222000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -744b60222000-744b60421000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -744b60421000-744b60429000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -744b60429000-744b6042a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -744b6042a000-744b6042b000 rw-p 00000000 00:00 0 -744b605bb000-744b60800000 rw-s 00000000 00:01 8 /memfd:/.nvidia_drv.XXXXXX (deleted) -744b60800000-744b60801000 ---p 00000000 00:00 0 -744b60801000-744b61001000 rw-p 00000000 00:00 0 -744b61200000-744b61216000 r--p 00000000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -744b61216000-744b61306000 r-xp 00016000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -744b61306000-744b61379000 r--p 00106000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -744b61379000-744b61380000 r--p 00178000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -744b61380000-744b61387000 rw-p 0017f000 103:03 4325447 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -744b61387000-744b61402000 rw-p 00000000 00:00 0 -744b61600000-744b6168d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -744b6168d000-744b61df5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -744b61df5000-744b62682000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -744b62682000-744b626c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -744b626c4000-744b626c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -744b626c7000-744b626cd000 rw-p 00000000 00:00 0 -744b62800000-744b6285b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -744b6285b000-744b62bd9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -744b62bd9000-744b62fd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -744b62fd5000-744b63010000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -744b63010000-744b63015000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -744b63015000-744b63040000 rw-p 00000000 00:00 0 -744b63200000-744b6326e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -744b6326e000-744b637d5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -744b637d5000-744b63ee8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -744b63ee8000-744b63ee9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -744b63ee9000-744b63f26000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -744b63f26000-744b63f29000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -744b63f29000-744b63f2b000 rw-p 00000000 00:00 0 -744b64000000-744b643c0000 rw-p 00000000 00:00 0 -744b643c0000-744b64400000 ---p 00000000 00:00 0 -744b64400000-744b64830000 rw-p 00000000 00:00 0 -744b64830000-744b68000000 ---p 00000000 00:00 0 -744b68000000-744b68021000 rw-p 00000000 00:00 0 -744b68021000-744b6c000000 ---p 00000000 00:00 0 -744b6c200000-744b6c201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -744b6c201000-744b6c202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -744b6c202000-744b6de1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -744b6de1c000-744b6de1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -744b6de1d000-744b6de1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -744b6df00000-744b6df04000 ---p 00000000 00:00 0 -744b6df04000-744b6e000000 rw-p 00000000 00:00 0 -744b6e000000-744b6ed91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa -744b6ed91000-744b6f000000 ---p 00000000 00:00 0 -744b6f000000-744b6f030000 rw-p 00000000 00:00 0 -744b6f030000-744b6f0b0000 rw-p 00000000 00:00 0 -744b6f0b0000-744b6f0e0000 rw-p 00000000 00:00 0 -744b6f0e0000-744baf000000 ---p 00000000 00:00 0 -744baf018000-744baf159000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index -744baf159000-744baf15b000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -744baf15b000-744baf164000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -744baf164000-744baf167000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -744baf167000-744baf168000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -744baf168000-744baf169000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -744baf169000-744baf16a000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -744baf16a000-744baf16c000 rw-p 00000000 00:00 0 -744baf16c000-744baf170000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -744baf170000-744baf180000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -744baf180000-744baf183000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -744baf183000-744baf184000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -744baf184000-744baf185000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -744baf185000-744baf189000 ---p 00000000 00:00 0 -744baf189000-744baf285000 rw-p 00000000 00:00 0 -744baf285000-744baf289000 ---p 00000000 00:00 0 -744baf289000-744baf385000 rw-p 00000000 00:00 0 -744baf385000-744baf396000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -744baf396000-744baf3d8000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -744baf3d8000-744baf3f0000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -744baf3f0000-744baf3fe000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -744baf3fe000-744baf400000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -744baf400000-744baf493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -744baf493000-744baf8e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -744baf8e6000-744bafdfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -744bafdfc000-744bafe34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -744bafe34000-744bafe44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -744bafe44000-744bafe49000 rw-p 00000000 00:00 0 -744bafe55000-744bafe59000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -744bafe59000-744bafe75000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -744bafe75000-744bafe7b000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -744bafe7b000-744bafe7c000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -744bafe7c000-744bafe7e000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -744bafe7e000-744bafe7f000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -744bafe7f000-744bafe8b000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -744bafe8b000-744bafeab000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -744bafeab000-744bafeb7000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -744bafeb7000-744bafec1000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -744bafec1000-744bafec2000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -744bafec2000-744bafed1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -744bafed1000-744baffb7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -744baffb7000-744bafff5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -744bafff5000-744bafff6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -744bafff6000-744bafff9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -744bafff9000-744baffff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -744baffff000-744bb0000000 rw-p 00000000 00:00 0 -744bb0000000-744bb0021000 rw-p 00000000 00:00 0 -744bb0021000-744bb4000000 ---p 00000000 00:00 0 -744bb4000000-744bb4021000 rw-p 00000000 00:00 0 -744bb4021000-744bb8000000 ---p 00000000 00:00 0 -744bb8026000-744bb8028000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -744bb8028000-744bb8093000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -744bb8093000-744bb80bb000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -744bb80bb000-744bb80bc000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -744bb80bc000-744bb80bd000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -744bb80bd000-744bb80c3000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -744bb80c3000-744bb80dd000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -744bb80dd000-744bb80e4000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -744bb80e4000-744bb80e5000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -744bb80e5000-744bb80e6000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -744bb80e6000-744bb80e7000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -744bb80e7000-744bb80e9000 rw-p 00000000 00:00 0 -744bb80e9000-744bb80fc000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -744bb80fc000-744bb811b000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -744bb811b000-744bb8128000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -744bb8128000-744bb8138000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -744bb8138000-744bb8139000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -744bb8139000-744bb814c000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -744bb814c000-744bb81cb000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -744bb81cb000-744bb81f6000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -744bb81f6000-744bb81f7000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -744bb81f7000-744bb81fe000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -744bb81fe000-744bb81ff000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -744bb81ff000-744bb8b22000 rw-p 00000000 00:00 0 -744bb8b27000-744bb8b31000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -744bb8b31000-744bb8b3b000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -744bb8b3b000-744bb8b42000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -744bb8b42000-744bb8b4b000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -744bb8b4b000-744bb8b4c000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -744bb8b4c000-744bb8b57000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -744bb8b57000-744bb8b85000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -744bb8b85000-744bb8b97000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -744bb8b97000-744bb8b98000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -744bb8b98000-744bb8b99000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -744bb8b99000-744bb8b9a000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -744bb8b9a000-744bb8b9e000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -744bb8b9e000-744bb8bb4000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -744bb8bb4000-744bb8bbe000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -744bb8bbe000-744bb8bbf000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -744bb8bbf000-744bb8bc0000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -744bb8bc0000-744bb8bc2000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -744bb8bc2000-744bb8bdb000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -744bb8bdb000-744bb8bdd000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -744bb8bdd000-744bb8bde000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -744bb8bde000-744bb8bdf000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -744bb8bdf000-744bb8be0000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -744bb8bee000-744bb8bf7000 rw-s 00000000 00:01 904560 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -744bb8bf7000-744bb8c00000 rw-s 00000000 00:01 904559 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -744bb8c00000-744bb8c01000 ---p 00000000 00:00 0 -744bb8c01000-744bb9401000 rw-p 00000000 00:00 0 -744bb9405000-744bb946b000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -744bb946b000-744bb955e000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -744bb955e000-744bb95ea000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -744bb95ea000-744bb95fd000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -744bb95fd000-744bb95fe000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -744bb95fe000-744bb9600000 rw-p 00000000 00:00 0 -744bb9600000-744bb97c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -744bb97c4000-744bbb4c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -744bbb4c4000-744bbbb39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -744bbbb39000-744bbbb3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -744bbbb3a000-744bbbd1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -744bbbd1a000-744bbbd93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -744bbbd93000-744bbbe08000 rw-p 00000000 00:00 0 -744bbbe09000-744bbbe0d000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -744bbbe0d000-744bbbe22000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -744bbbe22000-744bbbe28000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -744bbbe28000-744bbbe29000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -744bbbe29000-744bbbe2b000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -744bbbe2b000-744bbbe2c000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -744bbbe2c000-744bbbe5f000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -744bbbe5f000-744bbbec2000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -744bbbec2000-744bbbee1000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -744bbbee1000-744bbbf0c000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -744bbbf0c000-744bbbf0d000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -744bbbf0d000-744bbbf0e000 rw-p 00000000 00:00 0 -744bbbf0e000-744bbbfcf000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -744bbbfcf000-744bbbfd0000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -744bbbfd0000-744bbbfdb000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -744bbbfdb000-744bbc000000 rw-p 00000000 00:00 0 -744bbc000000-744bbc021000 rw-p 00000000 00:00 0 -744bbc021000-744bc0000000 ---p 00000000 00:00 0 -744bc0000000-744bc0021000 rw-p 00000000 00:00 0 -744bc0021000-744bc4000000 ---p 00000000 00:00 0 -744bc4006000-744bc4008000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -744bc4008000-744bc400c000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -744bc400c000-744bc400e000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -744bc400e000-744bc400f000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -744bc400f000-744bc4010000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -744bc4010000-744bc4012000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -744bc4012000-744bc401a000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -744bc401a000-744bc401c000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -744bc401c000-744bc401d000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -744bc401d000-744bc401e000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -744bc401e000-744bc404d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -744bc404d000-744bc41a0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -744bc41a0000-744bc41f4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -744bc41f4000-744bc41f5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -744bc41f5000-744bc41fe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -744bc41fe000-744bc41ff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -744bc41ff000-744bc4200000 rw-p 00000000 00:00 0 -744bc4200000-744bc429a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -744bc429a000-744bc43ab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -744bc43ab000-744bc441a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -744bc441a000-744bc441b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -744bc441b000-744bc4426000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -744bc4426000-744bc4429000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -744bc4429000-744bc442c000 rw-p 00000000 00:00 0 -744bc4431000-744bc4433000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -744bc4433000-744bc443b000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -744bc443b000-744bc443c000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -744bc443c000-744bc443d000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -744bc443d000-744bc443e000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -744bc443e000-744bc443f000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -744bc443f000-744bc44af000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -744bc44af000-744bc44b0000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -744bc44b0000-744bc44b5000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -744bc44b5000-744bc44b7000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -744bc44b7000-744bc44b9000 rw-p 00000000 00:00 0 -744bc44b9000-744bc44e8000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -744bc44e8000-744bc45a4000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -744bc45a4000-744bc45ef000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -744bc45ef000-744bc45fd000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -744bc45fd000-744bc45ff000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -744bc45ff000-744bc4600000 rw-p 00000000 00:00 0 -744bc4600000-744bc4841000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -744bc4841000-744bc4862000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -744bc4862000-744bc4a00000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -744bc4a00000-744bc5600000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -744bc5600000-744bc64ab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -744bc64ab000-744bc6610000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -744bc6610000-744bc667e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -744bc667e000-744bc669c000 rw-p 00000000 00:00 0 -744bc66a2000-744bc66a4000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -744bc66a4000-744bc66a7000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -744bc66a7000-744bc66a8000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -744bc66a8000-744bc66a9000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -744bc66a9000-744bc66aa000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -744bc66aa000-744bc66ad000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -744bc66ad000-744bc66ce000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -744bc66ce000-744bc66da000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -744bc66da000-744bc66db000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -744bc66db000-744bc66dc000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -744bc66dc000-744bc66dd000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -744bc66dd000-744bc66eb000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -744bc66eb000-744bc66fc000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -744bc66fc000-744bc670a000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -744bc670a000-744bc670e000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -744bc670e000-744bc670f000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -744bc670f000-744bc6717000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -744bc6717000-744bc6735000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -744bc6735000-744bc6742000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -744bc6742000-744bc6744000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -744bc6744000-744bc6745000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -744bc6745000-744bc6749000 rw-p 00000000 00:00 0 -744bc6749000-744bc674c000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -744bc674c000-744bc6763000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -744bc6763000-744bc6767000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -744bc6767000-744bc6768000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -744bc6768000-744bc6769000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -744bc6769000-744bc676d000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -744bc676d000-744bc678c000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -744bc678c000-744bc6796000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -744bc6796000-744bc6797000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -744bc6797000-744bc6799000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -744bc6799000-744bc679a000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -744bc679a000-744bc679f000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -744bc679f000-744bc67aa000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -744bc67aa000-744bc67ae000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -744bc67ae000-744bc67af000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -744bc67af000-744bc67b0000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -744bc67b0000-744bc67b1000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -744bc67b1000-744bc67bb000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -744bc67bb000-744bc686d000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -744bc686d000-744bc687e000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -744bc687e000-744bc687f000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -744bc687f000-744bc6880000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -744bc6880000-744bc6890000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -744bc6890000-744bc68ee000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -744bc68ee000-744bc690a000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -744bc690a000-744bc690b000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -744bc690b000-744bc6911000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -744bc6911000-744bc6912000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -744bc6912000-744bc691a000 rw-p 00000000 00:00 0 -744bc691a000-744bc696b000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -744bc696b000-744bc69c7000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -744bc69c7000-744bc69fc000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -744bc69fc000-744bc69fd000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -744bc69fd000-744bc6a1d000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -744bc6a1d000-744bc6a3d000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -744bc6a3d000-744bc6a42000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -744bc6a42000-744bc6a44000 rw-p 00000000 00:00 0 -744bc6a44000-744bc6a4a000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -744bc6a4a000-744bc6a94000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -744bc6a94000-744bc6abe000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -744bc6abe000-744bc6abf000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -744bc6abf000-744bc6ac0000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -744bc6ac0000-744bc6ad9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -744bc6ad9000-744bc6b65000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -744bc6b65000-744bc6bfa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -744bc6bfa000-744bc6bfb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -744bc6bfb000-744bc6bfc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -744bc6bfc000-744bc6c00000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -744bc6c00000-744bc7000000 rw-p 00000000 00:00 0 -744bc7002000-744bc7004000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -744bc7004000-744bc700b000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -744bc700b000-744bc700c000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -744bc700c000-744bc700d000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -744bc700d000-744bc700e000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -744bc700e000-744bc700f000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -744bc700f000-744bc7010000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -744bc7010000-744bc7011000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -744bc7011000-744bc7012000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -744bc7012000-744bc7013000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -744bc7013000-744bc7014000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -744bc7014000-744bc7015000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -744bc7015000-744bc7016000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -744bc7016000-744bc7017000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -744bc7017000-744bc7018000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -744bc7018000-744bc7019000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -744bc7019000-744bc701c000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -744bc701c000-744bc701f000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -744bc701f000-744bc7020000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -744bc7020000-744bc7021000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -744bc7021000-744bc7022000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -744bc7022000-744bc7023000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -744bc7023000-744bc7026000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -744bc7026000-744bc7029000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -744bc7029000-744bc702a000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -744bc702a000-744bc702b000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -744bc702b000-744bc702c000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -744bc702c000-744bc702d000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -744bc702d000-744bc7032000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -744bc7032000-744bc7038000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -744bc7038000-744bc703b000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -744bc703b000-744bc703d000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -744bc703d000-744bc703e000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -744bc703e000-744bc7041000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -744bc7041000-744bc7055000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -744bc7055000-744bc7059000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -744bc7059000-744bc705a000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -744bc705a000-744bc705b000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -744bc705b000-744bc705c000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -744bc705c000-744bc705f000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -744bc705f000-744bc7065000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -744bc7065000-744bc7067000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -744bc7067000-744bc7068000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -744bc7068000-744bc7069000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -744bc7069000-744bc7079000 r--p 00000000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -744bc7079000-744bc709a000 r-xp 00010000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -744bc709a000-744bc70d6000 r--p 00031000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -744bc70d6000-744bc70da000 r--p 0006c000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -744bc70da000-744bc70dd000 rw-p 00070000 103:03 4325445 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -744bc70dd000-744bc7100000 rw-p 00000000 00:00 0 -744bc7100000-744bc7104000 ---p 00000000 00:00 0 -744bc7104000-744bc7200000 rw-p 00000000 00:00 0 -744bc7200000-744bc7a00000 rw-p 00000000 00:00 0 -744bc7a00000-744bc7a08000 r--p 00000000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -744bc7a08000-744bc7a60000 r-xp 00008000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -744bc7a60000-744bc7a71000 r--p 00060000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -744bc7a71000-744bc7a72000 ---p 00071000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -744bc7a72000-744bc7a78000 r--p 00071000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -744bc7a78000-744bc7a79000 rw-p 00077000 103:03 4325444 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -744bc7a79000-744bc7c83000 rw-p 00000000 00:00 0 -744bc7c84000-744bc7cb0000 r--p 00000000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -744bc7cb0000-744bc7ce4000 r-xp 0002c000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -744bc7ce4000-744bc7cfe000 r--p 00060000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -744bc7cfe000-744bc7cff000 r--p 00079000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -744bc7cff000-744bc7d00000 rw-p 0007a000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -744bc7d00000-744bc7d04000 ---p 00000000 00:00 0 -744bc7d04000-744bc7e00000 rw-p 00000000 00:00 0 -744bc7e00000-744bc7e04000 ---p 00000000 00:00 0 -744bc7e04000-744bc7f00000 rw-p 00000000 00:00 0 -744bc7f00000-744bc7f04000 ---p 00000000 00:00 0 -744bc7f04000-744bc8000000 rw-p 00000000 00:00 0 -744bc8000000-744bc8021000 rw-p 00000000 00:00 0 -744bc8021000-744bcc000000 ---p 00000000 00:00 0 -744bcc000000-744bcc004000 ---p 00000000 00:00 0 -744bcc004000-744bcc100000 rw-p 00000000 00:00 0 -744bcc100000-744bcc104000 ---p 00000000 00:00 0 -744bcc104000-744bcc200000 rw-p 00000000 00:00 0 -744bcc200000-744bcc204000 ---p 00000000 00:00 0 -744bcc204000-744bcc300000 rw-p 00000000 00:00 0 -744bcc300000-744bcc304000 ---p 00000000 00:00 0 -744bcc304000-744bcc400000 rw-p 00000000 00:00 0 -744bcc400000-744bcc404000 ---p 00000000 00:00 0 -744bcc404000-744bcc500000 rw-p 00000000 00:00 0 -744bcc500000-744bcc504000 ---p 00000000 00:00 0 -744bcc504000-744bcc600000 rw-p 00000000 00:00 0 -744bcc600000-744bcd506000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive -744bcd50a000-744bcd50b000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -744bcd50b000-744bcd50c000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -744bcd50c000-744bcd50d000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -744bcd50d000-744bcd50e000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -744bcd50e000-744bcd50f000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -744bcd50f000-744bcd51a000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -744bcd51a000-744bcd523000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -744bcd523000-744bcd528000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -744bcd528000-744bcd529000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -744bcd529000-744bcd52b000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -744bcd52b000-744bcd52c000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -744bcd52c000-744bcd5fa000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -744bcd5fa000-744bcd5fb000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -744bcd5fb000-744bcd5fc000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -744bcd5fc000-744bcd5fd000 ---p 00000000 00:00 0 -744bcd5fd000-744bcd6fd000 rw-p 00000000 00:00 0 -744bcd6fd000-744bcd6fe000 ---p 00000000 00:00 0 -744bcd6fe000-744bcd7fe000 rw-p 00000000 00:00 0 -744bcd7fe000-744bcd7ff000 ---p 00000000 00:00 0 -744bcd7ff000-744bcd8ff000 rw-p 00000000 00:00 0 -744bcd8ff000-744bcd900000 ---p 00000000 00:00 0 -744bcd900000-744bcda00000 rw-p 00000000 00:00 0 -744bcda00000-744bd01d0000 rw-p 00000000 00:00 0 -744bd01d0000-744bd76f0000 ---p 00000000 00:00 0 -744bd76f0000-744bd7700000 rw-p 00000000 00:00 0 -744bd7700000-744bd7704000 ---p 00000000 00:00 0 -744bd7704000-744bd7800000 rw-p 00000000 00:00 0 -744bd7800000-744bd78fa000 rw-p 00000000 00:00 0 -744bd78fa000-744bd879e000 ---p 00000000 00:00 0 -744bd879e000-744bd87a0000 rw-p 00000000 00:00 0 -744bd87a0000-744bd87a1000 r--s 00000000 00:06 1017 /dev/nvidiactl -744bd87a1000-744bd87a3000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -744bd87a3000-744bd87a5000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -744bd87a5000-744bd87a6000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -744bd87a6000-744bd87a7000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -744bd87a7000-744bd87a8000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -744bd87a8000-744bd87af000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -744bd87af000-744bd87b5000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -744bd87b5000-744bd87b8000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -744bd87b8000-744bd87b9000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -744bd87b9000-744bd87ba000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -744bd87ba000-744bd87bb000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -744bd87bb000-744bd87bc000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -744bd87bc000-744bd87be000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -744bd87be000-744bd87bf000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -744bd87bf000-744bd87c0000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -744bd87c0000-744bd87c1000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -744bd87c1000-744bd87c2000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -744bd87c2000-744bd87c3000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -744bd87c3000-744bd87c4000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -744bd87c4000-744bd87c5000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -744bd87c5000-744bd87c6000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -744bd87c6000-744bd87c8000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -744bd87c8000-744bd87ce000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -744bd87ce000-744bd87d0000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -744bd87d0000-744bd87d1000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -744bd87d1000-744bd87d2000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -744bd87d2000-744bd87d4000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -744bd87d4000-744bd87db000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -744bd87db000-744bd87dd000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -744bd87dd000-744bd87de000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -744bd87de000-744bd87df000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -744bd87df000-744bd87e1000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -744bd87e1000-744bd87e8000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -744bd87e8000-744bd87ea000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -744bd87ea000-744bd87eb000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -744bd87eb000-744bd87ec000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -744bd87ec000-744bd87ef000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -744bd87ef000-744bd87fb000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -744bd87fb000-744bd87fe000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -744bd87fe000-744bd87ff000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -744bd87ff000-744bd8800000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -744bd8800000-744bd8a70000 rwxp 00000000 00:00 0 -744bd8a70000-744bdfd37000 ---p 00000000 00:00 0 -744bdfd37000-744bdffa7000 rwxp 00000000 00:00 0 -744bdffa7000-744be02c8000 ---p 00000000 00:00 0 -744be02c8000-744be0538000 rwxp 00000000 00:00 0 -744be0538000-744be7800000 ---p 00000000 00:00 0 -744be7800000-744beffb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules -744beffb5000-744beffb6000 rw-s 00000000 00:01 5128 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -744beffb6000-744beffb7000 rw-s 00000000 00:01 905529 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) -744beffb7000-744beffb9000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -744beffb9000-744beffbc000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -744beffbc000-744beffbd000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -744beffbd000-744beffbe000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -744beffbe000-744beffbf000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -744beffbf000-744beffc3000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -744beffc3000-744beffce000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -744beffce000-744beffd2000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -744beffd2000-744beffd3000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -744beffd3000-744beffd4000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -744beffd4000-744beffd5000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -744beffd5000-744beffd8000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -744beffd8000-744beffd9000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -744beffd9000-744beffda000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -744beffda000-744beffdb000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -744beffdb000-744beffdd000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -744beffdd000-744beffe4000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -744beffe4000-744beffe6000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -744beffe6000-744beffe7000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -744beffe7000-744beffe8000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -744beffe8000-744beffec000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -744beffec000-744befff9000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -744befff9000-744befffc000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -744befffc000-744befffd000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -744befffd000-744befffe000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -744befffe000-744beffff000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -744beffff000-744bf0000000 rw-p 00000000 00:00 0 -744bf0000000-744bf05c5000 rw-p 00000000 00:00 0 -744bf05c5000-744bf4000000 ---p 00000000 00:00 0 -744bf4000000-744bf4001000 rw-s 00000000 00:01 905528 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -744bf4001000-744bf4003000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -744bf4003000-744bf4005000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -744bf4005000-744bf4007000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -744bf4007000-744bf4008000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -744bf4008000-744bf4009000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -744bf4009000-744bf4014000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -744bf4014000-744bf4028000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -744bf4028000-744bf4031000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -744bf4031000-744bf4032000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -744bf4032000-744bf4033000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -744bf4033000-744bf4071000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -744bf4071000-744bf4072000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -744bf4072000-744bf4073000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -744bf4073000-744bf4074000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -744bf4074000-744bf48fd000 rw-p 00000000 00:00 0 -744bf48fd000-744bf48fe000 ---p 00000000 00:00 0 -744bf48fe000-744bf49fe000 rw-p 00000000 00:00 0 -744bf49fe000-744bf49ff000 ---p 00000000 00:00 0 -744bf49ff000-744bf4aff000 rw-p 00000000 00:00 0 -744bf4aff000-744bf4b00000 ---p 00000000 00:00 0 -744bf4b00000-744bf4c00000 rw-p 00000000 00:00 0 -744bf4c00000-744bf4cfa000 rw-p 00000000 00:00 0 -744bf4cfa000-744bf5b9e000 ---p 00000000 00:00 0 -744bf5b9e000-744bf5ba0000 rw-p 00000000 00:00 0 -744bf5ba0000-744bf5ba1000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -744bf5ba1000-744bf5ba3000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -744bf5ba3000-744bf5ba4000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -744bf5ba4000-744bf5ba5000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -744bf5ba5000-744bf5ba6000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -744bf5ba6000-744bf5bad000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache -744bf5bad000-744bf5bae000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -744bf5bae000-744bf5bb1000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -744bf5bb1000-744bf5bb2000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -744bf5bb2000-744bf5bb3000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -744bf5bb3000-744bf5bb4000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -744bf5bb4000-744bf5bb5000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -744bf5bb5000-744bf5bb8000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -744bf5bb8000-744bf5bbc000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -744bf5bbc000-744bf5bbe000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -744bf5bbe000-744bf5bbf000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -744bf5bbf000-744bf5bc0000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -744bf5bc0000-744bf5bc1000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -744bf5bc1000-744bf5bc3000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -744bf5bc3000-744bf5bc4000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -744bf5bc4000-744bf5bc5000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -744bf5bc5000-744bf5bc6000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -744bf5bc6000-744bf652f000 rw-p 00000000 00:00 0 -744bf652f000-744bf6615000 ---p 00000000 00:00 0 -744bf6615000-744bf661a000 rw-p 00000000 00:00 0 -744bf661a000-744bf6700000 ---p 00000000 00:00 0 -744bf6700000-744bf6704000 ---p 00000000 00:00 0 -744bf6704000-744bf6800000 rw-p 00000000 00:00 0 -744bf6800000-744bf7b30000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -744bf7b30000-744bf7c00000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -744bf7c00000-744bf7c2e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -744bf7c2e000-744bf7ca4000 rw-p 00000000 00:00 0 -744bf7ca4000-744bf7ca5000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -744bf7ca5000-744bf7ca6000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -744bf7ca6000-744bf7ca7000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -744bf7ca7000-744bf7ca8000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -744bf7ca8000-744bf7ca9000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -744bf7ca9000-744bf7cb4000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -744bf7cb4000-744bf7cb5000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -744bf7cb5000-744bf7cb6000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -744bf7cb6000-744bf7cb7000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -744bf7cb7000-744bf7cf6000 rw-p 00000000 00:00 0 -744bf7cf6000-744bf7d16000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -744bf7d16000-744bf7d17000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -744bf7d17000-744bf7d18000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -744bf7d18000-744bf7d19000 rw-p 00000000 00:00 0 -744bf7d19000-744bf7d27000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -744bf7d27000-744bf7da3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -744bf7da3000-744bf7dfe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -744bf7dfe000-744bf7dff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -744bf7dff000-744bf7e00000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -744bf7e00000-744bf7e28000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -744bf7e28000-744bf7fbd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -744bf7fbd000-744bf8015000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -744bf8015000-744bf8016000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -744bf8016000-744bf801a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -744bf801a000-744bf801c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -744bf801c000-744bf8029000 rw-p 00000000 00:00 0 -744bf8029000-744bf802a000 rw-s 00000000 00:01 902416 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -744bf802a000-744bf802b000 r-xp 00000000 00:00 0 -744bf802b000-744bf802c000 rw-p 00000000 00:00 0 -744bf802c000-744bf802d000 r-xp 0005e000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -744bf802d000-744bf802e000 rw-p 00000000 00:00 0 -744bf802e000-744bf8041000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -744bf8041000-744bf8042000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -744bf8042000-744bf8043000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -744bf8043000-744bf8044000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -744bf8044000-744bf8062000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -744bf8062000-744bf8064000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -744bf8064000-744bf8065000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -744bf8065000-744bf8066000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -744bf8066000-744bf8067000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -744bf8067000-744bf8068000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -744bf8068000-744bf8069000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -744bf8069000-744bf806a000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -744bf806a000-744bf806e000 rw-p 00000000 00:00 0 -744bf806e000-744bf806f000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -744bf806f000-744bf8070000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -744bf8070000-744bf8071000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -744bf8071000-744bf8072000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -744bf8072000-744bf8073000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -744bf8073000-744bf8074000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -744bf8074000-744bf8075000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -744bf8075000-744bf8076000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -744bf8076000-744bf8077000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -744bf8077000-744bf8078000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -744bf8078000-744bf807a000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -744bf807a000-744bf808b000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -744bf808b000-744bf8091000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -744bf8091000-744bf8092000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -744bf8092000-744bf8093000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -744bf8093000-744bf8094000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -744bf8094000-744bf809b000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -744bf809b000-744bf809c000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -744bf809c000-744bf809d000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -744bf809d000-744bf809e000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -744bf809e000-744bf80a3000 rw-p 00000000 00:00 0 -744bf80a3000-744bf80aa000 ---p 00000000 00:00 0 -744bf80aa000-744bf80b2000 rw-s 00000000 103:03 4325438 /tmp/hsperfdata_codex/77449 -744bf80b2000-744bf80b3000 ---p 00000000 00:00 0 -744bf80b3000-744bf80b4000 r--p 00000000 00:00 0 -744bf80b4000-744bf80c3000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -744bf80c3000-744bf80c4000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -744bf80c4000-744bf80c5000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -744bf80c5000-744bf80c7000 rw-p 00000000 00:00 0 -744bf80c7000-744bf80cb000 r--p 00000000 00:00 0 [vvar] -744bf80cb000-744bf80cd000 r-xp 00000000 00:00 0 [vdso] -744bf80cd000-744bf80cf000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -744bf80cf000-744bf80f9000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -744bf80f9000-744bf8104000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -744bf8104000-744bf8105000 ---p 00000000 00:00 0 -744bf8105000-744bf8107000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -744bf8107000-744bf8109000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7ffd7475d000-7ffd74780000 rw-p 00000000 00:00 0 [stack] -ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] -Total number of mappings: 719 - - -VM Arguments: -jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -java_command: jme3test.vulkan.VulkanHelperTest -java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 2 {product} {ergonomic} - uint G1ConcRefinementThreads = 8 {product} {ergonomic} - size_t G1HeapRegionSize = 4194304 {product} {ergonomic} - size_t InitialHeapSize = 524288000 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MarkStackSizeMax = 536870912 {product} {ergonomic} - size_t MaxHeapSize = 8388608000 {product} {ergonomic} - size_t MaxNewSize = 5033164800 {product} {ergonomic} - size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags foldmultilines=false - #1: stderr all=off uptime,level,tags foldmultilines=false - -Environment Variables: -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin -USERNAME=codex -SHELL=/bin/bash -DISPLAY=:1 -LANG=en_US.UTF-8 - -Active Locale: -LC_ALL=en_US.UTF-8 -LC_COLLATE=en_US.UTF-8 -LC_CTYPE=en_US.UTF-8 -LC_MESSAGES=en_US.UTF-8 -LC_MONETARY=en_US.UTF-8 -LC_NUMERIC=en_US.UTF-8 -LC_TIME=en_US.UTF-8 - -Signal Handlers: - SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked - SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - - -Periodic native trim disabled - ---------------- S Y S T E M --------------- - -OS: -DISTRIB_ID=Pop -DISTRIB_RELEASE=22.04 -DISTRIB_CODENAME=jammy -DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" -uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 -OS uptime: 0 days 15:09 hours -libc: glibc 2.35 NPTL 2.35 -rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k -load average: 1.73 1.04 1.12 - -/proc/meminfo: -MemTotal: 32767656 kB -MemFree: 19696668 kB -MemAvailable: 22349024 kB -Buffers: 331384 kB -Cached: 4282304 kB -SwapCached: 0 kB -Active: 10072868 kB -Inactive: 2105852 kB -Active(anon): 7594960 kB -Inactive(anon): 0 kB -Active(file): 2477908 kB -Inactive(file): 2105852 kB -Unevictable: 15148 kB -Mlocked: 16 kB -SwapTotal: 20970996 kB -SwapFree: 20970996 kB -Zswap: 0 kB -Zswapped: 0 kB -Dirty: 15100 kB -Writeback: 0 kB -AnonPages: 7580348 kB -Mapped: 1830520 kB -Shmem: 29636 kB -KReclaimable: 176052 kB -Slab: 355840 kB -SReclaimable: 176052 kB -SUnreclaim: 179788 kB -KernelStack: 20232 kB -PageTables: 51972 kB -SecPageTables: 0 kB -NFS_Unstable: 0 kB -Bounce: 0 kB -WritebackTmp: 0 kB -CommitLimit: 37354824 kB -Committed_AS: 13813280 kB -VmallocTotal: 34359738367 kB -VmallocUsed: 249800 kB -VmallocChunk: 0 kB -Percpu: 9152 kB -HardwareCorrupted: 0 kB -AnonHugePages: 0 kB -ShmemHugePages: 6144 kB -ShmemPmdMapped: 0 kB -FileHugePages: 0 kB -FilePmdMapped: 0 kB -Unaccepted: 0 kB -HugePages_Total: 0 -HugePages_Free: 0 -HugePages_Rsvd: 0 -HugePages_Surp: 0 -Hugepagesize: 2048 kB -Hugetlb: 0 kB -DirectMap4k: 796472 kB -DirectMap2M: 12736512 kB -DirectMap1G: 19922944 kB - -/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never -/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 -/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force -/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never - -Process Memory: -Virtual Size: 12252976K (peak: 12315664K) -Resident Set Size: 232084K (peak: 232084K) (anon: 114836K, file: 117248K, shmem: 0K) -Swapped out: 0K -C-Heap outstanding allocations: 58799K, retained: 8528K -glibc malloc tunables: (default) - -/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 -/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 -/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 -/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 - -container (cgroup) information: -container_type: cgroupv2 -cpu_cpuset_cpus: not supported -cpu_memory_nodes: not supported -active_processor_count: 8 -cpu_quota: not supported -cpu_period: not supported -cpu_shares: not supported -memory_limit_in_bytes: unlimited -memory_and_swap_limit_in_bytes: unlimited -memory_soft_limit_in_bytes: 0 -memory_usage_in_bytes: 5940604 k -memory_max_usage_in_bytes: not supported -rss_usage_in_bytes: 4078804 k -cache_usage_in_bytes: 1788376 k -memory_swap_current_in_bytes: 0 -memory_swap_max_limit_in_bytes: unlimited -maximum number of tasks: 38296 -current number of tasks: 302 - -Steal ticks since vm start: 0 -Steal ticks percentage since vm start: 0.000 - -CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c -CPU Model and flags from /proc/cpuinfo: -model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities - -Online cpus: 0-7 -Offline cpus: -BIOS frequency limitation: -Frequency switch latency (ns): 0 -Available cpu frequencies: -Current governor: powersave -Core performance/turbo boost: - -Memory: 4k page, physical 32767656k(22349024k free), swap 20970996k(20970996k free) -Page Sizes: 4k - -vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 - -END. diff --git a/hs_err_pid84545.log b/hs_err_pid84545.log deleted file mode 100644 index de478df0ec..0000000000 --- a/hs_err_pid84545.log +++ /dev/null @@ -1,1595 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGSEGV (0xb) at pc=0x0000732d79c5933a, pid=84545, tid=84592 -# -# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) -# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) -# Problematic frame: -# C [libjemalloc.so+0x5933a] -# -# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.84545) -# -# If you would like to submit a bug report, please visit: -# https://bugreport.java.com/bugreport/crash.jsp -# - ---------------- S U M M A R Y ------------ - -Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanTest - -Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS -Time: Thu Jun 26 22:31:30 2025 EDT elapsed time: 7.166298 seconds (0d 0h 0m 7s) - ---------------- T H R E A D --------------- - -Current thread is native thread - -Stack: [0x0000732d78bb2000,0x0000732d78cb2000], sp=0x0000732d78cb08d0, free space=1018k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libjemalloc.so+0x5933a] - -siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 - -Registers: -RAX=0x0000000000000000, RBX=0x0000000000000200, RCX=0x0000000000000000, RDX=0x0000732d79c78440 -RSP=0x0000732d78cb08d0, RBP=0x0000732d78cb0db0, RSI=0x0000000000000000, RDI=0x0000732d795c65b0 -R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x0000732d795c65f0 -R12=0x000000000000003e, R13=0x0000732d78cb0d70, R14=0x000000000000003e, R15=0x0000732d78cb0ad0 -RIP=0x0000732d79c5933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 - TRAPNO=0x000000000000000e - - -Top of Stack: (sp=0x0000732d78cb08d0) -0x0000732d78cb08d0: 0000732da44c43d0 0000732d78cb0960 -0x0000732d78cb08e0: 0000732d78cb0970 0000732daa5c6211 -0x0000732d78cb08f0: 0000000000000005 0000732da44c4588 -0x0000732d78cb0900: 0000000000000005 0000000000000000 -0x0000732d78cb0910: 0000000000000001 0000732da44c4060 -0x0000732d78cb0920: 0000732da44c4588 0000732da44c4060 -0x0000732d78cb0930: 0000000193d3f020 0000732da44c43d0 -0x0000732d78cb0940: 0000000000000000 6432333700000000 -0x0000732d78cb0950: 3035636300000000 d6dd233100000004 -0x0000732d78cb0960: 00000000ffffffff 0000000000000000 -0x0000732d78cb0970: 0000732daa20d4d0 0000732daa5b37c0 -0x0000732d78cb0980: 0000732d78cb09b0 0000732da9c78613 -0x0000732d78cb0990: 0000732d78cb0b88 0000732daa28849a -0x0000732d78cb09a0: 0000000000000000 0000732d78cb0aa0 -0x0000732d78cb09b0: 00000000fbad8001 0000000000000002 -0x0000732d78cb09c0: 0000732da44c4060 0000732d8a77e028 -0x0000732d78cb09d0: 0000732daa41cae8 0000000000000004 -0x0000732d78cb09e0: 0000732d78cb1b58 0000732daa5ccf71 -0x0000732d78cb09f0: 0000000000000005 0000000000000000 -0x0000732d78cb0a00: 0000732daa20d4d0 0000732daa2a53e0 -0x0000732d78cb0a10: 0000000000000000 0000732d78cb0e00 -0x0000732d78cb0a20: 0000732daa41caf8 0000000000000000 -0x0000732d78cb0a30: 0000732daa41cae8 0000732daa5cfdae -0x0000732d78cb0a40: 0000000000000001 000000000000006f -0x0000732d78cb0a50: 0000732d8a7307d0 0000000000000000 -0x0000732d78cb0a60: 0000732c80b80500 0000000000000000 -0x0000732d78cb0a70: 00000000000000ca 3a92cd60ea629989 -0x0000732d78cb0a80: 0000000000000213 0000732daa417300 -0x0000732d78cb0a90: 0000000000000000 0000000000000200 -0x0000732d78cb0aa0: 0000732d78cb0db0 000000000000003e -0x0000732d78cb0ab0: 0000732d78cb0d70 0000732d78cb0ad0 -0x0000732d78cb0ac0: 0000732c800024d0 0000732d79c592f8 - -Instructions: (pc=0x0000732d79c5933a) -0x0000732d79c5923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff -0x0000732d79c5924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 -0x0000732d79c5925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 -0x0000732d79c5926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c -0x0000732d79c5927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b -0x0000732d79c5928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 -0x0000732d79c5929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 -0x0000732d79c592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 -0x0000732d79c592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 -0x0000732d79c592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d -0x0000732d79c592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c -0x0000732d79c592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 -0x0000732d79c592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b -0x0000732d79c5930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 -0x0000732d79c5931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 -0x0000732d79c5932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 -0x0000732d79c5933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 -0x0000732d79c5934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c -0x0000732d79c5935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 -0x0000732d79c5936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 -0x0000732d79c5937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c -0x0000732d79c5938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 -0x0000732d79c5939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 -0x0000732d79c593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d -0x0000732d79c593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 -0x0000732d79c593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f -0x0000732d79c593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 -0x0000732d79c593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 -0x0000732d79c593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 -0x0000732d79c5940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff -0x0000732d79c5941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 -0x0000732d79c5942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 - - - ---------------- P R O C E S S --------------- - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x0000732d22000000-0x0000732d22d91000-0x0000732d22d91000), size 14225408, SharedBaseAddress: 0x0000732d22000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x0000732d23000000-0x0000732d63000000, reserved size: 1073741824 -Narrow klass base: 0x0000732d22000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - - -Heap: - garbage-first heap total reserved 8192000K, committed 28672K, used 13653K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 3 young (12288K), 1 survivors (4096K) - Metaspace used 22010K, committed 22336K, reserved 1114112K - class space used 2288K, committed 2432K, reserved 1048576K - -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|0x000000060c000000, 0x000000060c367620, 0x000000060c400000| 85%| O| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 -| 1|0x000000060c400000, 0x000000060c6be0b8, 0x000000060c800000| 68%| O| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 -| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 -| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 -| 4|0x000000060d000000, 0x000000060d1d0e28, 0x000000060d400000| 45%| E| |TAMS 0x000000060d000000| PB 0x000000060d000000| Complete | 0 -| 5|0x000000060d400000, 0x000000060d55ef70, 0x000000060d800000| 34%| S|CS|TAMS 0x000000060d400000| PB 0x000000060d400000| Complete | 0 -| 6|0x000000060d800000, 0x000000060dc00000, 0x000000060dc00000|100%| E|CS|TAMS 0x000000060d800000| PB 0x000000060d800000| Complete | 0 - -Card table byte_map: [0x0000732d8a800000,0x0000732d8b7a0000] _byte_map_base: 0x0000732d877a0000 - -Marking Bits: (CMBitMap*) 0x0000732da4059190 - Bits: [0x0000732d82a00000, 0x0000732d8a700000) - -Polling page: 0x0000732daa59f000 - -Metaspace: - -Usage: - Non-class: 19.26 MB used. - Class: 2.24 MB used. - Both: 21.49 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 19.44 MB ( 30%) committed, 1 nodes. - Class space: 1.00 GB reserved, 2.38 MB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 21.81 MB ( 2%) committed. - -Chunk freelists: - Non-Class: 11.98 MB - Class: 13.45 MB - Both: 25.44 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 27.12 MB -CDS: on - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 8388608. - - enlarge_chunks_in_place: 1. - - use_allocation_guard: 0. - - -Internal statistics: - -num_allocs_failed_limit: 0. -num_arena_births: 334. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 349. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 0. -num_chunks_taken_from_freelist: 687. -num_chunk_merges: 0. -num_chunk_splits: 435. -num_chunks_enlarged: 279. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=120032Kb used=679Kb max_used=679Kb free=119352Kb - bounds [0x0000732d942c8000, 0x0000732d94538000, 0x0000732d9b800000] -CodeHeap 'profiled nmethods': size=120028Kb used=2651Kb max_used=2651Kb free=117376Kb - bounds [0x0000732d8c800000, 0x0000732d8caa0000, 0x0000732d93d37000] -CodeHeap 'non-nmethods': size=5700Kb used=2459Kb max_used=2482Kb free=3240Kb - bounds [0x0000732d93d37000, 0x0000732d93fb7000, 0x0000732d942c8000] -CodeCache: size=245760Kb, used=5789Kb, max_used=5812Kb, free=239968Kb - total_blobs=3566, nmethods=2132, adapters=1341, full_count=0 -Compilation: enabled, stopped_count=0, restarted_count=0 - -Compilation events (20 events): -Event: 7.160 Thread 0x0000732da41405c0 2273 3 java.util.regex.Pattern::newCharProperty (39 bytes) -Event: 7.160 Thread 0x0000732da41405c0 nmethod 2273 0x0000732d8ca93e88 code [0x0000732d8ca94020, 0x0000732d8ca948c0] -Event: 7.160 Thread 0x0000732da41405c0 2268 3 java.util.regex.Pattern::nextEscaped (19 bytes) -Event: 7.160 Thread 0x0000732da41405c0 nmethod 2268 0x0000732d8ca94908 code [0x0000732d8ca94a20, 0x0000732d8ca94b58] -Event: 7.160 Thread 0x0000732da41405c0 2269 3 java.util.ArrayList$SubList::toArray (79 bytes) -Event: 7.160 Thread 0x0000732da41405c0 nmethod 2269 0x0000732d8ca94c08 code [0x0000732d8ca94d80, 0x0000732d8ca953f0] -Event: 7.160 Thread 0x0000732da41405c0 2270 3 java.lang.invoke.Invokers$Holder::linkToTargetMethod (10 bytes) -Event: 7.161 Thread 0x0000732da41405c0 nmethod 2270 0x0000732d8ca95488 code [0x0000732d8ca955c0, 0x0000732d8ca959d0] -Event: 7.161 Thread 0x0000732da41405c0 2271 3 java.util.regex.Pattern::qtype (39 bytes) -Event: 7.161 Thread 0x0000732da41405c0 nmethod 2271 0x0000732d8ca95a08 code [0x0000732d8ca95b60, 0x0000732d8ca95dc8] -Event: 7.161 Thread 0x0000732da41405c0 2266 3 javax.imageio.ImageReader::processImageUpdate (73 bytes) -Event: 7.161 Thread 0x0000732da41405c0 nmethod 2266 0x0000732d8ca95e08 code [0x0000732d8ca95f80, 0x0000732d8ca964f0] -Event: 7.161 Thread 0x0000732da41405c0 2276 3 java.lang.invoke.DirectMethodHandle::makeAllocator (132 bytes) -Event: 7.161 Thread 0x0000732da41405c0 nmethod 2276 0x0000732d8ca96508 code [0x0000732d8ca966a0, 0x0000732d8ca96b08] -Event: 7.163 Thread 0x0000732ce839beb0 nmethod 2256% 0x0000732d9436f808 code [0x0000732d9436f940, 0x0000732d943702c8] -Event: 7.163 Thread 0x0000732ce839beb0 2257 4 com.sun.imageio.plugins.png.PNGImageReader::paethPredictor (57 bytes) -Event: 7.164 Thread 0x0000732ce839beb0 nmethod 2257 0x0000732d94370308 code [0x0000732d94370400, 0x0000732d943704f8] -Event: 7.164 Thread 0x0000732ce839beb0 2275 4 java.lang.String::subSequence (7 bytes) -Event: 7.165 Thread 0x0000732da41405c0 2277 3 java.io.BufferedWriter::min (9 bytes) -Event: 7.166 Thread 0x0000732da41405c0 nmethod 2277 0x0000732d8ca96b88 code [0x0000732d8ca96ca0, 0x0000732d8ca96e00] - -GC Heap History (8 events): -Event: 6.261 GC heap before -{Heap before GC invocations=0 (full 0): - garbage-first heap total reserved 8192000K, committed 516096K, used 21627K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 6 young (24576K), 0 survivors (0K) - Metaspace used 16388K, committed 16640K, reserved 1114112K - class space used 1822K, committed 1920K, reserved 1048576K -} -Event: 6.272 GC heap after -{Heap after GC invocations=1 (full 1): - garbage-first heap total reserved 8192000K, committed 98304K, used 6293K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16388K, committed 16640K, reserved 1114112K - class space used 1822K, committed 1920K, reserved 1048576K -} -Event: 6.272 GC heap before -{Heap before GC invocations=1 (full 1): - garbage-first heap total reserved 8192000K, committed 98304K, used 6293K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16388K, committed 16640K, reserved 1114112K - class space used 1822K, committed 1920K, reserved 1048576K -} -Event: 6.284 GC heap after -{Heap after GC invocations=2 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 6293K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16388K, committed 16640K, reserved 1114112K - class space used 1822K, committed 1920K, reserved 1048576K -} -Event: 6.789 GC heap before -{Heap before GC invocations=2 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 14485K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 2 young (8192K), 0 survivors (0K) - Metaspace used 18736K, committed 19008K, reserved 1114112K - class space used 2041K, committed 2176K, reserved 1048576K -} -Event: 6.790 GC heap after -{Heap after GC invocations=3 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 7454K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 1 young (4096K), 1 survivors (4096K) - Metaspace used 18736K, committed 19008K, reserved 1114112K - class space used 2041K, committed 2176K, reserved 1048576K -} -Event: 6.861 GC heap before -{Heap before GC invocations=3 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 7454K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 2 young (8192K), 1 survivors (4096K) - Metaspace used 20171K, committed 20480K, reserved 1114112K - class space used 2173K, committed 2304K, reserved 1048576K -} -Event: 6.862 GC heap after -{Heap after GC invocations=4 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 7697K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 1 young (4096K), 1 survivors (4096K) - Metaspace used 20171K, committed 20480K, reserved 1114112K - class space used 2173K, committed 2304K, reserved 1048576K -} - -Dll operation events (12 events): -Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -Event: 0.028 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -Event: 0.030 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -Event: 0.077 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -Event: 0.128 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -Event: 0.134 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -Event: 0.231 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -Event: 0.233 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -Event: 0.259 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -Event: 0.327 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so - -Deoptimization events (20 events): -Event: 6.494 Thread 0x0000732da452cc50 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000732d94355db0 relative=0x0000000000000110 -Event: 6.494 Thread 0x0000732da452cc50 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000732d94355db0 method=jdk.internal.misc.Unsafe.allocateUninitializedArray(Ljava/lang/Class;I)Ljava/lang/Object; @ 51 c2 -Event: 6.494 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d94355db0 sp=0x0000732d78caf430 -Event: 6.494 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8abf9 sp=0x0000732d78caf3c8 mode 2 -Event: 6.507 Thread 0x0000732da452cc50 Uncommon trap: trap_request=0xffffff45 fr.pc=0x0000732d9434d8e4 relative=0x0000000000000ee4 -Event: 6.507 Thread 0x0000732da452cc50 Uncommon trap: reason=unstable_if action=reinterpret pc=0x0000732d9434d8e4 method=java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; @ 401 c2 -Event: 6.507 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d9434d8e4 sp=0x0000732d78cb0300 -Event: 6.507 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8abf9 sp=0x0000732d78cb0280 mode 2 -Event: 6.765 Thread 0x0000732da452cc50 Uncommon trap: trap_request=0xffffff76 fr.pc=0x0000732d9434e568 relative=0x00000000000001a8 -Event: 6.765 Thread 0x0000732da452cc50 Uncommon trap: reason=predicate action=maybe_recompile pc=0x0000732d9434e568 method=java.util.regex.Pattern$BmpCharPropertyGreedy.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 12 c2 -Event: 6.765 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d9434e568 sp=0x0000732d78cb00e0 -Event: 6.765 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8abf9 sp=0x0000732d78cb00b8 mode 2 -Event: 6.839 Thread 0x0000732da452cc50 Uncommon trap: trap_request=0xffffff6e fr.pc=0x0000732d94362168 relative=0x0000000000000148 -Event: 6.839 Thread 0x0000732da452cc50 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x0000732d94362168 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 -Event: 6.839 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d94362168 sp=0x0000732d78cb00a0 -Event: 6.839 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8abf9 sp=0x0000732d78cb0050 mode 2 -Event: 7.028 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d8ca29a9f sp=0x0000732d78caf7c0 -Event: 7.028 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8b30f sp=0x0000732d78caec00 mode 0 -Event: 7.030 Thread 0x0000732da452cc50 DEOPT PACKING pc=0x0000732d8c8b4bd4 sp=0x0000732d78caf790 -Event: 7.030 Thread 0x0000732da452cc50 DEOPT UNPACKING pc=0x0000732d93d8b30f sp=0x0000732d78caec48 mode 0 - -Classes loaded (20 events): -Event: 6.819 Loading class java/awt/image/PixelInterleavedSampleModel -Event: 6.819 Loading class java/awt/image/ComponentSampleModel -Event: 6.819 Loading class java/awt/image/ComponentSampleModel done -Event: 6.819 Loading class java/awt/image/PixelInterleavedSampleModel done -Event: 6.819 Loading class javax/imageio/ImageTypeSpecifier$Packed -Event: 6.819 Loading class javax/imageio/ImageTypeSpecifier$Packed done -Event: 6.820 Loading class java/awt/image/DataBufferByte -Event: 6.820 Loading class java/awt/image/DataBufferByte done -Event: 6.820 Loading class sun/awt/image/ByteInterleavedRaster -Event: 6.820 Loading class sun/awt/image/ByteComponentRaster -Event: 6.820 Loading class sun/awt/image/ByteComponentRaster done -Event: 6.820 Loading class sun/awt/image/ByteInterleavedRaster done -Event: 6.820 Loading class sun/awt/image/ShortComponentRaster -Event: 6.820 Loading class sun/awt/image/ShortComponentRaster done -Event: 6.904 Loading class java/util/function/LongFunction -Event: 6.904 Loading class java/util/function/LongFunction done -Event: 7.165 Loading class java/lang/Throwable$WrappedPrintStream -Event: 7.166 Loading class java/lang/Throwable$PrintStreamOrWriter -Event: 7.166 Loading class java/lang/Throwable$PrintStreamOrWriter done -Event: 7.166 Loading class java/lang/Throwable$WrappedPrintStream done - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (20 events): -Event: 0.618 Thread 0x0000732da46242b0 Exception (0x000000062a0b8978) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.229 Thread 0x0000732da46242b0 Exception (0x000000062a35ef78) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 6.256 Thread 0x0000732da46242b0 Exception (0x0000000629cc8990) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.300 Thread 0x0000732da402d0f0 Exception (0x000000060d99d498) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 6.311 Thread 0x0000732da402d0f0 Exception (0x000000060d9fc958) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.312 Thread 0x0000732da402d0f0 Exception (0x000000060da0aa68) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.494 Thread 0x0000732da452cc50 Exception (0x000000060d51fda0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] -Event: 6.765 Thread 0x0000732da452cc50 Exception (0x000000060d702e88) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.855 Thread 0x0000732da452cc50 Exception (0x000000060db93d20) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.860 Thread 0x0000732da452cc50 Exception (0x000000060dbbc810) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.901 Thread 0x0000732da452cc50 Exception (0x000000060d8c45d8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.901 Thread 0x0000732da452cc50 Exception (0x000000060d8c9f48) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.918 Thread 0x0000732da452cc50 Exception (0x000000060d981f48) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.919 Thread 0x0000732da452cc50 Exception (0x000000060d9947c0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.919 Thread 0x0000732da452cc50 Exception (0x000000060d9989b8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.919 Thread 0x0000732da452cc50 Exception (0x000000060d99c078) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.926 Thread 0x0000732da452cc50 Exception (0x000000060da002d8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.960 Thread 0x0000732da452cc50 Exception (0x000000060da50dd8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.966 Thread 0x0000732da452cc50 Exception (0x000000060da6b6a8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 6.984 Thread 0x0000732da452cc50 Exception (0x000000060daab778) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] - -VM Operations (20 events): -Event: 0.130 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.130 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.244 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.244 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.261 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.261 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.269 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.269 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.648 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.648 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 6.261 Executing VM operation: G1CollectFull (System.gc()) -Event: 6.272 Executing VM operation: G1CollectFull (System.gc()) done -Event: 6.272 Executing VM operation: G1CollectFull (System.gc()) -Event: 6.284 Executing VM operation: G1CollectFull (System.gc()) done -Event: 6.308 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 6.308 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 6.789 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 6.790 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 6.861 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 6.862 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done - -Memory protections (20 events): -Event: 0.016 Protecting memory [0x0000732d7a600000,0x0000732d7a604000] with protection modes 0 -Event: 0.016 Protecting memory [0x0000732d7a500000,0x0000732d7a504000] with protection modes 0 -Event: 0.016 Protecting memory [0x0000732d7a400000,0x0000732d7a404000] with protection modes 0 -Event: 0.016 Protecting memory [0x0000732d7a300000,0x0000732d7a304000] with protection modes 0 -Event: 0.024 Protecting memory [0x0000732d7a200000,0x0000732d7a204000] with protection modes 0 -Event: 0.025 Protecting memory [0x0000732d7a100000,0x0000732d7a104000] with protection modes 0 -Event: 0.056 Protecting memory [0x0000732d7a000000,0x0000732d7a004000] with protection modes 0 -Event: 0.282 Protecting memory [0x0000732d790b2000,0x0000732d790b6000] with protection modes 0 -Event: 0.283 Protecting memory [0x0000732d78fb2000,0x0000732d78fb6000] with protection modes 0 -Event: 0.286 Protecting memory [0x0000732d78eb2000,0x0000732d78eb6000] with protection modes 0 -Event: 0.286 Protecting memory [0x0000732d78db2000,0x0000732d78db6000] with protection modes 0 -Event: 0.328 Protecting memory [0x0000732d78cb2000,0x0000732d78cb6000] with protection modes 0 -Event: 0.554 Protecting memory [0x0000732d7a000000,0x0000732d7a004000] with protection modes 0 -Event: 0.646 Protecting memory [0x0000732d78bb2000,0x0000732d78bb6000] with protection modes 0 -Event: 0.675 Protecting memory [0x0000732d789b2000,0x0000732d789b6000] with protection modes 0 -Event: 6.235 Protecting memory [0x0000732d7a000000,0x0000732d7a004000] with protection modes 0 -Event: 6.316 Protecting memory [0x0000732d78bb2000,0x0000732d78bb6000] with protection modes 0 -Event: 6.316 Protecting memory [0x0000732daa100000,0x0000732daa104000] with protection modes 0 -Event: 6.782 Protecting memory [0x0000732d7a000000,0x0000732d7a004000] with protection modes 0 -Event: 7.155 Protecting memory [0x0000732d0bf00000,0x0000732d0bf04000] with protection modes 0 - -Nmethod flushes (20 events): -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c882b88 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c88e488 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c88e988 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c88ff88 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c890588 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c8de808 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c8ded88 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c8e0688 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c8f1008 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c916b08 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c91cf88 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c939288 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c946288 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c946588 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c949088 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c984c08 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c984f88 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c9acf08 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c9ad208 -Event: 6.276 Thread 0x0000732da412e2f0 flushing nmethod 0x0000732d8c9bd208 - -Events (20 events): -Event: 0.056 Thread 0x0000732da41405c0 Thread added: 0x0000732ce80a2a30 -Event: 0.282 Thread 0x0000732da402d0f0 Thread added: 0x0000732da461f430 -Event: 0.283 Thread 0x0000732da402d0f0 Thread added: 0x0000732da4620e10 -Event: 0.286 Thread 0x0000732da402d0f0 Thread added: 0x0000732da46231a0 -Event: 0.286 Thread 0x0000732da402d0f0 Thread added: 0x0000732da46242b0 -Event: 0.328 Thread 0x0000732da46242b0 Thread added: 0x0000732cbc043cf0 -Event: 0.548 Thread 0x0000732ce80a2a30 Thread exited: 0x0000732ce80a2a30 -Event: 0.554 Thread 0x0000732da46242b0 Thread added: 0x0000732cbc061540 -Event: 0.646 Thread 0x0000732da41405c0 Thread added: 0x0000732ce8301fc0 -Event: 0.675 Thread 0x0000732da46242b0 Thread added: 0x0000732cbc0bd030 -Event: 1.089 Thread 0x0000732ce8301fc0 Thread exited: 0x0000732ce8301fc0 -Event: 5.583 Thread 0x0000732cbc061540 Thread exited: 0x0000732cbc061540 -Event: 6.235 Thread 0x0000732da41405c0 Thread added: 0x0000732ce80862d0 -Event: 6.316 Thread 0x0000732da402d0f0 Thread added: 0x0000732da452cc50 -Event: 6.316 Thread 0x0000732da402d0f0 Thread exited: 0x0000732da402d0f0 -Event: 6.316 Thread 0x0000732da402d0f0 Thread added: 0x0000732da402d0f0 -Event: 6.457 Thread 0x0000732ce80862d0 Thread exited: 0x0000732ce80862d0 -Event: 6.782 Thread 0x0000732da452cc50 Thread added: 0x0000732c8057f230 -Event: 7.155 Thread 0x0000732da41405c0 Thread added: 0x0000732ce839beb0 -Event: 7.166 Thread 0x0000732da452cc50 Thread exited: 0x0000732da452cc50 - - -Dynamic libraries: -60c000000-60dc00000 rw-p 00000000 00:00 0 -60dc00000-800000000 ---p 00000000 00:00 0 -60f647cf9000-60f647cfa000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -60f647cfb000-60f647cfc000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -60f647cfc000-60f647cfd000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -60f655b23000-60f655b6c000 rw-p 00000000 00:00 0 [heap] -732c34000000-732c34075000 rw-p 00000000 00:00 0 -732c34075000-732c38000000 ---p 00000000 00:00 0 -732c38000000-732c38021000 rw-p 00000000 00:00 0 -732c38021000-732c3c000000 ---p 00000000 00:00 0 -732c40000000-732c40021000 rw-p 00000000 00:00 0 -732c40021000-732c44000000 ---p 00000000 00:00 0 -732c44000000-732c44021000 rw-p 00000000 00:00 0 -732c44021000-732c48000000 ---p 00000000 00:00 0 -732c4c000000-732c4c021000 rw-p 00000000 00:00 0 -732c4c021000-732c50000000 ---p 00000000 00:00 0 -732c50000000-732c50021000 rw-p 00000000 00:00 0 -732c50021000-732c54000000 ---p 00000000 00:00 0 -732c58000000-732c58021000 rw-p 00000000 00:00 0 -732c58021000-732c5c000000 ---p 00000000 00:00 0 -732c5c000000-732c5c021000 rw-p 00000000 00:00 0 -732c5c021000-732c60000000 ---p 00000000 00:00 0 -732c64000000-732c64021000 rw-p 00000000 00:00 0 -732c64021000-732c68000000 ---p 00000000 00:00 0 -732c68000000-732c680c8000 rw-p 00000000 00:00 0 -732c680c8000-732c6c000000 ---p 00000000 00:00 0 -732c70000000-732c70021000 rw-p 00000000 00:00 0 -732c70021000-732c74000000 ---p 00000000 00:00 0 -732c75000000-732c7b712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -732c7b712000-732c7bf30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -732c7bf30000-732c7bf76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -732c7bf76000-732c7bff2000 rw-p 00000000 00:00 0 -732c7c000000-732c7c021000 rw-p 00000000 00:00 0 -732c7c021000-732c80000000 ---p 00000000 00:00 0 -732c80000000-732c83148000 rw-p 00000000 00:00 0 -732c83148000-732c84000000 ---p 00000000 00:00 0 -732c88000000-732c88021000 rw-p 00000000 00:00 0 -732c88021000-732c8c000000 ---p 00000000 00:00 0 -732c8c000000-732c8c021000 rw-p 00000000 00:00 0 -732c8c021000-732c90000000 ---p 00000000 00:00 0 -732c94000000-732c94021000 rw-p 00000000 00:00 0 -732c94021000-732c98000000 ---p 00000000 00:00 0 -732c98000000-732c98021000 rw-p 00000000 00:00 0 -732c98021000-732c9c000000 ---p 00000000 00:00 0 -732ca0000000-732ca0021000 rw-p 00000000 00:00 0 -732ca0021000-732ca4000000 ---p 00000000 00:00 0 -732ca4000000-732ca4021000 rw-p 00000000 00:00 0 -732ca4021000-732ca8000000 ---p 00000000 00:00 0 -732cac000000-732cac021000 rw-p 00000000 00:00 0 -732cac021000-732cb0000000 ---p 00000000 00:00 0 -732cb0000000-732cb00c1000 rw-p 00000000 00:00 0 -732cb00c1000-732cb4000000 ---p 00000000 00:00 0 -732cb8000000-732cb8021000 rw-p 00000000 00:00 0 -732cb8021000-732cbc000000 ---p 00000000 00:00 0 -732cbc000000-732cbc171000 rw-p 00000000 00:00 0 -732cbc171000-732cc0000000 ---p 00000000 00:00 0 -732cc4000000-732cc4021000 rw-p 00000000 00:00 0 -732cc4021000-732cc8000000 ---p 00000000 00:00 0 -732cc8000000-732cc8021000 rw-p 00000000 00:00 0 -732cc8021000-732ccc000000 ---p 00000000 00:00 0 -732cd0000000-732cd0021000 rw-p 00000000 00:00 0 -732cd0021000-732cd4000000 ---p 00000000 00:00 0 -732cd4000000-732cd437e000 rw-p 00000000 00:00 0 -732cd437e000-732cd8000000 ---p 00000000 00:00 0 -732cdc000000-732cdc021000 rw-p 00000000 00:00 0 -732cdc021000-732ce0000000 ---p 00000000 00:00 0 -732ce0000000-732ce0021000 rw-p 00000000 00:00 0 -732ce0021000-732ce4000000 ---p 00000000 00:00 0 -732ce6400000-732ce6525000 r--p 00000000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -732ce6525000-732ce69e5000 r-xp 00125000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -732ce69e5000-732ce6b19000 r--p 005e5000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -732ce6b19000-732ce6b1a000 ---p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -732ce6b1a000-732ce6b7d000 r--p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -732ce6b7d000-732ce6b87000 rw-p 0077c000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -732ce6b87000-732ce6b98000 rw-p 00000000 00:00 0 -732ce6c00000-732ce6c01000 ---p 00000000 00:00 0 -732ce6c01000-732ce7401000 rw-p 00000000 00:00 0 -732ce7600000-732ce7601000 ---p 00000000 00:00 0 -732ce7601000-732ce7e01000 rw-p 00000000 00:00 0 -732ce8000000-732ce83a5000 rw-p 00000000 00:00 0 -732ce83a5000-732cec000000 ---p 00000000 00:00 0 -732cec000000-732cec686000 rw-p 00000000 00:00 0 -732cec686000-732cf0000000 ---p 00000000 00:00 0 -732cf0200000-732cf0201000 ---p 00000000 00:00 0 -732cf0201000-732cf0a01000 rw-p 00000000 00:00 0 -732cf0c00000-732cf0c01000 ---p 00000000 00:00 0 -732cf0c01000-732cf1401000 rw-p 00000000 00:00 0 -732cf1600000-732cf1601000 ---p 00000000 00:00 0 -732cf1601000-732cf1e01000 rw-p 00000000 00:00 0 -732cf2000000-732cf2cf5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -732cf2cf5000-732cf36d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -732cf36d8000-732cf3ae9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -732cf3ae9000-732cf3f6b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -732cf3f6b000-732cf3f73000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -732cf3f73000-732cf3f7e000 rw-p 00000000 00:00 0 -732cf4000000-732cf4021000 rw-p 00000000 00:00 0 -732cf4021000-732cf8000000 ---p 00000000 00:00 0 -732cf8000000-732cf8021000 rw-p 00000000 00:00 0 -732cf8021000-732cfc000000 ---p 00000000 00:00 0 -732cfc400000-732cfc401000 ---p 00000000 00:00 0 -732cfc401000-732cfcc01000 rw-p 00000000 00:00 0 -732cfce00000-732cfce2f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -732cfce2f000-732cfd502000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -732cfd502000-732cfd624000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -732cfd624000-732cfd635000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -732cfd635000-732cfd6b3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -732cfd6b3000-732cfd6c7000 rw-p 00000000 00:00 0 -732cfd800000-732cfd801000 ---p 00000000 00:00 0 -732cfd801000-732cfe001000 rw-p 00000000 00:00 0 -732cfe200000-732cfe201000 ---p 00000000 00:00 0 -732cfe201000-732cfea01000 rw-p 00000000 00:00 0 -732cfec00000-732cfec01000 ---p 00000000 00:00 0 -732cfec01000-732cff401000 rw-p 00000000 00:00 0 -732cff600000-732cff601000 ---p 00000000 00:00 0 -732cff601000-732cffe01000 rw-p 00000000 00:00 0 -732d00000000-732d00021000 rw-p 00000000 00:00 0 -732d00021000-732d04000000 ---p 00000000 00:00 0 -732d04000000-732d04021000 rw-p 00000000 00:00 0 -732d04021000-732d08000000 ---p 00000000 00:00 0 -732d08400000-732d08422000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -732d08422000-732d08621000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -732d08621000-732d08629000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -732d08629000-732d0862a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -732d0862a000-732d0862b000 rw-p 00000000 00:00 0 -732d08800000-732d08a00000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d08a00000-732d08a01000 ---p 00000000 00:00 0 -732d08a01000-732d09201000 rw-p 00000000 00:00 0 -732d09400000-732d09401000 ---p 00000000 00:00 0 -732d09401000-732d09c01000 rw-p 00000000 00:00 0 -732d09e00000-732d09e16000 r--p 00000000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -732d09e16000-732d09f06000 r-xp 00016000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -732d09f06000-732d09f79000 r--p 00106000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -732d09f79000-732d09f80000 r--p 00178000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -732d09f80000-732d09f87000 rw-p 0017f000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -732d09f87000-732d0a002000 rw-p 00000000 00:00 0 -732d0a200000-732d0a201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -732d0a201000-732d0a202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -732d0a202000-732d0be1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -732d0be1c000-732d0be1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -732d0be1d000-732d0be1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -732d0bf00000-732d0bf04000 ---p 00000000 00:00 0 -732d0bf04000-732d0c000000 rw-p 00000000 00:00 0 -732d0c000000-732d0c021000 rw-p 00000000 00:00 0 -732d0c021000-732d10000000 ---p 00000000 00:00 0 -732d10000000-732d10637000 rw-p 00000000 00:00 0 -732d10637000-732d14000000 ---p 00000000 00:00 0 -732d14040000-732d140c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d140c0000-732d141c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d141c0000-732d14200000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d14200000-732d14400000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d14400000-732d1448d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -732d1448d000-732d14bf5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -732d14bf5000-732d15482000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -732d15482000-732d154c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -732d154c4000-732d154c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -732d154c7000-732d154cd000 rw-p 00000000 00:00 0 -732d154e0000-732d15500000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d15500000-732d15600000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d15600000-732d157c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -732d157c4000-732d174c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -732d174c4000-732d17b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -732d17b39000-732d17b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -732d17b3a000-732d17d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -732d17d1a000-732d17d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -732d17d93000-732d17e08000 rw-p 00000000 00:00 0 -732d17e1f000-732d17e20000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d17e20000-732d17e60000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d17e60000-732d17e80000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d17e80000-732d17f00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d17f00000-732d18000000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d18000000-732d183f0000 rw-p 00000000 00:00 0 -732d183f0000-732d185b0000 rw-p 00000000 00:00 0 -732d185b0000-732d186f0000 rw-p 00000000 00:00 0 -732d186f0000-732d18710000 rw-p 00000000 00:00 0 -732d18710000-732d18730000 rw-p 00000000 00:00 0 -732d18730000-732d18770000 rw-p 00000000 00:00 0 -732d18770000-732d189f0000 rw-p 00000000 00:00 0 -732d189f0000-732d18a10000 rw-p 00000000 00:00 0 -732d18a10000-732d18a30000 rw-p 00000000 00:00 0 -732d18a30000-732d18a70000 rw-p 00000000 00:00 0 -732d18a70000-732d18af0000 rw-p 00000000 00:00 0 -732d18af0000-732d18cf0000 rw-p 00000000 00:00 0 -732d18cf0000-732d18d10000 rw-p 00000000 00:00 0 -732d18d10000-732d18d30000 rw-p 00000000 00:00 0 -732d18d30000-732d18d70000 rw-p 00000000 00:00 0 -732d18d70000-732d18ef0000 rw-p 00000000 00:00 0 -732d18ef0000-732d18ff0000 rw-p 00000000 00:00 0 -732d18ff0000-732d190f0000 rw-p 00000000 00:00 0 -732d190f0000-732d19160000 rw-p 00000000 00:00 0 -732d19160000-732d19200000 ---p 00000000 00:00 0 -732d19200000-732d19410000 rw-p 00000000 00:00 0 -732d19410000-732d1c000000 ---p 00000000 00:00 0 -732d1c000000-732d1c021000 rw-p 00000000 00:00 0 -732d1c021000-732d20000000 ---p 00000000 00:00 0 -732d20000000-732d20004000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d20004000-732d20017000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d20017000-732d20018000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d20018000-732d2001a000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d2001a000-732d2001b000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d2001b000-732d2005b000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d2005b000-732d2007b000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d2007b000-732d200bb000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d200bb000-732d201bb000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d201bb000-732d20400000 rw-s 00000000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) -732d20400000-732d2045b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -732d2045b000-732d207d9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -732d207d9000-732d20bd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -732d20bd5000-732d20c10000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -732d20c10000-732d20c15000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -732d20c15000-732d20c40000 rw-p 00000000 00:00 0 -732d20c40000-732d20c60000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d20c60000-732d20ca0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d20ca0000-732d20cc0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d20cc0000-732d20d00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d20d00000-732d20e00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d20e00000-732d20e6e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -732d20e6e000-732d213d5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -732d213d5000-732d21ae8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -732d21ae8000-732d21ae9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -732d21ae9000-732d21b26000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -732d21b26000-732d21b29000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -732d21b29000-732d21b2b000 rw-p 00000000 00:00 0 -732d21b2b000-732d21b2c000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d21b2c000-732d21b2d000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d21b2d000-732d21b40000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21b40000-732d21b60000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21b60000-732d21ba0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21ba0000-732d21bc0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21bc0000-732d21c00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21c00000-732d21c9a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -732d21c9a000-732d21dab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -732d21dab000-732d21e1a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -732d21e1a000-732d21e1b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -732d21e1b000-732d21e26000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -732d21e26000-732d21e29000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -732d21e29000-732d21e2c000 rw-p 00000000 00:00 0 -732d21e2c000-732d21e2d000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21e2d000-732d21e40000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21e40000-732d21e60000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21e60000-732d21ee0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21ee0000-732d21f60000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21f60000-732d21fa0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21fa0000-732d21fc0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d21fc0000-732d22000000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d22000000-732d22d91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa -732d22d91000-732d23000000 ---p 00000000 00:00 0 -732d23000000-732d23030000 rw-p 00000000 00:00 0 -732d23030000-732d23090000 rw-p 00000000 00:00 0 -732d23090000-732d230b0000 rw-p 00000000 00:00 0 -732d230b0000-732d23130000 rw-p 00000000 00:00 0 -732d23130000-732d23150000 rw-p 00000000 00:00 0 -732d23150000-732d231b0000 rw-p 00000000 00:00 0 -732d231b0000-732d231d0000 rw-p 00000000 00:00 0 -732d231d0000-732d23230000 rw-p 00000000 00:00 0 -732d23230000-732d23250000 rw-p 00000000 00:00 0 -732d23250000-732d23280000 ---p 00000000 00:00 0 -732d23280000-732d23290000 rw-p 00000000 00:00 0 -732d23290000-732d63000000 ---p 00000000 00:00 0 -732d63000000-732d63001000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d63001000-732d63014000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d63014000-732d63034000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d63034000-732d63074000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d63074000-732d631b5000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index -732d631b5000-732d631c6000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -732d631c6000-732d63208000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -732d63208000-732d63220000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -732d63220000-732d6322e000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -732d6322e000-732d63230000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -732d63230000-732d63234000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -732d63234000-732d63250000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -732d63250000-732d63256000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -732d63256000-732d63257000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -732d63257000-732d63259000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -732d63259000-732d6325a000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -732d6325a000-732d63264000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -732d63264000-732d6326e000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -732d6326e000-732d63275000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -732d63275000-732d6327e000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -732d6327e000-732d6327f000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -732d6327f000-732d6328b000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -732d6328b000-732d632ab000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -732d632ab000-732d632b7000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -732d632b7000-732d632c1000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -732d632c1000-732d632c2000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -732d632c2000-732d632d1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -732d632d1000-732d633b7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -732d633b7000-732d633f5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -732d633f5000-732d633f6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -732d633f6000-732d633f9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -732d633f9000-732d633ff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -732d633ff000-732d63400000 rw-p 00000000 00:00 0 -732d63400000-732d63493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -732d63493000-732d638e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -732d638e6000-732d63dfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -732d63dfc000-732d63e34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -732d63e34000-732d63e44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -732d63e44000-732d63e49000 rw-p 00000000 00:00 0 -732d63e49000-732d63e4a000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d63e4a000-732d63e4b000 rw-s 00044000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) -732d63e4b000-732d63e4c000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d63e4c000-732d63e50000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d63e50000-732d63e51000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d63e51000-732d63e53000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d63e53000-732d63e54000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d63e54000-732d63e55000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d63e55000-732d63e59000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d63e59000-732d63e5b000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d63e5b000-732d63e5d000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -732d63e5d000-732d63ec8000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -732d63ec8000-732d63ef0000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -732d63ef0000-732d63ef1000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -732d63ef1000-732d63ef2000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -732d63ef2000-732d63ef8000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -732d63ef8000-732d63f12000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -732d63f12000-732d63f19000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -732d63f19000-732d63f1a000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -732d63f1a000-732d63f1b000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -732d63f1b000-732d63f1c000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -732d63f1c000-732d63f1e000 rw-p 00000000 00:00 0 -732d63f1e000-732d63f51000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -732d63f51000-732d63fb4000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -732d63fb4000-732d63fd3000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -732d63fd3000-732d63ffe000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -732d63ffe000-732d63fff000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -732d63fff000-732d64000000 rw-p 00000000 00:00 0 -732d64000000-732d64021000 rw-p 00000000 00:00 0 -732d64021000-732d68000000 ---p 00000000 00:00 0 -732d68000000-732d68021000 rw-p 00000000 00:00 0 -732d68021000-732d6c000000 ---p 00000000 00:00 0 -732d6c000000-732d6c020000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d6c020000-732d6c033000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -732d6c033000-732d6c052000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -732d6c052000-732d6c05f000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -732d6c05f000-732d6c06f000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -732d6c06f000-732d6c070000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -732d6c070000-732d6c07b000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -732d6c07b000-732d6c0a9000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -732d6c0a9000-732d6c0bb000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -732d6c0bb000-732d6c0bc000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -732d6c0bc000-732d6c0bd000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -732d6c0bd000-732d6c0be000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -732d6c0be000-732d6c0ed000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -732d6c0ed000-732d6c1a9000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -732d6c1a9000-732d6c1f4000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -732d6c1f4000-732d6c202000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -732d6c202000-732d6c204000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -732d6c204000-732d6c205000 rw-p 00000000 00:00 0 -732d6c205000-732d6c26b000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -732d6c26b000-732d6c35e000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -732d6c35e000-732d6c3ea000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -732d6c3ea000-732d6c3fd000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -732d6c3fd000-732d6c3fe000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -732d6c3fe000-732d6cd22000 rw-p 00000000 00:00 0 -732d6cd22000-732d6cd26000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d6cd26000-732d6cd39000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d6cd39000-732d6cd4c000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -732d6cd4c000-732d6cdcb000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -732d6cdcb000-732d6cdf6000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -732d6cdf6000-732d6cdf7000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -732d6cdf7000-732d6cdfe000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -732d6cdfe000-732d6cdff000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -732d6cdff000-732d6ce00000 rw-p 00000000 00:00 0 -732d6ce00000-732d6d041000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -732d6d041000-732d6d062000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -732d6d062000-732d6d200000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -732d6d200000-732d6de00000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -732d6de00000-732d6ecab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -732d6ecab000-732d6ee10000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -732d6ee10000-732d6ee7e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -732d6ee7e000-732d6ee9c000 rw-p 00000000 00:00 0 -732d6ee9c000-732d6eea0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d6eea0000-732d6eea4000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -732d6eea4000-732d6eeb4000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -732d6eeb4000-732d6eeb7000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -732d6eeb7000-732d6eeb8000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -732d6eeb8000-732d6eeb9000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -732d6eeb9000-732d6eebd000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -732d6eebd000-732d6eed3000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -732d6eed3000-732d6eedd000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -732d6eedd000-732d6eede000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -732d6eede000-732d6eedf000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -732d6eedf000-732d6eee1000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -732d6eee1000-732d6eefa000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -732d6eefa000-732d6eefc000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -732d6eefc000-732d6eefd000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -732d6eefd000-732d6eefe000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -732d6eefe000-732d6eeff000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -732d6eeff000-732d6ef00000 ---p 00000000 00:00 0 -732d6ef00000-732d6f000000 rw-p 00000000 00:00 0 -732d6f000000-732d6f001000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d6f001000-732d6f002000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d6f002000-732d6f004000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -732d6f004000-732d6f00d000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -732d6f00d000-732d6f010000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -732d6f010000-732d6f011000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -732d6f011000-732d6f012000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -732d6f012000-732d6f013000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -732d6f013000-732d6f015000 rw-p 00000000 00:00 0 -732d6f015000-732d6f01e000 rw-s 00000000 00:01 670431 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -732d6f01e000-732d6f04d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -732d6f04d000-732d6f1a0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -732d6f1a0000-732d6f1f4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -732d6f1f4000-732d6f1f5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -732d6f1f5000-732d6f1fe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -732d6f1fe000-732d6f1ff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -732d6f1ff000-732d6f200000 rw-p 00000000 00:00 0 -732d6f200000-732d6f201000 ---p 00000000 00:00 0 -732d6f201000-732d6fa01000 rw-p 00000000 00:00 0 -732d6fa01000-732d6fa02000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d6fa02000-732d6fa0b000 rw-s 00000000 00:01 670430 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -732d6fa0b000-732d6fa0d000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -732d6fa0d000-732d6fa11000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -732d6fa11000-732d6fa13000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -732d6fa13000-732d6fa14000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -732d6fa14000-732d6fa15000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -732d6fa15000-732d6fa17000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -732d6fa17000-732d6fa1f000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -732d6fa1f000-732d6fa21000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -732d6fa21000-732d6fa22000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -732d6fa22000-732d6fa23000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -732d6fa23000-732d6fa25000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -732d6fa25000-732d6fa2d000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -732d6fa2d000-732d6fa2e000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -732d6fa2e000-732d6fa2f000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -732d6fa2f000-732d6fa30000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -732d6fa30000-732d6fa31000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -732d6fa31000-732d6fa35000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -732d6fa35000-732d6fa4a000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -732d6fa4a000-732d6fa50000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -732d6fa50000-732d6fa51000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -732d6fa51000-732d6fa53000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -732d6fa53000-732d6fa54000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -732d6fa54000-732d6fa57000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -732d6fa57000-732d6fa78000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -732d6fa78000-732d6fa84000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -732d6fa84000-732d6fa85000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -732d6fa85000-732d6fa86000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -732d6fa86000-732d6fa87000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -732d6fa87000-732d6fa95000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -732d6fa95000-732d6faa6000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -732d6faa6000-732d6fab4000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -732d6fab4000-732d6fab8000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -732d6fab8000-732d6fab9000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -732d6fab9000-732d6fac1000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -732d6fac1000-732d6fadf000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -732d6fadf000-732d6faec000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -732d6faec000-732d6faee000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -732d6faee000-732d6faef000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -732d6faef000-732d6faf3000 rw-p 00000000 00:00 0 -732d6faf3000-732d6faf5000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -732d6faf5000-732d6fafc000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -732d6fafc000-732d6fafd000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -732d6fafd000-732d6fafe000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -732d6fafe000-732d6faff000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -732d6faff000-732d6fb00000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -732d6fb00000-732d6fb04000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -732d6fb04000-732d6fb23000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -732d6fb23000-732d6fb2d000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -732d6fb2d000-732d6fb2e000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -732d6fb2e000-732d6fb30000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -732d6fb30000-732d6fb31000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -732d6fb31000-732d6fb3b000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -732d6fb3b000-732d6fbed000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -732d6fbed000-732d6fbfe000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -732d6fbfe000-732d6fbff000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -732d6fbff000-732d6fc00000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -732d6fc00000-732d70021000 rw-p 00000000 00:00 0 -732d70021000-732d74000000 ---p 00000000 00:00 0 -732d74000000-732d74021000 rw-p 00000000 00:00 0 -732d74021000-732d78000000 ---p 00000000 00:00 0 -732d78000000-732d78001000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d78001000-732d78003000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d78003000-732d78007000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d78007000-732d7800a000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -732d7800a000-732d78021000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -732d78021000-732d78025000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -732d78025000-732d78026000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -732d78026000-732d78027000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -732d78027000-732d7802c000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -732d7802c000-732d78037000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -732d78037000-732d7803b000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -732d7803b000-732d7803c000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -732d7803c000-732d7803d000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -732d7803d000-732d7803e000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -732d7803e000-732d7803f000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -732d7803f000-732d78040000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -732d78040000-732d78041000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -732d78041000-732d78042000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -732d78042000-732d78043000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -732d78043000-732d78044000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -732d78044000-732d78045000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -732d78045000-732d78046000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -732d78046000-732d78047000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -732d78047000-732d78048000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -732d78048000-732d7804b000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -732d7804b000-732d7804e000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -732d7804e000-732d7804f000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -732d7804f000-732d78050000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -732d78050000-732d78051000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -732d78051000-732d78052000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -732d78052000-732d78055000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -732d78055000-732d78058000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -732d78058000-732d78059000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -732d78059000-732d7805a000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -732d7805a000-732d7805b000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -732d7805b000-732d7805c000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -732d7805c000-732d78061000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -732d78061000-732d78067000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -732d78067000-732d7806a000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -732d7806a000-732d7806c000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -732d7806c000-732d7806d000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -732d7806d000-732d78070000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -732d78070000-732d78084000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -732d78084000-732d78088000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -732d78088000-732d78089000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -732d78089000-732d7808a000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -732d7808a000-732d7808b000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -732d7808b000-732d7808e000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -732d7808e000-732d78094000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -732d78094000-732d78096000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -732d78096000-732d78097000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -732d78097000-732d78098000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -732d78098000-732d780a3000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -732d780a3000-732d780ac000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -732d780ac000-732d780b1000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -732d780b1000-732d780b2000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -732d780b2000-732d780b4000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -732d780b4000-732d780b5000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -732d780b5000-732d780c5000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -732d780c5000-732d78123000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -732d78123000-732d7813f000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -732d7813f000-732d78140000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -732d78140000-732d78146000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -732d78146000-732d78147000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -732d78147000-732d7814f000 rw-p 00000000 00:00 0 -732d7814f000-732d781a0000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -732d781a0000-732d781fc000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -732d781fc000-732d78231000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -732d78231000-732d78232000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -732d78232000-732d78252000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -732d78252000-732d78272000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -732d78272000-732d78277000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -732d78277000-732d78279000 rw-p 00000000 00:00 0 -732d78279000-732d7827f000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -732d7827f000-732d782c9000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -732d782c9000-732d782f3000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -732d782f3000-732d782f4000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -732d782f4000-732d782f5000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -732d782f5000-732d782fc000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache -732d782fc000-732d782fd000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -732d782fd000-732d78300000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -732d78300000-732d78301000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -732d78301000-732d78302000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -732d78302000-732d78303000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -732d78303000-732d78304000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -732d78304000-732d78307000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -732d78307000-732d7830b000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -732d7830b000-732d7830d000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -732d7830d000-732d7830e000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -732d7830e000-732d7830f000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -732d7830f000-732d78310000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -732d78310000-732d78312000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -732d78312000-732d78313000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -732d78313000-732d78314000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -732d78314000-732d78315000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -732d78315000-732d78325000 r--p 00000000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -732d78325000-732d78346000 r-xp 00010000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -732d78346000-732d78382000 r--p 00031000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -732d78382000-732d78386000 r--p 0006c000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -732d78386000-732d78389000 rw-p 00070000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -732d78389000-732d783ac000 rw-p 00000000 00:00 0 -732d783ac000-732d783ad000 ---p 00000000 00:00 0 -732d783ad000-732d784ad000 rw-p 00000000 00:00 0 -732d784ad000-732d784ae000 ---p 00000000 00:00 0 -732d784ae000-732d785ae000 rw-p 00000000 00:00 0 -732d785ae000-732d785af000 ---p 00000000 00:00 0 -732d785af000-732d786af000 rw-p 00000000 00:00 0 -732d786af000-732d786b0000 ---p 00000000 00:00 0 -732d786b0000-732d787b0000 rw-p 00000000 00:00 0 -732d787b0000-732d787b1000 ---p 00000000 00:00 0 -732d787b1000-732d788b1000 rw-p 00000000 00:00 0 -732d788b1000-732d788b2000 ---p 00000000 00:00 0 -732d788b2000-732d789b2000 rw-p 00000000 00:00 0 -732d789b2000-732d789b6000 ---p 00000000 00:00 0 -732d789b6000-732d78ab2000 rw-p 00000000 00:00 0 -732d78ab2000-732d78bb2000 rw-s 00000000 00:01 983077 /SYSV00000000 (deleted) -732d78bb2000-732d78bb6000 ---p 00000000 00:00 0 -732d78bb6000-732d78cb2000 rw-p 00000000 00:00 0 -732d78cb2000-732d78cb6000 ---p 00000000 00:00 0 -732d78cb6000-732d78db2000 rw-p 00000000 00:00 0 -732d78db2000-732d78db6000 ---p 00000000 00:00 0 -732d78db6000-732d78eb2000 rw-p 00000000 00:00 0 -732d78eb2000-732d78eb6000 ---p 00000000 00:00 0 -732d78eb6000-732d78fb2000 rw-p 00000000 00:00 0 -732d78fb2000-732d78fb6000 ---p 00000000 00:00 0 -732d78fb6000-732d790b2000 rw-p 00000000 00:00 0 -732d790b2000-732d790b6000 ---p 00000000 00:00 0 -732d790b6000-732d791b2000 rw-p 00000000 00:00 0 -732d791b2000-732d791bf000 r--p 00000000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -732d791bf000-732d79248000 r-xp 0000d000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -732d79248000-732d79271000 r--p 00096000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -732d79271000-732d79272000 ---p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -732d79272000-732d79279000 r--p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -732d79279000-732d7927a000 rw-p 000c6000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -732d7927a000-732d793fb000 r-xp 00000000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -732d793fb000-732d793fc000 ---p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -732d793fc000-732d793fe000 r--p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -732d793fe000-732d793ff000 rw-p 00183000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -732d793ff000-732d79400000 rw-p 00000000 00:00 0 -732d79400000-732d79c00000 rw-p 00000000 00:00 0 -732d79c00000-732d79c08000 r--p 00000000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -732d79c08000-732d79c60000 r-xp 00008000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -732d79c60000-732d79c71000 r--p 00060000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -732d79c71000-732d79c72000 ---p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -732d79c72000-732d79c78000 r--p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -732d79c78000-732d79c79000 rw-p 00077000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -732d79c79000-732d79e83000 rw-p 00000000 00:00 0 -732d79e83000-732d79e85000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -732d79e85000-732d79e87000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -732d79e87000-732d79e88000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -732d79e88000-732d79e89000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -732d79e89000-732d79e8a000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -732d79e8a000-732d79e91000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -732d79e91000-732d79e97000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -732d79e97000-732d79e9a000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -732d79e9a000-732d79e9b000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -732d79e9b000-732d79e9c000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -732d79e9c000-732d79e9d000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -732d79e9d000-732d79e9e000 r--p 00000000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -732d79e9e000-732d79e9f000 r-xp 00001000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -732d79e9f000-732d79ebe000 r--p 00002000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -732d79ebe000-732d79ebf000 r--p 00020000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -732d79ebf000-732d79ec0000 rw-p 00021000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -732d79ec0000-732d79ed9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -732d79ed9000-732d79f65000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -732d79f65000-732d79ffa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -732d79ffa000-732d79ffb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -732d79ffb000-732d79ffc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -732d79ffc000-732d7a000000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -732d7a000000-732d7a004000 ---p 00000000 00:00 0 -732d7a004000-732d7a100000 rw-p 00000000 00:00 0 -732d7a100000-732d7a104000 ---p 00000000 00:00 0 -732d7a104000-732d7a200000 rw-p 00000000 00:00 0 -732d7a200000-732d7a204000 ---p 00000000 00:00 0 -732d7a204000-732d7a300000 rw-p 00000000 00:00 0 -732d7a300000-732d7a304000 ---p 00000000 00:00 0 -732d7a304000-732d7a400000 rw-p 00000000 00:00 0 -732d7a400000-732d7a404000 ---p 00000000 00:00 0 -732d7a404000-732d7a500000 rw-p 00000000 00:00 0 -732d7a500000-732d7a504000 ---p 00000000 00:00 0 -732d7a504000-732d7a600000 rw-p 00000000 00:00 0 -732d7a600000-732d7a604000 ---p 00000000 00:00 0 -732d7a604000-732d7a700000 rw-p 00000000 00:00 0 -732d7a700000-732d7a704000 ---p 00000000 00:00 0 -732d7a704000-732d7a800000 rw-p 00000000 00:00 0 -732d7a800000-732d7a804000 ---p 00000000 00:00 0 -732d7a804000-732d7a900000 rw-p 00000000 00:00 0 -732d7a900000-732d7a904000 ---p 00000000 00:00 0 -732d7a904000-732d7aa00000 rw-p 00000000 00:00 0 -732d7aa00000-732d7b906000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive -732d7b906000-732d7b908000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -732d7b908000-732d7b90e000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -732d7b90e000-732d7b910000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -732d7b910000-732d7b911000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -732d7b911000-732d7b912000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -732d7b912000-732d7b913000 r--p 00000000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -732d7b913000-732d7b91b000 r-xp 00001000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -732d7b91b000-732d7b91e000 r--p 00009000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -732d7b91e000-732d7b91f000 r--p 0000b000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -732d7b91f000-732d7b920000 rw-p 0000c000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -732d7b920000-732d7b925000 r--p 00000000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -732d7b925000-732d7b94e000 r-xp 00005000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -732d7b94e000-732d7b959000 r--p 0002e000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -732d7b959000-732d7b95a000 r--p 00038000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -732d7b95a000-732d7b95b000 rw-p 00039000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -732d7b95b000-732d7b95d000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -732d7b95d000-732d7b964000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -732d7b964000-732d7b966000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -732d7b966000-732d7b967000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -732d7b967000-732d7b968000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -732d7b968000-732d7b96c000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -732d7b96c000-732d7b979000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -732d7b979000-732d7b97c000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -732d7b97c000-732d7b97d000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -732d7b97d000-732d7b97e000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -732d7b97e000-732d7b97f000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -732d7b97f000-732d7b980000 rw-p 00000000 00:00 0 -732d7b980000-732d7b9f0000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -732d7b9f0000-732d7b9f1000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -732d7b9f1000-732d7b9f6000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -732d7b9f6000-732d7b9f8000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -732d7b9f8000-732d7b9fa000 rw-p 00000000 00:00 0 -732d7b9fa000-732d7b9fb000 ---p 00000000 00:00 0 -732d7b9fb000-732d7bafb000 rw-p 00000000 00:00 0 -732d7bafb000-732d7bafc000 ---p 00000000 00:00 0 -732d7bafc000-732d7bbfc000 rw-p 00000000 00:00 0 -732d7bbfc000-732d7bbfd000 ---p 00000000 00:00 0 -732d7bbfd000-732d7bcfd000 rw-p 00000000 00:00 0 -732d7bcfd000-732d7bcfe000 ---p 00000000 00:00 0 -732d7bcfe000-732d7bdfe000 rw-p 00000000 00:00 0 -732d7bdfe000-732d7c000000 rw-p 00000000 00:00 0 -732d7c000000-732d7c021000 rw-p 00000000 00:00 0 -732d7c021000-732d80000000 ---p 00000000 00:00 0 -732d80000000-732d80001000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d80001000-732d80002000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d80002000-732d80003000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d80003000-732d80004000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -732d80004000-732d80006000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -732d80006000-732d80007000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -732d80007000-732d80008000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -732d80008000-732d80009000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -732d80009000-732d800ca000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -732d800ca000-732d800cb000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -732d800cb000-732d800d6000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -732d800d6000-732d82600000 rw-p 00000000 00:00 0 -732d82600000-732d82601000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d82601000-732d82603000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d82603000-732d8260e000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -732d8260e000-732d82622000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -732d82622000-732d8262b000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -732d8262b000-732d8262c000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -732d8262c000-732d8262d000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -732d8262d000-732d826fb000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -732d826fb000-732d826fc000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -732d826fc000-732d826fd000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -732d826fd000-732d827fe000 rw-p 00000000 00:00 0 -732d827fe000-732d827ff000 ---p 00000000 00:00 0 -732d827ff000-732d828ff000 rw-p 00000000 00:00 0 -732d828ff000-732d82900000 ---p 00000000 00:00 0 -732d82900000-732d82a00000 rw-p 00000000 00:00 0 -732d82a00000-732d82a70000 rw-p 00000000 00:00 0 -732d82a70000-732d8a700000 ---p 00000000 00:00 0 -732d8a700000-732d8a701000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d8a701000-732d8a702000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d8a702000-732d8a703000 rw-s 00000000 00:06 1022 /dev/nvidia0 -732d8a703000-732d8a72f000 r--p 00000000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -732d8a72f000-732d8a763000 r-xp 0002c000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -732d8a763000-732d8a77d000 r--p 00060000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -732d8a77d000-732d8a77e000 r--p 00079000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -732d8a77e000-732d8a77f000 rw-p 0007a000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -732d8a77f000-732d8a80e000 rw-p 00000000 00:00 0 -732d8a80e000-732d8b7a0000 ---p 00000000 00:00 0 -732d8b7a0000-732d8b7a1000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d8b7a1000-732d8b7a2000 rw-s 00000000 00:06 1017 /dev/nvidiactl -732d8b7a2000-732d8b7a3000 r--s 00000000 00:06 1017 /dev/nvidiactl -732d8b7a3000-732d8b7a5000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -732d8b7a5000-732d8b7a8000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -732d8b7a8000-732d8b7a9000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -732d8b7a9000-732d8b7aa000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -732d8b7aa000-732d8b7ab000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -732d8b7ab000-732d8b7ae000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -732d8b7ae000-732d8b7ba000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -732d8b7ba000-732d8b7bd000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -732d8b7bd000-732d8b7be000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -732d8b7be000-732d8b7bf000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -732d8b7bf000-732d8b7fd000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -732d8b7fd000-732d8b7fe000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -732d8b7fe000-732d8b7ff000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -732d8b7ff000-732d8b800000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -732d8b800000-732d8b80e000 rw-p 00000000 00:00 0 -732d8b80e000-732d8c7a0000 ---p 00000000 00:00 0 -732d8c7a0000-732d8c7a1000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -732d8c7a1000-732d8c7a2000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -732d8c7a2000-732d8c7a3000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -732d8c7a3000-732d8c7a4000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -732d8c7a4000-732d8c7a5000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -732d8c7a5000-732d8c800000 rw-p 00000000 00:00 0 -732d8c800000-732d8caa0000 rwxp 00000000 00:00 0 -732d8caa0000-732d93d37000 ---p 00000000 00:00 0 -732d93d37000-732d93fb7000 rwxp 00000000 00:00 0 -732d93fb7000-732d942c8000 ---p 00000000 00:00 0 -732d942c8000-732d94538000 rwxp 00000000 00:00 0 -732d94538000-732d9b800000 ---p 00000000 00:00 0 -732d9b800000-732da3fb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules -732da3fb5000-732da3fb6000 rw-s 00000000 00:01 1028 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -732da3fb6000-732da3fb7000 rw-s 00000000 00:01 670429 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) -732da3fb7000-732da3fb9000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -732da3fb9000-732da3fbb000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -732da3fbb000-732da3fbd000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -732da3fbd000-732da3fbe000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -732da3fbe000-732da3fbf000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -732da3fbf000-732da4000000 rw-p 00000000 00:00 0 -732da4000000-732da4628000 rw-p 00000000 00:00 0 -732da4628000-732da8000000 ---p 00000000 00:00 0 -732da8000000-732da8002000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -732da8002000-732da8009000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -732da8009000-732da800b000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -732da800b000-732da800c000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -732da800c000-732da800d000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -732da800d000-732da8011000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -732da8011000-732da801c000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -732da801c000-732da8020000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -732da8020000-732da8021000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -732da8021000-732da8022000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -732da8022000-732da8023000 ---p 00000000 00:00 0 -732da8023000-732da8123000 rw-p 00000000 00:00 0 -732da8123000-732da8a2f000 rw-p 00000000 00:00 0 -732da8a2f000-732da8b15000 ---p 00000000 00:00 0 -732da8b15000-732da8b1b000 rw-p 00000000 00:00 0 -732da8b1b000-732da8c00000 ---p 00000000 00:00 0 -732da8c00000-732da9f30000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -732da9f30000-732daa000000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -732daa000000-732daa02e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -732daa02e000-732daa0a4000 rw-p 00000000 00:00 0 -732daa0a4000-732daa0a5000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -732daa0a5000-732daa0a6000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -732daa0a6000-732daa0a7000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -732daa0a7000-732daa0a8000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -732daa0a8000-732daa0a9000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -732daa0a9000-732daa0aa000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -732daa0aa000-732daa0ac000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -732daa0ac000-732daa0ad000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -732daa0ad000-732daa0ae000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -732daa0ae000-732daa0af000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -732daa0af000-732daa0b0000 rw-s 00000000 00:01 670428 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -732daa0b0000-732daa0b1000 rw-s 00000000 00:01 669127 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -732daa0b1000-732daa0b2000 r-xp 00000000 00:00 0 -732daa0b2000-732daa0b3000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -732daa0b3000-732daa0b4000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -732daa0b4000-732daa0b5000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -732daa0b5000-732daa0b6000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -732daa0b6000-732daa0b7000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -732daa0b7000-732daa0b8000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -732daa0b8000-732daa0bb000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -732daa0bb000-732daa0bc000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -732daa0bc000-732daa0bd000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -732daa0bd000-732daa0be000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -732daa0be000-732daa0c0000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -732daa0c0000-732daa0c7000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -732daa0c7000-732daa0c9000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -732daa0c9000-732daa0ca000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -732daa0ca000-732daa0cb000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -732daa0cb000-732daa0cc000 r-xp 00000000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -732daa0cc000-732daa0cd000 ---p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -732daa0cd000-732daa0ce000 r--p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -732daa0ce000-732daa0cf000 rw-p 00002000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -732daa0cf000-732daa0da000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -732daa0da000-732daa0db000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -732daa0db000-732daa0dc000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -732daa0dc000-732daa0dd000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -732daa0dd000-732daa0fd000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -732daa0fd000-732daa0fe000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -732daa0fe000-732daa0ff000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -732daa0ff000-732daa100000 rw-p 00000000 00:00 0 -732daa100000-732daa104000 ---p 00000000 00:00 0 -732daa104000-732daa200000 rw-p 00000000 00:00 0 -732daa200000-732daa228000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -732daa228000-732daa3bd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -732daa3bd000-732daa415000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -732daa415000-732daa416000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -732daa416000-732daa41a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -732daa41a000-732daa41c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -732daa41c000-732daa429000 rw-p 00000000 00:00 0 -732daa429000-732daa42b000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -732daa42b000-732daa42e000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -732daa42e000-732daa42f000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -732daa42f000-732daa430000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -732daa430000-732daa431000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -732daa431000-732daa432000 rw-p 00000000 00:00 0 -732daa432000-732daa433000 r-xp 0005e000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -732daa433000-732daa434000 rw-p 00000000 00:00 0 -732daa434000-732daa447000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -732daa447000-732daa448000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -732daa448000-732daa449000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -732daa449000-732daa44a000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -732daa44a000-732daa468000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -732daa468000-732daa46a000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -732daa46a000-732daa46b000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -732daa46b000-732daa479000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -732daa479000-732daa4f5000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -732daa4f5000-732daa550000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -732daa550000-732daa551000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -732daa551000-732daa552000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -732daa552000-732daa553000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -732daa553000-732daa554000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -732daa554000-732daa555000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -732daa555000-732daa556000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -732daa556000-732daa557000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -732daa557000-732daa55b000 rw-p 00000000 00:00 0 -732daa55b000-732daa55c000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -732daa55c000-732daa55d000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -732daa55d000-732daa55e000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -732daa55e000-732daa55f000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -732daa55f000-732daa560000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -732daa560000-732daa561000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -732daa561000-732daa562000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -732daa562000-732daa563000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -732daa563000-732daa564000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -732daa564000-732daa565000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -732daa565000-732daa567000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -732daa567000-732daa578000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -732daa578000-732daa57e000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -732daa57e000-732daa57f000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -732daa57f000-732daa580000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -732daa580000-732daa581000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -732daa581000-732daa588000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -732daa588000-732daa589000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -732daa589000-732daa58a000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -732daa58a000-732daa58b000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -732daa58b000-732daa590000 rw-p 00000000 00:00 0 -732daa590000-732daa597000 ---p 00000000 00:00 0 -732daa597000-732daa59f000 rw-s 00000000 103:03 4325444 /tmp/hsperfdata_codex/84545 -732daa59f000-732daa5a0000 ---p 00000000 00:00 0 -732daa5a0000-732daa5a1000 r--p 00000000 00:00 0 -732daa5a1000-732daa5b0000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -732daa5b0000-732daa5b1000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -732daa5b1000-732daa5b2000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -732daa5b2000-732daa5b4000 rw-p 00000000 00:00 0 -732daa5b4000-732daa5b8000 r--p 00000000 00:00 0 [vvar] -732daa5b8000-732daa5ba000 r-xp 00000000 00:00 0 [vdso] -732daa5ba000-732daa5bc000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -732daa5bc000-732daa5e6000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -732daa5e6000-732daa5f1000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -732daa5f1000-732daa5f2000 ---p 00000000 00:00 0 -732daa5f2000-732daa5f4000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -732daa5f4000-732daa5f6000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7ffda949e000-7ffda94c1000 rw-p 00000000 00:00 0 [stack] -ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] -Total number of mappings: 918 - - -VM Arguments: -jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -java_command: jme3test.vulkan.VulkanTest -java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 2 {product} {ergonomic} - uint G1ConcRefinementThreads = 8 {product} {ergonomic} - size_t G1HeapRegionSize = 4194304 {product} {ergonomic} - size_t InitialHeapSize = 524288000 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MarkStackSizeMax = 536870912 {product} {ergonomic} - size_t MaxHeapSize = 8388608000 {product} {ergonomic} - size_t MaxNewSize = 5033164800 {product} {ergonomic} - size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags foldmultilines=false - #1: stderr all=off uptime,level,tags foldmultilines=false - -Environment Variables: -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin -USERNAME=codex -SHELL=/bin/bash -DISPLAY=:1 -LANG=en_US.UTF-8 - -Active Locale: -LC_ALL=en_US.UTF-8 -LC_COLLATE=en_US.UTF-8 -LC_CTYPE=en_US.UTF-8 -LC_MESSAGES=en_US.UTF-8 -LC_MONETARY=en_US.UTF-8 -LC_NUMERIC=en_US.UTF-8 -LC_TIME=en_US.UTF-8 - -Signal Handlers: - SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked - SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - - -Periodic native trim disabled - ---------------- S Y S T E M --------------- - -OS: -DISTRIB_ID=Pop -DISTRIB_RELEASE=22.04 -DISTRIB_CODENAME=jammy -DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" -uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 -OS uptime: 0 days 15:13 hours -libc: glibc 2.35 NPTL 2.35 -rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k -load average: 0.91 0.86 0.83 - -/proc/meminfo: -MemTotal: 32767652 kB -MemFree: 20158592 kB -MemAvailable: 23559316 kB -Buffers: 346904 kB -Cached: 5008344 kB -SwapCached: 0 kB -Active: 8805936 kB -Inactive: 2811836 kB -Active(anon): 6296256 kB -Inactive(anon): 0 kB -Active(file): 2509680 kB -Inactive(file): 2811836 kB -Unevictable: 15204 kB -Mlocked: 72 kB -SwapTotal: 20970996 kB -SwapFree: 20970996 kB -Zswap: 0 kB -Zswapped: 0 kB -Dirty: 572 kB -Writeback: 0 kB -AnonPages: 6278416 kB -Mapped: 1825616 kB -Shmem: 33440 kB -KReclaimable: 197280 kB -Slab: 385420 kB -SReclaimable: 197280 kB -SUnreclaim: 188140 kB -KernelStack: 22604 kB -PageTables: 54152 kB -SecPageTables: 0 kB -NFS_Unstable: 0 kB -Bounce: 0 kB -WritebackTmp: 0 kB -CommitLimit: 37354820 kB -Committed_AS: 12297512 kB -VmallocTotal: 34359738367 kB -VmallocUsed: 252096 kB -VmallocChunk: 0 kB -Percpu: 9472 kB -HardwareCorrupted: 0 kB -AnonHugePages: 0 kB -ShmemHugePages: 6144 kB -ShmemPmdMapped: 0 kB -FileHugePages: 0 kB -FilePmdMapped: 0 kB -Unaccepted: 0 kB -HugePages_Total: 0 -HugePages_Free: 0 -HugePages_Rsvd: 0 -HugePages_Surp: 0 -Hugepagesize: 2048 kB -Hugetlb: 0 kB -DirectMap4k: 851768 kB -DirectMap2M: 15826944 kB -DirectMap1G: 16777216 kB - -/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never -/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 -/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force -/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never - -Process Memory: -Virtual Size: 13378692K (peak: 13378692K) -Resident Set Size: 308840K (peak: 308840K) (anon: 165076K, file: 142740K, shmem: 1024K) -Swapped out: 0K -C-Heap outstanding allocations: 84201K, retained: 22642K -glibc malloc tunables: (default) - -/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 -/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 -/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 -/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 - -container (cgroup) information: -container_type: cgroupv2 -cpu_cpuset_cpus: not supported -cpu_memory_nodes: not supported -active_processor_count: 8 -cpu_quota: not supported -cpu_period: not supported -cpu_shares: not supported -memory_limit_in_bytes: unlimited -memory_and_swap_limit_in_bytes: unlimited -memory_soft_limit_in_bytes: 0 -memory_usage_in_bytes: 5916456 k -memory_max_usage_in_bytes: not supported -rss_usage_in_bytes: 3510504 k -cache_usage_in_bytes: 2323036 k -memory_swap_current_in_bytes: 0 -memory_swap_max_limit_in_bytes: unlimited -maximum number of tasks: 38296 -current number of tasks: 318 - -Steal ticks since vm start: 0 -Steal ticks percentage since vm start: 0.000 - -CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c -CPU Model and flags from /proc/cpuinfo: -model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities - -Online cpus: 0-7 -Offline cpus: -BIOS frequency limitation: -Frequency switch latency (ns): 0 -Available cpu frequencies: -Current governor: powersave -Core performance/turbo boost: - -Memory: 4k page, physical 32767652k(23559316k free), swap 20970996k(20970996k free) -Page Sizes: 4k - -vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 - -END. diff --git a/hs_err_pid84939.log b/hs_err_pid84939.log deleted file mode 100644 index 987a5c0e9f..0000000000 --- a/hs_err_pid84939.log +++ /dev/null @@ -1,1600 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGSEGV (0xb) at pc=0x000071ffebc5933a, pid=84939, tid=84983 -# -# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) -# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) -# Problematic frame: -# C [libjemalloc.so+0x5933a] -# -# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.84939) -# -# If you would like to submit a bug report, please visit: -# https://bugreport.java.com/bugreport/crash.jsp -# - ---------------- S U M M A R Y ------------ - -Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanTest - -Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS -Time: Thu Jun 26 22:33:32 2025 EDT elapsed time: 3.277063 seconds (0d 0h 0m 3s) - ---------------- T H R E A D --------------- - -Current thread is native thread - -Stack: [0x000071ffe9f72000,0x000071ffea072000], sp=0x000071ffea0708d0, free space=1018k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libjemalloc.so+0x5933a] - -siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 - -Registers: -RAX=0x0000000000000000, RBX=0x0000000000000200, RCX=0x0000000000000000, RDX=0x000071ffebc78440 -RSP=0x000071ffea0708d0, RBP=0x000071ffea070db0, RSI=0x0000000000000000, RDI=0x000071ffeb5503b0 -R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x000071ffeb5503f0 -R12=0x000000000000003e, R13=0x000071ffea070d70, R14=0x000000000000003e, R15=0x000071ffea070ad0 -RIP=0x000071ffebc5933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 - TRAPNO=0x000000000000000e - - -Top of Stack: (sp=0x000071ffea0708d0) -0x000071ffea0708d0: 00007200144d8790 000071ffea070960 -0x000071ffea0708e0: 000071ffea070970 000072001c369211 -0x000071ffea0708f0: 0000000000000005 00007200144d8988 -0x000071ffea070900: 0000000000000005 0000000000000000 -0x000071ffea070910: 0000000000000001 00007200144d8420 -0x000071ffea070920: 00007200144d8988 00007200144d8420 -0x000071ffea070930: 0000000103d3f020 00007200144d8790 -0x000071ffea070940: 0000000000000000 3030323700000000 -0x000071ffea070950: 3033633500000000 87651f3e00000004 -0x000071ffea070960: 00000000ffffffff 0000000000000000 -0x000071ffea070970: 000072001c00d4d0 000072001c3567c0 -0x000071ffea070980: 000071ffea0709b0 000072001ba78613 -0x000071ffea070990: 000071ffea070b88 000072001c08849a -0x000071ffea0709a0: 0000000000000000 000071ffea070aa0 -0x000071ffea0709b0: 00000000fbad8001 0000000000000002 -0x000071ffea0709c0: 00007200144d8420 000071ffebfff028 -0x000071ffea0709d0: 000072001c21cae8 0000000000000004 -0x000071ffea0709e0: 000071ffea071b58 000072001c36ff71 -0x000071ffea0709f0: 0000000000000005 0000000000000000 -0x000071ffea070a00: 000072001c00d4d0 000072001c0a53e0 -0x000071ffea070a10: 0000000000000000 000071ffea070e00 -0x000071ffea070a20: 000072001c21caf8 0000000000000000 -0x000071ffea070a30: 000072001c21cae8 000072001c372dae -0x000071ffea070a40: 0000000000000001 000000000000006f -0x000071ffea070a50: 000071ffebfb17d0 0000000000000000 -0x000071ffea070a60: 000071fee4b8ab30 0000000000000000 -0x000071ffea070a70: 00000000000000ca 28fd47b5e1463e18 -0x000071ffea070a80: 0000000000000213 000072001c217300 -0x000071ffea070a90: 0000000000000000 0000000000000200 -0x000071ffea070aa0: 000071ffea070db0 000000000000003e -0x000071ffea070ab0: 000071ffea070d70 000071ffea070ad0 -0x000071ffea070ac0: 000071fee40024d0 000071ffebc592f8 - -Instructions: (pc=0x000071ffebc5933a) -0x000071ffebc5923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff -0x000071ffebc5924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 -0x000071ffebc5925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 -0x000071ffebc5926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c -0x000071ffebc5927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b -0x000071ffebc5928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 -0x000071ffebc5929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 -0x000071ffebc592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 -0x000071ffebc592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 -0x000071ffebc592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d -0x000071ffebc592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c -0x000071ffebc592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 -0x000071ffebc592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b -0x000071ffebc5930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 -0x000071ffebc5931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 -0x000071ffebc5932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 -0x000071ffebc5933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 -0x000071ffebc5934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c -0x000071ffebc5935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 -0x000071ffebc5936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 -0x000071ffebc5937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c -0x000071ffebc5938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 -0x000071ffebc5939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 -0x000071ffebc593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d -0x000071ffebc593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 -0x000071ffebc593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f -0x000071ffebc593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 -0x000071ffebc593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 -0x000071ffebc593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 -0x000071ffebc5940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff -0x000071ffebc5941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 -0x000071ffebc5942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 - - - ---------------- P R O C E S S --------------- - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x000071ff92000000-0x000071ff92d91000-0x000071ff92d91000), size 14225408, SharedBaseAddress: 0x000071ff92000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x000071ff93000000-0x000071ffd3000000, reserved size: 1073741824 -Narrow klass base: 0x000071ff92000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - - -Heap: - garbage-first heap total reserved 8192000K, committed 28672K, used 14249K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 3 young (12288K), 1 survivors (4096K) - Metaspace used 21955K, committed 22272K, reserved 1114112K - class space used 2290K, committed 2432K, reserved 1048576K - -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|0x000000060c000000, 0x000000060c3675b0, 0x000000060c400000| 85%| O| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 -| 1|0x000000060c400000, 0x000000060c6bd990, 0x000000060c800000| 68%| O| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 -| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 -| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 -| 4|0x000000060d000000, 0x000000060d255cf8, 0x000000060d400000| 58%| E| |TAMS 0x000000060d000000| PB 0x000000060d000000| Complete | 0 -| 5|0x000000060d400000, 0x000000060d56faa8, 0x000000060d800000| 35%| S|CS|TAMS 0x000000060d400000| PB 0x000000060d400000| Complete | 0 -| 6|0x000000060d800000, 0x000000060dc00000, 0x000000060dc00000|100%| E|CS|TAMS 0x000000060d800000| PB 0x000000060d800000| Complete | 0 - -Card table byte_map: [0x000071fffb800000,0x000071fffc7a0000] _byte_map_base: 0x000071fff87a0000 - -Marking Bits: (CMBitMap*) 0x0000720014059190 - Bits: [0x000071fff3a00000, 0x000071fffb700000) - -Polling page: 0x000072001c342000 - -Metaspace: - -Usage: - Non-class: 19.20 MB used. - Class: 2.24 MB used. - Both: 21.44 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 19.38 MB ( 30%) committed, 1 nodes. - Class space: 1.00 GB reserved, 2.38 MB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 21.75 MB ( 2%) committed. - -Chunk freelists: - Non-Class: 11.98 MB - Class: 13.45 MB - Both: 25.44 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 27.00 MB -CDS: on - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 8388608. - - enlarge_chunks_in_place: 1. - - use_allocation_guard: 0. - - -Internal statistics: - -num_allocs_failed_limit: 0. -num_arena_births: 334. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 348. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 0. -num_chunks_taken_from_freelist: 684. -num_chunk_merges: 0. -num_chunk_splits: 434. -num_chunks_enlarged: 278. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=120032Kb used=678Kb max_used=678Kb free=119353Kb - bounds [0x00007200042c8000, 0x0000720004538000, 0x000072000b800000] -CodeHeap 'profiled nmethods': size=120028Kb used=2602Kb max_used=2602Kb free=117425Kb - bounds [0x000071fffc800000, 0x000071fffca90000, 0x0000720003d37000] -CodeHeap 'non-nmethods': size=5700Kb used=2461Kb max_used=2477Kb free=3239Kb - bounds [0x0000720003d37000, 0x0000720003fb7000, 0x00007200042c8000] -CodeCache: size=245760Kb, used=5741Kb, max_used=5757Kb, free=240017Kb - total_blobs=3531, nmethods=2097, adapters=1341, full_count=0 -Compilation: enabled, stopped_count=0, restarted_count=0 - -Compilation events (20 events): -Event: 3.270 Thread 0x00007200141485b0 2245 ! 3 java.util.regex.Pattern::closure (276 bytes) -Event: 3.271 Thread 0x00007200141485b0 nmethod 2245 0x000071fffca84388 code [0x000071fffca84720, 0x000071fffca86048] -Event: 3.271 Thread 0x00007200141485b0 2243 3 java.util.regex.Pattern::expr (142 bytes) -Event: 3.272 Thread 0x00007200141485b0 nmethod 2243 0x000071fffca86108 code [0x000071fffca862e0, 0x000071fffca86d88] -Event: 3.272 Thread 0x00007200141485b0 2246 3 java.lang.String::split (148 bytes) -Event: 3.272 Thread 0x000072001413eeb0 nmethod 2220 0x0000720004370288 code [0x00007200043703c0, 0x0000720004370b00] -Event: 3.272 Thread 0x000072001413eeb0 2235 4 java.io.BufferedInputStream::implRead (112 bytes) -Event: 3.273 Thread 0x00007200141485b0 nmethod 2246 0x000071fffca86e08 code [0x000071fffca870e0, 0x000071fffca88668] -Event: 3.273 Thread 0x00007200141485b0 2247 3 java.lang.String::split (8 bytes) -Event: 3.273 Thread 0x00007200141485b0 nmethod 2247 0x000071fffca88708 code [0x000071fffca88820, 0x000071fffca88968] -Event: 3.273 Thread 0x00007200141485b0 2241 3 java.util.ArrayList::subList (20 bytes) -Event: 3.273 Thread 0x00007200141485b0 nmethod 2241 0x000071fffca88a08 code [0x000071fffca88b60, 0x000071fffca88f20] -Event: 3.273 Thread 0x00007200141485b0 2242 ! 3 java.util.regex.Pattern:: (144 bytes) -Event: 3.273 Thread 0x00007200141485b0 nmethod 2242 0x000071fffca88f88 code [0x000071fffca89200, 0x000071fffca8a2a0] -Event: 3.273 Thread 0x00007200141485b0 2236 3 javax.imageio.ImageReader::processImageUpdate (73 bytes) -Event: 3.274 Thread 0x00007200141485b0 nmethod 2236 0x000071fffca8a388 code [0x000071fffca8a500, 0x000071fffca8aa70] -Event: 3.276 Thread 0x000071ff585b1560 nmethod 2227% 0x0000720004370b88 code [0x0000720004370cc0, 0x0000720004371648] -Event: 3.276 Thread 0x000071ff585b1560 2228 4 com.sun.imageio.plugins.png.PNGImageReader::paethPredictor (57 bytes) -Event: 3.276 Thread 0x000071ff585b1560 nmethod 2228 0x0000720004371688 code [0x0000720004371780, 0x0000720004371878] -Event: 3.276 Thread 0x000071ff585b1560 2248 4 java.lang.String::subSequence (7 bytes) - -GC Heap History (8 events): -Event: 2.407 GC heap before -{Heap before GC invocations=0 (full 0): - garbage-first heap total reserved 8192000K, committed 516096K, used 21627K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 6 young (24576K), 0 survivors (0K) - Metaspace used 16354K, committed 16576K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.418 GC heap after -{Heap after GC invocations=1 (full 1): - garbage-first heap total reserved 8192000K, committed 98304K, used 6293K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16354K, committed 16576K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.418 GC heap before -{Heap before GC invocations=1 (full 1): - garbage-first heap total reserved 8192000K, committed 98304K, used 6293K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16354K, committed 16576K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.429 GC heap after -{Heap after GC invocations=2 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 6291K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16354K, committed 16576K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.891 GC heap before -{Heap before GC invocations=2 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 10387K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 2 young (8192K), 0 survivors (0K) - Metaspace used 18559K, committed 18880K, reserved 1114112K - class space used 2036K, committed 2176K, reserved 1048576K -} -Event: 2.892 GC heap after -{Heap after GC invocations=3 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 7362K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 1 young (4096K), 1 survivors (4096K) - Metaspace used 18559K, committed 18880K, reserved 1114112K - class space used 2036K, committed 2176K, reserved 1048576K -} -Event: 2.963 GC heap before -{Heap before GC invocations=3 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 11458K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 2 young (8192K), 1 survivors (4096K) - Metaspace used 19953K, committed 20288K, reserved 1114112K - class space used 2161K, committed 2304K, reserved 1048576K -} -Event: 2.964 GC heap after -{Heap after GC invocations=4 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 7762K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 1 young (4096K), 1 survivors (4096K) - Metaspace used 19953K, committed 20288K, reserved 1114112K - class space used 2161K, committed 2304K, reserved 1048576K -} - -Dll operation events (12 events): -Event: 0.002 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -Event: 0.019 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -Event: 0.019 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -Event: 0.030 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -Event: 0.032 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -Event: 0.079 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -Event: 0.140 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -Event: 0.146 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -Event: 0.247 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -Event: 0.250 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -Event: 0.277 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -Event: 0.364 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so - -Deoptimization events (20 events): -Event: 2.879 Thread 0x00007200146d5c30 Uncommon trap: trap_request=0xffffff76 fr.pc=0x000072000434d868 relative=0x00000000000001a8 -Event: 2.879 Thread 0x00007200146d5c30 Uncommon trap: reason=predicate action=maybe_recompile pc=0x000072000434d868 method=java.util.regex.Pattern$BmpCharPropertyGreedy.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 12 c2 -Event: 2.879 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x000072000434d868 sp=0x000071ffea0700e0 -Event: 2.879 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8abf9 sp=0x000071ffea0700b8 mode 2 -Event: 2.889 Thread 0x00007200146d5c30 Uncommon trap: trap_request=0xffffff45 fr.pc=0x0000720004339774 relative=0x0000000000000074 -Event: 2.889 Thread 0x00007200146d5c30 Uncommon trap: reason=unstable_if action=reinterpret pc=0x0000720004339774 method=java.util.logging.Logger.isLoggable(Ljava/util/logging/Level;)Z @ 13 c2 -Event: 2.889 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x0000720004339774 sp=0x000071ffea070580 -Event: 2.889 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8abf9 sp=0x000071ffea0704e0 mode 2 -Event: 2.953 Thread 0x00007200146d5c30 Uncommon trap: trap_request=0xffffff6e fr.pc=0x0000720004363fe8 relative=0x0000000000000148 -Event: 2.953 Thread 0x00007200146d5c30 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x0000720004363fe8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 -Event: 2.953 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x0000720004363fe8 sp=0x000071ffea0700a0 -Event: 2.953 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8abf9 sp=0x000071ffea070050 mode 2 -Event: 3.104 Thread 0x00007200146d5c30 Uncommon trap: trap_request=0xffffff6e fr.pc=0x0000720004366dc8 relative=0x0000000000000a68 -Event: 3.104 Thread 0x00007200146d5c30 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x0000720004366dc8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 -Event: 3.104 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x0000720004366dc8 sp=0x000071ffea06fa50 -Event: 3.104 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8abf9 sp=0x000071ffea06f9d0 mode 2 -Event: 3.142 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x000071fffca20d9f sp=0x000071ffea06f7c0 -Event: 3.142 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8b30f sp=0x000071ffea06ec00 mode 0 -Event: 3.144 Thread 0x00007200146d5c30 DEOPT PACKING pc=0x000071fffc8b3354 sp=0x000071ffea06f790 -Event: 3.144 Thread 0x00007200146d5c30 DEOPT UNPACKING pc=0x0000720003d8b30f sp=0x000071ffea06ec48 mode 0 - -Classes loaded (20 events): -Event: 2.936 Loading class java/awt/image/PixelInterleavedSampleModel -Event: 2.936 Loading class java/awt/image/ComponentSampleModel -Event: 2.936 Loading class java/awt/image/ComponentSampleModel done -Event: 2.936 Loading class java/awt/image/PixelInterleavedSampleModel done -Event: 2.936 Loading class javax/imageio/ImageTypeSpecifier$Packed -Event: 2.936 Loading class javax/imageio/ImageTypeSpecifier$Packed done -Event: 2.936 Loading class java/awt/image/DataBufferByte -Event: 2.936 Loading class java/awt/image/DataBufferByte done -Event: 2.936 Loading class sun/awt/image/ByteInterleavedRaster -Event: 2.937 Loading class sun/awt/image/ByteComponentRaster -Event: 2.937 Loading class sun/awt/image/ByteComponentRaster done -Event: 2.937 Loading class sun/awt/image/ByteInterleavedRaster done -Event: 2.937 Loading class sun/awt/image/ShortComponentRaster -Event: 2.937 Loading class sun/awt/image/ShortComponentRaster done -Event: 3.006 Loading class java/util/function/LongFunction -Event: 3.007 Loading class java/util/function/LongFunction done -Event: 3.276 Loading class java/lang/Throwable$WrappedPrintStream -Event: 3.276 Loading class java/lang/Throwable$PrintStreamOrWriter -Event: 3.276 Loading class java/lang/Throwable$PrintStreamOrWriter done -Event: 3.276 Loading class java/lang/Throwable$WrappedPrintStream done - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (20 events): -Event: 0.653 Thread 0x00007200146bc010 Exception (0x000000062a0b8990) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.361 Thread 0x00007200146bc010 Exception (0x000000062a354398) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 2.402 Thread 0x00007200146bc010 Exception (0x0000000629cbdfc0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.445 Thread 0x000072001402d0f0 Exception (0x000000060d9db038) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 2.455 Thread 0x000072001402d0f0 Exception (0x000000060da3a090) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.456 Thread 0x000072001402d0f0 Exception (0x000000060da481a0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.603 Thread 0x00007200146d5c30 Exception (0x000000060d561810) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] -Event: 2.878 Thread 0x00007200146d5c30 Exception (0x000000060d782020) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.965 Thread 0x00007200146d5c30 Exception (0x000000060d828358) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.969 Thread 0x00007200146d5c30 Exception (0x000000060d850bb8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.004 Thread 0x00007200146d5c30 Exception (0x000000060d949c48) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.004 Thread 0x00007200146d5c30 Exception (0x000000060d94f310) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.019 Thread 0x00007200146d5c30 Exception (0x000000060da07a10) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.020 Thread 0x00007200146d5c30 Exception (0x000000060da1a280) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.021 Thread 0x00007200146d5c30 Exception (0x000000060da1e220) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.021 Thread 0x00007200146d5c30 Exception (0x000000060da218e0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.027 Thread 0x00007200146d5c30 Exception (0x000000060da85e10) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.064 Thread 0x00007200146d5c30 Exception (0x000000060dad6840) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.070 Thread 0x00007200146d5c30 Exception (0x000000060daf1198) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.101 Thread 0x00007200146d5c30 Exception (0x000000060db30f38) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] - -VM Operations (20 events): -Event: 0.154 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.154 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.261 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.261 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.279 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.279 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.288 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.288 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.684 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.684 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 2.407 Executing VM operation: G1CollectFull (System.gc()) -Event: 2.418 Executing VM operation: G1CollectFull (System.gc()) done -Event: 2.418 Executing VM operation: G1CollectFull (System.gc()) -Event: 2.429 Executing VM operation: G1CollectFull (System.gc()) done -Event: 2.453 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 2.453 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 2.891 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 2.892 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 2.963 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 2.964 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done - -Memory protections (20 events): -Event: 0.017 Protecting memory [0x000071fff0500000,0x000071fff0504000] with protection modes 0 -Event: 0.018 Protecting memory [0x000071fff0400000,0x000071fff0404000] with protection modes 0 -Event: 0.018 Protecting memory [0x000071fff0300000,0x000071fff0304000] with protection modes 0 -Event: 0.026 Protecting memory [0x000071fff0200000,0x000071fff0204000] with protection modes 0 -Event: 0.027 Protecting memory [0x000071fff0100000,0x000071fff0104000] with protection modes 0 -Event: 0.059 Protecting memory [0x000071fff0000000,0x000071fff0004000] with protection modes 0 -Event: 0.302 Protecting memory [0x000071ffeae78000,0x000071ffeae7c000] with protection modes 0 -Event: 0.304 Protecting memory [0x000071ffead78000,0x000071ffead7c000] with protection modes 0 -Event: 0.306 Protecting memory [0x000071ffeac78000,0x000071ffeac7c000] with protection modes 0 -Event: 0.306 Protecting memory [0x000071ffeab78000,0x000071ffeab7c000] with protection modes 0 -Event: 0.364 Protecting memory [0x000071ffeaa78000,0x000071ffeaa7c000] with protection modes 0 -Event: 0.590 Protecting memory [0x000071fff0000000,0x000071fff0004000] with protection modes 0 -Event: 0.681 Protecting memory [0x000071ffea978000,0x000071ffea97c000] with protection modes 0 -Event: 0.710 Protecting memory [0x000071ffea778000,0x000071ffea77c000] with protection modes 0 -Event: 2.375 Protecting memory [0x000071ffea978000,0x000071ffea97c000] with protection modes 0 -Event: 2.432 Protecting memory [0x000071ffea072000,0x000071ffea076000] with protection modes 0 -Event: 2.460 Protecting memory [0x000071ffe9f72000,0x000071ffe9f76000] with protection modes 0 -Event: 2.460 Protecting memory [0x000072001a900000,0x000072001a904000] with protection modes 0 -Event: 2.896 Protecting memory [0x000071ffea978000,0x000071ffea97c000] with protection modes 0 -Event: 3.267 Protecting memory [0x000071ffea072000,0x000071ffea076000] with protection modes 0 - -Nmethod flushes (20 events): -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc88e088 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc88e488 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc88ff08 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc890a08 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc8da088 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc8da708 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc8dac88 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc8dcb08 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc918d08 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc929b08 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc92c788 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc940708 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc940a08 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc942988 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc943c08 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc949708 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc971088 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc972c88 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc9f5a08 -Event: 2.422 Thread 0x000072001412e2f0 flushing nmethod 0x000071fffc9f7808 - -Events (20 events): -Event: 0.302 Thread 0x000072001402d0f0 Thread added: 0x00007200146b6f00 -Event: 0.304 Thread 0x000072001402d0f0 Thread added: 0x00007200146b8b70 -Event: 0.306 Thread 0x000072001402d0f0 Thread added: 0x00007200146baf00 -Event: 0.306 Thread 0x000072001402d0f0 Thread added: 0x00007200146bc010 -Event: 0.364 Thread 0x00007200146bc010 Thread added: 0x000071ff2c043cc0 -Event: 0.585 Thread 0x000071ff5c0e0c80 Thread exited: 0x000071ff5c0e0c80 -Event: 0.590 Thread 0x00007200146bc010 Thread added: 0x000071ff2c061470 -Event: 0.681 Thread 0x00007200141485b0 Thread added: 0x000071ff58542f60 -Event: 0.710 Thread 0x00007200146bc010 Thread added: 0x000071ff2c0bc7a0 -Event: 1.148 Thread 0x000071ff58542f60 Thread exited: 0x000071ff58542f60 -Event: 2.375 Thread 0x00007200141485b0 Thread added: 0x000071ff5856e360 -Event: 2.432 Thread 0x000072001413eeb0 Thread added: 0x000071ff5c2d16e0 -Event: 2.460 Thread 0x000072001402d0f0 Thread added: 0x00007200146d5c30 -Event: 2.460 Thread 0x000072001402d0f0 Thread exited: 0x000072001402d0f0 -Event: 2.460 Thread 0x000072001402d0f0 Thread added: 0x000072001402d0f0 -Event: 2.570 Thread 0x000071ff5c2d16e0 Thread exited: 0x000071ff5c2d16e0 -Event: 2.878 Thread 0x000071ff5856e360 Thread exited: 0x000071ff5856e360 -Event: 2.896 Thread 0x00007200146d5c30 Thread added: 0x000071fee4582550 -Event: 3.267 Thread 0x00007200141485b0 Thread added: 0x000071ff585b1560 -Event: 3.277 Thread 0x00007200146d5c30 Thread exited: 0x00007200146d5c30 - - -Dynamic libraries: -60c000000-60dc00000 rw-p 00000000 00:00 0 -60dc00000-800000000 ---p 00000000 00:00 0 -5f35736ce000-5f35736cf000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -5f35736d0000-5f35736d1000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -5f35736d1000-5f35736d2000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -5f35785ae000-5f35785f7000 rw-p 00000000 00:00 0 [heap] -71fe9c000000-71fe9c075000 rw-p 00000000 00:00 0 -71fe9c075000-71fea0000000 ---p 00000000 00:00 0 -71fea4000000-71fea4021000 rw-p 00000000 00:00 0 -71fea4021000-71fea8000000 ---p 00000000 00:00 0 -71fea8000000-71fea8021000 rw-p 00000000 00:00 0 -71fea8021000-71feac000000 ---p 00000000 00:00 0 -71feb0000000-71feb0021000 rw-p 00000000 00:00 0 -71feb0021000-71feb4000000 ---p 00000000 00:00 0 -71feb4000000-71feb4021000 rw-p 00000000 00:00 0 -71feb4021000-71feb8000000 ---p 00000000 00:00 0 -71febc000000-71febc021000 rw-p 00000000 00:00 0 -71febc021000-71fec0000000 ---p 00000000 00:00 0 -71fec0000000-71fec0021000 rw-p 00000000 00:00 0 -71fec0021000-71fec4000000 ---p 00000000 00:00 0 -71fec8000000-71fec8021000 rw-p 00000000 00:00 0 -71fec8021000-71fecc000000 ---p 00000000 00:00 0 -71fecc000000-71fecc0c8000 rw-p 00000000 00:00 0 -71fecc0c8000-71fed0000000 ---p 00000000 00:00 0 -71fed4000000-71fed4021000 rw-p 00000000 00:00 0 -71fed4021000-71fed8000000 ---p 00000000 00:00 0 -71fed9000000-71fedf712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -71fedf712000-71fedff30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -71fedff30000-71fedff76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -71fedff76000-71fedfff2000 rw-p 00000000 00:00 0 -71fee0000000-71fee0021000 rw-p 00000000 00:00 0 -71fee0021000-71fee4000000 ---p 00000000 00:00 0 -71fee4000000-71fee7148000 rw-p 00000000 00:00 0 -71fee7148000-71fee8000000 ---p 00000000 00:00 0 -71feec000000-71feec050000 rw-p 00000000 00:00 0 -71feec050000-71fef0000000 ---p 00000000 00:00 0 -71fef0000000-71fef0021000 rw-p 00000000 00:00 0 -71fef0021000-71fef4000000 ---p 00000000 00:00 0 -71fef8000000-71fef8021000 rw-p 00000000 00:00 0 -71fef8021000-71fefc000000 ---p 00000000 00:00 0 -71fefc000000-71fefc021000 rw-p 00000000 00:00 0 -71fefc021000-71ff00000000 ---p 00000000 00:00 0 -71ff04000000-71ff04021000 rw-p 00000000 00:00 0 -71ff04021000-71ff08000000 ---p 00000000 00:00 0 -71ff08000000-71ff08021000 rw-p 00000000 00:00 0 -71ff08021000-71ff0c000000 ---p 00000000 00:00 0 -71ff10000000-71ff10021000 rw-p 00000000 00:00 0 -71ff10021000-71ff14000000 ---p 00000000 00:00 0 -71ff14000000-71ff14021000 rw-p 00000000 00:00 0 -71ff14021000-71ff18000000 ---p 00000000 00:00 0 -71ff1c000000-71ff1c021000 rw-p 00000000 00:00 0 -71ff1c021000-71ff20000000 ---p 00000000 00:00 0 -71ff20000000-71ff201bc000 rw-p 00000000 00:00 0 -71ff201bc000-71ff24000000 ---p 00000000 00:00 0 -71ff28000000-71ff28021000 rw-p 00000000 00:00 0 -71ff28021000-71ff2c000000 ---p 00000000 00:00 0 -71ff2c000000-71ff2c102000 rw-p 00000000 00:00 0 -71ff2c102000-71ff30000000 ---p 00000000 00:00 0 -71ff34000000-71ff34021000 rw-p 00000000 00:00 0 -71ff34021000-71ff38000000 ---p 00000000 00:00 0 -71ff38000000-71ff38021000 rw-p 00000000 00:00 0 -71ff38021000-71ff3c000000 ---p 00000000 00:00 0 -71ff40000000-71ff40021000 rw-p 00000000 00:00 0 -71ff40021000-71ff44000000 ---p 00000000 00:00 0 -71ff44000000-71ff44184000 rw-p 00000000 00:00 0 -71ff44184000-71ff48000000 ---p 00000000 00:00 0 -71ff4c000000-71ff4c021000 rw-p 00000000 00:00 0 -71ff4c021000-71ff50000000 ---p 00000000 00:00 0 -71ff50000000-71ff50021000 rw-p 00000000 00:00 0 -71ff50021000-71ff54000000 ---p 00000000 00:00 0 -71ff58000000-71ff585b8000 rw-p 00000000 00:00 0 -71ff585b8000-71ff5c000000 ---p 00000000 00:00 0 -71ff5c000000-71ff5c52c000 rw-p 00000000 00:00 0 -71ff5c52c000-71ff60000000 ---p 00000000 00:00 0 -71ff60600000-71ff60725000 r--p 00000000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -71ff60725000-71ff60be5000 r-xp 00125000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -71ff60be5000-71ff60d19000 r--p 005e5000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -71ff60d19000-71ff60d1a000 ---p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -71ff60d1a000-71ff60d7d000 r--p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -71ff60d7d000-71ff60d87000 rw-p 0077c000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -71ff60d87000-71ff60d98000 rw-p 00000000 00:00 0 -71ff60e00000-71ff60e01000 ---p 00000000 00:00 0 -71ff60e01000-71ff61601000 rw-p 00000000 00:00 0 -71ff61800000-71ff61801000 ---p 00000000 00:00 0 -71ff61801000-71ff62001000 rw-p 00000000 00:00 0 -71ff62200000-71ff62201000 ---p 00000000 00:00 0 -71ff62201000-71ff62a01000 rw-p 00000000 00:00 0 -71ff62c00000-71ff62c01000 ---p 00000000 00:00 0 -71ff62c01000-71ff63401000 rw-p 00000000 00:00 0 -71ff63600000-71ff63601000 ---p 00000000 00:00 0 -71ff63601000-71ff63e01000 rw-p 00000000 00:00 0 -71ff64000000-71ff64021000 rw-p 00000000 00:00 0 -71ff64021000-71ff68000000 ---p 00000000 00:00 0 -71ff68000000-71ff68021000 rw-p 00000000 00:00 0 -71ff68021000-71ff6c000000 ---p 00000000 00:00 0 -71ff6c200000-71ff6c201000 ---p 00000000 00:00 0 -71ff6c201000-71ff6ca01000 rw-p 00000000 00:00 0 -71ff6cc00000-71ff6cc2f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -71ff6cc2f000-71ff6d302000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -71ff6d302000-71ff6d424000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -71ff6d424000-71ff6d435000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -71ff6d435000-71ff6d4b3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -71ff6d4b3000-71ff6d4c7000 rw-p 00000000 00:00 0 -71ff6d600000-71ff6e2f5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -71ff6e2f5000-71ff6ecd8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -71ff6ecd8000-71ff6f0e9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -71ff6f0e9000-71ff6f56b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -71ff6f56b000-71ff6f573000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -71ff6f573000-71ff6f57e000 rw-p 00000000 00:00 0 -71ff6f600000-71ff6f601000 ---p 00000000 00:00 0 -71ff6f601000-71ff6fe01000 rw-p 00000000 00:00 0 -71ff70000000-71ff70021000 rw-p 00000000 00:00 0 -71ff70021000-71ff74000000 ---p 00000000 00:00 0 -71ff74000000-71ff74021000 rw-p 00000000 00:00 0 -71ff74021000-71ff78000000 ---p 00000000 00:00 0 -71ff78600000-71ff78601000 ---p 00000000 00:00 0 -71ff78601000-71ff78e01000 rw-p 00000000 00:00 0 -71ff79000000-71ff79001000 ---p 00000000 00:00 0 -71ff79001000-71ff79801000 rw-p 00000000 00:00 0 -71ff79a00000-71ff79a01000 ---p 00000000 00:00 0 -71ff79a01000-71ff7a201000 rw-p 00000000 00:00 0 -71ff7a400000-71ff7a401000 ---p 00000000 00:00 0 -71ff7a401000-71ff7ac01000 rw-p 00000000 00:00 0 -71ff7ae00000-71ff7ae8d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -71ff7ae8d000-71ff7b5f5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -71ff7b5f5000-71ff7be82000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -71ff7be82000-71ff7bec4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -71ff7bec4000-71ff7bec7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -71ff7bec7000-71ff7becd000 rw-p 00000000 00:00 0 -71ff7c000000-71ff7c021000 rw-p 00000000 00:00 0 -71ff7c021000-71ff80000000 ---p 00000000 00:00 0 -71ff80000000-71ff80637000 rw-p 00000000 00:00 0 -71ff80637000-71ff84000000 ---p 00000000 00:00 0 -71ff84000000-71ff84200000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ff84200000-71ff84201000 ---p 00000000 00:00 0 -71ff84201000-71ff84a01000 rw-p 00000000 00:00 0 -71ff84c00000-71ff84c5b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -71ff84c5b000-71ff84fd9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -71ff84fd9000-71ff853d5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -71ff853d5000-71ff85410000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -71ff85410000-71ff85415000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -71ff85415000-71ff85440000 rw-p 00000000 00:00 0 -71ff85480000-71ff85500000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff85500000-71ff85600000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff85600000-71ff857c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -71ff857c4000-71ff874c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -71ff874c4000-71ff87b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -71ff87b39000-71ff87b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -71ff87b3a000-71ff87d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -71ff87d1a000-71ff87d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -71ff87d93000-71ff87e08000 rw-p 00000000 00:00 0 -71ff87e2d000-71ff87e40000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff87e40000-71ff87e80000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff87e80000-71ff87ea0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff87ea0000-71ff87ee0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff87ee0000-71ff87f00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff87f00000-71ff88000000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff88000000-71ff883f0000 rw-p 00000000 00:00 0 -71ff883f0000-71ff885b0000 rw-p 00000000 00:00 0 -71ff885b0000-71ff886f0000 rw-p 00000000 00:00 0 -71ff886f0000-71ff88710000 rw-p 00000000 00:00 0 -71ff88710000-71ff88730000 rw-p 00000000 00:00 0 -71ff88730000-71ff88770000 rw-p 00000000 00:00 0 -71ff88770000-71ff889f0000 rw-p 00000000 00:00 0 -71ff889f0000-71ff88a10000 rw-p 00000000 00:00 0 -71ff88a10000-71ff88a30000 rw-p 00000000 00:00 0 -71ff88a30000-71ff88a70000 rw-p 00000000 00:00 0 -71ff88a70000-71ff88af0000 rw-p 00000000 00:00 0 -71ff88af0000-71ff88cf0000 rw-p 00000000 00:00 0 -71ff88cf0000-71ff88d10000 rw-p 00000000 00:00 0 -71ff88d10000-71ff88d30000 rw-p 00000000 00:00 0 -71ff88d30000-71ff88d70000 rw-p 00000000 00:00 0 -71ff88d70000-71ff88ef0000 rw-p 00000000 00:00 0 -71ff88ef0000-71ff88ff0000 rw-p 00000000 00:00 0 -71ff88ff0000-71ff890f0000 rw-p 00000000 00:00 0 -71ff890f0000-71ff89150000 rw-p 00000000 00:00 0 -71ff89150000-71ff89200000 ---p 00000000 00:00 0 -71ff89200000-71ff89410000 rw-p 00000000 00:00 0 -71ff89410000-71ff8c000000 ---p 00000000 00:00 0 -71ff8c000000-71ff8c021000 rw-p 00000000 00:00 0 -71ff8c021000-71ff90000000 ---p 00000000 00:00 0 -71ff90000000-71ff90200000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff90200000-71ff90201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -71ff90201000-71ff90202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -71ff90202000-71ff91e1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -71ff91e1c000-71ff91e1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -71ff91e1d000-71ff91e1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -71ff91e20000-71ff91e60000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff91e60000-71ff91e80000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff91e80000-71ff91f00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff91f00000-71ff92000000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ff92000000-71ff92d91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa -71ff92d91000-71ff93000000 ---p 00000000 00:00 0 -71ff93000000-71ff93030000 rw-p 00000000 00:00 0 -71ff93030000-71ff93090000 rw-p 00000000 00:00 0 -71ff93090000-71ff930b0000 rw-p 00000000 00:00 0 -71ff930b0000-71ff93130000 rw-p 00000000 00:00 0 -71ff93130000-71ff93150000 rw-p 00000000 00:00 0 -71ff93150000-71ff931b0000 rw-p 00000000 00:00 0 -71ff931b0000-71ff931d0000 rw-p 00000000 00:00 0 -71ff931d0000-71ff93230000 rw-p 00000000 00:00 0 -71ff93230000-71ff93250000 rw-p 00000000 00:00 0 -71ff93250000-71ff93280000 ---p 00000000 00:00 0 -71ff93280000-71ff93290000 rw-p 00000000 00:00 0 -71ff93290000-71ffd3000000 ---p 00000000 00:00 0 -71ffd300d000-71ffd304d000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd304d000-71ffd306d000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd306d000-71ffd3080000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd3080000-71ffd30c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd30c0000-71ffd3100000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd3100000-71ffd3200000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd3200000-71ffd326e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -71ffd326e000-71ffd37d5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -71ffd37d5000-71ffd3ee8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -71ffd3ee8000-71ffd3ee9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -71ffd3ee9000-71ffd3f26000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -71ffd3f26000-71ffd3f29000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -71ffd3f29000-71ffd3f2b000 rw-p 00000000 00:00 0 -71ffd3f2d000-71ffd3f4d000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd3f4d000-71ffd3f60000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd3f60000-71ffd3f80000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd3f80000-71ffd3fc0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd3fc0000-71ffd4000000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffd4000000-71ffd4021000 rw-p 00000000 00:00 0 -71ffd4021000-71ffd8000000 ---p 00000000 00:00 0 -71ffd8000000-71ffd8021000 rw-p 00000000 00:00 0 -71ffd8021000-71ffdc000000 ---p 00000000 00:00 0 -71ffdc000000-71ffdc080000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdc080000-71ffdc180000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdc180000-71ffdc200000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdc200000-71ffdc222000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -71ffdc222000-71ffdc421000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -71ffdc421000-71ffdc429000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -71ffdc429000-71ffdc42a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -71ffdc42a000-71ffdc42b000 rw-p 00000000 00:00 0 -71ffdc43a000-71ffdc45a000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdc45a000-71ffdc47a000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdc47a000-71ffdc6bf000 rw-s 00000000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) -71ffdc6bf000-71ffdc800000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index -71ffdc800000-71ffdc893000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -71ffdc893000-71ffdcce6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -71ffdcce6000-71ffdd1fc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -71ffdd1fc000-71ffdd234000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -71ffdd234000-71ffdd244000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -71ffdd244000-71ffdd249000 rw-p 00000000 00:00 0 -71ffdd24c000-71ffdd25f000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdd25f000-71ffdd272000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdd272000-71ffdd2b2000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdd2b2000-71ffdd2d2000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdd2d2000-71ffdd312000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdd312000-71ffdd332000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdd332000-71ffdd372000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdd372000-71ffdd374000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -71ffdd374000-71ffdd37d000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -71ffdd37d000-71ffdd380000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -71ffdd380000-71ffdd381000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -71ffdd381000-71ffdd382000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -71ffdd382000-71ffdd383000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -71ffdd383000-71ffdd385000 rw-p 00000000 00:00 0 -71ffdd385000-71ffdd396000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -71ffdd396000-71ffdd3d8000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -71ffdd3d8000-71ffdd3f0000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -71ffdd3f0000-71ffdd3fe000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -71ffdd3fe000-71ffdd400000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -71ffdd400000-71ffddd22000 rw-p 00000000 00:00 0 -71ffddd26000-71ffddd2a000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -71ffddd2a000-71ffddd3a000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -71ffddd3a000-71ffddd3d000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -71ffddd3d000-71ffddd3e000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -71ffddd3e000-71ffddd3f000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -71ffddd3f000-71ffddd43000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -71ffddd43000-71ffddd5f000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -71ffddd5f000-71ffddd65000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -71ffddd65000-71ffddd66000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -71ffddd66000-71ffddd68000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -71ffddd68000-71ffddd69000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -71ffddd69000-71ffddd6b000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -71ffddd6b000-71ffdddd6000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -71ffdddd6000-71ffdddfe000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -71ffdddfe000-71ffdddff000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -71ffdddff000-71ffdde00000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -71ffdde00000-71ffde041000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -71ffde041000-71ffde062000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -71ffde062000-71ffde200000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -71ffde200000-71ffdee00000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -71ffdee00000-71ffdfcab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -71ffdfcab000-71ffdfe10000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -71ffdfe10000-71ffdfe7e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -71ffdfe7e000-71ffdfe9c000 rw-p 00000000 00:00 0 -71ffdfe9e000-71ffdfea2000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdfea2000-71ffdfec2000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffdfec2000-71ffdfed1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -71ffdfed1000-71ffdffb7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -71ffdffb7000-71ffdfff5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -71ffdfff5000-71ffdfff6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -71ffdfff6000-71ffdfff9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -71ffdfff9000-71ffdffff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -71ffdffff000-71ffe0000000 rw-p 00000000 00:00 0 -71ffe0000000-71ffe0021000 rw-p 00000000 00:00 0 -71ffe0021000-71ffe4000000 ---p 00000000 00:00 0 -71ffe4000000-71ffe4021000 rw-p 00000000 00:00 0 -71ffe4021000-71ffe8000000 ---p 00000000 00:00 0 -71ffe8001000-71ffe8002000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe8002000-71ffe8003000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe8003000-71ffe8005000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe8005000-71ffe8006000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe8006000-71ffe8007000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe8007000-71ffe8011000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -71ffe8011000-71ffe801b000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -71ffe801b000-71ffe8022000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -71ffe8022000-71ffe802b000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -71ffe802b000-71ffe802c000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -71ffe802c000-71ffe8038000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -71ffe8038000-71ffe8058000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -71ffe8058000-71ffe8064000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -71ffe8064000-71ffe806e000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -71ffe806e000-71ffe806f000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -71ffe806f000-71ffe8075000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -71ffe8075000-71ffe808f000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -71ffe808f000-71ffe8096000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -71ffe8096000-71ffe8097000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -71ffe8097000-71ffe8098000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -71ffe8098000-71ffe8099000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -71ffe8099000-71ffe809b000 rw-p 00000000 00:00 0 -71ffe809b000-71ffe80ae000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -71ffe80ae000-71ffe80cd000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -71ffe80cd000-71ffe80da000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -71ffe80da000-71ffe80ea000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -71ffe80ea000-71ffe80eb000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -71ffe80eb000-71ffe80f6000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -71ffe80f6000-71ffe8124000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -71ffe8124000-71ffe8136000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -71ffe8136000-71ffe8137000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -71ffe8137000-71ffe8138000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -71ffe8138000-71ffe8139000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -71ffe8139000-71ffe814c000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -71ffe814c000-71ffe81cb000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -71ffe81cb000-71ffe81f6000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -71ffe81f6000-71ffe81f7000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -71ffe81f7000-71ffe81fe000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -71ffe81fe000-71ffe81ff000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -71ffe81ff000-71ffe8200000 rw-p 00000000 00:00 0 -71ffe8200000-71ffe8216000 r--p 00000000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -71ffe8216000-71ffe8306000 r-xp 00016000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -71ffe8306000-71ffe8379000 r--p 00106000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -71ffe8379000-71ffe8380000 r--p 00178000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -71ffe8380000-71ffe8387000 rw-p 0017f000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -71ffe8387000-71ffe8402000 rw-p 00000000 00:00 0 -71ffe8402000-71ffe8403000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe8403000-71ffe8404000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe8404000-71ffe8405000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe8405000-71ffe8406000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe8406000-71ffe8407000 rw-s 00044000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) -71ffe8407000-71ffe8408000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe8408000-71ffe840c000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe840c000-71ffe840d000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe840d000-71ffe840f000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe840f000-71ffe8410000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe8410000-71ffe8414000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe8414000-71ffe841d000 rw-s 00000000 00:01 668318 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -71ffe841d000-71ffe8450000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -71ffe8450000-71ffe84b3000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -71ffe84b3000-71ffe84d2000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -71ffe84d2000-71ffe84fd000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -71ffe84fd000-71ffe84fe000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -71ffe84fe000-71ffe84ff000 rw-p 00000000 00:00 0 -71ffe84ff000-71ffe8500000 ---p 00000000 00:00 0 -71ffe8500000-71ffe8600000 rw-p 00000000 00:00 0 -71ffe8600000-71ffe8601000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe8601000-71ffe8602000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe8602000-71ffe8604000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe8604000-71ffe8605000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe8605000-71ffe8606000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe8606000-71ffe8608000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe8608000-71ffe8611000 rw-s 00000000 00:01 668317 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -71ffe8611000-71ffe8615000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -71ffe8615000-71ffe862b000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -71ffe862b000-71ffe8635000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -71ffe8635000-71ffe8636000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -71ffe8636000-71ffe8637000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -71ffe8637000-71ffe8639000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -71ffe8639000-71ffe8652000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -71ffe8652000-71ffe8654000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -71ffe8654000-71ffe8655000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -71ffe8655000-71ffe8656000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -71ffe8656000-71ffe8657000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -71ffe8657000-71ffe865b000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe865b000-71ffe865f000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe865f000-71ffe8661000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -71ffe8661000-71ffe8665000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -71ffe8665000-71ffe8667000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -71ffe8667000-71ffe8668000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -71ffe8668000-71ffe8669000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -71ffe8669000-71ffe866b000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -71ffe866b000-71ffe8673000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -71ffe8673000-71ffe8675000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -71ffe8675000-71ffe8676000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -71ffe8676000-71ffe8677000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -71ffe8677000-71ffe86a6000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -71ffe86a6000-71ffe8762000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -71ffe8762000-71ffe87ad000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -71ffe87ad000-71ffe87bb000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -71ffe87bb000-71ffe87bd000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -71ffe87bd000-71ffe87be000 rw-p 00000000 00:00 0 -71ffe87be000-71ffe87c1000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -71ffe87c1000-71ffe87e2000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -71ffe87e2000-71ffe87ee000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -71ffe87ee000-71ffe87ef000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -71ffe87ef000-71ffe87f0000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -71ffe87f0000-71ffe87f1000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -71ffe87f1000-71ffe8857000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -71ffe8857000-71ffe894a000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -71ffe894a000-71ffe89d6000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -71ffe89d6000-71ffe89e9000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -71ffe89e9000-71ffe89ea000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -71ffe89ea000-71ffe89ec000 rw-p 00000000 00:00 0 -71ffe89ec000-71ffe8a1b000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -71ffe8a1b000-71ffe8b6e000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -71ffe8b6e000-71ffe8bc2000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -71ffe8bc2000-71ffe8bc3000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -71ffe8bc3000-71ffe8bcc000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -71ffe8bcc000-71ffe8bcd000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -71ffe8bcd000-71ffe8bce000 rw-p 00000000 00:00 0 -71ffe8bce000-71ffe8bdc000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -71ffe8bdc000-71ffe8bed000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -71ffe8bed000-71ffe8bfb000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -71ffe8bfb000-71ffe8bff000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -71ffe8bff000-71ffe8c00000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -71ffe8c00000-71ffe8c9a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -71ffe8c9a000-71ffe8dab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -71ffe8dab000-71ffe8e1a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -71ffe8e1a000-71ffe8e1b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -71ffe8e1b000-71ffe8e26000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -71ffe8e26000-71ffe8e29000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -71ffe8e29000-71ffe8e2c000 rw-p 00000000 00:00 0 -71ffe8e2c000-71ffe8e2e000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -71ffe8e2e000-71ffe8e36000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -71ffe8e36000-71ffe8e37000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -71ffe8e37000-71ffe8e38000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -71ffe8e38000-71ffe8e39000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -71ffe8e39000-71ffe8e3a000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -71ffe8e3a000-71ffe8e3e000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -71ffe8e3e000-71ffe8e53000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -71ffe8e53000-71ffe8e59000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -71ffe8e59000-71ffe8e5a000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -71ffe8e5a000-71ffe8e5c000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -71ffe8e5c000-71ffe8e5d000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -71ffe8e5d000-71ffe8e65000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -71ffe8e65000-71ffe8e83000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -71ffe8e83000-71ffe8e90000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -71ffe8e90000-71ffe8e92000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -71ffe8e92000-71ffe8e93000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -71ffe8e93000-71ffe8e97000 rw-p 00000000 00:00 0 -71ffe8e97000-71ffe8e99000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -71ffe8e99000-71ffe8ea0000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -71ffe8ea0000-71ffe8ea1000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -71ffe8ea1000-71ffe8ea2000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -71ffe8ea2000-71ffe8ea3000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -71ffe8ea3000-71ffe8ea4000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -71ffe8ea4000-71ffe8ea7000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -71ffe8ea7000-71ffe8ebe000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -71ffe8ebe000-71ffe8ec2000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -71ffe8ec2000-71ffe8ec3000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -71ffe8ec3000-71ffe8ec4000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -71ffe8ec4000-71ffe8ec8000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -71ffe8ec8000-71ffe8ee7000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -71ffe8ee7000-71ffe8ef1000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -71ffe8ef1000-71ffe8ef2000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -71ffe8ef2000-71ffe8ef4000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -71ffe8ef4000-71ffe8ef5000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -71ffe8ef5000-71ffe8efa000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -71ffe8efa000-71ffe8f05000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -71ffe8f05000-71ffe8f09000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -71ffe8f09000-71ffe8f0a000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -71ffe8f0a000-71ffe8f0b000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -71ffe8f0b000-71ffe8f0c000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -71ffe8f0c000-71ffe8f0d000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -71ffe8f0d000-71ffe8f0e000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -71ffe8f0e000-71ffe8f0f000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -71ffe8f0f000-71ffe8f10000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -71ffe8f10000-71ffe8f11000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -71ffe8f11000-71ffe8f12000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -71ffe8f12000-71ffe8f13000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -71ffe8f13000-71ffe8f14000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -71ffe8f14000-71ffe8f15000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -71ffe8f15000-71ffe8f16000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -71ffe8f16000-71ffe8f19000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -71ffe8f19000-71ffe8f1c000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -71ffe8f1c000-71ffe8f1d000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -71ffe8f1d000-71ffe8f1e000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -71ffe8f1e000-71ffe8f1f000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -71ffe8f1f000-71ffe8f20000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -71ffe8f20000-71ffe8f2a000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -71ffe8f2a000-71ffe8fdc000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -71ffe8fdc000-71ffe8fed000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -71ffe8fed000-71ffe8fee000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -71ffe8fee000-71ffe8fef000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -71ffe8fef000-71ffe8ff4000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -71ffe8ff4000-71ffe8ffa000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -71ffe8ffa000-71ffe8ffd000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -71ffe8ffd000-71ffe8fff000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -71ffe8fff000-71ffe9000000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -71ffe9000000-71ffe9001000 ---p 00000000 00:00 0 -71ffe9001000-71ffe9801000 rw-p 00000000 00:00 0 -71ffe9801000-71ffe9802000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffe9802000-71ffe9805000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -71ffe9805000-71ffe9808000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -71ffe9808000-71ffe9809000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -71ffe9809000-71ffe980a000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -71ffe980a000-71ffe980b000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -71ffe980b000-71ffe980c000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -71ffe980c000-71ffe980d000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -71ffe980d000-71ffe980e000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -71ffe980e000-71ffe980f000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -71ffe980f000-71ffe9810000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -71ffe9810000-71ffe9811000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -71ffe9811000-71ffe9814000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -71ffe9814000-71ffe9828000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -71ffe9828000-71ffe982c000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -71ffe982c000-71ffe982d000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -71ffe982d000-71ffe982e000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -71ffe982e000-71ffe982f000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -71ffe982f000-71ffe9832000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -71ffe9832000-71ffe9838000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -71ffe9838000-71ffe983a000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -71ffe983a000-71ffe983b000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -71ffe983b000-71ffe983c000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -71ffe983c000-71ffe984c000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -71ffe984c000-71ffe98aa000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -71ffe98aa000-71ffe98c6000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -71ffe98c6000-71ffe98c7000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -71ffe98c7000-71ffe98cd000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -71ffe98cd000-71ffe98ce000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -71ffe98ce000-71ffe98d6000 rw-p 00000000 00:00 0 -71ffe98d6000-71ffe9927000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -71ffe9927000-71ffe9983000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -71ffe9983000-71ffe99b8000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -71ffe99b8000-71ffe99b9000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -71ffe99b9000-71ffe99d9000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -71ffe99d9000-71ffe99f9000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -71ffe99f9000-71ffe99fe000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -71ffe99fe000-71ffe9a00000 rw-p 00000000 00:00 0 -71ffe9a00000-71ffe9e00000 rw-p 00000000 00:00 0 -71ffe9e00000-71ffe9e01000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe9e01000-71ffe9e02000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffe9e02000-71ffe9e04000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -71ffe9e04000-71ffe9e06000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -71ffe9e06000-71ffe9e07000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -71ffe9e07000-71ffe9e08000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -71ffe9e08000-71ffe9e09000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -71ffe9e09000-71ffe9e10000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -71ffe9e10000-71ffe9e16000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -71ffe9e16000-71ffe9e19000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -71ffe9e19000-71ffe9e1a000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -71ffe9e1a000-71ffe9e1b000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -71ffe9e1b000-71ffe9e1c000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -71ffe9e1c000-71ffe9e27000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -71ffe9e27000-71ffe9e30000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -71ffe9e30000-71ffe9e35000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -71ffe9e35000-71ffe9e36000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -71ffe9e36000-71ffe9e38000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -71ffe9e38000-71ffe9e39000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -71ffe9e39000-71ffe9e3a000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -71ffe9e3a000-71ffe9e3c000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -71ffe9e3c000-71ffe9e3d000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -71ffe9e3d000-71ffe9e3e000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -71ffe9e3e000-71ffe9e3f000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -71ffe9e3f000-71ffe9e45000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -71ffe9e45000-71ffe9e8f000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -71ffe9e8f000-71ffe9eb9000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -71ffe9eb9000-71ffe9eba000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -71ffe9eba000-71ffe9ebb000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -71ffe9ebb000-71ffe9ec2000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache -71ffe9ec2000-71ffe9ec3000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -71ffe9ec3000-71ffe9ec6000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -71ffe9ec6000-71ffe9ec7000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -71ffe9ec7000-71ffe9ec8000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -71ffe9ec8000-71ffe9ec9000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -71ffe9ec9000-71ffe9eca000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -71ffe9eca000-71ffe9ecd000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -71ffe9ecd000-71ffe9ed1000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -71ffe9ed1000-71ffe9ed3000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -71ffe9ed3000-71ffe9ed4000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -71ffe9ed4000-71ffe9ed5000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -71ffe9ed5000-71ffe9ed6000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -71ffe9ed6000-71ffe9ed8000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -71ffe9ed8000-71ffe9ed9000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -71ffe9ed9000-71ffe9eda000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -71ffe9eda000-71ffe9edb000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -71ffe9edb000-71ffe9eeb000 r--p 00000000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -71ffe9eeb000-71ffe9f0c000 r-xp 00010000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -71ffe9f0c000-71ffe9f48000 r--p 00031000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -71ffe9f48000-71ffe9f4c000 r--p 0006c000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -71ffe9f4c000-71ffe9f4f000 rw-p 00070000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -71ffe9f4f000-71ffe9f72000 rw-p 00000000 00:00 0 -71ffe9f72000-71ffe9f76000 ---p 00000000 00:00 0 -71ffe9f76000-71ffea072000 rw-p 00000000 00:00 0 -71ffea072000-71ffea076000 ---p 00000000 00:00 0 -71ffea076000-71ffea172000 rw-p 00000000 00:00 0 -71ffea172000-71ffea173000 ---p 00000000 00:00 0 -71ffea173000-71ffea273000 rw-p 00000000 00:00 0 -71ffea273000-71ffea274000 ---p 00000000 00:00 0 -71ffea274000-71ffea374000 rw-p 00000000 00:00 0 -71ffea374000-71ffea375000 ---p 00000000 00:00 0 -71ffea375000-71ffea475000 rw-p 00000000 00:00 0 -71ffea475000-71ffea476000 ---p 00000000 00:00 0 -71ffea476000-71ffea576000 rw-p 00000000 00:00 0 -71ffea576000-71ffea577000 ---p 00000000 00:00 0 -71ffea577000-71ffea677000 rw-p 00000000 00:00 0 -71ffea677000-71ffea678000 ---p 00000000 00:00 0 -71ffea678000-71ffea778000 rw-p 00000000 00:00 0 -71ffea778000-71ffea77c000 ---p 00000000 00:00 0 -71ffea77c000-71ffea878000 rw-p 00000000 00:00 0 -71ffea878000-71ffea978000 rw-s 00000000 00:01 983093 /SYSV00000000 (deleted) -71ffea978000-71ffea97c000 ---p 00000000 00:00 0 -71ffea97c000-71ffeaa78000 rw-p 00000000 00:00 0 -71ffeaa78000-71ffeaa7c000 ---p 00000000 00:00 0 -71ffeaa7c000-71ffeab78000 rw-p 00000000 00:00 0 -71ffeab78000-71ffeab7c000 ---p 00000000 00:00 0 -71ffeab7c000-71ffeac78000 rw-p 00000000 00:00 0 -71ffeac78000-71ffeac7c000 ---p 00000000 00:00 0 -71ffeac7c000-71ffead78000 rw-p 00000000 00:00 0 -71ffead78000-71ffead7c000 ---p 00000000 00:00 0 -71ffead7c000-71ffeae78000 rw-p 00000000 00:00 0 -71ffeae78000-71ffeae7c000 ---p 00000000 00:00 0 -71ffeae7c000-71ffeaf78000 rw-p 00000000 00:00 0 -71ffeaf78000-71ffeaf7a000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -71ffeaf7a000-71ffeaf7d000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -71ffeaf7d000-71ffeaf7e000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -71ffeaf7e000-71ffeaf7f000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -71ffeaf7f000-71ffeaf80000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -71ffeaf80000-71ffeaf82000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -71ffeaf82000-71ffeaf88000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -71ffeaf88000-71ffeaf8a000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -71ffeaf8a000-71ffeaf8b000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -71ffeaf8b000-71ffeaf8c000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -71ffeaf8c000-71ffeaf8d000 r--p 00000000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -71ffeaf8d000-71ffeaf8e000 r-xp 00001000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -71ffeaf8e000-71ffeafad000 r--p 00002000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -71ffeafad000-71ffeafae000 r--p 00020000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -71ffeafae000-71ffeafaf000 rw-p 00021000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -71ffeafaf000-71ffeafb0000 r--p 00000000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -71ffeafb0000-71ffeafb8000 r-xp 00001000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -71ffeafb8000-71ffeafbb000 r--p 00009000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -71ffeafbb000-71ffeafbc000 r--p 0000b000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -71ffeafbc000-71ffeafbd000 rw-p 0000c000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -71ffeafbd000-71ffeafc2000 r--p 00000000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -71ffeafc2000-71ffeafeb000 r-xp 00005000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -71ffeafeb000-71ffeaff6000 r--p 0002e000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -71ffeaff6000-71ffeaff7000 r--p 00038000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -71ffeaff7000-71ffeaff8000 rw-p 00039000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -71ffeaff8000-71ffeb005000 r--p 00000000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -71ffeb005000-71ffeb08e000 r-xp 0000d000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -71ffeb08e000-71ffeb0b7000 r--p 00096000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -71ffeb0b7000-71ffeb0b8000 ---p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -71ffeb0b8000-71ffeb0bf000 r--p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -71ffeb0bf000-71ffeb0c0000 rw-p 000c6000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -71ffeb0c0000-71ffeb241000 r-xp 00000000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -71ffeb241000-71ffeb242000 ---p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -71ffeb242000-71ffeb244000 r--p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -71ffeb244000-71ffeb245000 rw-p 00183000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -71ffeb245000-71ffeb246000 rw-p 00000000 00:00 0 -71ffeb246000-71ffeb25f000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -71ffeb25f000-71ffeb2eb000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -71ffeb2eb000-71ffeb380000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -71ffeb380000-71ffeb381000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -71ffeb381000-71ffeb382000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -71ffeb382000-71ffeb386000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -71ffeb386000-71ffeb3f6000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -71ffeb3f6000-71ffeb3f7000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -71ffeb3f7000-71ffeb3fc000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -71ffeb3fc000-71ffeb3fe000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -71ffeb3fe000-71ffeb400000 rw-p 00000000 00:00 0 -71ffeb400000-71ffebc00000 rw-p 00000000 00:00 0 -71ffebc00000-71ffebc08000 r--p 00000000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -71ffebc08000-71ffebc60000 r-xp 00008000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -71ffebc60000-71ffebc71000 r--p 00060000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -71ffebc71000-71ffebc72000 ---p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -71ffebc72000-71ffebc78000 r--p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -71ffebc78000-71ffebc79000 rw-p 00077000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -71ffebc79000-71ffebe83000 rw-p 00000000 00:00 0 -71ffebe83000-71ffebe84000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71ffebe84000-71ffebe85000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71ffebe85000-71ffebe87000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -71ffebe87000-71ffebe8e000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -71ffebe8e000-71ffebe90000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -71ffebe90000-71ffebe91000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -71ffebe91000-71ffebe92000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -71ffebe92000-71ffebf53000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -71ffebf53000-71ffebf54000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -71ffebf54000-71ffebf5f000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -71ffebf5f000-71ffebf84000 rw-p 00000000 00:00 0 -71ffebf84000-71ffebfb0000 r--p 00000000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -71ffebfb0000-71ffebfe4000 r-xp 0002c000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -71ffebfe4000-71ffebffe000 r--p 00060000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -71ffebffe000-71ffebfff000 r--p 00079000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -71ffebfff000-71ffec000000 rw-p 0007a000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -71ffec000000-71ffec021000 rw-p 00000000 00:00 0 -71ffec021000-71fff0000000 ---p 00000000 00:00 0 -71fff0000000-71fff0004000 ---p 00000000 00:00 0 -71fff0004000-71fff0100000 rw-p 00000000 00:00 0 -71fff0100000-71fff0104000 ---p 00000000 00:00 0 -71fff0104000-71fff0200000 rw-p 00000000 00:00 0 -71fff0200000-71fff0204000 ---p 00000000 00:00 0 -71fff0204000-71fff0300000 rw-p 00000000 00:00 0 -71fff0300000-71fff0304000 ---p 00000000 00:00 0 -71fff0304000-71fff0400000 rw-p 00000000 00:00 0 -71fff0400000-71fff0404000 ---p 00000000 00:00 0 -71fff0404000-71fff0500000 rw-p 00000000 00:00 0 -71fff0500000-71fff0504000 ---p 00000000 00:00 0 -71fff0504000-71fff0600000 rw-p 00000000 00:00 0 -71fff0600000-71fff0604000 ---p 00000000 00:00 0 -71fff0604000-71fff0700000 rw-p 00000000 00:00 0 -71fff0700000-71fff0704000 ---p 00000000 00:00 0 -71fff0704000-71fff0800000 rw-p 00000000 00:00 0 -71fff0800000-71fff1706000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive -71fff1706000-71fff170a000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71fff170a000-71fff170b000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -71fff170b000-71fff170c000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -71fff170c000-71fff170d000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -71fff170d000-71fff170e000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -71fff170e000-71fff170f000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -71fff170f000-71fff1713000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -71fff1713000-71fff1720000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -71fff1720000-71fff1723000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -71fff1723000-71fff1724000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -71fff1724000-71fff1725000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -71fff1725000-71fff1726000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -71fff1726000-71fff1727000 rw-p 00000000 00:00 0 -71fff1727000-71fff1729000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -71fff1729000-71fff172b000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -71fff172b000-71fff172d000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -71fff172d000-71fff172e000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -71fff172e000-71fff172f000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -71fff172f000-71fff17fd000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -71fff17fd000-71fff17fe000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -71fff17fe000-71fff17ff000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -71fff17ff000-71fff1803000 ---p 00000000 00:00 0 -71fff1803000-71fff18ff000 rw-p 00000000 00:00 0 -71fff18ff000-71fff1900000 ---p 00000000 00:00 0 -71fff1900000-71fff1a00000 rw-p 00000000 00:00 0 -71fff1a00000-71fff3a70000 rw-p 00000000 00:00 0 -71fff3a70000-71fffb700000 ---p 00000000 00:00 0 -71fffb700000-71fffb704000 ---p 00000000 00:00 0 -71fffb704000-71fffb800000 rw-p 00000000 00:00 0 -71fffb800000-71fffb80e000 rw-p 00000000 00:00 0 -71fffb80e000-71fffc7a0000 ---p 00000000 00:00 0 -71fffc7a0000-71fffc7a2000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71fffc7a2000-71fffc7ad000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -71fffc7ad000-71fffc7c1000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -71fffc7c1000-71fffc7ca000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -71fffc7ca000-71fffc7cb000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -71fffc7cb000-71fffc7cc000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -71fffc7cc000-71fffc7cf000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -71fffc7cf000-71fffc7db000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -71fffc7db000-71fffc7de000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -71fffc7de000-71fffc7df000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -71fffc7df000-71fffc7e0000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -71fffc7e0000-71fffc7e1000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71fffc7e1000-71fffc7e2000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71fffc7e2000-71fffc7e3000 rw-s 00000000 00:06 1022 /dev/nvidia0 -71fffc7e3000-71fffc7e4000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -71fffc7e4000-71fffc7e5000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -71fffc7e5000-71fffc7e6000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -71fffc7e6000-71fffc7e7000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -71fffc7e7000-71fffc7e8000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -71fffc7e8000-71fffc7e9000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -71fffc7e9000-71fffc7ec000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -71fffc7ec000-71fffc7ed000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -71fffc7ed000-71fffc7ee000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -71fffc7ee000-71fffc7ef000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -71fffc7ef000-71fffc7f1000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -71fffc7f1000-71fffc7f8000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -71fffc7f8000-71fffc7fa000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -71fffc7fa000-71fffc7fb000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -71fffc7fb000-71fffc7fc000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -71fffc7fc000-71fffc7fd000 r-xp 00000000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -71fffc7fd000-71fffc7fe000 ---p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -71fffc7fe000-71fffc7ff000 r--p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -71fffc7ff000-71fffc800000 rw-p 00002000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -71fffc800000-71fffca90000 rwxp 00000000 00:00 0 -71fffca90000-720003d37000 ---p 00000000 00:00 0 -720003d37000-720003fb7000 rwxp 00000000 00:00 0 -720003fb7000-7200042c8000 ---p 00000000 00:00 0 -7200042c8000-720004538000 rwxp 00000000 00:00 0 -720004538000-72000b800000 ---p 00000000 00:00 0 -72000b800000-720013fb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules -720013fb5000-720013fb6000 rw-s 00000000 00:06 1017 /dev/nvidiactl -720013fb6000-720013fb7000 rw-s 00000000 00:06 1017 /dev/nvidiactl -720013fb7000-720013fb9000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -720013fb9000-720013fbc000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -720013fbc000-720013fbd000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -720013fbd000-720013fbe000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -720013fbe000-720013fbf000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -720013fbf000-720013ffd000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -720013ffd000-720013ffe000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -720013ffe000-720013fff000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -720013fff000-720014000000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -720014000000-7200146d9000 rw-p 00000000 00:00 0 -7200146d9000-720018000000 ---p 00000000 00:00 0 -720018000000-720018001000 r--s 00000000 00:06 1017 /dev/nvidiactl -720018001000-720018002000 rw-s 00000000 00:01 1028 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -720018002000-720018006000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -720018006000-720018011000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -720018011000-720018015000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -720018015000-720018016000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -720018016000-720018017000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -720018017000-720018018000 ---p 00000000 00:00 0 -720018018000-720018118000 rw-p 00000000 00:00 0 -720018118000-7200181f4000 rw-p 00000000 00:00 0 -7200181f4000-7200181f5000 ---p 00000000 00:00 0 -7200181f5000-7200182f5000 rw-p 00000000 00:00 0 -7200182f5000-7200182f6000 ---p 00000000 00:00 0 -7200182f6000-7200183f6000 rw-p 00000000 00:00 0 -7200183f6000-720018bfe000 rw-p 00000000 00:00 0 -720018bfe000-720018bff000 ---p 00000000 00:00 0 -720018bff000-720018cff000 rw-p 00000000 00:00 0 -720018cff000-720018d00000 ---p 00000000 00:00 0 -720018d00000-720018e00000 rw-p 00000000 00:00 0 -720018e00000-720018e0e000 rw-p 00000000 00:00 0 -720018e0e000-720019da0000 ---p 00000000 00:00 0 -720019da0000-720019da1000 ---p 00000000 00:00 0 -720019da1000-720019ea1000 rw-p 00000000 00:00 0 -720019ea1000-72001a72f000 rw-p 00000000 00:00 0 -72001a72f000-72001a815000 ---p 00000000 00:00 0 -72001a815000-72001a81b000 rw-p 00000000 00:00 0 -72001a81b000-72001a900000 ---p 00000000 00:00 0 -72001a900000-72001a904000 ---p 00000000 00:00 0 -72001a904000-72001aa00000 rw-p 00000000 00:00 0 -72001aa00000-72001bd30000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -72001bd30000-72001be00000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -72001be00000-72001be2e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -72001be2e000-72001bea4000 rw-p 00000000 00:00 0 -72001bea4000-72001bea5000 rw-s 00000000 00:01 668316 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) -72001bea5000-72001bea6000 rw-s 00000000 00:01 668315 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -72001bea6000-72001bea7000 rw-s 00000000 00:01 668314 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -72001bea7000-72001bea9000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -72001bea9000-72001beb0000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -72001beb0000-72001beb2000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -72001beb2000-72001beb3000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -72001beb3000-72001beb4000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -72001beb4000-72001bebf000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -72001bebf000-72001bec0000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -72001bec0000-72001bec1000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -72001bec1000-72001bec2000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -72001bec2000-72001bed5000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -72001bed5000-72001bed6000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -72001bed6000-72001bed7000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -72001bed7000-72001bed8000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -72001bed8000-72001bf19000 rw-p 00000000 00:00 0 -72001bf19000-72001bf27000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -72001bf27000-72001bfa3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -72001bfa3000-72001bffe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -72001bffe000-72001bfff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -72001bfff000-72001c000000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -72001c000000-72001c028000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -72001c028000-72001c1bd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -72001c1bd000-72001c215000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -72001c215000-72001c216000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -72001c216000-72001c21a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -72001c21a000-72001c21c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -72001c21c000-72001c229000 rw-p 00000000 00:00 0 -72001c229000-72001c22a000 r-xp 00000000 00:00 0 -72001c22a000-72001c22b000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -72001c22b000-72001c22d000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -72001c22d000-72001c22e000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -72001c22e000-72001c22f000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -72001c22f000-72001c230000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -72001c230000-72001c231000 rw-p 00000000 00:00 0 -72001c231000-72001c232000 r-xp 0005e000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -72001c232000-72001c2b1000 rw-p 00000000 00:00 0 -72001c2b1000-72001c2d1000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -72001c2d1000-72001c2d2000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -72001c2d2000-72001c2d3000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -72001c2d3000-72001c2d4000 rw-p 00000000 00:00 0 -72001c2d4000-72001c2f2000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -72001c2f2000-72001c2f4000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -72001c2f4000-72001c2f5000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -72001c2f5000-72001c2f6000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -72001c2f6000-72001c2f7000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -72001c2f7000-72001c2f8000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -72001c2f8000-72001c2f9000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -72001c2f9000-72001c2fa000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -72001c2fa000-72001c2fe000 rw-p 00000000 00:00 0 -72001c2fe000-72001c2ff000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -72001c2ff000-72001c300000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -72001c300000-72001c301000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -72001c301000-72001c302000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -72001c302000-72001c303000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -72001c303000-72001c304000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -72001c304000-72001c305000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -72001c305000-72001c306000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -72001c306000-72001c307000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -72001c307000-72001c308000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -72001c308000-72001c30a000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -72001c30a000-72001c31b000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -72001c31b000-72001c321000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -72001c321000-72001c322000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -72001c322000-72001c323000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -72001c323000-72001c324000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -72001c324000-72001c32b000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -72001c32b000-72001c32c000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -72001c32c000-72001c32d000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -72001c32d000-72001c32e000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -72001c32e000-72001c333000 rw-p 00000000 00:00 0 -72001c333000-72001c33a000 ---p 00000000 00:00 0 -72001c33a000-72001c342000 rw-s 00000000 103:03 4325444 /tmp/hsperfdata_codex/84939 -72001c342000-72001c343000 ---p 00000000 00:00 0 -72001c343000-72001c344000 r--p 00000000 00:00 0 -72001c344000-72001c353000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -72001c353000-72001c354000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -72001c354000-72001c355000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -72001c355000-72001c357000 rw-p 00000000 00:00 0 -72001c357000-72001c35b000 r--p 00000000 00:00 0 [vvar] -72001c35b000-72001c35d000 r-xp 00000000 00:00 0 [vdso] -72001c35d000-72001c35f000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -72001c35f000-72001c389000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -72001c389000-72001c394000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -72001c394000-72001c395000 ---p 00000000 00:00 0 -72001c395000-72001c397000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -72001c397000-72001c399000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7ffc09f44000-7ffc09f67000 rw-p 00000000 00:00 0 [stack] -ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] -Total number of mappings: 923 - - -VM Arguments: -jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -java_command: jme3test.vulkan.VulkanTest -java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 2 {product} {ergonomic} - uint G1ConcRefinementThreads = 8 {product} {ergonomic} - size_t G1HeapRegionSize = 4194304 {product} {ergonomic} - size_t InitialHeapSize = 524288000 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MarkStackSizeMax = 536870912 {product} {ergonomic} - size_t MaxHeapSize = 8388608000 {product} {ergonomic} - size_t MaxNewSize = 5033164800 {product} {ergonomic} - size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags foldmultilines=false - #1: stderr all=off uptime,level,tags foldmultilines=false - -Environment Variables: -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin -USERNAME=codex -SHELL=/bin/bash -DISPLAY=:1 -LANG=en_US.UTF-8 - -Active Locale: -LC_ALL=en_US.UTF-8 -LC_COLLATE=en_US.UTF-8 -LC_CTYPE=en_US.UTF-8 -LC_MESSAGES=en_US.UTF-8 -LC_MONETARY=en_US.UTF-8 -LC_NUMERIC=en_US.UTF-8 -LC_TIME=en_US.UTF-8 - -Signal Handlers: - SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked - SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - - -Periodic native trim disabled - ---------------- S Y S T E M --------------- - -OS: -DISTRIB_ID=Pop -DISTRIB_RELEASE=22.04 -DISTRIB_CODENAME=jammy -DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" -uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 -OS uptime: 0 days 15:15 hours -libc: glibc 2.35 NPTL 2.35 -rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k -load average: 1.24 0.88 0.84 - -/proc/meminfo: -MemTotal: 32767652 kB -MemFree: 20132288 kB -MemAvailable: 23534048 kB -Buffers: 347160 kB -Cached: 5008804 kB -SwapCached: 0 kB -Active: 8769136 kB -Inactive: 2812368 kB -Active(anon): 6258988 kB -Inactive(anon): 0 kB -Active(file): 2510148 kB -Inactive(file): 2812368 kB -Unevictable: 15204 kB -Mlocked: 72 kB -SwapTotal: 20970996 kB -SwapFree: 20970996 kB -Zswap: 0 kB -Zswapped: 0 kB -Dirty: 832 kB -Writeback: 0 kB -AnonPages: 6241144 kB -Mapped: 1824364 kB -Shmem: 33440 kB -KReclaimable: 197352 kB -Slab: 385632 kB -SReclaimable: 197352 kB -SUnreclaim: 188280 kB -KernelStack: 22608 kB -PageTables: 54196 kB -SecPageTables: 0 kB -NFS_Unstable: 0 kB -Bounce: 0 kB -WritebackTmp: 0 kB -CommitLimit: 37354820 kB -Committed_AS: 12287808 kB -VmallocTotal: 34359738367 kB -VmallocUsed: 252112 kB -VmallocChunk: 0 kB -Percpu: 9472 kB -HardwareCorrupted: 0 kB -AnonHugePages: 0 kB -ShmemHugePages: 6144 kB -ShmemPmdMapped: 0 kB -FileHugePages: 0 kB -FilePmdMapped: 0 kB -Unaccepted: 0 kB -HugePages_Total: 0 -HugePages_Free: 0 -HugePages_Rsvd: 0 -HugePages_Surp: 0 -Hugepagesize: 2048 kB -Hugetlb: 0 kB -DirectMap4k: 851768 kB -DirectMap2M: 15826944 kB -DirectMap1G: 16777216 kB - -/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never -/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 -/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force -/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never - -Process Memory: -Virtual Size: 13445252K (peak: 13510788K) -Resident Set Size: 309200K (peak: 309200K) (anon: 165796K, file: 142380K, shmem: 1024K) -Swapped out: 0K -C-Heap outstanding allocations: 84790K, retained: 22997K -glibc malloc tunables: (default) - -/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 -/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 -/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 -/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 - -container (cgroup) information: -container_type: cgroupv2 -cpu_cpuset_cpus: not supported -cpu_memory_nodes: not supported -active_processor_count: 8 -cpu_quota: not supported -cpu_period: not supported -cpu_shares: not supported -memory_limit_in_bytes: unlimited -memory_and_swap_limit_in_bytes: unlimited -memory_soft_limit_in_bytes: 0 -memory_usage_in_bytes: 5924904 k -memory_max_usage_in_bytes: not supported -rss_usage_in_bytes: 3518740 k -cache_usage_in_bytes: 2323460 k -memory_swap_current_in_bytes: 0 -memory_swap_max_limit_in_bytes: unlimited -maximum number of tasks: 38296 -current number of tasks: 317 - -Steal ticks since vm start: 0 -Steal ticks percentage since vm start: 0.000 - -CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c -CPU Model and flags from /proc/cpuinfo: -model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities - -Online cpus: 0-7 -Offline cpus: -BIOS frequency limitation: -Frequency switch latency (ns): 0 -Available cpu frequencies: -Current governor: powersave -Core performance/turbo boost: - -Memory: 4k page, physical 32767652k(23534048k free), swap 20970996k(20970996k free) -Page Sizes: 4k - -vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 - -END. diff --git a/hs_err_pid85302.log b/hs_err_pid85302.log deleted file mode 100644 index 3c641b6200..0000000000 --- a/hs_err_pid85302.log +++ /dev/null @@ -1,1596 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGSEGV (0xb) at pc=0x00007177b465933a, pid=85302, tid=85350 -# -# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) -# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) -# Problematic frame: -# C [libjemalloc.so+0x5933a] -# -# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.85302) -# -# If you would like to submit a bug report, please visit: -# https://bugreport.java.com/bugreport/crash.jsp -# - ---------------- S U M M A R Y ------------ - -Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanTest - -Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS -Time: Thu Jun 26 22:34:55 2025 EDT elapsed time: 6.953641 seconds (0d 0h 0m 6s) - ---------------- T H R E A D --------------- - -Current thread is native thread - -Stack: [0x00007177aa9ac000,0x00007177aaaac000], sp=0x00007177aaaaa8d0, free space=1018k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libjemalloc.so+0x5933a] - -siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 - -Registers: -RAX=0x0000000000000000, RBX=0x0000000000000200, RCX=0x0000000000000000, RDX=0x00007177b4678440 -RSP=0x00007177aaaaa8d0, RBP=0x00007177aaaaadb0, RSI=0x0000000000000000, RDI=0x00007177abd55580 -R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x00007177abd555c0 -R12=0x000000000000003f, R13=0x00007177aaaaad70, R14=0x000000000000003f, R15=0x00007177aaaaaad0 -RIP=0x00007177b465933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 - TRAPNO=0x000000000000000e - - -Top of Stack: (sp=0x00007177aaaaa8d0) -0x00007177aaaaa8d0: 00007177dc4d8680 00007177aaaaa960 -0x00007177aaaaa8e0: 00007177aaaaa970 00007177e4f05211 -0x00007177aaaaa8f0: 0000000000000005 00007177dc4d8878 -0x00007177aaaaa900: 0000000000000005 0000000000000000 -0x00007177aaaaa910: 0000000000000001 00007177dc4d8310 -0x00007177aaaaa920: 00007177dc4d8878 00007177dc4d8310 -0x00007177aaaaa930: 00000001cbd3f020 00007177dc4d8680 -0x00007177aaaaa940: 0000000000000000 3737313700000000 -0x00007177aaaaa950: 3062636400000000 aa8a397500000004 -0x00007177aaaaa960: 00000000ffffffff 0000000000000000 -0x00007177aaaaa970: 00007177e4c0d4d0 00007177e4ef27c0 -0x00007177aaaaa980: 00007177aaaaa9b0 00007177e4678613 -0x00007177aaaaa990: 00007177aaaaab88 00007177e4c8849a -0x00007177aaaaa9a0: 0000000000000000 00007177aaaaaaa0 -0x00007177aaaaa9b0: 00000000fbad8001 0000000000000002 -0x00007177aaaaa9c0: 00007177dc4d8310 00007177b5fff028 -0x00007177aaaaa9d0: 00007177e4e1cae8 0000000000000004 -0x00007177aaaaa9e0: 00007177aaaabb58 00007177e4f0bf71 -0x00007177aaaaa9f0: 0000000000000005 0000000000000000 -0x00007177aaaaaa00: 00007177e4c0d4d0 00007177e4ca53e0 -0x00007177aaaaaa10: 0000000000000000 00007177aaaaae00 -0x00007177aaaaaa20: 00007177e4e1caf8 0000000000000000 -0x00007177aaaaaa30: 00007177e4e1cae8 00007177e4f0edae -0x00007177aaaaaa40: 0000000000000001 000000000000006f -0x00007177aaaaaa50: 00007177b5fb17d0 0000000000000000 -0x00007177aaaaaa60: 00007176b0b8aaa0 0000000000000000 -0x00007177aaaaaa70: 00000000000000ca 68751852672165a1 -0x00007177aaaaaa80: 0000000000000213 00007177e4e17300 -0x00007177aaaaaa90: 0000000000000000 0000000000000200 -0x00007177aaaaaaa0: 00007177aaaaadb0 000000000000003f -0x00007177aaaaaab0: 00007177aaaaad70 00007177aaaaaad0 -0x00007177aaaaaac0: 00007176b00024d0 00007177b46592f8 - -Instructions: (pc=0x00007177b465933a) -0x00007177b465923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff -0x00007177b465924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 -0x00007177b465925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 -0x00007177b465926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c -0x00007177b465927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b -0x00007177b465928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 -0x00007177b465929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 -0x00007177b46592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 -0x00007177b46592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 -0x00007177b46592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d -0x00007177b46592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c -0x00007177b46592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 -0x00007177b46592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b -0x00007177b465930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 -0x00007177b465931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 -0x00007177b465932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 -0x00007177b465933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 -0x00007177b465934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c -0x00007177b465935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 -0x00007177b465936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 -0x00007177b465937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c -0x00007177b465938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 -0x00007177b465939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 -0x00007177b46593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d -0x00007177b46593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 -0x00007177b46593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f -0x00007177b46593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 -0x00007177b46593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 -0x00007177b46593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 -0x00007177b465940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff -0x00007177b465941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 -0x00007177b465942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 - - - ---------------- P R O C E S S --------------- - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x000071775e000000-0x000071775ed91000-0x000071775ed91000), size 14225408, SharedBaseAddress: 0x000071775e000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x000071775f000000-0x000071779f000000, reserved size: 1073741824 -Narrow klass base: 0x000071775e000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - - -Heap: - garbage-first heap total reserved 8192000K, committed 28672K, used 14737K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 3 young (12288K), 1 survivors (4096K) - Metaspace used 22132K, committed 22464K, reserved 1114112K - class space used 2300K, committed 2432K, reserved 1048576K - -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|0x000000060c000000, 0x000000060c367560, 0x000000060c400000| 85%| O| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 -| 1|0x000000060c400000, 0x000000060c6cd070, 0x000000060c800000| 70%| O| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 -| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 -| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 -| 4|0x000000060d000000, 0x000000060d2f1650, 0x000000060d400000| 73%| E| |TAMS 0x000000060d000000| PB 0x000000060d000000| Complete | 0 -| 5|0x000000060d400000, 0x000000060d53e8d0, 0x000000060d800000| 31%| S|CS|TAMS 0x000000060d400000| PB 0x000000060d400000| Complete | 0 -| 6|0x000000060d800000, 0x000000060dc00000, 0x000000060dc00000|100%| E|CS|TAMS 0x000000060d800000| PB 0x000000060d800000| Complete | 0 - -Card table byte_map: [0x00007177e0a00000,0x00007177e19a0000] _byte_map_base: 0x00007177dd9a0000 - -Marking Bits: (CMBitMap*) 0x00007177dc059190 - Bits: [0x00007177bca00000, 0x00007177c4700000) - -Polling page: 0x00007177e4ede000 - -Metaspace: - -Usage: - Non-class: 19.37 MB used. - Class: 2.25 MB used. - Both: 21.61 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 19.56 MB ( 31%) committed, 1 nodes. - Class space: 1.00 GB reserved, 2.38 MB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 21.94 MB ( 2%) committed. - -Chunk freelists: - Non-Class: 11.89 MB - Class: 13.44 MB - Both: 25.33 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 27.12 MB -CDS: on - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 8388608. - - enlarge_chunks_in_place: 1. - - use_allocation_guard: 0. - - -Internal statistics: - -num_allocs_failed_limit: 0. -num_arena_births: 334. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 351. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 0. -num_chunks_taken_from_freelist: 689. -num_chunk_merges: 0. -num_chunk_splits: 437. -num_chunks_enlarged: 282. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=120032Kb used=733Kb max_used=733Kb free=119298Kb - bounds [0x00007177cc2c8000, 0x00007177cc538000, 0x00007177d3800000] -CodeHeap 'profiled nmethods': size=120028Kb used=2878Kb max_used=2878Kb free=117149Kb - bounds [0x00007177c4800000, 0x00007177c4ad0000, 0x00007177cbd37000] -CodeHeap 'non-nmethods': size=5700Kb used=2461Kb max_used=2497Kb free=3238Kb - bounds [0x00007177cbd37000, 0x00007177cbfb7000, 0x00007177cc2c8000] -CodeCache: size=245760Kb, used=6072Kb, max_used=6108Kb, free=239685Kb - total_blobs=3783, nmethods=2349, adapters=1341, full_count=0 -Compilation: enabled, stopped_count=0, restarted_count=0 - -Compilation events (20 events): -Event: 6.566 Thread 0x00007177dc13eed0 2473 4 org.lwjgl.vulkan.VkSubmitInfo::sizeof (4 bytes) -Event: 6.567 Thread 0x00007177dc13eed0 nmethod 2473 0x00007177cc37f188 code [0x00007177cc37f280, 0x00007177cc37f300] -Event: 6.783 Thread 0x00007177dc13eed0 2474 4 org.lwjgl.system.MemoryStack::nmalloc (61 bytes) -Event: 6.783 Thread 0x00007177dc13eed0 nmethod 2474 0x00007177cc37f488 code [0x00007177cc37f580, 0x00007177cc37f638] -Event: 6.817 Thread 0x00007177dc1405e0 2475 3 org.lwjgl.PointerBuffer:: (15 bytes) -Event: 6.817 Thread 0x00007177dc1405e0 nmethod 2475 0x00007177c4aca708 code [0x00007177c4aca860, 0x00007177c4acac40] -Event: 6.833 Thread 0x00007177dc1405e0 2476 3 org.lwjgl.PointerBuffer::sizeof (4 bytes) -Event: 6.833 Thread 0x00007177dc1405e0 nmethod 2476 0x00007177c4acac88 code [0x00007177c4acada0, 0x00007177c4acaea8] -Event: 6.833 Thread 0x00007177dc1405e0 2477 3 java.lang.ThreadLocal$ThreadLocalMap::set (133 bytes) -Event: 6.834 Thread 0x00007177dc1405e0 nmethod 2477 0x00007177c4acaf88 code [0x00007177c4acb1a0, 0x00007177c4acbe48] -Event: 6.834 Thread 0x00007177dc1405e0 2480 3 jdk.internal.misc.Blocker::begin (38 bytes) -Event: 6.834 Thread 0x00007177dc1405e0 nmethod 2480 0x00007177c4acbf08 code [0x00007177c4acc080, 0x00007177c4acc768] -Event: 6.834 Thread 0x00007177dc1405e0 2478 3 java.io.BufferedOutputStream::implWrite (71 bytes) -Event: 6.835 Thread 0x00007177dc1405e0 nmethod 2478 0x00007177c4acc808 code [0x00007177c4acc9a0, 0x00007177c4acd038] -Event: 6.835 Thread 0x00007177dc1405e0 2479 ! 3 java.lang.System$Out::write (31 bytes) -Event: 6.835 Thread 0x00007177dc1405e0 nmethod 2479 0x00007177c4acd088 code [0x00007177c4acd240, 0x00007177c4acd998] -Event: 6.866 Thread 0x00007177dc1405e0 2481 3 org.lwjgl.PointerBuffer::create (14 bytes) -Event: 6.867 Thread 0x00007177dc1405e0 nmethod 2481 0x00007177c4acda08 code [0x00007177c4acdb20, 0x00007177c4acdcd0] -Event: 6.950 Thread 0x00007177dc1405e0 2482 3 org.lwjgl.PointerBuffer::put (14 bytes) -Event: 6.950 Thread 0x00007177dc1405e0 nmethod 2482 0x00007177c4acdd08 code [0x00007177c4acde40, 0x00007177c4ace070] - -GC Heap History (8 events): -Event: 2.386 GC heap before -{Heap before GC invocations=0 (full 0): - garbage-first heap total reserved 8192000K, committed 516096K, used 21627K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 6 young (24576K), 0 survivors (0K) - Metaspace used 16364K, committed 16640K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.396 GC heap after -{Heap after GC invocations=1 (full 1): - garbage-first heap total reserved 8192000K, committed 98304K, used 6353K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16364K, committed 16640K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.396 GC heap before -{Heap before GC invocations=1 (full 1): - garbage-first heap total reserved 8192000K, committed 98304K, used 6353K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16364K, committed 16640K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.407 GC heap after -{Heap after GC invocations=2 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 6353K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16364K, committed 16640K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.855 GC heap before -{Heap before GC invocations=2 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 10449K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 2 young (8192K), 0 survivors (0K) - Metaspace used 18557K, committed 18880K, reserved 1114112K - class space used 2036K, committed 2176K, reserved 1048576K -} -Event: 2.856 GC heap after -{Heap after GC invocations=3 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 7475K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 1 young (4096K), 1 survivors (4096K) - Metaspace used 18557K, committed 18880K, reserved 1114112K - class space used 2036K, committed 2176K, reserved 1048576K -} -Event: 2.923 GC heap before -{Heap before GC invocations=3 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 11571K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 2 young (8192K), 1 survivors (4096K) - Metaspace used 19967K, committed 20288K, reserved 1114112K - class space used 2161K, committed 2304K, reserved 1048576K -} -Event: 2.924 GC heap after -{Heap after GC invocations=4 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 7627K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 1 young (4096K), 1 survivors (4096K) - Metaspace used 19967K, committed 20288K, reserved 1114112K - class space used 2161K, committed 2304K, reserved 1048576K -} - -Dll operation events (12 events): -Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -Event: 0.025 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -Event: 0.027 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -Event: 0.068 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -Event: 0.112 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -Event: 0.117 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -Event: 0.197 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -Event: 0.199 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -Event: 0.225 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -Event: 0.351 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so - -Deoptimization events (20 events): -Event: 2.606 Thread 0x00007177dc69dcb0 Uncommon trap: trap_request=0xffffffde fr.pc=0x00007177cc354130 relative=0x0000000000000110 -Event: 2.606 Thread 0x00007177dc69dcb0 Uncommon trap: reason=class_check action=maybe_recompile pc=0x00007177cc354130 method=jdk.internal.misc.Unsafe.allocateUninitializedArray(Ljava/lang/Class;I)Ljava/lang/Object; @ 51 c2 -Event: 2.606 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177cc354130 sp=0x00007177aaaa97a0 -Event: 2.606 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8abf9 sp=0x00007177aaaa9738 mode 2 -Event: 2.611 Thread 0x00007177dc69dcb0 Uncommon trap: trap_request=0xffffff45 fr.pc=0x00007177cc34c464 relative=0x0000000000000ee4 -Event: 2.611 Thread 0x00007177dc69dcb0 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00007177cc34c464 method=java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; @ 401 c2 -Event: 2.611 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177cc34c464 sp=0x00007177aaaaa300 -Event: 2.611 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8abf9 sp=0x00007177aaaaa280 mode 2 -Event: 2.847 Thread 0x00007177dc69dcb0 Uncommon trap: trap_request=0xffffff76 fr.pc=0x00007177cc34b168 relative=0x00000000000001a8 -Event: 2.847 Thread 0x00007177dc69dcb0 Uncommon trap: reason=predicate action=maybe_recompile pc=0x00007177cc34b168 method=java.util.regex.Pattern$BmpCharPropertyGreedy.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 12 c2 -Event: 2.847 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177cc34b168 sp=0x00007177aaaaa0e0 -Event: 2.847 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8abf9 sp=0x00007177aaaaa0b8 mode 2 -Event: 2.911 Thread 0x00007177dc69dcb0 Uncommon trap: trap_request=0xffffff6e fr.pc=0x00007177cc35e6e8 relative=0x0000000000000148 -Event: 2.911 Thread 0x00007177dc69dcb0 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x00007177cc35e6e8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 -Event: 2.911 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177cc35e6e8 sp=0x00007177aaaaa0a0 -Event: 2.912 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8abf9 sp=0x00007177aaaaa050 mode 2 -Event: 3.091 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177c4a2451f sp=0x00007177aaaa97c0 -Event: 3.091 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8b30f sp=0x00007177aaaa8c00 mode 0 -Event: 3.093 Thread 0x00007177dc69dcb0 DEOPT PACKING pc=0x00007177c48acc54 sp=0x00007177aaaa9790 -Event: 3.093 Thread 0x00007177dc69dcb0 DEOPT UNPACKING pc=0x00007177cbd8b30f sp=0x00007177aaaa8c48 mode 0 - -Classes loaded (20 events): -Event: 2.893 Loading class javax/imageio/ImageTypeSpecifier$Packed -Event: 2.893 Loading class javax/imageio/ImageTypeSpecifier$Packed done -Event: 2.893 Loading class java/awt/image/DataBufferByte -Event: 2.893 Loading class java/awt/image/DataBufferByte done -Event: 2.893 Loading class sun/awt/image/ByteInterleavedRaster -Event: 2.893 Loading class sun/awt/image/ByteComponentRaster -Event: 2.893 Loading class sun/awt/image/ByteComponentRaster done -Event: 2.893 Loading class sun/awt/image/ByteInterleavedRaster done -Event: 2.894 Loading class sun/awt/image/ShortComponentRaster -Event: 2.894 Loading class sun/awt/image/ShortComponentRaster done -Event: 2.972 Loading class java/util/function/LongFunction -Event: 2.972 Loading class java/util/function/LongFunction done -Event: 3.408 Loading class sun/awt/AppContext$PostShutdownEventRunnable -Event: 3.408 Loading class sun/awt/AppContext$PostShutdownEventRunnable done -Event: 3.408 Loading class sun/awt/AWTAutoShutdown$1 -Event: 3.408 Loading class sun/awt/AWTAutoShutdown$1 done -Event: 6.952 Loading class java/lang/Throwable$WrappedPrintStream -Event: 6.952 Loading class java/lang/Throwable$PrintStreamOrWriter -Event: 6.952 Loading class java/lang/Throwable$PrintStreamOrWriter done -Event: 6.952 Loading class java/lang/Throwable$WrappedPrintStream done - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (20 events): -Event: 0.653 Thread 0x00007177dc683fa0 Exception (0x000000062a0b8978) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.326 Thread 0x00007177dc683fa0 Exception (0x000000062a353ed8) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 2.379 Thread 0x00007177dc683fa0 Exception (0x0000000629cbdb28) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.423 Thread 0x00007177dc02d0f0 Exception (0x000000060d9ca708) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 2.434 Thread 0x00007177dc02d0f0 Exception (0x000000060da66f58) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.435 Thread 0x00007177dc02d0f0 Exception (0x000000060da74e20) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.598 Thread 0x00007177dc69dcb0 Exception (0x000000060d59e850) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] -Event: 2.847 Thread 0x00007177dc69dcb0 Exception (0x000000060d781928) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.925 Thread 0x00007177dc69dcb0 Exception (0x000000060d828338) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.929 Thread 0x00007177dc69dcb0 Exception (0x000000060d850bc0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.968 Thread 0x00007177dc69dcb0 Exception (0x000000060d9497e0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.968 Thread 0x00007177dc69dcb0 Exception (0x000000060d94ef08) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.985 Thread 0x00007177dc69dcb0 Exception (0x000000060da07168) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.986 Thread 0x00007177dc69dcb0 Exception (0x000000060da199e8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.986 Thread 0x00007177dc69dcb0 Exception (0x000000060da1d988) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.986 Thread 0x00007177dc69dcb0 Exception (0x000000060da21048) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.992 Thread 0x00007177dc69dcb0 Exception (0x000000060da854f0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.027 Thread 0x00007177dc69dcb0 Exception (0x000000060dad5f50) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.033 Thread 0x00007177dc69dcb0 Exception (0x000000060daf08c8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.051 Thread 0x00007177dc69dcb0 Exception (0x000000060db30400) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] - -VM Operations (20 events): -Event: 0.123 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.123 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.211 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.211 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.227 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.227 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.236 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.236 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.690 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.690 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 2.386 Executing VM operation: G1CollectFull (System.gc()) -Event: 2.396 Executing VM operation: G1CollectFull (System.gc()) done -Event: 2.396 Executing VM operation: G1CollectFull (System.gc()) -Event: 2.407 Executing VM operation: G1CollectFull (System.gc()) done -Event: 2.431 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 2.431 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 2.855 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 2.856 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 2.923 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 2.924 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done - -Memory protections (20 events): -Event: 0.016 Protecting memory [0x00007177b4e00000,0x00007177b4e04000] with protection modes 0 -Event: 0.016 Protecting memory [0x00007177b4d00000,0x00007177b4d04000] with protection modes 0 -Event: 0.022 Protecting memory [0x00007177b4c00000,0x00007177b4c04000] with protection modes 0 -Event: 0.023 Protecting memory [0x00007177b4b00000,0x00007177b4b04000] with protection modes 0 -Event: 0.047 Protecting memory [0x00007177b4a00000,0x00007177b4a04000] with protection modes 0 -Event: 0.247 Protecting memory [0x00007177ab8b2000,0x00007177ab8b6000] with protection modes 0 -Event: 0.249 Protecting memory [0x00007177ab7b2000,0x00007177ab7b6000] with protection modes 0 -Event: 0.251 Protecting memory [0x00007177ab6b2000,0x00007177ab6b6000] with protection modes 0 -Event: 0.251 Protecting memory [0x00007177ab5b2000,0x00007177ab5b6000] with protection modes 0 -Event: 0.351 Protecting memory [0x00007177ab4b2000,0x00007177ab4b6000] with protection modes 0 -Event: 0.580 Protecting memory [0x00007177b4a00000,0x00007177b4a04000] with protection modes 0 -Event: 0.678 Protecting memory [0x00007177ab3b2000,0x00007177ab3b6000] with protection modes 0 -Event: 0.687 Protecting memory [0x00007177ab2b2000,0x00007177ab2b6000] with protection modes 0 -Event: 0.721 Protecting memory [0x00007177ab0b2000,0x00007177ab0b6000] with protection modes 0 -Event: 2.341 Protecting memory [0x00007177ab3b2000,0x00007177ab3b6000] with protection modes 0 -Event: 2.407 Protecting memory [0x00007177ab2b2000,0x00007177ab2b6000] with protection modes 0 -Event: 2.439 Protecting memory [0x00007177aa9ac000,0x00007177aa9b0000] with protection modes 0 -Event: 2.439 Protecting memory [0x00007177e3500000,0x00007177e3504000] with protection modes 0 -Event: 2.860 Protecting memory [0x00007177ab3b2000,0x00007177ab3b6000] with protection modes 0 -Event: 3.228 Protecting memory [0x00007177ab2b2000,0x00007177ab2b6000] with protection modes 0 - -Nmethod flushes (20 events): -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c488a588 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c48da388 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4917108 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c491d588 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c493d288 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c493d888 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c493fd88 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4940d08 -Event: 2.401 Thread 0x00007177dc12e310 flushing osr nmethod 0x00007177c4944888 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4945288 -Event: 2.401 Thread 0x00007177dc12e310 flushing osr nmethod 0x00007177c4947c88 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4971188 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4971808 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4981708 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4982708 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4985088 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c4985408 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c49ae708 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c49f2b08 -Event: 2.401 Thread 0x00007177dc12e310 flushing nmethod 0x00007177c49f2f88 - -Events (20 events): -Event: 0.580 Thread 0x00007177dc683fa0 Thread added: 0x00007176f8061490 -Event: 0.678 Thread 0x00007177dc1405e0 Thread added: 0x00007177245007b0 -Event: 0.687 Thread 0x00007177dc1405e0 Thread added: 0x000071772453cbc0 -Event: 0.721 Thread 0x00007177dc683fa0 Thread added: 0x00007176f80f5850 -Event: 0.867 Thread 0x000071772453cbc0 Thread exited: 0x000071772453cbc0 -Event: 0.867 Thread 0x00007177245007b0 Thread exited: 0x00007177245007b0 -Event: 2.341 Thread 0x00007177dc1405e0 Thread added: 0x00007177245652b0 -Event: 2.407 Thread 0x00007177dc1405e0 Thread added: 0x0000717724571960 -Event: 2.439 Thread 0x00007177dc02d0f0 Thread added: 0x00007177dc69dcb0 -Event: 2.439 Thread 0x00007177dc02d0f0 Thread exited: 0x00007177dc02d0f0 -Event: 2.439 Thread 0x00007177dc02d0f0 Thread added: 0x00007177dc02d0f0 -Event: 2.566 Thread 0x0000717724571960 Thread exited: 0x0000717724571960 -Event: 2.566 Thread 0x00007177245652b0 Thread exited: 0x00007177245652b0 -Event: 2.859 Thread 0x00007177dc69dcb0 Thread added: 0x00007176b057f650 -Event: 3.228 Thread 0x00007177dc1405e0 Thread added: 0x00007177245aca20 -Event: 3.399 Thread 0x00007177245aca20 Thread exited: 0x00007177245aca20 -Event: 3.408 Thread 0x00007177dc682e90 Thread exited: 0x00007177dc682e90 -Event: 3.408 Thread 0x00007177dc683fa0 Thread exited: 0x00007177dc683fa0 -Event: 5.608 Thread 0x00007176f8061490 Thread exited: 0x00007176f8061490 -Event: 6.953 Thread 0x00007177dc69dcb0 Thread exited: 0x00007177dc69dcb0 - - -Dynamic libraries: -60c000000-60dc00000 rw-p 00000000 00:00 0 -60dc00000-800000000 ---p 00000000 00:00 0 -567ff61f2000-567ff61f3000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -567ff61f4000-567ff61f5000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -567ff61f5000-567ff61f6000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -568003a6b000-568003ab4000 rw-p 00000000 00:00 0 [heap] -717668000000-717668075000 rw-p 00000000 00:00 0 -717668075000-71766c000000 ---p 00000000 00:00 0 -717670000000-717670021000 rw-p 00000000 00:00 0 -717670021000-717674000000 ---p 00000000 00:00 0 -717674000000-717674021000 rw-p 00000000 00:00 0 -717674021000-717678000000 ---p 00000000 00:00 0 -71767c000000-71767c021000 rw-p 00000000 00:00 0 -71767c021000-717680000000 ---p 00000000 00:00 0 -717680000000-717680021000 rw-p 00000000 00:00 0 -717680021000-717684000000 ---p 00000000 00:00 0 -717688000000-717688021000 rw-p 00000000 00:00 0 -717688021000-71768c000000 ---p 00000000 00:00 0 -71768c000000-71768c021000 rw-p 00000000 00:00 0 -71768c021000-717690000000 ---p 00000000 00:00 0 -717694000000-717694021000 rw-p 00000000 00:00 0 -717694021000-717698000000 ---p 00000000 00:00 0 -717698000000-717698021000 rw-p 00000000 00:00 0 -717698021000-71769c000000 ---p 00000000 00:00 0 -7176a0000000-7176a00c8000 rw-p 00000000 00:00 0 -7176a00c8000-7176a4000000 ---p 00000000 00:00 0 -7176a5000000-7176ab712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -7176ab712000-7176abf30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -7176abf30000-7176abf76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -7176abf76000-7176abff2000 rw-p 00000000 00:00 0 -7176ac000000-7176ac021000 rw-p 00000000 00:00 0 -7176ac021000-7176b0000000 ---p 00000000 00:00 0 -7176b0000000-7176b3148000 rw-p 00000000 00:00 0 -7176b3148000-7176b4000000 ---p 00000000 00:00 0 -7176b8000000-7176b80f8000 rw-p 00000000 00:00 0 -7176b80f8000-7176bc000000 ---p 00000000 00:00 0 -7176bc000000-7176bc021000 rw-p 00000000 00:00 0 -7176bc021000-7176c0000000 ---p 00000000 00:00 0 -7176c4000000-7176c4021000 rw-p 00000000 00:00 0 -7176c4021000-7176c8000000 ---p 00000000 00:00 0 -7176c8000000-7176c8021000 rw-p 00000000 00:00 0 -7176c8021000-7176cc000000 ---p 00000000 00:00 0 -7176d0000000-7176d0021000 rw-p 00000000 00:00 0 -7176d0021000-7176d4000000 ---p 00000000 00:00 0 -7176d4000000-7176d4021000 rw-p 00000000 00:00 0 -7176d4021000-7176d8000000 ---p 00000000 00:00 0 -7176dc000000-7176dc021000 rw-p 00000000 00:00 0 -7176dc021000-7176e0000000 ---p 00000000 00:00 0 -7176e0000000-7176e0021000 rw-p 00000000 00:00 0 -7176e0021000-7176e4000000 ---p 00000000 00:00 0 -7176e8000000-7176e8128000 rw-p 00000000 00:00 0 -7176e8128000-7176ec000000 ---p 00000000 00:00 0 -7176ec000000-7176ec39a000 rw-p 00000000 00:00 0 -7176ec39a000-7176f0000000 ---p 00000000 00:00 0 -7176f4000000-7176f4021000 rw-p 00000000 00:00 0 -7176f4021000-7176f8000000 ---p 00000000 00:00 0 -7176f8000000-7176f813a000 rw-p 00000000 00:00 0 -7176f813a000-7176fc000000 ---p 00000000 00:00 0 -717700000000-717700021000 rw-p 00000000 00:00 0 -717700021000-717704000000 ---p 00000000 00:00 0 -717704000000-717704021000 rw-p 00000000 00:00 0 -717704021000-717708000000 ---p 00000000 00:00 0 -71770c000000-71770c021000 rw-p 00000000 00:00 0 -71770c021000-717710000000 ---p 00000000 00:00 0 -717710000000-7177100cf000 rw-p 00000000 00:00 0 -7177100cf000-717714000000 ---p 00000000 00:00 0 -717718000000-717718021000 rw-p 00000000 00:00 0 -717718021000-71771c000000 ---p 00000000 00:00 0 -71771c000000-71771c021000 rw-p 00000000 00:00 0 -71771c021000-717720000000 ---p 00000000 00:00 0 -717720600000-717720725000 r--p 00000000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -717720725000-717720be5000 r-xp 00125000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -717720be5000-717720d19000 r--p 005e5000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -717720d19000-717720d1a000 ---p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -717720d1a000-717720d7d000 r--p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -717720d7d000-717720d87000 rw-p 0077c000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -717720d87000-717720d98000 rw-p 00000000 00:00 0 -717720e00000-717720e01000 ---p 00000000 00:00 0 -717720e01000-717721601000 rw-p 00000000 00:00 0 -717721800000-717721801000 ---p 00000000 00:00 0 -717721801000-717722001000 rw-p 00000000 00:00 0 -717722200000-717722201000 ---p 00000000 00:00 0 -717722201000-717722a01000 rw-p 00000000 00:00 0 -717722c00000-717722c01000 ---p 00000000 00:00 0 -717722c01000-717723401000 rw-p 00000000 00:00 0 -717723600000-717723601000 ---p 00000000 00:00 0 -717723601000-717723e01000 rw-p 00000000 00:00 0 -717724000000-7177245c2000 rw-p 00000000 00:00 0 -7177245c2000-717728000000 ---p 00000000 00:00 0 -717728000000-7177288c4000 rw-p 00000000 00:00 0 -7177288c4000-71772c000000 ---p 00000000 00:00 0 -71772c600000-71772c601000 ---p 00000000 00:00 0 -71772c601000-71772ce01000 rw-p 00000000 00:00 0 -71772d000000-71772d02f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -71772d02f000-71772d702000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -71772d702000-71772d824000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -71772d824000-71772d835000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -71772d835000-71772d8b3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -71772d8b3000-71772d8c7000 rw-p 00000000 00:00 0 -71772da00000-71772da22000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -71772da22000-71772dc21000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -71772dc21000-71772dc29000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -71772dc29000-71772dc2a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -71772dc2a000-71772dc2b000 rw-p 00000000 00:00 0 -71772e000000-71772ecf5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -71772ecf5000-71772f6d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -71772f6d8000-71772fae9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -71772fae9000-71772ff6b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -71772ff6b000-71772ff73000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -71772ff73000-71772ff7e000 rw-p 00000000 00:00 0 -717730000000-717730021000 rw-p 00000000 00:00 0 -717730021000-717734000000 ---p 00000000 00:00 0 -717734000000-717734021000 rw-p 00000000 00:00 0 -717734021000-717738000000 ---p 00000000 00:00 0 -717738400000-717738401000 ---p 00000000 00:00 0 -717738401000-717738c01000 rw-p 00000000 00:00 0 -717738e00000-717738e01000 ---p 00000000 00:00 0 -717738e01000-717739601000 rw-p 00000000 00:00 0 -717739800000-717739801000 ---p 00000000 00:00 0 -717739801000-71773a001000 rw-p 00000000 00:00 0 -71773a200000-71773a201000 ---p 00000000 00:00 0 -71773a201000-71773aa01000 rw-p 00000000 00:00 0 -71773ac00000-71773ac01000 ---p 00000000 00:00 0 -71773ac01000-71773b401000 rw-p 00000000 00:00 0 -71773b600000-71773b601000 ---p 00000000 00:00 0 -71773b601000-71773be01000 rw-p 00000000 00:00 0 -71773c000000-71773c021000 rw-p 00000000 00:00 0 -71773c021000-717740000000 ---p 00000000 00:00 0 -717740000000-717740021000 rw-p 00000000 00:00 0 -717740021000-717744000000 ---p 00000000 00:00 0 -717744200000-717744400000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717744400000-71774448d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -71774448d000-717744bf5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -717744bf5000-717745482000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -717745482000-7177454c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -7177454c4000-7177454c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -7177454c7000-7177454cd000 rw-p 00000000 00:00 0 -717745600000-7177457c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -7177457c4000-7177474c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -7177474c4000-717747b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -717747b39000-717747b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -717747b3a000-717747d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -717747d1a000-717747d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -717747d93000-717747e08000 rw-p 00000000 00:00 0 -717748000000-717748021000 rw-p 00000000 00:00 0 -717748021000-71774c000000 ---p 00000000 00:00 0 -71774c000000-71774c635000 rw-p 00000000 00:00 0 -71774c635000-717750000000 ---p 00000000 00:00 0 -717750040000-7177500c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177500c0000-7177502c0000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177502c0000-7177503c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177503c0000-717750400000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717750400000-717750600000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717750600000-71775065b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -71775065b000-7177509d9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -7177509d9000-717750dd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -717750dd5000-717750e10000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -717750e10000-717750e15000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -717750e15000-717750e40000 rw-p 00000000 00:00 0 -717750e60000-717750ea0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717750ea0000-717750ec0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717750ec0000-717750f00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717750f00000-717751000000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717751000000-71775106e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -71775106e000-7177515d5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -7177515d5000-717751ce8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -717751ce8000-717751ce9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -717751ce9000-717751d26000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -717751d26000-717751d29000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -717751d29000-717751d2b000 rw-p 00000000 00:00 0 -717751d2d000-717751d40000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717751d40000-717751dc0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717751dc0000-717751e00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717751e00000-717752041000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -717752041000-717752062000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -717752062000-717752200000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -717752200000-717752e00000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -717752e00000-717753cab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -717753cab000-717753e10000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -717753e10000-717753e7e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -717753e7e000-717753e9c000 rw-p 00000000 00:00 0 -717753ea0000-717753ec0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717753ec0000-717753f00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717753f00000-717754000000 rw-s 00000000 00:06 1017 /dev/nvidiactl -717754000000-7177543f0000 rw-p 00000000 00:00 0 -7177543f0000-7177545b0000 rw-p 00000000 00:00 0 -7177545b0000-7177546f0000 rw-p 00000000 00:00 0 -7177546f0000-717754710000 rw-p 00000000 00:00 0 -717754710000-717754730000 rw-p 00000000 00:00 0 -717754730000-717754770000 rw-p 00000000 00:00 0 -717754770000-7177549f0000 rw-p 00000000 00:00 0 -7177549f0000-717754a10000 rw-p 00000000 00:00 0 -717754a10000-717754a30000 rw-p 00000000 00:00 0 -717754a30000-717754a70000 rw-p 00000000 00:00 0 -717754a70000-717754af0000 rw-p 00000000 00:00 0 -717754af0000-717754cf0000 rw-p 00000000 00:00 0 -717754cf0000-717754d10000 rw-p 00000000 00:00 0 -717754d10000-717754d30000 rw-p 00000000 00:00 0 -717754d30000-717754d70000 rw-p 00000000 00:00 0 -717754d70000-717754ef0000 rw-p 00000000 00:00 0 -717754ef0000-717754ff0000 rw-p 00000000 00:00 0 -717754ff0000-7177550f0000 rw-p 00000000 00:00 0 -7177550f0000-717755170000 rw-p 00000000 00:00 0 -717755170000-717755200000 ---p 00000000 00:00 0 -717755200000-717755420000 rw-p 00000000 00:00 0 -717755420000-717758000000 ---p 00000000 00:00 0 -717758000000-717758021000 rw-p 00000000 00:00 0 -717758021000-71775c000000 ---p 00000000 00:00 0 -71775c020000-71775c040000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71775c040000-71775c080000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71775c080000-71775c180000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71775c180000-71775c200000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71775c200000-71775c201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -71775c201000-71775c202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -71775c202000-71775de1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -71775de1c000-71775de1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -71775de1d000-71775de1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -71775de20000-71775de40000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71775de40000-71775de80000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71775de80000-71775df80000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71775df80000-71775e000000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71775e000000-71775ed91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa -71775ed91000-71775f000000 ---p 00000000 00:00 0 -71775f000000-71775f030000 rw-p 00000000 00:00 0 -71775f030000-71775f090000 rw-p 00000000 00:00 0 -71775f090000-71775f0b0000 rw-p 00000000 00:00 0 -71775f0b0000-71775f130000 rw-p 00000000 00:00 0 -71775f130000-71775f150000 rw-p 00000000 00:00 0 -71775f150000-71775f1b0000 rw-p 00000000 00:00 0 -71775f1b0000-71775f1d0000 rw-p 00000000 00:00 0 -71775f1d0000-71775f230000 rw-p 00000000 00:00 0 -71775f230000-71775f250000 rw-p 00000000 00:00 0 -71775f250000-71775f280000 ---p 00000000 00:00 0 -71775f280000-71775f290000 rw-p 00000000 00:00 0 -71775f290000-71779f000000 ---p 00000000 00:00 0 -71779f007000-71779f01a000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71779f03a000-71779f07a000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71779f07a000-71779f2bf000 rw-s 00000000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) -71779f2bf000-71779f400000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index -71779f400000-71779f493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -71779f493000-71779f8e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -71779f8e6000-71779fdfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -71779fdfc000-71779fe34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -71779fe34000-71779fe44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -71779fe44000-71779fe49000 rw-p 00000000 00:00 0 -71779fe4c000-71779fe5f000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71779fe5f000-71779fe72000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71779fe72000-71779fe92000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71779fe92000-71779fea5000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71779fea5000-71779fee5000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71779fee5000-71779ff05000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71779ff05000-71779ff45000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71779ff45000-71779ff85000 rw-s 00000000 00:06 1017 /dev/nvidiactl -71779ff85000-71779ff96000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -71779ff96000-71779ffd8000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -71779ffd8000-71779fff0000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -71779fff0000-71779fffe000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -71779fffe000-7177a0000000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -7177a0000000-7177a0021000 rw-p 00000000 00:00 0 -7177a0021000-7177a4000000 ---p 00000000 00:00 0 -7177a4000000-7177a4021000 rw-p 00000000 00:00 0 -7177a4021000-7177a8000000 ---p 00000000 00:00 0 -7177a800c000-7177a8010000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a8010000-7177a8030000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a8030000-7177a8034000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7177a8034000-7177a8050000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7177a8050000-7177a8056000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7177a8056000-7177a8057000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7177a8057000-7177a8059000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7177a8059000-7177a805a000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7177a805a000-7177a8064000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -7177a8064000-7177a806e000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -7177a806e000-7177a8075000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -7177a8075000-7177a807e000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -7177a807e000-7177a807f000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -7177a807f000-7177a808b000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -7177a808b000-7177a80ab000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -7177a80ab000-7177a80b7000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -7177a80b7000-7177a80c1000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -7177a80c1000-7177a80c2000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -7177a80c2000-7177a80d1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7177a80d1000-7177a81b7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7177a81b7000-7177a81f5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7177a81f5000-7177a81f6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7177a81f6000-7177a81f9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7177a81f9000-7177a81ff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7177a81ff000-7177a8200000 rw-p 00000000 00:00 0 -7177a8200000-7177a8216000 r--p 00000000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -7177a8216000-7177a8306000 r-xp 00016000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -7177a8306000-7177a8379000 r--p 00106000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -7177a8379000-7177a8380000 r--p 00178000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -7177a8380000-7177a8387000 rw-p 0017f000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -7177a8387000-7177a8402000 rw-p 00000000 00:00 0 -7177a8402000-7177a8403000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a8403000-7177a8404000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a8404000-7177a8406000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a8406000-7177a8407000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a8407000-7177a8408000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a8408000-7177a8409000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a8409000-7177a840a000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a840a000-7177a840b000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a840b000-7177a840c000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a840c000-7177a840d000 rw-s 00044000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) -7177a840d000-7177a840e000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a840e000-7177a8412000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a8412000-7177a8413000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a8413000-7177a8415000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7177a8415000-7177a841e000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7177a841e000-7177a8421000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7177a8421000-7177a8422000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7177a8422000-7177a8423000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7177a8423000-7177a8424000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7177a8424000-7177a8426000 rw-p 00000000 00:00 0 -7177a8426000-7177a8428000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -7177a8428000-7177a8493000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -7177a8493000-7177a84bb000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -7177a84bb000-7177a84bc000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -7177a84bc000-7177a84bd000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -7177a84bd000-7177a84c3000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7177a84c3000-7177a84dd000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7177a84dd000-7177a84e4000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7177a84e4000-7177a84e5000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7177a84e5000-7177a84e6000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7177a84e6000-7177a84e7000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7177a84e7000-7177a84e9000 rw-p 00000000 00:00 0 -7177a84e9000-7177a84fc000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -7177a84fc000-7177a851b000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -7177a851b000-7177a8528000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -7177a8528000-7177a8538000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -7177a8538000-7177a8539000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -7177a8539000-7177a854c000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7177a854c000-7177a85cb000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7177a85cb000-7177a85f6000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7177a85f6000-7177a85f7000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7177a85f7000-7177a85fe000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7177a85fe000-7177a85ff000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7177a85ff000-7177a8f22000 rw-p 00000000 00:00 0 -7177a8f22000-7177a8f24000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a8f24000-7177a8f25000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a8f25000-7177a8f26000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a8f26000-7177a8f2a000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a8f2a000-7177a8f2b000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a8f2b000-7177a8f2f000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -7177a8f2f000-7177a8f3f000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -7177a8f3f000-7177a8f42000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -7177a8f42000-7177a8f43000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -7177a8f43000-7177a8f44000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -7177a8f44000-7177a8f4f000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7177a8f4f000-7177a8f7d000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7177a8f7d000-7177a8f8f000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7177a8f8f000-7177a8f90000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7177a8f90000-7177a8f91000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7177a8f91000-7177a8f92000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7177a8f92000-7177a8f96000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -7177a8f96000-7177a8fac000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -7177a8fac000-7177a8fb6000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -7177a8fb6000-7177a8fb7000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -7177a8fb7000-7177a8fb8000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -7177a8fb8000-7177a8fe7000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -7177a8fe7000-7177a90a3000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -7177a90a3000-7177a90ee000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -7177a90ee000-7177a90fc000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -7177a90fc000-7177a90fe000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -7177a90fe000-7177a90ff000 rw-p 00000000 00:00 0 -7177a90ff000-7177a9100000 ---p 00000000 00:00 0 -7177a9100000-7177a9200000 rw-p 00000000 00:00 0 -7177a9200000-7177a9202000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a9202000-7177a9203000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a9203000-7177a9223000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a9223000-7177a9289000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -7177a9289000-7177a937c000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -7177a937c000-7177a9408000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -7177a9408000-7177a941b000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -7177a941b000-7177a941c000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -7177a941c000-7177a941e000 rw-p 00000000 00:00 0 -7177a941e000-7177a944d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7177a944d000-7177a95a0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7177a95a0000-7177a95f4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7177a95f4000-7177a95f5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7177a95f5000-7177a95fe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7177a95fe000-7177a95ff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7177a95ff000-7177a9600000 rw-p 00000000 00:00 0 -7177a9600000-7177a969a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7177a969a000-7177a97ab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7177a97ab000-7177a981a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7177a981a000-7177a981b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7177a981b000-7177a9826000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7177a9826000-7177a9829000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7177a9829000-7177a982c000 rw-p 00000000 00:00 0 -7177a982c000-7177a982d000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177a982d000-7177a9836000 rw-s 00000000 00:01 672023 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -7177a9836000-7177a983f000 rw-s 00000000 00:01 672022 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -7177a983f000-7177a9841000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7177a9841000-7177a985a000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7177a985a000-7177a985c000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7177a985c000-7177a985d000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7177a985d000-7177a985e000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7177a985e000-7177a985f000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7177a985f000-7177a9863000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177a9863000-7177a9865000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -7177a9865000-7177a986d000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -7177a986d000-7177a986f000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -7177a986f000-7177a9870000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -7177a9870000-7177a9871000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -7177a9871000-7177a9873000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7177a9873000-7177a987b000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7177a987b000-7177a987c000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7177a987c000-7177a987d000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7177a987d000-7177a987e000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7177a987e000-7177a987f000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7177a987f000-7177a98b2000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -7177a98b2000-7177a9915000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -7177a9915000-7177a9934000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -7177a9934000-7177a995f000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -7177a995f000-7177a9960000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -7177a9960000-7177a9961000 rw-p 00000000 00:00 0 -7177a9961000-7177a9964000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7177a9964000-7177a9985000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7177a9985000-7177a9991000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7177a9991000-7177a9992000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7177a9992000-7177a9993000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7177a9993000-7177a9994000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7177a9994000-7177a99a2000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -7177a99a2000-7177a99b3000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -7177a99b3000-7177a99c1000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -7177a99c1000-7177a99c5000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -7177a99c5000-7177a99c6000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -7177a99c6000-7177a99ce000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -7177a99ce000-7177a99ec000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -7177a99ec000-7177a99f9000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -7177a99f9000-7177a99fb000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -7177a99fb000-7177a99fc000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -7177a99fc000-7177a9a00000 rw-p 00000000 00:00 0 -7177a9a00000-7177a9a01000 ---p 00000000 00:00 0 -7177a9a01000-7177aa201000 rw-p 00000000 00:00 0 -7177aa201000-7177aa202000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177aa202000-7177aa204000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -7177aa204000-7177aa208000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -7177aa208000-7177aa20a000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -7177aa20a000-7177aa20b000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -7177aa20b000-7177aa20c000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -7177aa20c000-7177aa210000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7177aa210000-7177aa225000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7177aa225000-7177aa22b000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7177aa22b000-7177aa22c000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7177aa22c000-7177aa22e000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7177aa22e000-7177aa22f000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7177aa22f000-7177aa232000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -7177aa232000-7177aa249000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -7177aa249000-7177aa24d000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -7177aa24d000-7177aa24e000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -7177aa24e000-7177aa24f000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -7177aa24f000-7177aa253000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7177aa253000-7177aa272000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7177aa272000-7177aa27c000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7177aa27c000-7177aa27d000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7177aa27d000-7177aa27f000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7177aa27f000-7177aa280000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7177aa280000-7177aa285000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7177aa285000-7177aa290000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7177aa290000-7177aa294000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7177aa294000-7177aa295000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7177aa295000-7177aa296000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7177aa296000-7177aa297000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7177aa297000-7177aa2a1000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -7177aa2a1000-7177aa353000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -7177aa353000-7177aa364000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -7177aa364000-7177aa365000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -7177aa365000-7177aa366000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -7177aa366000-7177aa376000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7177aa376000-7177aa3d4000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7177aa3d4000-7177aa3f0000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7177aa3f0000-7177aa3f1000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7177aa3f1000-7177aa3f7000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7177aa3f7000-7177aa3f8000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7177aa3f8000-7177aa400000 rw-p 00000000 00:00 0 -7177aa400000-7177aa800000 rw-p 00000000 00:00 0 -7177aa800000-7177aa802000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177aa802000-7177aa806000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177aa806000-7177aa857000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7177aa857000-7177aa8b3000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7177aa8b3000-7177aa8e8000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7177aa8e8000-7177aa8e9000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7177aa8e9000-7177aa909000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7177aa909000-7177aa929000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7177aa929000-7177aa92e000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7177aa92e000-7177aa930000 rw-p 00000000 00:00 0 -7177aa930000-7177aa936000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -7177aa936000-7177aa980000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -7177aa980000-7177aa9aa000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -7177aa9aa000-7177aa9ab000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -7177aa9ab000-7177aa9ac000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -7177aa9ac000-7177aa9b0000 ---p 00000000 00:00 0 -7177aa9b0000-7177aaaac000 rw-p 00000000 00:00 0 -7177aaaac000-7177aaaad000 ---p 00000000 00:00 0 -7177aaaad000-7177aabad000 rw-p 00000000 00:00 0 -7177aabad000-7177aabae000 ---p 00000000 00:00 0 -7177aabae000-7177aacae000 rw-p 00000000 00:00 0 -7177aacae000-7177aacaf000 ---p 00000000 00:00 0 -7177aacaf000-7177aadaf000 rw-p 00000000 00:00 0 -7177aadaf000-7177aadb0000 ---p 00000000 00:00 0 -7177aadb0000-7177aaeb0000 rw-p 00000000 00:00 0 -7177aaeb0000-7177aaeb1000 ---p 00000000 00:00 0 -7177aaeb1000-7177aafb1000 rw-p 00000000 00:00 0 -7177aafb1000-7177aafb2000 ---p 00000000 00:00 0 -7177aafb2000-7177ab0b2000 rw-p 00000000 00:00 0 -7177ab0b2000-7177ab0b6000 ---p 00000000 00:00 0 -7177ab0b6000-7177ab1b2000 rw-p 00000000 00:00 0 -7177ab1b2000-7177ab2b2000 rw-s 00000000 00:01 1015832 /SYSV00000000 (deleted) -7177ab2b2000-7177ab2b6000 ---p 00000000 00:00 0 -7177ab2b6000-7177ab3b2000 rw-p 00000000 00:00 0 -7177ab3b2000-7177ab3b6000 ---p 00000000 00:00 0 -7177ab3b6000-7177ab4b2000 rw-p 00000000 00:00 0 -7177ab4b2000-7177ab4b6000 ---p 00000000 00:00 0 -7177ab4b6000-7177ab5b2000 rw-p 00000000 00:00 0 -7177ab5b2000-7177ab5b6000 ---p 00000000 00:00 0 -7177ab5b6000-7177ab6b2000 rw-p 00000000 00:00 0 -7177ab6b2000-7177ab6b6000 ---p 00000000 00:00 0 -7177ab6b6000-7177ab7b2000 rw-p 00000000 00:00 0 -7177ab7b2000-7177ab7b6000 ---p 00000000 00:00 0 -7177ab7b6000-7177ab8b2000 rw-p 00000000 00:00 0 -7177ab8b2000-7177ab8b6000 ---p 00000000 00:00 0 -7177ab8b6000-7177ab9b2000 rw-p 00000000 00:00 0 -7177ab9b2000-7177ab9bf000 r--p 00000000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7177ab9bf000-7177aba48000 r-xp 0000d000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7177aba48000-7177aba71000 r--p 00096000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7177aba71000-7177aba72000 ---p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7177aba72000-7177aba79000 r--p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7177aba79000-7177aba7a000 rw-p 000c6000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7177aba7a000-7177abbfb000 r-xp 00000000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -7177abbfb000-7177abbfc000 ---p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -7177abbfc000-7177abbfe000 r--p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -7177abbfe000-7177abbff000 rw-p 00183000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -7177abbff000-7177abc00000 rw-p 00000000 00:00 0 -7177abc00000-7177ac021000 rw-p 00000000 00:00 0 -7177ac021000-7177b0000000 ---p 00000000 00:00 0 -7177b0000000-7177b0021000 rw-p 00000000 00:00 0 -7177b0021000-7177b4000000 ---p 00000000 00:00 0 -7177b4000000-7177b4001000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177b4001000-7177b4003000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7177b4003000-7177b400a000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7177b400a000-7177b400b000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7177b400b000-7177b400c000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7177b400c000-7177b400d000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7177b400d000-7177b400e000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7177b400e000-7177b4011000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7177b4011000-7177b4014000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7177b4014000-7177b4015000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7177b4015000-7177b4016000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7177b4016000-7177b4017000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7177b4017000-7177b4018000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7177b4018000-7177b401d000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -7177b401d000-7177b4023000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -7177b4023000-7177b4026000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -7177b4026000-7177b4028000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -7177b4028000-7177b4029000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -7177b4029000-7177b4039000 r--p 00000000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -7177b4039000-7177b405a000 r-xp 00010000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -7177b405a000-7177b4096000 r--p 00031000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -7177b4096000-7177b409a000 r--p 0006c000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -7177b409a000-7177b409d000 rw-p 00070000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -7177b409d000-7177b40c0000 rw-p 00000000 00:00 0 -7177b40c0000-7177b40d9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7177b40d9000-7177b4165000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7177b4165000-7177b41fa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7177b41fa000-7177b41fb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7177b41fb000-7177b41fc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7177b41fc000-7177b4200000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7177b4200000-7177b4600000 rw-p 00000000 00:00 0 -7177b4600000-7177b4608000 r--p 00000000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7177b4608000-7177b4660000 r-xp 00008000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7177b4660000-7177b4671000 r--p 00060000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7177b4671000-7177b4672000 ---p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7177b4672000-7177b4678000 r--p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7177b4678000-7177b4679000 rw-p 00077000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7177b4679000-7177b4883000 rw-p 00000000 00:00 0 -7177b4883000-7177b4884000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177b4884000-7177b4885000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177b4885000-7177b4889000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177b4889000-7177b488c000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7177b488c000-7177b488f000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7177b488f000-7177b4890000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7177b4890000-7177b4891000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7177b4891000-7177b4892000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7177b4892000-7177b4893000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7177b4893000-7177b4896000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7177b4896000-7177b48aa000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7177b48aa000-7177b48ae000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7177b48ae000-7177b48af000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7177b48af000-7177b48b0000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7177b48b0000-7177b48b1000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7177b48b1000-7177b48b4000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -7177b48b4000-7177b48ba000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -7177b48ba000-7177b48bc000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -7177b48bc000-7177b48bd000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -7177b48bd000-7177b48be000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -7177b48be000-7177b48c5000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7177b48c5000-7177b48cb000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7177b48cb000-7177b48ce000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7177b48ce000-7177b48cf000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7177b48cf000-7177b48d0000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7177b48d0000-7177b48d1000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7177b48d1000-7177b48dc000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7177b48dc000-7177b48e5000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7177b48e5000-7177b48ea000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7177b48ea000-7177b48eb000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7177b48eb000-7177b48ed000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7177b48ed000-7177b48ee000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7177b48ee000-7177b48f5000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache -7177b48f5000-7177b48f6000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7177b48f6000-7177b48f9000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7177b48f9000-7177b48fa000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7177b48fa000-7177b48fb000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7177b48fb000-7177b48fc000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7177b48fc000-7177b48fd000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7177b48fd000-7177b4900000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -7177b4900000-7177b4904000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -7177b4904000-7177b4906000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -7177b4906000-7177b4907000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -7177b4907000-7177b4908000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -7177b4908000-7177b4909000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -7177b4909000-7177b490b000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -7177b490b000-7177b490c000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -7177b490c000-7177b490d000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -7177b490d000-7177b490e000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -7177b490e000-7177b49cf000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -7177b49cf000-7177b49d0000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -7177b49d0000-7177b49db000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -7177b49db000-7177b4a00000 rw-p 00000000 00:00 0 -7177b4a00000-7177b4a04000 ---p 00000000 00:00 0 -7177b4a04000-7177b4b00000 rw-p 00000000 00:00 0 -7177b4b00000-7177b4b04000 ---p 00000000 00:00 0 -7177b4b04000-7177b4c00000 rw-p 00000000 00:00 0 -7177b4c00000-7177b4c04000 ---p 00000000 00:00 0 -7177b4c04000-7177b4d00000 rw-p 00000000 00:00 0 -7177b4d00000-7177b4d04000 ---p 00000000 00:00 0 -7177b4d04000-7177b4e00000 rw-p 00000000 00:00 0 -7177b4e00000-7177b4e04000 ---p 00000000 00:00 0 -7177b4e04000-7177b4f00000 rw-p 00000000 00:00 0 -7177b4f00000-7177b4f04000 ---p 00000000 00:00 0 -7177b4f04000-7177b5000000 rw-p 00000000 00:00 0 -7177b5000000-7177b5f06000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive -7177b5f06000-7177b5f07000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177b5f07000-7177b5f09000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177b5f09000-7177b5f0a000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177b5f0a000-7177b5f7a000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -7177b5f7a000-7177b5f7b000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -7177b5f7b000-7177b5f80000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -7177b5f80000-7177b5f82000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -7177b5f82000-7177b5f84000 rw-p 00000000 00:00 0 -7177b5f84000-7177b5fb0000 r--p 00000000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7177b5fb0000-7177b5fe4000 r-xp 0002c000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7177b5fe4000-7177b5ffe000 r--p 00060000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7177b5ffe000-7177b5fff000 r--p 00079000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7177b5fff000-7177b6000000 rw-p 0007a000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7177b6000000-7177b8000000 rw-p 00000000 00:00 0 -7177b8000000-7177b8021000 rw-p 00000000 00:00 0 -7177b8021000-7177bc000000 ---p 00000000 00:00 0 -7177bc000000-7177bc001000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177bc001000-7177bc002000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7177bc002000-7177bc003000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -7177bc003000-7177bc004000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -7177bc004000-7177bc005000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -7177bc005000-7177bc006000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -7177bc006000-7177bc007000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -7177bc007000-7177bc008000 r--p 00000000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -7177bc008000-7177bc009000 r-xp 00001000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -7177bc009000-7177bc028000 r--p 00002000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -7177bc028000-7177bc029000 r--p 00020000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -7177bc029000-7177bc02a000 rw-p 00021000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -7177bc02a000-7177bc0f8000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -7177bc0f8000-7177bc0f9000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -7177bc0f9000-7177bc0fa000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -7177bc0fa000-7177bc0fe000 ---p 00000000 00:00 0 -7177bc0fe000-7177bc1fa000 rw-p 00000000 00:00 0 -7177bc1fa000-7177bc1fe000 ---p 00000000 00:00 0 -7177bc1fe000-7177bc2fa000 rw-p 00000000 00:00 0 -7177bc2fa000-7177bc2fe000 ---p 00000000 00:00 0 -7177bc2fe000-7177bc3fa000 rw-p 00000000 00:00 0 -7177bc3fa000-7177bc3fb000 ---p 00000000 00:00 0 -7177bc3fb000-7177bc4fb000 rw-p 00000000 00:00 0 -7177bc4fb000-7177bc4fc000 ---p 00000000 00:00 0 -7177bc4fc000-7177bc5fc000 rw-p 00000000 00:00 0 -7177bc5fc000-7177bc5fd000 ---p 00000000 00:00 0 -7177bc5fd000-7177bc6fd000 rw-p 00000000 00:00 0 -7177bc6fd000-7177bc6fe000 ---p 00000000 00:00 0 -7177bc6fe000-7177bc7fe000 rw-p 00000000 00:00 0 -7177bc7fe000-7177bca70000 rw-p 00000000 00:00 0 -7177bca70000-7177c4700000 ---p 00000000 00:00 0 -7177c4700000-7177c4704000 ---p 00000000 00:00 0 -7177c4704000-7177c4800000 rw-p 00000000 00:00 0 -7177c4800000-7177c4ad0000 rwxp 00000000 00:00 0 -7177c4ad0000-7177cbd37000 ---p 00000000 00:00 0 -7177cbd37000-7177cbfb7000 rwxp 00000000 00:00 0 -7177cbfb7000-7177cc2c8000 ---p 00000000 00:00 0 -7177cc2c8000-7177cc538000 rwxp 00000000 00:00 0 -7177cc538000-7177d3800000 ---p 00000000 00:00 0 -7177d3800000-7177dbfb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules -7177dbfb5000-7177dbfb6000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177dbfb6000-7177dbfb7000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7177dbfb7000-7177dbfb8000 r--s 00000000 00:06 1017 /dev/nvidiactl -7177dbfb8000-7177dbfb9000 rw-s 00000000 00:01 1028 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -7177dbfb9000-7177dbfba000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -7177dbfba000-7177dbfbb000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -7177dbfbb000-7177dbfbc000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -7177dbfbc000-7177dbfbd000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -7177dbfbd000-7177dbfbe000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -7177dbfbe000-7177dbfc0000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -7177dbfc0000-7177dbfc2000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -7177dbfc2000-7177dbfc3000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -7177dbfc3000-7177dbfc4000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -7177dbfc4000-7177dbfc5000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -7177dbfc5000-7177dbfca000 r--p 00000000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -7177dbfca000-7177dbff3000 r-xp 00005000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -7177dbff3000-7177dbffe000 r--p 0002e000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -7177dbffe000-7177dbfff000 r--p 00038000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -7177dbfff000-7177dc000000 rw-p 00039000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -7177dc000000-7177dc6a1000 rw-p 00000000 00:00 0 -7177dc6a1000-7177e0000000 ---p 00000000 00:00 0 -7177e0000000-7177e0001000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -7177e0001000-7177e0002000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -7177e0002000-7177e0003000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -7177e0003000-7177e0004000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -7177e0004000-7177e0005000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -7177e0005000-7177e0007000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -7177e0007000-7177e000a000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -7177e000a000-7177e000b000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -7177e000b000-7177e000c000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -7177e000c000-7177e000d000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -7177e000d000-7177e000f000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -7177e000f000-7177e0015000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -7177e0015000-7177e0017000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -7177e0017000-7177e0018000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -7177e0018000-7177e0019000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -7177e0019000-7177e001a000 r--p 00000000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -7177e001a000-7177e0022000 r-xp 00001000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -7177e0022000-7177e0025000 r--p 00009000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -7177e0025000-7177e0026000 r--p 0000b000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -7177e0026000-7177e0027000 rw-p 0000c000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -7177e0027000-7177e0029000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -7177e0029000-7177e0030000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -7177e0030000-7177e0032000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -7177e0032000-7177e0033000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -7177e0033000-7177e0034000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -7177e0034000-7177e0038000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -7177e0038000-7177e0045000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -7177e0045000-7177e0048000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -7177e0048000-7177e0049000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -7177e0049000-7177e004a000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -7177e004a000-7177e004b000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -7177e004b000-7177e004c000 rw-p 00000000 00:00 0 -7177e004c000-7177e0057000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -7177e0057000-7177e006b000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -7177e006b000-7177e0074000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -7177e0074000-7177e0075000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -7177e0075000-7177e0076000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -7177e0076000-7177e06fd000 rw-p 00000000 00:00 0 -7177e06fd000-7177e06fe000 ---p 00000000 00:00 0 -7177e06fe000-7177e07fe000 rw-p 00000000 00:00 0 -7177e07fe000-7177e07ff000 ---p 00000000 00:00 0 -7177e07ff000-7177e08ff000 rw-p 00000000 00:00 0 -7177e08ff000-7177e0900000 ---p 00000000 00:00 0 -7177e0900000-7177e0a00000 rw-p 00000000 00:00 0 -7177e0a00000-7177e0a0e000 rw-p 00000000 00:00 0 -7177e0a0e000-7177e19a0000 ---p 00000000 00:00 0 -7177e19a0000-7177e19a1000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -7177e19a1000-7177e19a3000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -7177e19a3000-7177e19a4000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -7177e19a4000-7177e19a5000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -7177e19a5000-7177e19a6000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -7177e19a6000-7177e19a7000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -7177e19a7000-7177e19a8000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -7177e19a8000-7177e19a9000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -7177e19a9000-7177e19aa000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -7177e19aa000-7177e19ab000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -7177e19ab000-7177e19ae000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -7177e19ae000-7177e19ba000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -7177e19ba000-7177e19bd000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -7177e19bd000-7177e19be000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -7177e19be000-7177e19bf000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -7177e19bf000-7177e19fd000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -7177e19fd000-7177e19fe000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -7177e19fe000-7177e19ff000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -7177e19ff000-7177e1a00000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -7177e1a00000-7177e1a0e000 rw-p 00000000 00:00 0 -7177e1a0e000-7177e29a0000 ---p 00000000 00:00 0 -7177e29a0000-7177e29a1000 rw-s 00000000 00:01 672021 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) -7177e29a1000-7177e29a3000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -7177e29a3000-7177e29a5000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -7177e29a5000-7177e29a7000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -7177e29a7000-7177e29a8000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -7177e29a8000-7177e29a9000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -7177e29a9000-7177e29ab000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -7177e29ab000-7177e29ae000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -7177e29ae000-7177e29af000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -7177e29af000-7177e29b0000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -7177e29b0000-7177e29b1000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -7177e29b1000-7177e29b5000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -7177e29b5000-7177e29c0000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -7177e29c0000-7177e29c4000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -7177e29c4000-7177e29c5000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -7177e29c5000-7177e29c6000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -7177e29c6000-7177e332f000 rw-p 00000000 00:00 0 -7177e332f000-7177e3415000 ---p 00000000 00:00 0 -7177e3415000-7177e341b000 rw-p 00000000 00:00 0 -7177e341b000-7177e3500000 ---p 00000000 00:00 0 -7177e3500000-7177e3504000 ---p 00000000 00:00 0 -7177e3504000-7177e3600000 rw-p 00000000 00:00 0 -7177e3600000-7177e4930000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -7177e4930000-7177e4a00000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -7177e4a00000-7177e4a2e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -7177e4a2e000-7177e4aa4000 rw-p 00000000 00:00 0 -7177e4aa4000-7177e4aa5000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -7177e4aa5000-7177e4aa7000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -7177e4aa7000-7177e4aa8000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -7177e4aa8000-7177e4aa9000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -7177e4aa9000-7177e4aaa000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -7177e4aaa000-7177e4aac000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -7177e4aac000-7177e4ab3000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -7177e4ab3000-7177e4ab5000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -7177e4ab5000-7177e4ab6000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -7177e4ab6000-7177e4ab7000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -7177e4ab7000-7177e4ab8000 rw-s 00000000 00:01 672020 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -7177e4ab8000-7177e4ab9000 rw-s 00000000 00:01 671055 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -7177e4ab9000-7177e4aba000 r-xp 00000000 00:00 0 -7177e4aba000-7177e4abb000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -7177e4abb000-7177e4abc000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -7177e4abc000-7177e4abd000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -7177e4abd000-7177e4abe000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -7177e4abe000-7177e4abf000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -7177e4abf000-7177e4ac0000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -7177e4ac0000-7177e4ac3000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -7177e4ac3000-7177e4ac4000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -7177e4ac4000-7177e4ac5000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -7177e4ac5000-7177e4ac6000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -7177e4ac6000-7177e4ac8000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -7177e4ac8000-7177e4acf000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -7177e4acf000-7177e4ad1000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -7177e4ad1000-7177e4ad2000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -7177e4ad2000-7177e4ad3000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -7177e4ad3000-7177e4ad4000 r-xp 00000000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -7177e4ad4000-7177e4ad5000 ---p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -7177e4ad5000-7177e4ad6000 r--p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -7177e4ad6000-7177e4ad7000 rw-p 00002000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -7177e4ad7000-7177e4ad8000 rw-p 00000000 00:00 0 -7177e4ad8000-7177e4ad9000 r-xp 0005e000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7177e4ad9000-7177e4b19000 rw-p 00000000 00:00 0 -7177e4b19000-7177e4b27000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -7177e4b27000-7177e4ba3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -7177e4ba3000-7177e4bfe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -7177e4bfe000-7177e4bff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -7177e4bff000-7177e4c00000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -7177e4c00000-7177e4c28000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -7177e4c28000-7177e4dbd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -7177e4dbd000-7177e4e15000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -7177e4e15000-7177e4e16000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -7177e4e16000-7177e4e1a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -7177e4e1a000-7177e4e1c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -7177e4e1c000-7177e4e29000 rw-p 00000000 00:00 0 -7177e4e29000-7177e4e34000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -7177e4e34000-7177e4e35000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -7177e4e35000-7177e4e36000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -7177e4e36000-7177e4e37000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -7177e4e37000-7177e4e4a000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -7177e4e4a000-7177e4e4b000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -7177e4e4b000-7177e4e4c000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -7177e4e4c000-7177e4e4d000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -7177e4e4d000-7177e4e6d000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -7177e4e6d000-7177e4e6e000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -7177e4e6e000-7177e4e6f000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -7177e4e6f000-7177e4e70000 rw-p 00000000 00:00 0 -7177e4e70000-7177e4e8e000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -7177e4e8e000-7177e4e90000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -7177e4e90000-7177e4e91000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -7177e4e91000-7177e4e92000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -7177e4e92000-7177e4e93000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -7177e4e93000-7177e4e94000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -7177e4e94000-7177e4e95000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -7177e4e95000-7177e4e96000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -7177e4e96000-7177e4e9a000 rw-p 00000000 00:00 0 -7177e4e9a000-7177e4e9b000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -7177e4e9b000-7177e4e9c000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -7177e4e9c000-7177e4e9d000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -7177e4e9d000-7177e4e9e000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -7177e4e9e000-7177e4e9f000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -7177e4e9f000-7177e4ea0000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -7177e4ea0000-7177e4ea1000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -7177e4ea1000-7177e4ea2000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -7177e4ea2000-7177e4ea3000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -7177e4ea3000-7177e4ea4000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -7177e4ea4000-7177e4ea6000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -7177e4ea6000-7177e4eb7000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -7177e4eb7000-7177e4ebd000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -7177e4ebd000-7177e4ebe000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -7177e4ebe000-7177e4ebf000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -7177e4ebf000-7177e4ec0000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -7177e4ec0000-7177e4ec7000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -7177e4ec7000-7177e4ec8000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -7177e4ec8000-7177e4ec9000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -7177e4ec9000-7177e4eca000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -7177e4eca000-7177e4ecf000 rw-p 00000000 00:00 0 -7177e4ecf000-7177e4ed6000 ---p 00000000 00:00 0 -7177e4ed6000-7177e4ede000 rw-s 00000000 103:03 4325444 /tmp/hsperfdata_codex/85302 -7177e4ede000-7177e4edf000 ---p 00000000 00:00 0 -7177e4edf000-7177e4ee0000 r--p 00000000 00:00 0 -7177e4ee0000-7177e4eef000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -7177e4eef000-7177e4ef0000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -7177e4ef0000-7177e4ef1000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -7177e4ef1000-7177e4ef3000 rw-p 00000000 00:00 0 -7177e4ef3000-7177e4ef7000 r--p 00000000 00:00 0 [vvar] -7177e4ef7000-7177e4ef9000 r-xp 00000000 00:00 0 [vdso] -7177e4ef9000-7177e4efb000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7177e4efb000-7177e4f25000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7177e4f25000-7177e4f30000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7177e4f30000-7177e4f31000 ---p 00000000 00:00 0 -7177e4f31000-7177e4f33000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7177e4f33000-7177e4f35000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7ffd1cda5000-7ffd1cdc8000 rw-p 00000000 00:00 0 [stack] -ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] -Total number of mappings: 919 - - -VM Arguments: -jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -java_command: jme3test.vulkan.VulkanTest -java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 2 {product} {ergonomic} - uint G1ConcRefinementThreads = 8 {product} {ergonomic} - size_t G1HeapRegionSize = 4194304 {product} {ergonomic} - size_t InitialHeapSize = 524288000 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MarkStackSizeMax = 536870912 {product} {ergonomic} - size_t MaxHeapSize = 8388608000 {product} {ergonomic} - size_t MaxNewSize = 5033164800 {product} {ergonomic} - size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags foldmultilines=false - #1: stderr all=off uptime,level,tags foldmultilines=false - -Environment Variables: -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin -USERNAME=codex -SHELL=/bin/bash -DISPLAY=:1 -LANG=en_US.UTF-8 - -Active Locale: -LC_ALL=en_US.UTF-8 -LC_COLLATE=en_US.UTF-8 -LC_CTYPE=en_US.UTF-8 -LC_MESSAGES=en_US.UTF-8 -LC_MONETARY=en_US.UTF-8 -LC_NUMERIC=en_US.UTF-8 -LC_TIME=en_US.UTF-8 - -Signal Handlers: - SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked - SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - - -Periodic native trim disabled - ---------------- S Y S T E M --------------- - -OS: -DISTRIB_ID=Pop -DISTRIB_RELEASE=22.04 -DISTRIB_CODENAME=jammy -DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" -uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 -OS uptime: 0 days 15:17 hours -libc: glibc 2.35 NPTL 2.35 -rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k -load average: 2.88 1.79 1.18 - -/proc/meminfo: -MemTotal: 32767652 kB -MemFree: 20156988 kB -MemAvailable: 23562748 kB -Buffers: 347352 kB -Cached: 5014400 kB -SwapCached: 0 kB -Active: 8810016 kB -Inactive: 2815840 kB -Active(anon): 6299316 kB -Inactive(anon): 0 kB -Active(file): 2510700 kB -Inactive(file): 2815840 kB -Unevictable: 15204 kB -Mlocked: 72 kB -SwapTotal: 20970996 kB -SwapFree: 20970996 kB -Zswap: 0 kB -Zswapped: 0 kB -Dirty: 44 kB -Writeback: 0 kB -AnonPages: 6279364 kB -Mapped: 1830436 kB -Shmem: 35212 kB -KReclaimable: 197300 kB -Slab: 385968 kB -SReclaimable: 197300 kB -SUnreclaim: 188668 kB -KernelStack: 22928 kB -PageTables: 54400 kB -SecPageTables: 0 kB -NFS_Unstable: 0 kB -Bounce: 0 kB -WritebackTmp: 0 kB -CommitLimit: 37354820 kB -Committed_AS: 12319684 kB -VmallocTotal: 34359738367 kB -VmallocUsed: 252496 kB -VmallocChunk: 0 kB -Percpu: 9472 kB -HardwareCorrupted: 0 kB -AnonHugePages: 0 kB -ShmemHugePages: 6144 kB -ShmemPmdMapped: 0 kB -FileHugePages: 0 kB -FilePmdMapped: 0 kB -Unaccepted: 0 kB -HugePages_Total: 0 -HugePages_Free: 0 -HugePages_Rsvd: 0 -HugePages_Surp: 0 -Hugepagesize: 2048 kB -Hugetlb: 0 kB -DirectMap4k: 851768 kB -DirectMap2M: 15826944 kB -DirectMap1G: 16777216 kB - -/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never -/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 -/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force -/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never - -Process Memory: -Virtual Size: 13446916K (peak: 13510788K) -Resident Set Size: 319092K (peak: 319092K) (anon: 173400K, file: 144668K, shmem: 1024K) -Swapped out: 0K -C-Heap outstanding allocations: 78977K, retained: 34794K -glibc malloc tunables: (default) - -/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 -/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 -/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 -/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 - -container (cgroup) information: -container_type: cgroupv2 -cpu_cpuset_cpus: not supported -cpu_memory_nodes: not supported -active_processor_count: 8 -cpu_quota: not supported -cpu_period: not supported -cpu_shares: not supported -memory_limit_in_bytes: unlimited -memory_and_swap_limit_in_bytes: unlimited -memory_soft_limit_in_bytes: 0 -memory_usage_in_bytes: 5973584 k -memory_max_usage_in_bytes: not supported -rss_usage_in_bytes: 3563880 k -cache_usage_in_bytes: 2326868 k -memory_swap_current_in_bytes: 0 -memory_swap_max_limit_in_bytes: unlimited -maximum number of tasks: 38296 -current number of tasks: 330 - -Steal ticks since vm start: 0 -Steal ticks percentage since vm start: 0.000 - -CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c -CPU Model and flags from /proc/cpuinfo: -model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities - -Online cpus: 0-7 -Offline cpus: -BIOS frequency limitation: -Frequency switch latency (ns): 0 -Available cpu frequencies: -Current governor: powersave -Core performance/turbo boost: - -Memory: 4k page, physical 32767652k(23562748k free), swap 20970996k(20970996k free) -Page Sizes: 4k - -vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 - -END. diff --git a/hs_err_pid85657.log b/hs_err_pid85657.log deleted file mode 100644 index e5175b0904..0000000000 --- a/hs_err_pid85657.log +++ /dev/null @@ -1,1598 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGSEGV (0xb) at pc=0x00007903f6c5933a, pid=85657, tid=85703 -# -# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) -# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) -# Problematic frame: -# C [libjemalloc.so+0x5933a] -# -# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.85657) -# -# If you would like to submit a bug report, please visit: -# https://bugreport.java.com/bugreport/crash.jsp -# - ---------------- S U M M A R Y ------------ - -Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanTest - -Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS -Time: Thu Jun 26 22:36:15 2025 EDT elapsed time: 6.457410 seconds (0d 0h 0m 6s) - ---------------- T H R E A D --------------- - -Current thread is native thread - -Stack: [0x00007903f4f3d000,0x00007903f503d000], sp=0x00007903f503b8d0, free space=1018k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libjemalloc.so+0x5933a] - -siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 - -Registers: -RAX=0x0000000000000000, RBX=0x0000000000000200, RCX=0x0000000000000000, RDX=0x00007903f6c78440 -RSP=0x00007903f503b8d0, RBP=0x00007903f503bdb0, RSI=0x0000000000000000, RDI=0x00007903f65a8208 -R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x00007903f65a8248 -R12=0x000000000000003f, R13=0x00007903f503bd70, R14=0x000000000000003f, R15=0x00007903f503bad0 -RIP=0x00007903f6c5933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 - TRAPNO=0x000000000000000e - - -Top of Stack: (sp=0x00007903f503b8d0) -0x00007903f503b8d0: 00007904204e05a0 00007903f503b960 -0x00007903f503b8e0: 00007903f503b970 000079042754f211 -0x00007903f503b8f0: 0000000000000005 00007904204e0798 -0x00007903f503b900: 0000000000000005 0000000000000000 -0x00007903f503b910: 0000000000000001 00007904204e0230 -0x00007903f503b920: 00007904204e0798 00007904204e0230 -0x00007903f503b930: 000000010fd3f020 00007904204e05a0 -0x00007903f503b940: 0000000000000000 3430393700000000 -0x00007903f503b950: 3039306500000000 bf8eef8900000004 -0x00007903f503b960: 00000000ffffffff 0000000000000000 -0x00007903f503b970: 000079042720d4d0 000079042753c7c0 -0x00007903f503b980: 00007903f503b9b0 0000790426c78613 -0x00007903f503b990: 00007903f503bb88 000079042728849a -0x00007903f503b9a0: 0000000000000000 00007903f503baa0 -0x00007903f503b9b0: 00000000fbad8001 0000000000000002 -0x00007903f503b9c0: 00007904204e0230 00007903f7fff028 -0x00007903f503b9d0: 000079042741cae8 0000000000000004 -0x00007903f503b9e0: 00007903f503cb58 0000790427555f71 -0x00007903f503b9f0: 0000000000000005 0000000000000000 -0x00007903f503ba00: 000079042720d4d0 00007904272a53e0 -0x00007903f503ba10: 0000000000000000 00007903f503be00 -0x00007903f503ba20: 000079042741caf8 0000000000000000 -0x00007903f503ba30: 000079042741cae8 0000790427558dae -0x00007903f503ba40: 0000000000000001 000000000000006f -0x00007903f503ba50: 00007903f7fb17d0 0000000000000000 -0x00007903f503ba60: 00007902f0b80660 0000000000000000 -0x00007903f503ba70: 00000000000000ca f2eded9b3df5b717 -0x00007903f503ba80: 0000000000000213 0000790427417300 -0x00007903f503ba90: 0000000000000000 0000000000000200 -0x00007903f503baa0: 00007903f503bdb0 000000000000003f -0x00007903f503bab0: 00007903f503bd70 00007903f503bad0 -0x00007903f503bac0: 00007902f00024d0 00007903f6c592f8 - -Instructions: (pc=0x00007903f6c5933a) -0x00007903f6c5923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff -0x00007903f6c5924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 -0x00007903f6c5925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 -0x00007903f6c5926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c -0x00007903f6c5927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b -0x00007903f6c5928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 -0x00007903f6c5929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 -0x00007903f6c592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 -0x00007903f6c592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 -0x00007903f6c592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d -0x00007903f6c592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c -0x00007903f6c592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 -0x00007903f6c592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b -0x00007903f6c5930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 -0x00007903f6c5931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 -0x00007903f6c5932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 -0x00007903f6c5933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 -0x00007903f6c5934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c -0x00007903f6c5935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 -0x00007903f6c5936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 -0x00007903f6c5937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c -0x00007903f6c5938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 -0x00007903f6c5939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 -0x00007903f6c593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d -0x00007903f6c593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 -0x00007903f6c593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f -0x00007903f6c593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 -0x00007903f6c593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 -0x00007903f6c593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 -0x00007903f6c5940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff -0x00007903f6c5941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 -0x00007903f6c5942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 - - - ---------------- P R O C E S S --------------- - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x000079039e000000-0x000079039ed91000-0x000079039ed91000), size 14225408, SharedBaseAddress: 0x000079039e000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x000079039f000000-0x00007903df000000, reserved size: 1073741824 -Narrow klass base: 0x000079039e000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - - -Heap: - garbage-first heap total reserved 8192000K, committed 28672K, used 14493K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 3 young (12288K), 1 survivors (4096K) - Metaspace used 22161K, committed 22464K, reserved 1114112K - class space used 2300K, committed 2432K, reserved 1048576K - -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|0x000000060c000000, 0x000000060c367560, 0x000000060c400000| 85%| O| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 -| 1|0x000000060c400000, 0x000000060c6c3790, 0x000000060c800000| 69%| O| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 -| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 -| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 -| 4|0x000000060d000000, 0x000000060d2a9c00, 0x000000060d400000| 66%| E| |TAMS 0x000000060d000000| PB 0x000000060d000000| Complete | 0 -| 5|0x000000060d400000, 0x000000060d552c20, 0x000000060d800000| 33%| S|CS|TAMS 0x000000060d400000| PB 0x000000060d400000| Complete | 0 -| 6|0x000000060d800000, 0x000000060dc00000, 0x000000060dc00000|100%| E|CS|TAMS 0x000000060d800000| PB 0x000000060d800000| Complete | 0 - -Card table byte_map: [0x0000790406800000,0x00007904077a0000] _byte_map_base: 0x00007904037a0000 - -Marking Bits: (CMBitMap*) 0x0000790420059190 - Bits: [0x00007903fea00000, 0x0000790406700000) - -Polling page: 0x0000790427528000 - -Metaspace: - -Usage: - Non-class: 19.40 MB used. - Class: 2.25 MB used. - Both: 21.64 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 19.56 MB ( 31%) committed, 1 nodes. - Class space: 1.00 GB reserved, 2.38 MB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 21.94 MB ( 2%) committed. - -Chunk freelists: - Non-Class: 11.89 MB - Class: 13.44 MB - Both: 25.33 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 27.12 MB -CDS: on - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 8388608. - - enlarge_chunks_in_place: 1. - - use_allocation_guard: 0. - - -Internal statistics: - -num_allocs_failed_limit: 0. -num_arena_births: 334. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 351. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 0. -num_chunks_taken_from_freelist: 687. -num_chunk_merges: 0. -num_chunk_splits: 437. -num_chunks_enlarged: 282. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=120032Kb used=764Kb max_used=764Kb free=119267Kb - bounds [0x00007904102c8000, 0x0000790410538000, 0x0000790417800000] -CodeHeap 'profiled nmethods': size=120028Kb used=2918Kb max_used=2918Kb free=117109Kb - bounds [0x0000790408800000, 0x0000790408ae0000, 0x000079040fd37000] -CodeHeap 'non-nmethods': size=5700Kb used=2463Kb max_used=2482Kb free=3237Kb - bounds [0x000079040fd37000, 0x000079040ffb7000, 0x00007904102c8000] -CodeCache: size=245760Kb, used=6145Kb, max_used=6164Kb, free=239613Kb - total_blobs=3788, nmethods=2353, adapters=1341, full_count=0 -Compilation: enabled, stopped_count=0, restarted_count=0 - -Compilation events (20 events): -Event: 6.437 Thread 0x00007904201485b0 2487 3 com.jme3.util.IntMap::iterator (15 bytes) -Event: 6.438 Thread 0x00007904201485b0 nmethod 2487 0x0000790408ad4a88 code [0x0000790408ad4bc0, 0x0000790408ad4f50] -Event: 6.438 Thread 0x00007904201485b0 2488 3 com.jme3.util.IntMap$IntMapIterator:: (20 bytes) -Event: 6.438 Thread 0x00007904201485b0 nmethod 2488 0x0000790408ad4f88 code [0x0000790408ad50a0, 0x0000790408ad5278] -Event: 6.438 Thread 0x00007904201485b0 2489 3 com.jme3.util.IntMap$IntMapIterator::beginUse (24 bytes) -Event: 6.438 Thread 0x00007904201485b0 nmethod 2489 0x0000790408ad5308 code [0x0000790408ad5420, 0x0000790408ad55e8] -Event: 6.438 Thread 0x00007904201485b0 2490 3 com.jme3.util.IntMap$IntMapIterator::hasNext (20 bytes) -Event: 6.439 Thread 0x00007904201485b0 nmethod 2490 0x0000790408ad5608 code [0x0000790408ad5720, 0x0000790408ad5898] -Event: 6.453 Thread 0x00007904201485b0 2491 3 org.lwjgl.vulkan.VkClearValue::sizeof (4 bytes) -Event: 6.454 Thread 0x00007904201485b0 nmethod 2491 0x0000790408ad5908 code [0x0000790408ad5a20, 0x0000790408ad5b28] -Event: 6.454 Thread 0x00007904201485b0 2493 3 org.lwjgl.vulkan.VkOffset2D:: (7 bytes) -Event: 6.454 Thread 0x00007904201485b0 nmethod 2493 0x0000790408ad5c08 code [0x0000790408ad5d60, 0x0000790408ad6108] -Event: 6.454 Thread 0x00007904201485b0 2494 3 org.lwjgl.vulkan.VkOffset2D::set (14 bytes) -Event: 6.455 Thread 0x00007904201485b0 nmethod 2494 0x0000790408ad6188 code [0x0000790408ad62e0, 0x0000790408ad6730] -Event: 6.455 Thread 0x00007904201485b0 2495 3 org.lwjgl.vulkan.VkOffset2D::x (10 bytes) -Event: 6.455 Thread 0x00007904201485b0 nmethod 2495 0x0000790408ad6788 code [0x0000790408ad68c0, 0x0000790408ad6af8] -Event: 6.455 Thread 0x00007904201485b0 2492 3 org.lwjgl.vulkan.VkRenderPassBeginInfo::nclearValueCount (11 bytes) -Event: 6.455 Thread 0x00007904201485b0 nmethod 2492 0x0000790408ad6b88 code [0x0000790408ad6ca0, 0x0000790408ad6dc0] -Event: 6.455 Thread 0x00007904201485b0 2496 3 org.lwjgl.vulkan.VkOffset2D::malloc (19 bytes) -Event: 6.456 Thread 0x00007904201485b0 nmethod 2496 0x0000790408ad6e88 code [0x0000790408ad6fe0, 0x0000790408ad7330] - -GC Heap History (8 events): -Event: 2.375 GC heap before -{Heap before GC invocations=0 (full 0): - garbage-first heap total reserved 8192000K, committed 516096K, used 21627K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 6 young (24576K), 0 survivors (0K) - Metaspace used 16391K, committed 16640K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.386 GC heap after -{Heap after GC invocations=1 (full 1): - garbage-first heap total reserved 8192000K, committed 98304K, used 6315K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16391K, committed 16640K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.387 GC heap before -{Heap before GC invocations=1 (full 1): - garbage-first heap total reserved 8192000K, committed 98304K, used 6315K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16391K, committed 16640K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.399 GC heap after -{Heap after GC invocations=2 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 6315K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 0 young (0K), 0 survivors (0K) - Metaspace used 16391K, committed 16640K, reserved 1114112K - class space used 1823K, committed 1920K, reserved 1048576K -} -Event: 2.930 GC heap before -{Heap before GC invocations=2 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 14507K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 2 young (8192K), 0 survivors (0K) - Metaspace used 18709K, committed 19008K, reserved 1114112K - class space used 2041K, committed 2176K, reserved 1048576K -} -Event: 2.931 GC heap after -{Heap after GC invocations=3 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 7432K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 1 young (4096K), 1 survivors (4096K) - Metaspace used 18709K, committed 19008K, reserved 1114112K - class space used 2041K, committed 2176K, reserved 1048576K -} -Event: 2.983 GC heap before -{Heap before GC invocations=3 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 11528K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 2 young (8192K), 1 survivors (4096K) - Metaspace used 20103K, committed 20416K, reserved 1114112K - class space used 2172K, committed 2304K, reserved 1048576K -} -Event: 2.984 GC heap after -{Heap after GC invocations=4 (full 2): - garbage-first heap total reserved 8192000K, committed 28672K, used 7670K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 1 young (4096K), 1 survivors (4096K) - Metaspace used 20103K, committed 20416K, reserved 1114112K - class space used 2172K, committed 2304K, reserved 1048576K -} - -Dll operation events (12 events): -Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -Event: 0.016 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -Event: 0.024 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -Event: 0.026 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -Event: 0.071 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -Event: 0.121 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -Event: 0.127 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -Event: 0.217 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -Event: 0.219 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -Event: 0.246 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -Event: 0.323 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so - -Deoptimization events (20 events): -Event: 2.675 Thread 0x00007904206ae090 DEOPT PACKING pc=0x000079040888f38b sp=0x00007903f503a650 -Event: 2.675 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8b30f sp=0x00007903f5039b08 mode 0 -Event: 2.676 Thread 0x00007904206ae090 DEOPT PACKING pc=0x000079040888f38b sp=0x00007903f503a650 -Event: 2.676 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8b30f sp=0x00007903f5039b08 mode 0 -Event: 2.914 Thread 0x00007904206ae090 Uncommon trap: trap_request=0xffffff76 fr.pc=0x000079041034cde8 relative=0x00000000000001a8 -Event: 2.914 Thread 0x00007904206ae090 Uncommon trap: reason=predicate action=maybe_recompile pc=0x000079041034cde8 method=java.util.regex.Pattern$BmpCharPropertyGreedy.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 12 c2 -Event: 2.914 Thread 0x00007904206ae090 DEOPT PACKING pc=0x000079041034cde8 sp=0x00007903f503b0e0 -Event: 2.914 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8abf9 sp=0x00007903f503b0b8 mode 2 -Event: 2.968 Thread 0x00007904206ae090 Uncommon trap: trap_request=0xffffff6e fr.pc=0x00007904103669e8 relative=0x0000000000000148 -Event: 2.968 Thread 0x00007904206ae090 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x00007904103669e8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 -Event: 2.968 Thread 0x00007904206ae090 DEOPT PACKING pc=0x00007904103669e8 sp=0x00007903f503b0a0 -Event: 2.968 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8abf9 sp=0x00007903f503b050 mode 2 -Event: 3.109 Thread 0x00007904206ae090 Uncommon trap: trap_request=0xffffff6e fr.pc=0x0000790410369538 relative=0x0000000000000538 -Event: 3.109 Thread 0x00007904206ae090 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x0000790410369538 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 -Event: 3.109 Thread 0x00007904206ae090 DEOPT PACKING pc=0x0000790410369538 sp=0x00007903f503aa60 -Event: 3.109 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8abf9 sp=0x00007903f503a9c0 mode 2 -Event: 3.145 Thread 0x00007904206ae090 DEOPT PACKING pc=0x0000790408a30c1f sp=0x00007903f503a7c0 -Event: 3.145 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8b30f sp=0x00007903f5039c00 mode 0 -Event: 3.147 Thread 0x00007904206ae090 DEOPT PACKING pc=0x00007904088b3254 sp=0x00007903f503a790 -Event: 3.147 Thread 0x00007904206ae090 DEOPT UNPACKING pc=0x000079040fd8b30f sp=0x00007903f5039c48 mode 0 - -Classes loaded (20 events): -Event: 2.954 Loading class javax/imageio/ImageTypeSpecifier$Packed -Event: 2.954 Loading class javax/imageio/ImageTypeSpecifier$Packed done -Event: 2.955 Loading class java/awt/image/DataBufferByte -Event: 2.955 Loading class java/awt/image/DataBufferByte done -Event: 2.955 Loading class sun/awt/image/ByteInterleavedRaster -Event: 2.955 Loading class sun/awt/image/ByteComponentRaster -Event: 2.955 Loading class sun/awt/image/ByteComponentRaster done -Event: 2.955 Loading class sun/awt/image/ByteInterleavedRaster done -Event: 2.955 Loading class sun/awt/image/ShortComponentRaster -Event: 2.955 Loading class sun/awt/image/ShortComponentRaster done -Event: 3.023 Loading class java/util/function/LongFunction -Event: 3.023 Loading class java/util/function/LongFunction done -Event: 3.401 Loading class sun/awt/AppContext$PostShutdownEventRunnable -Event: 3.401 Loading class sun/awt/AppContext$PostShutdownEventRunnable done -Event: 3.401 Loading class sun/awt/AWTAutoShutdown$1 -Event: 3.401 Loading class sun/awt/AWTAutoShutdown$1 done -Event: 6.456 Loading class java/lang/Throwable$WrappedPrintStream -Event: 6.456 Loading class java/lang/Throwable$PrintStreamOrWriter -Event: 6.456 Loading class java/lang/Throwable$PrintStreamOrWriter done -Event: 6.456 Loading class java/lang/Throwable$WrappedPrintStream done - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (20 events): -Event: 0.617 Thread 0x000079042067c030 Exception (0x000000062a0b8978) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.325 Thread 0x000079042067c030 Exception (0x000000062a3573b0) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 2.369 Thread 0x000079042067c030 Exception (0x0000000629cc2cd0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.416 Thread 0x000079042002d0f0 Exception (0x000000060d996940) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 2.425 Thread 0x000079042002d0f0 Exception (0x000000060d9f4c80) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.426 Thread 0x000079042002d0f0 Exception (0x000000060da02ff0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.601 Thread 0x00007904206ae090 Exception (0x000000060d599078) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] -Event: 2.914 Thread 0x00007904206ae090 Exception (0x000000060d73e808) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.980 Thread 0x00007904206ae090 Exception (0x000000060dbd2d10) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 2.983 Thread 0x00007904206ae090 Exception (0x000000060dbfbc78) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.020 Thread 0x00007904206ae090 Exception (0x000000060d900098) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.021 Thread 0x00007904206ae090 Exception (0x000000060d9057e0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.035 Thread 0x00007904206ae090 Exception (0x000000060d9be038) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.036 Thread 0x00007904206ae090 Exception (0x000000060d9d08c8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.037 Thread 0x00007904206ae090 Exception (0x000000060d9d4868) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.037 Thread 0x00007904206ae090 Exception (0x000000060d9d8168) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.043 Thread 0x00007904206ae090 Exception (0x000000060da3c3d0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.077 Thread 0x00007904206ae090 Exception (0x000000060da8ce90) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.083 Thread 0x00007904206ae090 Exception (0x000000060daa78d0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 3.105 Thread 0x00007904206ae090 Exception (0x000000060dae73e0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] - -VM Operations (20 events): -Event: 0.135 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.135 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.231 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.231 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.248 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.248 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.257 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.257 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.651 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.651 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 2.375 Executing VM operation: G1CollectFull (System.gc()) -Event: 2.386 Executing VM operation: G1CollectFull (System.gc()) done -Event: 2.387 Executing VM operation: G1CollectFull (System.gc()) -Event: 2.399 Executing VM operation: G1CollectFull (System.gc()) done -Event: 2.423 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 2.423 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 2.930 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 2.931 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done -Event: 2.983 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 2.984 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done - -Memory protections (20 events): -Event: 0.016 Protecting memory [0x00007903fc500000,0x00007903fc504000] with protection modes 0 -Event: 0.016 Protecting memory [0x00007903fc400000,0x00007903fc404000] with protection modes 0 -Event: 0.021 Protecting memory [0x00007903fc230000,0x00007903fc234000] with protection modes 0 -Event: 0.022 Protecting memory [0x00007903fc130000,0x00007903fc134000] with protection modes 0 -Event: 0.052 Protecting memory [0x00007903fc030000,0x00007903fc034000] with protection modes 0 -Event: 0.269 Protecting memory [0x00007903f5f72000,0x00007903f5f76000] with protection modes 0 -Event: 0.271 Protecting memory [0x00007903f5e72000,0x00007903f5e76000] with protection modes 0 -Event: 0.273 Protecting memory [0x00007903f5d72000,0x00007903f5d76000] with protection modes 0 -Event: 0.273 Protecting memory [0x00007903f5c72000,0x00007903f5c76000] with protection modes 0 -Event: 0.323 Protecting memory [0x00007903f5b72000,0x00007903f5b76000] with protection modes 0 -Event: 0.544 Protecting memory [0x00007903fc030000,0x00007903fc034000] with protection modes 0 -Event: 0.648 Protecting memory [0x00007903f5a72000,0x00007903f5a76000] with protection modes 0 -Event: 0.681 Protecting memory [0x00007903f5872000,0x00007903f5876000] with protection modes 0 -Event: 2.348 Protecting memory [0x00007903f5a72000,0x00007903f5a76000] with protection modes 0 -Event: 2.371 Protecting memory [0x00007903f5772000,0x00007903f5776000] with protection modes 0 -Event: 2.431 Protecting memory [0x00007903f4f3d000,0x00007903f4f41000] with protection modes 0 -Event: 2.431 Protecting memory [0x0000790425b00000,0x0000790425b04000] with protection modes 0 -Event: 2.579 Protecting memory [0x00007903f5772000,0x00007903f5776000] with protection modes 0 -Event: 2.928 Protecting memory [0x00007903f5772000,0x00007903f5776000] with protection modes 0 -Event: 3.289 Protecting memory [0x00007903f5a72000,0x00007903f5a76000] with protection modes 0 - -Nmethod flushes (20 events): -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x000079040888aa08 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x000079040888db88 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088adf88 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088ae888 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088dbd08 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088dcb08 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088dd588 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904088fd388 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408923988 -Event: 2.391 Thread 0x000079042012e2f0 flushing osr nmethod 0x0000790408923e08 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x000079040893ec08 -Event: 2.391 Thread 0x000079042012e2f0 flushing osr nmethod 0x000079040894f808 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408976408 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408977b88 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408988308 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408989008 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x000079040898c808 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904089b5d08 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x00007904089b6008 -Event: 2.391 Thread 0x000079042012e2f0 flushing nmethod 0x0000790408a0fc88 - -Events (20 events): -Event: 0.544 Thread 0x000079042067c030 Thread added: 0x0000790338061560 -Event: 0.648 Thread 0x00007904201485b0 Thread added: 0x000079036437f070 -Event: 0.681 Thread 0x000079042067c030 Thread added: 0x00007903380dcdf0 -Event: 1.035 Thread 0x000079036437f070 Thread exited: 0x000079036437f070 -Event: 2.348 Thread 0x000079042013eeb0 Thread added: 0x00007903682bda80 -Event: 2.371 Thread 0x00007904201485b0 Thread added: 0x0000790364420100 -Event: 2.431 Thread 0x000079042002d0f0 Thread added: 0x00007904206ae090 -Event: 2.431 Thread 0x000079042002d0f0 Thread exited: 0x000079042002d0f0 -Event: 2.431 Thread 0x000079042002d0f0 Thread added: 0x000079042002d0f0 -Event: 2.564 Thread 0x0000790364420100 Thread exited: 0x0000790364420100 -Event: 2.564 Thread 0x00007903682bda80 Thread exited: 0x00007903682bda80 -Event: 2.579 Thread 0x00007904201485b0 Thread added: 0x0000790364363310 -Event: 2.914 Thread 0x0000790364363310 Thread exited: 0x0000790364363310 -Event: 2.928 Thread 0x00007904206ae090 Thread added: 0x00007902f057f190 -Event: 3.289 Thread 0x00007904201485b0 Thread added: 0x0000790364489930 -Event: 3.402 Thread 0x000079042067af20 Thread exited: 0x000079042067af20 -Event: 3.402 Thread 0x000079042067c030 Thread exited: 0x000079042067c030 -Event: 3.420 Thread 0x0000790364489930 Thread exited: 0x0000790364489930 -Event: 5.580 Thread 0x0000790338061560 Thread exited: 0x0000790338061560 -Event: 6.456 Thread 0x00007904206ae090 Thread exited: 0x00007904206ae090 - - -Dynamic libraries: -60c000000-60dc00000 rw-p 00000000 00:00 0 -60dc00000-800000000 ---p 00000000 00:00 0 -558c5a9d0000-558c5a9d1000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -558c5a9d2000-558c5a9d3000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -558c5a9d3000-558c5a9d4000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -558c6796b000-558c679b4000 rw-p 00000000 00:00 0 [heap] -7902a8000000-7902a80e0000 rw-p 00000000 00:00 0 -7902a80e0000-7902ac000000 ---p 00000000 00:00 0 -7902b0000000-7902b0021000 rw-p 00000000 00:00 0 -7902b0021000-7902b4000000 ---p 00000000 00:00 0 -7902b4000000-7902b4021000 rw-p 00000000 00:00 0 -7902b4021000-7902b8000000 ---p 00000000 00:00 0 -7902bc000000-7902bc021000 rw-p 00000000 00:00 0 -7902bc021000-7902c0000000 ---p 00000000 00:00 0 -7902c0000000-7902c0021000 rw-p 00000000 00:00 0 -7902c0021000-7902c4000000 ---p 00000000 00:00 0 -7902c8000000-7902c8021000 rw-p 00000000 00:00 0 -7902c8021000-7902cc000000 ---p 00000000 00:00 0 -7902cc000000-7902cc021000 rw-p 00000000 00:00 0 -7902cc021000-7902d0000000 ---p 00000000 00:00 0 -7902d4000000-7902d4021000 rw-p 00000000 00:00 0 -7902d4021000-7902d8000000 ---p 00000000 00:00 0 -7902d8000000-7902d80c8000 rw-p 00000000 00:00 0 -7902d80c8000-7902dc000000 ---p 00000000 00:00 0 -7902e0000000-7902e0021000 rw-p 00000000 00:00 0 -7902e0021000-7902e4000000 ---p 00000000 00:00 0 -7902e5000000-7902eb712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -7902eb712000-7902ebf30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -7902ebf30000-7902ebf76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -7902ebf76000-7902ebff2000 rw-p 00000000 00:00 0 -7902ec000000-7902ec021000 rw-p 00000000 00:00 0 -7902ec021000-7902f0000000 ---p 00000000 00:00 0 -7902f0000000-7902f3148000 rw-p 00000000 00:00 0 -7902f3148000-7902f4000000 ---p 00000000 00:00 0 -7902f8000000-7902f8021000 rw-p 00000000 00:00 0 -7902f8021000-7902fc000000 ---p 00000000 00:00 0 -7902fc000000-7902fc021000 rw-p 00000000 00:00 0 -7902fc021000-790300000000 ---p 00000000 00:00 0 -790304000000-790304021000 rw-p 00000000 00:00 0 -790304021000-790308000000 ---p 00000000 00:00 0 -790308000000-790308021000 rw-p 00000000 00:00 0 -790308021000-79030c000000 ---p 00000000 00:00 0 -790310000000-790310021000 rw-p 00000000 00:00 0 -790310021000-790314000000 ---p 00000000 00:00 0 -790314000000-790314021000 rw-p 00000000 00:00 0 -790314021000-790318000000 ---p 00000000 00:00 0 -79031c000000-79031c021000 rw-p 00000000 00:00 0 -79031c021000-790320000000 ---p 00000000 00:00 0 -790320000000-7903202bd000 rw-p 00000000 00:00 0 -7903202bd000-790324000000 ---p 00000000 00:00 0 -790328000000-790328021000 rw-p 00000000 00:00 0 -790328021000-79032c000000 ---p 00000000 00:00 0 -79032c000000-79032c36a000 rw-p 00000000 00:00 0 -79032c36a000-790330000000 ---p 00000000 00:00 0 -790334000000-790334021000 rw-p 00000000 00:00 0 -790334021000-790338000000 ---p 00000000 00:00 0 -790338000000-790338142000 rw-p 00000000 00:00 0 -790338142000-79033c000000 ---p 00000000 00:00 0 -790340000000-790340021000 rw-p 00000000 00:00 0 -790340021000-790344000000 ---p 00000000 00:00 0 -790344000000-790344021000 rw-p 00000000 00:00 0 -790344021000-790348000000 ---p 00000000 00:00 0 -79034c000000-79034c021000 rw-p 00000000 00:00 0 -79034c021000-790350000000 ---p 00000000 00:00 0 -790350000000-7903501a6000 rw-p 00000000 00:00 0 -7903501a6000-790354000000 ---p 00000000 00:00 0 -790358000000-790358021000 rw-p 00000000 00:00 0 -790358021000-79035c000000 ---p 00000000 00:00 0 -79035c000000-79035c021000 rw-p 00000000 00:00 0 -79035c021000-790360000000 ---p 00000000 00:00 0 -790362e00000-790362f25000 r--p 00000000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -790362f25000-7903633e5000 r-xp 00125000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -7903633e5000-790363519000 r--p 005e5000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -790363519000-79036351a000 ---p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -79036351a000-79036357d000 r--p 00719000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -79036357d000-790363587000 rw-p 0077c000 103:03 4325446 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -790363587000-790363598000 rw-p 00000000 00:00 0 -790363600000-790363601000 ---p 00000000 00:00 0 -790363601000-790363e01000 rw-p 00000000 00:00 0 -790364000000-7903644a1000 rw-p 00000000 00:00 0 -7903644a1000-790368000000 ---p 00000000 00:00 0 -790368000000-790368591000 rw-p 00000000 00:00 0 -790368591000-79036c000000 ---p 00000000 00:00 0 -79036c400000-79036c401000 ---p 00000000 00:00 0 -79036c401000-79036cc01000 rw-p 00000000 00:00 0 -79036ce00000-79036ce01000 ---p 00000000 00:00 0 -79036ce01000-79036d601000 rw-p 00000000 00:00 0 -79036d800000-79036d801000 ---p 00000000 00:00 0 -79036d801000-79036e001000 rw-p 00000000 00:00 0 -79036e200000-79036e201000 ---p 00000000 00:00 0 -79036e201000-79036ea01000 rw-p 00000000 00:00 0 -79036ec00000-79036ec01000 ---p 00000000 00:00 0 -79036ec01000-79036f401000 rw-p 00000000 00:00 0 -79036f600000-79036f62f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -79036f62f000-79036fd02000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -79036fd02000-79036fe24000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -79036fe24000-79036fe35000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -79036fe35000-79036feb3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -79036feb3000-79036fec7000 rw-p 00000000 00:00 0 -790370000000-790370021000 rw-p 00000000 00:00 0 -790370021000-790374000000 ---p 00000000 00:00 0 -790374000000-790374021000 rw-p 00000000 00:00 0 -790374021000-790378000000 ---p 00000000 00:00 0 -790378200000-790378ef5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -790378ef5000-7903798d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -7903798d8000-790379ce9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -790379ce9000-79037a16b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -79037a16b000-79037a173000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -79037a173000-79037a17e000 rw-p 00000000 00:00 0 -79037a200000-79037a201000 ---p 00000000 00:00 0 -79037a201000-79037aa01000 rw-p 00000000 00:00 0 -79037ac00000-79037ac01000 ---p 00000000 00:00 0 -79037ac01000-79037b401000 rw-p 00000000 00:00 0 -79037b600000-79037b601000 ---p 00000000 00:00 0 -79037b601000-79037be01000 rw-p 00000000 00:00 0 -79037c000000-79037c021000 rw-p 00000000 00:00 0 -79037c021000-790380000000 ---p 00000000 00:00 0 -790380000000-790380021000 rw-p 00000000 00:00 0 -790380021000-790384000000 ---p 00000000 00:00 0 -790384600000-790384601000 ---p 00000000 00:00 0 -790384601000-790384e01000 rw-p 00000000 00:00 0 -790385000000-790385001000 ---p 00000000 00:00 0 -790385001000-790385801000 rw-p 00000000 00:00 0 -790385a00000-790385a01000 ---p 00000000 00:00 0 -790385a01000-790386201000 rw-p 00000000 00:00 0 -790386400000-79038648d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -79038648d000-790386bf5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -790386bf5000-790387482000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -790387482000-7903874c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -7903874c4000-7903874c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -7903874c7000-7903874cd000 rw-p 00000000 00:00 0 -790387600000-79038765b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -79038765b000-7903879d9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -7903879d9000-790387dd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -790387dd5000-790387e10000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -790387e10000-790387e15000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -790387e15000-790387e40000 rw-p 00000000 00:00 0 -790388000000-790388021000 rw-p 00000000 00:00 0 -790388021000-79038c000000 ---p 00000000 00:00 0 -79038c000000-79038c638000 rw-p 00000000 00:00 0 -79038c638000-790390000000 ---p 00000000 00:00 0 -790390000000-790390200000 rw-s 00000000 00:06 1017 /dev/nvidiactl -790390200000-790390222000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -790390222000-790390421000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -790390421000-790390429000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -790390429000-79039042a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -79039042a000-79039042b000 rw-p 00000000 00:00 0 -790390600000-790390800000 rw-s 00000000 00:06 1022 /dev/nvidia0 -790390800000-79039086e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -79039086e000-790390dd5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -790390dd5000-7903914e8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -7903914e8000-7903914e9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -7903914e9000-790391526000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -790391526000-790391529000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -790391529000-79039152b000 rw-p 00000000 00:00 0 -790391600000-7903917c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -7903917c4000-7903934c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -7903934c4000-790393b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -790393b39000-790393b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -790393b3a000-790393d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -790393d1a000-790393d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -790393d93000-790393e08000 rw-p 00000000 00:00 0 -790393e0d000-790393e8d000 rw-s 00000000 00:06 1017 /dev/nvidiactl -790393e8d000-790393f8d000 rw-s 00000000 00:06 1017 /dev/nvidiactl -790393f8d000-790393fa0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -790393fa0000-790393fe0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -790394000000-7903943f0000 rw-p 00000000 00:00 0 -7903943f0000-7903945b0000 rw-p 00000000 00:00 0 -7903945b0000-7903946f0000 rw-p 00000000 00:00 0 -7903946f0000-790394710000 rw-p 00000000 00:00 0 -790394710000-790394730000 rw-p 00000000 00:00 0 -790394730000-790394770000 rw-p 00000000 00:00 0 -790394770000-7903949f0000 rw-p 00000000 00:00 0 -7903949f0000-790394a10000 rw-p 00000000 00:00 0 -790394a10000-790394a30000 rw-p 00000000 00:00 0 -790394a30000-790394a70000 rw-p 00000000 00:00 0 -790394a70000-790394af0000 rw-p 00000000 00:00 0 -790394af0000-790394cf0000 rw-p 00000000 00:00 0 -790394cf0000-790394d10000 rw-p 00000000 00:00 0 -790394d10000-790394d30000 rw-p 00000000 00:00 0 -790394d30000-790394d70000 rw-p 00000000 00:00 0 -790394d70000-790394ef0000 rw-p 00000000 00:00 0 -790394ef0000-790394ff0000 rw-p 00000000 00:00 0 -790394ff0000-7903950f0000 rw-p 00000000 00:00 0 -7903950f0000-790395170000 rw-p 00000000 00:00 0 -790395170000-790395200000 ---p 00000000 00:00 0 -790395200000-790395420000 rw-p 00000000 00:00 0 -790395420000-790398000000 ---p 00000000 00:00 0 -790398000000-790398021000 rw-p 00000000 00:00 0 -790398021000-79039c000000 ---p 00000000 00:00 0 -79039c000000-79039c200000 rw-s 00000000 00:06 1017 /dev/nvidiactl -79039c200000-79039c201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -79039c201000-79039c202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -79039c202000-79039de1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -79039de1c000-79039de1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -79039de1d000-79039de1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -79039de20000-79039de60000 rw-s 00000000 00:06 1017 /dev/nvidiactl -79039de60000-79039de80000 rw-s 00000000 00:06 1017 /dev/nvidiactl -79039de80000-79039df00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -79039df00000-79039e000000 rw-s 00000000 00:06 1017 /dev/nvidiactl -79039e000000-79039ed91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa -79039ed91000-79039f000000 ---p 00000000 00:00 0 -79039f000000-79039f030000 rw-p 00000000 00:00 0 -79039f030000-79039f090000 rw-p 00000000 00:00 0 -79039f090000-79039f0b0000 rw-p 00000000 00:00 0 -79039f0b0000-79039f130000 rw-p 00000000 00:00 0 -79039f130000-79039f150000 rw-p 00000000 00:00 0 -79039f150000-79039f1b0000 rw-p 00000000 00:00 0 -79039f1b0000-79039f1d0000 rw-p 00000000 00:00 0 -79039f1d0000-79039f230000 rw-p 00000000 00:00 0 -79039f230000-79039f250000 rw-p 00000000 00:00 0 -79039f250000-79039f280000 ---p 00000000 00:00 0 -79039f280000-79039f290000 rw-p 00000000 00:00 0 -79039f290000-7903df000000 ---p 00000000 00:00 0 -7903df004000-7903df005000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903df005000-7903df009000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df009000-7903df00a000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903df00a000-7903df00c000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df00c000-7903df00d000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903df00d000-7903df04d000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df04d000-7903df06d000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df06d000-7903df0ad000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df0cd000-7903df0e0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df0e0000-7903df120000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df120000-7903df140000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df140000-7903df240000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df240000-7903df280000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df280000-7903df2c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df2c0000-7903df3c0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df3c0000-7903df400000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903df400000-7903df493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -7903df493000-7903df8e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -7903df8e6000-7903dfdfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -7903dfdfc000-7903dfe34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -7903dfe34000-7903dfe44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -7903dfe44000-7903dfe49000 rw-p 00000000 00:00 0 -7903dfe49000-7903dfe4d000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903dfe4d000-7903dfe60000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903dfe60000-7903dfe80000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903dfe80000-7903dff00000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903dff00000-7903e0000000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e0000000-7903e0021000 rw-p 00000000 00:00 0 -7903e0021000-7903e4000000 ---p 00000000 00:00 0 -7903e4000000-7903e4021000 rw-p 00000000 00:00 0 -7903e4021000-7903e8000000 ---p 00000000 00:00 0 -7903e8000000-7903e8001000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903e8001000-7903e8002000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903e8022000-7903e8035000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e8035000-7903e8055000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e8055000-7903e80d5000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e80d5000-7903e8115000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e8115000-7903e8135000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e8135000-7903e8175000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e8175000-7903e8195000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e8195000-7903e81d5000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e81d5000-7903e841a000 rw-s 00000000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) -7903e841a000-7903e855b000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index -7903e855b000-7903e856c000 r--p 00000000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -7903e856c000-7903e85ae000 r-xp 00011000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -7903e85ae000-7903e85c6000 r--p 00053000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -7903e85c6000-7903e85d4000 r--p 0006a000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -7903e85d4000-7903e85d6000 rw-p 00078000 103:03 11280457 /usr/lib/x86_64-linux-gnu/spa-0.2/audioconvert/libspa-audioconvert.so -7903e85d6000-7903e85da000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7903e85da000-7903e85f6000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7903e85f6000-7903e85fc000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7903e85fc000-7903e85fd000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7903e85fd000-7903e85ff000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7903e85ff000-7903e8600000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -7903e8600000-7903e8616000 r--p 00000000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -7903e8616000-7903e8706000 r-xp 00016000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -7903e8706000-7903e8779000 r--p 00106000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -7903e8779000-7903e8780000 r--p 00178000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -7903e8780000-7903e8787000 rw-p 0017f000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -7903e8787000-7903e8802000 rw-p 00000000 00:00 0 -7903e8802000-7903e8803000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e8803000-7903e8804000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e8804000-7903e8805000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e8805000-7903e8818000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e8818000-7903e881a000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7903e881a000-7903e8823000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7903e8823000-7903e8826000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7903e8826000-7903e8827000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7903e8827000-7903e8828000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7903e8828000-7903e8829000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -7903e8829000-7903e882b000 rw-p 00000000 00:00 0 -7903e882b000-7903e882d000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -7903e882d000-7903e8898000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -7903e8898000-7903e88c0000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -7903e88c0000-7903e88c1000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -7903e88c1000-7903e88c2000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -7903e88c2000-7903e88d1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7903e88d1000-7903e89b7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7903e89b7000-7903e89f5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7903e89f5000-7903e89f6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7903e89f6000-7903e89f9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7903e89f9000-7903e89ff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -7903e89ff000-7903e9322000 rw-p 00000000 00:00 0 -7903e9322000-7903e9323000 rw-s 00044000 00:01 7173 /memfd:/.nvidia_drv.XXXXXX (deleted) -7903e9323000-7903e9324000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903e9324000-7903e9325000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903e9325000-7903e9327000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e9327000-7903e9328000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903e9328000-7903e9348000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e9348000-7903e9352000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -7903e9352000-7903e935c000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -7903e935c000-7903e9363000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -7903e9363000-7903e936c000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -7903e936c000-7903e936d000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -7903e936d000-7903e9379000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -7903e9379000-7903e9399000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -7903e9399000-7903e93a5000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -7903e93a5000-7903e93af000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -7903e93af000-7903e93b0000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -7903e93b0000-7903e93c3000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -7903e93c3000-7903e93e2000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -7903e93e2000-7903e93ef000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -7903e93ef000-7903e93ff000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -7903e93ff000-7903e9400000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -7903e9400000-7903e9401000 ---p 00000000 00:00 0 -7903e9401000-7903e9c01000 rw-p 00000000 00:00 0 -7903e9c01000-7903e9c02000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e9c02000-7903e9c06000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e9c06000-7903e9c07000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903e9c07000-7903e9c09000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903e9c09000-7903e9c14000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7903e9c14000-7903e9c42000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7903e9c42000-7903e9c54000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7903e9c54000-7903e9c55000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7903e9c55000-7903e9c56000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7903e9c56000-7903e9c57000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -7903e9c57000-7903e9c6a000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7903e9c6a000-7903e9ce9000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7903e9ce9000-7903e9d14000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7903e9d14000-7903e9d15000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7903e9d15000-7903e9d1c000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7903e9d1c000-7903e9d1d000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -7903e9d1d000-7903e9d1e000 rw-p 00000000 00:00 0 -7903e9d1e000-7903e9d51000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -7903e9d51000-7903e9db4000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -7903e9db4000-7903e9dd3000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -7903e9dd3000-7903e9dfe000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -7903e9dfe000-7903e9dff000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -7903e9dff000-7903e9e00000 rw-p 00000000 00:00 0 -7903e9e00000-7903ea041000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -7903ea041000-7903ea062000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -7903ea062000-7903ea200000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -7903ea200000-7903eae00000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -7903eae00000-7903ebcab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -7903ebcab000-7903ebe10000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -7903ebe10000-7903ebe7e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -7903ebe7e000-7903ebe9c000 rw-p 00000000 00:00 0 -7903ebe9c000-7903ebea0000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903ebea0000-7903ebea4000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -7903ebea4000-7903ebeb4000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -7903ebeb4000-7903ebeb7000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -7903ebeb7000-7903ebeb8000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -7903ebeb8000-7903ebeb9000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -7903ebeb9000-7903ebee8000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -7903ebee8000-7903ebfa4000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -7903ebfa4000-7903ebfef000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -7903ebfef000-7903ebffd000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -7903ebffd000-7903ebfff000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -7903ebfff000-7903ec000000 rw-p 00000000 00:00 0 -7903ec000000-7903ec021000 rw-p 00000000 00:00 0 -7903ec021000-7903f0000000 ---p 00000000 00:00 0 -7903f0000000-7903f0021000 rw-p 00000000 00:00 0 -7903f0021000-7903f4000000 ---p 00000000 00:00 0 -7903f4000000-7903f4001000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903f4001000-7903f4002000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903f4002000-7903f4003000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903f4003000-7903f4007000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903f4007000-7903f4010000 rw-s 00000000 00:01 666571 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -7903f4010000-7903f4019000 rw-s 00000000 00:01 666570 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=32832 (deleted) -7903f4019000-7903f401b000 r--p 00000000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -7903f401b000-7903f401f000 r-xp 00002000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -7903f401f000-7903f4021000 r--p 00006000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -7903f4021000-7903f4022000 r--p 00007000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -7903f4022000-7903f4023000 rw-p 00008000 103:03 11280493 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-rt.so -7903f4023000-7903f4089000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -7903f4089000-7903f417c000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -7903f417c000-7903f4208000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -7903f4208000-7903f421b000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -7903f421b000-7903f421c000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -7903f421c000-7903f421e000 rw-p 00000000 00:00 0 -7903f421e000-7903f424d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7903f424d000-7903f43a0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7903f43a0000-7903f43f4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7903f43f4000-7903f43f5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7903f43f5000-7903f43fe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7903f43fe000-7903f43ff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -7903f43ff000-7903f4400000 rw-p 00000000 00:00 0 -7903f4400000-7903f449a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7903f449a000-7903f45ab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7903f45ab000-7903f461a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7903f461a000-7903f461b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7903f461b000-7903f4626000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7903f4626000-7903f4629000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -7903f4629000-7903f462c000 rw-p 00000000 00:00 0 -7903f462c000-7903f462d000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903f462d000-7903f4633000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7903f4633000-7903f464d000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7903f464d000-7903f4654000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7903f4654000-7903f4655000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7903f4655000-7903f4656000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7903f4656000-7903f4657000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -7903f4657000-7903f4659000 rw-p 00000000 00:00 0 -7903f4659000-7903f465d000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -7903f465d000-7903f4673000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -7903f4673000-7903f467d000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -7903f467d000-7903f467e000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -7903f467e000-7903f467f000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -7903f467f000-7903f4681000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7903f4681000-7903f469a000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7903f469a000-7903f469c000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7903f469c000-7903f469d000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7903f469d000-7903f469e000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7903f469e000-7903f469f000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -7903f469f000-7903f46a3000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903f46a3000-7903f46a5000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -7903f46a5000-7903f46ad000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -7903f46ad000-7903f46af000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -7903f46af000-7903f46b0000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -7903f46b0000-7903f46b1000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -7903f46b1000-7903f46b3000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7903f46b3000-7903f46bb000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7903f46bb000-7903f46bc000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7903f46bc000-7903f46bd000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7903f46bd000-7903f46be000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7903f46be000-7903f46bf000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -7903f46bf000-7903f46c3000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7903f46c3000-7903f46d8000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7903f46d8000-7903f46de000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7903f46de000-7903f46df000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7903f46df000-7903f46e1000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7903f46e1000-7903f46e2000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -7903f46e2000-7903f46e5000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7903f46e5000-7903f4706000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7903f4706000-7903f4712000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7903f4712000-7903f4713000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7903f4713000-7903f4714000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7903f4714000-7903f4715000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -7903f4715000-7903f4723000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -7903f4723000-7903f4734000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -7903f4734000-7903f4742000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -7903f4742000-7903f4746000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -7903f4746000-7903f4747000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -7903f4747000-7903f474f000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -7903f474f000-7903f476d000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -7903f476d000-7903f477a000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -7903f477a000-7903f477c000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -7903f477c000-7903f477d000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -7903f477d000-7903f4781000 rw-p 00000000 00:00 0 -7903f4781000-7903f4783000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7903f4783000-7903f478a000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7903f478a000-7903f478b000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7903f478b000-7903f478c000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7903f478c000-7903f478d000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7903f478d000-7903f478e000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -7903f478e000-7903f4791000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -7903f4791000-7903f47a8000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -7903f47a8000-7903f47ac000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -7903f47ac000-7903f47ad000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -7903f47ad000-7903f47ae000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -7903f47ae000-7903f47b2000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7903f47b2000-7903f47d1000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7903f47d1000-7903f47db000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7903f47db000-7903f47dc000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7903f47dc000-7903f47de000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7903f47de000-7903f47df000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -7903f47df000-7903f47e4000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7903f47e4000-7903f47ef000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7903f47ef000-7903f47f3000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7903f47f3000-7903f47f4000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7903f47f4000-7903f47f5000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7903f47f5000-7903f47f6000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -7903f47f6000-7903f4800000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -7903f4800000-7903f48b2000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -7903f48b2000-7903f48c3000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -7903f48c3000-7903f48c4000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -7903f48c4000-7903f48c5000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -7903f48c5000-7903f48ca000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -7903f48ca000-7903f48d0000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -7903f48d0000-7903f48d3000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -7903f48d3000-7903f48d5000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -7903f48d5000-7903f48d6000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -7903f48d6000-7903f4927000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7903f4927000-7903f4983000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7903f4983000-7903f49b8000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7903f49b8000-7903f49b9000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7903f49b9000-7903f49d9000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7903f49d9000-7903f49f9000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7903f49f9000-7903f49fe000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -7903f49fe000-7903f4a00000 rw-p 00000000 00:00 0 -7903f4a00000-7903f4e00000 rw-p 00000000 00:00 0 -7903f4e00000-7903f4e02000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903f4e02000-7903f4e05000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7903f4e05000-7903f4e08000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7903f4e08000-7903f4e09000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7903f4e09000-7903f4e0a000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7903f4e0a000-7903f4e0b000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7903f4e0b000-7903f4e0c000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -7903f4e0c000-7903f4e1c000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7903f4e1c000-7903f4e7a000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7903f4e7a000-7903f4e96000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7903f4e96000-7903f4e97000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7903f4e97000-7903f4e9d000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7903f4e9d000-7903f4e9e000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -7903f4e9e000-7903f4ea6000 rw-p 00000000 00:00 0 -7903f4ea6000-7903f4eb6000 r--p 00000000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -7903f4eb6000-7903f4ed7000 r-xp 00010000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -7903f4ed7000-7903f4f13000 r--p 00031000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -7903f4f13000-7903f4f17000 r--p 0006c000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -7903f4f17000-7903f4f1a000 rw-p 00070000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -7903f4f1a000-7903f4f3d000 rw-p 00000000 00:00 0 -7903f4f3d000-7903f4f41000 ---p 00000000 00:00 0 -7903f4f41000-7903f503d000 rw-p 00000000 00:00 0 -7903f503d000-7903f503e000 ---p 00000000 00:00 0 -7903f503e000-7903f513e000 rw-p 00000000 00:00 0 -7903f513e000-7903f513f000 ---p 00000000 00:00 0 -7903f513f000-7903f523f000 rw-p 00000000 00:00 0 -7903f523f000-7903f5240000 ---p 00000000 00:00 0 -7903f5240000-7903f5340000 rw-p 00000000 00:00 0 -7903f5340000-7903f5341000 ---p 00000000 00:00 0 -7903f5341000-7903f5441000 rw-p 00000000 00:00 0 -7903f5441000-7903f5442000 ---p 00000000 00:00 0 -7903f5442000-7903f5542000 rw-p 00000000 00:00 0 -7903f5542000-7903f5543000 ---p 00000000 00:00 0 -7903f5543000-7903f5643000 rw-p 00000000 00:00 0 -7903f5643000-7903f5644000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903f5644000-7903f5645000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -7903f5645000-7903f5646000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -7903f5646000-7903f5647000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -7903f5647000-7903f5648000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -7903f5648000-7903f5649000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -7903f5649000-7903f564c000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7903f564c000-7903f564f000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7903f564f000-7903f5650000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7903f5650000-7903f5651000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7903f5651000-7903f5652000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7903f5652000-7903f5653000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -7903f5653000-7903f5656000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7903f5656000-7903f566a000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7903f566a000-7903f566e000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7903f566e000-7903f566f000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7903f566f000-7903f5670000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7903f5670000-7903f5671000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -7903f5671000-7903f5672000 ---p 00000000 00:00 0 -7903f5672000-7903f5772000 rw-p 00000000 00:00 0 -7903f5772000-7903f5776000 ---p 00000000 00:00 0 -7903f5776000-7903f5872000 rw-p 00000000 00:00 0 -7903f5872000-7903f5876000 ---p 00000000 00:00 0 -7903f5876000-7903f5972000 rw-p 00000000 00:00 0 -7903f5972000-7903f5a72000 rw-s 00000000 00:01 1015856 /SYSV00000000 (deleted) -7903f5a72000-7903f5a76000 ---p 00000000 00:00 0 -7903f5a76000-7903f5b72000 rw-p 00000000 00:00 0 -7903f5b72000-7903f5b76000 ---p 00000000 00:00 0 -7903f5b76000-7903f5c72000 rw-p 00000000 00:00 0 -7903f5c72000-7903f5c76000 ---p 00000000 00:00 0 -7903f5c76000-7903f5d72000 rw-p 00000000 00:00 0 -7903f5d72000-7903f5d76000 ---p 00000000 00:00 0 -7903f5d76000-7903f5e72000 rw-p 00000000 00:00 0 -7903f5e72000-7903f5e76000 ---p 00000000 00:00 0 -7903f5e76000-7903f5f72000 rw-p 00000000 00:00 0 -7903f5f72000-7903f5f76000 ---p 00000000 00:00 0 -7903f5f76000-7903f6072000 rw-p 00000000 00:00 0 -7903f6072000-7903f607f000 r--p 00000000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7903f607f000-7903f6108000 r-xp 0000d000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7903f6108000-7903f6131000 r--p 00096000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7903f6131000-7903f6132000 ---p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7903f6132000-7903f6139000 r--p 000bf000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7903f6139000-7903f613a000 rw-p 000c6000 103:03 11141767 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.18.1 -7903f613a000-7903f62bb000 r-xp 00000000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -7903f62bb000-7903f62bc000 ---p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -7903f62bc000-7903f62be000 r--p 00181000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -7903f62be000-7903f62bf000 rw-p 00183000 103:03 10498762 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libfontmanager.so -7903f62bf000-7903f62c0000 rw-p 00000000 00:00 0 -7903f62c0000-7903f62d9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7903f62d9000-7903f6365000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7903f6365000-7903f63fa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7903f63fa000-7903f63fb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7903f63fb000-7903f63fc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7903f63fc000-7903f6400000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -7903f6400000-7903f6c00000 rw-p 00000000 00:00 0 -7903f6c00000-7903f6c08000 r--p 00000000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7903f6c08000-7903f6c60000 r-xp 00008000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7903f6c60000-7903f6c71000 r--p 00060000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7903f6c71000-7903f6c72000 ---p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7903f6c72000-7903f6c78000 r--p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7903f6c78000-7903f6c79000 rw-p 00077000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -7903f6c79000-7903f6e83000 rw-p 00000000 00:00 0 -7903f6e83000-7903f6e84000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903f6e84000-7903f6e85000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903f6e85000-7903f6e88000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -7903f6e88000-7903f6e8e000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -7903f6e8e000-7903f6e90000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -7903f6e90000-7903f6e91000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -7903f6e91000-7903f6e92000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -7903f6e92000-7903f6e98000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -7903f6e98000-7903f6ee2000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -7903f6ee2000-7903f6f0c000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -7903f6f0c000-7903f6f0d000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -7903f6f0d000-7903f6f0e000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -7903f6f0e000-7903f6fcf000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -7903f6fcf000-7903f6fd0000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -7903f6fd0000-7903f6fdb000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -7903f6fdb000-7903f7000000 rw-p 00000000 00:00 0 -7903f7000000-7903f7f06000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive -7903f7f06000-7903f7f08000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7903f7f08000-7903f7f09000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903f7f09000-7903f7f0a000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7903f7f0a000-7903f7f7a000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -7903f7f7a000-7903f7f7b000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -7903f7f7b000-7903f7f80000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -7903f7f80000-7903f7f82000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -7903f7f82000-7903f7f84000 rw-p 00000000 00:00 0 -7903f7f84000-7903f7fb0000 r--p 00000000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7903f7fb0000-7903f7fe4000 r-xp 0002c000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7903f7fe4000-7903f7ffe000 r--p 00060000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7903f7ffe000-7903f7fff000 r--p 00079000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7903f7fff000-7903f8000000 rw-p 0007a000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -7903f8000000-7903f8021000 rw-p 00000000 00:00 0 -7903f8021000-7903fc000000 ---p 00000000 00:00 0 -7903fc000000-7903fc007000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7903fc007000-7903fc00d000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7903fc00d000-7903fc010000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7903fc010000-7903fc011000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7903fc011000-7903fc012000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7903fc012000-7903fc013000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -7903fc013000-7903fc01e000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7903fc01e000-7903fc027000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7903fc027000-7903fc02c000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7903fc02c000-7903fc02d000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7903fc02d000-7903fc02f000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7903fc02f000-7903fc030000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -7903fc030000-7903fc034000 ---p 00000000 00:00 0 -7903fc034000-7903fc130000 rw-p 00000000 00:00 0 -7903fc130000-7903fc134000 ---p 00000000 00:00 0 -7903fc134000-7903fc230000 rw-p 00000000 00:00 0 -7903fc230000-7903fc234000 ---p 00000000 00:00 0 -7903fc234000-7903fc330000 rw-p 00000000 00:00 0 -7903fc330000-7903fc3fe000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -7903fc3fe000-7903fc3ff000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -7903fc3ff000-7903fc400000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -7903fc400000-7903fc404000 ---p 00000000 00:00 0 -7903fc404000-7903fc500000 rw-p 00000000 00:00 0 -7903fc500000-7903fc504000 ---p 00000000 00:00 0 -7903fc504000-7903fc600000 rw-p 00000000 00:00 0 -7903fc600000-7903fc604000 ---p 00000000 00:00 0 -7903fc604000-7903fc700000 rw-p 00000000 00:00 0 -7903fc700000-7903fc704000 ---p 00000000 00:00 0 -7903fc704000-7903fc800000 rw-p 00000000 00:00 0 -7903fc800000-7903fc804000 ---p 00000000 00:00 0 -7903fc804000-7903fc900000 rw-p 00000000 00:00 0 -7903fc900000-7903fc904000 ---p 00000000 00:00 0 -7903fc904000-7903fca00000 rw-p 00000000 00:00 0 -7903fca00000-7903fea70000 rw-p 00000000 00:00 0 -7903fea70000-790406700000 ---p 00000000 00:00 0 -790406700000-790406704000 ---p 00000000 00:00 0 -790406704000-790406800000 rw-p 00000000 00:00 0 -790406800000-79040680e000 rw-p 00000000 00:00 0 -79040680e000-7904077a0000 ---p 00000000 00:00 0 -7904077a0000-7904077a1000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -7904077a1000-7904077a2000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -7904077a2000-7904077a3000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -7904077a3000-7904077a4000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -7904077a4000-7904077a5000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -7904077a5000-7904077a6000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -7904077a6000-7904077a7000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -7904077a7000-7904077a8000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -7904077a8000-7904077a9000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -7904077a9000-7904077aa000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -7904077aa000-7904077ac000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -7904077ac000-7904077ae000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -7904077ae000-7904077af000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -7904077af000-7904077b0000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -7904077b0000-7904077b1000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -7904077b1000-7904077b8000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache -7904077b8000-7904077b9000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7904077b9000-7904077bc000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7904077bc000-7904077bd000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7904077bd000-7904077be000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7904077be000-7904077bf000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7904077bf000-7904077c0000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -7904077c0000-7904077c3000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -7904077c3000-7904077c7000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -7904077c7000-7904077c9000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -7904077c9000-7904077ca000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -7904077ca000-7904077cb000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -7904077cb000-7904077cc000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -7904077cc000-7904077ce000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -7904077ce000-7904077cf000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -7904077cf000-7904077d0000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -7904077d0000-7904077d1000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -7904077d1000-7904077d3000 r--p 00000000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -7904077d3000-7904077d9000 r-xp 00002000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -7904077d9000-7904077db000 r--p 00008000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -7904077db000-7904077dc000 r--p 00009000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -7904077dc000-7904077dd000 rw-p 0000a000 103:03 11144225 /usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2 -7904077dd000-7904077de000 r--p 00000000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -7904077de000-7904077df000 r-xp 00001000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -7904077df000-7904077fe000 r--p 00002000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -7904077fe000-7904077ff000 r--p 00020000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -7904077ff000-790407800000 rw-p 00021000 103:03 11144513 /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9 -790407800000-79040780e000 rw-p 00000000 00:00 0 -79040780e000-7904087a0000 ---p 00000000 00:00 0 -7904087a0000-7904087a1000 rw-s 00000000 00:06 1022 /dev/nvidia0 -7904087a1000-7904087a2000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7904087a2000-7904087a3000 rw-s 00000000 00:06 1017 /dev/nvidiactl -7904087a3000-7904087a4000 r--s 00000000 00:06 1017 /dev/nvidiactl -7904087a4000-7904087a5000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -7904087a5000-7904087a7000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -7904087a7000-7904087a8000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -7904087a8000-7904087a9000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -7904087a9000-7904087aa000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -7904087aa000-7904087ab000 r--p 00000000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -7904087ab000-7904087b3000 r-xp 00001000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -7904087b3000-7904087b6000 r--p 00009000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -7904087b6000-7904087b7000 r--p 0000b000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -7904087b7000-7904087b8000 rw-p 0000c000 103:03 11144515 /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9 -7904087b8000-7904087bd000 r--p 00000000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -7904087bd000-7904087e6000 r-xp 00005000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -7904087e6000-7904087f1000 r--p 0002e000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -7904087f1000-7904087f2000 r--p 00038000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -7904087f2000-7904087f3000 rw-p 00039000 103:03 11145680 /usr/lib/x86_64-linux-gnu/libpng16.so.16.37.0 -7904087f3000-7904087f5000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -7904087f5000-7904087fc000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -7904087fc000-7904087fe000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -7904087fe000-7904087ff000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -7904087ff000-790408800000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -790408800000-790408ae0000 rwxp 00000000 00:00 0 -790408ae0000-79040fd37000 ---p 00000000 00:00 0 -79040fd37000-79040ffb7000 rwxp 00000000 00:00 0 -79040ffb7000-7904102c8000 ---p 00000000 00:00 0 -7904102c8000-790410538000 rwxp 00000000 00:00 0 -790410538000-790417800000 ---p 00000000 00:00 0 -790417800000-79041ffb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules -79041ffb5000-79041ffb6000 rw-s 00000000 00:01 1028 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -79041ffb6000-79041ffb8000 r--p 00000000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -79041ffb8000-79041ffbb000 r-xp 00002000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -79041ffbb000-79041ffbc000 r--p 00005000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -79041ffbc000-79041ffbd000 r--p 00006000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -79041ffbd000-79041ffbe000 rw-p 00007000 103:03 11144233 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0 -79041ffbe000-79041ffc2000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -79041ffc2000-79041ffcf000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -79041ffcf000-79041ffd2000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -79041ffd2000-79041ffd3000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -79041ffd3000-79041ffd4000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -79041ffd4000-79041ffd5000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -79041ffd5000-79041ffd6000 rw-p 00000000 00:00 0 -79041ffd6000-79041ffe1000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -79041ffe1000-79041fff5000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -79041fff5000-79041fffe000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -79041fffe000-79041ffff000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -79041ffff000-790420000000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -790420000000-7904206b1000 rw-p 00000000 00:00 0 -7904206b1000-790424000000 ---p 00000000 00:00 0 -790424000000-790424001000 r--p 00000000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -790424001000-790424002000 r-xp 00001000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -790424002000-790424003000 r--p 00002000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -790424003000-790424004000 r--p 00003000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -790424004000-790424005000 rw-p 00004000 103:03 11144241 /usr/lib/x86_64-linux-gnu/libXinerama.so.1.0.0 -790424005000-790424007000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -790424007000-790424009000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -790424009000-79042400b000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -79042400b000-79042400c000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -79042400c000-79042400d000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -79042400d000-79042400e000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -79042400e000-790424010000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -790424010000-790424011000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -790424011000-790424012000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -790424012000-790424013000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -790424013000-790424015000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -790424015000-79042401c000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -79042401c000-79042401e000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -79042401e000-79042401f000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -79042401f000-790424020000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -790424020000-790424023000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -790424023000-79042402f000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -79042402f000-790424032000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -790424032000-790424033000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -790424033000-790424034000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -790424034000-790424072000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -790424072000-790424073000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -790424073000-790424074000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -790424074000-790424075000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -790424075000-790424076000 ---p 00000000 00:00 0 -790424076000-790424176000 rw-p 00000000 00:00 0 -790424176000-790424177000 ---p 00000000 00:00 0 -790424177000-790424277000 rw-p 00000000 00:00 0 -790424277000-790424394000 rw-p 00000000 00:00 0 -790424394000-790424395000 ---p 00000000 00:00 0 -790424395000-790424495000 rw-p 00000000 00:00 0 -790424495000-790424496000 ---p 00000000 00:00 0 -790424496000-790424596000 rw-p 00000000 00:00 0 -790424596000-790424d9e000 rw-p 00000000 00:00 0 -790424d9e000-790424d9f000 ---p 00000000 00:00 0 -790424d9f000-790424e9f000 rw-p 00000000 00:00 0 -790424e9f000-790424ea0000 ---p 00000000 00:00 0 -790424ea0000-790424fa0000 rw-p 00000000 00:00 0 -790424fa0000-790424fa1000 ---p 00000000 00:00 0 -790424fa1000-7904250a1000 rw-p 00000000 00:00 0 -7904250a1000-79042592f000 rw-p 00000000 00:00 0 -79042592f000-790425a15000 ---p 00000000 00:00 0 -790425a15000-790425a1b000 rw-p 00000000 00:00 0 -790425a1b000-790425b00000 ---p 00000000 00:00 0 -790425b00000-790425b04000 ---p 00000000 00:00 0 -790425b04000-790425c00000 rw-p 00000000 00:00 0 -790425c00000-790426f30000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -790426f30000-790427000000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -790427000000-79042702e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -79042702e000-7904270a4000 rw-p 00000000 00:00 0 -7904270a4000-7904270a5000 rw-s 00000000 00:01 668325 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=4096 (deleted) -7904270a5000-7904270a9000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -7904270a9000-7904270b4000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -7904270b4000-7904270b8000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -7904270b8000-7904270b9000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -7904270b9000-7904270ba000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -7904270ba000-7904270bb000 rw-s 00000000 00:01 668324 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -7904270bb000-7904270bc000 rw-s 00000000 00:01 668323 /memfd:pipewire-memfd:flags=0x0000000f,type=2,size=2312 (deleted) -7904270bc000-7904270bd000 r-xp 00000000 00:00 0 -7904270bd000-7904270be000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -7904270be000-7904270bf000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -7904270bf000-7904270c0000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -7904270c0000-7904270c1000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -7904270c1000-7904270c2000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -7904270c2000-7904270c3000 r--p 00000000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -7904270c3000-7904270c6000 r-xp 00001000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -7904270c6000-7904270c7000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -7904270c7000-7904270c8000 r--p 00004000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -7904270c8000-7904270c9000 rw-p 00005000 103:03 11144267 /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1.0.0 -7904270c9000-7904270cb000 r--p 00000000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -7904270cb000-7904270d2000 r-xp 00002000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -7904270d2000-7904270d4000 r--p 00009000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -7904270d4000-7904270d5000 r--p 0000a000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -7904270d5000-7904270d6000 rw-p 0000b000 103:03 11144249 /usr/lib/x86_64-linux-gnu/libXrandr.so.2.2.0 -7904270d6000-7904270d7000 r-xp 00000000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -7904270d7000-7904270d8000 ---p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -7904270d8000-7904270d9000 r--p 00001000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -7904270d9000-7904270da000 rw-p 00002000 103:03 10498817 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libprefs.so -7904270da000-790427119000 rw-p 00000000 00:00 0 -790427119000-790427127000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -790427127000-7904271a3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -7904271a3000-7904271fe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -7904271fe000-7904271ff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -7904271ff000-790427200000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -790427200000-790427228000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -790427228000-7904273bd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -7904273bd000-790427415000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -790427415000-790427416000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -790427416000-79042741a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -79042741a000-79042741c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -79042741c000-790427429000 rw-p 00000000 00:00 0 -790427429000-79042742b000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -79042742b000-79042742e000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -79042742e000-79042742f000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -79042742f000-790427430000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -790427430000-790427431000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -790427431000-790427432000 rw-p 00000000 00:00 0 -790427432000-790427433000 r-xp 0005e000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -790427433000-790427434000 rw-p 00000000 00:00 0 -790427434000-79042743f000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -79042743f000-790427440000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -790427440000-790427441000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -790427441000-790427442000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -790427442000-790427455000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -790427455000-790427456000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -790427456000-790427457000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -790427457000-790427458000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -790427458000-790427497000 rw-p 00000000 00:00 0 -790427497000-7904274b7000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -7904274b7000-7904274b8000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -7904274b8000-7904274b9000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -7904274b9000-7904274ba000 rw-p 00000000 00:00 0 -7904274ba000-7904274d8000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -7904274d8000-7904274da000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -7904274da000-7904274db000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -7904274db000-7904274dc000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -7904274dc000-7904274dd000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -7904274dd000-7904274de000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -7904274de000-7904274df000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -7904274df000-7904274e0000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -7904274e0000-7904274e4000 rw-p 00000000 00:00 0 -7904274e4000-7904274e5000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -7904274e5000-7904274e6000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -7904274e6000-7904274e7000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -7904274e7000-7904274e8000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -7904274e8000-7904274e9000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -7904274e9000-7904274ea000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -7904274ea000-7904274eb000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -7904274eb000-7904274ec000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -7904274ec000-7904274ed000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -7904274ed000-7904274ee000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -7904274ee000-7904274f0000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -7904274f0000-790427501000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -790427501000-790427507000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -790427507000-790427508000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -790427508000-790427509000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -790427509000-79042750a000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -79042750a000-790427511000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -790427511000-790427512000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -790427512000-790427513000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -790427513000-790427514000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -790427514000-790427519000 rw-p 00000000 00:00 0 -790427519000-790427520000 ---p 00000000 00:00 0 -790427520000-790427528000 rw-s 00000000 103:03 4325444 /tmp/hsperfdata_codex/85657 -790427528000-790427529000 ---p 00000000 00:00 0 -790427529000-79042752a000 r--p 00000000 00:00 0 -79042752a000-790427539000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -790427539000-79042753a000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -79042753a000-79042753b000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -79042753b000-79042753d000 rw-p 00000000 00:00 0 -79042753d000-790427541000 r--p 00000000 00:00 0 [vvar] -790427541000-790427543000 r-xp 00000000 00:00 0 [vdso] -790427543000-790427545000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -790427545000-79042756f000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -79042756f000-79042757a000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -79042757a000-79042757b000 ---p 00000000 00:00 0 -79042757b000-79042757d000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -79042757d000-79042757f000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7fffd44b6000-7fffd44d9000 rw-p 00000000 00:00 0 [stack] -ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] -Total number of mappings: 921 - - -VM Arguments: -jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -java_command: jme3test.vulkan.VulkanTest -java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 2 {product} {ergonomic} - uint G1ConcRefinementThreads = 8 {product} {ergonomic} - size_t G1HeapRegionSize = 4194304 {product} {ergonomic} - size_t InitialHeapSize = 524288000 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MarkStackSizeMax = 536870912 {product} {ergonomic} - size_t MaxHeapSize = 8388608000 {product} {ergonomic} - size_t MaxNewSize = 5033164800 {product} {ergonomic} - size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags foldmultilines=false - #1: stderr all=off uptime,level,tags foldmultilines=false - -Environment Variables: -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin -USERNAME=codex -SHELL=/bin/bash -DISPLAY=:1 -LANG=en_US.UTF-8 - -Active Locale: -LC_ALL=en_US.UTF-8 -LC_COLLATE=en_US.UTF-8 -LC_CTYPE=en_US.UTF-8 -LC_MESSAGES=en_US.UTF-8 -LC_MONETARY=en_US.UTF-8 -LC_NUMERIC=en_US.UTF-8 -LC_TIME=en_US.UTF-8 - -Signal Handlers: - SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked - SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - - -Periodic native trim disabled - ---------------- S Y S T E M --------------- - -OS: -DISTRIB_ID=Pop -DISTRIB_RELEASE=22.04 -DISTRIB_CODENAME=jammy -DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" -uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 -OS uptime: 0 days 15:18 hours -libc: glibc 2.35 NPTL 2.35 -rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095956k/4095956k -load average: 1.41 1.57 1.15 - -/proc/meminfo: -MemTotal: 32767652 kB -MemFree: 20134740 kB -MemAvailable: 23540972 kB -Buffers: 347504 kB -Cached: 5014736 kB -SwapCached: 0 kB -Active: 8818268 kB -Inactive: 2816324 kB -Active(anon): 6307560 kB -Inactive(anon): 0 kB -Active(file): 2510708 kB -Inactive(file): 2816324 kB -Unevictable: 15204 kB -Mlocked: 72 kB -SwapTotal: 20970996 kB -SwapFree: 20970996 kB -Zswap: 0 kB -Zswapped: 0 kB -Dirty: 324 kB -Writeback: 0 kB -AnonPages: 6287800 kB -Mapped: 1828896 kB -Shmem: 35208 kB -KReclaimable: 197260 kB -Slab: 386392 kB -SReclaimable: 197260 kB -SUnreclaim: 189132 kB -KernelStack: 22880 kB -PageTables: 54428 kB -SecPageTables: 0 kB -NFS_Unstable: 0 kB -Bounce: 0 kB -WritebackTmp: 0 kB -CommitLimit: 37354820 kB -Committed_AS: 12325568 kB -VmallocTotal: 34359738367 kB -VmallocUsed: 252400 kB -VmallocChunk: 0 kB -Percpu: 9472 kB -HardwareCorrupted: 0 kB -AnonHugePages: 0 kB -ShmemHugePages: 6144 kB -ShmemPmdMapped: 0 kB -FileHugePages: 0 kB -FilePmdMapped: 0 kB -Unaccepted: 0 kB -HugePages_Total: 0 -HugePages_Free: 0 -HugePages_Rsvd: 0 -HugePages_Surp: 0 -Hugepagesize: 2048 kB -Hugetlb: 0 kB -DirectMap4k: 851768 kB -DirectMap2M: 15826944 kB -DirectMap1G: 16777216 kB - -/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never -/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 -/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force -/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never - -Process Memory: -Virtual Size: 13446916K (peak: 13510788K) -Resident Set Size: 317340K (peak: 317340K) (anon: 171248K, file: 145068K, shmem: 1024K) -Swapped out: 0K -C-Heap outstanding allocations: 79001K, retained: 32298K -glibc malloc tunables: (default) - -/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 -/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 -/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 -/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 - -container (cgroup) information: -container_type: cgroupv2 -cpu_cpuset_cpus: not supported -cpu_memory_nodes: not supported -active_processor_count: 8 -cpu_quota: not supported -cpu_period: not supported -cpu_shares: not supported -memory_limit_in_bytes: unlimited -memory_and_swap_limit_in_bytes: unlimited -memory_soft_limit_in_bytes: 0 -memory_usage_in_bytes: 5982148 k -memory_max_usage_in_bytes: not supported -rss_usage_in_bytes: 3571588 k -cache_usage_in_bytes: 2327152 k -memory_swap_current_in_bytes: 0 -memory_swap_max_limit_in_bytes: unlimited -maximum number of tasks: 38296 -current number of tasks: 328 - -Steal ticks since vm start: 0 -Steal ticks percentage since vm start: 0.000 - -CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c -CPU Model and flags from /proc/cpuinfo: -model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities - -Online cpus: 0-7 -Offline cpus: -BIOS frequency limitation: -Frequency switch latency (ns): 0 -Available cpu frequencies: -Current governor: powersave -Core performance/turbo boost: - -Memory: 4k page, physical 32767652k(23540972k free), swap 20970996k(20970996k free) -Page Sizes: 4k - -vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 - -END. diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index f374d7f5a8..640b7ec879 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -2,20 +2,21 @@ import com.jme3.app.SimpleApplication; import com.jme3.material.RenderState; +import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.shaderc.ShaderType; import com.jme3.shaderc.ShadercLoader; import com.jme3.system.AppSettings; import com.jme3.system.vulkan.LwjglVulkanContext; import com.jme3.vulkan.*; +import com.jme3.vulkan.Queue; +import org.lwjgl.PointerBuffer; import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.*; import java.nio.IntBuffer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.logging.Level; import static com.jme3.renderer.vulkan.VulkanUtils.*; @@ -24,21 +25,22 @@ import static org.lwjgl.vulkan.EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; import static org.lwjgl.vulkan.VK13.*; -public class VulkanHelperTest extends SimpleApplication { +public class VulkanHelperTest extends SimpleApplication implements SwapchainUpdater { private VulkanInstance instance; private Surface surface; private LogicalDevice device; private SimpleQueueFamilies queues; private Swapchain swapchain; - private List swapchainImages; private ShaderModule vertModule, fragModule; private PipelineLayout pipelineLayout; private RenderPass renderPass; private GraphicsPipeline pipeline; - private final List frameBuffers = new ArrayList<>(); - private CommandBuffer graphicsCommands; + private CommandPool graphicsPool; private VulkanRenderManager renderer; + private boolean swapchainResizeFlag = false; + + private final Collection deviceExtensions = new ArrayList<>(); private long debugMessenger = NULL; private final VkDebugUtilsMessengerCallbackEXT debugCallback = new VulkanDebugCallback(Level.SEVERE); @@ -56,6 +58,8 @@ public static void main(String[] args) { @Override public void simpleInitApp() { + assetManager.registerLoader(ShadercLoader.class, "glsl"); + deviceExtensions.add(KHRSwapchain.VK_KHR_SWAPCHAIN_EXTENSION_NAME); long window = ((LwjglVulkanContext)context).getWindowHandle(); try (InstanceBuilder inst = new InstanceBuilder(VK13.VK_API_VERSION_1_3)) { inst.addGlfwExtensions(); @@ -70,20 +74,20 @@ public void simpleInitApp() { surface = new Surface(instance, window); PhysicalDevice physDevice = PhysicalDevice.getPhysicalDevice( instance.getNativeObject(), - Arrays.asList(surface, DeviceEvaluator.extensions(inst.getNamedExtensions()), DeviceEvaluator.swapchain(surface)), + Arrays.asList(surface, DeviceEvaluator.extensions(deviceExtensions), DeviceEvaluator.swapchain(surface)), () -> new SimpleQueueFamilies(surface)); queues = physDevice.getQueueFamilies(); - device = new LogicalDevice(physDevice, inst.getExtensions(), inst.getLayers()); + PointerBuffer deviceExts = VulkanUtils.toPointers(inst.getStack(), deviceExtensions, inst.getStack()::UTF8); + device = new LogicalDevice(physDevice, deviceExts, inst.getLayers()); physDevice.getQueueFamilies().createQueues(device); try (SimpleSwapchainSupport support = new SimpleSwapchainSupport(physDevice, surface, window)) { swapchain = new Swapchain(device, surface, support); } } - swapchainImages = swapchain.createViews(); vertModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( "Shaders/VulkanVertTest.glsl", ShaderType.Vertex)), "main"); fragModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( - "Shader/VulkanFragTest.glsl", ShaderType.Fragment)), "main"); + "Shaders/VulkanFragTest.glsl", ShaderType.Fragment)), "main"); pipelineLayout = new PipelineLayout(device); try (RenderPassBuilder pass = new RenderPassBuilder()) { int color = pass.createAttachment(a -> a @@ -112,13 +116,10 @@ public void simpleInitApp() { .dstAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT); renderPass = pass.build(device); } + swapchain.createFrameBuffers(renderPass); pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, new RenderState(), vertModule, fragModule); - for (ImageView v : swapchainImages) { - frameBuffers.add(new FrameBuffer(device, renderPass, - swapchain.getExtent().width(), swapchain.getExtent().height(), 1, v)); - } - CommandPool graphicsPool = new CommandPool(device, queues.getGraphicsQueue(), false, true); - graphicsCommands = graphicsPool.allocateCommandBuffer(); + graphicsPool = new CommandPool(device, queues.getGraphicsQueue(), false, true); + //graphicsCommands = graphicsPool.allocateCommandBuffer(); renderer = new VulkanRenderManager(2, Frame::new); } @@ -132,6 +133,29 @@ public void stop() { super.stop(); } + @Override + public boolean swapchainOutOfDate(Swapchain swapchain, int imageAcquireCode) { + if (swapchainResizeFlag || imageAcquireCode == KHRSwapchain.VK_ERROR_OUT_OF_DATE_KHR + || imageAcquireCode == KHRSwapchain.VK_SUBOPTIMAL_KHR) { + swapchainResizeFlag = false; + long window = ((LwjglVulkanContext)context).getWindowHandle(); + try (SimpleSwapchainSupport support = new SimpleSwapchainSupport(device.getPhysicalDevice(), surface, window)) { + swapchain.reload(support); + swapchain.createFrameBuffers(renderPass); + } + return true; + } + if (imageAcquireCode != VK_SUCCESS) { + throw new RuntimeException("Failed to acquire swapchain image."); + } + return false; + } + + @Override + public void reshape(int w, int h) { + swapchainResizeFlag = true; + } + @Override public void simpleUpdate(float tpf) { renderer.render(tpf); @@ -159,6 +183,7 @@ private void createDebugMessenger(MemoryStack stack) { private class Frame implements Runnable { private final int index; + private final CommandBuffer graphicsCommands = graphicsPool.allocateCommandBuffer(); private final Semaphore imageAvailable = new Semaphore(device); private final Semaphore renderFinished = new Semaphore(device); private final Fence inFlight = new Fence(device, true); @@ -169,22 +194,26 @@ private Frame(int index) { @Override public void run() { - inFlight.blockThenReset(5000); - Swapchain.SwapchainImage image = swapchain.acquireNextImage(imageAvailable, null, 5000); + inFlight.block(5000); + Swapchain.SwapchainImage image = swapchain.acquireNextImage(VulkanHelperTest.this, imageAvailable, null, 5000); + if (image == null) { + return; + } + inFlight.reset(); graphicsCommands.reset(); graphicsCommands.begin(); - renderPass.begin(graphicsCommands, frameBuffers.get(index)); + renderPass.begin(graphicsCommands, image.getFrameBuffer()); pipeline.bind(graphicsCommands); try (MemoryStack stack = MemoryStack.stackPush()) { VkViewport.Buffer vp = VkViewport.calloc(1, stack) .x(0f).y(0f) - .width(swapchain.getExtent().width()) - .height(swapchain.getExtent().height()) + .width(swapchain.getExtent().getX()) + .height(swapchain.getExtent().getY()) .minDepth(0f).maxDepth(1f); vkCmdSetViewport(graphicsCommands.getBuffer(), 0, vp); VkRect2D.Buffer scissor = VkRect2D.calloc(1, stack); scissor.offset().set(0, 0); - scissor.extent(swapchain.getExtent()); + scissor.extent(swapchain.getExtent().toStruct(stack)); vkCmdSetScissor(graphicsCommands.getBuffer(), 0, scissor); } vkCmdDraw(graphicsCommands.getBuffer(), 3, 1, 0, 0); @@ -254,7 +283,13 @@ public boolean isComplete() { @Override public IntBuffer getSwapchainConcurrentBuffers(MemoryStack stack) { - return null; + if (Objects.equals(graphicsIndex, presentIndex)) { + return null; + } + IntBuffer buf = stack.mallocInt(NUM_QUEUES); + buf.put(0, graphicsIndex); + buf.put(1, presentIndex); + return buf; } public Queue getGraphicsQueue() { @@ -316,15 +351,13 @@ public VkExtent2D selectExtent() { if (caps.currentExtent().width() != UINT32_MAX) { return caps.currentExtent(); } - try (MemoryStack stack = MemoryStack.stackPush()) { - IntBuffer width = stack.mallocInt(1); - IntBuffer height = stack.mallocInt(1); - GLFW.glfwGetFramebufferSize(window, width, height); - VkExtent2D ext = VkExtent2D.malloc(stack); - ext.width(Math.min(Math.max(width.get(0), caps.minImageExtent().width()), caps.maxImageExtent().width())); - ext.height(Math.min(Math.max(width.get(0), caps.minImageExtent().height()), caps.maxImageExtent().height())); - return ext; - } + IntBuffer width = stack.mallocInt(1); + IntBuffer height = stack.mallocInt(1); + GLFW.glfwGetFramebufferSize(window, width, height); + VkExtent2D ext = VkExtent2D.malloc(stack); + ext.width(Math.min(Math.max(width.get(0), caps.minImageExtent().width()), caps.maxImageExtent().width())); + ext.height(Math.min(Math.max(width.get(0), caps.minImageExtent().height()), caps.maxImageExtent().height())); + return ext; } @Override diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java index 49133a1c8b..cf97770299 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java @@ -594,6 +594,7 @@ public void run() { .pImageIndices(stack.ints(image)); check(KHRSwapchain.vkQueuePresentKHR(presentQueue, present), "Failed to present image to swapchain"); System.out.println("end frame render commands"); + BufferUtils bufutils; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java index 621467db72..039b7738fa 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java @@ -20,31 +20,35 @@ public class CommandBuffer { public CommandBuffer(CommandPool pool) { this.pool = pool; - VkCommandBufferAllocateInfo allocate = VkCommandBufferAllocateInfo.create() - .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO) - .commandPool(pool.getNativeObject()) - .level(VK_COMMAND_BUFFER_LEVEL_PRIMARY) - .commandBufferCount(1); - PointerBuffer ptr = MemoryUtil.memAllocPointer(1); - check(vkAllocateCommandBuffers(pool.getDevice().getNativeObject(), allocate, ptr), - "Failed to allocate command buffer"); - buffer = new VkCommandBuffer(ptr.get(0), pool.getDevice().getNativeObject()); - allocate.close(); - MemoryUtil.memFree(ptr); + try (MemoryStack stack = MemoryStack.stackPush()) { + VkCommandBufferAllocateInfo allocate = VkCommandBufferAllocateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO) + .commandPool(pool.getNativeObject()) + .level(VK_COMMAND_BUFFER_LEVEL_PRIMARY) + .commandBufferCount(1); + PointerBuffer ptr = stack.mallocPointer(1); + check(vkAllocateCommandBuffers(pool.getDevice().getNativeObject(), allocate, ptr), + "Failed to allocate command buffer"); + buffer = new VkCommandBuffer(ptr.get(0), pool.getDevice().getNativeObject()); + } } public void begin() { if (recording) { throw new IllegalStateException("Command buffer already recording."); } - VkCommandBufferBeginInfo begin = VkCommandBufferBeginInfo.create() - .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO); - check(vkBeginCommandBuffer(buffer, begin), "Failed to begin command buffer"); - begin.close(); - recording = true; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkCommandBufferBeginInfo begin = VkCommandBufferBeginInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO); + check(vkBeginCommandBuffer(buffer, begin), "Failed to begin command buffer"); + recording = true; + } } public void end() { + if (!recording) { + throw new IllegalStateException("Command buffer has not begun recording."); + } check(vkEndCommandBuffer(buffer), "Failed to record command buffer"); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java index aca0119358..0242a2e0bc 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java @@ -2,6 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkCommandPoolCreateInfo; @@ -15,38 +16,40 @@ public class CommandPool implements Native { private final LogicalDevice device; private final Queue queue; private final NativeReference ref; - private LongBuffer id = MemoryUtil.memAllocLong(1); + private long id; public CommandPool(LogicalDevice device, Queue queue, boolean isTransient, boolean reset) { this.device = device; this.queue = queue; - VkCommandPoolCreateInfo create = VkCommandPoolCreateInfo.create() - .sType(VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO) - .flags((isTransient ? VK_COMMAND_POOL_CREATE_TRANSIENT_BIT : 0) - | (reset ? VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT : 0)) - .queueFamilyIndex(queue.getFamilyIndex()); - check(vkCreateCommandPool(device.getNativeObject(), create, null, id), "Failed to create command pool."); - create.close(); + try (MemoryStack stack = MemoryStack.stackPush()) { + VkCommandPoolCreateInfo create = VkCommandPoolCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO) + .flags((isTransient ? VK_COMMAND_POOL_CREATE_TRANSIENT_BIT : 0) + | (reset ? VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT : 0)) + .queueFamilyIndex(queue.getFamilyIndex()); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateCommandPool(device.getNativeObject(), create, null, idBuf), "Failed to create command pool."); + id = idBuf.get(0); + } ref = Native.get().register(this); device.getNativeReference().addDependent(ref); } @Override public Long getNativeObject() { - return id != null ? id.get(0) : null; + return id; } @Override public Runnable createNativeDestroyer() { return () -> { - vkDestroyCommandPool(device.getNativeObject(), id.get(0), null); - MemoryUtil.memFree(id); + vkDestroyCommandPool(device.getNativeObject(), id, null); }; } @Override public void prematureNativeDestruction() { - id = null; + id = VK_NULL_HANDLE; } @Override diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java index 44e9ed7925..431b2954bd 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java @@ -1,5 +1,6 @@ package com.jme3.vulkan; +import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkExtensionProperties; import java.util.Arrays; @@ -31,10 +32,19 @@ public DeviceExtensionSupport(Collection extensions) { @Override public Float evaluateDevice(PhysicalDevice device) { - VkExtensionProperties.Buffer exts = device.getExtensions(); - if (extensions.stream().allMatch(e -> exts.stream().anyMatch( - p -> p.extensionNameString().equals(e)))) return 0f; - return null; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkExtensionProperties.Buffer exts = device.getExtensions(stack); + System.out.println("available:"); + for (VkExtensionProperties p : exts) { + System.out.println(" " + p.extensionNameString()); + } + if (extensions.stream().allMatch(e -> { + System.out.println("trying " + e + " extension..."); + return exts.stream().anyMatch( + p -> p.extensionNameString().equals(e)); })) return 0f; + System.out.println("Reject device by extensions"); + return null; + } } } @@ -49,7 +59,11 @@ public DeviceSwapchainSupport(Surface surface) { @Override public Float evaluateDevice(PhysicalDevice device) { - return device.querySwapchainSupport(surface) ? 0f : null; + if (device.querySwapchainSupport(surface)) { + return 0f; + } + System.out.println("Reject device by swapchain support"); + return null; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Extent2.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Extent2.java new file mode 100644 index 0000000000..278a2157b0 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Extent2.java @@ -0,0 +1,58 @@ +package com.jme3.vulkan; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkExtent2D; + +public final class Extent2 { + + public int x, y; + + public Extent2() { + this(0, 0); + } + + public Extent2(int x, int y) { + this.x = x; + this.y = y; + } + + public Extent2(VkExtent2D vk) { + this.x = vk.width(); + this.y = vk.height(); + } + + public Extent2 set(int x, int y) { + this.x = x; + this.y = y; + return this; + } + + public Extent2 set(VkExtent2D vk) { + this.x = vk.width(); + this.y = vk.height(); + return this; + } + + public Extent2 setX(int x) { + this.x = x; + return this; + } + + public Extent2 setY(int y) { + this.y = y; + return this; + } + + public VkExtent2D toStruct(MemoryStack stack) { + return VkExtent2D.malloc(stack).set(x, y); + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java index 3f21ff483c..d5a0e0270d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java @@ -55,6 +55,10 @@ public NativeReference getNativeReference() { return ref; } + public String toString() { + return "Fence[" + !isBlocking() + "]"; + } + public void block(long timeoutMillis) { check(vkWaitForFences(device.getNativeObject(), id, true, TimeUnit.MILLISECONDS.toNanos(timeoutMillis)), "Fence wait expired."); @@ -69,6 +73,10 @@ public void reset() { vkResetFences(device.getNativeObject(), id); } + public boolean isBlocking() { + return vkGetFenceStatus(device.getNativeObject(), id) != VK_SUCCESS; + } + public long getId() { return id; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java index b94f3ddff4..4bd242b86a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java @@ -2,7 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; -import org.lwjgl.system.MemoryUtil; +import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkFramebufferCreateInfo; import java.nio.LongBuffer; @@ -16,7 +16,7 @@ public class FrameBuffer implements Native { private final NativeReference ref; private final int width, height, layers; private final ImageView[] attachments; - private LongBuffer id = MemoryUtil.memAllocLong(1); + private long id; public FrameBuffer(LogicalDevice device, RenderPass compat, int width, int height, int layers, ImageView... attachments) { this.device = device; @@ -24,39 +24,40 @@ public FrameBuffer(LogicalDevice device, RenderPass compat, int width, int heigh this.height = height; this.layers = layers; this.attachments = attachments; - LongBuffer att = MemoryUtil.memAllocLong(attachments.length); - for (int i = 0; i < attachments.length; i++) { - att.put(i, attachments[i].getNativeObject()); + try (MemoryStack stack = MemoryStack.stackPush()) { + LongBuffer att = stack.mallocLong(attachments.length); + for (int i = 0; i < attachments.length; i++) { + att.put(i, attachments[i].getNativeObject()); + } + VkFramebufferCreateInfo create = VkFramebufferCreateInfo.calloc() + .sType(VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO) + .renderPass(compat.getNativeObject()) + .pAttachments(att) + .width(width).height(height) + .layers(layers); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateFramebuffer(device.getNativeObject(), create, null, idBuf)); + id = idBuf.get(0); } - VkFramebufferCreateInfo create = VkFramebufferCreateInfo.create() - .sType(VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO) - .renderPass(compat.getNativeObject()) - .pAttachments(att) - .width(width).height(height) - .layers(layers); - check(vkCreateFramebuffer(device.getNativeObject(), create, null, id)); - MemoryUtil.memFree(att); - create.close(); ref = Native.get().register(this); device.getNativeReference().addDependent(ref); } @Override public Long getNativeObject() { - return id != null ? id.get(0) : null; + return id; } @Override public Runnable createNativeDestroyer() { return () -> { - vkDestroyFramebuffer(device.getNativeObject(), id.get(0), null); - MemoryUtil.memFree(id); + vkDestroyFramebuffer(device.getNativeObject(), id, null); }; } @Override public void prematureNativeDestruction() { - id = null; + id = VK_NULL_HANDLE; } @Override diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java index 9719122fee..7c3ffa6856 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java @@ -17,7 +17,7 @@ public class GraphicsPipeline implements Native { private final LogicalDevice device; private final NativeReference ref; - private LongBuffer id = MemoryUtil.memAllocLong(1); + private long id; public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass compat, RenderState state, ShaderModule vert, ShaderModule frag) { this.device = device; @@ -95,8 +95,11 @@ public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass .subpass(0) .basePipelineHandle(VK_NULL_HANDLE) .basePipelineIndex(-1); - check(vkCreateGraphicsPipelines(device.getNativeObject(), VK_NULL_HANDLE, pipeline, null, id), + System.out.println("render pass: " + compat.getNativeObject()); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateGraphicsPipelines(device.getNativeObject(), VK_NULL_HANDLE, pipeline, null, idBuf), "Failed to create graphics pipeline"); + id = idBuf.get(0); } ref = Native.get().register(this); device.getNativeReference().addDependent(ref); @@ -104,20 +107,19 @@ public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass @Override public Long getNativeObject() { - return id != null ? id.get(0) : null; + return id; } @Override public Runnable createNativeDestroyer() { return () -> { - vkDestroyPipeline(device.getNativeObject(), id.get(0), null); - MemoryUtil.memFree(id); + vkDestroyPipeline(device.getNativeObject(), id, null); }; } @Override public void prematureNativeDestruction() { - id = null; + id = VK_NULL_HANDLE; } @Override @@ -126,7 +128,7 @@ public NativeReference getNativeReference() { } public void bind(CommandBuffer cmd) { - vkCmdBindPipeline(cmd.getBuffer(), VK_PIPELINE_BIND_POINT_GRAPHICS, id.get(0)); + vkCmdBindPipeline(cmd.getBuffer(), VK_PIPELINE_BIND_POINT_GRAPHICS, id); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java index 9bf5755a14..5a5ec7251e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java @@ -1,121 +1,12 @@ package com.jme3.vulkan; import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; -import org.lwjgl.system.MemoryUtil; -import org.lwjgl.vulkan.*; +import org.lwjgl.vulkan.VkImageViewCreateInfo; -import java.nio.LongBuffer; +public interface Image extends Native { -import static com.jme3.renderer.vulkan.VulkanUtils.*; -import static org.lwjgl.vulkan.VK10.*; + ImageView createView(VkImageViewCreateInfo create); -public class Image implements Native { - - private final LogicalDevice device; - private final NativeReference ref; - private final int width, height, format, tiling, usage, mem; - protected LongBuffer id = MemoryUtil.memAllocLong(1); - protected LongBuffer memory = MemoryUtil.memAllocLong(1); - - public Image(LogicalDevice device, int width, int height, int format, int tiling, int usage, int mem) { - this.device = device; - this.width = width; - this.height = height; - this.format = format; - this.tiling = tiling; - this.usage = usage; - this.mem = mem; - VkImageCreateInfo create = VkImageCreateInfo.create() - .sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) - .imageType(VK_IMAGE_TYPE_2D) - .mipLevels(1) - .arrayLayers(1) - .format(format) - .tiling(tiling) - .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) - .usage(usage) - .samples(VK_SAMPLE_COUNT_1_BIT) - .sharingMode(VK_SHARING_MODE_EXCLUSIVE); - create.extent().width(width).height(height).depth(1); - createImageMemory(create, mem); - create.free(); - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - } - - public Image(LogicalDevice device, VkImageCreateInfo create, int mem) { - this.device = device; - this.width = create.extent().width(); - this.height = create.extent().height(); - this.format = create.format(); - this.tiling = create.tiling(); - this.usage = create.usage(); - this.mem = mem; - createImageMemory(create, mem); - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - } - - public Image(LogicalDevice device, long id) { - width = height = format = tiling = usage = mem = 0; // todo: fix image interfacing - this.device = device; - this.id.put(0, id); - this.memory.put(0, MemoryUtil.NULL); - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - } - - private void createImageMemory(VkImageCreateInfo create, int mem) { - create.sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO); - vkCreateImage(device.getNativeObject(), create, null, id); - VkMemoryRequirements memReq = VkMemoryRequirements.create(); - vkGetImageMemoryRequirements(device.getNativeObject(), id.get(0), memReq); - VkMemoryAllocateInfo allocate = VkMemoryAllocateInfo.create() - .sType(VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO) - .allocationSize(memReq.size()) - .memoryTypeIndex(device.getPhysicalDevice().findMemoryType(memReq.memoryTypeBits(), mem)); - check(vkAllocateMemory(device.getNativeObject(), allocate, null, memory), "Failed to allocate image memory"); - vkBindImageMemory(device.getNativeObject(), id.get(0), memory.get(0), 0); - memReq.free(); - allocate.free(); - } - - @Override - public Long getNativeObject() { - return id != null ? id.get(0) : null; - } - - @Override - public Runnable createNativeDestroyer() { - return () -> { - vkDestroyImage(device.getNativeObject(), id.get(0), null); - MemoryUtil.memFree(id); - MemoryUtil.memFree(memory); - }; - } - - @Override - public void prematureNativeDestruction() { - id = null; - memory = null; - } - - @Override - public NativeReference getNativeReference() { - return ref; - } - - public LogicalDevice getDevice() { - return device; - } - - public long getMemory() { - return memory != null ? memory.get(0) : MemoryUtil.NULL; - } - - public ImageView createView(VkImageViewCreateInfo create) { - return new ImageView(this, create); - } + LogicalDevice getDevice(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java index 377e4d4b70..9b9e6bbc9c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java @@ -2,6 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkImageViewCreateInfo; @@ -12,34 +13,37 @@ public class ImageView implements Native { private final Image image; private final NativeReference ref; - private LongBuffer id = MemoryUtil.memAllocLong(1); + private long id; public ImageView(Image image, VkImageViewCreateInfo create) { this.image = image; create.sType(VK10.VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO); create.image(image.getNativeObject()); - VK10.vkCreateImageView(image.getDevice().getNativeObject(), create, null, id); + System.out.println("image ID: " + image.getNativeObject()); + try (MemoryStack stack = MemoryStack.stackPush()) { + LongBuffer idBuf = stack.mallocLong(1); + VK10.vkCreateImageView(image.getDevice().getNativeObject(), create, null, idBuf); + id = idBuf.get(0); + } ref = Native.get().register(this); image.getNativeReference().addDependent(ref); } @Override public Long getNativeObject() { - return id != null ? id.get(0) : null; + return id; } @Override public Runnable createNativeDestroyer() { return () -> { - VK10.vkDestroyImageView(image.getDevice().getNativeObject(), id.get(0), null); - MemoryUtil.memFree(id); + VK10.vkDestroyImageView(image.getDevice().getNativeObject(), id, null); + id = VK10.VK_NULL_HANDLE; }; } @Override - public void prematureNativeDestruction() { - id = null; - } + public void prematureNativeDestruction() {} @Override public NativeReference getNativeReference() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java index 6ad8d52c5d..7446748874 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java @@ -143,4 +143,8 @@ public int getNumLayers() { return layers.size(); } + public MemoryStack getStack() { + return stack; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java index 0b841e29d1..89e2c55c18 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java @@ -4,12 +4,8 @@ import com.jme3.util.natives.NativeReference; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkDevice; import org.lwjgl.vulkan.VkDeviceCreateInfo; -import org.lwjgl.vulkan.VkPhysicalDeviceFeatures; - -import java.util.Collection; import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; @@ -34,9 +30,9 @@ public LogicalDevice(PhysicalDevice physical, PointerBuffer extensions, PointerB create.ppEnabledLayerNames(layers); } PointerBuffer ptr = stack.mallocPointer(1); - device = new VkDevice(check(vkCreateDevice(physical.getDevice(), create, null, ptr), - "Failed to create logical device."), physical.getDevice(), create); - MemoryUtil.memFree(ptr); + check(vkCreateDevice(physical.getDevice(), create, null, ptr), + "Failed to create logical device."); + device = new VkDevice(ptr.get(0), physical.getDevice(), create); } ref = Native.get().register(this); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java index c9a591edc7..a5e823e725 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java @@ -66,8 +66,8 @@ public VkPhysicalDeviceFeatures getFeatures() { return features; } - public VkExtensionProperties.Buffer getExtensions() { - return enumerateBuffer(VkExtensionProperties::create, (count, buffer) -> + public VkExtensionProperties.Buffer getExtensions(MemoryStack stack) { + return enumerateBuffer(stack, n -> VkExtensionProperties.malloc(n, stack), (count, buffer) -> vkEnumerateDeviceExtensionProperties(device, (ByteBuffer)null, count, buffer)); } @@ -97,15 +97,16 @@ public int findMemoryType(int filter, int properties) { } public boolean querySwapchainSupport(Surface surface) { - IntBuffer count = MemoryUtil.memAllocInt(1); - KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface.getNativeObject(), count, null); - if (count.get(0) <= 0) { - return false; + try (MemoryStack stack = MemoryStack.stackPush()) { + IntBuffer count = stack.mallocInt(1); + KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface.getNativeObject(), count, null); + if (count.get(0) <= 0) { + return false; + } + KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface.getNativeObject(), count, null); + int n = count.get(0); + return n > 0; } - KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface.getNativeObject(), count, null); - int n = count.get(0); - MemoryUtil.memFree(count); - return n > 0; } @SuppressWarnings("unchecked") @@ -113,11 +114,12 @@ public static PhysicalDevice getPhysicalDevice(VkIn Collection evaluators, Supplier queueFactory) { try (MemoryStack stack = MemoryStack.stackPush()) { + System.out.println("Get physical device from instance: " + instance); PointerBuffer devices = enumerateBuffer(stack, stack::mallocPointer, (count, buffer) -> check(vkEnumeratePhysicalDevices(instance, count, buffer), "Failed to enumerate physical devices.")); PhysicalDevice device = null; - float score = 0f; + float score = -1f; for (PhysicalDevice d : iteratePointers(devices, ptr -> new PhysicalDevice(instance, queueFactory.get(), ptr))) { if (!d.queues.isComplete()) { continue; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java index 6ff22e8bb6..8acb3c564d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java @@ -2,6 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkPipelineLayoutCreateInfo; @@ -14,36 +15,37 @@ public class PipelineLayout implements Native { private final LogicalDevice device; private final NativeReference ref; - private LongBuffer id = MemoryUtil.memAllocLong(1); + private long id; public PipelineLayout(LogicalDevice device) { this.device = device; - VkPipelineLayoutCreateInfo create = VkPipelineLayoutCreateInfo.create() - .sType(VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO); - check(vkCreatePipelineLayout(device.getNativeObject(), create, null, id), - "Failed to create pipeline."); - create.close(); + try (MemoryStack stack = MemoryStack.stackPush()) { + VkPipelineLayoutCreateInfo create = VkPipelineLayoutCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreatePipelineLayout(device.getNativeObject(), create, null, idBuf), + "Failed to create pipeline."); + id = idBuf.get(0); + } ref = Native.get().register(this); device.getNativeReference().addDependent(ref); } @Override public Long getNativeObject() { - return id != null ? id.get(0) : null; + return id; } @Override public Runnable createNativeDestroyer() { return () -> { - vkDestroyPipelineLayout(device.getNativeObject(), id.get(0), null); - MemoryUtil.memFree(id); + vkDestroyPipelineLayout(device.getNativeObject(), id, null); + id = VK_NULL_HANDLE; }; } @Override - public void prematureNativeDestruction() { - id = null; - } + public void prematureNativeDestruction() {} @Override public NativeReference getNativeReference() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java index cd2e4889e0..e5a6e61a1b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java @@ -17,33 +17,34 @@ public class RenderPass implements Native { private final LogicalDevice device; private final NativeReference ref; - private LongBuffer id = MemoryUtil.memAllocLong(1); + private long id; public RenderPass(LogicalDevice device, VkRenderPassCreateInfo create) { this.device = device; - check(vkCreateRenderPass(device.getNativeObject(), create, null, id), - "Failed to create render pass."); + try (MemoryStack stack = MemoryStack.stackPush()) { + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateRenderPass(device.getNativeObject(), create, null, idBuf), "Failed to create render pass."); + id = idBuf.get(0); + } ref = Native.get().register(this); device.getNativeReference().addDependent(ref); } @Override public Long getNativeObject() { - return id != null ? id.get(0) : null; + return id; } @Override public Runnable createNativeDestroyer() { return () -> { - vkDestroyRenderPass(device.getNativeObject(), id.get(0), null); - MemoryUtil.memFree(id); + vkDestroyRenderPass(device.getNativeObject(), id, null); + id = VK_NULL_HANDLE; }; } @Override - public void prematureNativeDestruction() { - id = null; - } + public void prematureNativeDestruction() {} @Override public NativeReference getNativeReference() { @@ -56,7 +57,7 @@ public void begin(CommandBuffer cmd, FrameBuffer fbo) { clear.color().float32(stack.floats(0f, 0f, 0f, 1f)); VkRenderPassBeginInfo begin = VkRenderPassBeginInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO) - .renderPass(id.get(0)) + .renderPass(id) .framebuffer(fbo.getNativeObject()) .clearValueCount(clear.limit()) .pClearValues(clear); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java index 81fbf0f595..c92a01ad1c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java @@ -37,10 +37,12 @@ public Float evaluateDevice(PhysicalDevice device) { IntBuffer count = stack.mallocInt(1); KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device.getDevice(), id, count, null); if (count.get(0) == 0) { + System.out.println("Reject device by surface support (formats)"); return null; } KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device.getDevice(), id, count, null); if (count.get(0) == 0) { + System.out.println("Reject device by surface support (present modes)"); return null; } return 0f; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java index 2184eb3973..707f7e305d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java @@ -20,29 +20,60 @@ public class Swapchain implements Native { private final Surface surface; private final NativeReference ref; private final List images = new ArrayList<>(); - private final VkExtent2D extent; - private final int format; - private LongBuffer id = MemoryUtil.memAllocLong(1); - private VkSurfaceCapabilitiesKHR caps; + private SwapchainUpdater updater; + private Extent2 extent; + private int format; + private long id = VK_NULL_HANDLE; public Swapchain(LogicalDevice device, Surface surface, SwapchainSupport support) { - assert support.isSupported() : "Swapchain for device is not supported."; this.device = device; this.surface = surface; - caps = VkSurfaceCapabilitiesKHR.create(); - KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( - device.getPhysicalDevice().getDevice(), surface.getNativeObject(), caps); - VkSurfaceFormatKHR fmt = support.selectFormat(); + reload(support); + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + surface.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> KHRSwapchain.vkDestroySwapchainKHR(device.getNativeObject(), id, null); + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return null; + } + + public void reload(SwapchainSupport support) { + assert support.isSupported() : "Swapchain for device is not supported."; + if (id != VK_NULL_HANDLE) { + createNativeDestroyer().run(); + id = VK_NULL_HANDLE; + } + images.clear(); try (MemoryStack stack = MemoryStack.stackPush()) { + VkSurfaceCapabilitiesKHR caps = VkSurfaceCapabilitiesKHR.calloc(stack); + KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( + device.getPhysicalDevice().getDevice(), surface.getNativeObject(), caps); + VkSurfaceFormatKHR fmt = support.selectFormat(); format = fmt.format(); - extent = support.selectExtent(); + VkExtent2D ext = support.selectExtent(); + extent = new Extent2(ext); VkSwapchainCreateInfoKHR create = VkSwapchainCreateInfoKHR.calloc(stack) .sType(KHRSwapchain.VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR) .surface(surface.getNativeObject()) .minImageCount(support.selectImageCount()) .imageFormat(format) .imageColorSpace(fmt.colorSpace()) - .imageExtent(extent) + .imageExtent(ext) .imageArrayLayers(1) .imageUsage(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) .preTransform(caps.currentTransform()) @@ -58,54 +89,37 @@ public Swapchain(LogicalDevice device, Surface surface, SwapchainSupport support } else { create.imageSharingMode(VK_SHARING_MODE_EXCLUSIVE); } - check(KHRSwapchain.vkCreateSwapchainKHR(device.getNativeObject(), create, null, id), + LongBuffer ptr = stack.mallocLong(1); + check(KHRSwapchain.vkCreateSwapchainKHR(device.getNativeObject(), create, null, ptr), "Failed to create swapchain."); + id = ptr.get(0); + System.out.println("swapchain handle: " + id); LongBuffer imgs = enumerateBuffer(stack, stack::mallocLong, (c, b) -> - KHRSwapchain.vkGetSwapchainImagesKHR(device.getNativeObject(), id.get(0), c, b)); + check(KHRSwapchain.vkGetSwapchainImagesKHR(device.getNativeObject(), id, c, b), + "Failed to get swapchain images.")); Objects.requireNonNull(imgs, "Swapchain contains no images."); for (int i = 0; i < imgs.limit(); i++) { images.add(new SwapchainImage(device, imgs.get(i))); } } - fmt.close(); - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - surface.getNativeReference().addDependent(ref); } - @Override - public Long getNativeObject() { - return id != null ? id.get(0) : null; - } - - @Override - public Runnable createNativeDestroyer() { - return () -> { - KHRSwapchain.vkDestroySwapchainKHR(device.getNativeObject(), id.get(0), null); - MemoryUtil.memFree(id); - caps.free(); - }; - } - - @Override - public void prematureNativeDestruction() { - id = null; - caps = null; - } - - @Override - public NativeReference getNativeReference() { - return null; + public void createFrameBuffers(RenderPass compat) { + for (SwapchainImage img : images) { + img.createFrameBuffer(compat); + } } - public SwapchainImage acquireNextImage(Semaphore semaphore, Fence fence, long timeout) { - IntBuffer i = MemoryUtil.memAllocInt(1); - check(KHRSwapchain.vkAcquireNextImageKHR(device.getNativeObject(), id.get(0), - TimeUnit.MILLISECONDS.toNanos(timeout), Native.getId(semaphore), Native.getId(fence), i), - "Failed to acquire next swapchain image."); - SwapchainImage img = getImage(i.get(0)); - MemoryUtil.memFree(i); - return img; + public SwapchainImage acquireNextImage(SwapchainUpdater updater, Semaphore semaphore, Fence fence, long timeout) { + try (MemoryStack stack = MemoryStack.stackPush()) { + IntBuffer i = stack.mallocInt(1); + int code = KHRSwapchain.vkAcquireNextImageKHR(device.getNativeObject(), id, + TimeUnit.MILLISECONDS.toNanos(timeout), Native.getId(semaphore), Native.getId(fence), i); + if (updater.swapchainOutOfDate(this, code)) { + return null; + } + return images.get(i.get(0)); + } } public void present(Queue presentQueue, SwapchainImage image, Semaphore wait) { @@ -113,7 +127,7 @@ public void present(Queue presentQueue, SwapchainImage image, Semaphore wait) { VkPresentInfoKHR info = VkPresentInfoKHR.calloc(stack) .sType(KHRSwapchain.VK_STRUCTURE_TYPE_PRESENT_INFO_KHR) .swapchainCount(1) - .pSwapchains(id) + .pSwapchains(stack.longs(id)) .pImageIndices(stack.ints(images.indexOf(image))); if (wait != null) { info.pWaitSemaphores(stack.longs(wait.getNativeObject())); @@ -122,29 +136,6 @@ public void present(Queue presentQueue, SwapchainImage image, Semaphore wait) { } } - public List createViews() { - List result = new ArrayList<>(images.size()); - for (SwapchainImage img : images) { - VkImageViewCreateInfo create = VkImageViewCreateInfo.create() - .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) - .image(img.getNativeObject()) - .viewType(VK_IMAGE_VIEW_TYPE_2D) - .format(format); - create.components().r(VK_COMPONENT_SWIZZLE_IDENTITY) - .g(VK_COMPONENT_SWIZZLE_IDENTITY) - .b(VK_COMPONENT_SWIZZLE_IDENTITY) - .a(VK_COMPONENT_SWIZZLE_IDENTITY); - create.subresourceRange().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) - .baseMipLevel(0) - .levelCount(1) - .baseArrayLayer(0) - .layerCount(1); - result.add(new ImageView(img, create)); - create.free(); - } - return result; - } - public LogicalDevice getDevice() { return device; } @@ -157,12 +148,7 @@ public List getImages() { return Collections.unmodifiableList(images); } - public SwapchainImage getImage(long id) { - return images.stream().filter(i -> i.getNativeObject() == id) - .findAny().orElseThrow(() -> new NoSuchElementException("Image not found.")); - } - - public VkExtent2D getExtent() { + public Extent2 getExtent() { return extent; } @@ -170,18 +156,38 @@ public int getFormat() { return format; } - public static class SwapchainImage extends Image { + public class SwapchainImage extends OldImage { + + private final ImageView view; + private FrameBuffer frameBuffer; private SwapchainImage(LogicalDevice device, long id) { super(device, id); + try (MemoryStack stack = MemoryStack.stackPush()) { + VkImageViewCreateInfo create = VkImageViewCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) + .image(getNativeObject()) + .viewType(VK_IMAGE_VIEW_TYPE_2D) + .format(format); + create.components().r(VK_COMPONENT_SWIZZLE_IDENTITY) + .g(VK_COMPONENT_SWIZZLE_IDENTITY) + .b(VK_COMPONENT_SWIZZLE_IDENTITY) + .a(VK_COMPONENT_SWIZZLE_IDENTITY); + create.subresourceRange().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + .baseMipLevel(0) + .levelCount(1) + .baseArrayLayer(0) + .layerCount(1); + this.view = new ImageView(this, create); + } + } + + public void createFrameBuffer(RenderPass compat) { + this.frameBuffer = new FrameBuffer(getDevice(), compat, extent.x, extent.y, 1, view); } - @Override - public Runnable createNativeDestroyer() { - return () -> { - MemoryUtil.memFree(id); - MemoryUtil.memFree(memory); - }; + public FrameBuffer getFrameBuffer() { + return frameBuffer; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainUpdater.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainUpdater.java new file mode 100644 index 0000000000..80b7622154 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainUpdater.java @@ -0,0 +1,7 @@ +package com.jme3.vulkan; + +public interface SwapchainUpdater { + + boolean swapchainOutOfDate(Swapchain swapchain, int imageAcquireCode); + +} diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl index ad32c2cc70..1789f94a1b 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl @@ -1,17 +1,9 @@ #version 450 -vec2 positions[3] = vec2[] ( - vec2(0.0, -0.5), - vec2(0.5, 0.5), - vec2(-0.5, 0.5) -); -vec3 colors[3] = vec3[] ( - vec3(1.0, 0.0, 0.0), - vec3(0.0, 1.0, 0.0), - vec3(0.0, 0.0, 1.0) -); +layout (location = 0) in vec2 inPosition; +layout (location = 1) in vec3 inColor; -layout(location = 0) out vec3 fragColor; +layout (location = 0) out vec3 fragColor; void main() { gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0); From e82ab06deb912f1ea22f46a05c0c5cf44745e6ab Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 26 Jul 2025 21:57:18 -0400 Subject: [PATCH 13/80] debug initial vulkan engine interface --- .../main/java/com/jme3/vulkan/OldImage.java | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/OldImage.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OldImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OldImage.java new file mode 100644 index 0000000000..d3ec4ccc11 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OldImage.java @@ -0,0 +1,127 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.*; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class OldImage implements Image { + + private final LogicalDevice device; + private final NativeReference ref; + private final int width, height, format, tiling, usage, mem; + private long id, memory; + + public OldImage(LogicalDevice device, int width, int height, int format, int tiling, int usage, int mem) { + this.device = device; + this.width = width; + this.height = height; + this.format = format; + this.tiling = tiling; + this.usage = usage; + this.mem = mem; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkImageCreateInfo create = VkImageCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) + .imageType(VK_IMAGE_TYPE_2D) + .mipLevels(1) + .arrayLayers(1) + .format(format) + .tiling(tiling) + .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) + .usage(usage) + .samples(VK_SAMPLE_COUNT_1_BIT) + .sharingMode(VK_SHARING_MODE_EXCLUSIVE); + create.extent().width(width).height(height).depth(1); + createImageMemory(stack, create, mem); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + public OldImage(LogicalDevice device, VkImageCreateInfo create, int mem) { + this.device = device; + this.width = create.extent().width(); + this.height = create.extent().height(); + this.format = create.format(); + this.tiling = create.tiling(); + this.usage = create.usage(); + this.mem = mem; + try (MemoryStack stack = MemoryStack.stackPush()) { + createImageMemory(stack, create, mem); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + public OldImage(LogicalDevice device, long id) { + width = height = format = tiling = usage = mem = 0; // todo: fix image interfacing + this.device = device; + System.out.println("Assign image ID: " + id); + this.id = id; + this.memory = VK_NULL_HANDLE; + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + private void createImageMemory(MemoryStack stack, VkImageCreateInfo create, int mem) { + create.sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO); + vkCreateImage(device.getNativeObject(), create, null, stack.longs(id)); + VkMemoryRequirements memReq = VkMemoryRequirements.create(); + vkGetImageMemoryRequirements(device.getNativeObject(), id, memReq); + VkMemoryAllocateInfo allocate = VkMemoryAllocateInfo.create() + .sType(VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO) + .allocationSize(memReq.size()) + .memoryTypeIndex(device.getPhysicalDevice().findMemoryType(memReq.memoryTypeBits(), mem)); + LongBuffer memBuf = stack.mallocLong(1); + check(vkAllocateMemory(device.getNativeObject(), allocate, null, memBuf), "Failed to allocate image memory"); + memory = memBuf.get(0); + vkBindImageMemory(device.getNativeObject(), id, memory, 0); + memReq.free(); + allocate.free(); + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + vkDestroyImage(device.getNativeObject(), id, null); + vkFreeMemory(device.getNativeObject(), memory, null); + id = VK_NULL_HANDLE; + memory = VK_NULL_HANDLE; + }; + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + @Override + public LogicalDevice getDevice() { + return device; + } + + public long getMemory() { + return memory; + } + + @Override + public ImageView createView(VkImageViewCreateInfo create) { + return new ImageView(this, create); + } + +} From 5aa391e127e519cd12bfb783192c45073677fde1 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sun, 27 Jul 2025 22:13:10 -0400 Subject: [PATCH 14/80] add shader attributes and gpu buffers --- hs_err_pid78128.log | 1520 +++++++++++++++++ .../jme3test/vulkan/VulkanHelperTest.java | 75 +- .../java/com/jme3/vulkan/CommandBuffer.java | 6 +- .../com/jme3/vulkan/GraphicsPipeline.java | 6 +- .../java/com/jme3/vulkan/MemoryRegion.java | 102 ++ .../java/com/jme3/vulkan/MeshDescription.java | 64 + .../com/jme3/vulkan/OneTimeCommandBuffer.java | 18 +- .../java/com/jme3/vulkan/PhysicalDevice.java | 16 + .../src/main/java/com/jme3/vulkan/Vertex.java | 25 + .../com/jme3/vulkan/buffers/BufferArgs.java | 77 + .../com/jme3/vulkan/buffers/GpuBuffer.java | 105 ++ .../resources/Shaders/VulkanVertTest.glsl | 4 +- 12 files changed, 1997 insertions(+), 21 deletions(-) create mode 100644 hs_err_pid78128.log create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryRegion.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Vertex.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferArgs.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java diff --git a/hs_err_pid78128.log b/hs_err_pid78128.log new file mode 100644 index 0000000000..1cbd152d6c --- /dev/null +++ b/hs_err_pid78128.log @@ -0,0 +1,1520 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x000073b95c45933a, pid=78128, tid=78153 +# +# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) +# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) +# Problematic frame: +# C [libjemalloc.so+0x5933a] +# +# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.78128) +# +# If you would like to submit a bug report, please visit: +# https://bugreport.java.com/bugreport/crash.jsp +# + +--------------- S U M M A R Y ------------ + +Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanHelperTest + +Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS +Time: Sun Jul 27 22:12:26 2025 EDT elapsed time: 5.435825 seconds (0d 0h 0m 5s) + +--------------- T H R E A D --------------- + +Current thread is native thread + +Stack: [0x000073b95c100000,0x000073b95c200000], sp=0x000073b95c1fe8d0, free space=1018k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libjemalloc.so+0x5933a] + +siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 + +Registers: +RAX=0x0000000000000000, RBX=0x0000000000000200, RCX=0x0000000000000000, RDX=0x000073b95c478440 +RSP=0x000073b95c1fe8d0, RBP=0x000073b95c1fedb0, RSI=0x0000000000000000, RDI=0x000073b954ae1020 +R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x000073b954ae1060 +R12=0x000000000000003f, R13=0x000073b95c1fed70, R14=0x000000000000003f, R15=0x000073b95c1fead0 +RIP=0x000073b95c45933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 + TRAPNO=0x000000000000000e + + +Top of Stack: (sp=0x000073b95c1fe8d0) +0x000073b95c1fe8d0: 000073b97c4c7590 000073b95c1fe960 +0x000073b95c1fe8e0: 000073b95c1fe970 000073b985b32211 +0x000073b95c1fe8f0: 0000000000000005 000073b97c4c7788 +0x000073b95c1fe900: 0000000000000005 0000000000000000 +0x000073b95c1fe910: 0000000000000001 000073b97c4c7220 +0x000073b95c1fe920: 000073b97c4c7788 000073b97c4c7220 +0x000073b95c1fe930: 000000016bd3f020 000073b97c4c7590 +0x000073b95c1fe940: 0000000000000000 3962333700000000 +0x000073b95c1fe950: 3064343900000000 4b172e4100000004 +0x000073b95c1fe960: 00000000ffffffff 0000000000000000 +0x000073b95c1fe970: 000073b98580d4d0 000073b985b1f7c0 +0x000073b95c1fe980: 000073b95c1fe9b0 000073b985278613 +0x000073b95c1fe990: 000073b95c1feb88 000073b98588849a +0x000073b95c1fe9a0: 0000000000000000 000073b95c1feaa0 +0x000073b95c1fe9b0: 00000000fbad8001 0000000000000002 +0x000073b95c1fe9c0: 000073b97c4c7220 000073b95c6ff028 +0x000073b95c1fe9d0: 000073b985a1cae8 0000000000000004 +0x000073b95c1fe9e0: 000073b95c1ffb58 000073b985b38f71 +0x000073b95c1fe9f0: 0000000000000005 0000000000000000 +0x000073b95c1fea00: 000073b98580d4d0 000073b9858a53e0 +0x000073b95c1fea10: 0000000000000000 000073b95c1fee00 +0x000073b95c1fea20: 000073b985a1caf8 0000000000000000 +0x000073b95c1fea30: 000073b985a1cae8 000073b985b3bdae +0x000073b95c1fea40: 0000000000000001 000000000000006f +0x000073b95c1fea50: 000073b95c6b17d0 0000000000000000 +0x000073b95c1fea60: 000073b8acbbbcd0 0000000000000000 +0x000073b95c1fea70: 00000000000000ca 5a15e310c4f3a7d5 +0x000073b95c1fea80: 0000000000000213 000073b985a17300 +0x000073b95c1fea90: 0000000000000000 0000000000000200 +0x000073b95c1feaa0: 000073b95c1fedb0 000000000000003f +0x000073b95c1feab0: 000073b95c1fed70 000073b95c1fead0 +0x000073b95c1feac0: 000073b8ac002420 000073b95c4592f8 + +Instructions: (pc=0x000073b95c45933a) +0x000073b95c45923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff +0x000073b95c45924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 +0x000073b95c45925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 +0x000073b95c45926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c +0x000073b95c45927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b +0x000073b95c45928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 +0x000073b95c45929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 +0x000073b95c4592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 +0x000073b95c4592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 +0x000073b95c4592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d +0x000073b95c4592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c +0x000073b95c4592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 +0x000073b95c4592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b +0x000073b95c45930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 +0x000073b95c45931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 +0x000073b95c45932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 +0x000073b95c45933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 +0x000073b95c45934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c +0x000073b95c45935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 +0x000073b95c45936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 +0x000073b95c45937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c +0x000073b95c45938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 +0x000073b95c45939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 +0x000073b95c4593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d +0x000073b95c4593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 +0x000073b95c4593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f +0x000073b95c4593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 +0x000073b95c4593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 +0x000073b95c4593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 +0x000073b95c45940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff +0x000073b95c45941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 +0x000073b95c45942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 + + + +--------------- P R O C E S S --------------- + +VM state: not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: None + +Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 + +CDS archive(s) mapped at: [0x000073b8fe000000-0x000073b8fed91000-0x000073b8fed91000), size 14225408, SharedBaseAddress: 0x000073b8fe000000, ArchiveRelocationMode: 1. +Compressed class space mapped at: 0x000073b8ff000000-0x000073b93f000000, reserved size: 1073741824 +Narrow klass base: 0x000073b8fe000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 + +GC Precious Log: + + +Heap: + garbage-first heap total reserved 8192000K, committed 516096K, used 11952K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 3 young (12288K), 1 survivors (4096K) + Metaspace used 10807K, committed 11072K, reserved 1114112K + class space used 906K, committed 1024K, reserved 1048576K + +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|0x000000060c000000, 0x000000060c000000, 0x000000060c400000| 0%| F| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 +| 1|0x000000060c400000, 0x000000060c400000, 0x000000060c800000| 0%| F| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 +| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 +| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 +| 4|0x000000060d000000, 0x000000060d000000, 0x000000060d400000| 0%| F| |TAMS 0x000000060d000000| PB 0x000000060d000000| Untracked | 0 +| 5|0x000000060d400000, 0x000000060d400000, 0x000000060d800000| 0%| F| |TAMS 0x000000060d400000| PB 0x000000060d400000| Untracked | 0 +| 6|0x000000060d800000, 0x000000060d800000, 0x000000060dc00000| 0%| F| |TAMS 0x000000060d800000| PB 0x000000060d800000| Untracked | 0 +| 7|0x000000060dc00000, 0x000000060dc00000, 0x000000060e000000| 0%| F| |TAMS 0x000000060dc00000| PB 0x000000060dc00000| Untracked | 0 +| 8|0x000000060e000000, 0x000000060e000000, 0x000000060e400000| 0%| F| |TAMS 0x000000060e000000| PB 0x000000060e000000| Untracked | 0 +| 9|0x000000060e400000, 0x000000060e400000, 0x000000060e800000| 0%| F| |TAMS 0x000000060e400000| PB 0x000000060e400000| Untracked | 0 +| 10|0x000000060e800000, 0x000000060e800000, 0x000000060ec00000| 0%| F| |TAMS 0x000000060e800000| PB 0x000000060e800000| Untracked | 0 +| 11|0x000000060ec00000, 0x000000060ec00000, 0x000000060f000000| 0%| F| |TAMS 0x000000060ec00000| PB 0x000000060ec00000| Untracked | 0 +| 12|0x000000060f000000, 0x000000060f000000, 0x000000060f400000| 0%| F| |TAMS 0x000000060f000000| PB 0x000000060f000000| Untracked | 0 +| 13|0x000000060f400000, 0x000000060f400000, 0x000000060f800000| 0%| F| |TAMS 0x000000060f400000| PB 0x000000060f400000| Untracked | 0 +| 14|0x000000060f800000, 0x000000060f800000, 0x000000060fc00000| 0%| F| |TAMS 0x000000060f800000| PB 0x000000060f800000| Untracked | 0 +| 15|0x000000060fc00000, 0x000000060fc00000, 0x0000000610000000| 0%| F| |TAMS 0x000000060fc00000| PB 0x000000060fc00000| Untracked | 0 +| 16|0x0000000610000000, 0x0000000610000000, 0x0000000610400000| 0%| F| |TAMS 0x0000000610000000| PB 0x0000000610000000| Untracked | 0 +| 17|0x0000000610400000, 0x0000000610400000, 0x0000000610800000| 0%| F| |TAMS 0x0000000610400000| PB 0x0000000610400000| Untracked | 0 +| 18|0x0000000610800000, 0x0000000610800000, 0x0000000610c00000| 0%| F| |TAMS 0x0000000610800000| PB 0x0000000610800000| Untracked | 0 +| 19|0x0000000610c00000, 0x0000000610c00000, 0x0000000611000000| 0%| F| |TAMS 0x0000000610c00000| PB 0x0000000610c00000| Untracked | 0 +| 20|0x0000000611000000, 0x0000000611000000, 0x0000000611400000| 0%| F| |TAMS 0x0000000611000000| PB 0x0000000611000000| Untracked | 0 +| 21|0x0000000611400000, 0x0000000611400000, 0x0000000611800000| 0%| F| |TAMS 0x0000000611400000| PB 0x0000000611400000| Untracked | 0 +| 22|0x0000000611800000, 0x0000000611800000, 0x0000000611c00000| 0%| F| |TAMS 0x0000000611800000| PB 0x0000000611800000| Untracked | 0 +| 23|0x0000000611c00000, 0x0000000611c00000, 0x0000000612000000| 0%| F| |TAMS 0x0000000611c00000| PB 0x0000000611c00000| Untracked | 0 +| 24|0x0000000612000000, 0x0000000612000000, 0x0000000612400000| 0%| F| |TAMS 0x0000000612000000| PB 0x0000000612000000| Untracked | 0 +| 25|0x0000000612400000, 0x0000000612400000, 0x0000000612800000| 0%| F| |TAMS 0x0000000612400000| PB 0x0000000612400000| Untracked | 0 +| 26|0x0000000612800000, 0x0000000612800000, 0x0000000612c00000| 0%| F| |TAMS 0x0000000612800000| PB 0x0000000612800000| Untracked | 0 +| 27|0x0000000612c00000, 0x0000000612c00000, 0x0000000613000000| 0%| F| |TAMS 0x0000000612c00000| PB 0x0000000612c00000| Untracked | 0 +| 28|0x0000000613000000, 0x0000000613000000, 0x0000000613400000| 0%| F| |TAMS 0x0000000613000000| PB 0x0000000613000000| Untracked | 0 +| 29|0x0000000613400000, 0x0000000613400000, 0x0000000613800000| 0%| F| |TAMS 0x0000000613400000| PB 0x0000000613400000| Untracked | 0 +| 30|0x0000000613800000, 0x0000000613800000, 0x0000000613c00000| 0%| F| |TAMS 0x0000000613800000| PB 0x0000000613800000| Untracked | 0 +| 31|0x0000000613c00000, 0x0000000613c00000, 0x0000000614000000| 0%| F| |TAMS 0x0000000613c00000| PB 0x0000000613c00000| Untracked | 0 +| 32|0x0000000614000000, 0x0000000614000000, 0x0000000614400000| 0%| F| |TAMS 0x0000000614000000| PB 0x0000000614000000| Untracked | 0 +| 33|0x0000000614400000, 0x0000000614400000, 0x0000000614800000| 0%| F| |TAMS 0x0000000614400000| PB 0x0000000614400000| Untracked | 0 +| 34|0x0000000614800000, 0x0000000614800000, 0x0000000614c00000| 0%| F| |TAMS 0x0000000614800000| PB 0x0000000614800000| Untracked | 0 +| 35|0x0000000614c00000, 0x0000000614c00000, 0x0000000615000000| 0%| F| |TAMS 0x0000000614c00000| PB 0x0000000614c00000| Untracked | 0 +| 36|0x0000000615000000, 0x0000000615000000, 0x0000000615400000| 0%| F| |TAMS 0x0000000615000000| PB 0x0000000615000000| Untracked | 0 +| 37|0x0000000615400000, 0x0000000615400000, 0x0000000615800000| 0%| F| |TAMS 0x0000000615400000| PB 0x0000000615400000| Untracked | 0 +| 38|0x0000000615800000, 0x0000000615800000, 0x0000000615c00000| 0%| F| |TAMS 0x0000000615800000| PB 0x0000000615800000| Untracked | 0 +| 39|0x0000000615c00000, 0x0000000615c00000, 0x0000000616000000| 0%| F| |TAMS 0x0000000615c00000| PB 0x0000000615c00000| Untracked | 0 +| 40|0x0000000616000000, 0x0000000616000000, 0x0000000616400000| 0%| F| |TAMS 0x0000000616000000| PB 0x0000000616000000| Untracked | 0 +| 41|0x0000000616400000, 0x0000000616400000, 0x0000000616800000| 0%| F| |TAMS 0x0000000616400000| PB 0x0000000616400000| Untracked | 0 +| 42|0x0000000616800000, 0x0000000616800000, 0x0000000616c00000| 0%| F| |TAMS 0x0000000616800000| PB 0x0000000616800000| Untracked | 0 +| 43|0x0000000616c00000, 0x0000000616c00000, 0x0000000617000000| 0%| F| |TAMS 0x0000000616c00000| PB 0x0000000616c00000| Untracked | 0 +| 44|0x0000000617000000, 0x0000000617000000, 0x0000000617400000| 0%| F| |TAMS 0x0000000617000000| PB 0x0000000617000000| Untracked | 0 +| 45|0x0000000617400000, 0x0000000617400000, 0x0000000617800000| 0%| F| |TAMS 0x0000000617400000| PB 0x0000000617400000| Untracked | 0 +| 46|0x0000000617800000, 0x0000000617800000, 0x0000000617c00000| 0%| F| |TAMS 0x0000000617800000| PB 0x0000000617800000| Untracked | 0 +| 47|0x0000000617c00000, 0x0000000617c00000, 0x0000000618000000| 0%| F| |TAMS 0x0000000617c00000| PB 0x0000000617c00000| Untracked | 0 +| 48|0x0000000618000000, 0x0000000618000000, 0x0000000618400000| 0%| F| |TAMS 0x0000000618000000| PB 0x0000000618000000| Untracked | 0 +| 49|0x0000000618400000, 0x0000000618400000, 0x0000000618800000| 0%| F| |TAMS 0x0000000618400000| PB 0x0000000618400000| Untracked | 0 +| 50|0x0000000618800000, 0x0000000618800000, 0x0000000618c00000| 0%| F| |TAMS 0x0000000618800000| PB 0x0000000618800000| Untracked | 0 +| 51|0x0000000618c00000, 0x0000000618c00000, 0x0000000619000000| 0%| F| |TAMS 0x0000000618c00000| PB 0x0000000618c00000| Untracked | 0 +| 52|0x0000000619000000, 0x0000000619000000, 0x0000000619400000| 0%| F| |TAMS 0x0000000619000000| PB 0x0000000619000000| Untracked | 0 +| 53|0x0000000619400000, 0x0000000619400000, 0x0000000619800000| 0%| F| |TAMS 0x0000000619400000| PB 0x0000000619400000| Untracked | 0 +| 54|0x0000000619800000, 0x0000000619800000, 0x0000000619c00000| 0%| F| |TAMS 0x0000000619800000| PB 0x0000000619800000| Untracked | 0 +| 55|0x0000000619c00000, 0x0000000619c00000, 0x000000061a000000| 0%| F| |TAMS 0x0000000619c00000| PB 0x0000000619c00000| Untracked | 0 +| 56|0x000000061a000000, 0x000000061a000000, 0x000000061a400000| 0%| F| |TAMS 0x000000061a000000| PB 0x000000061a000000| Untracked | 0 +| 57|0x000000061a400000, 0x000000061a400000, 0x000000061a800000| 0%| F| |TAMS 0x000000061a400000| PB 0x000000061a400000| Untracked | 0 +| 58|0x000000061a800000, 0x000000061a800000, 0x000000061ac00000| 0%| F| |TAMS 0x000000061a800000| PB 0x000000061a800000| Untracked | 0 +| 59|0x000000061ac00000, 0x000000061ac00000, 0x000000061b000000| 0%| F| |TAMS 0x000000061ac00000| PB 0x000000061ac00000| Untracked | 0 +| 60|0x000000061b000000, 0x000000061b000000, 0x000000061b400000| 0%| F| |TAMS 0x000000061b000000| PB 0x000000061b000000| Untracked | 0 +| 61|0x000000061b400000, 0x000000061b400000, 0x000000061b800000| 0%| F| |TAMS 0x000000061b400000| PB 0x000000061b400000| Untracked | 0 +| 62|0x000000061b800000, 0x000000061b800000, 0x000000061bc00000| 0%| F| |TAMS 0x000000061b800000| PB 0x000000061b800000| Untracked | 0 +| 63|0x000000061bc00000, 0x000000061bc00000, 0x000000061c000000| 0%| F| |TAMS 0x000000061bc00000| PB 0x000000061bc00000| Untracked | 0 +| 64|0x000000061c000000, 0x000000061c000000, 0x000000061c400000| 0%| F| |TAMS 0x000000061c000000| PB 0x000000061c000000| Untracked | 0 +| 65|0x000000061c400000, 0x000000061c400000, 0x000000061c800000| 0%| F| |TAMS 0x000000061c400000| PB 0x000000061c400000| Untracked | 0 +| 66|0x000000061c800000, 0x000000061c800000, 0x000000061cc00000| 0%| F| |TAMS 0x000000061c800000| PB 0x000000061c800000| Untracked | 0 +| 67|0x000000061cc00000, 0x000000061cc00000, 0x000000061d000000| 0%| F| |TAMS 0x000000061cc00000| PB 0x000000061cc00000| Untracked | 0 +| 68|0x000000061d000000, 0x000000061d000000, 0x000000061d400000| 0%| F| |TAMS 0x000000061d000000| PB 0x000000061d000000| Untracked | 0 +| 69|0x000000061d400000, 0x000000061d400000, 0x000000061d800000| 0%| F| |TAMS 0x000000061d400000| PB 0x000000061d400000| Untracked | 0 +| 70|0x000000061d800000, 0x000000061d800000, 0x000000061dc00000| 0%| F| |TAMS 0x000000061d800000| PB 0x000000061d800000| Untracked | 0 +| 71|0x000000061dc00000, 0x000000061dc00000, 0x000000061e000000| 0%| F| |TAMS 0x000000061dc00000| PB 0x000000061dc00000| Untracked | 0 +| 72|0x000000061e000000, 0x000000061e000000, 0x000000061e400000| 0%| F| |TAMS 0x000000061e000000| PB 0x000000061e000000| Untracked | 0 +| 73|0x000000061e400000, 0x000000061e400000, 0x000000061e800000| 0%| F| |TAMS 0x000000061e400000| PB 0x000000061e400000| Untracked | 0 +| 74|0x000000061e800000, 0x000000061e800000, 0x000000061ec00000| 0%| F| |TAMS 0x000000061e800000| PB 0x000000061e800000| Untracked | 0 +| 75|0x000000061ec00000, 0x000000061ec00000, 0x000000061f000000| 0%| F| |TAMS 0x000000061ec00000| PB 0x000000061ec00000| Untracked | 0 +| 76|0x000000061f000000, 0x000000061f000000, 0x000000061f400000| 0%| F| |TAMS 0x000000061f000000| PB 0x000000061f000000| Untracked | 0 +| 77|0x000000061f400000, 0x000000061f400000, 0x000000061f800000| 0%| F| |TAMS 0x000000061f400000| PB 0x000000061f400000| Untracked | 0 +| 78|0x000000061f800000, 0x000000061f800000, 0x000000061fc00000| 0%| F| |TAMS 0x000000061f800000| PB 0x000000061f800000| Untracked | 0 +| 79|0x000000061fc00000, 0x000000061fc00000, 0x0000000620000000| 0%| F| |TAMS 0x000000061fc00000| PB 0x000000061fc00000| Untracked | 0 +| 80|0x0000000620000000, 0x0000000620000000, 0x0000000620400000| 0%| F| |TAMS 0x0000000620000000| PB 0x0000000620000000| Untracked | 0 +| 81|0x0000000620400000, 0x0000000620400000, 0x0000000620800000| 0%| F| |TAMS 0x0000000620400000| PB 0x0000000620400000| Untracked | 0 +| 82|0x0000000620800000, 0x0000000620800000, 0x0000000620c00000| 0%| F| |TAMS 0x0000000620800000| PB 0x0000000620800000| Untracked | 0 +| 83|0x0000000620c00000, 0x0000000620c00000, 0x0000000621000000| 0%| F| |TAMS 0x0000000620c00000| PB 0x0000000620c00000| Untracked | 0 +| 84|0x0000000621000000, 0x0000000621000000, 0x0000000621400000| 0%| F| |TAMS 0x0000000621000000| PB 0x0000000621000000| Untracked | 0 +| 85|0x0000000621400000, 0x0000000621400000, 0x0000000621800000| 0%| F| |TAMS 0x0000000621400000| PB 0x0000000621400000| Untracked | 0 +| 86|0x0000000621800000, 0x0000000621800000, 0x0000000621c00000| 0%| F| |TAMS 0x0000000621800000| PB 0x0000000621800000| Untracked | 0 +| 87|0x0000000621c00000, 0x0000000621c00000, 0x0000000622000000| 0%| F| |TAMS 0x0000000621c00000| PB 0x0000000621c00000| Untracked | 0 +| 88|0x0000000622000000, 0x0000000622000000, 0x0000000622400000| 0%| F| |TAMS 0x0000000622000000| PB 0x0000000622000000| Untracked | 0 +| 89|0x0000000622400000, 0x0000000622400000, 0x0000000622800000| 0%| F| |TAMS 0x0000000622400000| PB 0x0000000622400000| Untracked | 0 +| 90|0x0000000622800000, 0x0000000622800000, 0x0000000622c00000| 0%| F| |TAMS 0x0000000622800000| PB 0x0000000622800000| Untracked | 0 +| 91|0x0000000622c00000, 0x0000000622c00000, 0x0000000623000000| 0%| F| |TAMS 0x0000000622c00000| PB 0x0000000622c00000| Untracked | 0 +| 92|0x0000000623000000, 0x0000000623000000, 0x0000000623400000| 0%| F| |TAMS 0x0000000623000000| PB 0x0000000623000000| Untracked | 0 +| 93|0x0000000623400000, 0x0000000623400000, 0x0000000623800000| 0%| F| |TAMS 0x0000000623400000| PB 0x0000000623400000| Untracked | 0 +| 94|0x0000000623800000, 0x0000000623800000, 0x0000000623c00000| 0%| F| |TAMS 0x0000000623800000| PB 0x0000000623800000| Untracked | 0 +| 95|0x0000000623c00000, 0x0000000623c00000, 0x0000000624000000| 0%| F| |TAMS 0x0000000623c00000| PB 0x0000000623c00000| Untracked | 0 +| 96|0x0000000624000000, 0x0000000624000000, 0x0000000624400000| 0%| F| |TAMS 0x0000000624000000| PB 0x0000000624000000| Untracked | 0 +| 97|0x0000000624400000, 0x0000000624400000, 0x0000000624800000| 0%| F| |TAMS 0x0000000624400000| PB 0x0000000624400000| Untracked | 0 +| 98|0x0000000624800000, 0x0000000624800000, 0x0000000624c00000| 0%| F| |TAMS 0x0000000624800000| PB 0x0000000624800000| Untracked | 0 +| 99|0x0000000624c00000, 0x0000000624c00000, 0x0000000625000000| 0%| F| |TAMS 0x0000000624c00000| PB 0x0000000624c00000| Untracked | 0 +| 100|0x0000000625000000, 0x0000000625000000, 0x0000000625400000| 0%| F| |TAMS 0x0000000625000000| PB 0x0000000625000000| Untracked | 0 +| 101|0x0000000625400000, 0x0000000625400000, 0x0000000625800000| 0%| F| |TAMS 0x0000000625400000| PB 0x0000000625400000| Untracked | 0 +| 102|0x0000000625800000, 0x0000000625800000, 0x0000000625c00000| 0%| F| |TAMS 0x0000000625800000| PB 0x0000000625800000| Untracked | 0 +| 103|0x0000000625c00000, 0x0000000625c00000, 0x0000000626000000| 0%| F| |TAMS 0x0000000625c00000| PB 0x0000000625c00000| Untracked | 0 +| 104|0x0000000626000000, 0x0000000626000000, 0x0000000626400000| 0%| F| |TAMS 0x0000000626000000| PB 0x0000000626000000| Untracked | 0 +| 105|0x0000000626400000, 0x0000000626400000, 0x0000000626800000| 0%| F| |TAMS 0x0000000626400000| PB 0x0000000626400000| Untracked | 0 +| 106|0x0000000626800000, 0x0000000626800000, 0x0000000626c00000| 0%| F| |TAMS 0x0000000626800000| PB 0x0000000626800000| Untracked | 0 +| 107|0x0000000626c00000, 0x0000000626c00000, 0x0000000627000000| 0%| F| |TAMS 0x0000000626c00000| PB 0x0000000626c00000| Untracked | 0 +| 108|0x0000000627000000, 0x0000000627000000, 0x0000000627400000| 0%| F| |TAMS 0x0000000627000000| PB 0x0000000627000000| Untracked | 0 +| 109|0x0000000627400000, 0x0000000627400000, 0x0000000627800000| 0%| F| |TAMS 0x0000000627400000| PB 0x0000000627400000| Untracked | 0 +| 110|0x0000000627800000, 0x0000000627800000, 0x0000000627c00000| 0%| F| |TAMS 0x0000000627800000| PB 0x0000000627800000| Untracked | 0 +| 111|0x0000000627c00000, 0x0000000627c00000, 0x0000000628000000| 0%| F| |TAMS 0x0000000627c00000| PB 0x0000000627c00000| Untracked | 0 +| 112|0x0000000628000000, 0x0000000628000000, 0x0000000628400000| 0%| F| |TAMS 0x0000000628000000| PB 0x0000000628000000| Untracked | 0 +| 113|0x0000000628400000, 0x0000000628400000, 0x0000000628800000| 0%| F| |TAMS 0x0000000628400000| PB 0x0000000628400000| Untracked | 0 +| 114|0x0000000628800000, 0x0000000628800000, 0x0000000628c00000| 0%| F| |TAMS 0x0000000628800000| PB 0x0000000628800000| Untracked | 0 +| 115|0x0000000628c00000, 0x0000000628c00000, 0x0000000629000000| 0%| F| |TAMS 0x0000000628c00000| PB 0x0000000628c00000| Untracked | 0 +| 116|0x0000000629000000, 0x0000000629000000, 0x0000000629400000| 0%| F| |TAMS 0x0000000629000000| PB 0x0000000629000000| Untracked | 0 +| 117|0x0000000629400000, 0x0000000629400000, 0x0000000629800000| 0%| F| |TAMS 0x0000000629400000| PB 0x0000000629400000| Untracked | 0 +| 118|0x0000000629800000, 0x0000000629bbcdc8, 0x0000000629c00000| 93%| S|CS|TAMS 0x0000000629800000| PB 0x0000000629800000| Complete | 0 +| 119|0x0000000629c00000, 0x0000000629c00000, 0x000000062a000000| 0%| F| |TAMS 0x0000000629c00000| PB 0x0000000629c00000| Untracked | 0 +| 120|0x000000062a000000, 0x000000062a000000, 0x000000062a400000| 0%| F| |TAMS 0x000000062a000000| PB 0x000000062a000000| Untracked | 0 +| 121|0x000000062a400000, 0x000000062a400000, 0x000000062a800000| 0%| F| |TAMS 0x000000062a400000| PB 0x000000062a400000| Untracked | 0 +| 122|0x000000062a800000, 0x000000062a800000, 0x000000062ac00000| 0%| F| |TAMS 0x000000062a800000| PB 0x000000062a800000| Untracked | 0 +| 123|0x000000062ac00000, 0x000000062aed08a0, 0x000000062b000000| 70%| E| |TAMS 0x000000062ac00000| PB 0x000000062ac00000| Complete | 0 +| 124|0x000000062b000000, 0x000000062b400000, 0x000000062b400000|100%| E|CS|TAMS 0x000000062b000000| PB 0x000000062b000000| Complete | 0 +|1999|0x00000007ffc00000, 0x00000007ffd1ec18, 0x0000000800000000| 28%| O| |TAMS 0x00000007ffc00000| PB 0x00000007ffc00000| Untracked | 0 + +Card table byte_map: [0x000073b981600000,0x000073b9825a0000] _byte_map_base: 0x000073b97e5a0000 + +Marking Bits: (CMBitMap*) 0x000073b97c059190 + Bits: [0x000073b95ca00000, 0x000073b964700000) + +Polling page: 0x000073b985b0b000 + +Metaspace: + +Usage: + Non-class: 9.67 MB used. + Class: 906.79 KB used. + Both: 10.55 MB used. + +Virtual space: + Non-class space: 64.00 MB reserved, 9.81 MB ( 15%) committed, 1 nodes. + Class space: 1.00 GB reserved, 1.00 MB ( <1%) committed, 1 nodes. + Both: 1.06 GB reserved, 10.81 MB ( <1%) committed. + +Chunk freelists: + Non-Class: 6.09 MB + Class: 14.91 MB + Both: 21.00 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. + - use_allocation_guard: 0. + + +Internal statistics: + +num_allocs_failed_limit: 0. +num_arena_births: 172. +num_arena_deaths: 0. +num_vsnodes_births: 2. +num_vsnodes_deaths: 0. +num_space_committed: 173. +num_space_uncommitted: 0. +num_chunks_returned_to_freelist: 0. +num_chunks_taken_from_freelist: 469. +num_chunk_merges: 0. +num_chunk_splits: 317. +num_chunks_enlarged: 231. +num_inconsistent_stats: 0. + +CodeHeap 'non-profiled nmethods': size=120032Kb used=505Kb max_used=505Kb free=119526Kb + bounds [0x000073b96c2c8000, 0x000073b96c538000, 0x000073b973800000] +CodeHeap 'profiled nmethods': size=120028Kb used=2160Kb max_used=2160Kb free=117867Kb + bounds [0x000073b964800000, 0x000073b964a70000, 0x000073b96bd37000] +CodeHeap 'non-nmethods': size=5700Kb used=2194Kb max_used=2212Kb free=3505Kb + bounds [0x000073b96bd37000, 0x000073b96bfa7000, 0x000073b96c2c8000] +CodeCache: size=245760Kb, used=4859Kb, max_used=4877Kb, free=240898Kb + total_blobs=2935, nmethods=1733, adapters=1109, full_count=0 +Compilation: enabled, stopped_count=0, restarted_count=0 + +Compilation events (20 events): +Event: 5.366 Thread 0x000073b97c1484b0 nmethod 1721 0x000073b964a18a88 code [0x000073b964a18be0, 0x000073b964a19068] +Event: 5.380 Thread 0x000073b97c1484b0 1722 3 org.lwjgl.vulkan.VkRect2D::nextent (10 bytes) +Event: 5.380 Thread 0x000073b97c1484b0 nmethod 1722 0x000073b964a19108 code [0x000073b964a19220, 0x000073b964a19340] +Event: 5.380 Thread 0x000073b97c1484b0 1723 3 org.lwjgl.vulkan.VkViewport::calloc (20 bytes) +Event: 5.380 Thread 0x000073b97c1484b0 nmethod 1723 0x000073b964a19408 code [0x000073b964a19540, 0x000073b964a197b0] +Event: 5.380 Thread 0x000073b97c1484b0 1724 3 org.lwjgl.vulkan.VkViewport$Buffer:: (11 bytes) +Event: 5.381 Thread 0x000073b97c1484b0 nmethod 1724 0x000073b964a19808 code [0x000073b964a19920, 0x000073b964a19a80] +Event: 5.382 Thread 0x000073b97c1484b0 1725 3 org.lwjgl.openal.ALC::check (16 bytes) +Event: 5.382 Thread 0x000073b97c1484b0 nmethod 1725 0x000073b964a19b08 code [0x000073b964a19c40, 0x000073b964a19e38] +Event: 5.385 Thread 0x000073b97c1484b0 1726 3 java.lang.StackStreamFactory$FrameBuffer::isEmpty (32 bytes) +Event: 5.385 Thread 0x000073b97c1484b0 nmethod 1726 0x000073b964a19e88 code [0x000073b964a19fa0, 0x000073b964a1a150] +Event: 5.385 Thread 0x000073b97c1484b0 1727 3 java.lang.invoke.Invokers::maybeCustomize (5 bytes) +Event: 5.385 Thread 0x000073b97c1484b0 nmethod 1727 0x000073b964a1a188 code [0x000073b964a1a2a0, 0x000073b964a1a448] +Event: 5.385 Thread 0x000073b97c1484b0 1728 3 java.lang.invoke.MethodHandle::maybeCustomize (38 bytes) +Event: 5.386 Thread 0x000073b97c1484b0 nmethod 1728 0x000073b964a1a488 code [0x000073b964a1a5e0, 0x000073b964a1aaa0] +Event: 5.434 Thread 0x000073b97c1484b0 1729 3 java.lang.StackWalker::hasOption (11 bytes) +Event: 5.434 Thread 0x000073b97c1484b0 nmethod 1729 0x000073b964a1ab08 code [0x000073b964a1ac20, 0x000073b964a1adf8] +Event: 5.434 Thread 0x000073b97c1484b0 1730 3 java.util.RegularEnumSet::contains (57 bytes) +Event: 5.434 Thread 0x000073b97c1484b0 nmethod 1730 0x000073b964a1ae08 code [0x000073b964a1af60, 0x000073b964a1b330] +Event: 5.435 Thread 0x000073b97c1484b0 1731 3 jdk.internal.org.objectweb.asm.Frame::pop (53 bytes) + +GC Heap History (2 events): +Event: 0.923 GC heap before +{Heap before GC invocations=0 (full 0): + garbage-first heap total reserved 8192000K, committed 516096K, used 25723K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 6 young (24576K), 0 survivors (0K) + Metaspace used 9080K, committed 9280K, reserved 1114112K + class space used 793K, committed 896K, reserved 1048576K +} +Event: 0.925 GC heap after +{Heap after GC invocations=1 (full 0): + garbage-first heap total reserved 8192000K, committed 516096K, used 4974K [0x000000060c000000, 0x0000000800000000) + region size 4096K, 1 young (4096K), 1 survivors (4096K) + Metaspace used 9080K, committed 9280K, reserved 1114112K + class space used 793K, committed 896K, reserved 1048576K +} + +Dll operation events (10 events): +Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +Event: 0.025 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +Event: 0.027 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +Event: 0.075 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +Event: 0.123 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +Event: 0.128 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +Event: 0.359 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +Event: 0.362 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so + +Deoptimization events (20 events): +Event: 0.925 Thread 0x000073b97c137930 Uncommon trap: trap_request=0xffffff45 fr.pc=0x000073b96c3151b4 relative=0x00000000000001b4 +Event: 0.925 Thread 0x000073b97c137930 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000073b96c3151b4 method=java.util.concurrent.locks.ReentrantLock$NonfairSync.initialTryLock()Z @ 25 c2 +Event: 0.925 Thread 0x000073b97c137930 DEOPT PACKING pc=0x000073b96c3151b4 sp=0x000073b980714790 +Event: 0.925 Thread 0x000073b97c137930 DEOPT UNPACKING pc=0x000073b96bd8abf9 sp=0x000073b980714730 mode 2 +Event: 1.006 Thread 0x000073b97c5f94d0 Uncommon trap: trap_request=0xffffff6e fr.pc=0x000073b96c3213a8 relative=0x0000000000000588 +Event: 1.006 Thread 0x000073b97c5f94d0 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x000073b96c3213a8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 +Event: 1.006 Thread 0x000073b97c5f94d0 DEOPT PACKING pc=0x000073b96c3213a8 sp=0x000073b95c1fd3e0 +Event: 1.006 Thread 0x000073b97c5f94d0 DEOPT UNPACKING pc=0x000073b96bd8abf9 sp=0x000073b95c1fd2d8 mode 2 +Event: 1.041 Thread 0x000073b97c5f94d0 DEOPT PACKING pc=0x000073b9649d269f sp=0x000073b95c1fd100 +Event: 1.041 Thread 0x000073b97c5f94d0 DEOPT UNPACKING pc=0x000073b96bd8b30f sp=0x000073b95c1fc540 mode 0 +Event: 1.043 Thread 0x000073b97c5f94d0 DEOPT PACKING pc=0x000073b9648b03d4 sp=0x000073b95c1fd0d0 +Event: 1.043 Thread 0x000073b97c5f94d0 DEOPT UNPACKING pc=0x000073b96bd8b30f sp=0x000073b95c1fc588 mode 0 +Event: 1.173 Thread 0x000073b97c5f94d0 Uncommon trap: trap_request=0xffffff6e fr.pc=0x000073b96c320a38 relative=0x0000000000000538 +Event: 1.173 Thread 0x000073b97c5f94d0 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x000073b96c320a38 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 +Event: 1.173 Thread 0x000073b97c5f94d0 DEOPT PACKING pc=0x000073b96c320a38 sp=0x000073b95c1fde60 +Event: 1.173 Thread 0x000073b97c5f94d0 DEOPT UNPACKING pc=0x000073b96bd8abf9 sp=0x000073b95c1fddd0 mode 2 +Event: 3.411 Thread 0x000073b97c5f94d0 Uncommon trap: trap_request=0xffffff5c fr.pc=0x000073b96c343558 relative=0x0000000000000058 +Event: 3.411 Thread 0x000073b97c5f94d0 Uncommon trap: reason=speculate_null_check action=make_not_entrant pc=0x000073b96c343558 method=sun.misc.Unsafe.putLong(Ljava/lang/Object;JJ)V @ 10 c2 +Event: 3.411 Thread 0x000073b97c5f94d0 DEOPT PACKING pc=0x000073b96c343558 sp=0x000073b95c1fe2e0 +Event: 3.411 Thread 0x000073b97c5f94d0 DEOPT UNPACKING pc=0x000073b96bd8abf9 sp=0x000073b95c1fe278 mode 2 + +Classes loaded (20 events): +Event: 0.695 Loading class java/awt/ImageCapabilities +Event: 0.695 Loading class java/awt/ImageCapabilities done +Event: 0.695 Loading class java/awt/Image$1 +Event: 0.695 Loading class sun/awt/image/SurfaceManager$ImageAccessor +Event: 0.695 Loading class sun/awt/image/SurfaceManager$ImageAccessor done +Event: 0.695 Loading class java/awt/Image$1 done +Event: 0.695 Loading class sun/awt/image/SurfaceManager +Event: 0.695 Loading class sun/awt/image/SurfaceManager done +Event: 0.695 Loading class java/awt/image/BufferedImage$1 +Event: 0.696 Loading class java/awt/image/BufferedImage$1 done +Event: 0.696 Loading class sun/awt/image/IntegerComponentRaster +Event: 0.696 Loading class sun/awt/image/IntegerComponentRaster done +Event: 0.696 Loading class java/awt/image/IndexColorModel +Event: 0.696 Loading class java/awt/image/IndexColorModel done +Event: 0.696 Loading class sun/awt/image/ShortComponentRaster +Event: 0.696 Loading class sun/awt/image/ShortComponentRaster done +Event: 0.778 Loading class java/util/function/LongFunction +Event: 0.778 Loading class java/util/function/LongFunction done +Event: 1.162 Loading class java/lang/invoke/MethodHandle$1 +Event: 1.162 Loading class java/lang/invoke/MethodHandle$1 done + +Classes unloaded (0 events): +No events + +Classes redefined (0 events): +No events + +Internal exceptions (20 events): +Event: 0.161 Thread 0x000073b97c02d0f0 Exception (0x000000062af991e0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.186 Thread 0x000073b97c02d0f0 Exception (0x000000062a875510) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.186 Thread 0x000073b97c02d0f0 Exception (0x000000062a878a60) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] +Event: 0.208 Thread 0x000073b97c02d0f0 Exception (0x000000062a970318) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.218 Thread 0x000073b97c02d0f0 Exception (0x000000062a9c7df8) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 0.227 Thread 0x000073b97c02d0f0 Exception (0x000000062aa31e20) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.228 Thread 0x000073b97c02d0f0 Exception (0x000000062aa3fc38) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.630 Thread 0x000073b97c5f94d0 Exception (0x000000062a7bc610) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.679 Thread 0x000073b97c5f94d0 Exception (0x000000062a23d088) +thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] +Event: 0.680 Thread 0x000073b97c5f94d0 Exception (0x000000062a243060) +thrown [open/src/hotspot/share/prims/jni.cpp, line 520] +Event: 0.684 Thread 0x000073b97c5f94d0 Exception (0x000000062a26d9f8) +thrown [open/src/hotspot/share/prims/jni.cpp, line 520] +Event: 0.775 Thread 0x000073b97c5f94d0 Exception (0x0000000629ebdf58) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.775 Thread 0x000073b97c5f94d0 Exception (0x0000000629ec37a0) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.778 Thread 0x000073b97c5f94d0 Exception (0x0000000629edb8a8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.780 Thread 0x000073b97c5f94d0 Exception (0x0000000629eec778) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.796 Thread 0x000073b97c5f94d0 Exception (0x0000000629f51e28) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.802 Thread 0x000073b97c5f94d0 Exception (0x0000000629fd4668) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.934 Thread 0x000073b97c5f94d0 Exception (0x000000062b05a2d8) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 0.941 Thread 0x000073b97c5f94d0 Exception (0x000000062b114760) +thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] +Event: 5.382 Thread 0x000073b8ac5a8970 Exception (0x000000062ae50888) +thrown [open/src/hotspot/share/prims/jvm.cpp, line 3093] + +VM Operations (14 events): +Event: 0.108 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.108 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.115 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.115 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.124 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.124 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.133 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.133 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.642 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.642 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.676 Executing VM operation: HandshakeAllThreads (Deoptimize) +Event: 0.676 Executing VM operation: HandshakeAllThreads (Deoptimize) done +Event: 0.923 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) +Event: 0.925 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done + +Memory protections (17 events): +Event: 0.001 Protecting memory [0x000073b984100000,0x000073b984104000] with protection modes 0 +Event: 0.015 Protecting memory [0x000073b980616000,0x000073b98061a000] with protection modes 0 +Event: 0.015 Protecting memory [0x000073b980516000,0x000073b98051a000] with protection modes 0 +Event: 0.016 Protecting memory [0x000073b980416000,0x000073b98041a000] with protection modes 0 +Event: 0.016 Protecting memory [0x000073b980316000,0x000073b98031a000] with protection modes 0 +Event: 0.016 Protecting memory [0x000073b980216000,0x000073b98021a000] with protection modes 0 +Event: 0.016 Protecting memory [0x000073b980116000,0x000073b98011a000] with protection modes 0 +Event: 0.016 Protecting memory [0x000073b980016000,0x000073b98001a000] with protection modes 0 +Event: 0.022 Protecting memory [0x000073b95c900000,0x000073b95c904000] with protection modes 0 +Event: 0.023 Protecting memory [0x000073b95c800000,0x000073b95c804000] with protection modes 0 +Event: 0.054 Protecting memory [0x000073b95c700000,0x000073b95c704000] with protection modes 0 +Event: 0.233 Protecting memory [0x000073b95c100000,0x000073b95c104000] with protection modes 0 +Event: 0.233 Protecting memory [0x000073b984100000,0x000073b984104000] with protection modes 0 +Event: 0.649 Protecting memory [0x000073b95c700000,0x000073b95c704000] with protection modes 0 +Event: 0.656 Protecting memory [0x000073b93f285000,0x000073b93f289000] with protection modes 0 +Event: 0.692 Protecting memory [0x000073b93f185000,0x000073b93f189000] with protection modes 0 +Event: 1.178 Protecting memory [0x000073b93f285000,0x000073b93f289000] with protection modes 0 + +Nmethod flushes (0 events): +No events + +Events (20 events): +Event: 0.015 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c13a6b0 +Event: 0.016 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c13bcf0 +Event: 0.016 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c13d290 +Event: 0.016 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c13edb0 +Event: 0.016 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c1484b0 +Event: 0.022 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c1551c0 +Event: 0.023 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c157ca0 +Event: 0.054 Thread 0x000073b97c13edb0 Thread added: 0x000073b8c80d9290 +Event: 0.233 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c5f94d0 +Event: 0.233 Thread 0x000073b97c02d0f0 Thread exited: 0x000073b97c02d0f0 +Event: 0.233 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c02d0f0 +Event: 0.631 Thread 0x000073b8c80d9290 Thread exited: 0x000073b8c80d9290 +Event: 0.648 Thread 0x000073b97c5f94d0 Thread added: 0x000073b8ac5a8970 +Event: 0.656 Thread 0x000073b97c1484b0 Thread added: 0x000073b8c442d840 +Event: 0.692 Thread 0x000073b97c5f94d0 Thread added: 0x000073b8ac760140 +Event: 0.922 Thread 0x000073b8c442d840 Thread exited: 0x000073b8c442d840 +Event: 1.178 Thread 0x000073b97c1484b0 Thread added: 0x000073b8c4466400 +Event: 1.378 Thread 0x000073b8c4466400 Thread exited: 0x000073b8c4466400 +Event: 5.382 Thread 0x000073b8ac5a8970 Thread exited: 0x000073b8ac5a8970 +Event: 5.435 Thread 0x000073b97c5f94d0 Thread exited: 0x000073b97c5f94d0 + + +Dynamic libraries: +60c000000-62b400000 rw-p 00000000 00:00 0 +62b400000-7ffc00000 ---p 00000000 00:00 0 +7ffc00000-7ffd1f000 rw-p 00dc0000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa +7ffd1f000-800000000 rw-p 00000000 00:00 0 +5ac2ec579000-5ac2ec57a000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +5ac2ec57b000-5ac2ec57c000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +5ac2ec57c000-5ac2ec57d000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java +5ac30caa6000-5ac30caef000 rw-p 00000000 00:00 0 [heap] +73b82c000000-73b82c021000 rw-p 00000000 00:00 0 +73b82c021000-73b830000000 ---p 00000000 00:00 0 +73b830000000-73b830021000 rw-p 00000000 00:00 0 +73b830021000-73b834000000 ---p 00000000 00:00 0 +73b838000000-73b838021000 rw-p 00000000 00:00 0 +73b838021000-73b83c000000 ---p 00000000 00:00 0 +73b83c000000-73b83c021000 rw-p 00000000 00:00 0 +73b83c021000-73b840000000 ---p 00000000 00:00 0 +73b844000000-73b844021000 rw-p 00000000 00:00 0 +73b844021000-73b848000000 ---p 00000000 00:00 0 +73b848000000-73b848021000 rw-p 00000000 00:00 0 +73b848021000-73b84c000000 ---p 00000000 00:00 0 +73b850000000-73b850021000 rw-p 00000000 00:00 0 +73b850021000-73b854000000 ---p 00000000 00:00 0 +73b854000000-73b854021000 rw-p 00000000 00:00 0 +73b854021000-73b858000000 ---p 00000000 00:00 0 +73b85c000000-73b85c021000 rw-p 00000000 00:00 0 +73b85c021000-73b860000000 ---p 00000000 00:00 0 +73b860000000-73b860021000 rw-p 00000000 00:00 0 +73b860021000-73b864000000 ---p 00000000 00:00 0 +73b868000000-73b868021000 rw-p 00000000 00:00 0 +73b868021000-73b86c000000 ---p 00000000 00:00 0 +73b86c000000-73b86c021000 rw-p 00000000 00:00 0 +73b86c021000-73b870000000 ---p 00000000 00:00 0 +73b874000000-73b874021000 rw-p 00000000 00:00 0 +73b874021000-73b878000000 ---p 00000000 00:00 0 +73b878000000-73b878021000 rw-p 00000000 00:00 0 +73b878021000-73b87c000000 ---p 00000000 00:00 0 +73b880000000-73b880054000 rw-p 00000000 00:00 0 +73b880054000-73b884000000 ---p 00000000 00:00 0 +73b884000000-73b884021000 rw-p 00000000 00:00 0 +73b884021000-73b888000000 ---p 00000000 00:00 0 +73b88c000000-73b88c0c8000 rw-p 00000000 00:00 0 +73b88c0c8000-73b890000000 ---p 00000000 00:00 0 +73b890000000-73b890021000 rw-p 00000000 00:00 0 +73b890021000-73b894000000 ---p 00000000 00:00 0 +73b898000000-73b898021000 rw-p 00000000 00:00 0 +73b898021000-73b89c000000 ---p 00000000 00:00 0 +73b89d000000-73b8a3712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +73b8a3712000-73b8a3f30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +73b8a3f30000-73b8a3f76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 +73b8a3f76000-73b8a3ff2000 rw-p 00000000 00:00 0 +73b8a4000000-73b8a4021000 rw-p 00000000 00:00 0 +73b8a4021000-73b8a8000000 ---p 00000000 00:00 0 +73b8ac000000-73b8af132000 rw-p 00000000 00:00 0 +73b8af132000-73b8b0000000 ---p 00000000 00:00 0 +73b8b0000000-73b8b027e000 rw-p 00000000 00:00 0 +73b8b027e000-73b8b4000000 ---p 00000000 00:00 0 +73b8b8000000-73b8b8021000 rw-p 00000000 00:00 0 +73b8b8021000-73b8bc000000 ---p 00000000 00:00 0 +73b8bc000000-73b8bc021000 rw-p 00000000 00:00 0 +73b8bc021000-73b8c0000000 ---p 00000000 00:00 0 +73b8c2e00000-73b8c2f25000 r--p 00000000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +73b8c2f25000-73b8c33e5000 r-xp 00125000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +73b8c33e5000-73b8c3519000 r--p 005e5000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +73b8c3519000-73b8c351a000 ---p 00719000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +73b8c351a000-73b8c357d000 r--p 00719000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +73b8c357d000-73b8c3587000 rw-p 0077c000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so +73b8c3587000-73b8c3598000 rw-p 00000000 00:00 0 +73b8c3600000-73b8c3601000 ---p 00000000 00:00 0 +73b8c3601000-73b8c3e01000 rw-p 00000000 00:00 0 +73b8c4000000-73b8c4481000 rw-p 00000000 00:00 0 +73b8c4481000-73b8c8000000 ---p 00000000 00:00 0 +73b8c8000000-73b8c8353000 rw-p 00000000 00:00 0 +73b8c8353000-73b8cc000000 ---p 00000000 00:00 0 +73b8cc400000-73b8cc401000 ---p 00000000 00:00 0 +73b8cc401000-73b8ccc01000 rw-p 00000000 00:00 0 +73b8cce00000-73b8cce01000 ---p 00000000 00:00 0 +73b8cce01000-73b8cd601000 rw-p 00000000 00:00 0 +73b8cd800000-73b8cd801000 ---p 00000000 00:00 0 +73b8cd801000-73b8ce001000 rw-p 00000000 00:00 0 +73b8ce200000-73b8ce201000 ---p 00000000 00:00 0 +73b8ce201000-73b8cea01000 rw-p 00000000 00:00 0 +73b8cec00000-73b8cec01000 ---p 00000000 00:00 0 +73b8cec01000-73b8cf401000 rw-p 00000000 00:00 0 +73b8cf600000-73b8cf62f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +73b8cf62f000-73b8cfd02000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +73b8cfd02000-73b8cfe24000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +73b8cfe24000-73b8cfe35000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +73b8cfe35000-73b8cfeb3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 +73b8cfeb3000-73b8cfec7000 rw-p 00000000 00:00 0 +73b8d0000000-73b8d0021000 rw-p 00000000 00:00 0 +73b8d0021000-73b8d4000000 ---p 00000000 00:00 0 +73b8d4000000-73b8d4021000 rw-p 00000000 00:00 0 +73b8d4021000-73b8d8000000 ---p 00000000 00:00 0 +73b8d8000000-73b8d8200000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8d8200000-73b8d8ef5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +73b8d8ef5000-73b8d98d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +73b8d98d8000-73b8d9ce9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +73b8d9ce9000-73b8da16b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +73b8da16b000-73b8da173000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so +73b8da173000-73b8da17e000 rw-p 00000000 00:00 0 +73b8da200000-73b8da201000 ---p 00000000 00:00 0 +73b8da201000-73b8daa01000 rw-p 00000000 00:00 0 +73b8dac00000-73b8dac01000 ---p 00000000 00:00 0 +73b8dac01000-73b8db401000 rw-p 00000000 00:00 0 +73b8db600000-73b8db601000 ---p 00000000 00:00 0 +73b8db601000-73b8dbe01000 rw-p 00000000 00:00 0 +73b8dc000000-73b8dc021000 rw-p 00000000 00:00 0 +73b8dc021000-73b8e0000000 ---p 00000000 00:00 0 +73b8e0000000-73b8e0021000 rw-p 00000000 00:00 0 +73b8e0021000-73b8e4000000 ---p 00000000 00:00 0 +73b8e41fd000-73b8e42fd000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8e42fd000-73b8e42fe000 ---p 00000000 00:00 0 +73b8e42fe000-73b8e43fe000 rw-p 00000000 00:00 0 +73b8e43fe000-73b8e43ff000 ---p 00000000 00:00 0 +73b8e43ff000-73b8e44ff000 rw-p 00000000 00:00 0 +73b8e44ff000-73b8e4500000 ---p 00000000 00:00 0 +73b8e4500000-73b8e4600000 rw-p 00000000 00:00 0 +73b8e4600000-73b8e4601000 ---p 00000000 00:00 0 +73b8e4601000-73b8e4e01000 rw-p 00000000 00:00 0 +73b8e4eff000-73b8e4f00000 ---p 00000000 00:00 0 +73b8e4f00000-73b8e5000000 rw-p 00000000 00:00 0 +73b8e5000000-73b8e5001000 ---p 00000000 00:00 0 +73b8e5001000-73b8e5801000 rw-p 00000000 00:00 0 +73b8e58ff000-73b8e5900000 ---p 00000000 00:00 0 +73b8e5900000-73b8e5a00000 rw-p 00000000 00:00 0 +73b8e5a00000-73b8e5a01000 ---p 00000000 00:00 0 +73b8e5a01000-73b8e6201000 rw-p 00000000 00:00 0 +73b8e623f000-73b8e62bf000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8e62bf000-73b8e62ff000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8e62ff000-73b8e6300000 ---p 00000000 00:00 0 +73b8e6300000-73b8e6400000 rw-p 00000000 00:00 0 +73b8e6400000-73b8e648d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +73b8e648d000-73b8e6bf5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +73b8e6bf5000-73b8e7482000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +73b8e7482000-73b8e74c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +73b8e74c4000-73b8e74c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so +73b8e74c7000-73b8e74cd000 rw-p 00000000 00:00 0 +73b8e74ff000-73b8e7500000 ---p 00000000 00:00 0 +73b8e7500000-73b8e7600000 rw-p 00000000 00:00 0 +73b8e7600000-73b8e765b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +73b8e765b000-73b8e79d9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +73b8e79d9000-73b8e7dd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +73b8e7dd5000-73b8e7e10000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +73b8e7e10000-73b8e7e15000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so +73b8e7e15000-73b8e7e40000 rw-p 00000000 00:00 0 +73b8e7e60000-73b8e7ea0000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8e7ea0000-73b8e7ec0000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8e7ec0000-73b8e7f00000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8e7f00000-73b8e8000000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8e8000000-73b8e8021000 rw-p 00000000 00:00 0 +73b8e8021000-73b8ec000000 ---p 00000000 00:00 0 +73b8ec000000-73b8ec021000 rw-p 00000000 00:00 0 +73b8ec021000-73b8f0000000 ---p 00000000 00:00 0 +73b8f0000000-73b8f0200000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f0200000-73b8f0222000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +73b8f0222000-73b8f0421000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +73b8f0421000-73b8f0429000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +73b8f0429000-73b8f042a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 +73b8f042a000-73b8f042b000 rw-p 00000000 00:00 0 +73b8f043b000-73b8f04bb000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f04bb000-73b8f05bb000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f05bb000-73b8f0800000 rw-s 00000000 00:01 2055 /memfd:/.nvidia_drv.XXXXXX (deleted) +73b8f0800000-73b8f086e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +73b8f086e000-73b8f0dd5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +73b8f0dd5000-73b8f14e8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +73b8f14e8000-73b8f14e9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +73b8f14e9000-73b8f1526000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +73b8f1526000-73b8f1529000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so +73b8f1529000-73b8f152b000 rw-p 00000000 00:00 0 +73b8f152d000-73b8f1540000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f1540000-73b8f1560000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f1560000-73b8f15a0000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f15c0000-73b8f1600000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f1600000-73b8f17c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +73b8f17c4000-73b8f34c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +73b8f34c4000-73b8f3b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +73b8f3b39000-73b8f3b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +73b8f3b3a000-73b8f3d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +73b8f3d1a000-73b8f3d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 +73b8f3d93000-73b8f3e08000 rw-p 00000000 00:00 0 +73b8f3e1a000-73b8f3e2d000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f3e4d000-73b8f3e60000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f3e60000-73b8f3ea0000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f3ea0000-73b8f3ec0000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f3ec0000-73b8f3f00000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f3f00000-73b8f4000000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8f4000000-73b8f43e0000 rw-p 00000000 00:00 0 +73b8f43e0000-73b8f4400000 ---p 00000000 00:00 0 +73b8f4400000-73b8f49f0000 rw-p 00000000 00:00 0 +73b8f49f0000-73b8f8000000 ---p 00000000 00:00 0 +73b8f8000000-73b8f8021000 rw-p 00000000 00:00 0 +73b8f8021000-73b8fc000000 ---p 00000000 00:00 0 +73b8fc02d000-73b8fc040000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8fc040000-73b8fc080000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8fc080000-73b8fc100000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8fc100000-73b8fc200000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8fc200000-73b8fc201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +73b8fc201000-73b8fc202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +73b8fc202000-73b8fde1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +73b8fde1c000-73b8fde1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +73b8fde1d000-73b8fde1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 +73b8fde2d000-73b8fde4d000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8fde4d000-73b8fdecd000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8fdecd000-73b8fdee0000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8fdee0000-73b8fdf20000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8fdf20000-73b8fdf40000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8fdf40000-73b8fdf80000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b8fdf80000-73b8fe000000 rw-s 00000000 00:06 964 /dev/nvidia0 +73b8fe000000-73b8fed91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa +73b8fed91000-73b8ff000000 ---p 00000000 00:00 0 +73b8ff000000-73b8ff030000 rw-p 00000000 00:00 0 +73b8ff030000-73b8ff0b0000 rw-p 00000000 00:00 0 +73b8ff0b0000-73b8ff0e0000 rw-p 00000000 00:00 0 +73b8ff0e0000-73b8ff100000 ---p 00000000 00:00 0 +73b8ff100000-73b8ff120000 rw-p 00000000 00:00 0 +73b8ff120000-73b93f000000 ---p 00000000 00:00 0 +73b93f004000-73b93f044000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b93f044000-73b93f185000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index +73b93f185000-73b93f189000 ---p 00000000 00:00 0 +73b93f189000-73b93f285000 rw-p 00000000 00:00 0 +73b93f285000-73b93f289000 ---p 00000000 00:00 0 +73b93f289000-73b93f385000 rw-p 00000000 00:00 0 +73b93f400000-73b93f493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +73b93f493000-73b93f8e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +73b93f8e6000-73b93fdfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +73b93fdfc000-73b93fe34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +73b93fe34000-73b93fe44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so +73b93fe44000-73b93fe49000 rw-p 00000000 00:00 0 +73b93fe58000-73b93fe78000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b93fe78000-73b93fe98000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b93fe98000-73b93fe9a000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +73b93fe9a000-73b93fea3000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +73b93fea3000-73b93fea6000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +73b93fea6000-73b93fea7000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +73b93fea7000-73b93fea8000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +73b93fea8000-73b93fea9000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so +73b93fea9000-73b93feab000 rw-p 00000000 00:00 0 +73b93feab000-73b93feaf000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +73b93feaf000-73b93fecb000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +73b93fecb000-73b93fed1000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +73b93fed1000-73b93fed2000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +73b93fed2000-73b93fed4000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +73b93fed4000-73b93fed5000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so +73b93fed5000-73b93fedf000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +73b93fedf000-73b93fee9000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +73b93fee9000-73b93fef0000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +73b93fef0000-73b93fef9000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +73b93fef9000-73b93fefa000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so +73b93fefa000-73b93ff06000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +73b93ff06000-73b93ff26000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +73b93ff26000-73b93ff32000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +73b93ff32000-73b93ff3c000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +73b93ff3c000-73b93ff3d000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so +73b93ff3d000-73b93ff3f000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +73b93ff3f000-73b93ffaa000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +73b93ffaa000-73b93ffd2000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +73b93ffd2000-73b93ffd3000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +73b93ffd3000-73b93ffd4000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 +73b93ffd4000-73b93ffda000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +73b93ffda000-73b93fff4000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +73b93fff4000-73b93fffb000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +73b93fffb000-73b93fffc000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +73b93fffc000-73b93fffd000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +73b93fffd000-73b93fffe000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 +73b93fffe000-73b940000000 rw-p 00000000 00:00 0 +73b940000000-73b940021000 rw-p 00000000 00:00 0 +73b940021000-73b944000000 ---p 00000000 00:00 0 +73b944000000-73b944021000 rw-p 00000000 00:00 0 +73b944021000-73b948000000 ---p 00000000 00:00 0 +73b948005000-73b948006000 rw-s 00000000 00:06 964 /dev/nvidia0 +73b948006000-73b94800a000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b94800a000-73b94800b000 rw-s 00000000 00:06 964 /dev/nvidia0 +73b94800b000-73b94800f000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +73b94800f000-73b94801f000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +73b94801f000-73b948022000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +73b948022000-73b948023000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +73b948023000-73b948024000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so +73b948024000-73b948037000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +73b948037000-73b948056000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +73b948056000-73b948063000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +73b948063000-73b948073000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +73b948073000-73b948074000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so +73b948074000-73b94807f000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +73b94807f000-73b9480ad000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +73b9480ad000-73b9480bf000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +73b9480bf000-73b9480c0000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +73b9480c0000-73b9480c1000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +73b9480c1000-73b9480c2000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 +73b9480c2000-73b9480d1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +73b9480d1000-73b9481b7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +73b9481b7000-73b9481f5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +73b9481f5000-73b9481f6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +73b9481f6000-73b9481f9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +73b9481f9000-73b9481ff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 +73b9481ff000-73b948200000 rw-p 00000000 00:00 0 +73b948200000-73b948216000 r--p 00000000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +73b948216000-73b948306000 r-xp 00016000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +73b948306000-73b948379000 r--p 00106000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +73b948379000-73b948380000 r--p 00178000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +73b948380000-73b948387000 rw-p 0017f000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so +73b948387000-73b948402000 rw-p 00000000 00:00 0 +73b948402000-73b948404000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b948404000-73b948405000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b948405000-73b94846b000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +73b94846b000-73b94855e000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +73b94855e000-73b9485ea000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +73b9485ea000-73b9485fd000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +73b9485fd000-73b9485fe000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 +73b9485fe000-73b948600000 rw-p 00000000 00:00 0 +73b948600000-73b94869a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +73b94869a000-73b9487ab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +73b9487ab000-73b94881a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +73b94881a000-73b94881b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +73b94881b000-73b948826000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +73b948826000-73b948829000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 +73b948829000-73b94882c000 rw-p 00000000 00:00 0 +73b94882c000-73b94882d000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b94882d000-73b948831000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b948831000-73b948835000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +73b948835000-73b94884b000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +73b94884b000-73b948855000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +73b948855000-73b948856000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +73b948856000-73b948857000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 +73b948857000-73b94886a000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +73b94886a000-73b9488e9000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +73b9488e9000-73b948914000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +73b948914000-73b948915000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +73b948915000-73b94891c000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +73b94891c000-73b94891d000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 +73b94891d000-73b94891e000 rw-p 00000000 00:00 0 +73b94891e000-73b948951000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +73b948951000-73b9489b4000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +73b9489b4000-73b9489d3000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +73b9489d3000-73b9489fe000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +73b9489fe000-73b9489ff000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 +73b9489ff000-73b949322000 rw-p 00000000 00:00 0 +73b949322000-73b949323000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b949323000-73b949325000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +73b949325000-73b94933e000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +73b94933e000-73b949340000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +73b949340000-73b949341000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +73b949341000-73b949342000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +73b949342000-73b949343000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 +73b949343000-73b949344000 rw-s 00044000 00:01 2055 /memfd:/.nvidia_drv.XXXXXX (deleted) +73b949344000-73b949345000 rw-s 00000000 00:06 964 /dev/nvidia0 +73b949345000-73b949347000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b949347000-73b94934b000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b94934b000-73b94934d000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b94934d000-73b94934f000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b94934f000-73b949353000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b949353000-73b949363000 rw-s 00000000 00:06 964 /dev/nvidia0 +73b949363000-73b949367000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +73b949367000-73b94937c000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +73b94937c000-73b949382000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +73b949382000-73b949383000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +73b949383000-73b949385000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +73b949385000-73b949386000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so +73b949386000-73b9493f6000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +73b9493f6000-73b9493f7000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +73b9493f7000-73b9493fc000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +73b9493fc000-73b9493fe000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so +73b9493fe000-73b949400000 rw-p 00000000 00:00 0 +73b949400000-73b949401000 ---p 00000000 00:00 0 +73b949401000-73b949c01000 rw-p 00000000 00:00 0 +73b949c01000-73b949c02000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b949c1e000-73b949c4d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +73b949c4d000-73b949da0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +73b949da0000-73b949df4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +73b949df4000-73b949df5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +73b949df5000-73b949dfe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +73b949dfe000-73b949dff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 +73b949dff000-73b949e00000 rw-p 00000000 00:00 0 +73b949e00000-73b94a041000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +73b94a041000-73b94a062000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +73b94a062000-73b94a200000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +73b94a200000-73b94ae00000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +73b94ae00000-73b94bcab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +73b94bcab000-73b94be10000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +73b94be10000-73b94be7e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 +73b94be7e000-73b94be9c000 rw-p 00000000 00:00 0 +73b94be9c000-73b94be9d000 rw-s 00000000 00:06 964 /dev/nvidia0 +73b94be9d000-73b94be9f000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +73b94be9f000-73b94bea7000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +73b94bea7000-73b94bea9000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +73b94bea9000-73b94beaa000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +73b94beaa000-73b94beab000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so +73b94beab000-73b94bead000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +73b94bead000-73b94beb5000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +73b94beb5000-73b94beb6000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +73b94beb6000-73b94beb7000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +73b94beb7000-73b94beb8000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +73b94beb8000-73b94beb9000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so +73b94beb9000-73b94bee8000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +73b94bee8000-73b94bfa4000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +73b94bfa4000-73b94bfef000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +73b94bfef000-73b94bffd000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +73b94bffd000-73b94bfff000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so +73b94bfff000-73b94c000000 rw-p 00000000 00:00 0 +73b94c000000-73b94c021000 rw-p 00000000 00:00 0 +73b94c021000-73b950000000 ---p 00000000 00:00 0 +73b950000000-73b950021000 rw-p 00000000 00:00 0 +73b950021000-73b954000000 ---p 00000000 00:00 0 +73b954000000-73b954004000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b954004000-73b954006000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b954006000-73b954008000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +73b954008000-73b95400b000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +73b95400b000-73b95400c000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +73b95400c000-73b95400d000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +73b95400d000-73b95400e000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 +73b95400e000-73b9540cf000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +73b9540cf000-73b9540d0000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +73b9540d0000-73b9540db000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so +73b9540db000-73b954100000 rw-p 00000000 00:00 0 +73b954100000-73b954103000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +73b954103000-73b954124000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +73b954124000-73b954130000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +73b954130000-73b954131000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +73b954131000-73b954132000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +73b954132000-73b954133000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 +73b954133000-73b954141000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +73b954141000-73b954152000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +73b954152000-73b954160000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +73b954160000-73b954164000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +73b954164000-73b954165000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 +73b954165000-73b95416d000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +73b95416d000-73b95418b000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +73b95418b000-73b954198000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +73b954198000-73b95419a000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +73b95419a000-73b95419b000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 +73b95419b000-73b95419f000 rw-p 00000000 00:00 0 +73b95419f000-73b9541a1000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +73b9541a1000-73b9541a8000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +73b9541a8000-73b9541a9000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +73b9541a9000-73b9541aa000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +73b9541aa000-73b9541ab000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +73b9541ab000-73b9541ac000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 +73b9541ac000-73b9541af000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +73b9541af000-73b9541c6000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +73b9541c6000-73b9541ca000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +73b9541ca000-73b9541cb000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +73b9541cb000-73b9541cc000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +73b9541cc000-73b9541d0000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +73b9541d0000-73b9541ef000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +73b9541ef000-73b9541f9000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +73b9541f9000-73b9541fa000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +73b9541fa000-73b9541fc000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +73b9541fc000-73b9541fd000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 +73b9541fd000-73b954202000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +73b954202000-73b95420d000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +73b95420d000-73b954211000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +73b954211000-73b954212000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +73b954212000-73b954213000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +73b954213000-73b954214000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 +73b954214000-73b954215000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +73b954215000-73b954216000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +73b954216000-73b954217000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +73b954217000-73b954218000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +73b954218000-73b954219000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 +73b954219000-73b95421c000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +73b95421c000-73b95421f000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +73b95421f000-73b954220000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +73b954220000-73b954221000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +73b954221000-73b954222000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +73b954222000-73b954223000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 +73b954223000-73b954226000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +73b954226000-73b954229000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +73b954229000-73b95422a000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +73b95422a000-73b95422b000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +73b95422b000-73b95422c000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +73b95422c000-73b95422d000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 +73b95422d000-73b954237000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +73b954237000-73b9542e9000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +73b9542e9000-73b9542fa000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +73b9542fa000-73b9542fb000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +73b9542fb000-73b9542fc000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 +73b9542fc000-73b95430c000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +73b95430c000-73b95436a000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +73b95436a000-73b954386000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +73b954386000-73b954387000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +73b954387000-73b95438d000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +73b95438d000-73b95438e000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 +73b95438e000-73b954396000 rw-p 00000000 00:00 0 +73b954396000-73b9543e7000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +73b9543e7000-73b954443000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +73b954443000-73b954478000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +73b954478000-73b954479000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +73b954479000-73b954499000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +73b954499000-73b9544b9000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +73b9544b9000-73b9544be000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 +73b9544be000-73b9544c0000 rw-p 00000000 00:00 0 +73b9544c0000-73b9544d9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +73b9544d9000-73b954565000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +73b954565000-73b9545fa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +73b9545fa000-73b9545fb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +73b9545fb000-73b9545fc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +73b9545fc000-73b954600000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 +73b954600000-73b955000000 rw-p 00000000 00:00 0 +73b955000000-73b955f06000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive +73b955f06000-73b955f07000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b955f07000-73b955f08000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +73b955f08000-73b955f09000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +73b955f09000-73b955f0a000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +73b955f0a000-73b955f0b000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +73b955f0b000-73b955f0c000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 +73b955f0c000-73b955f0d000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +73b955f0d000-73b955f0e000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +73b955f0e000-73b955f0f000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +73b955f0f000-73b955f10000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +73b955f10000-73b955f11000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 +73b955f11000-73b955f16000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +73b955f16000-73b955f1c000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +73b955f1c000-73b955f1f000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +73b955f1f000-73b955f21000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +73b955f21000-73b955f22000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 +73b955f22000-73b955f25000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +73b955f25000-73b955f39000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +73b955f39000-73b955f3d000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +73b955f3d000-73b955f3e000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +73b955f3e000-73b955f3f000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +73b955f3f000-73b955f40000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so +73b955f40000-73b955f43000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +73b955f43000-73b955f49000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +73b955f49000-73b955f4b000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +73b955f4b000-73b955f4c000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +73b955f4c000-73b955f4d000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 +73b955f4d000-73b955f4f000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +73b955f4f000-73b955f51000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +73b955f51000-73b955f52000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +73b955f52000-73b955f53000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +73b955f53000-73b955f54000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 +73b955f54000-73b955f5b000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +73b955f5b000-73b955f61000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +73b955f61000-73b955f64000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +73b955f64000-73b955f65000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +73b955f65000-73b955f66000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +73b955f66000-73b955f67000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 +73b955f67000-73b955f72000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +73b955f72000-73b955f7b000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +73b955f7b000-73b955f80000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +73b955f80000-73b955f81000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +73b955f81000-73b955f83000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +73b955f83000-73b955f84000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 +73b955f84000-73b955f8a000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +73b955f8a000-73b955fd4000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +73b955fd4000-73b955ffe000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +73b955ffe000-73b955fff000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +73b955fff000-73b956000000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 +73b956000000-73b958000000 rw-p 00000000 00:00 0 +73b958000000-73b958021000 rw-p 00000000 00:00 0 +73b958021000-73b95c000000 ---p 00000000 00:00 0 +73b95c000000-73b95c004000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b95c004000-73b95c005000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +73b95c005000-73b95c007000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +73b95c007000-73b95c008000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +73b95c008000-73b95c009000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +73b95c009000-73b95c00a000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 +73b95c00a000-73b95c00b000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +73b95c00b000-73b95c00c000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +73b95c00c000-73b95c00d000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +73b95c00d000-73b95c00e000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +73b95c00e000-73b95c00f000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 +73b95c01b000-73b95c01d000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +73b95c01d000-73b95c024000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +73b95c024000-73b95c026000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +73b95c026000-73b95c027000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +73b95c027000-73b95c028000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 +73b95c028000-73b95c02b000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +73b95c02b000-73b95c037000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +73b95c037000-73b95c03a000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +73b95c03a000-73b95c03b000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +73b95c03b000-73b95c03c000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 +73b95c03c000-73b95c040000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +73b95c040000-73b95c04b000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +73b95c04b000-73b95c04f000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +73b95c04f000-73b95c050000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +73b95c050000-73b95c051000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 +73b95c051000-73b95c055000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +73b95c055000-73b95c062000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +73b95c062000-73b95c065000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +73b95c065000-73b95c066000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +73b95c066000-73b95c067000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +73b95c067000-73b95c068000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 +73b95c068000-73b95c069000 rw-p 00000000 00:00 0 +73b95c069000-73b95c079000 r--p 00000000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +73b95c079000-73b95c09a000 r-xp 00010000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +73b95c09a000-73b95c0d6000 r--p 00031000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +73b95c0d6000-73b95c0da000 r--p 0006c000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +73b95c0da000-73b95c0dd000 rw-p 00070000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so +73b95c0dd000-73b95c100000 rw-p 00000000 00:00 0 +73b95c100000-73b95c104000 ---p 00000000 00:00 0 +73b95c104000-73b95c200000 rw-p 00000000 00:00 0 +73b95c200000-73b95c400000 rw-p 00000000 00:00 0 +73b95c400000-73b95c408000 r--p 00000000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +73b95c408000-73b95c460000 r-xp 00008000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +73b95c460000-73b95c471000 r--p 00060000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +73b95c471000-73b95c472000 ---p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +73b95c472000-73b95c478000 r--p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +73b95c478000-73b95c479000 rw-p 00077000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so +73b95c479000-73b95c683000 rw-p 00000000 00:00 0 +73b95c683000-73b95c684000 rw-s 00000000 00:06 964 /dev/nvidia0 +73b95c684000-73b95c6b0000 r--p 00000000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +73b95c6b0000-73b95c6e4000 r-xp 0002c000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +73b95c6e4000-73b95c6fe000 r--p 00060000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +73b95c6fe000-73b95c6ff000 r--p 00079000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +73b95c6ff000-73b95c700000 rw-p 0007a000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +73b95c700000-73b95c704000 ---p 00000000 00:00 0 +73b95c704000-73b95c800000 rw-p 00000000 00:00 0 +73b95c800000-73b95c804000 ---p 00000000 00:00 0 +73b95c804000-73b95c900000 rw-p 00000000 00:00 0 +73b95c900000-73b95c904000 ---p 00000000 00:00 0 +73b95c904000-73b95ca00000 rw-p 00000000 00:00 0 +73b95ca00000-73b95d1d0000 rw-p 00000000 00:00 0 +73b95d1d0000-73b9646f0000 ---p 00000000 00:00 0 +73b9646f0000-73b964700000 rw-p 00000000 00:00 0 +73b964700000-73b964701000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b964706000-73b964711000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +73b964711000-73b964725000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +73b964725000-73b96472e000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +73b96472e000-73b96472f000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +73b96472f000-73b964730000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 +73b964730000-73b9647fe000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +73b9647fe000-73b9647ff000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +73b9647ff000-73b964800000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so +73b964800000-73b964a70000 rwxp 00000000 00:00 0 +73b964a70000-73b96bd37000 ---p 00000000 00:00 0 +73b96bd37000-73b96bfa7000 rwxp 00000000 00:00 0 +73b96bfa7000-73b96c2c8000 ---p 00000000 00:00 0 +73b96c2c8000-73b96c538000 rwxp 00000000 00:00 0 +73b96c538000-73b973800000 ---p 00000000 00:00 0 +73b973800000-73b97bfb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules +73b97bfb5000-73b97bfb6000 rw-s 00000000 00:06 964 /dev/nvidia0 +73b97bfb6000-73b97bfb7000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b97bfbf000-73b97bffd000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +73b97bffd000-73b97bffe000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +73b97bffe000-73b97bfff000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +73b97bfff000-73b97c000000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so +73b97c000000-73b97c5fe000 rw-p 00000000 00:00 0 +73b97c5fe000-73b980000000 ---p 00000000 00:00 0 +73b980000000-73b980001000 rw-s 00000000 00:06 957 /dev/nvidiactl +73b980001000-73b980002000 r--s 00000000 00:06 957 /dev/nvidiactl +73b980016000-73b98001a000 ---p 00000000 00:00 0 +73b98001a000-73b980116000 rw-p 00000000 00:00 0 +73b980116000-73b98011a000 ---p 00000000 00:00 0 +73b98011a000-73b980216000 rw-p 00000000 00:00 0 +73b980216000-73b98021a000 ---p 00000000 00:00 0 +73b98021a000-73b980316000 rw-p 00000000 00:00 0 +73b980316000-73b98031a000 ---p 00000000 00:00 0 +73b98031a000-73b980416000 rw-p 00000000 00:00 0 +73b980416000-73b98041a000 ---p 00000000 00:00 0 +73b98041a000-73b980516000 rw-p 00000000 00:00 0 +73b980516000-73b98051a000 ---p 00000000 00:00 0 +73b98051a000-73b980616000 rw-p 00000000 00:00 0 +73b980616000-73b98061a000 ---p 00000000 00:00 0 +73b98061a000-73b980716000 rw-p 00000000 00:00 0 +73b980716000-73b980717000 ---p 00000000 00:00 0 +73b980717000-73b980817000 rw-p 00000000 00:00 0 +73b980817000-73b980818000 ---p 00000000 00:00 0 +73b980818000-73b980918000 rw-p 00000000 00:00 0 +73b980918000-73b9809f4000 rw-p 00000000 00:00 0 +73b9809f4000-73b9809f5000 ---p 00000000 00:00 0 +73b9809f5000-73b980af5000 rw-p 00000000 00:00 0 +73b980af5000-73b980af6000 ---p 00000000 00:00 0 +73b980af6000-73b980bf6000 rw-p 00000000 00:00 0 +73b980bf6000-73b9813fe000 rw-p 00000000 00:00 0 +73b9813fe000-73b9813ff000 ---p 00000000 00:00 0 +73b9813ff000-73b9814ff000 rw-p 00000000 00:00 0 +73b9814ff000-73b981500000 ---p 00000000 00:00 0 +73b981500000-73b981600000 rw-p 00000000 00:00 0 +73b981600000-73b9816fa000 rw-p 00000000 00:00 0 +73b9816fa000-73b98259e000 ---p 00000000 00:00 0 +73b98259e000-73b9825a0000 rw-p 00000000 00:00 0 +73b9825a4000-73b9825a6000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +73b9825a6000-73b9825ad000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +73b9825ad000-73b9825af000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +73b9825af000-73b9825b0000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +73b9825b0000-73b9825b1000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 +73b9825b1000-73b9825b3000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +73b9825b3000-73b9825b5000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +73b9825b5000-73b9825b7000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +73b9825b7000-73b9825b8000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +73b9825b8000-73b9825b9000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 +73b9825b9000-73b9825ba000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +73b9825ba000-73b9825bc000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +73b9825bc000-73b9825bd000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +73b9825bd000-73b9825be000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +73b9825be000-73b9825bf000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 +73b9825bf000-73b9826fa000 rw-p 00000000 00:00 0 +73b9826fa000-73b98359e000 ---p 00000000 00:00 0 +73b98359e000-73b9835a0000 rw-p 00000000 00:00 0 +73b9835a0000-73b9835a1000 ---p 00000000 00:00 0 +73b9835a1000-73b9836a1000 rw-p 00000000 00:00 0 +73b9836a1000-73b983f2f000 rw-p 00000000 00:00 0 +73b983f2f000-73b984015000 ---p 00000000 00:00 0 +73b984015000-73b98401a000 rw-p 00000000 00:00 0 +73b98401a000-73b984100000 ---p 00000000 00:00 0 +73b984100000-73b984104000 ---p 00000000 00:00 0 +73b984104000-73b984200000 rw-p 00000000 00:00 0 +73b984200000-73b985530000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +73b985530000-73b985600000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +73b985600000-73b98562e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so +73b98562e000-73b9856a4000 rw-p 00000000 00:00 0 +73b9856a4000-73b9856ab000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache +73b9856ab000-73b9856ac000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +73b9856ac000-73b9856af000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +73b9856af000-73b9856b0000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +73b9856b0000-73b9856b1000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +73b9856b1000-73b9856b2000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +73b9856b2000-73b9856b3000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so +73b9856b3000-73b9856b6000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +73b9856b6000-73b9856ba000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +73b9856ba000-73b9856bc000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +73b9856bc000-73b9856bd000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +73b9856bd000-73b9856be000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 +73b9856be000-73b9856bf000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +73b9856bf000-73b9856c1000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +73b9856c1000-73b9856c2000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +73b9856c2000-73b9856c3000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +73b9856c3000-73b9856c4000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so +73b9856c4000-73b9856d7000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +73b9856d7000-73b9856d8000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +73b9856d8000-73b9856d9000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +73b9856d9000-73b9856da000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so +73b9856da000-73b985719000 rw-p 00000000 00:00 0 +73b985719000-73b985727000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +73b985727000-73b9857a3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +73b9857a3000-73b9857fe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +73b9857fe000-73b9857ff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +73b9857ff000-73b985800000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 +73b985800000-73b985828000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +73b985828000-73b9859bd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +73b9859bd000-73b985a15000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +73b985a15000-73b985a16000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +73b985a16000-73b985a1a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +73b985a1a000-73b985a1c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 +73b985a1c000-73b985a29000 rw-p 00000000 00:00 0 +73b985a29000-73b985a2a000 r-xp 00000000 00:00 0 +73b985a2a000-73b985a2b000 rw-p 00000000 00:00 0 +73b985a2b000-73b985a2c000 r-xp 0005e000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so +73b985a2c000-73b985a2d000 rw-p 00000000 00:00 0 +73b985a2d000-73b985a38000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +73b985a38000-73b985a39000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +73b985a39000-73b985a3a000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +73b985a3a000-73b985a3b000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so +73b985a3b000-73b985a7a000 rw-p 00000000 00:00 0 +73b985a7a000-73b985a9a000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +73b985a9a000-73b985a9b000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +73b985a9b000-73b985a9c000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so +73b985a9c000-73b985a9d000 rw-p 00000000 00:00 0 +73b985a9d000-73b985abb000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +73b985abb000-73b985abd000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +73b985abd000-73b985abe000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so +73b985abe000-73b985abf000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +73b985abf000-73b985ac0000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +73b985ac0000-73b985ac1000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +73b985ac1000-73b985ac2000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +73b985ac2000-73b985ac3000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 +73b985ac3000-73b985ac7000 rw-p 00000000 00:00 0 +73b985ac7000-73b985ac8000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +73b985ac8000-73b985ac9000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +73b985ac9000-73b985aca000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +73b985aca000-73b985acb000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +73b985acb000-73b985acc000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 +73b985acc000-73b985acd000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +73b985acd000-73b985ace000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +73b985ace000-73b985acf000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +73b985acf000-73b985ad0000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +73b985ad0000-73b985ad1000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 +73b985ad1000-73b985ad3000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +73b985ad3000-73b985ae4000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +73b985ae4000-73b985aea000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +73b985aea000-73b985aeb000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +73b985aeb000-73b985aec000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +73b985aec000-73b985aed000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +73b985aed000-73b985af4000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +73b985af4000-73b985af5000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +73b985af5000-73b985af6000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +73b985af6000-73b985af7000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so +73b985af7000-73b985afc000 rw-p 00000000 00:00 0 +73b985afc000-73b985b03000 ---p 00000000 00:00 0 +73b985b03000-73b985b0b000 rw-s 00000000 103:03 4325447 /tmp/hsperfdata_codex/78128 +73b985b0b000-73b985b0c000 ---p 00000000 00:00 0 +73b985b0c000-73b985b0d000 r--p 00000000 00:00 0 +73b985b0d000-73b985b1c000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +73b985b1c000-73b985b1d000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +73b985b1d000-73b985b1e000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so +73b985b1e000-73b985b20000 rw-p 00000000 00:00 0 +73b985b20000-73b985b24000 r--p 00000000 00:00 0 [vvar] +73b985b24000-73b985b26000 r-xp 00000000 00:00 0 [vdso] +73b985b26000-73b985b28000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +73b985b28000-73b985b52000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +73b985b52000-73b985b5d000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +73b985b5d000-73b985b5e000 ---p 00000000 00:00 0 +73b985b5e000-73b985b60000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +73b985b60000-73b985b62000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +7ffee72d3000-7ffee72f6000 rw-p 00000000 00:00 0 [stack] +ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] +Total number of mappings: 796 + + +VM Arguments: +jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant +java_command: jme3test.vulkan.VulkanHelperTest +java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar +Launcher Type: SUN_STANDARD + +[Global flags] + intx CICompilerCount = 4 {product} {ergonomic} + uint ConcGCThreads = 2 {product} {ergonomic} + uint G1ConcRefinementThreads = 8 {product} {ergonomic} + size_t G1HeapRegionSize = 4194304 {product} {ergonomic} + size_t InitialHeapSize = 524288000 {product} {ergonomic} + size_t MarkStackSize = 4194304 {product} {ergonomic} + size_t MarkStackSizeMax = 536870912 {product} {ergonomic} + size_t MaxHeapSize = 8388608000 {product} {ergonomic} + size_t MaxNewSize = 5033164800 {product} {ergonomic} + size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} + size_t MinHeapSize = 8388608 {product} {ergonomic} + uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} + uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} + uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} + uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} + bool SegmentedCodeCache = true {product} {ergonomic} + size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} + bool UseCompressedOops = true {product lp64_product} {ergonomic} + bool UseG1GC = true {product} {ergonomic} + +Logging: +Log output configuration: + #0: stdout all=warning uptime,level,tags foldmultilines=false + #1: stderr all=off uptime,level,tags foldmultilines=false + +Environment Variables: +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin +USERNAME=codex +SHELL=/bin/bash +DISPLAY=:1 +LANG=en_US.UTF-8 + +Active Locale: +LC_ALL=en_US.UTF-8 +LC_COLLATE=en_US.UTF-8 +LC_CTYPE=en_US.UTF-8 +LC_MESSAGES=en_US.UTF-8 +LC_MONETARY=en_US.UTF-8 +LC_NUMERIC=en_US.UTF-8 +LC_TIME=en_US.UTF-8 + +Signal Handlers: + SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked + SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked + SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked + + +Periodic native trim disabled + +--------------- S Y S T E M --------------- + +OS: +DISTRIB_ID=Pop +DISTRIB_RELEASE=22.04 +DISTRIB_CODENAME=jammy +DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" +uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 +OS uptime: 0 days 14:29 hours +libc: glibc 2.35 NPTL 2.35 +rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095952k/4095952k +load average: 0.61 0.77 0.83 + +/proc/meminfo: +MemTotal: 32767632 kB +MemFree: 21158436 kB +MemAvailable: 24189976 kB +Buffers: 321172 kB +Cached: 4673028 kB +SwapCached: 0 kB +Active: 8033496 kB +Inactive: 2595692 kB +Active(anon): 5672072 kB +Inactive(anon): 0 kB +Active(file): 2361424 kB +Inactive(file): 2595692 kB +Unevictable: 15204 kB +Mlocked: 72 kB +SwapTotal: 20970996 kB +SwapFree: 20970996 kB +Zswap: 0 kB +Zswapped: 0 kB +Dirty: 28 kB +Writeback: 0 kB +AnonPages: 5650496 kB +Mapped: 1807064 kB +Shmem: 37084 kB +KReclaimable: 187708 kB +Slab: 366340 kB +SReclaimable: 187708 kB +SUnreclaim: 178632 kB +KernelStack: 20768 kB +PageTables: 48056 kB +SecPageTables: 0 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 37354812 kB +Committed_AS: 11214484 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 247428 kB +VmallocChunk: 0 kB +Percpu: 9120 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 6144 kB +ShmemPmdMapped: 0 kB +FileHugePages: 0 kB +FilePmdMapped: 0 kB +Unaccepted: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +Hugetlb: 0 kB +DirectMap4k: 800568 kB +DirectMap2M: 12732416 kB +DirectMap1G: 19922944 kB + +/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never +/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 +/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force +/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never + +Process Memory: +Virtual Size: 13041280K (peak: 13042084K) +Resident Set Size: 297012K (peak: 297276K) (anon: 154376K, file: 142636K, shmem: 0K) +Swapped out: 0K +C-Heap outstanding allocations: 68142K, retained: 32033K +glibc malloc tunables: (default) + +/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 +/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 +/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 +/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 + +container (cgroup) information: +container_type: cgroupv2 +cpu_cpuset_cpus: not supported +cpu_memory_nodes: not supported +active_processor_count: 8 +cpu_quota: not supported +cpu_period: not supported +cpu_shares: not supported +memory_limit_in_bytes: unlimited +memory_and_swap_limit_in_bytes: unlimited +memory_soft_limit_in_bytes: 0 +memory_usage_in_bytes: 5721300 k +memory_max_usage_in_bytes: not supported +rss_usage_in_bytes: 3396096 k +cache_usage_in_bytes: 2245204 k +memory_swap_current_in_bytes: 0 +memory_swap_max_limit_in_bytes: unlimited +maximum number of tasks: 38296 +current number of tasks: 306 + +Steal ticks since vm start: 0 +Steal ticks percentage since vm start: 0.000 + +CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c +CPU Model and flags from /proc/cpuinfo: +model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities + +Online cpus: 0-7 +Offline cpus: +BIOS frequency limitation: +Frequency switch latency (ns): 0 +Available cpu frequencies: +Current governor: powersave +Core performance/turbo boost: + +Memory: 4k page, physical 32767632k(24189976k free), swap 20970996k(20970996k free) +Page Sizes: 4k + +vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 + +END. diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 640b7ec879..f67eb54bb2 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -7,14 +7,18 @@ import com.jme3.shaderc.ShadercLoader; import com.jme3.system.AppSettings; import com.jme3.system.vulkan.LwjglVulkanContext; +import com.jme3.util.BufferUtils; import com.jme3.vulkan.*; import com.jme3.vulkan.Queue; +import com.jme3.vulkan.buffers.BufferArgs; +import com.jme3.vulkan.buffers.GpuBuffer; import org.lwjgl.PointerBuffer; import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.*; +import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.util.*; import java.util.logging.Level; @@ -37,6 +41,7 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda private RenderPass renderPass; private GraphicsPipeline pipeline; private CommandPool graphicsPool; + private GpuBuffer vertexBuffer, indexBuffer; private VulkanRenderManager renderer; private boolean swapchainResizeFlag = false; @@ -45,11 +50,18 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda private long debugMessenger = NULL; private final VkDebugUtilsMessengerCallbackEXT debugCallback = new VulkanDebugCallback(Level.SEVERE); + private final FloatBuffer vertexData = BufferUtils.createFloatBuffer( + -0.5f, -0.5f, 1f, 0f, 0f, + 0.5f, -0.5f, 0f, 1f, 0f, + 0.5f, 0.5f, 0f, 0f, 1f, + -0.5f, 0.5f, 1f, 1f, 1f); + private final IntBuffer indexData = BufferUtils.createIntBuffer(0, 1, 2, 2, 3, 0); + public static void main(String[] args) { VulkanHelperTest app = new VulkanHelperTest(); AppSettings settings = new AppSettings(true); - settings.setWidth(800); - settings.setHeight(800); + settings.setWidth(768); + settings.setHeight(768); settings.setRenderer("CUSTOM" + LwjglVulkanContext.class.getName()); app.setSettings(settings); app.setShowSettings(false); @@ -58,32 +70,52 @@ public static void main(String[] args) { @Override public void simpleInitApp() { + assetManager.registerLoader(ShadercLoader.class, "glsl"); deviceExtensions.add(KHRSwapchain.VK_KHR_SWAPCHAIN_EXTENSION_NAME); long window = ((LwjglVulkanContext)context).getWindowHandle(); + try (InstanceBuilder inst = new InstanceBuilder(VK13.VK_API_VERSION_1_3)) { + + // build instance inst.addGlfwExtensions(); inst.addDebugExtension(); inst.addLunarGLayer(); inst.setApplicationName(VulkanHelperTest.class.getSimpleName()); inst.setApplicationVersion(1, 0, 0); instance = inst.build(); + + // debug callbacks try (MemoryStack stack = MemoryStack.stackPush()) { createDebugMessenger(stack); } + + // surface surface = new Surface(instance, window); + + // physical device PhysicalDevice physDevice = PhysicalDevice.getPhysicalDevice( instance.getNativeObject(), Arrays.asList(surface, DeviceEvaluator.extensions(deviceExtensions), DeviceEvaluator.swapchain(surface)), () -> new SimpleQueueFamilies(surface)); + + // queue families queues = physDevice.getQueueFamilies(); + + // logical device PointerBuffer deviceExts = VulkanUtils.toPointers(inst.getStack(), deviceExtensions, inst.getStack()::UTF8); device = new LogicalDevice(physDevice, deviceExts, inst.getLayers()); + + // create queues physDevice.getQueueFamilies().createQueues(device); + + // swapchain try (SimpleSwapchainSupport support = new SimpleSwapchainSupport(physDevice, surface, window)) { swapchain = new Swapchain(device, surface, support); } } + + // pipeline vertModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( "Shaders/VulkanVertTest.glsl", ShaderType.Vertex)), "main"); fragModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( @@ -117,10 +149,40 @@ public void simpleInitApp() { renderPass = pass.build(device); } swapchain.createFrameBuffers(renderPass); - pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, new RenderState(), vertModule, fragModule); + pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, new RenderState(), vertModule, fragModule, new MeshDescription()); graphicsPool = new CommandPool(device, queues.getGraphicsQueue(), false, true); - //graphicsCommands = graphicsPool.allocateCommandBuffer(); renderer = new VulkanRenderManager(2, Frame::new); + + CommandPool transferPool = new CommandPool(device, queues.getGraphicsQueue(), true, false); + + // vertex buffers + try (MemoryStack stack = MemoryStack.stackPush()) { + GpuBuffer staging = new GpuBuffer(device, vertexData.capacity() * Float.BYTES, + new BufferArgs().transferSrc().hostVisible().hostCoherent()); + staging.copy(stack, vertexData); + vertexBuffer = new GpuBuffer(device, staging.getSize(), + new BufferArgs().transferDst().vertexBuffer().deviceLocal()); + CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); + vertexBuffer.recordCopy(stack, commands, staging, 0, 0, (long)vertexData.limit() * Float.BYTES); + commands.submit(null, null, null); + transferPool.getQueue().waitIdle(); // todo: use fences to wait on transfer operations + staging.freeMemory(); // destroys buffer + } + + // index buffers + try (MemoryStack stack = MemoryStack.stackPush()) { + GpuBuffer staging = new GpuBuffer(device, indexData.capacity() * Integer.BYTES, + new BufferArgs().transferSrc().hostVisible().hostCoherent()); + staging.copy(stack, indexData); + indexBuffer = new GpuBuffer(device, staging.getSize(), + new BufferArgs().transferDst().indexBuffer().deviceLocal()); + CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); + indexBuffer.recordCopy(stack, commands, staging, 0, 0, (long)indexData.limit() * Integer.BYTES); + commands.submit(null, null, null); + transferPool.getQueue().waitIdle(); + staging.freeMemory(); + } + } @Override @@ -205,6 +267,8 @@ public void run() { renderPass.begin(graphicsCommands, image.getFrameBuffer()); pipeline.bind(graphicsCommands); try (MemoryStack stack = MemoryStack.stackPush()) { + vkCmdBindVertexBuffers(graphicsCommands.getBuffer(), 0, stack.longs(vertexBuffer.getNativeObject()), stack.longs(0)); + vkCmdBindIndexBuffer(graphicsCommands.getBuffer(), indexBuffer.getNativeObject(), 0, VK_INDEX_TYPE_UINT32); VkViewport.Buffer vp = VkViewport.calloc(1, stack) .x(0f).y(0f) .width(swapchain.getExtent().getX()) @@ -216,7 +280,8 @@ public void run() { scissor.extent(swapchain.getExtent().toStruct(stack)); vkCmdSetScissor(graphicsCommands.getBuffer(), 0, scissor); } - vkCmdDraw(graphicsCommands.getBuffer(), 3, 1, 0, 0); + //vkCmdDraw(graphicsCommands.getBuffer(), vertexData.limit() / 5, 1, 0, 0); + vkCmdDrawIndexed(graphicsCommands.getBuffer(), indexData.limit(), 1, 0, 0, 0); vkCmdEndRenderPass(graphicsCommands.getBuffer()); graphicsCommands.end(); graphicsCommands.submit(imageAvailable, renderFinished, inFlight); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java index 039b7738fa..6014e59a56 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java @@ -50,11 +50,12 @@ public void end() { throw new IllegalStateException("Command buffer has not begun recording."); } check(vkEndCommandBuffer(buffer), "Failed to record command buffer"); + recording = false; } public void submit(Semaphore wait, Semaphore signal, Fence fence) { - if (!recording) { - throw new IllegalStateException("Command buffer has not begun recording."); + if (recording) { + throw new IllegalStateException("Command buffer is still recording."); } try (MemoryStack stack = MemoryStack.stackPush()) { VkSubmitInfo.Buffer submit = VkSubmitInfo.calloc(1, stack) @@ -69,7 +70,6 @@ public void submit(Semaphore wait, Semaphore signal, Fence fence) { } pool.getQueue().submit(submit, fence); } - recording = false; } public void reset() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java index 7c3ffa6856..d358f29427 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java @@ -19,7 +19,7 @@ public class GraphicsPipeline implements Native { private final NativeReference ref; private long id; - public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass compat, RenderState state, ShaderModule vert, ShaderModule frag) { + public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass compat, RenderState state, ShaderModule vert, ShaderModule frag, MeshDescription mesh) { this.device = device; try (MemoryStack stack = MemoryStack.stackPush()) { VkPipelineShaderStageCreateInfo.Buffer stages = VkPipelineShaderStageCreateInfo.calloc(2, stack); @@ -35,7 +35,9 @@ public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass .sType(VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO) .pDynamicStates(stack.ints(VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR)); VkPipelineVertexInputStateCreateInfo vertInput = VkPipelineVertexInputStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO); + .sType(VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO) + .pVertexBindingDescriptions(mesh.getBindings()) + .pVertexAttributeDescriptions(mesh.getAttributes()); VkPipelineInputAssemblyStateCreateInfo assembly = VkPipelineInputAssemblyStateCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO) .topology(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryRegion.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryRegion.java new file mode 100644 index 0000000000..8067d55512 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryRegion.java @@ -0,0 +1,102 @@ +package com.jme3.vulkan; + +import com.jme3.util.IntMap; +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.system.Struct; +import org.lwjgl.system.StructBuffer; +import org.lwjgl.vulkan.VkInstanceCreateInfo; +import org.lwjgl.vulkan.VkMemoryAllocateInfo; + +import java.nio.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BiFunction; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class MemoryRegion implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private final long id; + private final AtomicBoolean mapped = new AtomicBoolean(false); + + public MemoryRegion(LogicalDevice device, long size, int typeIndex) { + this.device = device; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkMemoryAllocateInfo allocate = VkMemoryAllocateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO) + .allocationSize(size) + .memoryTypeIndex(typeIndex); + LongBuffer idBuf = stack.mallocLong(1); + check(vkAllocateMemory(device.getNativeObject(), allocate, null, idBuf), + "Failed to allocate buffer memory."); + id = idBuf.get(0); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkFreeMemory(device.getNativeObject(), id, null); + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { + if (mapped.getAndSet(true)) { + throw new IllegalStateException("Memory already mapped."); + } + PointerBuffer data = stack.mallocPointer(1); + vkMapMemory(device.getNativeObject(), id, offset, size, flags, data); + return data; + } + + public ByteBuffer mapBytes(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size, flags).getByteBuffer(0, size); + } + + public ShortBuffer mapShorts(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size * Short.BYTES, flags).getShortBuffer(0, size); + } + + public IntBuffer mapInts(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size * Integer.BYTES, flags).getIntBuffer(0, size); + } + + public FloatBuffer mapFloats(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size * Float.BYTES, flags).getFloatBuffer(0, size); + } + + public DoubleBuffer mapDoubles(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size * Double.BYTES, flags).getDoubleBuffer(0, size); + } + + public LongBuffer mapLongs(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size * Long.BYTES, flags).getLongBuffer(0, size); + } + + public void unmap() { + if (!mapped.getAndSet(false)) { + throw new IllegalStateException("Memory is not mapped."); + } + vkUnmapMemory(device.getNativeObject(), id); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java new file mode 100644 index 0000000000..72bc1906ad --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java @@ -0,0 +1,64 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.vulkan.VkVertexInputAttributeDescription; +import org.lwjgl.vulkan.VkVertexInputBindingDescription; + +import static org.lwjgl.vulkan.VK10.*; + +public class MeshDescription implements Native { + + private final VkVertexInputBindingDescription.Buffer bindings; + private final VkVertexInputAttributeDescription.Buffer attributes; + private final NativeReference ref; + + public MeshDescription() { + // for each vertex buffer on the mesh + bindings = VkVertexInputBindingDescription.calloc(1) + .binding(0) + .stride(Float.BYTES * 5) // bytes per vertex + .inputRate(VK_VERTEX_INPUT_RATE_VERTEX); + // for each attribute in each vertex buffer + attributes = VkVertexInputAttributeDescription.calloc(2); + attributes.get(0).binding(0) + .location(0) + .format(VK_FORMAT_R32G32_SFLOAT) + .offset(0); + attributes.get(1).binding(0) + .location(1) + .format(VK_FORMAT_R32G32B32_SFLOAT) + .offset(Float.BYTES * 2); + ref = Native.get().register(this); + } + + @Override + public Object getNativeObject() { + return null; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + bindings.free(); + attributes.free(); + }; + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public VkVertexInputBindingDescription.Buffer getBindings() { + return bindings; + } + + public VkVertexInputAttributeDescription.Buffer getAttributes() { + return attributes; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java index 92e4991add..a060a2371a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java @@ -22,18 +22,19 @@ public void begin() { if (active) { throw new IllegalStateException("Buffer already freed."); } - VkCommandBufferBeginInfo begin = VkCommandBufferBeginInfo.create() - .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO) - .flags(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); - vkBeginCommandBuffer(buffer, begin); - begin.close(); + try (MemoryStack stack = MemoryStack.stackPush()) { + VkCommandBufferBeginInfo begin = VkCommandBufferBeginInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO) + .flags(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); + vkBeginCommandBuffer(buffer, begin); + } recording = true; } @Override public void submit(Semaphore wait, Semaphore signal, Fence fence) { - if (!recording) { - throw new IllegalStateException("Command buffer has not begun recording."); + if (recording) { + throw new IllegalStateException("Command buffer is still recording."); } try (MemoryStack stack = MemoryStack.stackPush()) { VkSubmitInfo.Buffer submit = VkSubmitInfo.calloc(1, stack) @@ -48,8 +49,7 @@ public void submit(Semaphore wait, Semaphore signal, Fence fence) { } pool.getQueue().submit(submit, fence); pool.getQueue().waitIdle(); - vkFreeCommandBuffers(pool.getDevice().getNativeObject(), - pool.getNativeObject(), buffer); + vkFreeCommandBuffers(pool.getDevice().getNativeObject(), pool.getNativeObject(), buffer); } active = false; recording = false; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java index a5e823e725..2bd75dcd65 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java @@ -71,6 +71,22 @@ public VkExtensionProperties.Buffer getExtensions(MemoryStack stack) { vkEnumerateDeviceExtensionProperties(device, (ByteBuffer)null, count, buffer)); } + public VkPhysicalDeviceMemoryProperties getMemory(MemoryStack stack) { + VkPhysicalDeviceMemoryProperties mem = VkPhysicalDeviceMemoryProperties.malloc(stack); + vkGetPhysicalDeviceMemoryProperties(device, mem); + return mem; + } + + public int findMemoryType(MemoryStack stack, int types, int flags) { + VkPhysicalDeviceMemoryProperties mem = getMemory(stack); + for (int i = 0; i < mem.memoryTypeCount(); i++) { + if ((types & (1 << i)) != 0 && (mem.memoryTypes().get(i).propertyFlags() & flags) != 0) { + return i; + } + } + throw new NullPointerException("Suitable memory type not found."); + } + public int findSupportedFormat(int tiling, int features, int... candidates) { VkFormatProperties props = VkFormatProperties.create(); for (int f : candidates) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Vertex.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Vertex.java new file mode 100644 index 0000000000..237992d248 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Vertex.java @@ -0,0 +1,25 @@ +package com.jme3.vulkan; + +import org.lwjgl.system.Struct; + +import java.nio.ByteBuffer; + +public class Vertex extends Struct { + + // todo: experiment with implementing Structs + + protected Vertex(long address, ByteBuffer container) { + super(address, container); + } + + @Override + protected Vertex create(long l, ByteBuffer byteBuffer) { + return null; + } + + @Override + public int sizeof() { + return 0; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferArgs.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferArgs.java new file mode 100644 index 0000000000..c5c95648df --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferArgs.java @@ -0,0 +1,77 @@ +package com.jme3.vulkan.buffers; + +import static org.lwjgl.vulkan.VK10.*; + +public class BufferArgs { + + private int usage; + private int memFlags = 0; + private boolean concurrent = false; + + public BufferArgs vertexBuffer() { + usage |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; + return this; + } + + public BufferArgs indexBuffer() { + usage |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT; + return this; + } + + public BufferArgs transferSrc() { + usage |= VK_BUFFER_USAGE_TRANSFER_SRC_BIT; + return this; + } + + public BufferArgs transferDst() { + usage |= VK_BUFFER_USAGE_TRANSFER_DST_BIT; + return this; + } + + public BufferArgs hostVisible() { + memFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; + return this; + } + + public BufferArgs hostCoherent() { + memFlags |= VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; + return this; + } + + public BufferArgs hostCached() { + memFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT; + return this; + } + + public BufferArgs deviceLocal() { + memFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; + return this; + } + + public BufferArgs lazilyAllocated() { + memFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT; + return this; + } + + public BufferArgs setConcurrent(boolean concurrent) { + this.concurrent = concurrent; + return this; + } + + public int getUsage() { + return usage; + } + + public int getMemoryFlags() { + return memFlags; + } + + public boolean isConcurrent() { + return concurrent; + } + + public int getSharingMode() { + return concurrent ? VK_SHARING_MODE_CONCURRENT : VK_SHARING_MODE_EXCLUSIVE; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java new file mode 100644 index 0000000000..6707d10a3b --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -0,0 +1,105 @@ +package com.jme3.vulkan.buffers; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.CommandBuffer; +import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.MemoryRegion; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.VkBufferCopy; +import org.lwjgl.vulkan.VkBufferCreateInfo; +import org.lwjgl.vulkan.VkMemoryRequirements; + +import java.nio.*; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class GpuBuffer implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private final int size; + private final long id; + private final MemoryRegion memory; + + public GpuBuffer(LogicalDevice device, int size, BufferArgs args) { + this.device = device; + this.size = size; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkBufferCreateInfo create = VkBufferCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO) + .size(size) // size in bytes + .usage(args.getUsage()) + .sharingMode(args.getSharingMode()); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateBuffer(device.getNativeObject(), create, null, idBuf), + "Failed to create buffer."); + id = idBuf.get(0); + VkMemoryRequirements bufferMem = VkMemoryRequirements.malloc(stack); + vkGetBufferMemoryRequirements(device.getNativeObject(), id, bufferMem); + memory = new MemoryRegion(device, bufferMem.size(), device.getPhysicalDevice().findMemoryType( + stack, bufferMem.memoryTypeBits(), args.getMemoryFlags())); + check(vkBindBufferMemory(device.getNativeObject(), id, memory.getNativeObject(), 0), + "Failed to bind buffer memory"); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + memory.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyBuffer(device.getNativeObject(), id, null); + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public void copy(MemoryStack stack, ByteBuffer buffer) { + MemoryUtil.memCopy(buffer, memory.mapBytes(stack, 0, buffer.limit(), 0)); + memory.unmap(); + } + + public void copy(MemoryStack stack, IntBuffer buffer) { + MemoryUtil.memCopy(buffer, memory.mapInts(stack, 0, buffer.limit(), 0)); + memory.unmap(); + } + + public void copy(MemoryStack stack, FloatBuffer buffer) { + MemoryUtil.memCopy(buffer, memory.mapFloats(stack, 0, buffer.limit(), 0)); + memory.unmap(); + } + + public void recordCopy(MemoryStack stack, CommandBuffer commands, GpuBuffer source, long srcOffset, long dstOffset, long size) { + commands.begin(); + VkBufferCopy.Buffer copy = VkBufferCopy.calloc(1, stack) + .srcOffset(srcOffset).dstOffset(dstOffset).size(size); + vkCmdCopyBuffer(commands.getBuffer(), source.getNativeObject(), id, copy); + commands.end(); + } + + public void freeMemory() { + memory.getNativeReference().destroy(); + } + + public int getSize() { + return size; // size in bytes + } + + public MemoryRegion getMemory() { + return memory; + } + +} diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl index 1789f94a1b..804b6dacd0 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl @@ -6,6 +6,6 @@ layout (location = 1) in vec3 inColor; layout (location = 0) out vec3 fragColor; void main() { - gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0); - fragColor = colors[gl_VertexIndex]; + gl_Position = vec4(inPosition, 0.0, 1.0); + fragColor = inColor; } \ No newline at end of file From adb4e01a059ac4368c232ad1ecd6f6c8b2e6ac81 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Thu, 31 Jul 2025 21:08:24 -0400 Subject: [PATCH 15/80] add uniforms; fix native crash and memory leaks --- hs_err_pid78128.log | 1520 ----------------- .../src/main/java/com/jme3/math/Matrix4f.java | 12 + .../main/java/com/jme3/renderer/Camera.java | 5 +- .../com/jme3/renderer/vulkan/VulkanUtils.java | 25 + .../jme3/util/natives/BasicNativeManager.java | 49 +- .../jme3/util/natives/NativeReference.java | 4 + .../jme3test/vulkan/VulkanHelperTest.java | 222 ++- .../main/java/jme3test/vulkan/VulkanTest.java | 5 +- .../system/vulkan/LwjglVulkanContext.java | 5 +- .../java/com/jme3/vulkan/DeviceEvaluator.java | 30 +- .../java/com/jme3/vulkan/FrameBuffer.java | 3 +- .../com/jme3/vulkan/GraphicsPipeline.java | 1 + .../src/main/java/com/jme3/vulkan/Image.java | 12 - .../java/com/jme3/vulkan/LogicalDevice.java | 7 +- .../java/com/jme3/vulkan/MeshDescription.java | 8 +- .../main/java/com/jme3/vulkan/OldImage.java | 127 -- .../java/com/jme3/vulkan/PhysicalDevice.java | 27 +- .../java/com/jme3/vulkan/PipelineLayout.java | 22 +- .../java/com/jme3/vulkan/ShaderModule.java | 1 + .../main/java/com/jme3/vulkan/Swapchain.java | 87 +- .../java/com/jme3/vulkan/VulkanLogger.java | 102 ++ .../com/jme3/vulkan/VulkanRenderManager.java | 9 +- .../com/jme3/vulkan/buffers/BufferArgs.java | 77 - .../com/jme3/vulkan/buffers/GpuBuffer.java | 93 +- .../vulkan/{ => buffers}/MemoryRegion.java | 50 +- .../jme3/vulkan/buffers/PersistentBuffer.java | 33 + .../jme3/vulkan/buffers/StageableBuffer.java | 59 + .../vulkan/descriptors/BufferDescriptor.java | 37 + .../vulkan/descriptors/BufferSetWriter.java | 32 + .../jme3/vulkan/descriptors/Descriptor.java | 28 + .../vulkan/descriptors/DescriptorPool.java | 78 + .../vulkan/descriptors/DescriptorSet.java | 44 + .../descriptors/DescriptorSetLayout.java | 65 + .../descriptors/DescriptorSetWriter.java | 39 + .../vulkan/descriptors/ImageDescriptor.java | 42 + .../vulkan/descriptors/ImageSetWriter.java | 32 + .../com/jme3/vulkan/descriptors/PoolSize.java | 43 + .../vulkan/descriptors/SetLayoutBinding.java | 50 + .../jme3/vulkan/flags/BufferUsageFlags.java | 38 + .../jme3/vulkan/flags/ImageUsageFlags.java | 28 + .../com/jme3/vulkan/flags/MemoryFlags.java | 38 + .../java/com/jme3/vulkan/images/GpuImage.java | 143 ++ .../java/com/jme3/vulkan/images/Image.java | 46 + .../jme3/vulkan/{ => images}/ImageView.java | 9 +- .../java/com/jme3/vulkan/images/Sampler.java | 69 + .../java/com/jme3/vulkan/images/Texture.java | 18 + .../jme3/vulkan/images/VulkanImageLoader.java | 199 +++ .../resources/Shaders/VulkanFragTest.glsl | 5 +- .../resources/Shaders/VulkanVertTest.glsl | 9 +- 49 files changed, 1732 insertions(+), 1955 deletions(-) delete mode 100644 hs_err_pid78128.log delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/OldImage.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanLogger.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferArgs.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => buffers}/MemoryRegion.java (65%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/BufferUsageFlags.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/MemoryFlags.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => images}/ImageView.java (87%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java diff --git a/hs_err_pid78128.log b/hs_err_pid78128.log deleted file mode 100644 index 1cbd152d6c..0000000000 --- a/hs_err_pid78128.log +++ /dev/null @@ -1,1520 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# SIGSEGV (0xb) at pc=0x000073b95c45933a, pid=78128, tid=78153 -# -# JRE version: Java(TM) SE Runtime Environment (23.0.2+7) (build 23.0.2+7-58) -# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) -# Problematic frame: -# C [libjemalloc.so+0x5933a] -# -# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/codex/java/prj/jmonkeyengine/core.78128) -# -# If you would like to submit a bug report, please visit: -# https://bugreport.java.com/bugreport/crash.jsp -# - ---------------- S U M M A R Y ------------ - -Command Line: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant jme3test.vulkan.VulkanHelperTest - -Host: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 8 cores, 31G, Pop!_OS 22.04 LTS -Time: Sun Jul 27 22:12:26 2025 EDT elapsed time: 5.435825 seconds (0d 0h 0m 5s) - ---------------- T H R E A D --------------- - -Current thread is native thread - -Stack: [0x000073b95c100000,0x000073b95c200000], sp=0x000073b95c1fe8d0, free space=1018k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -C [libjemalloc.so+0x5933a] - -siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000 - -Registers: -RAX=0x0000000000000000, RBX=0x0000000000000200, RCX=0x0000000000000000, RDX=0x000073b95c478440 -RSP=0x000073b95c1fe8d0, RBP=0x000073b95c1fedb0, RSI=0x0000000000000000, RDI=0x000073b954ae1020 -R8 =0x0000000000000000, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x000073b954ae1060 -R12=0x000000000000003f, R13=0x000073b95c1fed70, R14=0x000000000000003f, R15=0x000073b95c1fead0 -RIP=0x000073b95c45933a, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 - TRAPNO=0x000000000000000e - - -Top of Stack: (sp=0x000073b95c1fe8d0) -0x000073b95c1fe8d0: 000073b97c4c7590 000073b95c1fe960 -0x000073b95c1fe8e0: 000073b95c1fe970 000073b985b32211 -0x000073b95c1fe8f0: 0000000000000005 000073b97c4c7788 -0x000073b95c1fe900: 0000000000000005 0000000000000000 -0x000073b95c1fe910: 0000000000000001 000073b97c4c7220 -0x000073b95c1fe920: 000073b97c4c7788 000073b97c4c7220 -0x000073b95c1fe930: 000000016bd3f020 000073b97c4c7590 -0x000073b95c1fe940: 0000000000000000 3962333700000000 -0x000073b95c1fe950: 3064343900000000 4b172e4100000004 -0x000073b95c1fe960: 00000000ffffffff 0000000000000000 -0x000073b95c1fe970: 000073b98580d4d0 000073b985b1f7c0 -0x000073b95c1fe980: 000073b95c1fe9b0 000073b985278613 -0x000073b95c1fe990: 000073b95c1feb88 000073b98588849a -0x000073b95c1fe9a0: 0000000000000000 000073b95c1feaa0 -0x000073b95c1fe9b0: 00000000fbad8001 0000000000000002 -0x000073b95c1fe9c0: 000073b97c4c7220 000073b95c6ff028 -0x000073b95c1fe9d0: 000073b985a1cae8 0000000000000004 -0x000073b95c1fe9e0: 000073b95c1ffb58 000073b985b38f71 -0x000073b95c1fe9f0: 0000000000000005 0000000000000000 -0x000073b95c1fea00: 000073b98580d4d0 000073b9858a53e0 -0x000073b95c1fea10: 0000000000000000 000073b95c1fee00 -0x000073b95c1fea20: 000073b985a1caf8 0000000000000000 -0x000073b95c1fea30: 000073b985a1cae8 000073b985b3bdae -0x000073b95c1fea40: 0000000000000001 000000000000006f -0x000073b95c1fea50: 000073b95c6b17d0 0000000000000000 -0x000073b95c1fea60: 000073b8acbbbcd0 0000000000000000 -0x000073b95c1fea70: 00000000000000ca 5a15e310c4f3a7d5 -0x000073b95c1fea80: 0000000000000213 000073b985a17300 -0x000073b95c1fea90: 0000000000000000 0000000000000200 -0x000073b95c1feaa0: 000073b95c1fedb0 000000000000003f -0x000073b95c1feab0: 000073b95c1fed70 000073b95c1fead0 -0x000073b95c1feac0: 000073b8ac002420 000073b95c4592f8 - -Instructions: (pc=0x000073b95c45933a) -0x000073b95c45923a: f4 66 41 c1 ec 03 41 0f b7 d4 2b 95 40 ff ff ff -0x000073b95c45924a: 48 c1 e2 03 e8 bd f0 fa ff 49 8b 4d 00 41 0f b7 -0x000073b95c45925a: 7d 14 48 01 d9 89 fe 66 41 2b 7d 10 29 ce 66 c1 -0x000073b95c45926a: ef 03 49 89 4d 00 66 c1 ee 03 66 39 fe 73 0c 4c -0x000073b95c45927a: 8b bd 50 ff ff ff 66 41 89 4f 10 48 8d 65 d8 5b -0x000073b95c45928a: 41 5c 41 5d 41 5e 41 5f 5d c3 29 d8 48 89 a5 48 -0x000073b95c45929a: ff ff ff 4c 89 ff 44 0f b7 e0 44 0f b7 c0 66 89 -0x000073b95c4592aa: 45 c0 45 8d 74 24 01 4e 8d 1c c5 00 00 00 00 44 -0x000073b95c4592ba: 89 a5 40 ff ff ff 4a 8d 1c f5 0f 00 00 00 4c 29 -0x000073b95c4592ca: da 4c 89 9d 38 ff ff ff 81 e3 f0 ff 1f 00 4c 8d -0x000073b95c4592da: 14 16 4c 89 c2 48 8b b5 30 ff ff ff 48 29 dc 4c -0x000073b95c4592ea: 89 55 c8 49 89 e6 4c 89 f1 e8 28 ed ff ff 48 29 -0x000073b95c4592fa: dc 48 89 65 80 45 85 e4 0f 84 07 ff ff ff 44 8b -0x000073b95c45930a: 8d 2c ff ff ff c7 45 b8 00 00 00 00 4c 89 7d b0 -0x000073b95c45931a: 4d 89 f7 45 89 e6 4b 8d 0c 89 4c 89 4d a0 48 c1 -0x000073b95c45932a: e1 03 48 89 4d 88 49 8b 37 48 8d 15 06 f1 01 00 -0x000073b95c45933a: 44 8b 2e 41 81 e5 ff 0f 00 00 44 89 e8 4c 8b 24 -0x000073b95c45934a: c2 4c 89 65 a8 4c 8b 06 48 8d 3d 67 72 02 00 4c -0x000073b95c45935a: 8b 5d a0 49 c1 e8 26 41 83 e0 3f 46 8b 14 9f 44 -0x000073b95c45936a: 89 c3 44 89 45 bc 4c 8d 0c dd 00 00 00 00 49 29 -0x000073b95c45937a: d9 49 c1 e1 05 4d 01 ca 4d 01 e2 49 8d 7a 48 4c -0x000073b95c45938a: 89 55 90 48 89 7d 98 e8 6a f0 fa ff 4c 8b 4d 90 -0x000073b95c45939a: 85 c0 0f 85 ce 03 00 00 49 8d 49 40 48 89 4d 90 -0x000073b95c4593aa: 49 8b 1f 48 8b 55 a0 45 8d 5e ff 45 31 e4 48 8d -0x000073b95c4593ba: 05 a1 72 02 00 41 ba 01 00 00 00 41 83 e3 01 48 -0x000073b95c4593ca: 8b 3b 44 8b 04 90 48 8b 45 c8 89 fe 81 e6 ff 0f -0x000073b95c4593da: 00 00 48 8b 08 41 39 f5 0f 84 c0 02 00 00 4a 89 -0x000073b95c4593ea: 0c e0 4b 89 1c e7 41 bc 01 00 00 00 bb 01 00 00 -0x000073b95c4593fa: 00 41 83 fe 01 0f 86 51 02 00 00 45 85 db 74 38 -0x000073b95c45940a: 49 8b 57 08 48 8b 48 08 48 8b 32 89 f7 81 e7 ff -0x000073b95c45941a: 0f 00 00 41 39 fd 0f 84 6a 04 00 00 45 89 e3 41 -0x000073b95c45942a: 83 c4 01 4a 89 0c d8 4b 89 14 df 48 83 c3 01 41 - - - ---------------- P R O C E S S --------------- - -VM state: not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -Heap address: 0x000000060c000000, size: 8000 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 - -CDS archive(s) mapped at: [0x000073b8fe000000-0x000073b8fed91000-0x000073b8fed91000), size 14225408, SharedBaseAddress: 0x000073b8fe000000, ArchiveRelocationMode: 1. -Compressed class space mapped at: 0x000073b8ff000000-0x000073b93f000000, reserved size: 1073741824 -Narrow klass base: 0x000073b8fe000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - - -Heap: - garbage-first heap total reserved 8192000K, committed 516096K, used 11952K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 3 young (12288K), 1 survivors (4096K) - Metaspace used 10807K, committed 11072K, reserved 1114112K - class space used 906K, committed 1024K, reserved 1048576K - -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|0x000000060c000000, 0x000000060c000000, 0x000000060c400000| 0%| F| |TAMS 0x000000060c000000| PB 0x000000060c000000| Untracked | 0 -| 1|0x000000060c400000, 0x000000060c400000, 0x000000060c800000| 0%| F| |TAMS 0x000000060c400000| PB 0x000000060c400000| Untracked | 0 -| 2|0x000000060c800000, 0x000000060c800000, 0x000000060cc00000| 0%| F| |TAMS 0x000000060c800000| PB 0x000000060c800000| Untracked | 0 -| 3|0x000000060cc00000, 0x000000060cc00000, 0x000000060d000000| 0%| F| |TAMS 0x000000060cc00000| PB 0x000000060cc00000| Untracked | 0 -| 4|0x000000060d000000, 0x000000060d000000, 0x000000060d400000| 0%| F| |TAMS 0x000000060d000000| PB 0x000000060d000000| Untracked | 0 -| 5|0x000000060d400000, 0x000000060d400000, 0x000000060d800000| 0%| F| |TAMS 0x000000060d400000| PB 0x000000060d400000| Untracked | 0 -| 6|0x000000060d800000, 0x000000060d800000, 0x000000060dc00000| 0%| F| |TAMS 0x000000060d800000| PB 0x000000060d800000| Untracked | 0 -| 7|0x000000060dc00000, 0x000000060dc00000, 0x000000060e000000| 0%| F| |TAMS 0x000000060dc00000| PB 0x000000060dc00000| Untracked | 0 -| 8|0x000000060e000000, 0x000000060e000000, 0x000000060e400000| 0%| F| |TAMS 0x000000060e000000| PB 0x000000060e000000| Untracked | 0 -| 9|0x000000060e400000, 0x000000060e400000, 0x000000060e800000| 0%| F| |TAMS 0x000000060e400000| PB 0x000000060e400000| Untracked | 0 -| 10|0x000000060e800000, 0x000000060e800000, 0x000000060ec00000| 0%| F| |TAMS 0x000000060e800000| PB 0x000000060e800000| Untracked | 0 -| 11|0x000000060ec00000, 0x000000060ec00000, 0x000000060f000000| 0%| F| |TAMS 0x000000060ec00000| PB 0x000000060ec00000| Untracked | 0 -| 12|0x000000060f000000, 0x000000060f000000, 0x000000060f400000| 0%| F| |TAMS 0x000000060f000000| PB 0x000000060f000000| Untracked | 0 -| 13|0x000000060f400000, 0x000000060f400000, 0x000000060f800000| 0%| F| |TAMS 0x000000060f400000| PB 0x000000060f400000| Untracked | 0 -| 14|0x000000060f800000, 0x000000060f800000, 0x000000060fc00000| 0%| F| |TAMS 0x000000060f800000| PB 0x000000060f800000| Untracked | 0 -| 15|0x000000060fc00000, 0x000000060fc00000, 0x0000000610000000| 0%| F| |TAMS 0x000000060fc00000| PB 0x000000060fc00000| Untracked | 0 -| 16|0x0000000610000000, 0x0000000610000000, 0x0000000610400000| 0%| F| |TAMS 0x0000000610000000| PB 0x0000000610000000| Untracked | 0 -| 17|0x0000000610400000, 0x0000000610400000, 0x0000000610800000| 0%| F| |TAMS 0x0000000610400000| PB 0x0000000610400000| Untracked | 0 -| 18|0x0000000610800000, 0x0000000610800000, 0x0000000610c00000| 0%| F| |TAMS 0x0000000610800000| PB 0x0000000610800000| Untracked | 0 -| 19|0x0000000610c00000, 0x0000000610c00000, 0x0000000611000000| 0%| F| |TAMS 0x0000000610c00000| PB 0x0000000610c00000| Untracked | 0 -| 20|0x0000000611000000, 0x0000000611000000, 0x0000000611400000| 0%| F| |TAMS 0x0000000611000000| PB 0x0000000611000000| Untracked | 0 -| 21|0x0000000611400000, 0x0000000611400000, 0x0000000611800000| 0%| F| |TAMS 0x0000000611400000| PB 0x0000000611400000| Untracked | 0 -| 22|0x0000000611800000, 0x0000000611800000, 0x0000000611c00000| 0%| F| |TAMS 0x0000000611800000| PB 0x0000000611800000| Untracked | 0 -| 23|0x0000000611c00000, 0x0000000611c00000, 0x0000000612000000| 0%| F| |TAMS 0x0000000611c00000| PB 0x0000000611c00000| Untracked | 0 -| 24|0x0000000612000000, 0x0000000612000000, 0x0000000612400000| 0%| F| |TAMS 0x0000000612000000| PB 0x0000000612000000| Untracked | 0 -| 25|0x0000000612400000, 0x0000000612400000, 0x0000000612800000| 0%| F| |TAMS 0x0000000612400000| PB 0x0000000612400000| Untracked | 0 -| 26|0x0000000612800000, 0x0000000612800000, 0x0000000612c00000| 0%| F| |TAMS 0x0000000612800000| PB 0x0000000612800000| Untracked | 0 -| 27|0x0000000612c00000, 0x0000000612c00000, 0x0000000613000000| 0%| F| |TAMS 0x0000000612c00000| PB 0x0000000612c00000| Untracked | 0 -| 28|0x0000000613000000, 0x0000000613000000, 0x0000000613400000| 0%| F| |TAMS 0x0000000613000000| PB 0x0000000613000000| Untracked | 0 -| 29|0x0000000613400000, 0x0000000613400000, 0x0000000613800000| 0%| F| |TAMS 0x0000000613400000| PB 0x0000000613400000| Untracked | 0 -| 30|0x0000000613800000, 0x0000000613800000, 0x0000000613c00000| 0%| F| |TAMS 0x0000000613800000| PB 0x0000000613800000| Untracked | 0 -| 31|0x0000000613c00000, 0x0000000613c00000, 0x0000000614000000| 0%| F| |TAMS 0x0000000613c00000| PB 0x0000000613c00000| Untracked | 0 -| 32|0x0000000614000000, 0x0000000614000000, 0x0000000614400000| 0%| F| |TAMS 0x0000000614000000| PB 0x0000000614000000| Untracked | 0 -| 33|0x0000000614400000, 0x0000000614400000, 0x0000000614800000| 0%| F| |TAMS 0x0000000614400000| PB 0x0000000614400000| Untracked | 0 -| 34|0x0000000614800000, 0x0000000614800000, 0x0000000614c00000| 0%| F| |TAMS 0x0000000614800000| PB 0x0000000614800000| Untracked | 0 -| 35|0x0000000614c00000, 0x0000000614c00000, 0x0000000615000000| 0%| F| |TAMS 0x0000000614c00000| PB 0x0000000614c00000| Untracked | 0 -| 36|0x0000000615000000, 0x0000000615000000, 0x0000000615400000| 0%| F| |TAMS 0x0000000615000000| PB 0x0000000615000000| Untracked | 0 -| 37|0x0000000615400000, 0x0000000615400000, 0x0000000615800000| 0%| F| |TAMS 0x0000000615400000| PB 0x0000000615400000| Untracked | 0 -| 38|0x0000000615800000, 0x0000000615800000, 0x0000000615c00000| 0%| F| |TAMS 0x0000000615800000| PB 0x0000000615800000| Untracked | 0 -| 39|0x0000000615c00000, 0x0000000615c00000, 0x0000000616000000| 0%| F| |TAMS 0x0000000615c00000| PB 0x0000000615c00000| Untracked | 0 -| 40|0x0000000616000000, 0x0000000616000000, 0x0000000616400000| 0%| F| |TAMS 0x0000000616000000| PB 0x0000000616000000| Untracked | 0 -| 41|0x0000000616400000, 0x0000000616400000, 0x0000000616800000| 0%| F| |TAMS 0x0000000616400000| PB 0x0000000616400000| Untracked | 0 -| 42|0x0000000616800000, 0x0000000616800000, 0x0000000616c00000| 0%| F| |TAMS 0x0000000616800000| PB 0x0000000616800000| Untracked | 0 -| 43|0x0000000616c00000, 0x0000000616c00000, 0x0000000617000000| 0%| F| |TAMS 0x0000000616c00000| PB 0x0000000616c00000| Untracked | 0 -| 44|0x0000000617000000, 0x0000000617000000, 0x0000000617400000| 0%| F| |TAMS 0x0000000617000000| PB 0x0000000617000000| Untracked | 0 -| 45|0x0000000617400000, 0x0000000617400000, 0x0000000617800000| 0%| F| |TAMS 0x0000000617400000| PB 0x0000000617400000| Untracked | 0 -| 46|0x0000000617800000, 0x0000000617800000, 0x0000000617c00000| 0%| F| |TAMS 0x0000000617800000| PB 0x0000000617800000| Untracked | 0 -| 47|0x0000000617c00000, 0x0000000617c00000, 0x0000000618000000| 0%| F| |TAMS 0x0000000617c00000| PB 0x0000000617c00000| Untracked | 0 -| 48|0x0000000618000000, 0x0000000618000000, 0x0000000618400000| 0%| F| |TAMS 0x0000000618000000| PB 0x0000000618000000| Untracked | 0 -| 49|0x0000000618400000, 0x0000000618400000, 0x0000000618800000| 0%| F| |TAMS 0x0000000618400000| PB 0x0000000618400000| Untracked | 0 -| 50|0x0000000618800000, 0x0000000618800000, 0x0000000618c00000| 0%| F| |TAMS 0x0000000618800000| PB 0x0000000618800000| Untracked | 0 -| 51|0x0000000618c00000, 0x0000000618c00000, 0x0000000619000000| 0%| F| |TAMS 0x0000000618c00000| PB 0x0000000618c00000| Untracked | 0 -| 52|0x0000000619000000, 0x0000000619000000, 0x0000000619400000| 0%| F| |TAMS 0x0000000619000000| PB 0x0000000619000000| Untracked | 0 -| 53|0x0000000619400000, 0x0000000619400000, 0x0000000619800000| 0%| F| |TAMS 0x0000000619400000| PB 0x0000000619400000| Untracked | 0 -| 54|0x0000000619800000, 0x0000000619800000, 0x0000000619c00000| 0%| F| |TAMS 0x0000000619800000| PB 0x0000000619800000| Untracked | 0 -| 55|0x0000000619c00000, 0x0000000619c00000, 0x000000061a000000| 0%| F| |TAMS 0x0000000619c00000| PB 0x0000000619c00000| Untracked | 0 -| 56|0x000000061a000000, 0x000000061a000000, 0x000000061a400000| 0%| F| |TAMS 0x000000061a000000| PB 0x000000061a000000| Untracked | 0 -| 57|0x000000061a400000, 0x000000061a400000, 0x000000061a800000| 0%| F| |TAMS 0x000000061a400000| PB 0x000000061a400000| Untracked | 0 -| 58|0x000000061a800000, 0x000000061a800000, 0x000000061ac00000| 0%| F| |TAMS 0x000000061a800000| PB 0x000000061a800000| Untracked | 0 -| 59|0x000000061ac00000, 0x000000061ac00000, 0x000000061b000000| 0%| F| |TAMS 0x000000061ac00000| PB 0x000000061ac00000| Untracked | 0 -| 60|0x000000061b000000, 0x000000061b000000, 0x000000061b400000| 0%| F| |TAMS 0x000000061b000000| PB 0x000000061b000000| Untracked | 0 -| 61|0x000000061b400000, 0x000000061b400000, 0x000000061b800000| 0%| F| |TAMS 0x000000061b400000| PB 0x000000061b400000| Untracked | 0 -| 62|0x000000061b800000, 0x000000061b800000, 0x000000061bc00000| 0%| F| |TAMS 0x000000061b800000| PB 0x000000061b800000| Untracked | 0 -| 63|0x000000061bc00000, 0x000000061bc00000, 0x000000061c000000| 0%| F| |TAMS 0x000000061bc00000| PB 0x000000061bc00000| Untracked | 0 -| 64|0x000000061c000000, 0x000000061c000000, 0x000000061c400000| 0%| F| |TAMS 0x000000061c000000| PB 0x000000061c000000| Untracked | 0 -| 65|0x000000061c400000, 0x000000061c400000, 0x000000061c800000| 0%| F| |TAMS 0x000000061c400000| PB 0x000000061c400000| Untracked | 0 -| 66|0x000000061c800000, 0x000000061c800000, 0x000000061cc00000| 0%| F| |TAMS 0x000000061c800000| PB 0x000000061c800000| Untracked | 0 -| 67|0x000000061cc00000, 0x000000061cc00000, 0x000000061d000000| 0%| F| |TAMS 0x000000061cc00000| PB 0x000000061cc00000| Untracked | 0 -| 68|0x000000061d000000, 0x000000061d000000, 0x000000061d400000| 0%| F| |TAMS 0x000000061d000000| PB 0x000000061d000000| Untracked | 0 -| 69|0x000000061d400000, 0x000000061d400000, 0x000000061d800000| 0%| F| |TAMS 0x000000061d400000| PB 0x000000061d400000| Untracked | 0 -| 70|0x000000061d800000, 0x000000061d800000, 0x000000061dc00000| 0%| F| |TAMS 0x000000061d800000| PB 0x000000061d800000| Untracked | 0 -| 71|0x000000061dc00000, 0x000000061dc00000, 0x000000061e000000| 0%| F| |TAMS 0x000000061dc00000| PB 0x000000061dc00000| Untracked | 0 -| 72|0x000000061e000000, 0x000000061e000000, 0x000000061e400000| 0%| F| |TAMS 0x000000061e000000| PB 0x000000061e000000| Untracked | 0 -| 73|0x000000061e400000, 0x000000061e400000, 0x000000061e800000| 0%| F| |TAMS 0x000000061e400000| PB 0x000000061e400000| Untracked | 0 -| 74|0x000000061e800000, 0x000000061e800000, 0x000000061ec00000| 0%| F| |TAMS 0x000000061e800000| PB 0x000000061e800000| Untracked | 0 -| 75|0x000000061ec00000, 0x000000061ec00000, 0x000000061f000000| 0%| F| |TAMS 0x000000061ec00000| PB 0x000000061ec00000| Untracked | 0 -| 76|0x000000061f000000, 0x000000061f000000, 0x000000061f400000| 0%| F| |TAMS 0x000000061f000000| PB 0x000000061f000000| Untracked | 0 -| 77|0x000000061f400000, 0x000000061f400000, 0x000000061f800000| 0%| F| |TAMS 0x000000061f400000| PB 0x000000061f400000| Untracked | 0 -| 78|0x000000061f800000, 0x000000061f800000, 0x000000061fc00000| 0%| F| |TAMS 0x000000061f800000| PB 0x000000061f800000| Untracked | 0 -| 79|0x000000061fc00000, 0x000000061fc00000, 0x0000000620000000| 0%| F| |TAMS 0x000000061fc00000| PB 0x000000061fc00000| Untracked | 0 -| 80|0x0000000620000000, 0x0000000620000000, 0x0000000620400000| 0%| F| |TAMS 0x0000000620000000| PB 0x0000000620000000| Untracked | 0 -| 81|0x0000000620400000, 0x0000000620400000, 0x0000000620800000| 0%| F| |TAMS 0x0000000620400000| PB 0x0000000620400000| Untracked | 0 -| 82|0x0000000620800000, 0x0000000620800000, 0x0000000620c00000| 0%| F| |TAMS 0x0000000620800000| PB 0x0000000620800000| Untracked | 0 -| 83|0x0000000620c00000, 0x0000000620c00000, 0x0000000621000000| 0%| F| |TAMS 0x0000000620c00000| PB 0x0000000620c00000| Untracked | 0 -| 84|0x0000000621000000, 0x0000000621000000, 0x0000000621400000| 0%| F| |TAMS 0x0000000621000000| PB 0x0000000621000000| Untracked | 0 -| 85|0x0000000621400000, 0x0000000621400000, 0x0000000621800000| 0%| F| |TAMS 0x0000000621400000| PB 0x0000000621400000| Untracked | 0 -| 86|0x0000000621800000, 0x0000000621800000, 0x0000000621c00000| 0%| F| |TAMS 0x0000000621800000| PB 0x0000000621800000| Untracked | 0 -| 87|0x0000000621c00000, 0x0000000621c00000, 0x0000000622000000| 0%| F| |TAMS 0x0000000621c00000| PB 0x0000000621c00000| Untracked | 0 -| 88|0x0000000622000000, 0x0000000622000000, 0x0000000622400000| 0%| F| |TAMS 0x0000000622000000| PB 0x0000000622000000| Untracked | 0 -| 89|0x0000000622400000, 0x0000000622400000, 0x0000000622800000| 0%| F| |TAMS 0x0000000622400000| PB 0x0000000622400000| Untracked | 0 -| 90|0x0000000622800000, 0x0000000622800000, 0x0000000622c00000| 0%| F| |TAMS 0x0000000622800000| PB 0x0000000622800000| Untracked | 0 -| 91|0x0000000622c00000, 0x0000000622c00000, 0x0000000623000000| 0%| F| |TAMS 0x0000000622c00000| PB 0x0000000622c00000| Untracked | 0 -| 92|0x0000000623000000, 0x0000000623000000, 0x0000000623400000| 0%| F| |TAMS 0x0000000623000000| PB 0x0000000623000000| Untracked | 0 -| 93|0x0000000623400000, 0x0000000623400000, 0x0000000623800000| 0%| F| |TAMS 0x0000000623400000| PB 0x0000000623400000| Untracked | 0 -| 94|0x0000000623800000, 0x0000000623800000, 0x0000000623c00000| 0%| F| |TAMS 0x0000000623800000| PB 0x0000000623800000| Untracked | 0 -| 95|0x0000000623c00000, 0x0000000623c00000, 0x0000000624000000| 0%| F| |TAMS 0x0000000623c00000| PB 0x0000000623c00000| Untracked | 0 -| 96|0x0000000624000000, 0x0000000624000000, 0x0000000624400000| 0%| F| |TAMS 0x0000000624000000| PB 0x0000000624000000| Untracked | 0 -| 97|0x0000000624400000, 0x0000000624400000, 0x0000000624800000| 0%| F| |TAMS 0x0000000624400000| PB 0x0000000624400000| Untracked | 0 -| 98|0x0000000624800000, 0x0000000624800000, 0x0000000624c00000| 0%| F| |TAMS 0x0000000624800000| PB 0x0000000624800000| Untracked | 0 -| 99|0x0000000624c00000, 0x0000000624c00000, 0x0000000625000000| 0%| F| |TAMS 0x0000000624c00000| PB 0x0000000624c00000| Untracked | 0 -| 100|0x0000000625000000, 0x0000000625000000, 0x0000000625400000| 0%| F| |TAMS 0x0000000625000000| PB 0x0000000625000000| Untracked | 0 -| 101|0x0000000625400000, 0x0000000625400000, 0x0000000625800000| 0%| F| |TAMS 0x0000000625400000| PB 0x0000000625400000| Untracked | 0 -| 102|0x0000000625800000, 0x0000000625800000, 0x0000000625c00000| 0%| F| |TAMS 0x0000000625800000| PB 0x0000000625800000| Untracked | 0 -| 103|0x0000000625c00000, 0x0000000625c00000, 0x0000000626000000| 0%| F| |TAMS 0x0000000625c00000| PB 0x0000000625c00000| Untracked | 0 -| 104|0x0000000626000000, 0x0000000626000000, 0x0000000626400000| 0%| F| |TAMS 0x0000000626000000| PB 0x0000000626000000| Untracked | 0 -| 105|0x0000000626400000, 0x0000000626400000, 0x0000000626800000| 0%| F| |TAMS 0x0000000626400000| PB 0x0000000626400000| Untracked | 0 -| 106|0x0000000626800000, 0x0000000626800000, 0x0000000626c00000| 0%| F| |TAMS 0x0000000626800000| PB 0x0000000626800000| Untracked | 0 -| 107|0x0000000626c00000, 0x0000000626c00000, 0x0000000627000000| 0%| F| |TAMS 0x0000000626c00000| PB 0x0000000626c00000| Untracked | 0 -| 108|0x0000000627000000, 0x0000000627000000, 0x0000000627400000| 0%| F| |TAMS 0x0000000627000000| PB 0x0000000627000000| Untracked | 0 -| 109|0x0000000627400000, 0x0000000627400000, 0x0000000627800000| 0%| F| |TAMS 0x0000000627400000| PB 0x0000000627400000| Untracked | 0 -| 110|0x0000000627800000, 0x0000000627800000, 0x0000000627c00000| 0%| F| |TAMS 0x0000000627800000| PB 0x0000000627800000| Untracked | 0 -| 111|0x0000000627c00000, 0x0000000627c00000, 0x0000000628000000| 0%| F| |TAMS 0x0000000627c00000| PB 0x0000000627c00000| Untracked | 0 -| 112|0x0000000628000000, 0x0000000628000000, 0x0000000628400000| 0%| F| |TAMS 0x0000000628000000| PB 0x0000000628000000| Untracked | 0 -| 113|0x0000000628400000, 0x0000000628400000, 0x0000000628800000| 0%| F| |TAMS 0x0000000628400000| PB 0x0000000628400000| Untracked | 0 -| 114|0x0000000628800000, 0x0000000628800000, 0x0000000628c00000| 0%| F| |TAMS 0x0000000628800000| PB 0x0000000628800000| Untracked | 0 -| 115|0x0000000628c00000, 0x0000000628c00000, 0x0000000629000000| 0%| F| |TAMS 0x0000000628c00000| PB 0x0000000628c00000| Untracked | 0 -| 116|0x0000000629000000, 0x0000000629000000, 0x0000000629400000| 0%| F| |TAMS 0x0000000629000000| PB 0x0000000629000000| Untracked | 0 -| 117|0x0000000629400000, 0x0000000629400000, 0x0000000629800000| 0%| F| |TAMS 0x0000000629400000| PB 0x0000000629400000| Untracked | 0 -| 118|0x0000000629800000, 0x0000000629bbcdc8, 0x0000000629c00000| 93%| S|CS|TAMS 0x0000000629800000| PB 0x0000000629800000| Complete | 0 -| 119|0x0000000629c00000, 0x0000000629c00000, 0x000000062a000000| 0%| F| |TAMS 0x0000000629c00000| PB 0x0000000629c00000| Untracked | 0 -| 120|0x000000062a000000, 0x000000062a000000, 0x000000062a400000| 0%| F| |TAMS 0x000000062a000000| PB 0x000000062a000000| Untracked | 0 -| 121|0x000000062a400000, 0x000000062a400000, 0x000000062a800000| 0%| F| |TAMS 0x000000062a400000| PB 0x000000062a400000| Untracked | 0 -| 122|0x000000062a800000, 0x000000062a800000, 0x000000062ac00000| 0%| F| |TAMS 0x000000062a800000| PB 0x000000062a800000| Untracked | 0 -| 123|0x000000062ac00000, 0x000000062aed08a0, 0x000000062b000000| 70%| E| |TAMS 0x000000062ac00000| PB 0x000000062ac00000| Complete | 0 -| 124|0x000000062b000000, 0x000000062b400000, 0x000000062b400000|100%| E|CS|TAMS 0x000000062b000000| PB 0x000000062b000000| Complete | 0 -|1999|0x00000007ffc00000, 0x00000007ffd1ec18, 0x0000000800000000| 28%| O| |TAMS 0x00000007ffc00000| PB 0x00000007ffc00000| Untracked | 0 - -Card table byte_map: [0x000073b981600000,0x000073b9825a0000] _byte_map_base: 0x000073b97e5a0000 - -Marking Bits: (CMBitMap*) 0x000073b97c059190 - Bits: [0x000073b95ca00000, 0x000073b964700000) - -Polling page: 0x000073b985b0b000 - -Metaspace: - -Usage: - Non-class: 9.67 MB used. - Class: 906.79 KB used. - Both: 10.55 MB used. - -Virtual space: - Non-class space: 64.00 MB reserved, 9.81 MB ( 15%) committed, 1 nodes. - Class space: 1.00 GB reserved, 1.00 MB ( <1%) committed, 1 nodes. - Both: 1.06 GB reserved, 10.81 MB ( <1%) committed. - -Chunk freelists: - Non-Class: 6.09 MB - Class: 14.91 MB - Both: 21.00 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. - - use_allocation_guard: 0. - - -Internal statistics: - -num_allocs_failed_limit: 0. -num_arena_births: 172. -num_arena_deaths: 0. -num_vsnodes_births: 2. -num_vsnodes_deaths: 0. -num_space_committed: 173. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 0. -num_chunks_taken_from_freelist: 469. -num_chunk_merges: 0. -num_chunk_splits: 317. -num_chunks_enlarged: 231. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=120032Kb used=505Kb max_used=505Kb free=119526Kb - bounds [0x000073b96c2c8000, 0x000073b96c538000, 0x000073b973800000] -CodeHeap 'profiled nmethods': size=120028Kb used=2160Kb max_used=2160Kb free=117867Kb - bounds [0x000073b964800000, 0x000073b964a70000, 0x000073b96bd37000] -CodeHeap 'non-nmethods': size=5700Kb used=2194Kb max_used=2212Kb free=3505Kb - bounds [0x000073b96bd37000, 0x000073b96bfa7000, 0x000073b96c2c8000] -CodeCache: size=245760Kb, used=4859Kb, max_used=4877Kb, free=240898Kb - total_blobs=2935, nmethods=1733, adapters=1109, full_count=0 -Compilation: enabled, stopped_count=0, restarted_count=0 - -Compilation events (20 events): -Event: 5.366 Thread 0x000073b97c1484b0 nmethod 1721 0x000073b964a18a88 code [0x000073b964a18be0, 0x000073b964a19068] -Event: 5.380 Thread 0x000073b97c1484b0 1722 3 org.lwjgl.vulkan.VkRect2D::nextent (10 bytes) -Event: 5.380 Thread 0x000073b97c1484b0 nmethod 1722 0x000073b964a19108 code [0x000073b964a19220, 0x000073b964a19340] -Event: 5.380 Thread 0x000073b97c1484b0 1723 3 org.lwjgl.vulkan.VkViewport::calloc (20 bytes) -Event: 5.380 Thread 0x000073b97c1484b0 nmethod 1723 0x000073b964a19408 code [0x000073b964a19540, 0x000073b964a197b0] -Event: 5.380 Thread 0x000073b97c1484b0 1724 3 org.lwjgl.vulkan.VkViewport$Buffer:: (11 bytes) -Event: 5.381 Thread 0x000073b97c1484b0 nmethod 1724 0x000073b964a19808 code [0x000073b964a19920, 0x000073b964a19a80] -Event: 5.382 Thread 0x000073b97c1484b0 1725 3 org.lwjgl.openal.ALC::check (16 bytes) -Event: 5.382 Thread 0x000073b97c1484b0 nmethod 1725 0x000073b964a19b08 code [0x000073b964a19c40, 0x000073b964a19e38] -Event: 5.385 Thread 0x000073b97c1484b0 1726 3 java.lang.StackStreamFactory$FrameBuffer::isEmpty (32 bytes) -Event: 5.385 Thread 0x000073b97c1484b0 nmethod 1726 0x000073b964a19e88 code [0x000073b964a19fa0, 0x000073b964a1a150] -Event: 5.385 Thread 0x000073b97c1484b0 1727 3 java.lang.invoke.Invokers::maybeCustomize (5 bytes) -Event: 5.385 Thread 0x000073b97c1484b0 nmethod 1727 0x000073b964a1a188 code [0x000073b964a1a2a0, 0x000073b964a1a448] -Event: 5.385 Thread 0x000073b97c1484b0 1728 3 java.lang.invoke.MethodHandle::maybeCustomize (38 bytes) -Event: 5.386 Thread 0x000073b97c1484b0 nmethod 1728 0x000073b964a1a488 code [0x000073b964a1a5e0, 0x000073b964a1aaa0] -Event: 5.434 Thread 0x000073b97c1484b0 1729 3 java.lang.StackWalker::hasOption (11 bytes) -Event: 5.434 Thread 0x000073b97c1484b0 nmethod 1729 0x000073b964a1ab08 code [0x000073b964a1ac20, 0x000073b964a1adf8] -Event: 5.434 Thread 0x000073b97c1484b0 1730 3 java.util.RegularEnumSet::contains (57 bytes) -Event: 5.434 Thread 0x000073b97c1484b0 nmethod 1730 0x000073b964a1ae08 code [0x000073b964a1af60, 0x000073b964a1b330] -Event: 5.435 Thread 0x000073b97c1484b0 1731 3 jdk.internal.org.objectweb.asm.Frame::pop (53 bytes) - -GC Heap History (2 events): -Event: 0.923 GC heap before -{Heap before GC invocations=0 (full 0): - garbage-first heap total reserved 8192000K, committed 516096K, used 25723K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 6 young (24576K), 0 survivors (0K) - Metaspace used 9080K, committed 9280K, reserved 1114112K - class space used 793K, committed 896K, reserved 1048576K -} -Event: 0.925 GC heap after -{Heap after GC invocations=1 (full 0): - garbage-first heap total reserved 8192000K, committed 516096K, used 4974K [0x000000060c000000, 0x0000000800000000) - region size 4096K, 1 young (4096K), 1 survivors (4096K) - Metaspace used 9080K, committed 9280K, reserved 1114112K - class space used 793K, committed 896K, reserved 1048576K -} - -Dll operation events (10 events): -Event: 0.001 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -Event: 0.017 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -Event: 0.025 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -Event: 0.027 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -Event: 0.075 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -Event: 0.123 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -Event: 0.128 Loaded shared library /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -Event: 0.359 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -Event: 0.362 Loaded shared library /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so - -Deoptimization events (20 events): -Event: 0.925 Thread 0x000073b97c137930 Uncommon trap: trap_request=0xffffff45 fr.pc=0x000073b96c3151b4 relative=0x00000000000001b4 -Event: 0.925 Thread 0x000073b97c137930 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000073b96c3151b4 method=java.util.concurrent.locks.ReentrantLock$NonfairSync.initialTryLock()Z @ 25 c2 -Event: 0.925 Thread 0x000073b97c137930 DEOPT PACKING pc=0x000073b96c3151b4 sp=0x000073b980714790 -Event: 0.925 Thread 0x000073b97c137930 DEOPT UNPACKING pc=0x000073b96bd8abf9 sp=0x000073b980714730 mode 2 -Event: 1.006 Thread 0x000073b97c5f94d0 Uncommon trap: trap_request=0xffffff6e fr.pc=0x000073b96c3213a8 relative=0x0000000000000588 -Event: 1.006 Thread 0x000073b97c5f94d0 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x000073b96c3213a8 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 -Event: 1.006 Thread 0x000073b97c5f94d0 DEOPT PACKING pc=0x000073b96c3213a8 sp=0x000073b95c1fd3e0 -Event: 1.006 Thread 0x000073b97c5f94d0 DEOPT UNPACKING pc=0x000073b96bd8abf9 sp=0x000073b95c1fd2d8 mode 2 -Event: 1.041 Thread 0x000073b97c5f94d0 DEOPT PACKING pc=0x000073b9649d269f sp=0x000073b95c1fd100 -Event: 1.041 Thread 0x000073b97c5f94d0 DEOPT UNPACKING pc=0x000073b96bd8b30f sp=0x000073b95c1fc540 mode 0 -Event: 1.043 Thread 0x000073b97c5f94d0 DEOPT PACKING pc=0x000073b9648b03d4 sp=0x000073b95c1fd0d0 -Event: 1.043 Thread 0x000073b97c5f94d0 DEOPT UNPACKING pc=0x000073b96bd8b30f sp=0x000073b95c1fc588 mode 0 -Event: 1.173 Thread 0x000073b97c5f94d0 Uncommon trap: trap_request=0xffffff6e fr.pc=0x000073b96c320a38 relative=0x0000000000000538 -Event: 1.173 Thread 0x000073b97c5f94d0 Uncommon trap: reason=loop_limit_check action=maybe_recompile pc=0x000073b96c320a38 method=java.util.regex.Pattern$Start.match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z @ 34 c2 -Event: 1.173 Thread 0x000073b97c5f94d0 DEOPT PACKING pc=0x000073b96c320a38 sp=0x000073b95c1fde60 -Event: 1.173 Thread 0x000073b97c5f94d0 DEOPT UNPACKING pc=0x000073b96bd8abf9 sp=0x000073b95c1fddd0 mode 2 -Event: 3.411 Thread 0x000073b97c5f94d0 Uncommon trap: trap_request=0xffffff5c fr.pc=0x000073b96c343558 relative=0x0000000000000058 -Event: 3.411 Thread 0x000073b97c5f94d0 Uncommon trap: reason=speculate_null_check action=make_not_entrant pc=0x000073b96c343558 method=sun.misc.Unsafe.putLong(Ljava/lang/Object;JJ)V @ 10 c2 -Event: 3.411 Thread 0x000073b97c5f94d0 DEOPT PACKING pc=0x000073b96c343558 sp=0x000073b95c1fe2e0 -Event: 3.411 Thread 0x000073b97c5f94d0 DEOPT UNPACKING pc=0x000073b96bd8abf9 sp=0x000073b95c1fe278 mode 2 - -Classes loaded (20 events): -Event: 0.695 Loading class java/awt/ImageCapabilities -Event: 0.695 Loading class java/awt/ImageCapabilities done -Event: 0.695 Loading class java/awt/Image$1 -Event: 0.695 Loading class sun/awt/image/SurfaceManager$ImageAccessor -Event: 0.695 Loading class sun/awt/image/SurfaceManager$ImageAccessor done -Event: 0.695 Loading class java/awt/Image$1 done -Event: 0.695 Loading class sun/awt/image/SurfaceManager -Event: 0.695 Loading class sun/awt/image/SurfaceManager done -Event: 0.695 Loading class java/awt/image/BufferedImage$1 -Event: 0.696 Loading class java/awt/image/BufferedImage$1 done -Event: 0.696 Loading class sun/awt/image/IntegerComponentRaster -Event: 0.696 Loading class sun/awt/image/IntegerComponentRaster done -Event: 0.696 Loading class java/awt/image/IndexColorModel -Event: 0.696 Loading class java/awt/image/IndexColorModel done -Event: 0.696 Loading class sun/awt/image/ShortComponentRaster -Event: 0.696 Loading class sun/awt/image/ShortComponentRaster done -Event: 0.778 Loading class java/util/function/LongFunction -Event: 0.778 Loading class java/util/function/LongFunction done -Event: 1.162 Loading class java/lang/invoke/MethodHandle$1 -Event: 1.162 Loading class java/lang/invoke/MethodHandle$1 done - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (20 events): -Event: 0.161 Thread 0x000073b97c02d0f0 Exception (0x000000062af991e0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.186 Thread 0x000073b97c02d0f0 Exception (0x000000062a875510) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.186 Thread 0x000073b97c02d0f0 Exception (0x000000062a878a60) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 863] -Event: 0.208 Thread 0x000073b97c02d0f0 Exception (0x000000062a970318) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.218 Thread 0x000073b97c02d0f0 Exception (0x000000062a9c7df8) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 0.227 Thread 0x000073b97c02d0f0 Exception (0x000000062aa31e20) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.228 Thread 0x000073b97c02d0f0 Exception (0x000000062aa3fc38) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.630 Thread 0x000073b97c5f94d0 Exception (0x000000062a7bc610) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.679 Thread 0x000073b97c5f94d0 Exception (0x000000062a23d088) -thrown [open/src/hotspot/share/classfile/systemDictionary.cpp, line 313] -Event: 0.680 Thread 0x000073b97c5f94d0 Exception (0x000000062a243060) -thrown [open/src/hotspot/share/prims/jni.cpp, line 520] -Event: 0.684 Thread 0x000073b97c5f94d0 Exception (0x000000062a26d9f8) -thrown [open/src/hotspot/share/prims/jni.cpp, line 520] -Event: 0.775 Thread 0x000073b97c5f94d0 Exception (0x0000000629ebdf58) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.775 Thread 0x000073b97c5f94d0 Exception (0x0000000629ec37a0) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.778 Thread 0x000073b97c5f94d0 Exception (0x0000000629edb8a8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.780 Thread 0x000073b97c5f94d0 Exception (0x0000000629eec778) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.796 Thread 0x000073b97c5f94d0 Exception (0x0000000629f51e28) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.802 Thread 0x000073b97c5f94d0 Exception (0x0000000629fd4668) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.934 Thread 0x000073b97c5f94d0 Exception (0x000000062b05a2d8) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 0.941 Thread 0x000073b97c5f94d0 Exception (0x000000062b114760) -thrown [open/src/hotspot/share/interpreter/linkResolver.cpp, line 795] -Event: 5.382 Thread 0x000073b8ac5a8970 Exception (0x000000062ae50888) -thrown [open/src/hotspot/share/prims/jvm.cpp, line 3093] - -VM Operations (14 events): -Event: 0.108 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.108 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.115 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.115 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.124 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.124 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.133 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.133 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.642 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.642 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.676 Executing VM operation: HandshakeAllThreads (Deoptimize) -Event: 0.676 Executing VM operation: HandshakeAllThreads (Deoptimize) done -Event: 0.923 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) -Event: 0.925 Executing VM operation: G1CollectForAllocation (G1 Evacuation Pause) done - -Memory protections (17 events): -Event: 0.001 Protecting memory [0x000073b984100000,0x000073b984104000] with protection modes 0 -Event: 0.015 Protecting memory [0x000073b980616000,0x000073b98061a000] with protection modes 0 -Event: 0.015 Protecting memory [0x000073b980516000,0x000073b98051a000] with protection modes 0 -Event: 0.016 Protecting memory [0x000073b980416000,0x000073b98041a000] with protection modes 0 -Event: 0.016 Protecting memory [0x000073b980316000,0x000073b98031a000] with protection modes 0 -Event: 0.016 Protecting memory [0x000073b980216000,0x000073b98021a000] with protection modes 0 -Event: 0.016 Protecting memory [0x000073b980116000,0x000073b98011a000] with protection modes 0 -Event: 0.016 Protecting memory [0x000073b980016000,0x000073b98001a000] with protection modes 0 -Event: 0.022 Protecting memory [0x000073b95c900000,0x000073b95c904000] with protection modes 0 -Event: 0.023 Protecting memory [0x000073b95c800000,0x000073b95c804000] with protection modes 0 -Event: 0.054 Protecting memory [0x000073b95c700000,0x000073b95c704000] with protection modes 0 -Event: 0.233 Protecting memory [0x000073b95c100000,0x000073b95c104000] with protection modes 0 -Event: 0.233 Protecting memory [0x000073b984100000,0x000073b984104000] with protection modes 0 -Event: 0.649 Protecting memory [0x000073b95c700000,0x000073b95c704000] with protection modes 0 -Event: 0.656 Protecting memory [0x000073b93f285000,0x000073b93f289000] with protection modes 0 -Event: 0.692 Protecting memory [0x000073b93f185000,0x000073b93f189000] with protection modes 0 -Event: 1.178 Protecting memory [0x000073b93f285000,0x000073b93f289000] with protection modes 0 - -Nmethod flushes (0 events): -No events - -Events (20 events): -Event: 0.015 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c13a6b0 -Event: 0.016 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c13bcf0 -Event: 0.016 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c13d290 -Event: 0.016 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c13edb0 -Event: 0.016 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c1484b0 -Event: 0.022 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c1551c0 -Event: 0.023 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c157ca0 -Event: 0.054 Thread 0x000073b97c13edb0 Thread added: 0x000073b8c80d9290 -Event: 0.233 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c5f94d0 -Event: 0.233 Thread 0x000073b97c02d0f0 Thread exited: 0x000073b97c02d0f0 -Event: 0.233 Thread 0x000073b97c02d0f0 Thread added: 0x000073b97c02d0f0 -Event: 0.631 Thread 0x000073b8c80d9290 Thread exited: 0x000073b8c80d9290 -Event: 0.648 Thread 0x000073b97c5f94d0 Thread added: 0x000073b8ac5a8970 -Event: 0.656 Thread 0x000073b97c1484b0 Thread added: 0x000073b8c442d840 -Event: 0.692 Thread 0x000073b97c5f94d0 Thread added: 0x000073b8ac760140 -Event: 0.922 Thread 0x000073b8c442d840 Thread exited: 0x000073b8c442d840 -Event: 1.178 Thread 0x000073b97c1484b0 Thread added: 0x000073b8c4466400 -Event: 1.378 Thread 0x000073b8c4466400 Thread exited: 0x000073b8c4466400 -Event: 5.382 Thread 0x000073b8ac5a8970 Thread exited: 0x000073b8ac5a8970 -Event: 5.435 Thread 0x000073b97c5f94d0 Thread exited: 0x000073b97c5f94d0 - - -Dynamic libraries: -60c000000-62b400000 rw-p 00000000 00:00 0 -62b400000-7ffc00000 ---p 00000000 00:00 0 -7ffc00000-7ffd1f000 rw-p 00dc0000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa -7ffd1f000-800000000 rw-p 00000000 00:00 0 -5ac2ec579000-5ac2ec57a000 r-xp 00000000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -5ac2ec57b000-5ac2ec57c000 r--p 00001000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -5ac2ec57c000-5ac2ec57d000 rw-p 00002000 103:03 10498468 /usr/lib/jvm/jdk-23.0.2-oracle-x64/bin/java -5ac30caa6000-5ac30caef000 rw-p 00000000 00:00 0 [heap] -73b82c000000-73b82c021000 rw-p 00000000 00:00 0 -73b82c021000-73b830000000 ---p 00000000 00:00 0 -73b830000000-73b830021000 rw-p 00000000 00:00 0 -73b830021000-73b834000000 ---p 00000000 00:00 0 -73b838000000-73b838021000 rw-p 00000000 00:00 0 -73b838021000-73b83c000000 ---p 00000000 00:00 0 -73b83c000000-73b83c021000 rw-p 00000000 00:00 0 -73b83c021000-73b840000000 ---p 00000000 00:00 0 -73b844000000-73b844021000 rw-p 00000000 00:00 0 -73b844021000-73b848000000 ---p 00000000 00:00 0 -73b848000000-73b848021000 rw-p 00000000 00:00 0 -73b848021000-73b84c000000 ---p 00000000 00:00 0 -73b850000000-73b850021000 rw-p 00000000 00:00 0 -73b850021000-73b854000000 ---p 00000000 00:00 0 -73b854000000-73b854021000 rw-p 00000000 00:00 0 -73b854021000-73b858000000 ---p 00000000 00:00 0 -73b85c000000-73b85c021000 rw-p 00000000 00:00 0 -73b85c021000-73b860000000 ---p 00000000 00:00 0 -73b860000000-73b860021000 rw-p 00000000 00:00 0 -73b860021000-73b864000000 ---p 00000000 00:00 0 -73b868000000-73b868021000 rw-p 00000000 00:00 0 -73b868021000-73b86c000000 ---p 00000000 00:00 0 -73b86c000000-73b86c021000 rw-p 00000000 00:00 0 -73b86c021000-73b870000000 ---p 00000000 00:00 0 -73b874000000-73b874021000 rw-p 00000000 00:00 0 -73b874021000-73b878000000 ---p 00000000 00:00 0 -73b878000000-73b878021000 rw-p 00000000 00:00 0 -73b878021000-73b87c000000 ---p 00000000 00:00 0 -73b880000000-73b880054000 rw-p 00000000 00:00 0 -73b880054000-73b884000000 ---p 00000000 00:00 0 -73b884000000-73b884021000 rw-p 00000000 00:00 0 -73b884021000-73b888000000 ---p 00000000 00:00 0 -73b88c000000-73b88c0c8000 rw-p 00000000 00:00 0 -73b88c0c8000-73b890000000 ---p 00000000 00:00 0 -73b890000000-73b890021000 rw-p 00000000 00:00 0 -73b890021000-73b894000000 ---p 00000000 00:00 0 -73b898000000-73b898021000 rw-p 00000000 00:00 0 -73b898021000-73b89c000000 ---p 00000000 00:00 0 -73b89d000000-73b8a3712000 r-xp 00000000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -73b8a3712000-73b8a3f30000 r--p 06711000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -73b8a3f30000-73b8a3f76000 rw-p 06f2f000 103:03 11143272 /usr/lib/x86_64-linux-gnu/libLLVM-15.so.1 -73b8a3f76000-73b8a3ff2000 rw-p 00000000 00:00 0 -73b8a4000000-73b8a4021000 rw-p 00000000 00:00 0 -73b8a4021000-73b8a8000000 ---p 00000000 00:00 0 -73b8ac000000-73b8af132000 rw-p 00000000 00:00 0 -73b8af132000-73b8b0000000 ---p 00000000 00:00 0 -73b8b0000000-73b8b027e000 rw-p 00000000 00:00 0 -73b8b027e000-73b8b4000000 ---p 00000000 00:00 0 -73b8b8000000-73b8b8021000 rw-p 00000000 00:00 0 -73b8b8021000-73b8bc000000 ---p 00000000 00:00 0 -73b8bc000000-73b8bc021000 rw-p 00000000 00:00 0 -73b8bc021000-73b8c0000000 ---p 00000000 00:00 0 -73b8c2e00000-73b8c2f25000 r--p 00000000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -73b8c2f25000-73b8c33e5000 r-xp 00125000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -73b8c33e5000-73b8c3519000 r--p 005e5000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -73b8c3519000-73b8c351a000 ---p 00719000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -73b8c351a000-73b8c357d000 r--p 00719000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -73b8c357d000-73b8c3587000 rw-p 0077c000 103:03 4325443 /tmp/lwjgl_codex/3.3.6+1/x64/libshaderc.so -73b8c3587000-73b8c3598000 rw-p 00000000 00:00 0 -73b8c3600000-73b8c3601000 ---p 00000000 00:00 0 -73b8c3601000-73b8c3e01000 rw-p 00000000 00:00 0 -73b8c4000000-73b8c4481000 rw-p 00000000 00:00 0 -73b8c4481000-73b8c8000000 ---p 00000000 00:00 0 -73b8c8000000-73b8c8353000 rw-p 00000000 00:00 0 -73b8c8353000-73b8cc000000 ---p 00000000 00:00 0 -73b8cc400000-73b8cc401000 ---p 00000000 00:00 0 -73b8cc401000-73b8ccc01000 rw-p 00000000 00:00 0 -73b8cce00000-73b8cce01000 ---p 00000000 00:00 0 -73b8cce01000-73b8cd601000 rw-p 00000000 00:00 0 -73b8cd800000-73b8cd801000 ---p 00000000 00:00 0 -73b8cd801000-73b8ce001000 rw-p 00000000 00:00 0 -73b8ce200000-73b8ce201000 ---p 00000000 00:00 0 -73b8ce201000-73b8cea01000 rw-p 00000000 00:00 0 -73b8cec00000-73b8cec01000 ---p 00000000 00:00 0 -73b8cec01000-73b8cf401000 rw-p 00000000 00:00 0 -73b8cf600000-73b8cf62f000 r--p 00000000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -73b8cf62f000-73b8cfd02000 r-xp 0002f000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -73b8cfd02000-73b8cfe24000 r--p 00702000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -73b8cfe24000-73b8cfe35000 r--p 00823000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -73b8cfe35000-73b8cfeb3000 rw-p 00834000 103:03 11142259 /usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.560.35.03 -73b8cfeb3000-73b8cfec7000 rw-p 00000000 00:00 0 -73b8d0000000-73b8d0021000 rw-p 00000000 00:00 0 -73b8d0021000-73b8d4000000 ---p 00000000 00:00 0 -73b8d4000000-73b8d4021000 rw-p 00000000 00:00 0 -73b8d4021000-73b8d8000000 ---p 00000000 00:00 0 -73b8d8000000-73b8d8200000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8d8200000-73b8d8ef5000 r--p 00000000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -73b8d8ef5000-73b8d98d8000 r-xp 00cf5000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -73b8d98d8000-73b8d9ce9000 r--p 016d8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -73b8d9ce9000-73b8da16b000 r--p 01ae8000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -73b8da16b000-73b8da173000 rw-p 01f6a000 103:03 11141715 /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so -73b8da173000-73b8da17e000 rw-p 00000000 00:00 0 -73b8da200000-73b8da201000 ---p 00000000 00:00 0 -73b8da201000-73b8daa01000 rw-p 00000000 00:00 0 -73b8dac00000-73b8dac01000 ---p 00000000 00:00 0 -73b8dac01000-73b8db401000 rw-p 00000000 00:00 0 -73b8db600000-73b8db601000 ---p 00000000 00:00 0 -73b8db601000-73b8dbe01000 rw-p 00000000 00:00 0 -73b8dc000000-73b8dc021000 rw-p 00000000 00:00 0 -73b8dc021000-73b8e0000000 ---p 00000000 00:00 0 -73b8e0000000-73b8e0021000 rw-p 00000000 00:00 0 -73b8e0021000-73b8e4000000 ---p 00000000 00:00 0 -73b8e41fd000-73b8e42fd000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8e42fd000-73b8e42fe000 ---p 00000000 00:00 0 -73b8e42fe000-73b8e43fe000 rw-p 00000000 00:00 0 -73b8e43fe000-73b8e43ff000 ---p 00000000 00:00 0 -73b8e43ff000-73b8e44ff000 rw-p 00000000 00:00 0 -73b8e44ff000-73b8e4500000 ---p 00000000 00:00 0 -73b8e4500000-73b8e4600000 rw-p 00000000 00:00 0 -73b8e4600000-73b8e4601000 ---p 00000000 00:00 0 -73b8e4601000-73b8e4e01000 rw-p 00000000 00:00 0 -73b8e4eff000-73b8e4f00000 ---p 00000000 00:00 0 -73b8e4f00000-73b8e5000000 rw-p 00000000 00:00 0 -73b8e5000000-73b8e5001000 ---p 00000000 00:00 0 -73b8e5001000-73b8e5801000 rw-p 00000000 00:00 0 -73b8e58ff000-73b8e5900000 ---p 00000000 00:00 0 -73b8e5900000-73b8e5a00000 rw-p 00000000 00:00 0 -73b8e5a00000-73b8e5a01000 ---p 00000000 00:00 0 -73b8e5a01000-73b8e6201000 rw-p 00000000 00:00 0 -73b8e623f000-73b8e62bf000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8e62bf000-73b8e62ff000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8e62ff000-73b8e6300000 ---p 00000000 00:00 0 -73b8e6300000-73b8e6400000 rw-p 00000000 00:00 0 -73b8e6400000-73b8e648d000 r--p 00000000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -73b8e648d000-73b8e6bf5000 r-xp 0008d000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -73b8e6bf5000-73b8e7482000 r--p 007f5000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -73b8e7482000-73b8e74c4000 r--p 01081000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -73b8e74c4000-73b8e74c7000 rw-p 010c3000 103:03 11145574 /usr/lib/x86_64-linux-gnu/libvulkan_intel.so -73b8e74c7000-73b8e74cd000 rw-p 00000000 00:00 0 -73b8e74ff000-73b8e7500000 ---p 00000000 00:00 0 -73b8e7500000-73b8e7600000 rw-p 00000000 00:00 0 -73b8e7600000-73b8e765b000 r--p 00000000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -73b8e765b000-73b8e79d9000 r-xp 0005b000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -73b8e79d9000-73b8e7dd5000 r--p 003d9000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -73b8e7dd5000-73b8e7e10000 r--p 007d4000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -73b8e7e10000-73b8e7e15000 rw-p 0080f000 103:03 11145761 /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so -73b8e7e15000-73b8e7e40000 rw-p 00000000 00:00 0 -73b8e7e60000-73b8e7ea0000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8e7ea0000-73b8e7ec0000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8e7ec0000-73b8e7f00000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8e7f00000-73b8e8000000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8e8000000-73b8e8021000 rw-p 00000000 00:00 0 -73b8e8021000-73b8ec000000 ---p 00000000 00:00 0 -73b8ec000000-73b8ec021000 rw-p 00000000 00:00 0 -73b8ec021000-73b8f0000000 ---p 00000000 00:00 0 -73b8f0000000-73b8f0200000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f0200000-73b8f0222000 r-xp 00000000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -73b8f0222000-73b8f0421000 ---p 00022000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -73b8f0421000-73b8f0429000 r--p 00021000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -73b8f0429000-73b8f042a000 rw-p 00029000 103:03 11141901 /usr/lib/x86_64-linux-gnu/libnvidia-allocator.so.560.35.03 -73b8f042a000-73b8f042b000 rw-p 00000000 00:00 0 -73b8f043b000-73b8f04bb000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f04bb000-73b8f05bb000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f05bb000-73b8f0800000 rw-s 00000000 00:01 2055 /memfd:/.nvidia_drv.XXXXXX (deleted) -73b8f0800000-73b8f086e000 r--p 00000000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -73b8f086e000-73b8f0dd5000 r-xp 0006e000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -73b8f0dd5000-73b8f14e8000 r--p 005d5000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -73b8f14e8000-73b8f14e9000 ---p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -73b8f14e9000-73b8f1526000 r--p 00ce8000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -73b8f1526000-73b8f1529000 rw-p 00d25000 103:03 11145747 /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so -73b8f1529000-73b8f152b000 rw-p 00000000 00:00 0 -73b8f152d000-73b8f1540000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f1540000-73b8f1560000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f1560000-73b8f15a0000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f15c0000-73b8f1600000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f1600000-73b8f17c4000 r--p 00000000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -73b8f17c4000-73b8f34c4000 r-xp 001c4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -73b8f34c4000-73b8f3b39000 r--p 01ec4000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -73b8f3b39000-73b8f3b3a000 ---p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -73b8f3b3a000-73b8f3d1a000 r--p 02539000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -73b8f3d1a000-73b8f3d93000 rw-p 02719000 103:03 11142260 /usr/lib/x86_64-linux-gnu/libnvidia-gpucomp.so.560.35.03 -73b8f3d93000-73b8f3e08000 rw-p 00000000 00:00 0 -73b8f3e1a000-73b8f3e2d000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f3e4d000-73b8f3e60000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f3e60000-73b8f3ea0000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f3ea0000-73b8f3ec0000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f3ec0000-73b8f3f00000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f3f00000-73b8f4000000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8f4000000-73b8f43e0000 rw-p 00000000 00:00 0 -73b8f43e0000-73b8f4400000 ---p 00000000 00:00 0 -73b8f4400000-73b8f49f0000 rw-p 00000000 00:00 0 -73b8f49f0000-73b8f8000000 ---p 00000000 00:00 0 -73b8f8000000-73b8f8021000 rw-p 00000000 00:00 0 -73b8f8021000-73b8fc000000 ---p 00000000 00:00 0 -73b8fc02d000-73b8fc040000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8fc040000-73b8fc080000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8fc080000-73b8fc100000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8fc100000-73b8fc200000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8fc200000-73b8fc201000 r--p 00000000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -73b8fc201000-73b8fc202000 r-xp 00001000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -73b8fc202000-73b8fde1c000 r--p 00002000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -73b8fde1c000-73b8fde1d000 r--p 01c1b000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -73b8fde1d000-73b8fde1e000 rw-p 01c1c000 103:03 11145182 /usr/lib/x86_64-linux-gnu/libicudata.so.70.1 -73b8fde2d000-73b8fde4d000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8fde4d000-73b8fdecd000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8fdecd000-73b8fdee0000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8fdee0000-73b8fdf20000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8fdf20000-73b8fdf40000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8fdf40000-73b8fdf80000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b8fdf80000-73b8fe000000 rw-s 00000000 00:06 964 /dev/nvidia0 -73b8fe000000-73b8fed91000 rw-p 00001000 103:03 10498862 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/classes.jsa -73b8fed91000-73b8ff000000 ---p 00000000 00:00 0 -73b8ff000000-73b8ff030000 rw-p 00000000 00:00 0 -73b8ff030000-73b8ff0b0000 rw-p 00000000 00:00 0 -73b8ff0b0000-73b8ff0e0000 rw-p 00000000 00:00 0 -73b8ff0e0000-73b8ff100000 ---p 00000000 00:00 0 -73b8ff100000-73b8ff120000 rw-p 00000000 00:00 0 -73b8ff120000-73b93f000000 ---p 00000000 00:00 0 -73b93f004000-73b93f044000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b93f044000-73b93f185000 rw-s 00000000 103:03 13372247 /home/codex/.cache/mesa_shader_cache/index -73b93f185000-73b93f189000 ---p 00000000 00:00 0 -73b93f189000-73b93f285000 rw-p 00000000 00:00 0 -73b93f285000-73b93f289000 ---p 00000000 00:00 0 -73b93f289000-73b93f385000 rw-p 00000000 00:00 0 -73b93f400000-73b93f493000 r--p 00000000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -73b93f493000-73b93f8e6000 r-xp 00093000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -73b93f8e6000-73b93fdfc000 r--p 004e6000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -73b93fdfc000-73b93fe34000 r--p 009fb000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -73b93fe34000-73b93fe44000 rw-p 00a33000 103:03 11145771 /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so -73b93fe44000-73b93fe49000 rw-p 00000000 00:00 0 -73b93fe58000-73b93fe78000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b93fe78000-73b93fe98000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b93fe98000-73b93fe9a000 r--p 00000000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -73b93fe9a000-73b93fea3000 r-xp 00002000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -73b93fea3000-73b93fea6000 r--p 0000b000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -73b93fea6000-73b93fea7000 ---p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -73b93fea7000-73b93fea8000 r--p 0000e000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -73b93fea8000-73b93fea9000 rw-p 0000f000 103:03 11144775 /usr/lib/x86_64-linux-gnu/libVkLayer_MESA_device_select.so -73b93fea9000-73b93feab000 rw-p 00000000 00:00 0 -73b93feab000-73b93feaf000 r--p 00000000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -73b93feaf000-73b93fecb000 r-xp 00004000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -73b93fecb000-73b93fed1000 r--p 00020000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -73b93fed1000-73b93fed2000 ---p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -73b93fed2000-73b93fed4000 r--p 00026000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -73b93fed4000-73b93fed5000 rw-p 00028000 103:03 11280499 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-session-manager.so -73b93fed5000-73b93fedf000 r--p 00000000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -73b93fedf000-73b93fee9000 r-xp 0000a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -73b93fee9000-73b93fef0000 r--p 00014000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -73b93fef0000-73b93fef9000 r--p 0001a000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -73b93fef9000-73b93fefa000 rw-p 00023000 103:03 11272628 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-adapter.so -73b93fefa000-73b93ff06000 r--p 00000000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -73b93ff06000-73b93ff26000 r-xp 0000c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -73b93ff26000-73b93ff32000 r--p 0002c000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -73b93ff32000-73b93ff3c000 r--p 00037000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -73b93ff3c000-73b93ff3d000 rw-p 00041000 103:03 11272648 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-node.so -73b93ff3d000-73b93ff3f000 r--p 00000000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -73b93ff3f000-73b93ffaa000 r-xp 00002000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -73b93ffaa000-73b93ffd2000 r--p 0006d000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -73b93ffd2000-73b93ffd3000 r--p 00094000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -73b93ffd3000-73b93ffd4000 rw-p 00095000 103:03 11144033 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4 -73b93ffd4000-73b93ffda000 r--p 00000000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -73b93ffda000-73b93fff4000 r-xp 00006000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -73b93fff4000-73b93fffb000 r--p 00020000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -73b93fffb000-73b93fffc000 ---p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -73b93fffc000-73b93fffd000 r--p 00027000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -73b93fffd000-73b93fffe000 rw-p 00028000 103:03 11145798 /usr/lib/x86_64-linux-gnu/libselinux.so.1 -73b93fffe000-73b940000000 rw-p 00000000 00:00 0 -73b940000000-73b940021000 rw-p 00000000 00:00 0 -73b940021000-73b944000000 ---p 00000000 00:00 0 -73b944000000-73b944021000 rw-p 00000000 00:00 0 -73b944021000-73b948000000 ---p 00000000 00:00 0 -73b948005000-73b948006000 rw-s 00000000 00:06 964 /dev/nvidia0 -73b948006000-73b94800a000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b94800a000-73b94800b000 rw-s 00000000 00:06 964 /dev/nvidia0 -73b94800b000-73b94800f000 r--p 00000000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -73b94800f000-73b94801f000 r-xp 00004000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -73b94801f000-73b948022000 r--p 00014000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -73b948022000-73b948023000 r--p 00016000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -73b948023000-73b948024000 rw-p 00017000 103:03 11141743 /usr/lib/x86_64-linux-gnu/libVkLayer_utils.so -73b948024000-73b948037000 r--p 00000000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -73b948037000-73b948056000 r-xp 00013000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -73b948056000-73b948063000 r--p 00032000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -73b948063000-73b948073000 r--p 0003e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -73b948073000-73b948074000 rw-p 0004e000 103:03 11280487 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-protocol-native.so -73b948074000-73b94807f000 r--p 00000000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -73b94807f000-73b9480ad000 r-xp 0000b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -73b9480ad000-73b9480bf000 r--p 00039000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -73b9480bf000-73b9480c0000 ---p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -73b9480c0000-73b9480c1000 r--p 0004b000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -73b9480c1000-73b9480c2000 rw-p 0004c000 103:03 11141690 /usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13 -73b9480c2000-73b9480d1000 r--p 00000000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -73b9480d1000-73b9481b7000 r-xp 0000f000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -73b9481b7000-73b9481f5000 r--p 000f5000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -73b9481f5000-73b9481f6000 ---p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -73b9481f6000-73b9481f9000 r--p 00133000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -73b9481f9000-73b9481ff000 rw-p 00136000 103:03 11144869 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.3.4 -73b9481ff000-73b948200000 rw-p 00000000 00:00 0 -73b948200000-73b948216000 r--p 00000000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -73b948216000-73b948306000 r-xp 00016000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -73b948306000-73b948379000 r--p 00106000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -73b948379000-73b948380000 r--p 00178000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -73b948380000-73b948387000 rw-p 0017f000 103:03 4325442 /tmp/lwjgl_codex/3.3.6+1/x64/libopenal.so -73b948387000-73b948402000 rw-p 00000000 00:00 0 -73b948402000-73b948404000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b948404000-73b948405000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b948405000-73b94846b000 r--p 00000000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -73b94846b000-73b94855e000 r-xp 00066000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -73b94855e000-73b9485ea000 r--p 00159000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -73b9485ea000-73b9485fd000 r--p 001e4000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -73b9485fd000-73b9485fe000 rw-p 001f7000 103:03 11145212 /usr/lib/x86_64-linux-gnu/libicuuc.so.70.1 -73b9485fe000-73b948600000 rw-p 00000000 00:00 0 -73b948600000-73b94869a000 r--p 00000000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -73b94869a000-73b9487ab000 r-xp 0009a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -73b9487ab000-73b94881a000 r--p 001ab000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -73b94881a000-73b94881b000 ---p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -73b94881b000-73b948826000 r--p 0021a000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -73b948826000-73b948829000 rw-p 00225000 103:03 11141372 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 -73b948829000-73b94882c000 rw-p 00000000 00:00 0 -73b94882c000-73b94882d000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b94882d000-73b948831000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b948831000-73b948835000 r--p 00000000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -73b948835000-73b94884b000 r-xp 00004000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -73b94884b000-73b948855000 r--p 0001a000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -73b948855000-73b948856000 r--p 00023000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -73b948856000-73b948857000 rw-p 00024000 103:03 11144961 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0.32.1 -73b948857000-73b94886a000 r--p 00000000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -73b94886a000-73b9488e9000 r-xp 00013000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -73b9488e9000-73b948914000 r--p 00092000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -73b948914000-73b948915000 ---p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -73b948915000-73b94891c000 r--p 000bd000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -73b94891c000-73b94891d000 rw-p 000c4000 103:03 11141516 /usr/lib/x86_64-linux-gnu/libsystemd.so.0.32.0 -73b94891d000-73b94891e000 rw-p 00000000 00:00 0 -73b94891e000-73b948951000 r--p 00000000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -73b948951000-73b9489b4000 r-xp 00033000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -73b9489b4000-73b9489d3000 r--p 00096000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -73b9489d3000-73b9489fe000 r--p 000b4000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -73b9489fe000-73b9489ff000 rw-p 000df000 103:03 11143924 /usr/lib/x86_64-linux-gnu/libpipewire-0.3.so.0.1003.0 -73b9489ff000-73b949322000 rw-p 00000000 00:00 0 -73b949322000-73b949323000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b949323000-73b949325000 r--p 00000000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -73b949325000-73b94933e000 r-xp 00002000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -73b94933e000-73b949340000 r--p 0001b000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -73b949340000-73b949341000 ---p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -73b949341000-73b949342000 r--p 0001d000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -73b949342000-73b949343000 rw-p 0001e000 103:03 11145311 /usr/lib/x86_64-linux-gnu/liblz4.so.1.9.3 -73b949343000-73b949344000 rw-s 00044000 00:01 2055 /memfd:/.nvidia_drv.XXXXXX (deleted) -73b949344000-73b949345000 rw-s 00000000 00:06 964 /dev/nvidia0 -73b949345000-73b949347000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b949347000-73b94934b000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b94934b000-73b94934d000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b94934d000-73b94934f000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b94934f000-73b949353000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b949353000-73b949363000 rw-s 00000000 00:06 964 /dev/nvidia0 -73b949363000-73b949367000 r--p 00000000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -73b949367000-73b94937c000 r-xp 00004000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -73b94937c000-73b949382000 r--p 00019000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -73b949382000-73b949383000 ---p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -73b949383000-73b949385000 r--p 0001f000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -73b949385000-73b949386000 rw-p 00021000 103:03 11280465 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-support.so -73b949386000-73b9493f6000 r-xp 00000000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -73b9493f6000-73b9493f7000 ---p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -73b9493f7000-73b9493fc000 r--p 00070000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -73b9493fc000-73b9493fe000 rw-p 00075000 103:03 10498756 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt_xawt.so -73b9493fe000-73b949400000 rw-p 00000000 00:00 0 -73b949400000-73b949401000 ---p 00000000 00:00 0 -73b949401000-73b949c01000 rw-p 00000000 00:00 0 -73b949c01000-73b949c02000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b949c1e000-73b949c4d000 r--p 00000000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -73b949c4d000-73b949da0000 r-xp 0002f000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -73b949da0000-73b949df4000 r--p 00182000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -73b949df4000-73b949df5000 ---p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -73b949df5000-73b949dfe000 r--p 001d6000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -73b949dfe000-73b949dff000 rw-p 001df000 103:03 11141796 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.13 -73b949dff000-73b949e00000 rw-p 00000000 00:00 0 -73b949e00000-73b94a041000 r-xp 00000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -73b94a041000-73b94a062000 rwxp 00241000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -73b94a062000-73b94a200000 r-xp 00262000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -73b94a200000-73b94ae00000 r-xp 00400000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -73b94ae00000-73b94bcab000 r-xp 01000000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -73b94bcab000-73b94be10000 r--p 01eaa000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -73b94be10000-73b94be7e000 rw-p 0200f000 103:03 11142244 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.560.35.03 -73b94be7e000-73b94be9c000 rw-p 00000000 00:00 0 -73b94be9c000-73b94be9d000 rw-s 00000000 00:06 964 /dev/nvidia0 -73b94be9d000-73b94be9f000 r--p 00000000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -73b94be9f000-73b94bea7000 r-xp 00002000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -73b94bea7000-73b94bea9000 r--p 0000a000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -73b94bea9000-73b94beaa000 r--p 0000b000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -73b94beaa000-73b94beab000 rw-p 0000c000 103:03 11280481 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-metadata.so -73b94beab000-73b94bead000 r--p 00000000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -73b94bead000-73b94beb5000 r-xp 00002000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -73b94beb5000-73b94beb6000 r--p 0000a000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -73b94beb6000-73b94beb7000 ---p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -73b94beb7000-73b94beb8000 r--p 0000b000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -73b94beb8000-73b94beb9000 rw-p 0000c000 103:03 11272639 /usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-client-device.so -73b94beb9000-73b94bee8000 r--p 00000000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -73b94bee8000-73b94bfa4000 r-xp 0002f000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -73b94bfa4000-73b94bfef000 r--p 000eb000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -73b94bfef000-73b94bffd000 r--p 00135000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -73b94bffd000-73b94bfff000 rw-p 00143000 103:03 11145772 /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so -73b94bfff000-73b94c000000 rw-p 00000000 00:00 0 -73b94c000000-73b94c021000 rw-p 00000000 00:00 0 -73b94c021000-73b950000000 ---p 00000000 00:00 0 -73b950000000-73b950021000 rw-p 00000000 00:00 0 -73b950021000-73b954000000 ---p 00000000 00:00 0 -73b954000000-73b954004000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b954004000-73b954006000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b954006000-73b954008000 r--p 00000000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -73b954008000-73b95400b000 r-xp 00002000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -73b95400b000-73b95400c000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -73b95400c000-73b95400d000 r--p 00005000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -73b95400d000-73b95400e000 rw-p 00006000 103:03 11144257 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0 -73b95400e000-73b9540cf000 r-xp 00000000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -73b9540cf000-73b9540d0000 r--p 000c0000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -73b9540d0000-73b9540db000 rw-p 000c1000 103:03 10498752 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libawt.so -73b9540db000-73b954100000 rw-p 00000000 00:00 0 -73b954100000-73b954103000 r--p 00000000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -73b954103000-73b954124000 r-xp 00003000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -73b954124000-73b954130000 r--p 00024000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -73b954130000-73b954131000 ---p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -73b954131000-73b954132000 r--p 00030000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -73b954132000-73b954133000 rw-p 00031000 103:03 11142216 /usr/lib/x86_64-linux-gnu/liblzma.so.5.4.1 -73b954133000-73b954141000 r--p 00000000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -73b954141000-73b954152000 r-xp 0000e000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -73b954152000-73b954160000 r--p 0001f000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -73b954160000-73b954164000 r--p 0002c000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -73b954164000-73b954165000 rw-p 00030000 103:03 11141719 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.3 -73b954165000-73b95416d000 r--p 00000000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -73b95416d000-73b95418b000 r-xp 00008000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -73b95418b000-73b954198000 r--p 00026000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -73b954198000-73b95419a000 r--p 00032000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -73b95419a000-73b95419b000 rw-p 00034000 103:03 11144732 /usr/lib/x86_64-linux-gnu/libedit.so.2.0.68 -73b95419b000-73b95419f000 rw-p 00000000 00:00 0 -73b95419f000-73b9541a1000 r--p 00000000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -73b9541a1000-73b9541a8000 r-xp 00002000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -73b9541a8000-73b9541a9000 r--p 00009000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -73b9541a9000-73b9541aa000 ---p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -73b9541aa000-73b9541ab000 r--p 0000a000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -73b9541ab000-73b9541ac000 rw-p 0000b000 103:03 11144791 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0 -73b9541ac000-73b9541af000 r--p 00000000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -73b9541af000-73b9541c6000 r-xp 00003000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -73b9541c6000-73b9541ca000 r--p 0001a000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -73b9541ca000-73b9541cb000 r--p 0001d000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -73b9541cb000-73b9541cc000 rw-p 0001e000 103:03 11141389 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 -73b9541cc000-73b9541d0000 r--p 00000000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -73b9541d0000-73b9541ef000 r-xp 00004000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -73b9541ef000-73b9541f9000 r--p 00023000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -73b9541f9000-73b9541fa000 ---p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -73b9541fa000-73b9541fc000 r--p 0002d000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -73b9541fc000-73b9541fd000 rw-p 0002f000 103:03 11141616 /usr/lib/x86_64-linux-gnu/libexpat.so.1.8.7 -73b9541fd000-73b954202000 r--p 00000000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -73b954202000-73b95420d000 r-xp 00005000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -73b95420d000-73b954211000 r--p 00010000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -73b954211000-73b954212000 ---p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -73b954212000-73b954213000 r--p 00014000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -73b954213000-73b954214000 rw-p 00015000 103:03 11141525 /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0 -73b954214000-73b954215000 r--p 00000000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -73b954215000-73b954216000 r-xp 00001000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -73b954216000-73b954217000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -73b954217000-73b954218000 r--p 00002000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -73b954218000-73b954219000 rw-p 00003000 103:03 11146139 /usr/lib/x86_64-linux-gnu/libxshmfence.so.1.0.0 -73b954219000-73b95421c000 r--p 00000000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -73b95421c000-73b95421f000 r-xp 00003000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -73b95421f000-73b954220000 r--p 00006000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -73b954220000-73b954221000 ---p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -73b954221000-73b954222000 r--p 00007000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -73b954222000-73b954223000 rw-p 00008000 103:03 11146105 /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1.0.0 -73b954223000-73b954226000 r--p 00000000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -73b954226000-73b954229000 r-xp 00003000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -73b954229000-73b95422a000 r--p 00006000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -73b95422a000-73b95422b000 ---p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -73b95422b000-73b95422c000 r--p 00007000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -73b95422c000-73b95422d000 rw-p 00008000 103:03 11146109 /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0.0.0 -73b95422d000-73b954237000 r--p 00000000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -73b954237000-73b9542e9000 r-xp 0000a000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -73b9542e9000-73b9542fa000 r--p 000bc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -73b9542fa000-73b9542fb000 r--p 000cc000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -73b9542fb000-73b9542fc000 rw-p 000cd000 103:03 11146163 /usr/lib/x86_64-linux-gnu/libzstd.so.1.4.8 -73b9542fc000-73b95430c000 r--p 00000000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -73b95430c000-73b95436a000 r-xp 00010000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -73b95436a000-73b954386000 r--p 0006e000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -73b954386000-73b954387000 ---p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -73b954387000-73b95438d000 r--p 0008a000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -73b95438d000-73b95438e000 rw-p 00090000 103:03 11142258 /usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.560.35.03 -73b95438e000-73b954396000 rw-p 00000000 00:00 0 -73b954396000-73b9543e7000 r--p 00000000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -73b9543e7000-73b954443000 r-xp 00051000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -73b954443000-73b954478000 rwxp 000ad000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -73b954478000-73b954479000 r-xp 000e2000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -73b954479000-73b954499000 r--p 000e3000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -73b954499000-73b9544b9000 r--p 00102000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -73b9544b9000-73b9544be000 rw-p 00122000 103:03 11142223 /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.560.35.03 -73b9544be000-73b9544c0000 rw-p 00000000 00:00 0 -73b9544c0000-73b9544d9000 r--p 00000000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -73b9544d9000-73b954565000 r-xp 00019000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -73b954565000-73b9545fa000 r--p 000a5000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -73b9545fa000-73b9545fb000 ---p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -73b9545fb000-73b9545fc000 r--p 0013a000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -73b9545fc000-73b954600000 rw-p 0013b000 103:03 11141832 /usr/lib/x86_64-linux-gnu/libX11.so.6.4.0 -73b954600000-73b955000000 rw-p 00000000 00:00 0 -73b955000000-73b955f06000 r--p 00000000 103:03 10618858 /usr/lib/locale/locale-archive -73b955f06000-73b955f07000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b955f07000-73b955f08000 r--p 00000000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -73b955f08000-73b955f09000 r-xp 00001000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -73b955f09000-73b955f0a000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -73b955f0a000-73b955f0b000 r--p 00002000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -73b955f0b000-73b955f0c000 rw-p 00003000 103:03 11146103 /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0.0.0 -73b955f0c000-73b955f0d000 r--p 00000000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -73b955f0d000-73b955f0e000 r-xp 00001000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -73b955f0e000-73b955f0f000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -73b955f0f000-73b955f10000 r--p 00002000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -73b955f10000-73b955f11000 rw-p 00003000 103:03 11146091 /usr/lib/x86_64-linux-gnu/libxcb-present.so.0.0.0 -73b955f11000-73b955f16000 r--p 00000000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -73b955f16000-73b955f1c000 r-xp 00005000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -73b955f1c000-73b955f1f000 r--p 0000b000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -73b955f1f000-73b955f21000 r--p 0000d000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -73b955f21000-73b955f22000 rw-p 0000f000 103:03 11141799 /usr/lib/x86_64-linux-gnu/libwayland-client.so.0.22.0 -73b955f22000-73b955f25000 r--p 00000000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -73b955f25000-73b955f39000 r-xp 00003000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -73b955f39000-73b955f3d000 r--p 00017000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -73b955f3d000-73b955f3e000 ---p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -73b955f3e000-73b955f3f000 r--p 0001b000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -73b955f3f000-73b955f40000 rw-p 0001c000 103:03 11144737 /usr/lib/x86_64-linux-gnu/libelf-0.186.so -73b955f40000-73b955f43000 r--p 00000000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -73b955f43000-73b955f49000 r-xp 00003000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -73b955f49000-73b955f4b000 r--p 00009000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -73b955f4b000-73b955f4c000 r--p 0000a000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -73b955f4c000-73b955f4d000 rw-p 0000b000 103:03 11141807 /usr/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0 -73b955f4d000-73b955f4f000 r--p 00000000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -73b955f4f000-73b955f51000 r-xp 00002000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -73b955f51000-73b955f52000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -73b955f52000-73b955f53000 r--p 00004000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -73b955f53000-73b955f54000 rw-p 00005000 103:03 11146081 /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0.0.0 -73b955f54000-73b955f5b000 r--p 00000000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -73b955f5b000-73b955f61000 r-xp 00007000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -73b955f61000-73b955f64000 r--p 0000d000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -73b955f64000-73b955f65000 ---p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -73b955f65000-73b955f66000 r--p 00010000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -73b955f66000-73b955f67000 rw-p 00011000 103:03 11146093 /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0.1.0 -73b955f67000-73b955f72000 r--p 00000000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -73b955f72000-73b955f7b000 r-xp 0000b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -73b955f7b000-73b955f80000 r--p 00014000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -73b955f80000-73b955f81000 ---p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -73b955f81000-73b955f83000 r--p 00019000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -73b955f83000-73b955f84000 rw-p 0001b000 103:03 11146083 /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0.0.0 -73b955f84000-73b955f8a000 r--p 00000000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -73b955f8a000-73b955fd4000 r-xp 00006000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -73b955fd4000-73b955ffe000 r--p 00050000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -73b955ffe000-73b955fff000 r--p 00079000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -73b955fff000-73b956000000 rw-p 0007a000 103:03 11141582 /usr/lib/x86_64-linux-gnu/libvulkan.so.1.3.280 -73b956000000-73b958000000 rw-p 00000000 00:00 0 -73b958000000-73b958021000 rw-p 00000000 00:00 0 -73b958021000-73b95c000000 ---p 00000000 00:00 0 -73b95c000000-73b95c004000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b95c004000-73b95c005000 r--p 00000000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -73b95c005000-73b95c007000 r-xp 00001000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -73b95c007000-73b95c008000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -73b95c008000-73b95c009000 r--p 00003000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -73b95c009000-73b95c00a000 rw-p 00004000 103:03 11142265 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.560.35.03 -73b95c00a000-73b95c00b000 r--p 00000000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -73b95c00b000-73b95c00c000 r-xp 00001000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -73b95c00c000-73b95c00d000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -73b95c00d000-73b95c00e000 r--p 00002000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -73b95c00e000-73b95c00f000 rw-p 00003000 103:03 11141583 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0 -73b95c01b000-73b95c01d000 r--p 00000000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -73b95c01d000-73b95c024000 r-xp 00002000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -73b95c024000-73b95c026000 r--p 00009000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -73b95c026000-73b95c027000 r--p 0000a000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -73b95c027000-73b95c028000 rw-p 0000b000 103:03 11144251 /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 -73b95c028000-73b95c02b000 r--p 00000000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -73b95c02b000-73b95c037000 r-xp 00003000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -73b95c037000-73b95c03a000 r--p 0000f000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -73b95c03a000-73b95c03b000 r--p 00011000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -73b95c03b000-73b95c03c000 rw-p 00012000 103:03 11144239 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0 -73b95c03c000-73b95c040000 r--p 00000000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -73b95c040000-73b95c04b000 r-xp 00004000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -73b95c04b000-73b95c04f000 r--p 0000f000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -73b95c04f000-73b95c050000 r--p 00012000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -73b95c050000-73b95c051000 rw-p 00013000 103:03 11144231 /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0 -73b95c051000-73b95c055000 r--p 00000000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -73b95c055000-73b95c062000 r-xp 00004000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -73b95c062000-73b95c065000 r--p 00011000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -73b95c065000-73b95c066000 ---p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -73b95c066000-73b95c067000 r--p 00014000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -73b95c067000-73b95c068000 rw-p 00015000 103:03 11144519 /usr/lib/x86_64-linux-gnu/libbsd.so.0.11.5 -73b95c068000-73b95c069000 rw-p 00000000 00:00 0 -73b95c069000-73b95c079000 r--p 00000000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -73b95c079000-73b95c09a000 r-xp 00010000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -73b95c09a000-73b95c0d6000 r--p 00031000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -73b95c0d6000-73b95c0da000 r--p 0006c000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -73b95c0da000-73b95c0dd000 rw-p 00070000 103:03 4325441 /tmp/lwjgl_codex/3.3.6+1/x64/libglfw.so -73b95c0dd000-73b95c100000 rw-p 00000000 00:00 0 -73b95c100000-73b95c104000 ---p 00000000 00:00 0 -73b95c104000-73b95c200000 rw-p 00000000 00:00 0 -73b95c200000-73b95c400000 rw-p 00000000 00:00 0 -73b95c400000-73b95c408000 r--p 00000000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -73b95c408000-73b95c460000 r-xp 00008000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -73b95c460000-73b95c471000 r--p 00060000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -73b95c471000-73b95c472000 ---p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -73b95c472000-73b95c478000 r--p 00071000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -73b95c478000-73b95c479000 rw-p 00077000 103:03 4325440 /tmp/lwjgl_codex/3.3.6+1/x64/libjemalloc.so -73b95c479000-73b95c683000 rw-p 00000000 00:00 0 -73b95c683000-73b95c684000 rw-s 00000000 00:06 964 /dev/nvidia0 -73b95c684000-73b95c6b0000 r--p 00000000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -73b95c6b0000-73b95c6e4000 r-xp 0002c000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -73b95c6e4000-73b95c6fe000 r--p 00060000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -73b95c6fe000-73b95c6ff000 r--p 00079000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -73b95c6ff000-73b95c700000 rw-p 0007a000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -73b95c700000-73b95c704000 ---p 00000000 00:00 0 -73b95c704000-73b95c800000 rw-p 00000000 00:00 0 -73b95c800000-73b95c804000 ---p 00000000 00:00 0 -73b95c804000-73b95c900000 rw-p 00000000 00:00 0 -73b95c900000-73b95c904000 ---p 00000000 00:00 0 -73b95c904000-73b95ca00000 rw-p 00000000 00:00 0 -73b95ca00000-73b95d1d0000 rw-p 00000000 00:00 0 -73b95d1d0000-73b9646f0000 ---p 00000000 00:00 0 -73b9646f0000-73b964700000 rw-p 00000000 00:00 0 -73b964700000-73b964701000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b964706000-73b964711000 r--p 00000000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -73b964711000-73b964725000 r-xp 0000b000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -73b964725000-73b96472e000 r--p 0001f000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -73b96472e000-73b96472f000 r--p 00027000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -73b96472f000-73b964730000 rw-p 00028000 103:03 11146115 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 -73b964730000-73b9647fe000 r-xp 00000000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -73b9647fe000-73b9647ff000 r--p 000cd000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -73b9647ff000-73b964800000 rw-p 000ce000 103:03 10498793 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjsvml.so -73b964800000-73b964a70000 rwxp 00000000 00:00 0 -73b964a70000-73b96bd37000 ---p 00000000 00:00 0 -73b96bd37000-73b96bfa7000 rwxp 00000000 00:00 0 -73b96bfa7000-73b96c2c8000 ---p 00000000 00:00 0 -73b96c2c8000-73b96c538000 rwxp 00000000 00:00 0 -73b96c538000-73b973800000 ---p 00000000 00:00 0 -73b973800000-73b97bfb5000 r--s 00000000 103:03 10498840 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/modules -73b97bfb5000-73b97bfb6000 rw-s 00000000 00:06 964 /dev/nvidia0 -73b97bfb6000-73b97bfb7000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b97bfbf000-73b97bffd000 r-xp 00000000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -73b97bffd000-73b97bffe000 ---p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -73b97bffe000-73b97bfff000 r--p 0003e000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -73b97bfff000-73b97c000000 rw-p 0003f000 103:03 10498827 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libsimdsort.so -73b97c000000-73b97c5fe000 rw-p 00000000 00:00 0 -73b97c5fe000-73b980000000 ---p 00000000 00:00 0 -73b980000000-73b980001000 rw-s 00000000 00:06 957 /dev/nvidiactl -73b980001000-73b980002000 r--s 00000000 00:06 957 /dev/nvidiactl -73b980016000-73b98001a000 ---p 00000000 00:00 0 -73b98001a000-73b980116000 rw-p 00000000 00:00 0 -73b980116000-73b98011a000 ---p 00000000 00:00 0 -73b98011a000-73b980216000 rw-p 00000000 00:00 0 -73b980216000-73b98021a000 ---p 00000000 00:00 0 -73b98021a000-73b980316000 rw-p 00000000 00:00 0 -73b980316000-73b98031a000 ---p 00000000 00:00 0 -73b98031a000-73b980416000 rw-p 00000000 00:00 0 -73b980416000-73b98041a000 ---p 00000000 00:00 0 -73b98041a000-73b980516000 rw-p 00000000 00:00 0 -73b980516000-73b98051a000 ---p 00000000 00:00 0 -73b98051a000-73b980616000 rw-p 00000000 00:00 0 -73b980616000-73b98061a000 ---p 00000000 00:00 0 -73b98061a000-73b980716000 rw-p 00000000 00:00 0 -73b980716000-73b980717000 ---p 00000000 00:00 0 -73b980717000-73b980817000 rw-p 00000000 00:00 0 -73b980817000-73b980818000 ---p 00000000 00:00 0 -73b980818000-73b980918000 rw-p 00000000 00:00 0 -73b980918000-73b9809f4000 rw-p 00000000 00:00 0 -73b9809f4000-73b9809f5000 ---p 00000000 00:00 0 -73b9809f5000-73b980af5000 rw-p 00000000 00:00 0 -73b980af5000-73b980af6000 ---p 00000000 00:00 0 -73b980af6000-73b980bf6000 rw-p 00000000 00:00 0 -73b980bf6000-73b9813fe000 rw-p 00000000 00:00 0 -73b9813fe000-73b9813ff000 ---p 00000000 00:00 0 -73b9813ff000-73b9814ff000 rw-p 00000000 00:00 0 -73b9814ff000-73b981500000 ---p 00000000 00:00 0 -73b981500000-73b981600000 rw-p 00000000 00:00 0 -73b981600000-73b9816fa000 rw-p 00000000 00:00 0 -73b9816fa000-73b98259e000 ---p 00000000 00:00 0 -73b98259e000-73b9825a0000 rw-p 00000000 00:00 0 -73b9825a4000-73b9825a6000 r--p 00000000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -73b9825a6000-73b9825ad000 r-xp 00002000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -73b9825ad000-73b9825af000 r--p 00009000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -73b9825af000-73b9825b0000 r--p 0000a000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -73b9825b0000-73b9825b1000 rw-p 0000b000 103:03 11145333 /usr/lib/x86_64-linux-gnu/libmd.so.0.0.5 -73b9825b1000-73b9825b3000 r--p 00000000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -73b9825b3000-73b9825b5000 r-xp 00002000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -73b9825b5000-73b9825b7000 r--p 00004000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -73b9825b7000-73b9825b8000 r--p 00005000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -73b9825b8000-73b9825b9000 rw-p 00006000 103:03 11144229 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0 -73b9825b9000-73b9825ba000 r--p 00000000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -73b9825ba000-73b9825bc000 r-xp 00001000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -73b9825bc000-73b9825bd000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -73b9825bd000-73b9825be000 r--p 00003000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -73b9825be000-73b9825bf000 rw-p 00004000 103:03 11144218 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0 -73b9825bf000-73b9826fa000 rw-p 00000000 00:00 0 -73b9826fa000-73b98359e000 ---p 00000000 00:00 0 -73b98359e000-73b9835a0000 rw-p 00000000 00:00 0 -73b9835a0000-73b9835a1000 ---p 00000000 00:00 0 -73b9835a1000-73b9836a1000 rw-p 00000000 00:00 0 -73b9836a1000-73b983f2f000 rw-p 00000000 00:00 0 -73b983f2f000-73b984015000 ---p 00000000 00:00 0 -73b984015000-73b98401a000 rw-p 00000000 00:00 0 -73b98401a000-73b984100000 ---p 00000000 00:00 0 -73b984100000-73b984104000 ---p 00000000 00:00 0 -73b984104000-73b984200000 rw-p 00000000 00:00 0 -73b984200000-73b985530000 r-xp 00000000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -73b985530000-73b985600000 r--p 0132f000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -73b985600000-73b98562e000 rw-p 013ff000 103:03 10498870 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/server/libjvm.so -73b98562e000-73b9856a4000 rw-p 00000000 00:00 0 -73b9856a4000-73b9856ab000 r--s 00000000 103:03 11147989 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache -73b9856ab000-73b9856ac000 r--p 00000000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -73b9856ac000-73b9856af000 r-xp 00001000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -73b9856af000-73b9856b0000 r--p 00004000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -73b9856b0000-73b9856b1000 ---p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -73b9856b1000-73b9856b2000 r--p 00005000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -73b9856b2000-73b9856b3000 rw-p 00006000 103:03 11280463 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-dbus.so -73b9856b3000-73b9856b6000 r--p 00000000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -73b9856b6000-73b9856ba000 r-xp 00003000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -73b9856ba000-73b9856bc000 r--p 00007000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -73b9856bc000-73b9856bd000 r--p 00008000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -73b9856bd000-73b9856be000 rw-p 00009000 103:03 11141498 /usr/lib/x86_64-linux-gnu/libcap.so.2.44 -73b9856be000-73b9856bf000 r--p 00000000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -73b9856bf000-73b9856c1000 r-xp 00001000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -73b9856c1000-73b9856c2000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -73b9856c2000-73b9856c3000 r--p 00003000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -73b9856c3000-73b9856c4000 rw-p 00004000 103:03 11280464 /usr/lib/x86_64-linux-gnu/spa-0.2/support/libspa-journal.so -73b9856c4000-73b9856d7000 r-xp 00000000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -73b9856d7000-73b9856d8000 ---p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -73b9856d8000-73b9856d9000 r--p 00013000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -73b9856d9000-73b9856da000 rw-p 00014000 103:03 10498814 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnio.so -73b9856da000-73b985719000 rw-p 00000000 00:00 0 -73b985719000-73b985727000 r--p 00000000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -73b985727000-73b9857a3000 r-xp 0000e000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -73b9857a3000-73b9857fe000 r--p 0008a000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -73b9857fe000-73b9857ff000 r--p 000e4000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -73b9857ff000-73b985800000 rw-p 000e5000 103:03 11141851 /usr/lib/x86_64-linux-gnu/libm.so.6 -73b985800000-73b985828000 r--p 00000000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -73b985828000-73b9859bd000 r-xp 00028000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -73b9859bd000-73b985a15000 r--p 001bd000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -73b985a15000-73b985a16000 ---p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -73b985a16000-73b985a1a000 r--p 00215000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -73b985a1a000-73b985a1c000 rw-p 00219000 103:03 11141780 /usr/lib/x86_64-linux-gnu/libc.so.6 -73b985a1c000-73b985a29000 rw-p 00000000 00:00 0 -73b985a29000-73b985a2a000 r-xp 00000000 00:00 0 -73b985a2a000-73b985a2b000 rw-p 00000000 00:00 0 -73b985a2b000-73b985a2c000 r-xp 0005e000 103:03 4325438 /tmp/lwjgl_codex/3.3.6+1/x64/liblwjgl.so -73b985a2c000-73b985a2d000 rw-p 00000000 00:00 0 -73b985a2d000-73b985a38000 r-xp 00000000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -73b985a38000-73b985a39000 ---p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -73b985a39000-73b985a3a000 r--p 0000b000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -73b985a3a000-73b985a3b000 rw-p 0000c000 103:03 10498811 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libnet.so -73b985a3b000-73b985a7a000 rw-p 00000000 00:00 0 -73b985a7a000-73b985a9a000 r-xp 00000000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -73b985a9a000-73b985a9b000 r--p 0001f000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -73b985a9b000-73b985a9c000 rw-p 00020000 103:03 10498774 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjava.so -73b985a9c000-73b985a9d000 rw-p 00000000 00:00 0 -73b985a9d000-73b985abb000 r-xp 00000000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -73b985abb000-73b985abd000 r--p 0001d000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -73b985abd000-73b985abe000 rw-p 0001f000 103:03 10498782 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjimage.so -73b985abe000-73b985abf000 r--p 00000000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -73b985abf000-73b985ac0000 r-xp 00001000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -73b985ac0000-73b985ac1000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -73b985ac1000-73b985ac2000 r--p 00002000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -73b985ac2000-73b985ac3000 rw-p 00003000 103:03 11142134 /usr/lib/x86_64-linux-gnu/librt.so.1 -73b985ac3000-73b985ac7000 rw-p 00000000 00:00 0 -73b985ac7000-73b985ac8000 r--p 00000000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -73b985ac8000-73b985ac9000 r-xp 00001000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -73b985ac9000-73b985aca000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -73b985aca000-73b985acb000 r--p 00002000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -73b985acb000-73b985acc000 rw-p 00003000 103:03 11142076 /usr/lib/x86_64-linux-gnu/libpthread.so.0 -73b985acc000-73b985acd000 r--p 00000000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -73b985acd000-73b985ace000 r-xp 00001000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -73b985ace000-73b985acf000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -73b985acf000-73b985ad0000 r--p 00002000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -73b985ad0000-73b985ad1000 rw-p 00003000 103:03 11141840 /usr/lib/x86_64-linux-gnu/libdl.so.2 -73b985ad1000-73b985ad3000 r--p 00000000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -73b985ad3000-73b985ae4000 r-xp 00002000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -73b985ae4000-73b985aea000 r--p 00013000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -73b985aea000-73b985aeb000 ---p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -73b985aeb000-73b985aec000 r--p 00019000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -73b985aec000-73b985aed000 rw-p 0001a000 103:03 11141575 /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 -73b985aed000-73b985af4000 r-xp 00000000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -73b985af4000-73b985af5000 ---p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -73b985af5000-73b985af6000 r--p 00007000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -73b985af6000-73b985af7000 rw-p 00008000 103:03 10498837 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libzip.so -73b985af7000-73b985afc000 rw-p 00000000 00:00 0 -73b985afc000-73b985b03000 ---p 00000000 00:00 0 -73b985b03000-73b985b0b000 rw-s 00000000 103:03 4325447 /tmp/hsperfdata_codex/78128 -73b985b0b000-73b985b0c000 ---p 00000000 00:00 0 -73b985b0c000-73b985b0d000 r--p 00000000 00:00 0 -73b985b0d000-73b985b1c000 r-xp 00000000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -73b985b1c000-73b985b1d000 r--p 0000e000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -73b985b1d000-73b985b1e000 rw-p 0000f000 103:03 10498785 /usr/lib/jvm/jdk-23.0.2-oracle-x64/lib/libjli.so -73b985b1e000-73b985b20000 rw-p 00000000 00:00 0 -73b985b20000-73b985b24000 r--p 00000000 00:00 0 [vvar] -73b985b24000-73b985b26000 r-xp 00000000 00:00 0 [vdso] -73b985b26000-73b985b28000 r--p 00000000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -73b985b28000-73b985b52000 r-xp 00002000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -73b985b52000-73b985b5d000 r--p 0002c000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -73b985b5d000-73b985b5e000 ---p 00000000 00:00 0 -73b985b5e000-73b985b60000 r--p 00037000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -73b985b60000-73b985b62000 rw-p 00039000 103:03 11141617 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 -7ffee72d3000-7ffee72f6000 rw-p 00000000 00:00 0 [stack] -ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall] -Total number of mappings: 796 - - -VM Arguments: -jvm_args: -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -java_command: jme3test.vulkan.VulkanHelperTest -java_class_path (initial): /home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/java/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/classes/groovy/main:/home/codex/java/prj/jmonkeyengine/jme3-examples/build/resources/main:/home/codex/java/prj/jmonkeyengine/jme3-lwjgl3/build/libs/jme3-lwjgl3-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-desktop/build/libs/jme3-desktop-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-effects/build/libs/jme3-effects-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jbullet/build/libs/jme3-jbullet-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-jogg/build/libs/jme3-jogg-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-networking/build/libs/jme3-networking-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-niftygui/build/libs/jme3-niftygui-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins/build/libs/jme3-plugins-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-terrain/build/libs/jme3-terrain-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-awt-dialogs/build/libs/jme3-awt-dialogs-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-core/build/libs/jme3-core-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json-gson/build/libs/jme3-plugins-json-gson-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-plugins-json/build/libs/jme3-plugins-json-null-SNAPSHOT.jar:/home/codex/java/prj/jmonkeyengine/jme3-testdata/build/libs/jme3-testdata-null-SNAPSHOT.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-examples/1.4.3/4a41c559851c0c5a77ba3a9d1ccc8e6e92207dc7/nifty-examples-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjglx/lwjgl3-awt/0.2.3/2be63e81d6b73300d8203ce7235b2660c62eb3ea/lwjgl3-awt-0.2.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/7119f7d0eeb1e5502ff0ca71d2b4d47317da015/lwjgl-glfw-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/99ef08056feb9627f90425a4d2a22cd9fae8e39b/lwjgl-glfw-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/cfa8f1e96d572ed56da5945adf5167628f5eecdb/lwjgl-glfw-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/797e0965709ad180d9b00c88a086dbda15002203/lwjgl-glfw-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/671adf04a6bc4f792af13892e37f804be30b7070/lwjgl-glfw-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/b54023af492b4c2c72451f3a7aa0f385e9969474/lwjgl-glfw-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/82c8d748a654241b5961ddd1c098e8b648e38a48/lwjgl-glfw-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.3.6/399b42b491c5dfa6595ae6fd79dcba61b93538a7/lwjgl-glfw-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jawt/3.3.6/43299e222bd7db5e99254a8e620330954b73c2a6/lwjgl-jawt-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/245910eb57f2444429c74e6bf96030e5ec0a6739/lwjgl-jemalloc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/f9da76351e14a695be172d6915c8a7b2905307f/lwjgl-jemalloc-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c86043a342a33e5d32fabf962578580633db3c6e/lwjgl-jemalloc-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/26f8b467dc2e0f3000d608de3564b572bb46f927/lwjgl-jemalloc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/c484cae39a718010dbc7931fe5e12664600a13c2/lwjgl-jemalloc-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1bc2e16e70df7f418d668c2984ac8066f1f6f5b1/lwjgl-jemalloc-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/9a42df0f2e9747815490311d7db7b4a046d5f40/lwjgl-jemalloc-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.3.6/1f828c1fc06792475850162725433adf5ad001c0/lwjgl-jemalloc-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ad313317ff399fd2a7f4dd74716a68cf3976c6ad/lwjgl-openal-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/9c2b9b660e085bb0b47a4453dc0e26f24a5475e4/lwjgl-openal-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/82f693541d69aa125750bf8be9c4194435c56f03/lwjgl-openal-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/ef356c04ef141d4efbde07793f31784f1f1a1bae/lwjgl-openal-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/7830af894fa110e65bf5075deb9183efbdbc50f5/lwjgl-openal-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/fd2c17603c63e8d543cb57d1db77ebd4574f3b7a/lwjgl-openal-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/c39f6827f0bd97601fc4e389801d5c813f59a5f2/lwjgl-openal-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.3.6/13f692aec4ae4b2d3c468aa0008472175f0ea1e0/lwjgl-openal-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opencl/3.3.6/93fdcea16d27b1466450e38dc28c8e1b4819ec25/lwjgl-opencl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ac2532612a4df374e9a9282bcf8ce2573018ebbb/lwjgl-opengl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/18dc639ebc94aa5202c2157f7490d28997b697c5/lwjgl-opengl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b0ab1d0e315d2fcc50d6cab7e8feaf4688d5d9a0/lwjgl-opengl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/b8dc6467fe232d552793c53dc56f9fa8a385299c/lwjgl-opengl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/ee815fbf454b916f13c10fff62e513eb09042ef0/lwjgl-opengl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/44de180f79e0b45c9e5bee10ca7540dcb5ddd373/lwjgl-opengl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/59f708eb4bf0be0204bbc9c06807911724673db6/lwjgl-opengl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.3.6/fee4fb2ee786af6530b6f9188205a76bc4e05268/lwjgl-opengl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-vulkan/3.3.6/a403e0931b03b138854bb2ba9c48dab646cba6d8/lwjgl-vulkan-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/9d0964fe2b75f64d9dab9839c2b059b7e8f71115/lwjgl-shaderc-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-shaderc/3.3.6/ab69a0e011f057ed25857c97fa3c87f20ab8f670/lwjgl-shaderc-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/ce7721d30cfaf47feaed10213e0c43eb55c49d68/lwjgl-3.3.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9a29b6a22fc5184604b8cb434ee5d5ecc4bfcbee/lwjgl-3.3.6-natives-windows.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/7a6f04e02429ba2f4bda9be191347bb7d3c71127/lwjgl-3.3.6-natives-windows-x86.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/dc7db8fc4f1e6563867f9155b9a42d9c73d8992f/lwjgl-3.3.6-natives-linux.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/2c9d698e76c3d0fe307d94cc6f428038492f25df/lwjgl-3.3.6-natives-linux-arm32.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/9eeb8887b5e3aa672efd2e1b0973ffa5891a3151/lwjgl-3.3.6-natives-linux-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/f14e7a5289d2355822f4f83b3fd38d158c939acd/lwjgl-3.3.6-natives-macos.jar:/home/codex/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.3.6/832e2964ce74e02e768814a29c06d60645115b9a/lwjgl-3.3.6-natives-macos-arm64.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/jbullet/1.0.3/362f53e8aa981037c2523ac24eb4d9b190a49036/jbullet-1.0.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/javax.vecmath/vecmath/1.5.2/fd17bc3e67f909573dfc039d8e2abecf407c4e27/vecmath-1.5.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/j-ogg-vorbis/1.0.6/a69d1cf62eaf75b71af61f9c23265d278a966735/j-ogg-vorbis-1.0.6.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-default-controls/1.4.3/2ccafe0182a73da87657ca24b639b6e8c1accd50/nifty-default-controls-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty/1.4.3/fa9ac16e00d1b375d10f58d1c1eb576950ae8c9d/nifty-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.nifty-gui/nifty-style-black/1.4.3/c20a02dbdeb0bd9d2be258955fceb55c13185a8/nifty-style-black-1.4.3.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.9.1/2cc2131b98ebfb04e2b2c7dfb84431f4045096b/gson-2.9.1.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.github.stephengold/stack-alloc/1.0.2/13cbb10c01ec09d0f5879f988946a97998175dfc/stack-alloc-1.0.2.jar:/home/codex/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar:/home/codex/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.2/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.2.jar -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 4 {product} {ergonomic} - uint ConcGCThreads = 2 {product} {ergonomic} - uint G1ConcRefinementThreads = 8 {product} {ergonomic} - size_t G1HeapRegionSize = 4194304 {product} {ergonomic} - size_t InitialHeapSize = 524288000 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MarkStackSizeMax = 536870912 {product} {ergonomic} - size_t MaxHeapSize = 8388608000 {product} {ergonomic} - size_t MaxNewSize = 5033164800 {product} {ergonomic} - size_t MinHeapDeltaBytes = 4194304 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 5836800 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 122912768 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 122908672 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - size_t SoftMaxHeapSize = 8388608000 {manageable} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags foldmultilines=false - #1: stderr all=off uptime,level,tags foldmultilines=false - -Environment Variables: -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin -USERNAME=codex -SHELL=/bin/bash -DISPLAY=:1 -LANG=en_US.UTF-8 - -Active Locale: -LC_ALL=en_US.UTF-8 -LC_COLLATE=en_US.UTF-8 -LC_CTYPE=en_US.UTF-8 -LC_MESSAGES=en_US.UTF-8 -LC_MONETARY=en_US.UTF-8 -LC_NUMERIC=en_US.UTF-8 -LC_TIME=en_US.UTF-8 - -Signal Handlers: - SIGSEGV: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGBUS: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGFPE: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGPIPE: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGXFSZ: javaSignalHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGILL: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - SIGUSR2: SR_handler in libjvm.so, mask=00000000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO, blocked - SIGHUP: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGINT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTERM: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGQUIT: UserHandler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, blocked - SIGTRAP: crash_handler in libjvm.so, mask=11100100010111111101111111111110, flags=SA_RESTART|SA_SIGINFO, unblocked - - -Periodic native trim disabled - ---------------- S Y S T E M --------------- - -OS: -DISTRIB_ID=Pop -DISTRIB_RELEASE=22.04 -DISTRIB_CODENAME=jammy -DISTRIB_DESCRIPTION="Pop!_OS 22.04 LTS" -uname: Linux 6.9.3-76060903-generic #202405300957~1726766035~22.04~4092a0e SMP PREEMPT_DYNAMIC Thu S x86_64 -OS uptime: 0 days 14:29 hours -libc: glibc 2.35 NPTL 2.35 -rlimit (soft/hard): STACK 8192k/infinity , CORE 0k/infinity , NPROC 127655/127655 , NOFILE 1048576/1048576 , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK 4095952k/4095952k -load average: 0.61 0.77 0.83 - -/proc/meminfo: -MemTotal: 32767632 kB -MemFree: 21158436 kB -MemAvailable: 24189976 kB -Buffers: 321172 kB -Cached: 4673028 kB -SwapCached: 0 kB -Active: 8033496 kB -Inactive: 2595692 kB -Active(anon): 5672072 kB -Inactive(anon): 0 kB -Active(file): 2361424 kB -Inactive(file): 2595692 kB -Unevictable: 15204 kB -Mlocked: 72 kB -SwapTotal: 20970996 kB -SwapFree: 20970996 kB -Zswap: 0 kB -Zswapped: 0 kB -Dirty: 28 kB -Writeback: 0 kB -AnonPages: 5650496 kB -Mapped: 1807064 kB -Shmem: 37084 kB -KReclaimable: 187708 kB -Slab: 366340 kB -SReclaimable: 187708 kB -SUnreclaim: 178632 kB -KernelStack: 20768 kB -PageTables: 48056 kB -SecPageTables: 0 kB -NFS_Unstable: 0 kB -Bounce: 0 kB -WritebackTmp: 0 kB -CommitLimit: 37354812 kB -Committed_AS: 11214484 kB -VmallocTotal: 34359738367 kB -VmallocUsed: 247428 kB -VmallocChunk: 0 kB -Percpu: 9120 kB -HardwareCorrupted: 0 kB -AnonHugePages: 0 kB -ShmemHugePages: 6144 kB -ShmemPmdMapped: 0 kB -FileHugePages: 0 kB -FilePmdMapped: 0 kB -Unaccepted: 0 kB -HugePages_Total: 0 -HugePages_Free: 0 -HugePages_Rsvd: 0 -HugePages_Surp: 0 -Hugepagesize: 2048 kB -Hugetlb: 0 kB -DirectMap4k: 800568 kB -DirectMap2M: 12732416 kB -DirectMap1G: 19922944 kB - -/sys/kernel/mm/transparent_hugepage/enabled: always [madvise] never -/sys/kernel/mm/transparent_hugepage/hpage_pmd_size: 2097152 -/sys/kernel/mm/transparent_hugepage/shmem_enabled: always within_size advise [never] deny force -/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter): always defer defer+madvise [madvise] never - -Process Memory: -Virtual Size: 13041280K (peak: 13042084K) -Resident Set Size: 297012K (peak: 297276K) (anon: 154376K, file: 142636K, shmem: 0K) -Swapped out: 0K -C-Heap outstanding allocations: 68142K, retained: 32033K -glibc malloc tunables: (default) - -/proc/sys/kernel/threads-max (system-wide limit on the number of threads): 255310 -/proc/sys/vm/max_map_count (maximum number of memory map areas a process may have): 2147483642 -/proc/sys/vm/swappiness (control to define how aggressively the kernel swaps out anonymous memory): 180 -/proc/sys/kernel/pid_max (system-wide limit on number of process identifiers): 4194304 - -container (cgroup) information: -container_type: cgroupv2 -cpu_cpuset_cpus: not supported -cpu_memory_nodes: not supported -active_processor_count: 8 -cpu_quota: not supported -cpu_period: not supported -cpu_shares: not supported -memory_limit_in_bytes: unlimited -memory_and_swap_limit_in_bytes: unlimited -memory_soft_limit_in_bytes: 0 -memory_usage_in_bytes: 5721300 k -memory_max_usage_in_bytes: not supported -rss_usage_in_bytes: 3396096 k -cache_usage_in_bytes: 2245204 k -memory_swap_current_in_bytes: 0 -memory_swap_max_limit_in_bytes: unlimited -maximum number of tasks: 38296 -current number of tasks: 306 - -Steal ticks since vm start: 0 -Steal ticks percentage since vm start: 0.000 - -CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 158 stepping 9 microcode 0xf8, 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, fma, vzeroupper, clflush, clflushopt, rdtscp, f16c -CPU Model and flags from /proc/cpuinfo: -model name : Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities - -Online cpus: 0-7 -Offline cpus: -BIOS frequency limitation: -Frequency switch latency (ns): 0 -Available cpu frequencies: -Current governor: powersave -Core performance/turbo boost: - -Memory: 4k page, physical 32767632k(24189976k free), swap 20970996k(20970996k free) -Page Sizes: 4k - -vm_info: Java HotSpot(TM) 64-Bit Server VM (23.0.2+7-58) for linux-amd64 JRE (23.0.2+7-58), built on 2024-11-29T09:34:55Z with gcc 13.2.0 - -END. diff --git a/jme3-core/src/main/java/com/jme3/math/Matrix4f.java b/jme3-core/src/main/java/com/jme3/math/Matrix4f.java index 4f9a6e2f35..e097de818b 100644 --- a/jme3-core/src/main/java/com/jme3/math/Matrix4f.java +++ b/jme3-core/src/main/java/com/jme3/math/Matrix4f.java @@ -2560,4 +2560,16 @@ public Matrix4f clone() { throw new AssertionError(); // can not happen } } + + /** + * Flips the sign of the Y scalar component (m11) to make Vulkan renderings + * appear upright in clip space. + * + * @return this instance + */ + public Matrix4f flipYScalarForVulkan() { + m11 = -m11; + return this; + } + } diff --git a/jme3-core/src/main/java/com/jme3/renderer/Camera.java b/jme3-core/src/main/java/com/jme3/renderer/Camera.java index b05c3bd86a..9635905d38 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Camera.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Camera.java @@ -1248,7 +1248,6 @@ public void updateViewProjection() { if (overrideProjection) { viewProjectionMatrix.set(projectionMatrixOverride).multLocal(viewMatrix); } else { - //viewProjectionMatrix.set(viewMatrix).multLocal(projectionMatrix); viewProjectionMatrix.set(projectionMatrix).multLocal(viewMatrix); } } @@ -1358,7 +1357,9 @@ public void onFrustumChange() { projectionMatrix.fromFrustum(frustumNear, frustumFar, frustumLeft, frustumRight, frustumTop, frustumBottom, parallelProjection); -// projectionMatrix.transposeLocal(); + + // for Vulkan rendering + projectionMatrix.flipYScalarForVulkan(); // The frame is affected by the frustum values // update it as well diff --git a/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java b/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java index 2e9ce16e45..535f5f9d93 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java +++ b/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java @@ -1,5 +1,6 @@ package com.jme3.renderer.vulkan; +import com.jme3.util.natives.Native; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; @@ -127,6 +128,10 @@ public static boolean isBitSet(int n, int bit) { return (n & bit) > 0; } + public static int sharingMode(boolean concurrent) { + return concurrent ? VK_SHARING_MODE_CONCURRENT : VK_SHARING_MODE_EXCLUSIVE; + } + public static , E extends Struct> T accumulate(Collection collection, IntFunction allocate) { T buffer = allocate.apply(collection.size()); for (E e : collection) { @@ -135,6 +140,26 @@ public static , E extends Struct> T accumulate(C return buffer.rewind(); } + public static LongBuffer accumulate(MemoryStack stack, Native... natives) { + LongBuffer buf = stack.mallocLong(natives.length); + for (int i = 0; i < buf.limit(); i++) { + buf.put(i, natives[i].getNativeObject()); + } + return buf; + } + + public static int[] getTransferArguments(int srcLayout, int dstLayout) { + // output array format: {srcAccessMask, dstAccessMask, srcStage, dstStage} + if (srcLayout == VK_IMAGE_LAYOUT_UNDEFINED && dstLayout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) { + return new int[] {0, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT}; + } else if (srcLayout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL && dstLayout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) { + return new int[] {VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT}; + } else { + throw new UnsupportedOperationException("Unsupported layer transitions."); + } + } + public static class NativeIterator implements Iterable, Iterator { private final PointerBuffer pointers; diff --git a/jme3-core/src/main/java/com/jme3/util/natives/BasicNativeManager.java b/jme3-core/src/main/java/com/jme3/util/natives/BasicNativeManager.java index 6bfcfdb68f..2ef3076b84 100644 --- a/jme3-core/src/main/java/com/jme3/util/natives/BasicNativeManager.java +++ b/jme3-core/src/main/java/com/jme3/util/natives/BasicNativeManager.java @@ -3,10 +3,7 @@ import java.lang.ref.PhantomReference; import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; @@ -39,8 +36,12 @@ public int flush() { int flushed = 0; for (NativeRef ref; (ref = (NativeRef)unreachable.poll()) != null;) { ref.destroy(); + refMap.remove(ref.id); flushed++; } + if (flushed > 0) { + refMap.values().removeIf(NativeRef::isDestroyed); + } return flushed; } @@ -48,7 +49,7 @@ public int flush() { public int clear() { int size = refMap.size(); for (NativeRef ref : refMap.values()) { - ref.destroyNoRemove(); + ref.destroy(); } refMap.clear(); return size; @@ -57,10 +58,10 @@ public int clear() { public class NativeRef extends WeakReference implements NativeReference { private final long id; - private final Runnable destroyer; private final WeakReference weakRef; private final AtomicBoolean active = new AtomicBoolean(true); private final Collection dependents = new ArrayList<>(); + private Runnable destroyer; private NativeRef(long id, Native referent, ReferenceQueue q) { super(referent, q); @@ -72,33 +73,43 @@ private NativeRef(long id, Native referent, ReferenceQueue q) { @Override public void destroy() { if (active.getAndSet(false)) { + for (NativeReference ref : dependents) { + ref.destroy(); + } dependents.clear(); - destroyNoRemove(); - refMap.remove(id, this); + destroyer.run(); + Native referent = weakRef.get(); + if (referent != null) { + referent.prematureNativeDestruction(); + } } } @Override public void addDependent(NativeReference reference) { + if (isDestroyed()) { + throw new IllegalStateException("Cannot add dependent to destroyed resource."); + } dependents.add(reference); } - private long getId() { - return id; + @Override + public boolean isDestroyed() { + return !active.get(); } - private void destroyNoRemove() { - for (NativeReference ref : dependents) { - ref.destroy(); - } - dependents.clear(); - destroyer.run(); - Native referent = weakRef.get(); - if (referent != null) { - referent.prematureNativeDestruction(); + @Override + public void refresh() { + Native obj = weakRef.get(); + if (obj != null) { + destroyer = obj.createNativeDestroyer(); } } + private long getId() { + return id; + } + } } diff --git a/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java b/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java index ddbefb178a..98abbcc7dd 100644 --- a/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java +++ b/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java @@ -6,4 +6,8 @@ public interface NativeReference { void addDependent(NativeReference reference); + boolean isDestroyed(); + + void refresh(); + } diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index f67eb54bb2..09eda177fe 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -1,17 +1,26 @@ package jme3test.vulkan; +import com.jme3.app.FlyCamAppState; import com.jme3.app.SimpleApplication; import com.jme3.material.RenderState; +import com.jme3.math.Quaternion; +import com.jme3.math.Transform; +import com.jme3.math.Vector3f; import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.shaderc.ShaderType; import com.jme3.shaderc.ShadercLoader; import com.jme3.system.AppSettings; import com.jme3.system.vulkan.LwjglVulkanContext; import com.jme3.util.BufferUtils; +import com.jme3.util.natives.Native; import com.jme3.vulkan.*; import com.jme3.vulkan.Queue; -import com.jme3.vulkan.buffers.BufferArgs; -import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.buffers.*; +import com.jme3.vulkan.descriptors.*; +import com.jme3.vulkan.flags.ImageUsageFlags; +import com.jme3.vulkan.flags.MemoryFlags; +import com.jme3.vulkan.flags.BufferUsageFlags; +import com.jme3.vulkan.images.*; import org.lwjgl.PointerBuffer; import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; @@ -21,6 +30,7 @@ import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.util.*; +import java.util.function.Consumer; import java.util.logging.Level; import static com.jme3.renderer.vulkan.VulkanUtils.*; @@ -41,21 +51,25 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda private RenderPass renderPass; private GraphicsPipeline pipeline; private CommandPool graphicsPool; - private GpuBuffer vertexBuffer, indexBuffer; + private StageableBuffer vertexBuffer, indexBuffer; + private DescriptorPool descriptorPool; + private DescriptorSetLayout descriptorLayout; private VulkanRenderManager renderer; private boolean swapchainResizeFlag = false; + private boolean applicationStopped = false; private final Collection deviceExtensions = new ArrayList<>(); - private long debugMessenger = NULL; - private final VkDebugUtilsMessengerCallbackEXT debugCallback = new VulkanDebugCallback(Level.SEVERE); + private VulkanLogger logger; private final FloatBuffer vertexData = BufferUtils.createFloatBuffer( - -0.5f, -0.5f, 1f, 0f, 0f, - 0.5f, -0.5f, 0f, 1f, 0f, - 0.5f, 0.5f, 0f, 0f, 1f, - -0.5f, 0.5f, 1f, 1f, 1f); + -0.5f, -0.5f, 1f, 0f, 0f, 1f, 0f, + 0.5f, -0.5f, 0f, 1f, 0f, 0f, 0f, + 0.5f, 0.5f, 0f, 0f, 1f, 0f, 1f, + -0.5f, 0.5f, 1f, 1f, 1f, 1f, 1f); private final IntBuffer indexData = BufferUtils.createIntBuffer(0, 1, 2, 2, 3, 0); + private final Transform modelTransform = new Transform(); + private Texture texture; public static void main(String[] args) { VulkanHelperTest app = new VulkanHelperTest(); @@ -68,10 +82,18 @@ public static void main(String[] args) { app.start(); } + public VulkanHelperTest() { + super(new FlyCamAppState()); + } + @Override public void simpleInitApp() { assetManager.registerLoader(ShadercLoader.class, "glsl"); + assetManager.registerLoader(VulkanImageLoader.class, "png", "jpg"); + flyCam.setMoveSpeed(5f); + flyCam.setDragToRotate(true); + deviceExtensions.add(KHRSwapchain.VK_KHR_SWAPCHAIN_EXTENSION_NAME); long window = ((LwjglVulkanContext)context).getWindowHandle(); @@ -86,17 +108,19 @@ public void simpleInitApp() { instance = inst.build(); // debug callbacks - try (MemoryStack stack = MemoryStack.stackPush()) { - createDebugMessenger(stack); - } + logger = new VulkanLogger(instance, Level.SEVERE); // surface surface = new Surface(instance, window); // physical device - PhysicalDevice physDevice = PhysicalDevice.getPhysicalDevice( - instance.getNativeObject(), - Arrays.asList(surface, DeviceEvaluator.extensions(deviceExtensions), DeviceEvaluator.swapchain(surface)), + PhysicalDevice physDevice = PhysicalDevice.getSuitableDevice( + instance, Arrays.asList( + surface, + DeviceEvaluator.extensions(deviceExtensions), + DeviceEvaluator.swapchain(surface), + DeviceEvaluator.anisotropy() + ), () -> new SimpleQueueFamilies(surface)); // queue families @@ -115,12 +139,18 @@ public void simpleInitApp() { } } + descriptorLayout = new DescriptorSetLayout(device, + SetLayoutBinding.uniformBuffer(0, 1, VK_SHADER_STAGE_VERTEX_BIT), + SetLayoutBinding.combinedImageSampler(1, 1, VK_SHADER_STAGE_FRAGMENT_BIT)); + descriptorPool = new DescriptorPool(device, 2, + PoolSize.uniformBuffers(2), PoolSize.combinedImageSamplers(2)); + // pipeline + pipelineLayout = new PipelineLayout(device, descriptorLayout); vertModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( "Shaders/VulkanVertTest.glsl", ShaderType.Vertex)), "main"); fragModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( "Shaders/VulkanFragTest.glsl", ShaderType.Fragment)), "main"); - pipelineLayout = new PipelineLayout(device); try (RenderPassBuilder pass = new RenderPassBuilder()) { int color = pass.createAttachment(a -> a .format(swapchain.getFormat()) @@ -151,47 +181,41 @@ public void simpleInitApp() { swapchain.createFrameBuffers(renderPass); pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, new RenderState(), vertModule, fragModule, new MeshDescription()); graphicsPool = new CommandPool(device, queues.getGraphicsQueue(), false, true); - renderer = new VulkanRenderManager(2, Frame::new); CommandPool transferPool = new CommandPool(device, queues.getGraphicsQueue(), true, false); // vertex buffers try (MemoryStack stack = MemoryStack.stackPush()) { - GpuBuffer staging = new GpuBuffer(device, vertexData.capacity() * Float.BYTES, - new BufferArgs().transferSrc().hostVisible().hostCoherent()); - staging.copy(stack, vertexData); - vertexBuffer = new GpuBuffer(device, staging.getSize(), - new BufferArgs().transferDst().vertexBuffer().deviceLocal()); - CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); - vertexBuffer.recordCopy(stack, commands, staging, 0, 0, (long)vertexData.limit() * Float.BYTES); - commands.submit(null, null, null); - transferPool.getQueue().waitIdle(); // todo: use fences to wait on transfer operations - staging.freeMemory(); // destroys buffer + // cpu-accessible memory is not usually fast for the gpu to access, but + // the cpu cannot directly access fast gpu memory. The solution is to + // copy cpu-side data to a mutual staging buffer, then have the gpu copy + // that data to faster memory. Hence, why we do two copy operations here. + vertexBuffer = new StageableBuffer(device, vertexData.capacity() * Float.BYTES, + new BufferUsageFlags().vertexBuffer(), new MemoryFlags().deviceLocal(), false); + vertexBuffer.copy(stack, vertexData); // copy data to staging buffer + vertexBuffer.transfer(transferPool); // transfer staged data to vertex buffer + vertexBuffer.freeStagingBuffer(); + // index buffer + indexBuffer = new StageableBuffer(device, indexData.capacity() * Integer.BYTES, + new BufferUsageFlags().indexBuffer(), new MemoryFlags().deviceLocal(), false); + indexBuffer.copy(stack, indexData); + indexBuffer.transfer(transferPool); + indexBuffer.freeStagingBuffer(); } - // index buffers - try (MemoryStack stack = MemoryStack.stackPush()) { - GpuBuffer staging = new GpuBuffer(device, indexData.capacity() * Integer.BYTES, - new BufferArgs().transferSrc().hostVisible().hostCoherent()); - staging.copy(stack, indexData); - indexBuffer = new GpuBuffer(device, staging.getSize(), - new BufferArgs().transferDst().indexBuffer().deviceLocal()); - CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); - indexBuffer.recordCopy(stack, commands, staging, 0, 0, (long)indexData.limit() * Integer.BYTES); - commands.submit(null, null, null); - transferPool.getQueue().waitIdle(); - staging.freeMemory(); - } + GpuImage image = loadImage("Common/Textures/MissingTexture.png", transferPool); + texture = new Texture(device, image.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1), + VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); + + renderer = new VulkanRenderManager(2, n -> new Frame()); } @Override public void stop() { - if (debugMessenger != NULL) { - System.out.println(" destroy debug messenger"); - verifyExtensionMethod(instance.getNativeObject(), "vkDestroyDebugUtilsMessengerEXT"); - vkDestroyDebugUtilsMessengerEXT(instance.getNativeObject(), debugMessenger, null); - } + applicationStopped = true; + device.waitIdle(); + Native.get().clear(); // destroy all native objects super.stop(); } @@ -223,50 +247,81 @@ public void simpleUpdate(float tpf) { renderer.render(tpf); } - private VkDebugUtilsMessengerCreateInfoEXT createDebugger(MemoryStack stack, VkDebugUtilsMessengerCallbackEXT callback) { - VkDebugUtilsMessengerCreateInfoEXT create = VkDebugUtilsMessengerCreateInfoEXT.calloc(stack) - .sType(VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) - .messageSeverity(VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT - | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) - .messageType(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT); - if (callback != null) { - create.pfnUserCallback(callback); + private GpuImage loadImage(String file, CommandPool transferPool) { + try (MemoryStack stack = MemoryStack.stackPush()) { + VulkanImageLoader.ImageData data = assetManager.loadAsset(VulkanImageLoader.key(file)); + GpuBuffer staging = new GpuBuffer(device, data.getBuffer().limit(), + new BufferUsageFlags().transferSrc(), new MemoryFlags().hostVisible().hostCoherent(), false); + staging.copy(stack, data.getBuffer()); + GpuImage image = new GpuImage(device, data.getWidth(), data.getHeight(), data.getFormat(), + new ImageUsageFlags().transferDst().sampled(), new MemoryFlags().deviceLocal()); + CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); + commands.begin(); + image.transitionLayout(commands, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + VkBufferImageCopy.Buffer region = VkBufferImageCopy.calloc(1, stack) + .bufferOffset(0) + .bufferRowLength(0) // padding bytes + .bufferImageHeight(0); // padding bytes + region.imageSubresource().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + .mipLevel(0) + .baseArrayLayer(0) + .layerCount(1); + region.imageOffset().set(0, 0, 0); + region.imageExtent().set(data.getWidth(), data.getHeight(), 1); + vkCmdCopyBufferToImage(commands.getBuffer(), staging.getNativeObject(), + image.getNativeObject(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, region); + image.transitionLayout(commands, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + commands.end(); + commands.submit(null, null, null); + transferPool.getQueue().waitIdle(); + return image; } - return create; } - private void createDebugMessenger(MemoryStack stack) { - verifyExtensionMethod(instance.getNativeObject(), "vkCreateDebugUtilsMessengerEXT"); - debugMessenger = getLong(stack, ptr -> vkCreateDebugUtilsMessengerEXT( - instance.getNativeObject(), createDebugger(stack, debugCallback), null, ptr)); - } - - private class Frame implements Runnable { + private class Frame implements Consumer { - private final int index; private final CommandBuffer graphicsCommands = graphicsPool.allocateCommandBuffer(); private final Semaphore imageAvailable = new Semaphore(device); private final Semaphore renderFinished = new Semaphore(device); private final Fence inFlight = new Fence(device, true); - - private Frame(int index) { - this.index = index; + private final GpuBuffer uniforms; + private final DescriptorSet descriptorSet; + + public Frame() { + uniforms = new PersistentBuffer(device, 16 * Float.BYTES, + new BufferUsageFlags().uniformBuffer(), + new MemoryFlags().hostVisible().hostCoherent(), false); + descriptorSet = descriptorPool.allocateSets(descriptorLayout)[0]; + descriptorSet.write(BufferSetWriter.uniformBuffers(0, 0, new BufferDescriptor(uniforms)), + ImageSetWriter.combinedImageSampler(1, 0, new ImageDescriptor(texture, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))); } @Override - public void run() { + public void accept(Float tpf) { + if (applicationStopped) { + return; + } inFlight.block(5000); + if (applicationStopped) { + return; + } Swapchain.SwapchainImage image = swapchain.acquireNextImage(VulkanHelperTest.this, imageAvailable, null, 5000); if (image == null) { - return; + return; // no image available: skip rendering this frame } inFlight.reset(); + renderManager.setCamera(cam, false); graphicsCommands.reset(); graphicsCommands.begin(); renderPass.begin(graphicsCommands, image.getFrameBuffer()); pipeline.bind(graphicsCommands); try (MemoryStack stack = MemoryStack.stackPush()) { + modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y)); + cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()) + .fillFloatBuffer(uniforms.mapFloats(stack, 0, 16, 0), true); + vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), VK_PIPELINE_BIND_POINT_GRAPHICS, + pipelineLayout.getNativeObject(), 0, stack.longs(descriptorSet.getId()), null); + uniforms.unmap(); vkCmdBindVertexBuffers(graphicsCommands.getBuffer(), 0, stack.longs(vertexBuffer.getNativeObject()), stack.longs(0)); vkCmdBindIndexBuffer(graphicsCommands.getBuffer(), indexBuffer.getNativeObject(), 0, VK_INDEX_TYPE_UINT32); VkViewport.Buffer vp = VkViewport.calloc(1, stack) @@ -280,7 +335,6 @@ public void run() { scissor.extent(swapchain.getExtent().toStruct(stack)); vkCmdSetScissor(graphicsCommands.getBuffer(), 0, scissor); } - //vkCmdDraw(graphicsCommands.getBuffer(), vertexData.limit() / 5, 1, 0, 0); vkCmdDrawIndexed(graphicsCommands.getBuffer(), indexData.limit(), 1, 0, 0, 0); vkCmdEndRenderPass(graphicsCommands.getBuffer()); graphicsCommands.end(); @@ -305,26 +359,30 @@ public SimpleQueueFamilies(Surface surface) { @Override public boolean populate(PhysicalDevice device, VkQueueFamilyProperties.Buffer properties) { - IntBuffer ibuf = MemoryUtil.memAllocInt(1); - for (int i = 0; i < properties.limit(); i++) { - VkQueueFamilyProperties props = properties.get(i); - if (graphicsIndex == null && (props.queueFlags() & VK13.VK_QUEUE_GRAPHICS_BIT) > 0) { - graphicsIndex = i; - } - if (presentIndex == null) { - KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR( - device.getDevice(), i, surface.getNativeObject(), ibuf); - if (ibuf.get(0) == VK13.VK_TRUE) { - presentIndex = i; + try (MemoryStack stack = MemoryStack.stackPush()) { + IntBuffer ibuf = stack.callocInt(1); + for (int i = 0; i < properties.limit(); i++) { + VkQueueFamilyProperties props = properties.get(i); + if (graphicsIndex == null && (props.queueFlags() & VK13.VK_QUEUE_GRAPHICS_BIT) > 0) { + graphicsIndex = i; + } else if (presentIndex == null) { + KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR( + device.getDevice(), i, surface.getNativeObject(), ibuf); + if (ibuf.get(0) == VK13.VK_TRUE) { + presentIndex = i; + } + } + if (isComplete()) { + return true; } } } - MemoryUtil.memFree(ibuf); - return isComplete(); + return false; } @Override public VkDeviceQueueCreateInfo.Buffer createLogicalBuffers(MemoryStack stack) { + System.out.println("selected queues: " + graphicsIndex + ", " + presentIndex); VkDeviceQueueCreateInfo.Buffer create = VkDeviceQueueCreateInfo.calloc(NUM_QUEUES, stack); create.get(0).sType(VK13.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) .queueFamilyIndex(graphicsIndex) diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java index cf97770299..b41eb05cca 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java @@ -28,6 +28,7 @@ import java.nio.LongBuffer; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; import java.util.logging.Level; import java.util.logging.Logger; @@ -560,7 +561,7 @@ private void addExtension(PointerBuffer ext) { instanceExtensions.add(ext); } - private class Frame implements Runnable { + private class Frame implements Consumer { private final Semaphore imageAvailable = null; private final Semaphore renderFinished = null; @@ -569,7 +570,7 @@ private class Frame implements Runnable { public Frame() {} @Override - public void run() { + public void accept(Float tpf) { try (MemoryStack stack = MemoryStack.stackPush()) { System.out.println("start frame render commands"); inFlight.blockThenReset(5000); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java b/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java index af3853d0c8..d72b629447 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/system/vulkan/LwjglVulkanContext.java @@ -175,9 +175,10 @@ protected void syncFrames() { protected void engineTerminate() { System.out.println("terminate engine"); engine.destroy(); - glfwDestroyWindow(window); + //glfwDestroyWindow(window); + glfwDestroy(); glfwTerminate(); - LOGGER.info("Display destroyed."); + System.out.println("Engine termination complete. Have a nice day."); } protected void updateSizes() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java index 431b2954bd..673a534257 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java @@ -22,6 +22,10 @@ static DeviceSwapchainSupport swapchain(Surface surface) { return new DeviceSwapchainSupport(surface); } + static DeviceAnisotropySupport anisotropy() { + return new DeviceAnisotropySupport(); + } + class DeviceExtensionSupport implements DeviceEvaluator { private final Collection extensions; @@ -34,15 +38,10 @@ public DeviceExtensionSupport(Collection extensions) { public Float evaluateDevice(PhysicalDevice device) { try (MemoryStack stack = MemoryStack.stackPush()) { VkExtensionProperties.Buffer exts = device.getExtensions(stack); - System.out.println("available:"); - for (VkExtensionProperties p : exts) { - System.out.println(" " + p.extensionNameString()); + if (extensions.stream().allMatch(e -> exts.stream().anyMatch( + p -> p.extensionNameString().equals(e)))) { + return 0f; } - if (extensions.stream().allMatch(e -> { - System.out.println("trying " + e + " extension..."); - return exts.stream().anyMatch( - p -> p.extensionNameString().equals(e)); })) return 0f; - System.out.println("Reject device by extensions"); return null; } } @@ -62,10 +61,23 @@ public Float evaluateDevice(PhysicalDevice device) { if (device.querySwapchainSupport(surface)) { return 0f; } - System.out.println("Reject device by swapchain support"); return null; } } + class DeviceAnisotropySupport implements DeviceEvaluator { + + @Override + public Float evaluateDevice(PhysicalDevice device) { + try (MemoryStack stack = MemoryStack.stackPush()) { + if (device.getFeatures(stack).samplerAnisotropy()) { + return 0f; + } + return null; + } + } + + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java index 4bd242b86a..fb0e6d0d91 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java @@ -2,6 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.images.ImageView; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkFramebufferCreateInfo; @@ -29,7 +30,7 @@ public FrameBuffer(LogicalDevice device, RenderPass compat, int width, int heigh for (int i = 0; i < attachments.length; i++) { att.put(i, attachments[i].getNativeObject()); } - VkFramebufferCreateInfo create = VkFramebufferCreateInfo.calloc() + VkFramebufferCreateInfo create = VkFramebufferCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO) .renderPass(compat.getNativeObject()) .pAttachments(att) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java index d358f29427..cfdf8987bc 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java @@ -61,6 +61,7 @@ public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass .lineWidth(1f) .cullMode(RenderStateToVulkan.faceCull(state.getFaceCullMode())) .frontFace(VK_FRONT_FACE_CLOCKWISE) + .cullMode(VK_CULL_MODE_NONE) .depthBiasEnable(false); VkPipelineMultisampleStateCreateInfo multisample = VkPipelineMultisampleStateCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java deleted file mode 100644 index 5a5ec7251e..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Image.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.jme3.vulkan; - -import com.jme3.util.natives.Native; -import org.lwjgl.vulkan.VkImageViewCreateInfo; - -public interface Image extends Native { - - ImageView createView(VkImageViewCreateInfo create); - - LogicalDevice getDevice(); - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java index 89e2c55c18..362e42395b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java @@ -22,7 +22,7 @@ public LogicalDevice(PhysicalDevice physical, PointerBuffer extensions, PointerB VkDeviceCreateInfo create = VkDeviceCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO) .pQueueCreateInfos(physical.getQueueFamilies().createLogicalBuffers(stack)) - .pEnabledFeatures(physical.getFeatures()); + .pEnabledFeatures(physical.getFeatures(stack).samplerAnisotropy(true)); if (extensions != null) { create.ppEnabledExtensionNames(extensions); } @@ -35,6 +35,7 @@ public LogicalDevice(PhysicalDevice physical, PointerBuffer extensions, PointerB device = new VkDevice(ptr.get(0), physical.getDevice(), create); } ref = Native.get().register(this); + physical.getInstance().getNativeReference().addDependent(ref); } @Override @@ -61,4 +62,8 @@ public PhysicalDevice getPhysicalDevice() { return physical; } + public void waitIdle() { + vkDeviceWaitIdle(device); + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java index 72bc1906ad..6367a77a03 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java @@ -17,10 +17,10 @@ public MeshDescription() { // for each vertex buffer on the mesh bindings = VkVertexInputBindingDescription.calloc(1) .binding(0) - .stride(Float.BYTES * 5) // bytes per vertex + .stride(Float.BYTES * 7) // bytes per vertex .inputRate(VK_VERTEX_INPUT_RATE_VERTEX); // for each attribute in each vertex buffer - attributes = VkVertexInputAttributeDescription.calloc(2); + attributes = VkVertexInputAttributeDescription.calloc(3); attributes.get(0).binding(0) .location(0) .format(VK_FORMAT_R32G32_SFLOAT) @@ -29,6 +29,10 @@ public MeshDescription() { .location(1) .format(VK_FORMAT_R32G32B32_SFLOAT) .offset(Float.BYTES * 2); + attributes.get(2).binding(0) + .location(2) + .format(VK_FORMAT_R32G32_SFLOAT) + .offset(Float.BYTES * 5); ref = Native.get().register(this); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OldImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OldImage.java deleted file mode 100644 index d3ec4ccc11..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OldImage.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.jme3.vulkan; - -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; -import org.lwjgl.vulkan.*; - -import java.nio.LongBuffer; - -import static com.jme3.renderer.vulkan.VulkanUtils.*; -import static org.lwjgl.vulkan.VK10.*; - -public class OldImage implements Image { - - private final LogicalDevice device; - private final NativeReference ref; - private final int width, height, format, tiling, usage, mem; - private long id, memory; - - public OldImage(LogicalDevice device, int width, int height, int format, int tiling, int usage, int mem) { - this.device = device; - this.width = width; - this.height = height; - this.format = format; - this.tiling = tiling; - this.usage = usage; - this.mem = mem; - try (MemoryStack stack = MemoryStack.stackPush()) { - VkImageCreateInfo create = VkImageCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) - .imageType(VK_IMAGE_TYPE_2D) - .mipLevels(1) - .arrayLayers(1) - .format(format) - .tiling(tiling) - .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) - .usage(usage) - .samples(VK_SAMPLE_COUNT_1_BIT) - .sharingMode(VK_SHARING_MODE_EXCLUSIVE); - create.extent().width(width).height(height).depth(1); - createImageMemory(stack, create, mem); - } - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - } - - public OldImage(LogicalDevice device, VkImageCreateInfo create, int mem) { - this.device = device; - this.width = create.extent().width(); - this.height = create.extent().height(); - this.format = create.format(); - this.tiling = create.tiling(); - this.usage = create.usage(); - this.mem = mem; - try (MemoryStack stack = MemoryStack.stackPush()) { - createImageMemory(stack, create, mem); - } - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - } - - public OldImage(LogicalDevice device, long id) { - width = height = format = tiling = usage = mem = 0; // todo: fix image interfacing - this.device = device; - System.out.println("Assign image ID: " + id); - this.id = id; - this.memory = VK_NULL_HANDLE; - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - } - - private void createImageMemory(MemoryStack stack, VkImageCreateInfo create, int mem) { - create.sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO); - vkCreateImage(device.getNativeObject(), create, null, stack.longs(id)); - VkMemoryRequirements memReq = VkMemoryRequirements.create(); - vkGetImageMemoryRequirements(device.getNativeObject(), id, memReq); - VkMemoryAllocateInfo allocate = VkMemoryAllocateInfo.create() - .sType(VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO) - .allocationSize(memReq.size()) - .memoryTypeIndex(device.getPhysicalDevice().findMemoryType(memReq.memoryTypeBits(), mem)); - LongBuffer memBuf = stack.mallocLong(1); - check(vkAllocateMemory(device.getNativeObject(), allocate, null, memBuf), "Failed to allocate image memory"); - memory = memBuf.get(0); - vkBindImageMemory(device.getNativeObject(), id, memory, 0); - memReq.free(); - allocate.free(); - } - - @Override - public Long getNativeObject() { - return id; - } - - @Override - public Runnable createNativeDestroyer() { - return () -> { - vkDestroyImage(device.getNativeObject(), id, null); - vkFreeMemory(device.getNativeObject(), memory, null); - id = VK_NULL_HANDLE; - memory = VK_NULL_HANDLE; - }; - } - - @Override - public void prematureNativeDestruction() {} - - @Override - public NativeReference getNativeReference() { - return ref; - } - - @Override - public LogicalDevice getDevice() { - return device; - } - - public long getMemory() { - return memory; - } - - @Override - public ImageView createView(VkImageViewCreateInfo create) { - return new ImageView(this, create); - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java index 2bd75dcd65..f75c1e3f89 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java @@ -2,7 +2,6 @@ import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.*; import java.nio.ByteBuffer; @@ -15,15 +14,17 @@ public class PhysicalDevice { + private final VulkanInstance instance; private final VkPhysicalDevice device; private final T queues; private final VkQueueFamilyProperties.Buffer queueProperties; - public PhysicalDevice(VkInstance instance, T queues, long id) { + public PhysicalDevice(VulkanInstance instance, T queues, long id) { + this.instance = instance; + this.device = new VkPhysicalDevice(id, instance.getNativeObject()); + this.queues = queues; try (MemoryStack stack = MemoryStack.stackPush()) { - this.queues = queues; - this.device = new VkPhysicalDevice(id, instance); - this.queueProperties = enumerateBuffer(stack, VkQueueFamilyProperties::malloc, + this.queueProperties = enumerateBuffer(stack, n -> VkQueueFamilyProperties.calloc(n, stack), (count, buffer) -> vkGetPhysicalDeviceQueueFamilyProperties(device, count, buffer)); this.queues.populate(this, getQueueFamilyProperties()); } @@ -42,6 +43,10 @@ public Float evaluate(Collection evaluators) { return score; } + public VulkanInstance getInstance() { + return instance; + } + public VkPhysicalDevice getDevice() { return device; } @@ -54,14 +59,14 @@ public VkQueueFamilyProperties.Buffer getQueueFamilyProperties() { return queueProperties; } - public VkPhysicalDeviceProperties getProperties() { - VkPhysicalDeviceProperties props = VkPhysicalDeviceProperties.create(); + public VkPhysicalDeviceProperties getProperties(MemoryStack stack) { + VkPhysicalDeviceProperties props = VkPhysicalDeviceProperties.malloc(stack); vkGetPhysicalDeviceProperties(device, props); return props; } - public VkPhysicalDeviceFeatures getFeatures() { - VkPhysicalDeviceFeatures features = VkPhysicalDeviceFeatures.create(); + public VkPhysicalDeviceFeatures getFeatures(MemoryStack stack) { + VkPhysicalDeviceFeatures features = VkPhysicalDeviceFeatures.malloc(stack); vkGetPhysicalDeviceFeatures(device, features); return features; } @@ -126,13 +131,13 @@ public boolean querySwapchainSupport(Surface surface) { } @SuppressWarnings("unchecked") - public static PhysicalDevice getPhysicalDevice(VkInstance instance, + public static PhysicalDevice getSuitableDevice(VulkanInstance instance, Collection evaluators, Supplier queueFactory) { try (MemoryStack stack = MemoryStack.stackPush()) { System.out.println("Get physical device from instance: " + instance); PointerBuffer devices = enumerateBuffer(stack, stack::mallocPointer, - (count, buffer) -> check(vkEnumeratePhysicalDevices(instance, count, buffer), + (count, buffer) -> check(vkEnumeratePhysicalDevices(instance.getNativeObject(), count, buffer), "Failed to enumerate physical devices.")); PhysicalDevice device = null; float score = -1f; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java index 8acb3c564d..83a5ceea93 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java @@ -1,9 +1,10 @@ package com.jme3.vulkan; +import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.descriptors.DescriptorSetLayout; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkPipelineLayoutCreateInfo; import java.nio.LongBuffer; @@ -15,13 +16,17 @@ public class PipelineLayout implements Native { private final LogicalDevice device; private final NativeReference ref; - private long id; + private final DescriptorSetLayout[] layouts; + private final long id; - public PipelineLayout(LogicalDevice device) { + public PipelineLayout(LogicalDevice device, DescriptorSetLayout... layouts) { this.device = device; + this.layouts = layouts; try (MemoryStack stack = MemoryStack.stackPush()) { VkPipelineLayoutCreateInfo create = VkPipelineLayoutCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO); + .sType(VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO) + .setLayoutCount(layouts.length) + .pSetLayouts(VulkanUtils.accumulate(stack, layouts)); LongBuffer idBuf = stack.mallocLong(1); check(vkCreatePipelineLayout(device.getNativeObject(), create, null, idBuf), "Failed to create pipeline."); @@ -38,10 +43,7 @@ public Long getNativeObject() { @Override public Runnable createNativeDestroyer() { - return () -> { - vkDestroyPipelineLayout(device.getNativeObject(), id, null); - id = VK_NULL_HANDLE; - }; + return () -> vkDestroyPipelineLayout(device.getNativeObject(), id, null); } @Override @@ -52,4 +54,8 @@ public NativeReference getNativeReference() { return ref; } + public DescriptorSetLayout[] getDescriptorSetLayouts() { + return layouts; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java index 79d2c5d169..5810266f90 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java @@ -29,6 +29,7 @@ public ShaderModule(LogicalDevice device, ByteBuffer code, String entryPoint) { "Failed to create shader module.")); } ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); } @Override diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java index 707f7e305d..e03c8f6d6c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java @@ -2,8 +2,9 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.images.ImageView; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.*; import java.nio.IntBuffer; @@ -28,10 +29,10 @@ public class Swapchain implements Native { public Swapchain(LogicalDevice device, Surface surface, SwapchainSupport support) { this.device = device; this.surface = surface; - reload(support); ref = Native.get().register(this); device.getNativeReference().addDependent(ref); surface.getNativeReference().addDependent(ref); + reload(support); } @Override @@ -102,6 +103,7 @@ public void reload(SwapchainSupport support) { images.add(new SwapchainImage(device, imgs.get(i))); } } + ref.refresh(); // refresh the native destroyer } public void createFrameBuffers(RenderPass compat) { @@ -156,30 +158,73 @@ public int getFormat() { return format; } - public class SwapchainImage extends OldImage { + public class SwapchainImage implements Image { + private final LogicalDevice device; + private final NativeReference ref; + private final long id; private final ImageView view; private FrameBuffer frameBuffer; private SwapchainImage(LogicalDevice device, long id) { - super(device, id); - try (MemoryStack stack = MemoryStack.stackPush()) { - VkImageViewCreateInfo create = VkImageViewCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) - .image(getNativeObject()) - .viewType(VK_IMAGE_VIEW_TYPE_2D) - .format(format); - create.components().r(VK_COMPONENT_SWIZZLE_IDENTITY) - .g(VK_COMPONENT_SWIZZLE_IDENTITY) - .b(VK_COMPONENT_SWIZZLE_IDENTITY) - .a(VK_COMPONENT_SWIZZLE_IDENTITY); - create.subresourceRange().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) - .baseMipLevel(0) - .levelCount(1) - .baseArrayLayer(0) - .layerCount(1); - this.view = new ImageView(this, create); - } + this.device = device; + this.id = id; + ref = Native.get().register(this); + Swapchain.this.ref.addDependent(ref); + view = createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1); + } + + @Override + public ImageView createView(VkImageViewCreateInfo create) { + return new ImageView(this, create); + } + + @Override + public LogicalDevice getDevice() { + return device; + } + + @Override + public int getType() { + return VK_IMAGE_TYPE_2D; + } + + @Override + public int getWidth() { + return extent.x; + } + + @Override + public int getHeight() { + return extent.y; + } + + @Override + public int getDepth() { + return 1; + } + + @Override + public int getFormat() { + return format; + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> {}; + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; } public void createFrameBuffer(RenderPass compat) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanLogger.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanLogger.java new file mode 100644 index 0000000000..611ea2fdcd --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanLogger.java @@ -0,0 +1,102 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.EXTDebugUtils; +import org.lwjgl.vulkan.VkDebugUtilsMessengerCallbackDataEXT; +import org.lwjgl.vulkan.VkDebugUtilsMessengerCallbackEXT; +import org.lwjgl.vulkan.VkDebugUtilsMessengerCreateInfoEXT; + +import java.util.logging.Level; + +import static com.jme3.renderer.vulkan.VulkanUtils.getLong; +import static com.jme3.renderer.vulkan.VulkanUtils.verifyExtensionMethod; +import static org.lwjgl.vulkan.EXTDebugUtils.*; +import static org.lwjgl.vulkan.VK10.VK_FALSE; + +public class VulkanLogger implements Native { + + private final VulkanInstance instance; + private final Level exceptionThreshold; + private final NativeReference ref; + private final long id; + private final VkDebugUtilsMessengerCallbackEXT callback = new VkDebugUtilsMessengerCallbackEXT() { + @Override + public int invoke(int messageSeverity, int messageTypes, long pCallbackData, long pUserData) { + return message(messageSeverity, messageTypes, pCallbackData, pUserData); + } + }; + + public VulkanLogger(VulkanInstance instance, Level exceptionThreshold) { + this.instance = instance; + this.exceptionThreshold = exceptionThreshold; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkDebugUtilsMessengerCreateInfoEXT create = VkDebugUtilsMessengerCreateInfoEXT.calloc(stack) + .sType(VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) + .messageSeverity( + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT + | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT + | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT + | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT + ).messageType( + VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT + | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT + | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT + ).pfnUserCallback(callback); + verifyExtensionMethod(instance.getNativeObject(), "vkCreateDebugUtilsMessengerEXT"); + id = getLong(stack, ptr -> vkCreateDebugUtilsMessengerEXT(instance.getNativeObject(), create, null, ptr)); + } + ref = Native.get().register(this); + instance.getNativeReference().addDependent(ref); + } + + public int message(int messageSeverity, int messageTypes, long pCallbackData, long pUserData) { + VkDebugUtilsMessengerCallbackDataEXT data = VkDebugUtilsMessengerCallbackDataEXT.create(pCallbackData); + Level lvl = getLoggingLevel(messageSeverity); + if (exceptionThreshold != null && lvl.intValue() >= exceptionThreshold.intValue()) { + throw new RuntimeException(lvl.getName() + ": " + data.pMessageString()); + } else { + System.err.println(lvl.getName() + " " + data.pMessageString()); + } + return VK_FALSE; // always return false, true is only really used for testing validation layers + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + verifyExtensionMethod(instance.getNativeObject(), "vkDestroyDebugUtilsMessengerEXT"); + vkDestroyDebugUtilsMessengerEXT(instance.getNativeObject(), id, null); + callback.close(); + }; + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + private Level getLoggingLevel(int messageSeverity) { + switch (messageSeverity) { + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: + return Level.SEVERE; + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: + return Level.WARNING; + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: + return Level.INFO; + case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: + return Level.FINE; + default: throw new UnsupportedOperationException("Unsupported severity bit: " + + Integer.numberOfTrailingZeros(Integer.highestOneBit(messageSeverity))); + } + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java index b76424a749..325b0f25a5 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java @@ -2,21 +2,22 @@ import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import java.util.function.IntFunction; public class VulkanRenderManager { - private final IntFunction frameFactory; - private final List frames = new ArrayList<>(); + private final IntFunction> frameFactory; + private final List> frames = new ArrayList<>(); private int currentFrame = 0; - public VulkanRenderManager(int frames, IntFunction frameFactory) { + public VulkanRenderManager(int frames, IntFunction> frameFactory) { this.frameFactory = frameFactory; setFrames(frames); } public void render(float tpf) { - frames.get(currentFrame).run(); + frames.get(currentFrame).accept(tpf); if (++currentFrame >= frames.size()) { currentFrame = 0; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferArgs.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferArgs.java deleted file mode 100644 index c5c95648df..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferArgs.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.jme3.vulkan.buffers; - -import static org.lwjgl.vulkan.VK10.*; - -public class BufferArgs { - - private int usage; - private int memFlags = 0; - private boolean concurrent = false; - - public BufferArgs vertexBuffer() { - usage |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; - return this; - } - - public BufferArgs indexBuffer() { - usage |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT; - return this; - } - - public BufferArgs transferSrc() { - usage |= VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - return this; - } - - public BufferArgs transferDst() { - usage |= VK_BUFFER_USAGE_TRANSFER_DST_BIT; - return this; - } - - public BufferArgs hostVisible() { - memFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; - return this; - } - - public BufferArgs hostCoherent() { - memFlags |= VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; - return this; - } - - public BufferArgs hostCached() { - memFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT; - return this; - } - - public BufferArgs deviceLocal() { - memFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - return this; - } - - public BufferArgs lazilyAllocated() { - memFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT; - return this; - } - - public BufferArgs setConcurrent(boolean concurrent) { - this.concurrent = concurrent; - return this; - } - - public int getUsage() { - return usage; - } - - public int getMemoryFlags() { - return memFlags; - } - - public boolean isConcurrent() { - return concurrent; - } - - public int getSharingMode() { - return concurrent ? VK_SHARING_MODE_CONCURRENT : VK_SHARING_MODE_EXCLUSIVE; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index 6707d10a3b..d5c930e421 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -1,10 +1,13 @@ package com.jme3.vulkan.buffers; +import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.CommandBuffer; import com.jme3.vulkan.LogicalDevice; -import com.jme3.vulkan.MemoryRegion; +import com.jme3.vulkan.flags.MemoryFlags; +import com.jme3.vulkan.flags.BufferUsageFlags; +import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkBufferCopy; @@ -22,17 +25,17 @@ public class GpuBuffer implements Native { private final NativeReference ref; private final int size; private final long id; - private final MemoryRegion memory; + protected final MemoryRegion memory; - public GpuBuffer(LogicalDevice device, int size, BufferArgs args) { + public GpuBuffer(LogicalDevice device, int size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { this.device = device; this.size = size; try (MemoryStack stack = MemoryStack.stackPush()) { VkBufferCreateInfo create = VkBufferCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO) .size(size) // size in bytes - .usage(args.getUsage()) - .sharingMode(args.getSharingMode()); + .usage(usage.getUsageFlags()) + .sharingMode(VulkanUtils.sharingMode(concurrent)); LongBuffer idBuf = stack.mallocLong(1); check(vkCreateBuffer(device.getNativeObject(), create, null, idBuf), "Failed to create buffer."); @@ -40,9 +43,8 @@ public GpuBuffer(LogicalDevice device, int size, BufferArgs args) { VkMemoryRequirements bufferMem = VkMemoryRequirements.malloc(stack); vkGetBufferMemoryRequirements(device.getNativeObject(), id, bufferMem); memory = new MemoryRegion(device, bufferMem.size(), device.getPhysicalDevice().findMemoryType( - stack, bufferMem.memoryTypeBits(), args.getMemoryFlags())); - check(vkBindBufferMemory(device.getNativeObject(), id, memory.getNativeObject(), 0), - "Failed to bind buffer memory"); + stack, bufferMem.memoryTypeBits(), mem.getMemoryFlags())); + memory.bind(this, 0); } ref = Native.get().register(this); device.getNativeReference().addDependent(ref); @@ -67,18 +69,77 @@ public NativeReference getNativeReference() { return ref; } + private void verifyBufferSize(Buffer buffer, long bytesPerElement) { + if (buffer.limit() * bytesPerElement > size) { + throw new BufferOverflowException(); + } + } + + public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { + return memory.map(stack, offset, size, flags); + } + + public ByteBuffer mapBytes(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size, flags).getByteBuffer(0, size); + } + + public ShortBuffer mapShorts(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size * Short.BYTES, flags).getShortBuffer(0, size); + } + + public IntBuffer mapInts(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size * Integer.BYTES, flags).getIntBuffer(0, size); + } + + public FloatBuffer mapFloats(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size * Float.BYTES, flags).getFloatBuffer(0, size); + } + + public DoubleBuffer mapDoubles(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size * Double.BYTES, flags).getDoubleBuffer(0, size); + } + + public LongBuffer mapLongs(MemoryStack stack, int offset, int size, int flags) { + return map(stack, offset, size * Long.BYTES, flags).getLongBuffer(0, size); + } + public void copy(MemoryStack stack, ByteBuffer buffer) { - MemoryUtil.memCopy(buffer, memory.mapBytes(stack, 0, buffer.limit(), 0)); - memory.unmap(); + verifyBufferSize(buffer, Byte.BYTES); + MemoryUtil.memCopy(buffer, mapBytes(stack, 0, buffer.limit(), 0)); + unmap(); + } + + public void copy(MemoryStack stack, ShortBuffer buffer) { + verifyBufferSize(buffer, Short.BYTES); + MemoryUtil.memCopy(buffer, mapShorts(stack, 0, buffer.limit(), 0)); + unmap(); } public void copy(MemoryStack stack, IntBuffer buffer) { - MemoryUtil.memCopy(buffer, memory.mapInts(stack, 0, buffer.limit(), 0)); - memory.unmap(); + verifyBufferSize(buffer, Integer.BYTES); + MemoryUtil.memCopy(buffer, mapInts(stack, 0, buffer.limit(), 0)); + unmap(); } public void copy(MemoryStack stack, FloatBuffer buffer) { - MemoryUtil.memCopy(buffer, memory.mapFloats(stack, 0, buffer.limit(), 0)); + verifyBufferSize(buffer, Float.BYTES); + MemoryUtil.memCopy(buffer, mapFloats(stack, 0, buffer.limit(), 0)); + unmap(); + } + + public void copy(MemoryStack stack, DoubleBuffer buffer) { + verifyBufferSize(buffer, Double.BYTES); + MemoryUtil.memCopy(buffer, mapDoubles(stack, 0, buffer.limit(), 0)); + unmap(); + } + + public void copy(MemoryStack stack, LongBuffer buffer) { + verifyBufferSize(buffer, Long.BYTES); + MemoryUtil.memCopy(buffer, mapLongs(stack, 0, buffer.limit(), 0)); + unmap(); + } + + public void unmap() { memory.unmap(); } @@ -94,12 +155,8 @@ public void freeMemory() { memory.getNativeReference().destroy(); } - public int getSize() { + public int size() { return size; // size in bytes } - public MemoryRegion getMemory() { - return memory; - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryRegion.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java similarity index 65% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryRegion.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java index 8067d55512..01f905c386 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryRegion.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java @@ -1,19 +1,17 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.buffers; -import com.jme3.util.IntMap; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.images.Image; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; -import org.lwjgl.system.Struct; -import org.lwjgl.system.StructBuffer; -import org.lwjgl.vulkan.VkInstanceCreateInfo; import org.lwjgl.vulkan.VkMemoryAllocateInfo; import java.nio.*; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; +import java.util.function.Consumer; import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; @@ -23,10 +21,12 @@ public class MemoryRegion implements Native { private final LogicalDevice device; private final NativeReference ref; private final long id; + private final long size; private final AtomicBoolean mapped = new AtomicBoolean(false); public MemoryRegion(LogicalDevice device, long size, int typeIndex) { this.device = device; + this.size = size; try (MemoryStack stack = MemoryStack.stackPush()) { VkMemoryAllocateInfo allocate = VkMemoryAllocateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO) @@ -59,6 +59,16 @@ public NativeReference getNativeReference() { return ref; } + public void bind(GpuBuffer buffer, long offset) { + check(vkBindBufferMemory(device.getNativeObject(), buffer.getNativeObject(), id, offset), + "Failed to bind buffer memory."); + } + + public void bind(Image image, long offset) { + check(vkBindImageMemory(device.getNativeObject(), image.getNativeObject(), id, offset), + "Failed to bind image memory."); + } + public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { if (mapped.getAndSet(true)) { throw new IllegalStateException("Memory already mapped."); @@ -68,30 +78,6 @@ public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { return data; } - public ByteBuffer mapBytes(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size, flags).getByteBuffer(0, size); - } - - public ShortBuffer mapShorts(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Short.BYTES, flags).getShortBuffer(0, size); - } - - public IntBuffer mapInts(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Integer.BYTES, flags).getIntBuffer(0, size); - } - - public FloatBuffer mapFloats(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Float.BYTES, flags).getFloatBuffer(0, size); - } - - public DoubleBuffer mapDoubles(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Double.BYTES, flags).getDoubleBuffer(0, size); - } - - public LongBuffer mapLongs(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Long.BYTES, flags).getLongBuffer(0, size); - } - public void unmap() { if (!mapped.getAndSet(false)) { throw new IllegalStateException("Memory is not mapped."); @@ -99,4 +85,8 @@ public void unmap() { vkUnmapMemory(device.getNativeObject(), id); } + public long getSize() { + return size; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java new file mode 100644 index 0000000000..5a0932fdb0 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java @@ -0,0 +1,33 @@ +package com.jme3.vulkan.buffers; + +import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.flags.MemoryFlags; +import com.jme3.vulkan.flags.BufferUsageFlags; +import org.lwjgl.BufferUtils; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; + +public class PersistentBuffer extends GpuBuffer { + + private final long address; + + public PersistentBuffer(LogicalDevice device, int size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + super(device, size, usage, mem, concurrent); + try (MemoryStack stack = MemoryStack.stackPush()) { + address = memory.map(stack, 0, size, 0).get(0); + } + } + + @Override + public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { + return stack.pointers(address); + } + + @Override + public void unmap() {} + + public long getAddress() { + return address; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java new file mode 100644 index 0000000000..49877649b5 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -0,0 +1,59 @@ +package com.jme3.vulkan.buffers; + +import com.jme3.vulkan.*; +import com.jme3.vulkan.flags.MemoryFlags; +import com.jme3.vulkan.flags.BufferUsageFlags; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; + +public class StageableBuffer extends GpuBuffer { + + private final GpuBuffer stage; + + public StageableBuffer(LogicalDevice device, int size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + super(device, size, usage.transferDst(), mem, concurrent); + stage = new GpuBuffer(device, size, new BufferUsageFlags().transferSrc(), + new MemoryFlags().hostVisible().hostCoherent(), concurrent); + } + + @Override + public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { + return stage.map(stack, offset, size, flags); + } + + @Override + public void unmap() { + stage.unmap(); + } + + @Override + public void freeMemory() { + super.freeMemory(); + stage.freeMemory(); + } + + public void transfer(CommandPool transferPool) { + transfer(transferPool, null, null, null); + transferPool.getQueue().waitIdle(); + } + + public void transfer(CommandPool transferPool, Semaphore wait, Semaphore signal, Fence fence) { + if (stage.getNativeReference().isDestroyed()) { + throw new IllegalStateException("Staging buffer has already been freed."); + } + CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); + try (MemoryStack stack = MemoryStack.stackPush()) { + recordCopy(stack, commands, stage, 0, 0, size()); + } + commands.submit(wait, signal, fence); + } + + public void freeStagingBuffer() { + stage.freeMemory(); + } + + public GpuBuffer getStagingBuffer() { + return stage; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java new file mode 100644 index 0000000000..46457084a0 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java @@ -0,0 +1,37 @@ +package com.jme3.vulkan.descriptors; + +import com.jme3.vulkan.buffers.GpuBuffer; +import org.lwjgl.vulkan.VkDescriptorBufferInfo; + +public class BufferDescriptor { + + private final GpuBuffer buffer; + private final long offset, range; + + public BufferDescriptor(GpuBuffer buffer) { + this(buffer, 0, buffer.size()); + } + + public BufferDescriptor(GpuBuffer buffer, long offset, long range) { + this.buffer = buffer; + this.offset = offset; + this.range = range; + } + + public void fillDescriptorInfo(VkDescriptorBufferInfo info) { + info.buffer(buffer.getNativeObject()).offset(offset).range(range); + } + + public GpuBuffer getBuffer() { + return buffer; + } + + public long getOffset() { + return offset; + } + + public long getRange() { + return range; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java new file mode 100644 index 0000000000..188b780fed --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java @@ -0,0 +1,32 @@ +package com.jme3.vulkan.descriptors; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkDescriptorBufferInfo; +import org.lwjgl.vulkan.VkWriteDescriptorSet; + +public class BufferSetWriter extends DescriptorSetWriter { + + private final BufferDescriptor[] descriptors; + + public BufferSetWriter(int type, int binding, int arrayElement, BufferDescriptor... descriptors) { + super(type, binding, arrayElement, descriptors.length); + this.descriptors = descriptors; + } + + @Override + public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + super.populateWrite(stack, write); + VkDescriptorBufferInfo.Buffer info = VkDescriptorBufferInfo.calloc(descriptors.length, stack); + for (BufferDescriptor d : descriptors) { + d.fillDescriptorInfo(info.get()); + } + info.flip(); + write.pBufferInfo(info); + } + + public static BufferSetWriter uniformBuffers(int binding, int arrayElement, BufferDescriptor... descriptors) { + return new BufferSetWriter(VK10.VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, binding, arrayElement, descriptors); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java new file mode 100644 index 0000000000..17c99aa15b --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java @@ -0,0 +1,28 @@ +package com.jme3.vulkan.descriptors; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; + +public class Descriptor implements Native { + + @Override + public Long getNativeObject() { + return 0L; + } + + @Override + public Runnable createNativeDestroyer() { + return null; + } + + @Override + public void prematureNativeDestruction() { + + } + + @Override + public NativeReference getNativeReference() { + return null; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java new file mode 100644 index 0000000000..c9b9bc87b2 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java @@ -0,0 +1,78 @@ +package com.jme3.vulkan.descriptors; + +import com.jme3.renderer.vulkan.VulkanUtils; +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.LogicalDevice; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.*; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.check; +import static org.lwjgl.vulkan.VK10.*; + +public class DescriptorPool implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private final long id; + + public DescriptorPool(LogicalDevice device, int sets, PoolSize... sizes) { + this.device = device; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkDescriptorPoolCreateInfo create = VkDescriptorPoolCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO) + .pPoolSizes(PoolSize.aggregate(stack, sizes)) + .maxSets(sets); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateDescriptorPool(device.getNativeObject(), create, null, idBuf), + "Failed to create descriptor pool."); + id = idBuf.get(0); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyDescriptorPool(device.getNativeObject(), id, null); + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public DescriptorSet[] allocateSets(DescriptorSetLayout... layouts) { + assert layouts.length > 0 : "Must specify at least one set layout."; + // layouts length = number of descriptor sets created + DescriptorSet[] sets = new DescriptorSet[layouts.length]; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkDescriptorSetAllocateInfo allocate = VkDescriptorSetAllocateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO) + .descriptorPool(id) + .pSetLayouts(VulkanUtils.accumulate(stack, layouts)); + LongBuffer setBuf = stack.mallocLong(layouts.length); + check(vkAllocateDescriptorSets(device.getNativeObject(), allocate, setBuf), + "Failed to allocate descriptor sets."); + for (int i = 0; i < setBuf.limit(); i++) { + sets[i] = new DescriptorSet(device, this, layouts[i], setBuf.get(i)); + } + } + return sets; + } + + public void reset() { + vkResetDescriptorPool(device.getNativeObject(), id, 0); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java new file mode 100644 index 0000000000..a7e685c841 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -0,0 +1,44 @@ +package com.jme3.vulkan.descriptors; + +import com.jme3.vulkan.LogicalDevice; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkWriteDescriptorSet; + +import static org.lwjgl.vulkan.VK10.*; + +public class DescriptorSet { + + private final LogicalDevice device; + private final DescriptorPool pool; + private final DescriptorSetLayout layout; + private final long id; + + public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSetLayout layout, long id) { + this.device = device; + this.pool = pool; + this.layout = layout; + this.id = id; + } + + public void write(DescriptorSetWriter... writers) { + try (MemoryStack stack = MemoryStack.stackPush()) { + VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(writers.length, stack); + for (DescriptorSetWriter w : writers) { + w.populateWrite(stack, write.get().sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET).dstSet(id)); + } + write.flip(); + vkUpdateDescriptorSets(device.getNativeObject(), write, null); + } + } + + public void free() { + try (MemoryStack stack = MemoryStack.stackPush()) { + vkFreeDescriptorSets(device.getNativeObject(), pool.getNativeObject(), stack.longs(id)); + } + } + + public long getId() { + return id; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java new file mode 100644 index 0000000000..a9a28c08e4 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java @@ -0,0 +1,65 @@ +package com.jme3.vulkan.descriptors; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.LogicalDevice; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkDescriptorSetLayoutBinding; +import org.lwjgl.vulkan.VkDescriptorSetLayoutCreateInfo; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.check; +import static org.lwjgl.vulkan.VK10.*; + +public class DescriptorSetLayout implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private final SetLayoutBinding[] bindings; + private final long id; + + public DescriptorSetLayout(LogicalDevice device, SetLayoutBinding... bindings) { + this.device = device; + this.bindings = bindings; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkDescriptorSetLayoutBinding.Buffer layoutBindings = VkDescriptorSetLayoutBinding.calloc(bindings.length, stack); + for (SetLayoutBinding b : bindings) { + b.fillLayoutBinding(layoutBindings.get()); + } + layoutBindings.flip(); + VkDescriptorSetLayoutCreateInfo create = VkDescriptorSetLayoutCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO) + .pBindings(layoutBindings); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateDescriptorSetLayout(device.getNativeObject(), create, null, idBuf), + "Failed to create descriptor set layout."); + id = idBuf.get(0); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyDescriptorSetLayout(device.getNativeObject(), id, null); + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public SetLayoutBinding[] getBindings() { + return bindings; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java new file mode 100644 index 0000000000..22e2e24f0e --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java @@ -0,0 +1,39 @@ +package com.jme3.vulkan.descriptors; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkWriteDescriptorSet; + +public class DescriptorSetWriter { + + private final int type, binding, arrayElement, descriptorCount; + + public DescriptorSetWriter(int type, int binding, int arrayElement, int descriptorCount) { + this.type = type; + this.binding = binding; + this.arrayElement = arrayElement; + this.descriptorCount = descriptorCount; + } + + public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + write.descriptorType(type).dstBinding(binding) + .dstArrayElement(arrayElement) + .descriptorCount(descriptorCount); + } + + public int getType() { + return type; + } + + public int getBinding() { + return binding; + } + + public int getArrayElement() { + return arrayElement; + } + + public int getDescriptorCount() { + return descriptorCount; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java new file mode 100644 index 0000000000..f426c707cc --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java @@ -0,0 +1,42 @@ +package com.jme3.vulkan.descriptors; + +import com.jme3.vulkan.images.ImageView; +import com.jme3.vulkan.images.Sampler; +import com.jme3.vulkan.images.Texture; +import org.lwjgl.vulkan.VkDescriptorImageInfo; + +public class ImageDescriptor { + + private final ImageView view; + private final Sampler sampler; + private final int layout; + + public ImageDescriptor(Texture texture, int layout) { + this(texture.getImage(), texture, layout); + } + + public ImageDescriptor(ImageView view, Sampler sampler, int layout) { + this.view = view; + this.sampler = sampler; + this.layout = layout; + } + + public void fillDescriptorInfo(VkDescriptorImageInfo info) { + info.imageView(view.getNativeObject()) + .sampler(sampler.getNativeObject()) + .imageLayout(layout); + } + + public ImageView getView() { + return view; + } + + public Sampler getSampler() { + return sampler; + } + + public int getLayout() { + return layout; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java new file mode 100644 index 0000000000..10001fcde4 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java @@ -0,0 +1,32 @@ +package com.jme3.vulkan.descriptors; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkDescriptorImageInfo; +import org.lwjgl.vulkan.VkWriteDescriptorSet; + +public class ImageSetWriter extends DescriptorSetWriter { + + private final ImageDescriptor[] descriptors; + + public ImageSetWriter(int type, int binding, int arrayElement, ImageDescriptor... descriptors) { + super(type, binding, arrayElement, descriptors.length); + this.descriptors = descriptors; + } + + @Override + public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + super.populateWrite(stack, write); + VkDescriptorImageInfo.Buffer info = VkDescriptorImageInfo.calloc(descriptors.length, stack); + for (ImageDescriptor d : descriptors) { + d.fillDescriptorInfo(info.get()); + } + info.flip(); + write.pImageInfo(info); + } + + public static ImageSetWriter combinedImageSampler(int binding, int arrayElement, ImageDescriptor... descriptors) { + return new ImageSetWriter(VK10.VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, binding, arrayElement, descriptors); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java new file mode 100644 index 0000000000..e31b5f1afe --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java @@ -0,0 +1,43 @@ +package com.jme3.vulkan.descriptors; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkDescriptorPoolSize; + +import static org.lwjgl.vulkan.VK10.*; + +public class PoolSize { + + private final int type; + private final int size; + + public PoolSize(int type, int size) { + this.type = type; + this.size = size; + } + + public int getType() { + return type; + } + + public int getSize() { + return size; + } + + public static PoolSize uniformBuffers(int size) { + return new PoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, size); + } + + public static PoolSize combinedImageSamplers(int size) { + return new PoolSize(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, size); + } + + public static VkDescriptorPoolSize.Buffer aggregate(MemoryStack stack, PoolSize... sizes) { + VkDescriptorPoolSize.Buffer buffer = VkDescriptorPoolSize.calloc(sizes.length, stack); + for (PoolSize poolSize : sizes) { + buffer.get().set(poolSize.type, poolSize.size); + } + buffer.flip(); + return buffer; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java new file mode 100644 index 0000000000..dbb20001dc --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java @@ -0,0 +1,50 @@ +package com.jme3.vulkan.descriptors; + +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkDescriptorSetLayoutBinding; + +public class SetLayoutBinding { + + private final int type, binding, descriptors, stages; + + public SetLayoutBinding(int type, int binding, int descriptors, int stages) { + this.type = type; + this.binding = binding; + this.descriptors = descriptors; + this.stages = stages; + } + + @SuppressWarnings("DataFlowIssue") + public void fillLayoutBinding(VkDescriptorSetLayoutBinding layoutBinding) { + layoutBinding.descriptorType(type) + .binding(binding) + .descriptorCount(descriptors) + .stageFlags(stages) + .pImmutableSamplers(null); + } + + public int getType() { + return type; + } + + public int getBinding() { + return binding; + } + + public int getDescriptors() { + return descriptors; + } + + public int getStages() { + return stages; + } + + public static SetLayoutBinding uniformBuffer(int binding, int descriptors, int stages) { + return new SetLayoutBinding(VK10.VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, binding, descriptors, stages); + } + + public static SetLayoutBinding combinedImageSampler(int binding, int descriptors, int stages) { + return new SetLayoutBinding(VK10.VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, binding, descriptors, stages); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/BufferUsageFlags.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/BufferUsageFlags.java new file mode 100644 index 0000000000..364875bbe9 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/BufferUsageFlags.java @@ -0,0 +1,38 @@ +package com.jme3.vulkan.flags; + +import static org.lwjgl.vulkan.VK10.*; + +public class BufferUsageFlags { + + private int usageFlags; + + public BufferUsageFlags vertexBuffer() { + usageFlags |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; + return this; + } + + public BufferUsageFlags indexBuffer() { + usageFlags |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT; + return this; + } + + public BufferUsageFlags transferSrc() { + usageFlags |= VK_BUFFER_USAGE_TRANSFER_SRC_BIT; + return this; + } + + public BufferUsageFlags transferDst() { + usageFlags |= VK_BUFFER_USAGE_TRANSFER_DST_BIT; + return this; + } + + public BufferUsageFlags uniformBuffer() { + usageFlags |= VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; + return this; + } + + public int getUsageFlags() { + return usageFlags; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java new file mode 100644 index 0000000000..e85f1271e4 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java @@ -0,0 +1,28 @@ +package com.jme3.vulkan.flags; + +import static org.lwjgl.vulkan.VK10.*; + +public class ImageUsageFlags { + + private int usageFlags; + + public ImageUsageFlags transferSrc() { + usageFlags |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + return this; + } + + public ImageUsageFlags transferDst() { + usageFlags |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; + return this; + } + + public ImageUsageFlags sampled() { + usageFlags |= VK_IMAGE_USAGE_SAMPLED_BIT; + return this; + } + + public int getUsageFlags() { + return usageFlags; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/MemoryFlags.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/MemoryFlags.java new file mode 100644 index 0000000000..ade8e39d3d --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/MemoryFlags.java @@ -0,0 +1,38 @@ +package com.jme3.vulkan.flags; + +import static org.lwjgl.vulkan.VK10.*; + +public class MemoryFlags { + + private int memFlags = 0; + + public MemoryFlags hostVisible() { + memFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; + return this; + } + + public MemoryFlags hostCoherent() { + memFlags |= VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; + return this; + } + + public MemoryFlags hostCached() { + memFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT; + return this; + } + + public MemoryFlags deviceLocal() { + memFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; + return this; + } + + public MemoryFlags lazilyAllocated() { + memFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT; + return this; + } + + public int getMemoryFlags() { + return memFlags; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java new file mode 100644 index 0000000000..f7ca4dd6ec --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -0,0 +1,143 @@ +package com.jme3.vulkan.images; + +import com.jme3.renderer.vulkan.VulkanUtils; +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.CommandBuffer; +import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.buffers.MemoryRegion; +import com.jme3.vulkan.flags.ImageUsageFlags; +import com.jme3.vulkan.flags.MemoryFlags; +import com.jme3.vulkan.flags.BufferUsageFlags; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkImageCreateInfo; +import org.lwjgl.vulkan.VkImageMemoryBarrier; +import org.lwjgl.vulkan.VkImageViewCreateInfo; +import org.lwjgl.vulkan.VkMemoryRequirements; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class GpuImage implements Image { + + private final LogicalDevice device; + private final NativeReference ref; + private final long id; + private final MemoryRegion memory; + private final int type, width, height, depth, format; + + public GpuImage(LogicalDevice device, int width, int height, int format, ImageUsageFlags usage, MemoryFlags mem) { + this(device, VK_IMAGE_TYPE_2D, width, height, 1, format, usage, mem); + } + + public GpuImage(LogicalDevice device, int type, int width, int height, int depth, int format, ImageUsageFlags usage, MemoryFlags mem) { + this.device = device; + this.type = type; + this.width = width; + this.height = height; + this.depth = depth; + this.format = format; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkImageCreateInfo create = VkImageCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) + .imageType(type) + .mipLevels(1) + .arrayLayers(1) + .format(format) + .tiling(VK_IMAGE_TILING_OPTIMAL) + .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) + .usage(usage.getUsageFlags()) + .samples(VK_SAMPLE_COUNT_1_BIT) + .sharingMode(VK_SHARING_MODE_EXCLUSIVE); + create.extent().width(width).height(height).depth(depth); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateImage(device.getNativeObject(), create, null, idBuf), + "Failed to create image."); + id = idBuf.get(0); + VkMemoryRequirements memReq = VkMemoryRequirements.malloc(stack); + vkGetImageMemoryRequirements(device.getNativeObject(), id, memReq); + memory = new MemoryRegion(device, memReq.size(), device.getPhysicalDevice().findMemoryType( + stack, memReq.memoryTypeBits(), mem.getMemoryFlags())); + memory.bind(this, 0); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + @Override + public ImageView createView(VkImageViewCreateInfo create) { + return new ImageView(this, create); + } + + @Override + public LogicalDevice getDevice() { + return device; + } + + @Override + public int getType() { + return type; + } + + @Override + public int getWidth() { + return width; + } + + @Override + public int getHeight() { + return height; + } + + @Override + public int getDepth() { + return depth; + } + + @Override + public int getFormat() { + return format; + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyImage(device.getNativeObject(), id, null); + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public void transitionLayout(CommandBuffer commands, int srcLayout, int dstLayout) { + try (MemoryStack stack = MemoryStack.stackPush()) { + int[] args = VulkanUtils.getTransferArguments(srcLayout, dstLayout); + VkImageMemoryBarrier.Buffer barrier = VkImageMemoryBarrier.calloc(1, stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) + .oldLayout(srcLayout) + .newLayout(dstLayout) + .srcQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) + .dstQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) // for transfering queue ownership + .image(id) + .srcAccessMask(args[0]) + .dstAccessMask(args[1]); + barrier.subresourceRange().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + .baseMipLevel(0) + .levelCount(1) + .baseArrayLayer(0) + .layerCount(1); + vkCmdPipelineBarrier(commands.getBuffer(), args[2], args[3], 0, null, null, barrier); + } + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java new file mode 100644 index 0000000000..94b4350ed8 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java @@ -0,0 +1,46 @@ +package com.jme3.vulkan.images; + +import com.jme3.util.natives.Native; +import com.jme3.vulkan.LogicalDevice; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkImageViewCreateInfo; + +import static org.lwjgl.vulkan.VK10.*; + +public interface Image extends Native { + + ImageView createView(VkImageViewCreateInfo create); + + LogicalDevice getDevice(); + + int getType(); + + int getWidth(); + + int getHeight(); + + int getDepth(); + + int getFormat(); + + default ImageView createView(int type, int aspects, int baseMip, int mipCount, int baseLayer, int layerCount) { + try (MemoryStack stack = MemoryStack.stackPush()) { + VkImageViewCreateInfo create = VkImageViewCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) + .image(getNativeObject()) + .viewType(type) + .format(getFormat()); + create.components().r(VK_COMPONENT_SWIZZLE_IDENTITY) + .g(VK_COMPONENT_SWIZZLE_IDENTITY) + .b(VK_COMPONENT_SWIZZLE_IDENTITY) + .a(VK_COMPONENT_SWIZZLE_IDENTITY); + create.subresourceRange().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + .baseMipLevel(baseMip) + .levelCount(mipCount) + .baseArrayLayer(baseLayer) + .layerCount(layerCount); + return createView(create); + } + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java similarity index 87% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java index 9b9e6bbc9c..5084a8841f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ImageView.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java @@ -1,9 +1,8 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.images; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkImageViewCreateInfo; @@ -13,13 +12,13 @@ public class ImageView implements Native { private final Image image; private final NativeReference ref; - private long id; + private final long id; public ImageView(Image image, VkImageViewCreateInfo create) { this.image = image; create.sType(VK10.VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO); create.image(image.getNativeObject()); - System.out.println("image ID: " + image.getNativeObject()); + System.out.println("creating imageView: " + toString()); try (MemoryStack stack = MemoryStack.stackPush()) { LongBuffer idBuf = stack.mallocLong(1); VK10.vkCreateImageView(image.getDevice().getNativeObject(), create, null, idBuf); @@ -37,8 +36,8 @@ public Long getNativeObject() { @Override public Runnable createNativeDestroyer() { return () -> { + System.out.println("destroying imageView: " + toString()); VK10.vkDestroyImageView(image.getDevice().getNativeObject(), id, null); - id = VK10.VK_NULL_HANDLE; }; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java new file mode 100644 index 0000000000..c06d7220d8 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java @@ -0,0 +1,69 @@ +package com.jme3.vulkan.images; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.LogicalDevice; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkPhysicalDeviceProperties; +import org.lwjgl.vulkan.VkSamplerCreateInfo; + +import java.nio.LongBuffer; + +import static org.lwjgl.vulkan.VK10.*; + +public class Sampler implements Native { + + private final LogicalDevice device; + private final NativeReference ref; + private final long id; + + public Sampler(LogicalDevice device, int min, int mag, int edgeMode, int mipmapMode) { + this.device = device; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkPhysicalDeviceProperties props = device.getPhysicalDevice().getProperties(stack); + VkSamplerCreateInfo create = VkSamplerCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO) + .minFilter(min) + .magFilter(mag) + .addressModeU(edgeMode) + .addressModeV(edgeMode) + .addressModeW(edgeMode) + .anisotropyEnable(true) + .maxAnisotropy(props.limits().maxSamplerAnisotropy()) + .borderColor(VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK) + .unnormalizedCoordinates(false) // use (0, 1) sampler coordinates + .compareEnable(false) + .compareOp(VK_COMPARE_OP_ALWAYS) + .mipmapMode(mipmapMode) + .mipLodBias(0f) + .minLod(0f) + .maxLod(0f); + LongBuffer idBuf = stack.mallocLong(1); + vkCreateSampler(device.getNativeObject(), create, null, idBuf); + id = idBuf.get(0); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroySampler(device.getNativeObject(), id, null); + } + + @Override + public void prematureNativeDestruction() { + + } + + @Override + public NativeReference getNativeReference() { + return null; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java new file mode 100644 index 0000000000..4a65f2ab3d --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java @@ -0,0 +1,18 @@ +package com.jme3.vulkan.images; + +import com.jme3.vulkan.LogicalDevice; + +public class Texture extends Sampler { + + private final ImageView image; + + public Texture(LogicalDevice device, ImageView image, int min, int mag, int edgeMode, int mipmapMode) { + super(device, min, mag, edgeMode, mipmapMode); + this.image = image; + } + + public ImageView getImage() { + return image; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java new file mode 100644 index 0000000000..8489807485 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -0,0 +1,199 @@ +package com.jme3.vulkan.images; + +import com.jme3.asset.*; +import com.jme3.texture.Image; +import com.jme3.util.BufferUtils; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferByte; +import java.awt.image.DataBufferUShort; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; + +import static org.lwjgl.vulkan.VK10.*; + +public class VulkanImageLoader implements AssetLoader { + + @Override + public Object load(AssetInfo info) throws IOException { + if (ImageIO.getImageReadersBySuffix(info.getKey().getExtension()) != null) { + boolean flip = ((Key)info.getKey()).isFlip(); + try (InputStream stream = info.openStream(); BufferedInputStream bin = new BufferedInputStream(stream)) { + ImageData img = load(bin, flip); + if (img == null){ + throw new AssetLoadException("The given image cannot be loaded " + info.getKey()); + } + return img; + } + } + throw new AssetLoadException("Image extension " + info.getKey().getExtension() + " is not supported"); + } + + public ImageData load(InputStream in, boolean flip) throws IOException { + ImageIO.setUseCache(false); + BufferedImage img = ImageIO.read(in); + if (img == null){ + return null; + } + return load(img, flip); + } + + public ImageData load(BufferedImage img, boolean flipY) { + int width = img.getWidth(); + int height = img.getHeight(); + byte[] data = (byte[])extractImageData(img); + switch (img.getType()) { + case BufferedImage.TYPE_4BYTE_ABGR: { // most common in PNG images w/ alpha + if (flipY) { + flipImage(data, width, height, 32); + } + ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * 4); + buffer.put(data); + return new ImageData(buffer, width, height, VK_FORMAT_A8B8G8R8_SRGB_PACK32); + } + case BufferedImage.TYPE_3BYTE_BGR: { // most common in JPEG images + if (flipY) { + flipImage(data, width, height, 24); + } + ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * 3); + buffer.put(data); + return new ImageData(buffer, width, height, VK_FORMAT_B8G8R8_SRGB); + } + case BufferedImage.TYPE_BYTE_GRAY: { // grayscale fonts + if (flipY) { + flipImage(data, width, height, 8); + } + ByteBuffer buffer = BufferUtils.createByteBuffer(width * height); + buffer.put(data); + return new ImageData(buffer, width, height, VK_FORMAT_R8_SRGB); + } + } + if (img.getTransparency() == Transparency.OPAQUE){ + ByteBuffer buffer = BufferUtils.createByteBuffer(img.getWidth() * img.getHeight() * 4); + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + int ny = y; + if (flipY) { + ny = height - y - 1; + } + int rgb = img.getRGB(x, ny); + byte r = (byte) ((rgb & 0x00FF0000) >> 16); + byte g = (byte) ((rgb & 0x0000FF00) >> 8); + byte b = (byte) ((rgb & 0x000000FF)); + byte a = Byte.MAX_VALUE; + buffer.put(r).put(g).put(b).put(a); + } + } + buffer.flip(); + return new ImageData(buffer, width, height, VK_FORMAT_R8G8B8A8_SRGB); + } else { + ByteBuffer buffer = BufferUtils.createByteBuffer(img.getWidth() * img.getHeight() * 4); + for (int y = 0; y < height; y++){ + for (int x = 0; x < width; x++){ + int ny = y; + if (flipY) { + ny = height - y - 1; + } + int rgb = img.getRGB(x,ny); + byte a = (byte) ((rgb & 0xFF000000) >> 24); + byte r = (byte) ((rgb & 0x00FF0000) >> 16); + byte g = (byte) ((rgb & 0x0000FF00) >> 8); + byte b = (byte) ((rgb & 0x000000FF)); + buffer.put(r).put(g).put(b).put(a); + } + } + buffer.flip(); + return new ImageData(buffer, width, height, VK_FORMAT_R8G8B8A8_SRGB); + } + } + + private Object extractImageData(BufferedImage img) { + DataBuffer buf = img.getRaster().getDataBuffer(); + switch (buf.getDataType()) { + case DataBuffer.TYPE_BYTE: { + DataBufferByte byteBuf = (DataBufferByte) buf; + return byteBuf.getData(); + } + case DataBuffer.TYPE_USHORT: { + DataBufferUShort shortBuf = (DataBufferUShort) buf; + return shortBuf.getData(); + } + default: throw new UnsupportedOperationException("Image data type not supported: " + buf.getDataType()); + } + } + + private void flipImage(byte[] img, int width, int height, int bpp) { + int scSz = (width * bpp) / 8; + byte[] sln = new byte[scSz]; + for (int y1 = 0; y1 < height / 2; y1++) { + int y2 = height - y1 - 1; + System.arraycopy(img, y1 * scSz, sln, 0, scSz); + System.arraycopy(img, y2 * scSz, img, y1 * scSz, scSz); + System.arraycopy(sln, 0, img, y2 * scSz, scSz); + } + } + + public static Key key(String name) { + return new Key(name); + } + + public static class Key extends AssetKey { + + private boolean flip; + + public Key(String name) { + this(name, false); + } + + public Key(String name, boolean flip) { + super(name); + this.flip = flip; + } + + public void setFlip(boolean flip) { + this.flip = flip; + } + + public boolean isFlip() { + return flip; + } + + } + + public static class ImageData { + + private final ByteBuffer buffer; + private final int width, height; + private final int format; + + public ImageData(ByteBuffer buffer, int width, int height, int format) { + this.buffer = buffer; + this.width = width; + this.height = height; + this.format = format; + } + + public ByteBuffer getBuffer() { + return buffer; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public int getFormat() { + return format; + } + + } + +} diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl index 13009da8fe..945951f055 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl @@ -1,9 +1,12 @@ #version 450 layout(location = 0) in vec3 fragColor; +layout(location = 1) in vec2 texCoord; layout(location = 0) out vec4 outColor; +layout(binding = 1) uniform sampler2D colorTexture; + void main() { - outColor = vec4(fragColor, 1.0); + outColor = texture(colorTexture, texCoord) * vec4(fragColor, 1.0); } \ No newline at end of file diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl index 804b6dacd0..a3b97794ef 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl @@ -2,10 +2,17 @@ layout (location = 0) in vec2 inPosition; layout (location = 1) in vec3 inColor; +layout (location = 2) in vec2 inTexCoord; layout (location = 0) out vec3 fragColor; +layout (location = 1) out vec2 texCoord; + +layout (binding = 0) uniform UniformBufferObject { + mat4 worldViewProjectionMatrix; +} ubo; void main() { - gl_Position = vec4(inPosition, 0.0, 1.0); + gl_Position = ubo.worldViewProjectionMatrix * vec4(inPosition, 0.0, 1.0); fragColor = inColor; + texCoord = inTexCoord; } \ No newline at end of file From 8e7ff36d42e4f6544bafeb819266c9f907ab3c56 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Fri, 1 Aug 2025 11:10:32 -0400 Subject: [PATCH 16/80] added depth testing; added enums for image properties --- .../com/jme3/renderer/vulkan/VulkanUtils.java | 12 -- .../jme3test/vulkan/VulkanHelperTest.java | 89 +++++++++--- .../com/jme3/vulkan/GraphicsPipeline.java | 8 ++ .../java/com/jme3/vulkan/MeshDescription.java | 8 +- .../java/com/jme3/vulkan/PhysicalDevice.java | 7 +- .../main/java/com/jme3/vulkan/RenderPass.java | 5 +- .../com/jme3/vulkan/RenderStateToVulkan.java | 14 ++ .../main/java/com/jme3/vulkan/Swapchain.java | 23 ++-- .../jme3/vulkan/flags/ImageUsageFlags.java | 5 + .../java/com/jme3/vulkan/images/GpuImage.java | 43 ++++-- .../java/com/jme3/vulkan/images/Image.java | 128 +++++++++++++++++- .../jme3/vulkan/images/VulkanImageLoader.java | 19 ++- .../resources/Shaders/VulkanVertTest.glsl | 4 +- 13 files changed, 287 insertions(+), 78 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java b/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java index 535f5f9d93..c251de6b5a 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java +++ b/jme3-core/src/main/java/com/jme3/renderer/vulkan/VulkanUtils.java @@ -148,18 +148,6 @@ public static LongBuffer accumulate(MemoryStack stack, Native... natives) return buf; } - public static int[] getTransferArguments(int srcLayout, int dstLayout) { - // output array format: {srcAccessMask, dstAccessMask, srcStage, dstStage} - if (srcLayout == VK_IMAGE_LAYOUT_UNDEFINED && dstLayout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) { - return new int[] {0, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT}; - } else if (srcLayout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL && dstLayout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) { - return new int[] {VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT, - VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT}; - } else { - throw new UnsupportedOperationException("Unsupported layer transitions."); - } - } - public static class NativeIterator implements Iterable, Iterator { private final PointerBuffer pointers; diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 09eda177fe..b145d7a396 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -6,6 +6,7 @@ import com.jme3.math.Quaternion; import com.jme3.math.Transform; import com.jme3.math.Vector3f; +import com.jme3.opencl.CommandQueue; import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.shaderc.ShaderType; import com.jme3.shaderc.ShadercLoader; @@ -62,15 +63,31 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda private VulkanLogger logger; + // mesh private final FloatBuffer vertexData = BufferUtils.createFloatBuffer( - -0.5f, -0.5f, 1f, 0f, 0f, 1f, 0f, - 0.5f, -0.5f, 0f, 1f, 0f, 0f, 0f, - 0.5f, 0.5f, 0f, 0f, 1f, 0f, 1f, - -0.5f, 0.5f, 1f, 1f, 1f, 1f, 1f); - private final IntBuffer indexData = BufferUtils.createIntBuffer(0, 1, 2, 2, 3, 0); + -0.5f, -0.5f, 0f, 1f, 0f, 0f, 1f, 0f, + 0.5f, -0.5f, 0f, 0f, 1f, 0f, 0f, 0f, + 0.5f, 0.5f, 0f, 0f, 0f, 1f, 0f, 1f, + -0.5f, 0.5f, 0f, 1f, 1f, 1f, 1f, 1f, + + -0.5f, -0.5f, -0.5f, 1f, 0f, 0f, 1f, 0f, + 0.5f, -0.5f, -0.5f, 0f, 1f, 0f, 0f, 0f, + 0.5f, 0.5f, -0.5f, 0f, 0f, 1f, 0f, 1f, + -0.5f, 0.5f, -0.5f, 1f, 1f, 1f, 1f, 1f + ); + private final IntBuffer indexData = BufferUtils.createIntBuffer( + 0, 1, 2, 2, 3, 0, + 4, 5, 6, 6, 7, 4); + + // geometry private final Transform modelTransform = new Transform(); + + // material private Texture texture; + // framebuffer + private ImageView depthView; + public static void main(String[] args) { VulkanHelperTest app = new VulkanHelperTest(); AppSettings settings = new AppSettings(true); @@ -145,6 +162,23 @@ public void simpleInitApp() { descriptorPool = new DescriptorPool(device, 2, PoolSize.uniformBuffers(2), PoolSize.combinedImageSamplers(2)); + CommandPool transferPool = new CommandPool(device, queues.getGraphicsQueue(), true, false); + + // depth texture + Image.Format depthFormat = device.getPhysicalDevice().findSupportedFormat( + VK_IMAGE_TILING_OPTIMAL, + VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, + Image.Format.Depth32SFloat, Image.Format.Depth32SFloat_Stencil8UInt, Image.Format.Depth24UNorm_Stencil8UInt); + GpuImage depthImage = new GpuImage(device, swapchain.getExtent().x, swapchain.getExtent().y, depthFormat, + Image.Tiling.Optimal, new ImageUsageFlags().depthStencilAttachment(), new MemoryFlags().deviceLocal()); + depthView = depthImage.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_DEPTH_BIT, 0, 1, 0, 1); + CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); + commands.begin(); + depthImage.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.DepthStencilAttachmentOptimal); + commands.end(); + commands.submit(null, null, null); + commands.getPool().getQueue().waitIdle(); + // pipeline pipelineLayout = new PipelineLayout(device, descriptorLayout); vertModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( @@ -153,37 +187,48 @@ public void simpleInitApp() { "Shaders/VulkanFragTest.glsl", ShaderType.Fragment)), "main"); try (RenderPassBuilder pass = new RenderPassBuilder()) { int color = pass.createAttachment(a -> a - .format(swapchain.getFormat()) + .format(swapchain.getFormat().getVkEnum()) .samples(VK_SAMPLE_COUNT_1_BIT) .loadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) .storeOp(VK_ATTACHMENT_STORE_OP_STORE) .stencilLoadOp(VK_ATTACHMENT_LOAD_OP_DONT_CARE) .stencilStoreOp(VK_ATTACHMENT_STORE_OP_DONT_CARE) - .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) - .finalLayout(KHRSwapchain.VK_IMAGE_LAYOUT_PRESENT_SRC_KHR)); + .initialLayout(Image.Layout.Undefined.getVkEnum()) + .finalLayout(Image.Layout.PresentSrc.getVkEnum())); + int depth = pass.createAttachment(a -> a + .format(depthFormat.getVkEnum()) + .samples(VK_SAMPLE_COUNT_1_BIT) + .loadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) + .storeOp(VK_ATTACHMENT_STORE_OP_DONT_CARE) + .stencilLoadOp(VK_ATTACHMENT_LOAD_OP_DONT_CARE) + .stencilStoreOp(VK_ATTACHMENT_STORE_OP_DONT_CARE) + .initialLayout(Image.Layout.Undefined.getVkEnum()) + .finalLayout(Image.Layout.DepthStencilAttachmentOptimal.getVkEnum())); int subpass = pass.createSubpass(s -> { - VkAttachmentReference.Buffer ref = VkAttachmentReference.calloc(1, pass.getStack()) + VkAttachmentReference.Buffer colorRef = VkAttachmentReference.calloc(1, pass.getStack()) .attachment(color) - .layout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); + .layout(Image.Layout.ColorAttachmentOptimal.getVkEnum()); + VkAttachmentReference depthRef = VkAttachmentReference.calloc(pass.getStack()) + .attachment(depth) + .layout(Image.Layout.DepthStencilAttachmentOptimal.getVkEnum()); s.pipelineBindPoint(VK_PIPELINE_BIND_POINT_GRAPHICS) .colorAttachmentCount(1) - .pColorAttachments(ref); + .pColorAttachments(colorRef) + .pDepthStencilAttachment(depthRef); }); pass.createDependency() .srcSubpass(VK_SUBPASS_EXTERNAL) .dstSubpass(subpass) - .srcStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) + .srcStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT) .srcAccessMask(subpass) - .dstStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) - .dstAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT); + .dstStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT) + .dstAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT); renderPass = pass.build(device); } - swapchain.createFrameBuffers(renderPass); + swapchain.createFrameBuffers(renderPass, depthView); pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, new RenderState(), vertModule, fragModule, new MeshDescription()); graphicsPool = new CommandPool(device, queues.getGraphicsQueue(), false, true); - CommandPool transferPool = new CommandPool(device, queues.getGraphicsQueue(), true, false); - // vertex buffers try (MemoryStack stack = MemoryStack.stackPush()) { // cpu-accessible memory is not usually fast for the gpu to access, but @@ -203,6 +248,7 @@ public void simpleInitApp() { indexBuffer.freeStagingBuffer(); } + // material color texture GpuImage image = loadImage("Common/Textures/MissingTexture.png", transferPool); texture = new Texture(device, image.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1), VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); @@ -227,7 +273,7 @@ public boolean swapchainOutOfDate(Swapchain swapchain, int imageAcquireCode) { long window = ((LwjglVulkanContext)context).getWindowHandle(); try (SimpleSwapchainSupport support = new SimpleSwapchainSupport(device.getPhysicalDevice(), surface, window)) { swapchain.reload(support); - swapchain.createFrameBuffers(renderPass); + swapchain.createFrameBuffers(renderPass, depthView); } return true; } @@ -254,10 +300,11 @@ private GpuImage loadImage(String file, CommandPool transferPool) { new BufferUsageFlags().transferSrc(), new MemoryFlags().hostVisible().hostCoherent(), false); staging.copy(stack, data.getBuffer()); GpuImage image = new GpuImage(device, data.getWidth(), data.getHeight(), data.getFormat(), - new ImageUsageFlags().transferDst().sampled(), new MemoryFlags().deviceLocal()); + Image.Tiling.Optimal, new ImageUsageFlags().transferDst().sampled(), + new MemoryFlags().deviceLocal()); CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); commands.begin(); - image.transitionLayout(commands, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + image.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.TransferDstOptimal); VkBufferImageCopy.Buffer region = VkBufferImageCopy.calloc(1, stack) .bufferOffset(0) .bufferRowLength(0) // padding bytes @@ -270,7 +317,7 @@ private GpuImage loadImage(String file, CommandPool transferPool) { region.imageExtent().set(data.getWidth(), data.getHeight(), 1); vkCmdCopyBufferToImage(commands.getBuffer(), staging.getNativeObject(), image.getNativeObject(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, region); - image.transitionLayout(commands, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + image.transitionLayout(commands, Image.Layout.TransferDstOptimal, Image.Layout.ShaderReadOnlyOptimal); commands.end(); commands.submit(null, null, null); transferPool.getQueue().waitIdle(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java index cfdf8987bc..4cd7989613 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java @@ -53,6 +53,13 @@ public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass .sType(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO) .pViewports(viewport) .pScissors(scissor); + VkPipelineDepthStencilStateCreateInfo depthStencil = VkPipelineDepthStencilStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO) + .depthTestEnable(state.isDepthTest()) + .depthWriteEnable(state.isDepthWrite()) + .depthCompareOp(RenderStateToVulkan.depthFunc(state.getDepthFunc())) + .depthBoundsTestEnable(false) + .stencilTestEnable(false); VkPipelineRasterizationStateCreateInfo raster = VkPipelineRasterizationStateCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO) .depthClampEnable(false) @@ -89,6 +96,7 @@ public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass .pVertexInputState(vertInput) .pInputAssemblyState(assembly) .pViewportState(vpState) + .pDepthStencilState(depthStencil) .pRasterizationState(raster) .pMultisampleState(multisample) .pColorBlendState(blend) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java index 6367a77a03..a0df1e72ea 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java @@ -17,22 +17,22 @@ public MeshDescription() { // for each vertex buffer on the mesh bindings = VkVertexInputBindingDescription.calloc(1) .binding(0) - .stride(Float.BYTES * 7) // bytes per vertex + .stride(Float.BYTES * 8) // bytes per vertex .inputRate(VK_VERTEX_INPUT_RATE_VERTEX); // for each attribute in each vertex buffer attributes = VkVertexInputAttributeDescription.calloc(3); attributes.get(0).binding(0) .location(0) - .format(VK_FORMAT_R32G32_SFLOAT) + .format(VK_FORMAT_R32G32B32_SFLOAT) .offset(0); attributes.get(1).binding(0) .location(1) .format(VK_FORMAT_R32G32B32_SFLOAT) - .offset(Float.BYTES * 2); + .offset(Float.BYTES * 3); attributes.get(2).binding(0) .location(2) .format(VK_FORMAT_R32G32_SFLOAT) - .offset(Float.BYTES * 5); + .offset(Float.BYTES * 6); ref = Native.get().register(this); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java index f75c1e3f89..f56d022128 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java @@ -1,5 +1,6 @@ package com.jme3.vulkan; +import com.jme3.vulkan.images.Image; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -92,10 +93,10 @@ public int findMemoryType(MemoryStack stack, int types, int flags) { throw new NullPointerException("Suitable memory type not found."); } - public int findSupportedFormat(int tiling, int features, int... candidates) { + public Image.Format findSupportedFormat(int tiling, int features, Image.Format... candidates) { VkFormatProperties props = VkFormatProperties.create(); - for (int f : candidates) { - vkGetPhysicalDeviceFormatProperties(device, f, props); + for (Image.Format f : candidates) { + vkGetPhysicalDeviceFormatProperties(device, f.getVkEnum(), props); if ((tiling == VK_IMAGE_TILING_LINEAR && (props.linearTilingFeatures() & features) == features) || (tiling == VK_IMAGE_TILING_OPTIMAL && (props.optimalTilingFeatures() & features) == features)) { return f; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java index e5a6e61a1b..b7fbb83917 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java @@ -53,8 +53,9 @@ public NativeReference getNativeReference() { public void begin(CommandBuffer cmd, FrameBuffer fbo) { try (MemoryStack stack = MemoryStack.stackPush()) { - VkClearValue.Buffer clear = VkClearValue.calloc(1, stack); - clear.color().float32(stack.floats(0f, 0f, 0f, 1f)); + VkClearValue.Buffer clear = VkClearValue.calloc(2, stack); + clear.get(0).color().float32(stack.floats(0f, 0f, 0f, 1f)); + clear.get(1).depthStencil().set(1.0f, 0); VkRenderPassBeginInfo begin = VkRenderPassBeginInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO) .renderPass(id) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java index 932fddd4d3..9c177c74b0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java @@ -9,6 +9,20 @@ private static RuntimeException unrecognized(Object state) { return new UnsupportedOperationException("Unrecognized: " + state); } + public static int depthFunc(TestFunction func) { + switch (func) { + case Always: return VK_COMPARE_OP_ALWAYS; + case Equal: return VK_COMPARE_OP_EQUAL; + case Greater: return VK_COMPARE_OP_GREATER; + case Less: return VK_COMPARE_OP_LESS; + case LessOrEqual: return VK_COMPARE_OP_LESS_OR_EQUAL; + case GreaterOrEqual: return VK_COMPARE_OP_GREATER_OR_EQUAL; + case Never: return VK_COMPARE_OP_NEVER; + case NotEqual: return VK_COMPARE_OP_NOT_EQUAL; + default: throw unrecognized(func); + } + } + public static int blendEquation(BlendEquation eq) { switch (eq) { case Add: return VK_BLEND_OP_ADD; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java index e03c8f6d6c..df1156bd70 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java @@ -23,7 +23,7 @@ public class Swapchain implements Native { private final List images = new ArrayList<>(); private SwapchainUpdater updater; private Extent2 extent; - private int format; + private Image.Format format; private long id = VK_NULL_HANDLE; public Swapchain(LogicalDevice device, Surface surface, SwapchainSupport support) { @@ -65,14 +65,14 @@ public void reload(SwapchainSupport support) { KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( device.getPhysicalDevice().getDevice(), surface.getNativeObject(), caps); VkSurfaceFormatKHR fmt = support.selectFormat(); - format = fmt.format(); + format = Image.Format.vkEnum(fmt.format()); VkExtent2D ext = support.selectExtent(); extent = new Extent2(ext); VkSwapchainCreateInfoKHR create = VkSwapchainCreateInfoKHR.calloc(stack) .sType(KHRSwapchain.VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR) .surface(surface.getNativeObject()) .minImageCount(support.selectImageCount()) - .imageFormat(format) + .imageFormat(format.getVkEnum()) .imageColorSpace(fmt.colorSpace()) .imageExtent(ext) .imageArrayLayers(1) @@ -106,9 +106,9 @@ public void reload(SwapchainSupport support) { ref.refresh(); // refresh the native destroyer } - public void createFrameBuffers(RenderPass compat) { + public void createFrameBuffers(RenderPass compat, ImageView depthStencil) { for (SwapchainImage img : images) { - img.createFrameBuffer(compat); + img.createFrameBuffer(compat, depthStencil); } } @@ -154,7 +154,7 @@ public Extent2 getExtent() { return extent; } - public int getFormat() { + public Image.Format getFormat() { return format; } @@ -205,10 +205,15 @@ public int getDepth() { } @Override - public int getFormat() { + public Image.Format getFormat() { return format; } + @Override + public Image.Tiling getTiling() { + return Tiling.Optimal; + } + @Override public Long getNativeObject() { return id; @@ -227,8 +232,8 @@ public NativeReference getNativeReference() { return ref; } - public void createFrameBuffer(RenderPass compat) { - this.frameBuffer = new FrameBuffer(getDevice(), compat, extent.x, extent.y, 1, view); + public void createFrameBuffer(RenderPass compat, ImageView depthStencil) { + this.frameBuffer = new FrameBuffer(getDevice(), compat, extent.x, extent.y, 1, view, depthStencil); } public FrameBuffer getFrameBuffer() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java index e85f1271e4..8ed82c59e8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java @@ -21,6 +21,11 @@ public ImageUsageFlags sampled() { return this; } + public ImageUsageFlags depthStencilAttachment() { + usageFlags |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT; + return this; + } + public int getUsageFlags() { return usageFlags; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java index f7ca4dd6ec..820323a1c0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -26,27 +26,30 @@ public class GpuImage implements Image { private final NativeReference ref; private final long id; private final MemoryRegion memory; - private final int type, width, height, depth, format; + private final int type, width, height, depth; + private final Image.Format format; + private final Image.Tiling tiling; - public GpuImage(LogicalDevice device, int width, int height, int format, ImageUsageFlags usage, MemoryFlags mem) { - this(device, VK_IMAGE_TYPE_2D, width, height, 1, format, usage, mem); + public GpuImage(LogicalDevice device, int width, int height, Image.Format format, Image.Tiling tiling, ImageUsageFlags usage, MemoryFlags mem) { + this(device, VK_IMAGE_TYPE_2D, width, height, 1, format, tiling, usage, mem); } - public GpuImage(LogicalDevice device, int type, int width, int height, int depth, int format, ImageUsageFlags usage, MemoryFlags mem) { + public GpuImage(LogicalDevice device, int type, int width, int height, int depth, Image.Format format, Image.Tiling tiling, ImageUsageFlags usage, MemoryFlags mem) { this.device = device; this.type = type; this.width = width; this.height = height; this.depth = depth; this.format = format; + this.tiling = tiling; try (MemoryStack stack = MemoryStack.stackPush()) { VkImageCreateInfo create = VkImageCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) .imageType(type) .mipLevels(1) .arrayLayers(1) - .format(format) - .tiling(VK_IMAGE_TILING_OPTIMAL) + .format(format.getVkEnum()) + .tiling(tiling.getVkEnum()) .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) .usage(usage.getUsageFlags()) .samples(VK_SAMPLE_COUNT_1_BIT) @@ -97,10 +100,15 @@ public int getDepth() { } @Override - public int getFormat() { + public Image.Format getFormat() { return format; } + @Override + public Image.Tiling getTiling() { + return tiling; + } + @Override public Long getNativeObject() { return id; @@ -119,23 +127,34 @@ public NativeReference getNativeReference() { return ref; } - public void transitionLayout(CommandBuffer commands, int srcLayout, int dstLayout) { + public void transitionLayout(CommandBuffer commands, Image.Layout srcLayout, Image.Layout dstLayout) { try (MemoryStack stack = MemoryStack.stackPush()) { - int[] args = VulkanUtils.getTransferArguments(srcLayout, dstLayout); + int[] args = Image.Layout.getTransferArguments(srcLayout, dstLayout); VkImageMemoryBarrier.Buffer barrier = VkImageMemoryBarrier.calloc(1, stack) .sType(VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) - .oldLayout(srcLayout) - .newLayout(dstLayout) + .oldLayout(srcLayout.getVkEnum()) + .newLayout(dstLayout.getVkEnum()) .srcQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) .dstQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) // for transfering queue ownership .image(id) .srcAccessMask(args[0]) .dstAccessMask(args[1]); - barrier.subresourceRange().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + barrier.subresourceRange() .baseMipLevel(0) .levelCount(1) .baseArrayLayer(0) .layerCount(1); + int aspect = 0; + if (format.isColor()) { + aspect |= VK_IMAGE_ASPECT_COLOR_BIT; + } + if (format.isDepth()) { + aspect |= VK_IMAGE_ASPECT_DEPTH_BIT; + } + if (format.isStencil()) { + aspect |= VK_IMAGE_ASPECT_STENCIL_BIT; + } + barrier.subresourceRange().aspectMask(aspect); vkCmdPipelineBarrier(commands.getBuffer(), args[2], args[3], 0, null, null, barrier); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java index 94b4350ed8..7cafbcd3db 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java @@ -3,12 +3,132 @@ import com.jme3.util.natives.Native; import com.jme3.vulkan.LogicalDevice; import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.KHRSwapchain; import org.lwjgl.vulkan.VkImageViewCreateInfo; import static org.lwjgl.vulkan.VK10.*; public interface Image extends Native { + enum Format { + + RGBA32SFloat(VK_FORMAT_R32G32B32A32_SFLOAT, 32 * 4, true, false, false), + RGBA8_SRGB(VK_FORMAT_R8G8B8A8_SRGB, 32, true, false, false), + R8_SRGB(VK_FORMAT_R8_SRGB, 8, true, false, false), + BGR8_SRGB(VK_FORMAT_B8G8R8_SRGB, 24, true, false, false), + ABGR8_SRGB(VK_FORMAT_A8B8G8R8_SRGB_PACK32, 32, true, false, false), + B8G8R8A8_SRGB(VK_FORMAT_B8G8R8A8_SRGB, 32, true, false, false), + + Depth32SFloat(VK_FORMAT_D32_SFLOAT, 32, false, true, false), + Depth32SFloat_Stencil8UInt(VK_FORMAT_D32_SFLOAT_S8_UINT, 40, false, true, true), + Depth24UNorm_Stencil8UInt(VK_FORMAT_D24_UNORM_S8_UINT, 32, false, true, true), + Depth16UNorm(VK_FORMAT_D16_UNORM, 16, false, true, false), + Depth16UNorm_Stencil8UInt(VK_FORMAT_D16_UNORM_S8_UINT, 24, false, true, true); + + private final int vkEnum, bits; + private final boolean color, depth, stencil; + + Format(int vkEnum, int bits, boolean color, boolean depth, boolean stencil) { + this.vkEnum = vkEnum; + this.bits = bits; + this.color = color; + this.depth = depth; + this.stencil = stencil; + } + + public int getVkEnum() { + return vkEnum; + } + + public int getBits() { + return bits; + } + + public boolean isColor() { + return color; + } + + public boolean isDepth() { + return depth; + } + + public boolean isStencil() { + return stencil; + } + + public static Format vkEnum(int vkEnum) { + for (Format f : Format.values()) { + if (f.vkEnum == vkEnum) { + return f; + } + } + throw new UnsupportedOperationException("Format " + vkEnum + " is not supported."); + } + + } + + enum Layout { + + Undefined(VK_IMAGE_LAYOUT_UNDEFINED), + General(VK_IMAGE_LAYOUT_GENERAL), + PreInitialized(VK_IMAGE_LAYOUT_PREINITIALIZED), + ColorAttachmentOptimal(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL), + DepthStencilAttachmentOptimal(VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL), + DepthStencilReadOnlyOptimal(VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL), + TransferSrcOptimal(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL), + TransferDstOptimal(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), + ShaderReadOnlyOptimal(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), + PresentSrc(KHRSwapchain.VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + + private final int vkEnum; + + Layout(int vkEnum) { + this.vkEnum = vkEnum; + } + + public int getVkEnum() { + return vkEnum; + } + + public static int[] getTransferArguments(Layout srcLayout, Layout dstLayout) { + // output array format: {srcAccessMask, dstAccessMask, srcStage, dstStage} + switch (srcLayout) { + case Undefined: switch (dstLayout) { + case TransferDstOptimal: return new int[] { + 0, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT}; + case DepthStencilAttachmentOptimal: return new int[] { + 0, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT}; + } break; + case TransferDstOptimal: switch (dstLayout) { + case ShaderReadOnlyOptimal: return new int[] { + VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT}; + } break; + } + throw new UnsupportedOperationException("Unsupported layout transition: " + srcLayout + " to " + dstLayout); + } + + } + + enum Tiling { + + Optimal(VK_IMAGE_TILING_OPTIMAL), + Linear(VK_IMAGE_TILING_LINEAR); + + private final int vkEnum; + + Tiling(int vkEnum) { + this.vkEnum = vkEnum; + } + + public int getVkEnum() { + return vkEnum; + } + + } + ImageView createView(VkImageViewCreateInfo create); LogicalDevice getDevice(); @@ -21,7 +141,9 @@ public interface Image extends Native { int getDepth(); - int getFormat(); + Format getFormat(); + + Tiling getTiling(); default ImageView createView(int type, int aspects, int baseMip, int mipCount, int baseLayer, int layerCount) { try (MemoryStack stack = MemoryStack.stackPush()) { @@ -29,12 +151,12 @@ default ImageView createView(int type, int aspects, int baseMip, int mipCount, i .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) .image(getNativeObject()) .viewType(type) - .format(getFormat()); + .format(getFormat().getVkEnum()); create.components().r(VK_COMPONENT_SWIZZLE_IDENTITY) .g(VK_COMPONENT_SWIZZLE_IDENTITY) .b(VK_COMPONENT_SWIZZLE_IDENTITY) .a(VK_COMPONENT_SWIZZLE_IDENTITY); - create.subresourceRange().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + create.subresourceRange().aspectMask(aspects) .baseMipLevel(baseMip) .levelCount(mipCount) .baseArrayLayer(baseLayer) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index 8489807485..7e579bcf24 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -1,7 +1,6 @@ package com.jme3.vulkan.images; import com.jme3.asset.*; -import com.jme3.texture.Image; import com.jme3.util.BufferUtils; import javax.imageio.ImageIO; @@ -54,7 +53,7 @@ public ImageData load(BufferedImage img, boolean flipY) { } ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * 4); buffer.put(data); - return new ImageData(buffer, width, height, VK_FORMAT_A8B8G8R8_SRGB_PACK32); + return new ImageData(buffer, width, height, Image.Format.ABGR8_SRGB); } case BufferedImage.TYPE_3BYTE_BGR: { // most common in JPEG images if (flipY) { @@ -62,7 +61,7 @@ public ImageData load(BufferedImage img, boolean flipY) { } ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * 3); buffer.put(data); - return new ImageData(buffer, width, height, VK_FORMAT_B8G8R8_SRGB); + return new ImageData(buffer, width, height, Image.Format.BGR8_SRGB); } case BufferedImage.TYPE_BYTE_GRAY: { // grayscale fonts if (flipY) { @@ -70,10 +69,10 @@ public ImageData load(BufferedImage img, boolean flipY) { } ByteBuffer buffer = BufferUtils.createByteBuffer(width * height); buffer.put(data); - return new ImageData(buffer, width, height, VK_FORMAT_R8_SRGB); + return new ImageData(buffer, width, height, Image.Format.R8_SRGB); } } - if (img.getTransparency() == Transparency.OPAQUE){ + if (img.getTransparency() == Transparency.OPAQUE) { ByteBuffer buffer = BufferUtils.createByteBuffer(img.getWidth() * img.getHeight() * 4); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { @@ -90,7 +89,7 @@ public ImageData load(BufferedImage img, boolean flipY) { } } buffer.flip(); - return new ImageData(buffer, width, height, VK_FORMAT_R8G8B8A8_SRGB); + return new ImageData(buffer, width, height, Image.Format.RGBA8_SRGB); } else { ByteBuffer buffer = BufferUtils.createByteBuffer(img.getWidth() * img.getHeight() * 4); for (int y = 0; y < height; y++){ @@ -108,7 +107,7 @@ public ImageData load(BufferedImage img, boolean flipY) { } } buffer.flip(); - return new ImageData(buffer, width, height, VK_FORMAT_R8G8B8A8_SRGB); + return new ImageData(buffer, width, height, Image.Format.RGBA8_SRGB); } } @@ -169,9 +168,9 @@ public static class ImageData { private final ByteBuffer buffer; private final int width, height; - private final int format; + private final Image.Format format; - public ImageData(ByteBuffer buffer, int width, int height, int format) { + public ImageData(ByteBuffer buffer, int width, int height, Image.Format format) { this.buffer = buffer; this.width = width; this.height = height; @@ -190,7 +189,7 @@ public int getHeight() { return height; } - public int getFormat() { + public Image.Format getFormat() { return format; } diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl index a3b97794ef..39ce3e72bb 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl @@ -1,6 +1,6 @@ #version 450 -layout (location = 0) in vec2 inPosition; +layout (location = 0) in vec3 inPosition; layout (location = 1) in vec3 inColor; layout (location = 2) in vec2 inTexCoord; @@ -12,7 +12,7 @@ layout (binding = 0) uniform UniformBufferObject { } ubo; void main() { - gl_Position = ubo.worldViewProjectionMatrix * vec4(inPosition, 0.0, 1.0); + gl_Position = ubo.worldViewProjectionMatrix * vec4(inPosition, 1.0); fragColor = inColor; texCoord = inTexCoord; } \ No newline at end of file From beba5fe509e00975e1e8b248f073e1ba9feb822b Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Fri, 1 Aug 2025 11:29:06 -0400 Subject: [PATCH 17/80] added depth testing; added enums for image properties --- .../jme3test/vulkan/VulkanHelperTest.java | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index b145d7a396..c407f470aa 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -6,7 +6,6 @@ import com.jme3.math.Quaternion; import com.jme3.math.Transform; import com.jme3.math.Vector3f; -import com.jme3.opencl.CommandQueue; import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.shaderc.ShaderType; import com.jme3.shaderc.ShadercLoader; @@ -25,7 +24,6 @@ import org.lwjgl.PointerBuffer; import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.*; import java.nio.FloatBuffer; @@ -35,9 +33,6 @@ import java.util.logging.Level; import static com.jme3.renderer.vulkan.VulkanUtils.*; -import static org.lwjgl.system.MemoryUtil.NULL; -import static org.lwjgl.vulkan.EXTDebugUtils.*; -import static org.lwjgl.vulkan.EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; import static org.lwjgl.vulkan.VK13.*; public class VulkanHelperTest extends SimpleApplication implements SwapchainUpdater { @@ -165,19 +160,7 @@ public void simpleInitApp() { CommandPool transferPool = new CommandPool(device, queues.getGraphicsQueue(), true, false); // depth texture - Image.Format depthFormat = device.getPhysicalDevice().findSupportedFormat( - VK_IMAGE_TILING_OPTIMAL, - VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, - Image.Format.Depth32SFloat, Image.Format.Depth32SFloat_Stencil8UInt, Image.Format.Depth24UNorm_Stencil8UInt); - GpuImage depthImage = new GpuImage(device, swapchain.getExtent().x, swapchain.getExtent().y, depthFormat, - Image.Tiling.Optimal, new ImageUsageFlags().depthStencilAttachment(), new MemoryFlags().deviceLocal()); - depthView = depthImage.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_DEPTH_BIT, 0, 1, 0, 1); - CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); - commands.begin(); - depthImage.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.DepthStencilAttachmentOptimal); - commands.end(); - commands.submit(null, null, null); - commands.getPool().getQueue().waitIdle(); + depthView = createDepthAttachment(transferPool); // pipeline pipelineLayout = new PipelineLayout(device, descriptorLayout); @@ -196,7 +179,7 @@ public void simpleInitApp() { .initialLayout(Image.Layout.Undefined.getVkEnum()) .finalLayout(Image.Layout.PresentSrc.getVkEnum())); int depth = pass.createAttachment(a -> a - .format(depthFormat.getVkEnum()) + .format(depthView.getImage().getFormat().getVkEnum()) .samples(VK_SAMPLE_COUNT_1_BIT) .loadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) .storeOp(VK_ATTACHMENT_STORE_OP_DONT_CARE) @@ -273,6 +256,7 @@ public boolean swapchainOutOfDate(Swapchain swapchain, int imageAcquireCode) { long window = ((LwjglVulkanContext)context).getWindowHandle(); try (SimpleSwapchainSupport support = new SimpleSwapchainSupport(device.getPhysicalDevice(), surface, window)) { swapchain.reload(support); + depthView = createDepthAttachment(new CommandPool(device, queues.getGraphicsQueue(), true, false)); swapchain.createFrameBuffers(renderPass, depthView); } return true; @@ -293,6 +277,23 @@ public void simpleUpdate(float tpf) { renderer.render(tpf); } + private ImageView createDepthAttachment(CommandPool pool) { + Image.Format depthFormat = device.getPhysicalDevice().findSupportedFormat( + VK_IMAGE_TILING_OPTIMAL, + VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, + Image.Format.Depth32SFloat, Image.Format.Depth32SFloat_Stencil8UInt, Image.Format.Depth24UNorm_Stencil8UInt); + GpuImage image = new GpuImage(device, swapchain.getExtent().x, swapchain.getExtent().y, depthFormat, + Image.Tiling.Optimal, new ImageUsageFlags().depthStencilAttachment(), new MemoryFlags().deviceLocal()); + ImageView view = image.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_DEPTH_BIT, 0, 1, 0, 1); + CommandBuffer commands = pool.allocateOneTimeCommandBuffer(); + commands.begin(); + image.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.DepthStencilAttachmentOptimal); + commands.end(); + commands.submit(null, null, null); + commands.getPool().getQueue().waitIdle(); + return view; + } + private GpuImage loadImage(String file, CommandPool transferPool) { try (MemoryStack stack = MemoryStack.stackPush()) { VulkanImageLoader.ImageData data = assetManager.loadAsset(VulkanImageLoader.key(file)); From 4e31f0da7c80f53e741bd9a5951ae57c4bc8fff4 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sun, 3 Aug 2025 07:53:34 -0400 Subject: [PATCH 18/80] migrated instance, device, surface, and swapchain to new builder architecture --- .../java/com/jme3/util/natives/Native.java | 7 +- .../jme3/util/natives/NativeReference.java | 4 +- .../jme3test/vulkan/VulkanHelperTest.java | 89 +++--- .../main/java/jme3test/vulkan/VulkanTest.java | 14 +- .../java/com/jme3/vulkan/CommandPool.java | 2 +- .../src/main/java/com/jme3/vulkan/Fence.java | 2 +- .../java/com/jme3/vulkan/FrameBuffer.java | 1 + .../com/jme3/vulkan/GraphicsPipeline.java | 2 +- .../java/com/jme3/vulkan/InstanceBuilder.java | 150 ---------- .../java/com/jme3/vulkan/LogicalDevice.java | 69 ----- .../java/com/jme3/vulkan/PhysicalDevice.java | 162 ----------- .../java/com/jme3/vulkan/PipelineLayout.java | 1 + .../src/main/java/com/jme3/vulkan/Queue.java | 5 +- .../java/com/jme3/vulkan/QueueFamilies.java | 2 + .../main/java/com/jme3/vulkan/RenderPass.java | 2 +- .../com/jme3/vulkan/RenderPassBuilder.java | 2 +- .../main/java/com/jme3/vulkan/Semaphore.java | 1 + .../java/com/jme3/vulkan/ShaderModule.java | 1 + .../main/java/com/jme3/vulkan/Surface.java | 13 +- .../main/java/com/jme3/vulkan/Swapchain.java | 265 +++++++++++++----- .../java/com/jme3/vulkan/VulkanInstance.java | 132 +++++++-- .../com/jme3/vulkan/buffers/GpuBuffer.java | 4 +- .../com/jme3/vulkan/buffers/MemoryRegion.java | 4 +- .../jme3/vulkan/buffers/PersistentBuffer.java | 3 +- .../jme3/vulkan/buffers/StageableBuffer.java | 1 + .../vulkan/descriptors/DescriptorPool.java | 2 +- .../vulkan/descriptors/DescriptorSet.java | 2 +- .../descriptors/DescriptorSetLayout.java | 2 +- .../DeviceFilter.java} | 13 +- .../jme3/vulkan/devices/LogicalDevice.java | 192 +++++++++++++ .../jme3/vulkan/devices/PhysicalDevice.java | 106 +++++++ .../java/com/jme3/vulkan/images/GpuImage.java | 6 +- .../java/com/jme3/vulkan/images/Image.java | 2 +- .../java/com/jme3/vulkan/images/Sampler.java | 2 +- .../java/com/jme3/vulkan/images/Texture.java | 2 +- 35 files changed, 678 insertions(+), 589 deletions(-) delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{DeviceEvaluator.java => devices/DeviceFilter.java} (86%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java diff --git a/jme3-core/src/main/java/com/jme3/util/natives/Native.java b/jme3-core/src/main/java/com/jme3/util/natives/Native.java index 9ba9f8775c..1e6fd2b035 100644 --- a/jme3-core/src/main/java/com/jme3/util/natives/Native.java +++ b/jme3-core/src/main/java/com/jme3/util/natives/Native.java @@ -2,7 +2,7 @@ import org.lwjgl.system.MemoryUtil; -public interface Native extends AutoCloseable { +public interface Native { T getNativeObject(); @@ -12,11 +12,6 @@ public interface Native extends AutoCloseable { NativeReference getNativeReference(); - @Override - default void close() { - getNativeReference().destroy(); - } - static void set(NativeManager manager) { BasicNativeManager.setGlobalInstance(manager); } diff --git a/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java b/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java index 98abbcc7dd..f699c81b39 100644 --- a/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java +++ b/jme3-core/src/main/java/com/jme3/util/natives/NativeReference.java @@ -4,10 +4,10 @@ public interface NativeReference { void destroy(); + void refresh(); + void addDependent(NativeReference reference); boolean isDestroyed(); - void refresh(); - } diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index c407f470aa..c3022f3d97 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -6,7 +6,6 @@ import com.jme3.math.Quaternion; import com.jme3.math.Transform; import com.jme3.math.Vector3f; -import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.shaderc.ShaderType; import com.jme3.shaderc.ShadercLoader; import com.jme3.system.AppSettings; @@ -17,11 +16,11 @@ import com.jme3.vulkan.Queue; import com.jme3.vulkan.buffers.*; import com.jme3.vulkan.descriptors.*; +import com.jme3.vulkan.devices.*; import com.jme3.vulkan.flags.ImageUsageFlags; import com.jme3.vulkan.flags.MemoryFlags; import com.jme3.vulkan.flags.BufferUsageFlags; import com.jme3.vulkan.images.*; -import org.lwjgl.PointerBuffer; import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -39,7 +38,7 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda private VulkanInstance instance; private Surface surface; - private LogicalDevice device; + private LogicalDevice device; private SimpleQueueFamilies queues; private Swapchain swapchain; private ShaderModule vertModule, fragModule; @@ -54,8 +53,6 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda private boolean swapchainResizeFlag = false; private boolean applicationStopped = false; - private final Collection deviceExtensions = new ArrayList<>(); - private VulkanLogger logger; // mesh @@ -106,49 +103,41 @@ public void simpleInitApp() { flyCam.setMoveSpeed(5f); flyCam.setDragToRotate(true); - deviceExtensions.add(KHRSwapchain.VK_KHR_SWAPCHAIN_EXTENSION_NAME); long window = ((LwjglVulkanContext)context).getWindowHandle(); - try (InstanceBuilder inst = new InstanceBuilder(VK13.VK_API_VERSION_1_3)) { - - // build instance - inst.addGlfwExtensions(); - inst.addDebugExtension(); - inst.addLunarGLayer(); - inst.setApplicationName(VulkanHelperTest.class.getSimpleName()); - inst.setApplicationVersion(1, 0, 0); - instance = inst.build(); - - // debug callbacks - logger = new VulkanLogger(instance, Level.SEVERE); - - // surface - surface = new Surface(instance, window); - - // physical device - PhysicalDevice physDevice = PhysicalDevice.getSuitableDevice( - instance, Arrays.asList( - surface, - DeviceEvaluator.extensions(deviceExtensions), - DeviceEvaluator.swapchain(surface), - DeviceEvaluator.anisotropy() - ), - () -> new SimpleQueueFamilies(surface)); - - // queue families - queues = physDevice.getQueueFamilies(); - - // logical device - PointerBuffer deviceExts = VulkanUtils.toPointers(inst.getStack(), deviceExtensions, inst.getStack()::UTF8); - device = new LogicalDevice(physDevice, deviceExts, inst.getLayers()); - - // create queues - physDevice.getQueueFamilies().createQueues(device); - - // swapchain - try (SimpleSwapchainSupport support = new SimpleSwapchainSupport(physDevice, surface, window)) { - swapchain = new Swapchain(device, surface, support); - } + instance = new VulkanInstance(VK_API_VERSION_1_3); + try (VulkanInstance.Builder i = instance.build()) { + i.addGlfwExtensions(); + i.addDebugExtension(); + i.addLunarGLayer(); + i.setApplicationName(VulkanHelperTest.class.getSimpleName()); + i.setApplicationVersion(1, 0, 0); + } + + // debug callbacks + logger = new VulkanLogger(instance, Level.SEVERE); + + // surface + surface = new Surface(instance, window); + + // logical device + device = new LogicalDevice<>(instance); + try (LogicalDevice.Builder d = device.build(id -> new SimplePhysicalDevice(instance, surface, id))) { + d.addFilter(surface); + d.addFilter(DeviceFilter.swapchain(surface)); + d.addCriticalExtension(KHRSwapchain.VK_KHR_SWAPCHAIN_EXTENSION_NAME); + d.addFeature(DeviceFeature.anisotropy(1f, true)); + } + + // swapchain + swapchain = new Swapchain(device, surface); + try (Swapchain.Builder s = swapchain.build()) { + s.addQueue(device.getPhysicalDevice().getGraphics()); + s.addQueue(device.getPhysicalDevice().getPresent()); + s.selectFormat(Image.Format.B8G8R8A8_SRGB.getVkEnum(), KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR); + s.selectMode(Swapchain.PresentMode.Mailbox); + s.selectExtentByWindow(); + s.selectImageCount(2); } descriptorLayout = new DescriptorSetLayout(device, @@ -415,7 +404,7 @@ public boolean populate(PhysicalDevice device, VkQueueFamilyProperties.Buffer pr graphicsIndex = i; } else if (presentIndex == null) { KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR( - device.getDevice(), i, surface.getNativeObject(), ibuf); + device.getPhysicalDevice(), i, surface.getNativeObject(), ibuf); if (ibuf.get(0) == VK13.VK_TRUE) { presentIndex = i; } @@ -484,13 +473,13 @@ private static class SimpleSwapchainSupport implements SwapchainSupport, AutoClo public SimpleSwapchainSupport(PhysicalDevice device, Surface surface, long window) { stack = MemoryStack.stackPush(); caps = VkSurfaceCapabilitiesKHR.malloc(stack); - KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device.getDevice(), surface.getNativeObject(), caps); + KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device.getPhysicalDevice(), surface.getNativeObject(), caps); formats = enumerateBuffer(stack, n -> VkSurfaceFormatKHR.malloc(n, stack), (count, buffer) -> KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR( - device.getDevice(), surface.getNativeObject(), count, buffer)); + device.getPhysicalDevice(), surface.getNativeObject(), count, buffer)); modes = enumerateBuffer(stack, stack::mallocInt, (count, buffer) -> KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR( - device.getDevice(), surface.getNativeObject(), count, buffer)); + device.getPhysicalDevice(), surface.getNativeObject(), count, buffer)); this.window = window; } diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java index b41eb05cca..601b8ca048 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java @@ -1,28 +1,22 @@ package jme3test.vulkan; import com.jme3.app.SimpleApplication; -import com.jme3.asset.AssetInfo; -import com.jme3.asset.AssetKey; -import com.jme3.asset.AssetLoader; import com.jme3.shaderc.ShaderType; import com.jme3.shaderc.ShadercLoader; import com.jme3.system.AppSettings; import com.jme3.util.natives.Native; -import com.jme3.vulkan.DeviceEvaluator; +import com.jme3.vulkan.devices.DeviceFilter; import com.jme3.system.vulkan.LwjglVulkanContext; import com.jme3.vulkan.Fence; import com.jme3.vulkan.Semaphore; import com.jme3.vulkan.VulkanRenderManager; -import jme3tools.shader.ShaderDebug; import org.lwjgl.BufferUtils; import org.lwjgl.PointerBuffer; import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFWVulkan; import org.lwjgl.system.MemoryStack; -import org.lwjgl.util.shaderc.Shaderc; import org.lwjgl.vulkan.*; -import java.io.*; import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.nio.LongBuffer; @@ -49,7 +43,7 @@ public class VulkanTest extends SimpleApplication { private final Collection instanceExtensions = new ArrayList<>(); private final Collection deviceExtensions = new ArrayList<>(); private final List layers = new ArrayList<>(); - private final Collection deviceEvaluators = new ArrayList<>(); + private final Collection deviceFilters = new ArrayList<>(); private final VkDebugUtilsMessengerCallbackEXT debugCallback = new VulkanDebugCallback(Level.SEVERE); private LwjglVulkanContext vulkanContext; private Swapchain swapchain; @@ -259,11 +253,11 @@ private Float evaluateDevice(PhysicalDevice device, long surface) { if (!new SwapchainSupport(stack, device.getDevice(), surface).isSupported()) { return null; } - if (deviceEvaluators.isEmpty()) { + if (deviceFilters.isEmpty()) { return 0f; } float score = 0f; - for (DeviceEvaluator e : deviceEvaluators) { + for (DeviceFilter e : deviceFilters) { //Float s = e.evaluateDevice(device.getDevice()); Float s = 0f; if (s == null) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java index 0242a2e0bc..042f3bb500 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java @@ -2,8 +2,8 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkCommandPoolCreateInfo; import java.nio.LongBuffer; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java index d5a0e0270d..3e4c945e37 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java @@ -2,8 +2,8 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VkDevice; import org.lwjgl.vulkan.VkFenceCreateInfo; import java.util.concurrent.TimeUnit; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java index fb0e6d0d91..cf520c51b5 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java @@ -2,6 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.ImageView; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkFramebufferCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java index 4cd7989613..f9567c458d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java @@ -3,8 +3,8 @@ import com.jme3.material.RenderState; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.*; import java.nio.LongBuffer; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java deleted file mode 100644 index 7446748874..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/InstanceBuilder.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.jme3.vulkan; - -import com.jme3.system.JmeVersion; -import org.lwjgl.PointerBuffer; -import org.lwjgl.glfw.GLFWVulkan; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.EXTDebugUtils; -import org.lwjgl.vulkan.VK10; -import org.lwjgl.vulkan.VkApplicationInfo; -import org.lwjgl.vulkan.VkInstanceCreateInfo; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Objects; - -import static org.lwjgl.vulkan.VK10.*; - -public class InstanceBuilder implements AutoCloseable { - - public static final String LUNARG_LAYER = "VK_LAYER_KHRONOS_validation"; - - private final MemoryStack stack; - private final VkApplicationInfo info; - private final Collection extPointers = new ArrayList<>(); - private final Collection extensions = new ArrayList<>(); - private final Collection layers = new ArrayList<>(); - - public InstanceBuilder() { - this(VK_API_VERSION_1_0); - } - - public InstanceBuilder(int vulkanApi) { - stack = MemoryStack.stackPush(); - String[] ver = JmeVersion.VERSION_NUMBER.split("\\.", 3); - info = VkApplicationInfo.calloc(stack).sType(VK_STRUCTURE_TYPE_APPLICATION_INFO) - .pEngineName(stack.UTF8("jMonkeyEngine")) - .engineVersion(VK_MAKE_VERSION( - Integer.parseInt(ver[0]), - Integer.parseInt(ver[1]), - Integer.parseInt(ver[2]))) - .apiVersion(vulkanApi); - } - - @Override - public void close() { - stack.pop(); - } - - public VulkanInstance build() { - return new VulkanInstance(info, getExtensions(), getLayers()); - } - - public void setApplicationName(String name) { - info.pApplicationName(stack.UTF8(name)); - } - - public void setApplicationVersion(int major, int minor, int patch) { - info.applicationVersion(VK_MAKE_VERSION(major, minor, patch)); - } - - public void addGlfwExtensions() { - addExtensions(Objects.requireNonNull(GLFWVulkan.glfwGetRequiredInstanceExtensions())); - } - - public void addDebugExtension() { - addExtension(EXTDebugUtils.VK_EXT_DEBUG_UTILS_EXTENSION_NAME); - } - - public void addLunarGLayer() { - addLayer(LUNARG_LAYER); - } - - public void addExtensions(PointerBuffer exts) { - extPointers.add(exts); - } - - public void addExtension(String ext) { - extensions.add(ext); - } - - public void addLayer(String layer) { - layers.add(layer); - } - - public VkApplicationInfo getInfo() { - return info; - } - - public PointerBuffer getExtensions() { - return getExtensions(stack.mallocPointer(getNumExtensions())); - } - - public PointerBuffer getExtensions(PointerBuffer exts) { - for (PointerBuffer ptr : extPointers) { - for (int i = 0; i < ptr.limit(); i++) { - if (exts.hasRemaining()) { - exts.put(ptr.get(i)); - } else return exts.rewind(); - } - } - for (String e : extensions) { - if (exts.hasRemaining()) { - exts.put(stack.UTF8(e)); - } else break; - } - return exts.rewind(); - } - - public Collection getUnnamedExtensions() { - return extPointers; - } - - public Collection getNamedExtensions() { - return extensions; - } - - public int getNumExtensions() { - int size = extensions.size(); - for (PointerBuffer exts : extPointers) { - size += exts.limit(); - } - return size; - } - - public PointerBuffer getLayers() { - return getLayers(stack.mallocPointer(layers.size())); - } - - public PointerBuffer getLayers(PointerBuffer lyrs) { - for (String l : layers) { - if (lyrs.hasRemaining()) { - lyrs.put(stack.UTF8(l)); - } - } - return lyrs.rewind(); - } - - public Collection getNamedLayers() { - return layers; - } - - public int getNumLayers() { - return layers.size(); - } - - public MemoryStack getStack() { - return stack; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java deleted file mode 100644 index 362e42395b..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/LogicalDevice.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.jme3.vulkan; - -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; -import org.lwjgl.PointerBuffer; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VkDevice; -import org.lwjgl.vulkan.VkDeviceCreateInfo; - -import static com.jme3.renderer.vulkan.VulkanUtils.*; -import static org.lwjgl.vulkan.VK10.*; - -public class LogicalDevice implements Native { - - private final PhysicalDevice physical; - private final NativeReference ref; - private VkDevice device; - - public LogicalDevice(PhysicalDevice physical, PointerBuffer extensions, PointerBuffer layers) { - this.physical = physical; - try (MemoryStack stack = MemoryStack.stackPush()) { - VkDeviceCreateInfo create = VkDeviceCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO) - .pQueueCreateInfos(physical.getQueueFamilies().createLogicalBuffers(stack)) - .pEnabledFeatures(physical.getFeatures(stack).samplerAnisotropy(true)); - if (extensions != null) { - create.ppEnabledExtensionNames(extensions); - } - if (layers != null) { - create.ppEnabledLayerNames(layers); - } - PointerBuffer ptr = stack.mallocPointer(1); - check(vkCreateDevice(physical.getDevice(), create, null, ptr), - "Failed to create logical device."); - device = new VkDevice(ptr.get(0), physical.getDevice(), create); - } - ref = Native.get().register(this); - physical.getInstance().getNativeReference().addDependent(ref); - } - - @Override - public VkDevice getNativeObject() { - return device; - } - - @Override - public Runnable createNativeDestroyer() { - return () -> vkDestroyDevice(device, null); - } - - @Override - public void prematureNativeDestruction() { - device = null; - } - - @Override - public NativeReference getNativeReference() { - return ref; - } - - public PhysicalDevice getPhysicalDevice() { - return physical; - } - - public void waitIdle() { - vkDeviceWaitIdle(device); - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java deleted file mode 100644 index f56d022128..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PhysicalDevice.java +++ /dev/null @@ -1,162 +0,0 @@ -package com.jme3.vulkan; - -import com.jme3.vulkan.images.Image; -import org.lwjgl.PointerBuffer; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.*; - -import java.nio.ByteBuffer; -import java.nio.IntBuffer; -import java.util.Collection; -import java.util.function.Supplier; - -import static com.jme3.renderer.vulkan.VulkanUtils.*; -import static org.lwjgl.vulkan.VK10.*; - -public class PhysicalDevice { - - private final VulkanInstance instance; - private final VkPhysicalDevice device; - private final T queues; - private final VkQueueFamilyProperties.Buffer queueProperties; - - public PhysicalDevice(VulkanInstance instance, T queues, long id) { - this.instance = instance; - this.device = new VkPhysicalDevice(id, instance.getNativeObject()); - this.queues = queues; - try (MemoryStack stack = MemoryStack.stackPush()) { - this.queueProperties = enumerateBuffer(stack, n -> VkQueueFamilyProperties.calloc(n, stack), - (count, buffer) -> vkGetPhysicalDeviceQueueFamilyProperties(device, count, buffer)); - this.queues.populate(this, getQueueFamilyProperties()); - } - } - - public Float evaluate(Collection evaluators) { - if (evaluators.isEmpty()) { - return 0f; - } - float score = 0f; - for (DeviceEvaluator e : evaluators) { - Float s = e.evaluateDevice(this); - if (s == null) return null; - score += s; - } - return score; - } - - public VulkanInstance getInstance() { - return instance; - } - - public VkPhysicalDevice getDevice() { - return device; - } - - public T getQueueFamilies() { - return queues; - } - - public VkQueueFamilyProperties.Buffer getQueueFamilyProperties() { - return queueProperties; - } - - public VkPhysicalDeviceProperties getProperties(MemoryStack stack) { - VkPhysicalDeviceProperties props = VkPhysicalDeviceProperties.malloc(stack); - vkGetPhysicalDeviceProperties(device, props); - return props; - } - - public VkPhysicalDeviceFeatures getFeatures(MemoryStack stack) { - VkPhysicalDeviceFeatures features = VkPhysicalDeviceFeatures.malloc(stack); - vkGetPhysicalDeviceFeatures(device, features); - return features; - } - - public VkExtensionProperties.Buffer getExtensions(MemoryStack stack) { - return enumerateBuffer(stack, n -> VkExtensionProperties.malloc(n, stack), (count, buffer) -> - vkEnumerateDeviceExtensionProperties(device, (ByteBuffer)null, count, buffer)); - } - - public VkPhysicalDeviceMemoryProperties getMemory(MemoryStack stack) { - VkPhysicalDeviceMemoryProperties mem = VkPhysicalDeviceMemoryProperties.malloc(stack); - vkGetPhysicalDeviceMemoryProperties(device, mem); - return mem; - } - - public int findMemoryType(MemoryStack stack, int types, int flags) { - VkPhysicalDeviceMemoryProperties mem = getMemory(stack); - for (int i = 0; i < mem.memoryTypeCount(); i++) { - if ((types & (1 << i)) != 0 && (mem.memoryTypes().get(i).propertyFlags() & flags) != 0) { - return i; - } - } - throw new NullPointerException("Suitable memory type not found."); - } - - public Image.Format findSupportedFormat(int tiling, int features, Image.Format... candidates) { - VkFormatProperties props = VkFormatProperties.create(); - for (Image.Format f : candidates) { - vkGetPhysicalDeviceFormatProperties(device, f.getVkEnum(), props); - if ((tiling == VK_IMAGE_TILING_LINEAR && (props.linearTilingFeatures() & features) == features) - || (tiling == VK_IMAGE_TILING_OPTIMAL && (props.optimalTilingFeatures() & features) == features)) { - return f; - } - } - throw new NullPointerException("Failed to find supported format."); - } - - public int findMemoryType(int filter, int properties) { - try (MemoryStack stack = MemoryStack.stackPush()) { - VkPhysicalDeviceMemoryProperties memProps = VkPhysicalDeviceMemoryProperties.malloc(stack); - vkGetPhysicalDeviceMemoryProperties(device, memProps); - for (int i = 0; i < memProps.memoryTypeCount(); i++) { - if ((filter & (1 << i)) != 0 && (memProps.memoryTypes(i).propertyFlags() & properties) == properties) { - return i; - } - } - throw new NullPointerException("Failed to find suitable memory type."); - } - } - - public boolean querySwapchainSupport(Surface surface) { - try (MemoryStack stack = MemoryStack.stackPush()) { - IntBuffer count = stack.mallocInt(1); - KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface.getNativeObject(), count, null); - if (count.get(0) <= 0) { - return false; - } - KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface.getNativeObject(), count, null); - int n = count.get(0); - return n > 0; - } - } - - @SuppressWarnings("unchecked") - public static PhysicalDevice getSuitableDevice(VulkanInstance instance, - Collection evaluators, - Supplier queueFactory) { - try (MemoryStack stack = MemoryStack.stackPush()) { - System.out.println("Get physical device from instance: " + instance); - PointerBuffer devices = enumerateBuffer(stack, stack::mallocPointer, - (count, buffer) -> check(vkEnumeratePhysicalDevices(instance.getNativeObject(), count, buffer), - "Failed to enumerate physical devices.")); - PhysicalDevice device = null; - float score = -1f; - for (PhysicalDevice d : iteratePointers(devices, ptr -> new PhysicalDevice(instance, queueFactory.get(), ptr))) { - if (!d.queues.isComplete()) { - continue; - } - Float s = d.evaluate(evaluators); - if (s != null && (device == null || s > score)) { - device = d; - score = s; - } - } - if (device == null) { - throw new NullPointerException("Failed to find suitable physical device."); - } - return device; - } - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java index 83a5ceea93..bc1b0c581c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java @@ -4,6 +4,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.descriptors.DescriptorSetLayout; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkPipelineLayoutCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java index a8ca8563b0..33ff537bc1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java @@ -1,6 +1,7 @@ package com.jme3.vulkan; import com.jme3.renderer.vulkan.VulkanUtils; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkQueue; import org.lwjgl.vulkan.VkSubmitInfo; @@ -10,11 +11,11 @@ public class Queue { - private final LogicalDevice device; + private final LogicalDevice device; private final VkQueue queue; private final int familyIndex, queueIndex; - public Queue(LogicalDevice device, int familyIndex, int queueIndex) { + public Queue(LogicalDevice device, int familyIndex, int queueIndex) { this.device = device; this.familyIndex = familyIndex; this.queueIndex = queueIndex; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java index 73948fe46f..d0e8c960c0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java @@ -1,5 +1,7 @@ package com.jme3.vulkan; +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.devices.PhysicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDeviceQueueCreateInfo; import org.lwjgl.vulkan.VkQueueFamilyProperties; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java index b7fbb83917..c35050fd49 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java @@ -2,8 +2,8 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkClearValue; import org.lwjgl.vulkan.VkRenderPassBeginInfo; import org.lwjgl.vulkan.VkRenderPassCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java index 3be74d53bf..2c95d8908f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java @@ -1,8 +1,8 @@ package com.jme3.vulkan; import com.jme3.renderer.vulkan.VulkanUtils; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.Struct; import org.lwjgl.vulkan.*; import java.util.ArrayList; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java index 27488eb934..dd8792fc24 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java @@ -2,6 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkSemaphoreCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java index 5810266f90..9214cff188 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java @@ -2,6 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkShaderModuleCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java index c92a01ad1c..b253f61505 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java @@ -1,8 +1,9 @@ package com.jme3.vulkan; -import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.devices.DeviceFilter; +import com.jme3.vulkan.devices.PhysicalDevice; import org.lwjgl.glfw.GLFWVulkan; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; @@ -12,7 +13,7 @@ import static com.jme3.renderer.vulkan.VulkanUtils.*; -public class Surface implements Native, DeviceEvaluator { +public class Surface implements Native, DeviceFilter { private final VulkanInstance instance; private final NativeReference ref; @@ -35,12 +36,12 @@ public Surface(VulkanInstance instance, long window) { public Float evaluateDevice(PhysicalDevice device) { try (MemoryStack stack = MemoryStack.stackPush()) { IntBuffer count = stack.mallocInt(1); - KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device.getDevice(), id, count, null); + KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device.getPhysicalDevice(), id, count, null); if (count.get(0) == 0) { System.out.println("Reject device by surface support (formats)"); return null; } - KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device.getDevice(), id, count, null); + KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device.getPhysicalDevice(), id, count, null); if (count.get(0) == 0) { System.out.println("Reject device by surface support (present modes)"); return null; @@ -69,4 +70,8 @@ public NativeReference getNativeReference() { return ref; } + public long getWindowHandle() { + return window; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java index df1156bd70..106f59537c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java @@ -2,8 +2,10 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; import com.jme3.vulkan.images.ImageView; +import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -15,95 +17,46 @@ import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; -public class Swapchain implements Native { +public class Swapchain extends VulkanObject { - private final LogicalDevice device; + public enum PresentMode { + + FirstInFirstOut(KHRSurface.VK_PRESENT_MODE_FIFO_KHR), + FirstInFirstOutRelaxed(KHRSurface.VK_PRESENT_MODE_FIFO_RELAXED_KHR), + Immediate(KHRSurface.VK_PRESENT_MODE_IMMEDIATE_KHR), + Mailbox(KHRSurface.VK_PRESENT_MODE_MAILBOX_KHR); + + private final int vkEnum; + + PresentMode(int vkEnum) { + this.vkEnum = vkEnum; + } + + public int getVkEnum() { + return vkEnum; + } + + } + + private final LogicalDevice device; private final Surface surface; - private final NativeReference ref; private final List images = new ArrayList<>(); private SwapchainUpdater updater; private Extent2 extent; private Image.Format format; - private long id = VK_NULL_HANDLE; - public Swapchain(LogicalDevice device, Surface surface, SwapchainSupport support) { + public Swapchain(LogicalDevice device, Surface surface) { this.device = device; this.surface = surface; + this.object = VK_NULL_HANDLE; ref = Native.get().register(this); device.getNativeReference().addDependent(ref); surface.getNativeReference().addDependent(ref); - reload(support); - } - - @Override - public Long getNativeObject() { - return id; } @Override public Runnable createNativeDestroyer() { - return () -> KHRSwapchain.vkDestroySwapchainKHR(device.getNativeObject(), id, null); - } - - @Override - public void prematureNativeDestruction() {} - - @Override - public NativeReference getNativeReference() { - return null; - } - - public void reload(SwapchainSupport support) { - assert support.isSupported() : "Swapchain for device is not supported."; - if (id != VK_NULL_HANDLE) { - createNativeDestroyer().run(); - id = VK_NULL_HANDLE; - } - images.clear(); - try (MemoryStack stack = MemoryStack.stackPush()) { - VkSurfaceCapabilitiesKHR caps = VkSurfaceCapabilitiesKHR.calloc(stack); - KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( - device.getPhysicalDevice().getDevice(), surface.getNativeObject(), caps); - VkSurfaceFormatKHR fmt = support.selectFormat(); - format = Image.Format.vkEnum(fmt.format()); - VkExtent2D ext = support.selectExtent(); - extent = new Extent2(ext); - VkSwapchainCreateInfoKHR create = VkSwapchainCreateInfoKHR.calloc(stack) - .sType(KHRSwapchain.VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR) - .surface(surface.getNativeObject()) - .minImageCount(support.selectImageCount()) - .imageFormat(format.getVkEnum()) - .imageColorSpace(fmt.colorSpace()) - .imageExtent(ext) - .imageArrayLayers(1) - .imageUsage(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) - .preTransform(caps.currentTransform()) - .compositeAlpha(KHRSurface.VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) - .presentMode(support.selectMode()) - .clipped(true) - .oldSwapchain(VK_NULL_HANDLE); - IntBuffer concurrent = device.getPhysicalDevice().getQueueFamilies().getSwapchainConcurrentBuffers(stack); - if (concurrent != null) { - create.imageSharingMode(VK_SHARING_MODE_CONCURRENT) - .queueFamilyIndexCount(concurrent.limit()) - .pQueueFamilyIndices(concurrent); - } else { - create.imageSharingMode(VK_SHARING_MODE_EXCLUSIVE); - } - LongBuffer ptr = stack.mallocLong(1); - check(KHRSwapchain.vkCreateSwapchainKHR(device.getNativeObject(), create, null, ptr), - "Failed to create swapchain."); - id = ptr.get(0); - System.out.println("swapchain handle: " + id); - LongBuffer imgs = enumerateBuffer(stack, stack::mallocLong, (c, b) -> - check(KHRSwapchain.vkGetSwapchainImagesKHR(device.getNativeObject(), id, c, b), - "Failed to get swapchain images.")); - Objects.requireNonNull(imgs, "Swapchain contains no images."); - for (int i = 0; i < imgs.limit(); i++) { - images.add(new SwapchainImage(device, imgs.get(i))); - } - } - ref.refresh(); // refresh the native destroyer + return () -> KHRSwapchain.vkDestroySwapchainKHR(device.getNativeObject(), object, null); } public void createFrameBuffers(RenderPass compat, ImageView depthStencil) { @@ -115,7 +68,7 @@ public void createFrameBuffers(RenderPass compat, ImageView depthStencil) { public SwapchainImage acquireNextImage(SwapchainUpdater updater, Semaphore semaphore, Fence fence, long timeout) { try (MemoryStack stack = MemoryStack.stackPush()) { IntBuffer i = stack.mallocInt(1); - int code = KHRSwapchain.vkAcquireNextImageKHR(device.getNativeObject(), id, + int code = KHRSwapchain.vkAcquireNextImageKHR(device.getNativeObject(), object, TimeUnit.MILLISECONDS.toNanos(timeout), Native.getId(semaphore), Native.getId(fence), i); if (updater.swapchainOutOfDate(this, code)) { return null; @@ -129,7 +82,7 @@ public void present(Queue presentQueue, SwapchainImage image, Semaphore wait) { VkPresentInfoKHR info = VkPresentInfoKHR.calloc(stack) .sType(KHRSwapchain.VK_STRUCTURE_TYPE_PRESENT_INFO_KHR) .swapchainCount(1) - .pSwapchains(stack.longs(id)) + .pSwapchains(stack.longs(object)) .pImageIndices(stack.ints(images.indexOf(image))); if (wait != null) { info.pWaitSemaphores(stack.longs(wait.getNativeObject())); @@ -158,6 +111,10 @@ public Image.Format getFormat() { return format; } + public Builder build() { + return new Builder(); + } + public class SwapchainImage implements Image { private final LogicalDevice device; @@ -242,4 +199,162 @@ public FrameBuffer getFrameBuffer() { } + public class Builder extends VulkanObject.Builder { + + private final VkSurfaceCapabilitiesKHR caps; + private final VkSurfaceFormatKHR.Buffer formats; + private final IntBuffer modes; + private final Collection queues = new ArrayList<>(); + + private VkSurfaceFormatKHR selectedFormat; + private VkExtent2D selectedExtent; + private PresentMode selectedMode; + private Integer selectedImageCount; + + private Swapchain base; + + public Builder() { + caps = VkSurfaceCapabilitiesKHR.malloc(stack); + KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device.getPhysicalDevice().getPhysicalDevice(), surface.getNativeObject(), caps); + formats = enumerateBuffer(stack, n -> VkSurfaceFormatKHR.malloc(n, stack), (count, buffer) + -> KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device.getPhysicalDevice().getPhysicalDevice(), + surface.getNativeObject(), count, buffer)); + modes = enumerateBuffer(stack, stack::mallocInt, (count, buffer) -> + KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device.getPhysicalDevice().getPhysicalDevice(), + surface.getNativeObject(), count, buffer)); + if (formats == null || modes == null) { + throw new UnsupportedOperationException("Swapchains are not supported by the device."); + } + } + + @Override + protected void build() { + if (selectedFormat == null) { + throw new IllegalStateException("Format not selected."); + } + if (selectedMode == null) { + throw new IllegalStateException("Mode not selected."); + } + if (selectedExtent == null) { + selectExtentByWindow(); + } + if (selectedImageCount == null) { + throw new IllegalStateException("Image count not selected."); + } + if (object != VK_NULL_HANDLE) { + createNativeDestroyer().run(); + object = VK_NULL_HANDLE; + } + VkSurfaceCapabilitiesKHR caps = VkSurfaceCapabilitiesKHR.calloc(stack); + KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( + device.getPhysicalDevice().getPhysicalDevice(), surface.getNativeObject(), caps); + format = Image.Format.vkEnum(selectedFormat.format()); + extent = new Extent2(selectedExtent); + VkSwapchainCreateInfoKHR create = VkSwapchainCreateInfoKHR.calloc(stack) + .sType(KHRSwapchain.VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR) + .surface(surface.getNativeObject()) + .minImageCount(selectedImageCount) + .imageFormat(format.getVkEnum()) + .imageColorSpace(selectedFormat.colorSpace()) + .imageExtent(selectedExtent) + .imageArrayLayers(1) + .imageUsage(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) + .preTransform(caps.currentTransform()) + .compositeAlpha(KHRSurface.VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) + .presentMode(selectedMode.getVkEnum()) + .clipped(true); + if (base != null) { + create.oldSwapchain(base.getNativeObject()); + } else { + create.oldSwapchain(VK_NULL_HANDLE); + } + if (queues.size() > 1) { + IntBuffer concurrent = stack.mallocInt(queues.size()); + for (Queue q : queues) { + concurrent.put(q.getFamilyIndex()); + } + concurrent.flip(); + create.imageSharingMode(VK_SHARING_MODE_CONCURRENT) + .queueFamilyIndexCount(queues.size()) + .pQueueFamilyIndices(concurrent); + } else { + create.imageSharingMode(VK_SHARING_MODE_EXCLUSIVE); + } + LongBuffer ptr = stack.mallocLong(1); + check(KHRSwapchain.vkCreateSwapchainKHR(device.getNativeObject(), create, null, ptr), + "Failed to create swapchain."); + object = ptr.get(0); + System.out.println("swapchain handle: " + object); + LongBuffer imgs = enumerateBuffer(stack, stack::mallocLong, (c, b) -> + check(KHRSwapchain.vkGetSwapchainImagesKHR(device.getNativeObject(), object, c, b), + "Failed to get swapchain images.")); + Objects.requireNonNull(imgs, "Swapchain contains no images."); + for (int i = 0; i < imgs.limit(); i++) { + images.add(new SwapchainImage(device, imgs.get(i))); + } + ref.refresh(); + } + + public void setBaseSwapchain(Swapchain base) { + this.base = base; + } + + public void addQueue(Queue queue) { + queues.add(queue); + } + + public VkSurfaceFormatKHR selectFormat(int... preferredFormats) { + for (VkSurfaceFormatKHR f : formats) { + for (int i = 0; i < preferredFormats.length; i += 2) { + if (f.format() == preferredFormats[i] && f.colorSpace() == preferredFormats[i + 1]) { + return (selectedFormat = f); + } + } + } + return (selectedFormat = formats.get(0)); + } + + public PresentMode selectMode(PresentMode... preferredModes) { + for (PresentMode m : preferredModes) { + for (int i = 0; i < modes.limit(); i++) { + if (modes.get(i) == m.getVkEnum()) { + return (selectedMode = m); + } + } + } + return (selectedMode = PresentMode.FirstInFirstOut); + } + + public VkExtent2D selectExtentByWindow() { + if (caps.currentExtent().width() != UINT32_MAX) { + return (selectedExtent = caps.currentExtent()); + } + IntBuffer width = stack.mallocInt(1); + IntBuffer height = stack.mallocInt(1); + GLFW.glfwGetFramebufferSize(surface.getWindowHandle(), width, height); + selectedExtent = VkExtent2D.malloc(stack); + selectedExtent.width(Math.min(Math.max(width.get(0), caps.minImageExtent().width()), caps.maxImageExtent().width())); + selectedExtent.height(Math.min(Math.max(width.get(0), caps.minImageExtent().height()), caps.maxImageExtent().height())); + return selectedExtent; + } + + public int selectImageCount(int preferredCount) { + if (preferredCount < caps.minImageCount()) { + preferredCount = caps.minImageCount(); + } else if (caps.maxImageCount() > 0 && preferredCount > caps.maxImageCount()) { + preferredCount = caps.maxImageCount(); + } + return (selectedImageCount = preferredCount); + } + + public int getMinImageCount() { + return caps.minImageCount(); + } + + public int getMaxImageCount() { + return caps.maxImageCount(); + } + + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java index 1f97c48591..9308da126a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java @@ -1,60 +1,130 @@ package com.jme3.vulkan; +import com.jme3.system.JmeVersion; import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; import org.lwjgl.PointerBuffer; +import org.lwjgl.glfw.GLFWVulkan; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; +import org.lwjgl.vulkan.EXTDebugUtils; import org.lwjgl.vulkan.VkApplicationInfo; import org.lwjgl.vulkan.VkInstance; import org.lwjgl.vulkan.VkInstanceCreateInfo; +import java.util.*; + import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; -public class VulkanInstance implements Native { +public class VulkanInstance extends VulkanObject { - private final NativeReference ref; - private VkInstance instance; + public static final String ENGINE_NAME = "jMonkeyEngine"; + public static final String LUNARG_LAYER = "VK_LAYER_KHRONOS_validation"; - public VulkanInstance(VkApplicationInfo appInfo, PointerBuffer extensions, PointerBuffer layers) { - try (MemoryStack stack = MemoryStack.stackPush()) { - VkInstanceCreateInfo create = VkInstanceCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO) - .pApplicationInfo(appInfo) - .ppEnabledExtensionNames(extensions); - if (layers != null) { - create.ppEnabledLayerNames(layers); - } - PointerBuffer ptr = stack.mallocPointer(1); - check(vkCreateInstance(create, null, ptr), "Failed to create instance."); - instance = new VkInstance(ptr.get(0), create); - } - ref = Native.get().register(this); - } + private final Set extensions = new HashSet<>(); + private final Set layers = new HashSet<>(); + private String appName = "Unnamed App"; + private int appVersion = VK_MAKE_VERSION(0, 0, 0); + private int apiVersion; - public Surface createGlfwSurface(long window) { - return new Surface(this, window); + public VulkanInstance() { + this(VK_API_VERSION_1_0); } - @Override - public VkInstance getNativeObject() { - return instance; + public VulkanInstance(int apiVersion) { + this.apiVersion = apiVersion; } @Override public Runnable createNativeDestroyer() { - return () -> vkDestroyInstance(instance, null); + return () -> vkDestroyInstance(object, null); } - @Override - public void prematureNativeDestruction() { - instance = null; + public Set getExtensions() { + return extensions; } - @Override - public NativeReference getNativeReference() { - return ref; + public Set getLayers() { + return layers; + } + + public Builder build() { + return new Builder(); + } + + public class Builder extends VulkanObject.Builder { + + @Override + protected void build() { + String[] ver = JmeVersion.VERSION_NUMBER.split("\\.", 3); + VkApplicationInfo info = VkApplicationInfo.calloc(stack) + .apiVersion(apiVersion) + .pEngineName(stack.UTF8(ENGINE_NAME)) + .engineVersion(VK_MAKE_VERSION( + Integer.parseInt(ver[0]), + Integer.parseInt(ver[1]), + Integer.parseInt(ver[2]))) + .pApplicationName(stack.UTF8(appName)) + .applicationVersion(appVersion); + VkInstanceCreateInfo create = VkInstanceCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO) + .pApplicationInfo(info); + if (!extensions.isEmpty()) { + PointerBuffer exts = stack.mallocPointer(extensions.size()); + for (String e : extensions) { + exts.put(stack.UTF8(e)); + } + create.ppEnabledExtensionNames(exts.flip()); + } + if (!layers.isEmpty()) { + PointerBuffer lyrs = stack.mallocPointer(layers.size()); + for (String l : layers) { + lyrs.put(stack.UTF8(l)); + } + create.ppEnabledLayerNames(lyrs.flip()); + } + PointerBuffer ptr = stack.mallocPointer(1); + check(vkCreateInstance(create, null, ptr), "Failed to create instance."); + object = new VkInstance(ptr.get(0), create); + ref = Native.get().register(VulkanInstance.this); + } + + public void setApplicationName(String name) { + VulkanInstance.this.appName = name; + } + + public void setApplicationVersion(int major, int minor, int patch) { + VulkanInstance.this.appVersion = VK_MAKE_VERSION(major, minor, patch); + } + + public void setApiVersion(int version) { + VulkanInstance.this.apiVersion = version; + } + + public void addGlfwExtensions() { + PointerBuffer exts = Objects.requireNonNull(GLFWVulkan.glfwGetRequiredInstanceExtensions(), + "Vulkan extensions for GLFW are not available."); + for (int i = 0; i < exts.limit(); i++) { + extensions.add(MemoryUtil.memUTF8(exts.get(i))); + } + } + + public void addDebugExtension() { + extensions.add(EXTDebugUtils.VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + } + + public void addLunarGLayer() { + layers.add(LUNARG_LAYER); + } + + public void addExtension(String ext) { + extensions.add(ext); + } + + public void addLayer(String layer) { + layers.add(layer); + } + } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index d5c930e421..25f5deacb1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -4,7 +4,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.CommandBuffer; -import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.flags.MemoryFlags; import com.jme3.vulkan.flags.BufferUsageFlags; import org.lwjgl.PointerBuffer; @@ -42,7 +42,7 @@ public GpuBuffer(LogicalDevice device, int size, BufferUsageFlags usage, MemoryF id = idBuf.get(0); VkMemoryRequirements bufferMem = VkMemoryRequirements.malloc(stack); vkGetBufferMemoryRequirements(device.getNativeObject(), id, bufferMem); - memory = new MemoryRegion(device, bufferMem.size(), device.getPhysicalDevice().findMemoryType( + memory = new MemoryRegion(device, bufferMem.size(), device.getPhysicalDevice().findSupportedMemoryType( stack, bufferMem.memoryTypeBits(), mem.getMemoryFlags())); memory.bind(this, 0); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java index 01f905c386..4b33cd7935 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java @@ -2,16 +2,14 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; -import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkMemoryAllocateInfo; import java.nio.*; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.Consumer; import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java index 5a0932fdb0..496f91194c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java @@ -1,9 +1,8 @@ package com.jme3.vulkan.buffers; -import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.flags.MemoryFlags; import com.jme3.vulkan.flags.BufferUsageFlags; -import org.lwjgl.BufferUtils; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index 49877649b5..8d5476c711 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -1,6 +1,7 @@ package com.jme3.vulkan.buffers; import com.jme3.vulkan.*; +import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.flags.MemoryFlags; import com.jme3.vulkan.flags.BufferUsageFlags; import org.lwjgl.PointerBuffer; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java index c9b9bc87b2..22a17be89c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java @@ -3,7 +3,7 @@ import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; -import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java index a7e685c841..4ac9ed11f9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -1,6 +1,6 @@ package com.jme3.vulkan.descriptors; -import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkWriteDescriptorSet; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java index a9a28c08e4..5a3ad95f3c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java @@ -2,7 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; -import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDescriptorSetLayoutBinding; import org.lwjgl.vulkan.VkDescriptorSetLayoutCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java similarity index 86% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java index 673a534257..b1beb5b95a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/DeviceEvaluator.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java @@ -1,12 +1,13 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.devices; +import com.jme3.vulkan.Surface; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkExtensionProperties; import java.util.Arrays; import java.util.Collection; -public interface DeviceEvaluator { +public interface DeviceFilter { Float evaluateDevice(PhysicalDevice device); @@ -26,7 +27,7 @@ static DeviceAnisotropySupport anisotropy() { return new DeviceAnisotropySupport(); } - class DeviceExtensionSupport implements DeviceEvaluator { + class DeviceExtensionSupport implements DeviceFilter { private final Collection extensions; @@ -37,7 +38,7 @@ public DeviceExtensionSupport(Collection extensions) { @Override public Float evaluateDevice(PhysicalDevice device) { try (MemoryStack stack = MemoryStack.stackPush()) { - VkExtensionProperties.Buffer exts = device.getExtensions(stack); + VkExtensionProperties.Buffer exts = device.getExtensionProperties(stack); if (extensions.stream().allMatch(e -> exts.stream().anyMatch( p -> p.extensionNameString().equals(e)))) { return 0f; @@ -48,7 +49,7 @@ public Float evaluateDevice(PhysicalDevice device) { } - class DeviceSwapchainSupport implements DeviceEvaluator { + class DeviceSwapchainSupport implements DeviceFilter { private final Surface surface; @@ -66,7 +67,7 @@ public Float evaluateDevice(PhysicalDevice device) { } - class DeviceAnisotropySupport implements DeviceEvaluator { + class DeviceAnisotropySupport implements DeviceFilter { @Override public Float evaluateDevice(PhysicalDevice device) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java new file mode 100644 index 0000000000..765a092879 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java @@ -0,0 +1,192 @@ +package com.jme3.vulkan.devices; + +import com.jme3.util.natives.Native; +import com.jme3.vulkan.Surface; +import com.jme3.vulkan.VulkanInstance; +import com.jme3.vulkan.VulkanObject; +import org.lwjgl.PointerBuffer; +import org.lwjgl.vulkan.*; + +import java.util.*; +import java.util.function.Function; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class LogicalDevice extends VulkanObject { + + private final VulkanInstance instance; + private final Set enabledExtensions = new HashSet<>(); + private final VkPhysicalDeviceFeatures enabledFeatures = VkPhysicalDeviceFeatures.calloc(); + private T physical; + + public LogicalDevice(VulkanInstance instance) { + this.instance = instance; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + vkDestroyDevice(object, null); + enabledFeatures.free(); + }; + } + + public void waitIdle() { + vkDeviceWaitIdle(object); + } + + public T getPhysicalDevice() { + return physical; + } + + public Set getEnabledExtensions() { + return Collections.unmodifiableSet(enabledExtensions); + } + + public VkPhysicalDeviceFeatures getEnabledFeatures() { + return enabledFeatures; + } + + public Builder build(Function deviceFactory) { + return new Builder(deviceFactory); + } + + public class Builder extends VulkanObject.Builder { + + private final Function deviceFactory; + private final Set extensions = new HashSet<>(); + private final Collection features = new ArrayList<>(); + private final Collection filters = new ArrayList<>(); + private boolean enableAllFeatures = false; + + public Builder(Function deviceFactory) { + this.deviceFactory = deviceFactory; + } + + @Override + protected void build() { + findSuitablePhysicalDevice(); + VkPhysicalDeviceFeatures supportedFeatures = physical.getFeatures(stack); + if (enableAllFeatures) { + enabledFeatures.set(supportedFeatures); + } else for (DeviceFeature f : features) { + if (DeviceWeights.isSuccess(f.evaluateFeatureSupport(supportedFeatures))) { + f.enableFeature(enabledFeatures); + } + } + VkDeviceCreateInfo create = VkDeviceCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO) + .pQueueCreateInfos(physical.createQueueFamilyInfo(stack)) + .pEnabledFeatures(enabledFeatures); + if (!extensions.isEmpty()) { + PointerBuffer exts = stack.mallocPointer(extensions.size()); + for (DeviceExtension e : extensions) { + enabledExtensions.add(e.getName()); + exts.put(stack.UTF8(e.getName())); + } + create.ppEnabledExtensionNames(exts.flip()); + } + Set layers = physical.getInstance().getLayers(); + if (!layers.isEmpty()) { + PointerBuffer lyrs = stack.mallocPointer(layers.size()); + for (String l : layers) { + lyrs.put(stack.UTF8(l)); + } + create.ppEnabledLayerNames(lyrs.flip()); + } + PointerBuffer ptr = stack.mallocPointer(1); + check(vkCreateDevice(physical.getPhysicalDevice(), create, null, ptr), + "Failed to create logical device."); + object = new VkDevice(ptr.get(0), physical.getPhysicalDevice(), create); + ref = Native.get().register(LogicalDevice.this); + physical.getInstance().getNativeReference().addDependent(ref); + physical.createQueues(LogicalDevice.this); + } + + private void findSuitablePhysicalDevice() { + PointerBuffer devices = enumerateBuffer(stack, stack::mallocPointer, + (count, buffer) -> check( + vkEnumeratePhysicalDevices(instance.getNativeObject(), count, buffer), + "Failed to enumerate physical devices.")); + physical = null; + float topWeight = Float.NEGATIVE_INFINITY; + deviceLoop: for (T d : iteratePointers(devices, deviceFactory::apply)) { + float deviceWeight = 0f; + // extensions + VkExtensionProperties.Buffer supportedExts = d.getExtensionProperties(stack); + Set extSet = new HashSet<>(); + supportedExts.stream().forEach(e -> extSet.add(e.extensionNameString())); + for (DeviceExtension ext : extensions) { + Float weight = ext.evaluate(extSet); + if (weight == null) { + continue deviceLoop; + } + deviceWeight += weight; + } + // features + VkPhysicalDeviceFeatures ftrs = d.getFeatures(stack); + for (DeviceFeature f : features) { + Float weight = f.evaluateFeatureSupport(ftrs); + if (DeviceWeights.isRejection(weight)) { + continue deviceLoop; + } + deviceWeight += weight; + } + // miscellaneous filters + for (DeviceFilter f : filters) { + Float weight = f.evaluateDevice(d); + if (weight == null) { + continue deviceLoop; + } + deviceWeight += weight; + } + // compare + if (deviceWeight > topWeight) { + physical = d; + topWeight = deviceWeight; + } + } + if (physical == null) { + throw new NullPointerException("Failed to find suitable physical device."); + } + } + + public void addExtension(DeviceExtension extension) { + extensions.add(extension); + } + + public void addCriticalExtension(String name) { + addExtension(DeviceExtension.critical(name)); + } + + public void addOptionalExtension(String name, float successWeight) { + addExtension(DeviceExtension.optional(name, successWeight)); + } + + public void addFeature(DeviceFeature feature) { + features.add(feature); + } + + public void addFilter(DeviceFilter filter) { + filters.add(filter); + } + + public void setEnableAllFeatures(boolean enableAllFeatures) { + this.enableAllFeatures = enableAllFeatures; + } + + } + + private static class EvaluatedDevice { + + public final T device; + public final Collection features = new ArrayList<>(); + + private EvaluatedDevice(T device) { + this.device = device; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java new file mode 100644 index 0000000000..2aceb6dea8 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java @@ -0,0 +1,106 @@ +package com.jme3.vulkan.devices; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.Surface; +import com.jme3.vulkan.VulkanInstance; +import com.jme3.vulkan.images.Image; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.*; + +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.util.Collection; +import java.util.function.Function; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public abstract class PhysicalDevice { + + private final VulkanInstance instance; + private final VkPhysicalDevice physicalDevice; + + public PhysicalDevice(VulkanInstance instance, long id) { + this.instance = instance; + this.physicalDevice = new VkPhysicalDevice(id, instance.getNativeObject()); + } + + protected abstract boolean populateQueueFamilyIndices(); + + protected abstract VkDeviceQueueCreateInfo.Buffer createQueueFamilyInfo(MemoryStack stack); + + protected abstract void createQueues(LogicalDevice device); + + public VulkanInstance getInstance() { + return instance; + } + + public VkPhysicalDevice getPhysicalDevice() { + return physicalDevice; + } + + public VkQueueFamilyProperties.Buffer getQueueFamilyProperties(MemoryStack stack) { + return enumerateBuffer(stack, n -> VkQueueFamilyProperties.calloc(n, stack), (count, buffer) + -> vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, count, buffer)); + } + + public VkPhysicalDeviceProperties getProperties(MemoryStack stack) { + VkPhysicalDeviceProperties props = VkPhysicalDeviceProperties.malloc(stack); + vkGetPhysicalDeviceProperties(physicalDevice, props); + return props; + } + + public VkPhysicalDeviceFeatures getFeatures(MemoryStack stack) { + VkPhysicalDeviceFeatures features = VkPhysicalDeviceFeatures.malloc(stack); + vkGetPhysicalDeviceFeatures(physicalDevice, features); + return features; + } + + public VkExtensionProperties.Buffer getExtensionProperties(MemoryStack stack) { + return enumerateBuffer(stack, n -> VkExtensionProperties.malloc(n, stack), (count, buffer) -> + vkEnumerateDeviceExtensionProperties(physicalDevice, (ByteBuffer)null, count, buffer)); + } + + public VkPhysicalDeviceMemoryProperties getMemoryProperties(MemoryStack stack) { + VkPhysicalDeviceMemoryProperties mem = VkPhysicalDeviceMemoryProperties.malloc(stack); + vkGetPhysicalDeviceMemoryProperties(physicalDevice, mem); + return mem; + } + + public int findSupportedMemoryType(MemoryStack stack, int types, int flags) { + VkPhysicalDeviceMemoryProperties mem = getMemoryProperties(stack); + for (int i = 0; i < mem.memoryTypeCount(); i++) { + if ((types & (1 << i)) != 0 && (mem.memoryTypes().get(i).propertyFlags() & flags) != 0) { + return i; + } + } + throw new NullPointerException("Suitable memory type not found."); + } + + public Image.Format findSupportedFormat(int tiling, int features, Image.Format... candidates) { + VkFormatProperties props = VkFormatProperties.create(); + for (Image.Format f : candidates) { + vkGetPhysicalDeviceFormatProperties(physicalDevice, f.getVkEnum(), props); + if ((tiling == VK_IMAGE_TILING_LINEAR && (props.linearTilingFeatures() & features) == features) + || (tiling == VK_IMAGE_TILING_OPTIMAL && (props.optimalTilingFeatures() & features) == features)) { + return f; + } + } + throw new NullPointerException("Failed to find supported format."); + } + + public boolean querySwapchainSupport(Surface surface) { + try (MemoryStack stack = MemoryStack.stackPush()) { + IntBuffer count = stack.mallocInt(1); + KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface.getNativeObject(), count, null); + if (count.get(0) <= 0) { + return false; + } + KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface.getNativeObject(), count, null); + return count.get(0) > 0; + } + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java index 820323a1c0..5306f7453c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -1,14 +1,12 @@ package com.jme3.vulkan.images; -import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.CommandBuffer; -import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.buffers.MemoryRegion; import com.jme3.vulkan.flags.ImageUsageFlags; import com.jme3.vulkan.flags.MemoryFlags; -import com.jme3.vulkan.flags.BufferUsageFlags; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkImageCreateInfo; import org.lwjgl.vulkan.VkImageMemoryBarrier; @@ -61,7 +59,7 @@ public GpuImage(LogicalDevice device, int type, int width, int height, int depth id = idBuf.get(0); VkMemoryRequirements memReq = VkMemoryRequirements.malloc(stack); vkGetImageMemoryRequirements(device.getNativeObject(), id, memReq); - memory = new MemoryRegion(device, memReq.size(), device.getPhysicalDevice().findMemoryType( + memory = new MemoryRegion(device, memReq.size(), device.getPhysicalDevice().findSupportedMemoryType( stack, memReq.memoryTypeBits(), mem.getMemoryFlags())); memory.bind(this, 0); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java index 7cafbcd3db..f55023dea1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java @@ -1,7 +1,7 @@ package com.jme3.vulkan.images; import com.jme3.util.natives.Native; -import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.KHRSwapchain; import org.lwjgl.vulkan.VkImageViewCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java index c06d7220d8..b710f78d85 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java @@ -2,7 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; -import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkPhysicalDeviceProperties; import org.lwjgl.vulkan.VkSamplerCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java index 4a65f2ab3d..dea4ffb66c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java @@ -1,6 +1,6 @@ package com.jme3.vulkan.images; -import com.jme3.vulkan.LogicalDevice; +import com.jme3.vulkan.devices.LogicalDevice; public class Texture extends Sampler { From 5f7d1ecbf46a39d5f34b9cd056d119fed7555c25 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sun, 3 Aug 2025 07:53:49 -0400 Subject: [PATCH 19/80] migrated instance, device, surface, and swapchain to new builder architecture --- .../com/jme3/vulkan/SimplePhysicalDevice.java | 82 +++++++++++++++++++ .../java/com/jme3/vulkan/VulkanObject.java | 39 +++++++++ .../jme3/vulkan/app/VulkanApplication.java | 18 ++++ .../jme3/vulkan/devices/DeviceExtension.java | 65 +++++++++++++++ .../jme3/vulkan/devices/DeviceFeature.java | 24 ++++++ .../jme3/vulkan/devices/DeviceProperty.java | 13 +++ .../jme3/vulkan/devices/DeviceWeights.java | 49 +++++++++++ 7 files changed, 290 insertions(+) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/SimplePhysicalDevice.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanObject.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/app/VulkanApplication.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceExtension.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFeature.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceProperty.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceWeights.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SimplePhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SimplePhysicalDevice.java new file mode 100644 index 0000000000..cbcec8b492 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SimplePhysicalDevice.java @@ -0,0 +1,82 @@ +package com.jme3.vulkan; + +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.devices.PhysicalDevice; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.KHRSurface; +import org.lwjgl.vulkan.VK13; +import org.lwjgl.vulkan.VkDeviceQueueCreateInfo; +import org.lwjgl.vulkan.VkQueueFamilyProperties; + +import java.nio.IntBuffer; + +public class SimplePhysicalDevice extends PhysicalDevice { + + private final Surface surface; + private Integer graphicsIndex, presentIndex; + private Queue graphics, present; + + public SimplePhysicalDevice(VulkanInstance instance, Surface surface, long id) { + super(instance, id); + this.surface = surface; + } + + @Override + protected boolean populateQueueFamilyIndices() { + try (MemoryStack stack = MemoryStack.stackPush()) { + VkQueueFamilyProperties.Buffer properties = getQueueFamilyProperties(stack); + IntBuffer ibuf = stack.callocInt(1); + for (int i = 0; i < properties.limit(); i++) { + VkQueueFamilyProperties props = properties.get(i); + if (graphicsIndex == null && (props.queueFlags() & VK13.VK_QUEUE_GRAPHICS_BIT) > 0) { + graphicsIndex = i; + } else if (presentIndex == null) { + KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR( + getPhysicalDevice(), i, surface.getNativeObject(), ibuf); + if (ibuf.get(0) == VK13.VK_TRUE) { + presentIndex = i; + } + } + if (graphicsIndex != null && presentIndex != null) { + return true; + } + } + } + return false; + } + + @Override + protected VkDeviceQueueCreateInfo.Buffer createQueueFamilyInfo(MemoryStack stack) { + VkDeviceQueueCreateInfo.Buffer create = VkDeviceQueueCreateInfo.calloc(2, stack); // one element for each queue + create.get(0).sType(VK13.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) + .queueFamilyIndex(graphicsIndex) + .pQueuePriorities(stack.floats(1f)); + create.get(1).sType(VK13.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) + .queueFamilyIndex(presentIndex) + .pQueuePriorities(stack.floats(1f)); + return create; + } + + @Override + protected void createQueues(LogicalDevice device) { + graphics = new Queue(device, graphicsIndex, 0); + present = new Queue(device, presentIndex, 0); + } + + public Integer getGraphicsIndex() { + return graphicsIndex; + } + + public Integer getPresentIndex() { + return presentIndex; + } + + public Queue getGraphics() { + return graphics; + } + + public Queue getPresent() { + return present; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanObject.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanObject.java new file mode 100644 index 0000000000..67add85eb2 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanObject.java @@ -0,0 +1,39 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; + +public abstract class VulkanObject implements Native { + + protected T object; + protected NativeReference ref; + + @Override + public T getNativeObject() { + return object; + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + public static abstract class Builder implements AutoCloseable { + + protected final MemoryStack stack = MemoryStack.stackPush(); + + @Override + public void close() { + build(); + stack.pop(); + } + + protected abstract void build(); + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/app/VulkanApplication.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/app/VulkanApplication.java new file mode 100644 index 0000000000..9d32f9623c --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/app/VulkanApplication.java @@ -0,0 +1,18 @@ +package com.jme3.vulkan.app; + +import com.jme3.app.SimpleApplication; +import com.jme3.vulkan.VulkanInstance; +import org.lwjgl.system.MemoryStack; + +public class VulkanApplication extends SimpleApplication { + + protected VulkanInstance instance; + + @Override + public void simpleInitApp() { + try (MemoryStack stack = MemoryStack.stackPush()) { + + } + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceExtension.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceExtension.java new file mode 100644 index 0000000000..35eca346d3 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceExtension.java @@ -0,0 +1,65 @@ +package com.jme3.vulkan.devices; + +import java.util.Objects; +import java.util.Set; + +public class DeviceExtension { + + private final String name; + private final Float success, fail; + + public DeviceExtension(String name) { + this(name, 1f, null); + } + + public DeviceExtension(String name, Float success) { + this(name, success, null); + } + + public DeviceExtension(String name, Float success, Float fail) { + this.name = name; + this.success = success; + this.fail = fail; + } + + public Float evaluate(Set extensions) { + return extensions.contains(name) ? success : fail; + } + + public String getName() { + return name; + } + + public Float getSuccessWeight() { + return success; + } + + public Float getFailWeight() { + return fail; + } + + public boolean isRejectOnFailure() { + return fail == null; + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + DeviceExtension that = (DeviceExtension) o; + return Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hashCode(name); + } + + public static DeviceExtension critical(String name) { + return new DeviceExtension(name, 1f, null); + } + + public static DeviceExtension optional(String name, float successWeight) { + return new DeviceExtension(name, successWeight); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFeature.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFeature.java new file mode 100644 index 0000000000..886c2ccf5f --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFeature.java @@ -0,0 +1,24 @@ +package com.jme3.vulkan.devices; + +import org.lwjgl.vulkan.VkPhysicalDeviceFeatures; + +public interface DeviceFeature { + + void enableFeature(VkPhysicalDeviceFeatures features); + + Float evaluateFeatureSupport(VkPhysicalDeviceFeatures features); + + static DeviceFeature anisotropy(Float pass, boolean rejectOnFail) { + return new DeviceFeature() { + @Override + public void enableFeature(VkPhysicalDeviceFeatures features) { + features.samplerAnisotropy(true); + } + @Override + public Float evaluateFeatureSupport(VkPhysicalDeviceFeatures features) { + return features.samplerAnisotropy() ? pass : (rejectOnFail ? null : 0f); + } + }; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceProperty.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceProperty.java new file mode 100644 index 0000000000..f2919af8ae --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceProperty.java @@ -0,0 +1,13 @@ +package com.jme3.vulkan.devices; + +import org.lwjgl.vulkan.VkPhysicalDeviceProperties; + +public interface DeviceProperty { + + Float evaluateDeviceProperties(VkPhysicalDeviceProperties properties); + + static DeviceProperty maxAnisotropy(float threshold) { + return p -> p.limits().maxSamplerAnisotropy() >= threshold ? 0f : null; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceWeights.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceWeights.java new file mode 100644 index 0000000000..155322c3dd --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceWeights.java @@ -0,0 +1,49 @@ +package com.jme3.vulkan.devices; + +public class DeviceWeights { + + public static final Float SUCCESS = 1f; + public static final Float FAILURE = -1f; + public static final Float REJECTION = null; + + public static Float success(float weight) { + return weight; + } + + public static Float failure(float weight) { + return -weight; + } + + public static Float successOrReject(boolean success) { + return successOrReject(success, SUCCESS); + } + + public static Float successOrReject(boolean success, float weight) { + return success ? Float.valueOf(weight) : REJECTION; + } + + public static Float successOrFail(boolean success) { + return successOrFail(success, SUCCESS, FAILURE); + } + + public static Float successOrFail(boolean success, float weight) { + return success ? weight : -weight; + } + + public static Float successOrFail(boolean success, float successWeight, float failWeight) { + return success ? successWeight : -failWeight; + } + + public static boolean isSuccess(Float weight) { + return weight != null && weight >= 0f; + } + + public static boolean isFailure(Float weight) { + return weight == null || weight < 0f; + } + + public static boolean isRejection(Float weight) { + return weight == null; + } + +} From c4738eeedb265c63793b7fe651ba2b5d8def3623 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 5 Aug 2025 21:26:29 -0400 Subject: [PATCH 20/80] successfully abstracted all vulkan components --- .../jme3test/vulkan/VulkanHelperTest.java | 394 ++++-------------- .../main/java/com/jme3/vulkan/Attachment.java | 54 --- .../java/com/jme3/vulkan/CommandPool.java | 6 +- .../src/main/java/com/jme3/vulkan/Fence.java | 6 +- .../com/jme3/vulkan/GraphicsPipeline.java | 145 ------- .../java/com/jme3/vulkan/MeshDescription.java | 63 +-- .../java/com/jme3/vulkan/PipelineLayout.java | 4 +- .../src/main/java/com/jme3/vulkan/Queue.java | 8 +- .../main/java/com/jme3/vulkan/RenderPass.java | 75 ---- .../com/jme3/vulkan/RenderPassBuilder.java | 76 ---- .../main/java/com/jme3/vulkan/Semaphore.java | 4 +- .../java/com/jme3/vulkan/ShaderModule.java | 4 +- .../com/jme3/vulkan/SwapchainSupport.java | 18 - .../java/com/jme3/vulkan/VulkanLogger.java | 3 +- .../com/jme3/vulkan/buffers/GpuBuffer.java | 4 +- .../com/jme3/vulkan/buffers/MemoryRegion.java | 4 +- .../vulkan/descriptors/BufferSetWriter.java | 9 +- .../vulkan/descriptors/DescriptorPool.java | 4 +- .../vulkan/descriptors/DescriptorSet.java | 4 +- .../descriptors/DescriptorSetLayout.java | 4 +- .../com/jme3/vulkan/descriptors/PoolSize.java | 4 + .../vulkan/descriptors/SetLayoutBinding.java | 11 +- .../com/jme3/vulkan/devices/DeviceFilter.java | 2 +- .../GeneralPhysicalDevice.java} | 45 +- .../jme3/vulkan/devices/LogicalDevice.java | 69 +-- .../jme3/vulkan/devices/PhysicalDevice.java | 7 +- .../java/com/jme3/vulkan/images/GpuImage.java | 8 +- .../java/com/jme3/vulkan/images/Image.java | 37 +- .../java/com/jme3/vulkan/images/Sampler.java | 10 +- .../jme3/vulkan/images/VulkanImageLoader.java | 80 +++- .../java/com/jme3/vulkan/pass/Attachment.java | 118 ++++++ .../jme3/vulkan/pass/AttachmentReference.java | 49 +++ .../java/com/jme3/vulkan/pass/RenderPass.java | 251 +++++++++++ .../java/com/jme3/vulkan/pass/Subpass.java | 196 +++++++++ .../jme3/vulkan/pass/SubpassDependency.java | 97 +++++ .../vulkan/pipelines/ComputePipeline.java | 47 +++ .../vulkan/{ => pipelines}/FrameBuffer.java | 7 +- .../vulkan/pipelines/GraphicsPipeline.java | 142 +++++++ .../com/jme3/vulkan/pipelines/Pipeline.java | 43 ++ .../vulkan/pipelines/PipelineBindPoint.java | 20 + .../states/ColorBlendAttachment.java | 62 +++ .../pipelines/states/ColorBlendState.java | 45 ++ .../pipelines/states/DepthStencilState.java | 46 ++ .../vulkan/pipelines/states/DynamicState.java | 61 +++ .../pipelines/states/InputAssemblyState.java | 28 ++ .../pipelines/states/MultisampleState.java | 29 ++ .../pipelines/states/PipelineState.java | 10 + .../pipelines/states/RasterizationState.java | 60 +++ .../pipelines/states/VertexInputState.java | 30 ++ .../pipelines/states/ViewportState.java | 88 ++++ .../jme3/vulkan/{ => surface}/Surface.java | 3 +- .../jme3/vulkan/{ => surface}/Swapchain.java | 30 +- .../{ => surface}/SwapchainUpdater.java | 2 +- 53 files changed, 1774 insertions(+), 852 deletions(-) delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Attachment.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainSupport.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{SimplePhysicalDevice.java => devices/GeneralPhysicalDevice.java} (64%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Attachment.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Subpass.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => pipelines}/FrameBuffer.java (90%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineBindPoint.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendAttachment.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/MultisampleState.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/PipelineState.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => surface}/Surface.java (97%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => surface}/Swapchain.java (92%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => surface}/SwapchainUpdater.java (77%) diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index c3022f3d97..dab04643f5 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -13,7 +13,6 @@ import com.jme3.util.BufferUtils; import com.jme3.util.natives.Native; import com.jme3.vulkan.*; -import com.jme3.vulkan.Queue; import com.jme3.vulkan.buffers.*; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.*; @@ -21,25 +20,31 @@ import com.jme3.vulkan.flags.MemoryFlags; import com.jme3.vulkan.flags.BufferUsageFlags; import com.jme3.vulkan.images.*; -import org.lwjgl.glfw.GLFW; +import com.jme3.vulkan.pass.Attachment; +import com.jme3.vulkan.pass.Subpass; +import com.jme3.vulkan.pipelines.GraphicsPipeline; +import com.jme3.vulkan.pass.RenderPass; +import com.jme3.vulkan.pipelines.PipelineBindPoint; +import com.jme3.vulkan.pipelines.states.ColorBlendAttachment; +import com.jme3.vulkan.pipelines.states.DynamicState; +import com.jme3.vulkan.surface.Surface; +import com.jme3.vulkan.surface.Swapchain; +import com.jme3.vulkan.surface.SwapchainUpdater; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; import java.nio.FloatBuffer; import java.nio.IntBuffer; -import java.util.*; import java.util.function.Consumer; import java.util.logging.Level; -import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK13.*; public class VulkanHelperTest extends SimpleApplication implements SwapchainUpdater { private VulkanInstance instance; private Surface surface; - private LogicalDevice device; - private SimpleQueueFamilies queues; + private LogicalDevice device; private Swapchain swapchain; private ShaderModule vertModule, fragModule; private PipelineLayout pipelineLayout; @@ -122,18 +127,19 @@ public void simpleInitApp() { // logical device device = new LogicalDevice<>(instance); - try (LogicalDevice.Builder d = device.build(id -> new SimplePhysicalDevice(instance, surface, id))) { + try (LogicalDevice.Builder d = device.build(id -> new GeneralPhysicalDevice(instance, surface, id))) { d.addFilter(surface); d.addFilter(DeviceFilter.swapchain(surface)); d.addCriticalExtension(KHRSwapchain.VK_KHR_SWAPCHAIN_EXTENSION_NAME); d.addFeature(DeviceFeature.anisotropy(1f, true)); } + GeneralPhysicalDevice physDevice = device.getPhysicalDevice(); // swapchain swapchain = new Swapchain(device, surface); try (Swapchain.Builder s = swapchain.build()) { - s.addQueue(device.getPhysicalDevice().getGraphics()); - s.addQueue(device.getPhysicalDevice().getPresent()); + s.addQueue(physDevice.getGraphics()); + s.addQueue(physDevice.getPresent()); s.selectFormat(Image.Format.B8G8R8A8_SRGB.getVkEnum(), KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR); s.selectMode(Swapchain.PresentMode.Mailbox); s.selectExtentByWindow(); @@ -143,10 +149,12 @@ public void simpleInitApp() { descriptorLayout = new DescriptorSetLayout(device, SetLayoutBinding.uniformBuffer(0, 1, VK_SHADER_STAGE_VERTEX_BIT), SetLayoutBinding.combinedImageSampler(1, 1, VK_SHADER_STAGE_FRAGMENT_BIT)); - descriptorPool = new DescriptorPool(device, 2, - PoolSize.uniformBuffers(2), PoolSize.combinedImageSamplers(2)); + descriptorPool = new DescriptorPool(device, 3, + PoolSize.uniformBuffers(3), + PoolSize.storageBuffers(4), + PoolSize.combinedImageSamplers(2)); - CommandPool transferPool = new CommandPool(device, queues.getGraphicsQueue(), true, false); + CommandPool transferPool = new CommandPool(device, physDevice.getGraphics(), true, false); // depth texture depthView = createDepthAttachment(transferPool); @@ -157,49 +165,46 @@ public void simpleInitApp() { "Shaders/VulkanVertTest.glsl", ShaderType.Vertex)), "main"); fragModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( "Shaders/VulkanFragTest.glsl", ShaderType.Fragment)), "main"); - try (RenderPassBuilder pass = new RenderPassBuilder()) { - int color = pass.createAttachment(a -> a - .format(swapchain.getFormat().getVkEnum()) - .samples(VK_SAMPLE_COUNT_1_BIT) - .loadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) - .storeOp(VK_ATTACHMENT_STORE_OP_STORE) - .stencilLoadOp(VK_ATTACHMENT_LOAD_OP_DONT_CARE) - .stencilStoreOp(VK_ATTACHMENT_STORE_OP_DONT_CARE) - .initialLayout(Image.Layout.Undefined.getVkEnum()) - .finalLayout(Image.Layout.PresentSrc.getVkEnum())); - int depth = pass.createAttachment(a -> a - .format(depthView.getImage().getFormat().getVkEnum()) - .samples(VK_SAMPLE_COUNT_1_BIT) - .loadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) - .storeOp(VK_ATTACHMENT_STORE_OP_DONT_CARE) - .stencilLoadOp(VK_ATTACHMENT_LOAD_OP_DONT_CARE) - .stencilStoreOp(VK_ATTACHMENT_STORE_OP_DONT_CARE) - .initialLayout(Image.Layout.Undefined.getVkEnum()) - .finalLayout(Image.Layout.DepthStencilAttachmentOptimal.getVkEnum())); - int subpass = pass.createSubpass(s -> { - VkAttachmentReference.Buffer colorRef = VkAttachmentReference.calloc(1, pass.getStack()) - .attachment(color) - .layout(Image.Layout.ColorAttachmentOptimal.getVkEnum()); - VkAttachmentReference depthRef = VkAttachmentReference.calloc(pass.getStack()) - .attachment(depth) - .layout(Image.Layout.DepthStencilAttachmentOptimal.getVkEnum()); - s.pipelineBindPoint(VK_PIPELINE_BIND_POINT_GRAPHICS) - .colorAttachmentCount(1) - .pColorAttachments(colorRef) - .pDepthStencilAttachment(depthRef); + renderPass = new RenderPass(device); + try (RenderPass.Builder p = renderPass.build()) { + Attachment color = p.createAttachment(swapchain.getFormat(), VK_SAMPLE_COUNT_1_BIT, a -> { + a.setLoad(Image.Load.Clear); + a.setStore(Image.Store.Store); + a.setStencilLoad(Image.Load.DontCare); + a.setStencilStore(Image.Store.DontCare); + a.setInitialLayout(Image.Layout.Undefined); + a.setFinalLayout(Image.Layout.PresentSrc); + }); + Attachment depth = p.createAttachment(depthView.getImage().getFormat(), VK_SAMPLE_COUNT_1_BIT, a -> { + a.setLoad(Image.Load.Clear); + a.setStore(Image.Store.DontCare); + a.setStencilLoad(Image.Load.DontCare); + a.setStencilStore(Image.Store.DontCare); + a.setInitialLayout(Image.Layout.Undefined); + a.setFinalLayout(Image.Layout.DepthStencilAttachmentOptimal); + }); + Subpass subpass = p.createSubpass(PipelineBindPoint.Graphics, s -> { + s.addColorAttachment(color.createReference(Image.Layout.ColorAttachmentOptimal)); + s.setDepthStencilAttachment(depth.createReference(Image.Layout.DepthStencilAttachmentOptimal)); + }); + p.createDependency(null, subpass, d -> { + d.setSrcStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT); + d.setSrcAccessMask(subpass.getPosition()); + d.setDstStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT); + d.setDstAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT); }); - pass.createDependency() - .srcSubpass(VK_SUBPASS_EXTERNAL) - .dstSubpass(subpass) - .srcStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT) - .srcAccessMask(subpass) - .dstStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT) - .dstAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT); - renderPass = pass.build(device); } swapchain.createFrameBuffers(renderPass, depthView); - pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, new RenderState(), vertModule, fragModule, new MeshDescription()); - graphicsPool = new CommandPool(device, queues.getGraphicsQueue(), false, true); + pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, 0, new TestCaseMeshDescription()); + try (GraphicsPipeline.Builder p = pipeline.build()) { + p.addStage(vertModule, VK_SHADER_STAGE_VERTEX_BIT); + p.addStage(fragModule, VK_SHADER_STAGE_FRAGMENT_BIT); + p.getViewportState().addViewport(); + p.getViewportState().addScissor(); + p.getColorBlend().addAttachment(new ColorBlendAttachment()); + p.getDynamicState().addTypes(DynamicState.Type.ViewPort, DynamicState.Type.Scissor); + } + graphicsPool = new CommandPool(device, physDevice.getGraphics(), false, true); // vertex buffers try (MemoryStack stack = MemoryStack.stackPush()) { @@ -221,7 +226,7 @@ public void simpleInitApp() { } // material color texture - GpuImage image = loadImage("Common/Textures/MissingTexture.png", transferPool); + GpuImage image = assetManager.loadAsset(VulkanImageLoader.key(transferPool, "Common/Textures/MissingTexture.png")); texture = new Texture(device, image.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1), VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); @@ -242,12 +247,16 @@ public boolean swapchainOutOfDate(Swapchain swapchain, int imageAcquireCode) { if (swapchainResizeFlag || imageAcquireCode == KHRSwapchain.VK_ERROR_OUT_OF_DATE_KHR || imageAcquireCode == KHRSwapchain.VK_SUBOPTIMAL_KHR) { swapchainResizeFlag = false; - long window = ((LwjglVulkanContext)context).getWindowHandle(); - try (SimpleSwapchainSupport support = new SimpleSwapchainSupport(device.getPhysicalDevice(), surface, window)) { - swapchain.reload(support); - depthView = createDepthAttachment(new CommandPool(device, queues.getGraphicsQueue(), true, false)); - swapchain.createFrameBuffers(renderPass, depthView); + try (Swapchain.Builder s = swapchain.build()) { + s.addQueue(device.getPhysicalDevice().getGraphics()); + s.addQueue(device.getPhysicalDevice().getPresent()); + s.selectFormat(Image.Format.B8G8R8A8_SRGB.getVkEnum(), KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR); + s.selectMode(Swapchain.PresentMode.Mailbox); + s.selectExtentByWindow(); + s.selectImageCount(2); } + depthView = createDepthAttachment(new CommandPool(device, device.getPhysicalDevice().getGraphics(), true, false)); + swapchain.createFrameBuffers(renderPass, depthView); return true; } if (imageAcquireCode != VK_SUCCESS) { @@ -283,38 +292,6 @@ private ImageView createDepthAttachment(CommandPool pool) { return view; } - private GpuImage loadImage(String file, CommandPool transferPool) { - try (MemoryStack stack = MemoryStack.stackPush()) { - VulkanImageLoader.ImageData data = assetManager.loadAsset(VulkanImageLoader.key(file)); - GpuBuffer staging = new GpuBuffer(device, data.getBuffer().limit(), - new BufferUsageFlags().transferSrc(), new MemoryFlags().hostVisible().hostCoherent(), false); - staging.copy(stack, data.getBuffer()); - GpuImage image = new GpuImage(device, data.getWidth(), data.getHeight(), data.getFormat(), - Image.Tiling.Optimal, new ImageUsageFlags().transferDst().sampled(), - new MemoryFlags().deviceLocal()); - CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); - commands.begin(); - image.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.TransferDstOptimal); - VkBufferImageCopy.Buffer region = VkBufferImageCopy.calloc(1, stack) - .bufferOffset(0) - .bufferRowLength(0) // padding bytes - .bufferImageHeight(0); // padding bytes - region.imageSubresource().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) - .mipLevel(0) - .baseArrayLayer(0) - .layerCount(1); - region.imageOffset().set(0, 0, 0); - region.imageExtent().set(data.getWidth(), data.getHeight(), 1); - vkCmdCopyBufferToImage(commands.getBuffer(), staging.getNativeObject(), - image.getNativeObject(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, region); - image.transitionLayout(commands, Image.Layout.TransferDstOptimal, Image.Layout.ShaderReadOnlyOptimal); - commands.end(); - commands.submit(null, null, null); - transferPool.getQueue().waitIdle(); - return image; - } - } - private class Frame implements Consumer { private final CommandBuffer graphicsCommands = graphicsPool.allocateCommandBuffer(); @@ -335,14 +312,12 @@ public Frame() { @Override public void accept(Float tpf) { - if (applicationStopped) { - return; - } + + // render manager + if (applicationStopped) return; inFlight.block(5000); - if (applicationStopped) { - return; - } - Swapchain.SwapchainImage image = swapchain.acquireNextImage(VulkanHelperTest.this, imageAvailable, null, 5000); + if (applicationStopped) return; + Swapchain.PresentImage image = swapchain.acquireNextImage(VulkanHelperTest.this, imageAvailable, null, 5000); if (image == null) { return; // no image available: skip rendering this frame } @@ -350,17 +325,23 @@ public void accept(Float tpf) { renderManager.setCamera(cam, false); graphicsCommands.reset(); graphicsCommands.begin(); + + // material renderPass.begin(graphicsCommands, image.getFrameBuffer()); pipeline.bind(graphicsCommands); try (MemoryStack stack = MemoryStack.stackPush()) { + + // geometry modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y)); cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()) + + // material .fillFloatBuffer(uniforms.mapFloats(stack, 0, 16, 0), true); - vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), VK_PIPELINE_BIND_POINT_GRAPHICS, + vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), pipeline.getBindPoint().getVkEnum(), pipelineLayout.getNativeObject(), 0, stack.longs(descriptorSet.getId()), null); uniforms.unmap(); - vkCmdBindVertexBuffers(graphicsCommands.getBuffer(), 0, stack.longs(vertexBuffer.getNativeObject()), stack.longs(0)); - vkCmdBindIndexBuffer(graphicsCommands.getBuffer(), indexBuffer.getNativeObject(), 0, VK_INDEX_TYPE_UINT32); + + // viewport VkViewport.Buffer vp = VkViewport.calloc(1, stack) .x(0f).y(0f) .width(swapchain.getExtent().getX()) @@ -371,215 +352,22 @@ public void accept(Float tpf) { scissor.offset().set(0, 0); scissor.extent(swapchain.getExtent().toStruct(stack)); vkCmdSetScissor(graphicsCommands.getBuffer(), 0, scissor); - } - vkCmdDrawIndexed(graphicsCommands.getBuffer(), indexData.limit(), 1, 0, 0, 0); - vkCmdEndRenderPass(graphicsCommands.getBuffer()); - graphicsCommands.end(); - graphicsCommands.submit(imageAvailable, renderFinished, inFlight); - swapchain.present(queues.getPresentQueue(), image, renderFinished); - } - - } - - private static class SimpleQueueFamilies implements QueueFamilies { - - public static final int NUM_QUEUES = 2; - - private final Surface surface; - private Integer graphicsIndex = null; - private Integer presentIndex = null; - private Queue graphics, present; - - public SimpleQueueFamilies(Surface surface) { - this.surface = surface; - } - - @Override - public boolean populate(PhysicalDevice device, VkQueueFamilyProperties.Buffer properties) { - try (MemoryStack stack = MemoryStack.stackPush()) { - IntBuffer ibuf = stack.callocInt(1); - for (int i = 0; i < properties.limit(); i++) { - VkQueueFamilyProperties props = properties.get(i); - if (graphicsIndex == null && (props.queueFlags() & VK13.VK_QUEUE_GRAPHICS_BIT) > 0) { - graphicsIndex = i; - } else if (presentIndex == null) { - KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR( - device.getPhysicalDevice(), i, surface.getNativeObject(), ibuf); - if (ibuf.get(0) == VK13.VK_TRUE) { - presentIndex = i; - } - } - if (isComplete()) { - return true; - } - } - } - return false; - } - - @Override - public VkDeviceQueueCreateInfo.Buffer createLogicalBuffers(MemoryStack stack) { - System.out.println("selected queues: " + graphicsIndex + ", " + presentIndex); - VkDeviceQueueCreateInfo.Buffer create = VkDeviceQueueCreateInfo.calloc(NUM_QUEUES, stack); - create.get(0).sType(VK13.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) - .queueFamilyIndex(graphicsIndex) - .pQueuePriorities(stack.floats(1f)); - create.get(1).sType(VK13.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) - .queueFamilyIndex(presentIndex) - .pQueuePriorities(stack.floats(1f)); - return create; - } - - @Override - public void createQueues(LogicalDevice device) { - graphics = new Queue(device, graphicsIndex, 0); - present = new Queue(device, presentIndex, 0); - } - - @Override - public boolean isComplete() { - return graphicsIndex != null && presentIndex != null; - } - - @Override - public IntBuffer getSwapchainConcurrentBuffers(MemoryStack stack) { - if (Objects.equals(graphicsIndex, presentIndex)) { - return null; - } - IntBuffer buf = stack.mallocInt(NUM_QUEUES); - buf.put(0, graphicsIndex); - buf.put(1, presentIndex); - return buf; - } - - public Queue getGraphicsQueue() { - return graphics; - } - - public Queue getPresentQueue() { - return present; - } - - } - - private static class SimpleSwapchainSupport implements SwapchainSupport, AutoCloseable { - - private final MemoryStack stack; - private final VkSurfaceCapabilitiesKHR caps; - private final VkSurfaceFormatKHR.Buffer formats; - private final IntBuffer modes; - private final long window; - - public SimpleSwapchainSupport(PhysicalDevice device, Surface surface, long window) { - stack = MemoryStack.stackPush(); - caps = VkSurfaceCapabilitiesKHR.malloc(stack); - KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device.getPhysicalDevice(), surface.getNativeObject(), caps); - formats = enumerateBuffer(stack, n -> VkSurfaceFormatKHR.malloc(n, stack), - (count, buffer) -> KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR( - device.getPhysicalDevice(), surface.getNativeObject(), count, buffer)); - modes = enumerateBuffer(stack, stack::mallocInt, - (count, buffer) -> KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR( - device.getPhysicalDevice(), surface.getNativeObject(), count, buffer)); - this.window = window; - } - - @Override - public void close() { - stack.pop(); - } - @Override - public VkSurfaceFormatKHR selectFormat() { - return formats.stream() - .filter(f -> f.format() == VK_FORMAT_B8G8R8A8_SRGB) - .filter(f -> f.colorSpace() == KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) - .findAny().orElse(formats.get(0)); - } + // mesh + vkCmdBindVertexBuffers(graphicsCommands.getBuffer(), 0, stack.longs(vertexBuffer.getNativeObject()), stack.longs(0)); + vkCmdBindIndexBuffer(graphicsCommands.getBuffer(), indexBuffer.getNativeObject(), 0, VK_INDEX_TYPE_UINT32); + vkCmdDrawIndexed(graphicsCommands.getBuffer(), indexData.limit(), 1, 0, 0, 0); - @Override - public int selectMode() { - for (int i = 0; i < modes.limit(); i++) { - if (modes.get(i) == KHRSurface.VK_PRESENT_MODE_MAILBOX_KHR) { - return modes.get(i); - } } - return KHRSurface.VK_PRESENT_MODE_FIFO_KHR; - } - @Override - public VkExtent2D selectExtent() { - if (caps.currentExtent().width() != UINT32_MAX) { - return caps.currentExtent(); - } - IntBuffer width = stack.mallocInt(1); - IntBuffer height = stack.mallocInt(1); - GLFW.glfwGetFramebufferSize(window, width, height); - VkExtent2D ext = VkExtent2D.malloc(stack); - ext.width(Math.min(Math.max(width.get(0), caps.minImageExtent().width()), caps.maxImageExtent().width())); - ext.height(Math.min(Math.max(width.get(0), caps.minImageExtent().height()), caps.maxImageExtent().height())); - return ext; - } + // material + renderPass.end(graphicsCommands); - @Override - public int selectImageCount() { - int n = caps.minImageCount() + 1; - return caps.minImageCount() > 0 ? Math.min(n, caps.minImageCount()) : n; - } - - @Override - public boolean isSupported() { - return formats != null && modes != null; - } - - public VkSurfaceCapabilitiesKHR getCaps() { - return caps; - } - - public VkSurfaceFormatKHR.Buffer getFormats() { - return formats; - } - - public IntBuffer getModes() { - return modes; - } - - } - - private static class VulkanDebugCallback extends VkDebugUtilsMessengerCallbackEXT { - - private final Level exceptionThreshold; - - public VulkanDebugCallback(Level exceptionThreshold) { - this.exceptionThreshold = exceptionThreshold; - } - - @Override - public int invoke(int messageSeverity, int messageTypes, long pCallbackData, long pUserData) { - try (VkDebugUtilsMessengerCallbackDataEXT data = VkDebugUtilsMessengerCallbackDataEXT.create(pCallbackData)) { - //LOG.log(getLoggingLevel(messageSeverity), data.pMessageString()); - Level lvl = getLoggingLevel(messageSeverity); - if (exceptionThreshold != null && lvl.intValue() >= exceptionThreshold.intValue()) { - throw new RuntimeException(lvl.getName() + ": " + data.pMessageString()); - } else { - System.err.println(lvl.getName() + " " + data.pMessageString()); - } - } - return VK_FALSE; // always return false, true is only really used for testing validation layers - } + // render manager + graphicsCommands.end(); + graphicsCommands.submit(imageAvailable, renderFinished, inFlight); + swapchain.present(device.getPhysicalDevice().getPresent(), image, renderFinished); - public Level getLoggingLevel(int messageSeverity) { - switch (messageSeverity) { - case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: - return Level.SEVERE; - case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: - return Level.WARNING; - case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: - return Level.INFO; - case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: - return Level.FINE; - default: throw new UnsupportedOperationException("Unsupported severity bit: " - + Integer.numberOfTrailingZeros(Integer.highestOneBit(messageSeverity))); - } } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Attachment.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Attachment.java deleted file mode 100644 index 73689892db..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Attachment.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.jme3.vulkan; - -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; -import org.lwjgl.vulkan.VkAttachmentDescription; -import org.lwjgl.vulkan.VkAttachmentReference; - -import static org.lwjgl.vulkan.VK10.*; - -public class Attachment implements Native { - - private final NativeReference ref; - private VkAttachmentDescription description; - private VkAttachmentReference reference; - - public Attachment(int format, int samples, int finalLayout) { - description = VkAttachmentDescription.create() - .format(format) - .samples(samples) - .loadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) - .storeOp(VK_ATTACHMENT_STORE_OP_STORE) - .stencilLoadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) - .stencilLoadOp(VK_ATTACHMENT_STORE_OP_STORE) - .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) - .finalLayout(finalLayout); - reference = VkAttachmentReference.create(); - ref = Native.get().register(this); - } - - @Override - public VkAttachmentDescription getNativeObject() { - return description; - } - - @Override - public Runnable createNativeDestroyer() { - return description::free; - } - - @Override - public void prematureNativeDestruction() { - description = null; - } - - @Override - public NativeReference getNativeReference() { - return null; - } - - public VkAttachmentDescription getDescription() { - return description; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java index 042f3bb500..1062f4038e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java @@ -13,12 +13,12 @@ public class CommandPool implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final Queue queue; private final NativeReference ref; private long id; - public CommandPool(LogicalDevice device, Queue queue, boolean isTransient, boolean reset) { + public CommandPool(LogicalDevice device, Queue queue, boolean isTransient, boolean reset) { this.device = device; this.queue = queue; try (MemoryStack stack = MemoryStack.stackPush()) { @@ -65,7 +65,7 @@ public OneTimeCommandBuffer allocateOneTimeCommandBuffer() { return new OneTimeCommandBuffer(this); } - public LogicalDevice getDevice() { + public LogicalDevice getDevice() { return device; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java index 3e4c945e37..567787f769 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java @@ -14,15 +14,15 @@ public class Fence implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private long id; - public Fence(LogicalDevice device) { + public Fence(LogicalDevice device) { this(device, false); } - public Fence(LogicalDevice device, boolean signal) { + public Fence(LogicalDevice device, boolean signal) { this.device = device; try (MemoryStack stack = MemoryStack.stackPush()) { VkFenceCreateInfo create = VkFenceCreateInfo.calloc(stack) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java deleted file mode 100644 index f9567c458d..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/GraphicsPipeline.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.jme3.vulkan; - -import com.jme3.material.RenderState; -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; -import com.jme3.vulkan.devices.LogicalDevice; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.*; - -import java.nio.LongBuffer; - -import static com.jme3.renderer.vulkan.VulkanUtils.check; -import static org.lwjgl.vulkan.VK10.*; -import static org.lwjgl.vulkan.VK10.VK_NULL_HANDLE; - -public class GraphicsPipeline implements Native { - - private final LogicalDevice device; - private final NativeReference ref; - private long id; - - public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass compat, RenderState state, ShaderModule vert, ShaderModule frag, MeshDescription mesh) { - this.device = device; - try (MemoryStack stack = MemoryStack.stackPush()) { - VkPipelineShaderStageCreateInfo.Buffer stages = VkPipelineShaderStageCreateInfo.calloc(2, stack); - stages.get(0).sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) - .stage(VK_SHADER_STAGE_VERTEX_BIT) - .module(vert.getNativeObject()) - .pName(stack.UTF8(vert.getEntryPoint())); // function initially called in the shader - stages.get(1).sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) - .stage(VK_SHADER_STAGE_FRAGMENT_BIT) - .module(frag.getNativeObject()) - .pName(stack.UTF8(frag.getEntryPoint())); - VkPipelineDynamicStateCreateInfo dynamic = VkPipelineDynamicStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO) - .pDynamicStates(stack.ints(VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR)); - VkPipelineVertexInputStateCreateInfo vertInput = VkPipelineVertexInputStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO) - .pVertexBindingDescriptions(mesh.getBindings()) - .pVertexAttributeDescriptions(mesh.getAttributes()); - VkPipelineInputAssemblyStateCreateInfo assembly = VkPipelineInputAssemblyStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO) - .topology(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST) - .primitiveRestartEnable(false); - VkViewport.Buffer viewport = VkViewport.calloc(1, stack) - .x(0f).y(0f) - .width(1024).height(1024) // todo: ensure passing random values here is acceptable - .minDepth(0f).maxDepth(1f); - VkRect2D.Buffer scissor = VkRect2D.calloc(1, stack); - scissor.offset().set(0, 0); - scissor.extent().width(1024).height(1024); // todo: ensure passing random values here is acceptable - VkPipelineViewportStateCreateInfo vpState = VkPipelineViewportStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO) - .pViewports(viewport) - .pScissors(scissor); - VkPipelineDepthStencilStateCreateInfo depthStencil = VkPipelineDepthStencilStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO) - .depthTestEnable(state.isDepthTest()) - .depthWriteEnable(state.isDepthWrite()) - .depthCompareOp(RenderStateToVulkan.depthFunc(state.getDepthFunc())) - .depthBoundsTestEnable(false) - .stencilTestEnable(false); - VkPipelineRasterizationStateCreateInfo raster = VkPipelineRasterizationStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO) - .depthClampEnable(false) - .rasterizerDiscardEnable(false) - .polygonMode(VK_POLYGON_MODE_FILL) - .lineWidth(1f) - .cullMode(RenderStateToVulkan.faceCull(state.getFaceCullMode())) - .frontFace(VK_FRONT_FACE_CLOCKWISE) - .cullMode(VK_CULL_MODE_NONE) - .depthBiasEnable(false); - VkPipelineMultisampleStateCreateInfo multisample = VkPipelineMultisampleStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO) - .sampleShadingEnable(false) - .rasterizationSamples(VK_SAMPLE_COUNT_1_BIT); - // todo: configure depth and stencil buffers - VkPipelineColorBlendAttachmentState.Buffer blendAtt = VkPipelineColorBlendAttachmentState.calloc(1, stack) - .colorWriteMask(VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT) - .blendEnable(state.getBlendMode() != RenderState.BlendMode.Off) - .srcColorBlendFactor(VK_BLEND_FACTOR_ONE) // todo: control with render state - .dstColorBlendFactor(VK_BLEND_FACTOR_ZERO) - .colorBlendOp(RenderStateToVulkan.blendEquation(state.getBlendEquation())) - .srcAlphaBlendFactor(VK_BLEND_FACTOR_ONE) - .srcAlphaBlendFactor(VK_BLEND_FACTOR_ZERO) - .alphaBlendOp(RenderStateToVulkan.blendEquationAlpha(state.getBlendEquationAlpha(), state.getBlendEquation())); - VkPipelineColorBlendStateCreateInfo blend = VkPipelineColorBlendStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO) - .logicOpEnable(false) - .logicOp(VK_LOGIC_OP_COPY) - .pAttachments(blendAtt); - VkGraphicsPipelineCreateInfo.Buffer pipeline = VkGraphicsPipelineCreateInfo.calloc(1, stack) - .sType(VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO) - .stageCount(2) - .pStages(stages) - .pVertexInputState(vertInput) - .pInputAssemblyState(assembly) - .pViewportState(vpState) - .pDepthStencilState(depthStencil) - .pRasterizationState(raster) - .pMultisampleState(multisample) - .pColorBlendState(blend) - .pDynamicState(dynamic) - .layout(layout.getNativeObject()) - .renderPass(compat.getNativeObject()) - .subpass(0) - .basePipelineHandle(VK_NULL_HANDLE) - .basePipelineIndex(-1); - System.out.println("render pass: " + compat.getNativeObject()); - LongBuffer idBuf = stack.mallocLong(1); - check(vkCreateGraphicsPipelines(device.getNativeObject(), VK_NULL_HANDLE, pipeline, null, idBuf), - "Failed to create graphics pipeline"); - id = idBuf.get(0); - } - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - } - - @Override - public Long getNativeObject() { - return id; - } - - @Override - public Runnable createNativeDestroyer() { - return () -> { - vkDestroyPipeline(device.getNativeObject(), id, null); - }; - } - - @Override - public void prematureNativeDestruction() { - id = VK_NULL_HANDLE; - } - - @Override - public NativeReference getNativeReference() { - return ref; - } - - public void bind(CommandBuffer cmd) { - vkCmdBindPipeline(cmd.getBuffer(), VK_PIPELINE_BIND_POINT_GRAPHICS, id); - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java index a0df1e72ea..e1a90bc3e7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java @@ -1,68 +1,13 @@ package com.jme3.vulkan; -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; -import static org.lwjgl.vulkan.VK10.*; +public interface MeshDescription { -public class MeshDescription implements Native { + VkVertexInputBindingDescription.Buffer getBindings(MemoryStack stack); - private final VkVertexInputBindingDescription.Buffer bindings; - private final VkVertexInputAttributeDescription.Buffer attributes; - private final NativeReference ref; - - public MeshDescription() { - // for each vertex buffer on the mesh - bindings = VkVertexInputBindingDescription.calloc(1) - .binding(0) - .stride(Float.BYTES * 8) // bytes per vertex - .inputRate(VK_VERTEX_INPUT_RATE_VERTEX); - // for each attribute in each vertex buffer - attributes = VkVertexInputAttributeDescription.calloc(3); - attributes.get(0).binding(0) - .location(0) - .format(VK_FORMAT_R32G32B32_SFLOAT) - .offset(0); - attributes.get(1).binding(0) - .location(1) - .format(VK_FORMAT_R32G32B32_SFLOAT) - .offset(Float.BYTES * 3); - attributes.get(2).binding(0) - .location(2) - .format(VK_FORMAT_R32G32_SFLOAT) - .offset(Float.BYTES * 6); - ref = Native.get().register(this); - } - - @Override - public Object getNativeObject() { - return null; - } - - @Override - public Runnable createNativeDestroyer() { - return () -> { - bindings.free(); - attributes.free(); - }; - } - - @Override - public void prematureNativeDestruction() {} - - @Override - public NativeReference getNativeReference() { - return ref; - } - - public VkVertexInputBindingDescription.Buffer getBindings() { - return bindings; - } - - public VkVertexInputAttributeDescription.Buffer getAttributes() { - return attributes; - } + VkVertexInputAttributeDescription.Buffer getAttributes(MemoryStack stack); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java index bc1b0c581c..d91aedf86a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java @@ -15,12 +15,12 @@ public class PipelineLayout implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private final DescriptorSetLayout[] layouts; private final long id; - public PipelineLayout(LogicalDevice device, DescriptorSetLayout... layouts) { + public PipelineLayout(LogicalDevice device, DescriptorSetLayout... layouts) { this.device = device; this.layouts = layouts; try (MemoryStack stack = MemoryStack.stackPush()) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java index 33ff537bc1..6571dc530f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java @@ -1,7 +1,7 @@ package com.jme3.vulkan; -import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.vulkan.devices.LogicalDevice; +import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkQueue; import org.lwjgl.vulkan.VkSubmitInfo; @@ -20,9 +20,9 @@ public Queue(LogicalDevice device, int familyIndex, int queueIndex) { this.familyIndex = familyIndex; this.queueIndex = queueIndex; try (MemoryStack stack = MemoryStack.stackPush()) { - queue = new VkQueue(VulkanUtils.getPointer(stack, - ptr -> vkGetDeviceQueue(device.getNativeObject(), familyIndex, queueIndex, ptr)), - device.getNativeObject()); + PointerBuffer ptr = stack.mallocPointer(1); + vkGetDeviceQueue(device.getNativeObject(), familyIndex, queueIndex, ptr); + queue = new VkQueue(ptr.get(0), device.getNativeObject()); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java deleted file mode 100644 index c35050fd49..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPass.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.jme3.vulkan; - -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; -import com.jme3.vulkan.devices.LogicalDevice; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VkClearValue; -import org.lwjgl.vulkan.VkRenderPassBeginInfo; -import org.lwjgl.vulkan.VkRenderPassCreateInfo; - -import java.nio.LongBuffer; - -import static com.jme3.renderer.vulkan.VulkanUtils.*; -import static org.lwjgl.vulkan.VK10.*; - -public class RenderPass implements Native { - - private final LogicalDevice device; - private final NativeReference ref; - private long id; - - public RenderPass(LogicalDevice device, VkRenderPassCreateInfo create) { - this.device = device; - try (MemoryStack stack = MemoryStack.stackPush()) { - LongBuffer idBuf = stack.mallocLong(1); - check(vkCreateRenderPass(device.getNativeObject(), create, null, idBuf), "Failed to create render pass."); - id = idBuf.get(0); - } - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - } - - @Override - public Long getNativeObject() { - return id; - } - - @Override - public Runnable createNativeDestroyer() { - return () -> { - vkDestroyRenderPass(device.getNativeObject(), id, null); - id = VK_NULL_HANDLE; - }; - } - - @Override - public void prematureNativeDestruction() {} - - @Override - public NativeReference getNativeReference() { - return ref; - } - - public void begin(CommandBuffer cmd, FrameBuffer fbo) { - try (MemoryStack stack = MemoryStack.stackPush()) { - VkClearValue.Buffer clear = VkClearValue.calloc(2, stack); - clear.get(0).color().float32(stack.floats(0f, 0f, 0f, 1f)); - clear.get(1).depthStencil().set(1.0f, 0); - VkRenderPassBeginInfo begin = VkRenderPassBeginInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO) - .renderPass(id) - .framebuffer(fbo.getNativeObject()) - .clearValueCount(clear.limit()) - .pClearValues(clear); - begin.renderArea().offset().set(0, 0); - begin.renderArea().extent().width(fbo.getWidth()).height(fbo.getHeight()); - vkCmdBeginRenderPass(cmd.getBuffer(), begin, VK_SUBPASS_CONTENTS_INLINE); - } - } - - public LogicalDevice getDevice() { - return device; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java deleted file mode 100644 index 2c95d8908f..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderPassBuilder.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.jme3.vulkan; - -import com.jme3.renderer.vulkan.VulkanUtils; -import com.jme3.vulkan.devices.LogicalDevice; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.*; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; - -import static org.lwjgl.vulkan.VK10.*; - -public class RenderPassBuilder implements AutoCloseable { - - private final MemoryStack stack = MemoryStack.stackPush(); - private final List attachments = new ArrayList<>(); - private final List subpasses = new ArrayList<>(); - private final List dependencies = new ArrayList<>(); - - @Override - public void close() { - attachments.clear(); - subpasses.clear(); - dependencies.clear(); - stack.pop(); - } - - public RenderPass build(LogicalDevice device) { - VkAttachmentDescription.Buffer attBuf = VulkanUtils.accumulate(attachments, n -> VkAttachmentDescription.malloc(n, stack)); - VkSubpassDescription.Buffer subBuf = VulkanUtils.accumulate(subpasses, n -> VkSubpassDescription.malloc(n, stack)); - VkSubpassDependency.Buffer depBuf = VulkanUtils.accumulate(dependencies, n -> VkSubpassDependency.malloc(n, stack)); - VkRenderPassCreateInfo create = VkRenderPassCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO) - .pAttachments(attBuf) - .pSubpasses(subBuf) - .pDependencies(depBuf); - return new RenderPass(device, create); - } - - public int createAttachment(Consumer config) { - VkAttachmentDescription a = VkAttachmentDescription.calloc(stack); - config.accept(a); - return addAttachment(a); - } - - public int createSubpass(Consumer config) { - VkSubpassDescription s = VkSubpassDescription.calloc(stack); - config.accept(s); - return addSubpass(s); - } - - public VkSubpassDependency createDependency() { - return addDependency(VkSubpassDependency.calloc(stack)); - } - - public int addAttachment(VkAttachmentDescription attachment) { - attachments.add(attachment); - return attachments.size() - 1; - } - - public int addSubpass(VkSubpassDescription subpass) { - subpasses.add(subpass); - return subpasses.size() - 1; - } - - public VkSubpassDependency addDependency(VkSubpassDependency dependency) { - dependencies.add(dependency); - return dependency; - } - - public MemoryStack getStack() { - return stack; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java index dd8792fc24..57f50196f6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java @@ -14,11 +14,11 @@ public class Semaphore implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private long id; - public Semaphore(LogicalDevice device) { + public Semaphore(LogicalDevice device) { this.device = device; try (MemoryStack stack = MemoryStack.stackPush()) { VkSemaphoreCreateInfo create = VkSemaphoreCreateInfo.calloc(stack) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java index 9214cff188..8b17e70813 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java @@ -14,12 +14,12 @@ public class ShaderModule implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private final String entryPoint; private long id; - public ShaderModule(LogicalDevice device, ByteBuffer code, String entryPoint) { + public ShaderModule(LogicalDevice device, ByteBuffer code, String entryPoint) { this.device = device; this.entryPoint = entryPoint; try (MemoryStack stack = MemoryStack.stackPush()) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainSupport.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainSupport.java deleted file mode 100644 index 33275aa453..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainSupport.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.jme3.vulkan; - -import org.lwjgl.vulkan.VkExtent2D; -import org.lwjgl.vulkan.VkSurfaceFormatKHR; - -public interface SwapchainSupport { - - VkSurfaceFormatKHR selectFormat(); - - VkExtent2D selectExtent(); - - int selectMode(); - - int selectImageCount(); - - boolean isSupported(); - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanLogger.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanLogger.java index 611ea2fdcd..a11fed7644 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanLogger.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanLogger.java @@ -54,10 +54,9 @@ public VulkanLogger(VulkanInstance instance, Level exceptionThreshold) { public int message(int messageSeverity, int messageTypes, long pCallbackData, long pUserData) { VkDebugUtilsMessengerCallbackDataEXT data = VkDebugUtilsMessengerCallbackDataEXT.create(pCallbackData); Level lvl = getLoggingLevel(messageSeverity); + System.err.println(lvl.getName() + " " + data.pMessageString()); if (exceptionThreshold != null && lvl.intValue() >= exceptionThreshold.intValue()) { throw new RuntimeException(lvl.getName() + ": " + data.pMessageString()); - } else { - System.err.println(lvl.getName() + " " + data.pMessageString()); } return VK_FALSE; // always return false, true is only really used for testing validation layers } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index 25f5deacb1..f68f1c2b3e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -21,13 +21,13 @@ public class GpuBuffer implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private final int size; private final long id; protected final MemoryRegion memory; - public GpuBuffer(LogicalDevice device, int size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + public GpuBuffer(LogicalDevice device, int size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { this.device = device; this.size = size; try (MemoryStack stack = MemoryStack.stackPush()) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java index 4b33cd7935..eedabe8441 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java @@ -16,13 +16,13 @@ public class MemoryRegion implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private final long id; private final long size; private final AtomicBoolean mapped = new AtomicBoolean(false); - public MemoryRegion(LogicalDevice device, long size, int typeIndex) { + public MemoryRegion(LogicalDevice device, long size, int typeIndex) { this.device = device; this.size = size; try (MemoryStack stack = MemoryStack.stackPush()) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java index 188b780fed..101aee971b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java @@ -1,10 +1,11 @@ package com.jme3.vulkan.descriptors; import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkDescriptorBufferInfo; import org.lwjgl.vulkan.VkWriteDescriptorSet; +import static org.lwjgl.vulkan.VK10.*; + public class BufferSetWriter extends DescriptorSetWriter { private final BufferDescriptor[] descriptors; @@ -26,7 +27,11 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { } public static BufferSetWriter uniformBuffers(int binding, int arrayElement, BufferDescriptor... descriptors) { - return new BufferSetWriter(VK10.VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, binding, arrayElement, descriptors); + return new BufferSetWriter(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, binding, arrayElement, descriptors); + } + + public static BufferSetWriter storageBuffers(int binding, int arrayElement, BufferDescriptor... descriptors) { + return new BufferSetWriter(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, binding, arrayElement, descriptors); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java index 22a17be89c..79de4a574e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java @@ -14,11 +14,11 @@ public class DescriptorPool implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private final long id; - public DescriptorPool(LogicalDevice device, int sets, PoolSize... sizes) { + public DescriptorPool(LogicalDevice device, int sets, PoolSize... sizes) { this.device = device; try (MemoryStack stack = MemoryStack.stackPush()) { VkDescriptorPoolCreateInfo create = VkDescriptorPoolCreateInfo.calloc(stack) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java index 4ac9ed11f9..d68efa483e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -8,12 +8,12 @@ public class DescriptorSet { - private final LogicalDevice device; + private final LogicalDevice device; private final DescriptorPool pool; private final DescriptorSetLayout layout; private final long id; - public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSetLayout layout, long id) { + public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSetLayout layout, long id) { this.device = device; this.pool = pool; this.layout = layout; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java index 5a3ad95f3c..321bb5f298 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java @@ -14,12 +14,12 @@ public class DescriptorSetLayout implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private final SetLayoutBinding[] bindings; private final long id; - public DescriptorSetLayout(LogicalDevice device, SetLayoutBinding... bindings) { + public DescriptorSetLayout(LogicalDevice device, SetLayoutBinding... bindings) { this.device = device; this.bindings = bindings; try (MemoryStack stack = MemoryStack.stackPush()) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java index e31b5f1afe..36838d5a88 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java @@ -27,6 +27,10 @@ public static PoolSize uniformBuffers(int size) { return new PoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, size); } + public static PoolSize storageBuffers(int size) { + return new PoolSize(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, size); + } + public static PoolSize combinedImageSamplers(int size) { return new PoolSize(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, size); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java index dbb20001dc..520e153467 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java @@ -1,8 +1,9 @@ package com.jme3.vulkan.descriptors; -import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkDescriptorSetLayoutBinding; +import static org.lwjgl.vulkan.VK10.*; + public class SetLayoutBinding { private final int type, binding, descriptors, stages; @@ -40,11 +41,15 @@ public int getStages() { } public static SetLayoutBinding uniformBuffer(int binding, int descriptors, int stages) { - return new SetLayoutBinding(VK10.VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, binding, descriptors, stages); + return new SetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, binding, descriptors, stages); + } + + public static SetLayoutBinding storageBuffer(int binding, int descriptors, int stages) { + return new SetLayoutBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, binding, descriptors, stages); } public static SetLayoutBinding combinedImageSampler(int binding, int descriptors, int stages) { - return new SetLayoutBinding(VK10.VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, binding, descriptors, stages); + return new SetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, binding, descriptors, stages); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java index b1beb5b95a..a59a15b69c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java @@ -1,6 +1,6 @@ package com.jme3.vulkan.devices; -import com.jme3.vulkan.Surface; +import com.jme3.vulkan.surface.Surface; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkExtensionProperties; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SimplePhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java similarity index 64% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/SimplePhysicalDevice.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java index cbcec8b492..e13a30fbce 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SimplePhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java @@ -1,22 +1,24 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.devices; -import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.devices.PhysicalDevice; +import com.jme3.vulkan.Queue; +import com.jme3.vulkan.VulkanInstance; +import com.jme3.vulkan.surface.Surface; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.KHRSurface; -import org.lwjgl.vulkan.VK13; import org.lwjgl.vulkan.VkDeviceQueueCreateInfo; import org.lwjgl.vulkan.VkQueueFamilyProperties; import java.nio.IntBuffer; -public class SimplePhysicalDevice extends PhysicalDevice { +import static org.lwjgl.vulkan.VK10.*; + +public class GeneralPhysicalDevice extends PhysicalDevice { private final Surface surface; private Integer graphicsIndex, presentIndex; private Queue graphics, present; - public SimplePhysicalDevice(VulkanInstance instance, Surface surface, long id) { + public GeneralPhysicalDevice(VulkanInstance instance, Surface surface, long id) { super(instance, id); this.surface = surface; } @@ -28,30 +30,31 @@ protected boolean populateQueueFamilyIndices() { IntBuffer ibuf = stack.callocInt(1); for (int i = 0; i < properties.limit(); i++) { VkQueueFamilyProperties props = properties.get(i); - if (graphicsIndex == null && (props.queueFlags() & VK13.VK_QUEUE_GRAPHICS_BIT) > 0) { + int flags = props.queueFlags(); + if (graphicsIndex == null && (flags & VK_QUEUE_GRAPHICS_BIT) > 0) { graphicsIndex = i; } else if (presentIndex == null) { - KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR( - getPhysicalDevice(), i, surface.getNativeObject(), ibuf); - if (ibuf.get(0) == VK13.VK_TRUE) { + KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR(getPhysicalDevice(), + i, surface.getNativeObject(), ibuf); + if (ibuf.get(0) == VK_TRUE) { presentIndex = i; } } - if (graphicsIndex != null && presentIndex != null) { + if (allQueuesAvailable()) { return true; } } } - return false; + return allQueuesAvailable(); } @Override protected VkDeviceQueueCreateInfo.Buffer createQueueFamilyInfo(MemoryStack stack) { - VkDeviceQueueCreateInfo.Buffer create = VkDeviceQueueCreateInfo.calloc(2, stack); // one element for each queue - create.get(0).sType(VK13.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) + VkDeviceQueueCreateInfo.Buffer create = VkDeviceQueueCreateInfo.calloc(2, stack); + create.get(0).sType(VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) .queueFamilyIndex(graphicsIndex) .pQueuePriorities(stack.floats(1f)); - create.get(1).sType(VK13.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) + create.get(1).sType(VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) .queueFamilyIndex(presentIndex) .pQueuePriorities(stack.floats(1f)); return create; @@ -63,6 +66,10 @@ protected void createQueues(LogicalDevice device) { present = new Queue(device, presentIndex, 0); } + public boolean allQueuesAvailable() { + return graphicsIndex != null && presentIndex != null; + } + public Integer getGraphicsIndex() { return graphicsIndex; } @@ -71,6 +78,10 @@ public Integer getPresentIndex() { return presentIndex; } + public Integer getComputeIndex() { + return graphicsIndex; + } + public Queue getGraphics() { return graphics; } @@ -79,4 +90,8 @@ public Queue getPresent() { return present; } + public Queue getCompute() { + return graphics; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java index 765a092879..f399405995 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java @@ -1,10 +1,10 @@ package com.jme3.vulkan.devices; import com.jme3.util.natives.Native; -import com.jme3.vulkan.Surface; import com.jme3.vulkan.VulkanInstance; import com.jme3.vulkan.VulkanObject; import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; import java.util.*; @@ -112,39 +112,46 @@ private void findSuitablePhysicalDevice() { physical = null; float topWeight = Float.NEGATIVE_INFINITY; deviceLoop: for (T d : iteratePointers(devices, deviceFactory::apply)) { - float deviceWeight = 0f; - // extensions - VkExtensionProperties.Buffer supportedExts = d.getExtensionProperties(stack); - Set extSet = new HashSet<>(); - supportedExts.stream().forEach(e -> extSet.add(e.extensionNameString())); - for (DeviceExtension ext : extensions) { - Float weight = ext.evaluate(extSet); - if (weight == null) { - continue deviceLoop; - } - deviceWeight += weight; + if (!d.populateQueueFamilyIndices()) { + continue; } - // features - VkPhysicalDeviceFeatures ftrs = d.getFeatures(stack); - for (DeviceFeature f : features) { - Float weight = f.evaluateFeatureSupport(ftrs); - if (DeviceWeights.isRejection(weight)) { - continue deviceLoop; + // attempting to evaluate all devices with only one memory stack + // results in an out of memory error + try (MemoryStack stack = MemoryStack.stackPush()) { + float deviceWeight = 0f; + // extensions + VkExtensionProperties.Buffer supportedExts = d.getExtensionProperties(stack); + Set extSet = new HashSet<>(); + supportedExts.stream().forEach(e -> extSet.add(e.extensionNameString())); + for (DeviceExtension ext : extensions) { + Float weight = ext.evaluate(extSet); + if (weight == null) { + continue deviceLoop; + } + deviceWeight += weight; } - deviceWeight += weight; - } - // miscellaneous filters - for (DeviceFilter f : filters) { - Float weight = f.evaluateDevice(d); - if (weight == null) { - continue deviceLoop; + // features + VkPhysicalDeviceFeatures ftrs = d.getFeatures(stack); + for (DeviceFeature f : features) { + Float weight = f.evaluateFeatureSupport(ftrs); + if (weight == null) { + continue deviceLoop; + } + deviceWeight += weight; + } + // miscellaneous filters + for (DeviceFilter f : filters) { + Float weight = f.evaluateDevice(d); + if (weight == null) { + continue deviceLoop; + } + deviceWeight += weight; + } + // compare + if (deviceWeight > topWeight) { + physical = d; + topWeight = deviceWeight; } - deviceWeight += weight; - } - // compare - if (deviceWeight > topWeight) { - physical = d; - topWeight = deviceWeight; } } if (physical == null) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java index 2aceb6dea8..0cbdfb002c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java @@ -1,18 +1,13 @@ package com.jme3.vulkan.devices; -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; -import com.jme3.vulkan.Surface; +import com.jme3.vulkan.surface.Surface; import com.jme3.vulkan.VulkanInstance; import com.jme3.vulkan.images.Image; -import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; import java.nio.ByteBuffer; import java.nio.IntBuffer; -import java.util.Collection; -import java.util.function.Function; import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java index 5306f7453c..dfa3239f16 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -20,7 +20,7 @@ public class GpuImage implements Image { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private final long id; private final MemoryRegion memory; @@ -28,11 +28,11 @@ public class GpuImage implements Image { private final Image.Format format; private final Image.Tiling tiling; - public GpuImage(LogicalDevice device, int width, int height, Image.Format format, Image.Tiling tiling, ImageUsageFlags usage, MemoryFlags mem) { + public GpuImage(LogicalDevice device, int width, int height, Image.Format format, Image.Tiling tiling, ImageUsageFlags usage, MemoryFlags mem) { this(device, VK_IMAGE_TYPE_2D, width, height, 1, format, tiling, usage, mem); } - public GpuImage(LogicalDevice device, int type, int width, int height, int depth, Image.Format format, Image.Tiling tiling, ImageUsageFlags usage, MemoryFlags mem) { + public GpuImage(LogicalDevice device, int type, int width, int height, int depth, Image.Format format, Image.Tiling tiling, ImageUsageFlags usage, MemoryFlags mem) { this.device = device; this.type = type; this.width = width; @@ -73,7 +73,7 @@ public ImageView createView(VkImageViewCreateInfo create) { } @Override - public LogicalDevice getDevice() { + public LogicalDevice getDevice() { return device; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java index f55023dea1..15785a63c9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java @@ -129,9 +129,44 @@ public int getVkEnum() { } + enum Load { + + Clear(VK_ATTACHMENT_LOAD_OP_CLEAR), + Load(VK_ATTACHMENT_LOAD_OP_LOAD), + DontCare(VK_ATTACHMENT_LOAD_OP_DONT_CARE); + + private final int vkEnum; + + Load(int vkEnum) { + this.vkEnum = vkEnum; + } + + public int getVkEnum() { + return vkEnum; + } + + } + + enum Store { + + Store(VK_ATTACHMENT_STORE_OP_STORE), + DontCare(VK_ATTACHMENT_STORE_OP_DONT_CARE); + + private final int vkEnum; + + Store(int vkEnum) { + this.vkEnum = vkEnum; + } + + public int getVkEnum() { + return vkEnum; + } + + } + ImageView createView(VkImageViewCreateInfo create); - LogicalDevice getDevice(); + LogicalDevice getDevice(); int getType(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java index b710f78d85..7d5a379418 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java @@ -13,11 +13,11 @@ public class Sampler implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private final long id; - public Sampler(LogicalDevice device, int min, int mag, int edgeMode, int mipmapMode) { + public Sampler(LogicalDevice device, int min, int mag, int edgeMode, int mipmapMode) { this.device = device; try (MemoryStack stack = MemoryStack.stackPush()) { VkPhysicalDeviceProperties props = device.getPhysicalDevice().getProperties(stack); @@ -57,13 +57,11 @@ public Runnable createNativeDestroyer() { } @Override - public void prematureNativeDestruction() { - - } + public void prematureNativeDestruction() {} @Override public NativeReference getNativeReference() { - return null; + return ref; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index 7e579bcf24..153596eca9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -2,6 +2,14 @@ import com.jme3.asset.*; import com.jme3.util.BufferUtils; +import com.jme3.vulkan.CommandBuffer; +import com.jme3.vulkan.CommandPool; +import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.flags.BufferUsageFlags; +import com.jme3.vulkan.flags.ImageUsageFlags; +import com.jme3.vulkan.flags.MemoryFlags; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkBufferImageCopy; import javax.imageio.ImageIO; import java.awt.*; @@ -23,14 +31,17 @@ public Object load(AssetInfo info) throws IOException { if (ImageIO.getImageReadersBySuffix(info.getKey().getExtension()) != null) { boolean flip = ((Key)info.getKey()).isFlip(); try (InputStream stream = info.openStream(); BufferedInputStream bin = new BufferedInputStream(stream)) { - ImageData img = load(bin, flip); - if (img == null){ + ImageData data = load(bin, flip); + if (data == null) { throw new AssetLoadException("The given image cannot be loaded " + info.getKey()); } - return img; + if (info.getKey() instanceof ImageKey) { + return loadGpuImage(((ImageKey)info.getKey()).getPool(), data); + } + return data; } } - throw new AssetLoadException("Image extension " + info.getKey().getExtension() + " is not supported"); + throw new AssetLoadException("Image extension " + info.getKey().getExtension() + " is not supported."); } public ImageData load(InputStream in, boolean flip) throws IOException { @@ -137,11 +148,46 @@ private void flipImage(byte[] img, int width, int height, int bpp) { } } - public static Key key(String name) { - return new Key(name); + private GpuImage loadGpuImage(CommandPool transferPool, ImageData data) { + try (MemoryStack stack = MemoryStack.stackPush()) { + GpuBuffer staging = new GpuBuffer(transferPool.getDevice(), data.getBuffer().limit(), + new BufferUsageFlags().transferSrc(), new MemoryFlags().hostVisible().hostCoherent(), false); + staging.copy(stack, data.getBuffer()); + GpuImage image = new GpuImage(transferPool.getDevice(), data.getWidth(), data.getHeight(), data.getFormat(), + Image.Tiling.Optimal, new ImageUsageFlags().transferDst().sampled(), + new MemoryFlags().deviceLocal()); + CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); + commands.begin(); + image.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.TransferDstOptimal); + VkBufferImageCopy.Buffer region = VkBufferImageCopy.calloc(1, stack) + .bufferOffset(0) + .bufferRowLength(0) // padding bytes + .bufferImageHeight(0); // padding bytes + region.imageSubresource().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + .mipLevel(0) + .baseArrayLayer(0) + .layerCount(1); + region.imageOffset().set(0, 0, 0); + region.imageExtent().set(data.getWidth(), data.getHeight(), 1); + vkCmdCopyBufferToImage(commands.getBuffer(), staging.getNativeObject(), + image.getNativeObject(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, region); + image.transitionLayout(commands, Image.Layout.TransferDstOptimal, Image.Layout.ShaderReadOnlyOptimal); + commands.end(); + commands.submit(null, null, null); + transferPool.getQueue().waitIdle(); + return image; + } } - public static class Key extends AssetKey { + public static Key key(String name) { + return new Key<>(name); + } + + public static ImageKey key(CommandPool pool, String name) { + return new ImageKey(pool, name); + } + + public static class Key extends AssetKey { private boolean flip; @@ -164,6 +210,26 @@ public boolean isFlip() { } + public static class ImageKey extends Key { + + private final CommandPool pool; + + public ImageKey(CommandPool pool, String name) { + super(name); + this.pool = pool; + } + + public ImageKey(CommandPool pool, String name, boolean flip) { + super(name, flip); + this.pool = pool; + } + + public CommandPool getPool() { + return pool; + } + + } + public static class ImageData { private final ByteBuffer buffer; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Attachment.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Attachment.java new file mode 100644 index 0000000000..a269eac314 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Attachment.java @@ -0,0 +1,118 @@ +package com.jme3.vulkan.pass; + +import com.jme3.vulkan.images.Image; +import org.lwjgl.vulkan.VkAttachmentDescription; + +/** + * Immutable definition for render pass attachments. + */ +public class Attachment { + + private final int position; + private final Image.Format format; + private final int samples; + private Image.Load load = Image.Load.Clear; + private Image.Store store = Image.Store.Store; + private Image.Load stencilLoad = Image.Load.DontCare; + private Image.Store stencilStore = Image.Store.DontCare; + private Image.Layout initialLayout = Image.Layout.Undefined; + private Image.Layout finalLayout = Image.Layout.General; + + protected Attachment(int position, Image.Format format, int samples) { + this.position = position; + this.format = format; + this.samples = samples; + } + + protected Attachment(int position, Attachment base) { + this.position = position; + this.format = base.format; + this.samples = base.samples; + this.load = base.load; + this.store = base.store; + this.stencilLoad = base.stencilLoad; + this.stencilStore = base.stencilStore; + this.initialLayout = base.initialLayout; + this.finalLayout = base.finalLayout; + } + + public AttachmentReference createReference(Image.Layout layout) { + return new AttachmentReference(this, layout); + } + + public void fillStruct(VkAttachmentDescription struct) { + struct.format(format.getVkEnum()) + .samples(samples) + .loadOp(load.getVkEnum()) + .storeOp(store.getVkEnum()) + .stencilLoadOp(stencilLoad.getVkEnum()) + .stencilStoreOp(stencilStore.getVkEnum()) + .initialLayout(initialLayout.getVkEnum()) + .finalLayout(finalLayout.getVkEnum()); + } + + public void setLoad(Image.Load load) { + this.load = load; + } + + public void setStencilLoad(Image.Load stencilLoad) { + this.stencilLoad = stencilLoad; + } + + public void setStore(Image.Store store) { + this.store = store; + } + + public void setStencilStore(Image.Store stencilStore) { + this.stencilStore = stencilStore; + } + + public void setInitialLayout(Image.Layout initialLayout) { + this.initialLayout = initialLayout; + } + + public void setFinalLayout(Image.Layout finalLayout) { + this.finalLayout = finalLayout; + } + + public int getPosition() { + return position; + } + + public Image.Format getFormat() { + return format; + } + + public int getSamples() { + return samples; + } + + public Image.Load getLoad() { + return load; + } + + public Image.Load getStencilLoad() { + return stencilLoad; + } + + public Image.Store getStore() { + return store; + } + + public Image.Store getStencilStore() { + return stencilStore; + } + + public Image.Layout getInitialLayout() { + return initialLayout; + } + + public Image.Layout getFinalLayout() { + return finalLayout; + } + + public boolean isCompatible(Attachment a) { + return position == a.position && format == a.format && samples == a.samples; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java new file mode 100644 index 0000000000..097be3efd1 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java @@ -0,0 +1,49 @@ +package com.jme3.vulkan.pass; + +import com.jme3.vulkan.images.Image; +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkAttachmentReference; + +/** + * Immutable reference to an {@link Attachment}. + */ +public class AttachmentReference { + + private final Attachment attachment; + private final Image.Layout layout; + + protected AttachmentReference(Attachment attachment, Image.Layout layout) { + this.attachment = attachment; + this.layout = layout; + } + + public void fillStruct(VkAttachmentReference struct) { + struct.attachment(getAttachmentPosition()) + .layout(layout.getVkEnum()); + } + + public Attachment getAttachment() { + return attachment; + } + + public Image.Layout getLayout() { + return layout; + } + + public int getAttachmentPosition() { + return attachment != null ? attachment.getPosition() : VK10.VK_ATTACHMENT_UNUSED; + } + + public boolean isUnused() { + return attachment == null; + } + + public boolean isCompatible(AttachmentReference ref) { + return isUnused() == ref.isUnused() && (isUnused() || attachment.isCompatible(ref.attachment)) && layout == ref.layout; + } + + public static AttachmentReference unused(Image.Layout layout) { + return new AttachmentReference(null, layout); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java new file mode 100644 index 0000000000..d009355fe2 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java @@ -0,0 +1,251 @@ +package com.jme3.vulkan.pass; + +import com.jme3.util.natives.Native; +import com.jme3.vulkan.CommandBuffer; +import com.jme3.vulkan.VulkanObject; +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.pipelines.FrameBuffer; +import com.jme3.vulkan.pipelines.PipelineBindPoint; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.*; + +import java.nio.LongBuffer; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Consumer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class RenderPass extends VulkanObject { + + private final LogicalDevice device; + private final List attachments = new ArrayList<>(); + private final List subpasses = new ArrayList<>(); + private final List dependencies = new ArrayList<>(); + private boolean built = false; + + public RenderPass(LogicalDevice device) { + this.device = device; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyRenderPass(device.getNativeObject(), object, null); + } + + public void begin(CommandBuffer cmd, FrameBuffer fbo) { + begin(cmd, fbo, true); + } + + public void begin(CommandBuffer cmd, FrameBuffer fbo, boolean inline) { + try (MemoryStack stack = MemoryStack.stackPush()) { + VkClearValue.Buffer clear = VkClearValue.calloc(2, stack); + clear.get(0).color().float32(stack.floats(0f, 0f, 0f, 1f)); + clear.get(1).depthStencil().set(1.0f, 0); + VkRenderPassBeginInfo begin = VkRenderPassBeginInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO) + .renderPass(object) + .framebuffer(fbo.getNativeObject()) + .clearValueCount(clear.limit()) + .pClearValues(clear); + begin.renderArea().offset().set(0, 0); + begin.renderArea().extent().width(fbo.getWidth()).height(fbo.getHeight()); + vkCmdBeginRenderPass(cmd.getBuffer(), begin, inline ? VK_SUBPASS_CONTENTS_INLINE : VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS); + } + } + + public void nextSubpass(CommandBuffer cmd) { + nextSubpass(cmd, true); + } + + public void nextSubpass(CommandBuffer cmd, boolean inline) { + vkCmdNextSubpass(cmd.getBuffer(), inline ? VK_SUBPASS_CONTENTS_INLINE : VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS); + } + + public void end(CommandBuffer cmd) { + vkCmdEndRenderPass(cmd.getBuffer()); + } + + public LogicalDevice getDevice() { + return device; + } + + public boolean isCompatible(RenderPass pass) { + if (this == pass) { + return true; + } + if (attachments.size() != pass.attachments.size()) { + return false; + } + if (subpasses.size() != pass.subpasses.size()) { + return false; + } + if (dependencies.size() != pass.dependencies.size()) { + return false; + } + for (int i = 0; i < attachments.size(); i++) { + if (!attachments.get(i).isCompatible(pass.attachments.get(i))) { + return false; + } + } + for (int i = 0; i < subpasses.size(); i++) { + if (!subpasses.get(i).isCompatible(pass.subpasses.get(i))) { + return false; + } + } + for (int i = 0; i < dependencies.size(); i++) { + if (!dependencies.get(i).isCompatible(pass.dependencies.get(i))) { + return false; + } + } + return true; + } + + public Builder build() { + if (built) { + throw new IllegalStateException("Render pass has already been built or is being built."); + } + built = true; + return new Builder(); + } + + public Builder buildCopyOf(RenderPass base) { + return new Builder(base); + } + + public class Builder extends VulkanObject.Builder { + + public Builder() {} + + public Builder(RenderPass base) { + for (Attachment a : base.attachments) { + attachments.add(new Attachment(attachments.size(), a)); + } + for (Subpass s : base.subpasses) { + subpasses.add(new Subpass(subpasses.size(), s, attachments)); + } + for (SubpassDependency d : base.dependencies) { + dependencies.add(new SubpassDependency(d, subpasses)); + } + } + + @Override + protected void build() { + VkRenderPassCreateInfo create = VkRenderPassCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO); + if (!attachments.isEmpty()) { + VkAttachmentDescription.Buffer buf = VkAttachmentDescription.calloc(attachments.size(), stack); + for (Attachment a : attachments) { + a.fillStruct(buf.get()); + } + create.pAttachments(buf.flip()); + } + if (!subpasses.isEmpty()) { + VkSubpassDescription.Buffer buf = VkSubpassDescription.calloc(subpasses.size(), stack); + for (Subpass s : subpasses) { + s.fillStruct(stack, buf.get()); + } + create.pSubpasses(buf.flip()); + } + if (!dependencies.isEmpty()) { + VkSubpassDependency.Buffer buf = VkSubpassDependency.calloc(dependencies.size(), stack); + for (SubpassDependency d : dependencies) { + d.fillStruct(buf.get()); + } + create.pDependencies(buf.flip()); + } + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateRenderPass(device.getNativeObject(), create, null, idBuf), "Failed to create render pass."); + object = idBuf.get(0); + ref = Native.get().register(RenderPass.this); + device.getNativeReference().addDependent(ref); + } + + public Attachment createAttachment(Image.Format format, int samples) { + Attachment a = new Attachment(attachments.size(), format, samples); + attachments.add(a); + return a; + } + + public Attachment createAttachment(Image.Format format, int samples, Consumer config) { + Attachment a = createAttachment(format, samples); + config.accept(a); + return a; + } + + public Attachment getAttachment(int i) { + return attachments.get(i); + } + + public Attachment getAttachment(int i, Consumer config) { + Attachment a = getAttachment(i); + config.accept(a); + return a; + } + + public List getAttachments() { + return Collections.unmodifiableList(attachments); + } + + public Subpass createSubpass(PipelineBindPoint bindPoint) { + Subpass p = new Subpass(subpasses.size(), bindPoint); + subpasses.add(p); + return p; + } + + public Subpass createSubpass(PipelineBindPoint bindPoint, Consumer config) { + Subpass p = createSubpass(bindPoint); + config.accept(p); + return p; + } + + public Subpass getSubpass(int i) { + return subpasses.get(i); + } + + public Subpass getSubpass(int i, Consumer config) { + Subpass p = getSubpass(i); + config.accept(p); + return p; + } + + public List getSubpasses() { + return Collections.unmodifiableList(subpasses); + } + + public SubpassDependency createDependency(Subpass src, Subpass dst) { + SubpassDependency d = new SubpassDependency(src, dst); + dependencies.add(d); + return d; + } + + public SubpassDependency createDependency(Subpass src, Subpass dst, Consumer config) { + SubpassDependency d = createDependency(src, dst); + config.accept(d); + return d; + } + + public SubpassDependency getDependency(int i) { + return dependencies.get(i); + } + + public SubpassDependency getDependency(int i, Consumer config) { + SubpassDependency d = getDependency(i); + config.accept(d); + return d; + } + + public List getDependencies() { + return Collections.unmodifiableList(dependencies); + } + + public MemoryStack getStack() { + return stack; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Subpass.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Subpass.java new file mode 100644 index 0000000000..0b56913472 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Subpass.java @@ -0,0 +1,196 @@ +package com.jme3.vulkan.pass; + +import com.jme3.vulkan.pipelines.PipelineBindPoint; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkAttachmentReference; +import org.lwjgl.vulkan.VkSubpassDescription; + +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * Immutable definition of a subpass within a render pass. + */ +public class Subpass { + + private final int position; + private final PipelineBindPoint bindPoint; + private final List color = new ArrayList<>(); + private final List input = new ArrayList<>(); + private final List resolve = new ArrayList<>(); + private final List preserve = new ArrayList<>(); + private AttachmentReference depthStencil; + + protected Subpass(int position, PipelineBindPoint bindPoint) { + this.position = position; + this.bindPoint = bindPoint; + } + + protected Subpass(int position, Subpass base, List attachments) { + this.position = position; + this.bindPoint = base.bindPoint; + transferRefs(base.color, color, attachments); + transferRefs(base.input, input, attachments); + transferRefs(base.resolve, resolve, attachments); + transferRefs(base.preserve, preserve, attachments); + if (base.depthStencil != null) { + if (!base.depthStencil.isUnused()) { + depthStencil = attachments.get(base.depthStencil.getAttachment().getPosition()) + .createReference(base.depthStencil.getLayout()); + } else { + depthStencil = AttachmentReference.unused(base.depthStencil.getLayout()); + } + } + } + + private void transferRefs(List srcRefs, List dstRefs, List attachments) { + for (AttachmentReference r : srcRefs) { + if (!r.isUnused()) { + dstRefs.add(attachments.get(r.getAttachment().getPosition()).createReference(r.getLayout())); + } else { + dstRefs.add(AttachmentReference.unused(r.getLayout())); + } + } + } + + public void fillStruct(MemoryStack stack, VkSubpassDescription struct) { + struct.pipelineBindPoint(bindPoint.getVkEnum()); + if (!color.isEmpty()) { + struct.colorAttachmentCount(color.size()); + struct.pColorAttachments(getColorReferences(stack)); + } + if (depthStencil != null) { + struct.pDepthStencilAttachment(getDepthStencil(stack)); + } + if (!input.isEmpty()) { + struct.pInputAttachments(getInputReferences(stack)); + } + if (!resolve.isEmpty()) { + struct.pResolveAttachments(getResolveReferences(stack)); + } + if (!preserve.isEmpty()) { + struct.pPreserveAttachments(getPreserveIndices(stack)); + } + } + + public void addColorAttachment(AttachmentReference ref) { + color.add(ref); + } + + public void addInputAttachment(AttachmentReference ref) { + input.add(ref); + } + + public void addResolveAttachment(AttachmentReference ref) { + resolve.add(ref); + } + + public void addPreserveAttachment(AttachmentReference ref) { + resolve.add(ref); + } + + public void setDepthStencilAttachment(AttachmentReference depthStencil) { + this.depthStencil = depthStencil; + } + + public AttachmentReference getDepthStencil() { + return depthStencil; + } + + public List getColor() { + return color; + } + + public List getInput() { + return input; + } + + public List getResolve() { + return resolve; + } + + public List getPreserve() { + return preserve; + } + + public VkAttachmentReference getDepthStencil(MemoryStack stack) { + VkAttachmentReference ref = VkAttachmentReference.calloc(stack); + depthStencil.fillStruct(ref); + return ref; + } + + private VkAttachmentReference.Buffer getReferenceBuffer(MemoryStack stack, Collection refs) { + VkAttachmentReference.Buffer att = VkAttachmentReference.calloc(color.size(), stack); + for (AttachmentReference ref : refs) { + ref.fillStruct(att.get()); + } + return att.flip(); + } + + public VkAttachmentReference.Buffer getColorReferences(MemoryStack stack) { + return getReferenceBuffer(stack, color); + } + + public VkAttachmentReference.Buffer getInputReferences(MemoryStack stack) { + return getReferenceBuffer(stack, input); + } + + public VkAttachmentReference.Buffer getResolveReferences(MemoryStack stack) { + return getReferenceBuffer(stack, resolve); + } + + public IntBuffer getPreserveIndices(MemoryStack stack) { + IntBuffer indices = stack.mallocInt(preserve.size()); + for (AttachmentReference ref : preserve) { + indices.put(ref.getAttachmentPosition()); + } + indices.flip(); + return indices; + } + + public int getPosition() { + return position; + } + + public PipelineBindPoint getBindPoint() { + return bindPoint; + } + + public boolean hasDepthStencil() { + return depthStencil != null; + } + + public boolean isCompatible(Subpass pass) { + return bindPoint == pass.bindPoint + && hasDepthStencil() == pass.hasDepthStencil() + && (!hasDepthStencil() || depthStencil.isCompatible(pass.depthStencil)) + && compareReferenceLists(color, pass.color) + && compareReferenceLists(input, pass.input) + && compareReferenceLists(resolve, pass.resolve) + && compareReferenceLists(preserve, pass.preserve); + } + + private boolean compareReferenceLists(List list1, List list2) { + int lower = Math.min(list1.size(), list2.size()); + int higher = Math.max(list1.size(), list2.size()); + for (int i = 0; i < lower; i++) { + if (!list1.get(i).isCompatible(list2.get(i))) { + return false; + } + } + for (int i = lower; i < higher; i++) { + if (i < list1.size()) { + if (!list1.get(i).isUnused()) { + return false; + } + } else if (!list2.get(i).isUnused()) { + return false; + } + } + return true; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java new file mode 100644 index 0000000000..5a498643c3 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java @@ -0,0 +1,97 @@ +package com.jme3.vulkan.pass; + +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkSubpassDependency; + +import java.util.List; + +/** + * Immutable definition of a render pass dependency. + */ +public class SubpassDependency { + + private final Subpass srcSubpass, dstSubpass; + private int srcStageMask, srcAccessMask; + private int dstStageMask, dstAccessMask; + + protected SubpassDependency(Subpass srcSubpass, Subpass dstSubpass) { + this.srcSubpass = srcSubpass; + this.dstSubpass = dstSubpass; + } + + protected SubpassDependency(SubpassDependency base, List subpasses) { + srcSubpass = base.srcSubpass != null ? subpasses.get(base.srcSubpass.getPosition()) : null; + dstSubpass = base.dstSubpass != null ? subpasses.get(base.dstSubpass.getPosition()) : null; + this.srcStageMask = base.srcStageMask; + this.srcAccessMask = base.srcAccessMask; + this.dstStageMask = base.dstStageMask; + this.dstAccessMask = base.dstAccessMask; + } + + public void fillStruct(VkSubpassDependency struct) { + struct.srcSubpass(srcSubpass != null ? srcSubpass.getPosition() : VK10.VK_SUBPASS_EXTERNAL) + .dstSubpass(dstSubpass != null ? dstSubpass.getPosition() : VK10.VK_SUBPASS_EXTERNAL) + .srcStageMask(srcStageMask) + .srcAccessMask(srcAccessMask) + .dstStageMask(dstStageMask) + .dstAccessMask(dstAccessMask); + } + + public void setSrcStageMask(int srcStageMask) { + this.srcStageMask = srcStageMask; + } + + public void setSrcAccessMask(int srcAccessMask) { + this.srcAccessMask = srcAccessMask; + } + + public void setDstStageMask(int dstStageMask) { + this.dstStageMask = dstStageMask; + } + + public void setDstAccessMask(int dstAccessMask) { + this.dstAccessMask = dstAccessMask; + } + + public Subpass getSrcSubpass() { + return srcSubpass; + } + + public Subpass getDstSubpass() { + return dstSubpass; + } + + public int getSrcStageMask() { + return srcStageMask; + } + + public int getSrcAccessMask() { + return srcAccessMask; + } + + public int getDstStageMask() { + return dstStageMask; + } + + public int getDstAccessMask() { + return dstAccessMask; + } + + public boolean isSourceExternal() { + return srcSubpass == null; + } + + public boolean isDestinationExternal() { + return dstSubpass == null; + } + + public boolean isCompatible(SubpassDependency dependency) { + return srcSubpass.getPosition() == dependency.srcSubpass.getPosition() + && dstSubpass.getPosition() == dependency.dstSubpass.getPosition() + && srcStageMask == dependency.srcStageMask + && srcAccessMask == dependency.srcAccessMask + && dstStageMask == dependency.dstStageMask + && dstAccessMask == dependency.dstAccessMask; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java new file mode 100644 index 0000000000..aa1bce0d78 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java @@ -0,0 +1,47 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.util.natives.Native; +import com.jme3.vulkan.PipelineLayout; +import com.jme3.vulkan.ShaderModule; +import com.jme3.vulkan.devices.LogicalDevice; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkComputePipelineCreateInfo; +import org.lwjgl.vulkan.VkPipelineShaderStageCreateInfo; + +import java.nio.LongBuffer; + +import static org.lwjgl.vulkan.VK10.*; +import static org.lwjgl.vulkan.VK10.VK_NULL_HANDLE; + +public class ComputePipeline extends Pipeline { + + private final ShaderModule shader; + + public ComputePipeline(LogicalDevice device, PipelineBindPoint bindPoint, PipelineLayout layout, ShaderModule shader) { + super(device, bindPoint, layout); + this.shader = shader; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkPipelineShaderStageCreateInfo stage = VkPipelineShaderStageCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) + .stage(VK_SHADER_STAGE_COMPUTE_BIT) + .module(shader.getNativeObject()) + .pName(stack.UTF8(shader.getEntryPoint())); + VkComputePipelineCreateInfo.Buffer pipeline = VkComputePipelineCreateInfo.calloc(1, stack) + .sType(VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO) + .stage(stage) + .layout(layout.getNativeObject()) + .basePipelineHandle(VK_NULL_HANDLE) + .basePipelineIndex(-1); + LongBuffer idBuf = stack.mallocLong(1); + vkCreateComputePipelines(device.getNativeObject(), VK_NULL_HANDLE, pipeline, null, idBuf); + object = idBuf.get(0); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + } + + public ShaderModule getShader() { + return shader; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java similarity index 90% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java index cf520c51b5..416d2bfe18 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/FrameBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java @@ -1,9 +1,10 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.pipelines; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.ImageView; +import com.jme3.vulkan.pass.RenderPass; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkFramebufferCreateInfo; @@ -14,13 +15,13 @@ public class FrameBuffer implements Native { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private final int width, height, layers; private final ImageView[] attachments; private long id; - public FrameBuffer(LogicalDevice device, RenderPass compat, int width, int height, int layers, ImageView... attachments) { + public FrameBuffer(LogicalDevice device, RenderPass compat, int width, int height, int layers, ImageView... attachments) { this.device = device; this.width = width; this.height = height; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java new file mode 100644 index 0000000000..0f53f9d8a9 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java @@ -0,0 +1,142 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.util.natives.Native; +import com.jme3.vulkan.*; +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.pass.RenderPass; +import com.jme3.vulkan.pipelines.states.*; +import org.lwjgl.vulkan.*; + +import java.nio.LongBuffer; +import java.util.ArrayList; +import java.util.Collection; + +import static com.jme3.renderer.vulkan.VulkanUtils.check; +import static org.lwjgl.vulkan.VK10.*; +import static org.lwjgl.vulkan.VK10.VK_NULL_HANDLE; + +public class GraphicsPipeline extends Pipeline { + + private final RenderPass compat; + private final int subpassIndex; + private final MeshDescription mesh; + + public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass compat, int subpassIndex, MeshDescription mesh) { + super(device, PipelineBindPoint.Graphics, layout); + this.compat = compat; + this.subpassIndex = subpassIndex; + this.mesh = mesh; + } + + public Builder build() { + return new Builder(); + } + + public class Builder extends VulkanObject.Builder { + + private final Collection stages = new ArrayList<>(); + private final DynamicState dynamic = new DynamicState(); + private final VertexInputState vertexInput = new VertexInputState(mesh); + private final InputAssemblyState inputAssembly = new InputAssemblyState(); + private final ViewportState viewport = new ViewportState(); + private final DepthStencilState depthStencil = new DepthStencilState(); + private final RasterizationState rasterization = new RasterizationState(); + private final MultisampleState multisample = new MultisampleState(); + private final ColorBlendState colorBlend = new ColorBlendState(); + + @Override + protected void build() { + VkPipelineShaderStageCreateInfo.Buffer stageBuf = VkPipelineShaderStageCreateInfo.calloc(stages.size(), stack); + for (ShaderStage s : stages) { + stageBuf.get().sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) + .stage(s.stages) + .module(s.module.getNativeObject()) + .pName(stack.UTF8(s.module.getEntryPoint())); + } + stageBuf.flip(); + VkGraphicsPipelineCreateInfo.Buffer pipeline = VkGraphicsPipelineCreateInfo.calloc(1, stack) + .sType(VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO) + .stageCount(stageBuf.limit()) + .pStages(stageBuf) + .pVertexInputState(vertexInput.toStruct(stack)) + .pInputAssemblyState(inputAssembly.toStruct(stack)) + .pViewportState(viewport.toStruct(stack)) + .pDepthStencilState(depthStencil.toStruct(stack)) + .pRasterizationState(rasterization.toStruct(stack)) + .pMultisampleState(multisample.toStruct(stack)) + .pColorBlendState(colorBlend.toStruct(stack)) + .pDynamicState(dynamic.toStruct(stack)) + .layout(layout.getNativeObject()) + .renderPass(compat.getNativeObject()) + .subpass(subpassIndex) + .basePipelineHandle(VK_NULL_HANDLE) + .basePipelineIndex(-1); + System.out.println("render pass: " + compat.getNativeObject()); + LongBuffer idBuf = stack.mallocLong(1); + // todo: look into pipeline caching + check(vkCreateGraphicsPipelines(device.getNativeObject(), VK_NULL_HANDLE, pipeline, null, idBuf), + "Failed to create graphics pipeline"); + object = idBuf.get(0); + ref = Native.get().register(GraphicsPipeline.this); + device.getNativeReference().addDependent(ref); + } + + public void addStage(ShaderModule module, int stages) { + this.stages.add(new ShaderStage(module, stages)); + } + + public DynamicState getDynamicState() { + return dynamic; + } + + public VertexInputState getVertexInput() { + return vertexInput; + } + + public InputAssemblyState getInputAssembly() { + return inputAssembly; + } + + public ViewportState getViewportState() { + return viewport; + } + + public DepthStencilState getDepthStencil() { + return depthStencil; + } + + public RasterizationState getRasterization() { + return rasterization; + } + + public MultisampleState getMultisample() { + return multisample; + } + + public ColorBlendState getColorBlend() { + return colorBlend; + } + + } + + public static class ShaderStage { + + private final ShaderModule module; + private final int stages; + + public ShaderStage(ShaderModule module, int stages) { + this.module = module; + this.stages = stages; + } + + public ShaderModule getModule() { + return module; + } + + public int getStages() { + return stages; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java new file mode 100644 index 0000000000..b362a7b8e9 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java @@ -0,0 +1,43 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.vulkan.CommandBuffer; +import com.jme3.vulkan.PipelineLayout; +import com.jme3.vulkan.VulkanObject; +import com.jme3.vulkan.devices.LogicalDevice; + +import static org.lwjgl.vulkan.VK10.*; + +public class Pipeline extends VulkanObject { + + protected final LogicalDevice device; + protected final PipelineBindPoint bindPoint; + protected final PipelineLayout layout; + + public Pipeline(LogicalDevice device, PipelineBindPoint bindPoint, PipelineLayout layout) { + this.device = device; + this.bindPoint = bindPoint; + this.layout = layout; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyPipeline(device.getNativeObject(), object, null); + } + + public void bind(CommandBuffer cmd) { + vkCmdBindPipeline(cmd.getBuffer(), bindPoint.getVkEnum(), object); + } + + public LogicalDevice getDevice() { + return device; + } + + public PipelineBindPoint getBindPoint() { + return bindPoint; + } + + public PipelineLayout getLayout() { + return layout; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineBindPoint.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineBindPoint.java new file mode 100644 index 0000000000..3307e56118 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineBindPoint.java @@ -0,0 +1,20 @@ +package com.jme3.vulkan.pipelines; + +import static org.lwjgl.vulkan.VK10.*; + +public enum PipelineBindPoint { + + Graphics(VK_PIPELINE_BIND_POINT_GRAPHICS), + Compute(VK_PIPELINE_BIND_POINT_COMPUTE); + + private final int vkEnum; + + PipelineBindPoint(int vkEnum) { + this.vkEnum = vkEnum; + } + + public int getVkEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendAttachment.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendAttachment.java new file mode 100644 index 0000000000..d7541e84c0 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendAttachment.java @@ -0,0 +1,62 @@ +package com.jme3.vulkan.pipelines.states; + +import org.lwjgl.vulkan.VkPipelineColorBlendAttachmentState; + +import static org.lwjgl.vulkan.VK10.*; + +public class ColorBlendAttachment { + + private int colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT + | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT; + private boolean blend = false; + private int srcColorBlendFactor = VK_BLEND_FACTOR_ONE; + private int dstColorBlendFactor = VK_BLEND_FACTOR_ZERO; + private int colorBlendOp = VK_BLEND_OP_ADD; + private int srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE; + private int dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO; + private int alphaBlendOp = VK_BLEND_OP_ADD; + + public void writeToStruct(VkPipelineColorBlendAttachmentState struct) { + struct.colorWriteMask(colorWriteMask) + .blendEnable(blend) + .srcColorBlendFactor(srcColorBlendFactor) + .dstColorBlendFactor(dstColorBlendFactor) + .colorBlendOp(colorBlendOp) + .srcAlphaBlendFactor(srcAlphaBlendFactor) + .dstAlphaBlendFactor(dstAlphaBlendFactor) + .alphaBlendOp(alphaBlendOp); + } + + public void setColorWriteMask(int colorWriteMask) { + this.colorWriteMask = colorWriteMask; + } + + public void setBlend(boolean blend) { + this.blend = blend; + } + + public void setSrcColorBlendFactor(int srcColorBlendFactor) { + this.srcColorBlendFactor = srcColorBlendFactor; + } + + public void setDstColorBlendFactor(int dstColorBlendFactor) { + this.dstColorBlendFactor = dstColorBlendFactor; + } + + public void setColorBlendOp(int colorBlendOp) { + this.colorBlendOp = colorBlendOp; + } + + public void setSrcAlphaBlendFactor(int srcAlphaBlendFactor) { + this.srcAlphaBlendFactor = srcAlphaBlendFactor; + } + + public void setDstAlphaBlendFactor(int dstAlphaBlendFactor) { + this.dstAlphaBlendFactor = dstAlphaBlendFactor; + } + + public void setAlphaBlendOp(int alphaBlendOp) { + this.alphaBlendOp = alphaBlendOp; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java new file mode 100644 index 0000000000..904753d2fd --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java @@ -0,0 +1,45 @@ +package com.jme3.vulkan.pipelines.states; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkPipelineColorBlendAttachmentState; +import org.lwjgl.vulkan.VkPipelineColorBlendStateCreateInfo; + +import java.util.ArrayList; +import java.util.List; + +import static org.lwjgl.vulkan.VK10.VK_LOGIC_OP_COPY; +import static org.lwjgl.vulkan.VK10.VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; + +public class ColorBlendState implements PipelineState { + + private final List attachments = new ArrayList<>(); + private boolean logicEnabled = false; + private int logic = VK_LOGIC_OP_COPY; + + @Override + public VkPipelineColorBlendStateCreateInfo toStruct(MemoryStack stack) { + VkPipelineColorBlendAttachmentState.Buffer attBuf = VkPipelineColorBlendAttachmentState.calloc(attachments.size(), stack); + for (ColorBlendAttachment a : attachments) { + a.writeToStruct(attBuf.get()); + } + attBuf.flip(); + return VkPipelineColorBlendStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO) + .logicOpEnable(logicEnabled) + .logicOp(logic) + .pAttachments(attBuf); + } + + public void addAttachment(ColorBlendAttachment attachment) { + this.attachments.add(attachment); + } + + public void setLogicEnabled(boolean logicEnabled) { + this.logicEnabled = logicEnabled; + } + + public void setLogic(int logic) { + this.logic = logic; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java new file mode 100644 index 0000000000..8e9ec2a5e7 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java @@ -0,0 +1,46 @@ +package com.jme3.vulkan.pipelines.states; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkPipelineDepthStencilStateCreateInfo; + +public class DepthStencilState implements PipelineState { + + private boolean depthTest = true; + private boolean depthWrite = true; + private boolean depthBoundsTest = false; + private boolean stencilTest = false; + private int depthCompare = VK10.VK_COMPARE_OP_LESS_OR_EQUAL; + + @Override + public VkPipelineDepthStencilStateCreateInfo toStruct(MemoryStack stack) { + return VkPipelineDepthStencilStateCreateInfo.calloc(stack) + .sType(VK10.VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO) + .depthTestEnable(depthTest) + .depthWriteEnable(depthWrite) + .depthBoundsTestEnable(depthBoundsTest) + .stencilTestEnable(stencilTest) + .depthCompareOp(depthCompare); + } + + public void setDepthTest(boolean depthTest) { + this.depthTest = depthTest; + } + + public void setDepthWrite(boolean depthWrite) { + this.depthWrite = depthWrite; + } + + public void setDepthBoundsTest(boolean depthBoundsTest) { + this.depthBoundsTest = depthBoundsTest; + } + + public void setStencilTest(boolean stencilTest) { + this.stencilTest = stencilTest; + } + + public void setDepthCompare(int depthCompare) { + this.depthCompare = depthCompare; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java new file mode 100644 index 0000000000..1f12488608 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java @@ -0,0 +1,61 @@ +package com.jme3.vulkan.pipelines.states; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkPipelineDynamicStateCreateInfo; + +import java.nio.IntBuffer; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import static org.lwjgl.vulkan.VK10.*; + +public class DynamicState implements PipelineState { + + public enum Type { + + ViewPort(VK_DYNAMIC_STATE_VIEWPORT), + Scissor(VK_DYNAMIC_STATE_SCISSOR), + BlendConstants(VK_DYNAMIC_STATE_BLEND_CONSTANTS), + DepthBias(VK_DYNAMIC_STATE_DEPTH_BIAS), + DepthBounds(VK_DYNAMIC_STATE_DEPTH_BOUNDS), + LineWidth(VK_DYNAMIC_STATE_LINE_WIDTH), + StencilCompareMask(VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK), + StencilReference(VK_DYNAMIC_STATE_STENCIL_REFERENCE), + StencilWriteMask(VK_DYNAMIC_STATE_STENCIL_WRITE_MASK); + + private final int vkEnum; + + Type(int vkEnum) { + this.vkEnum = vkEnum; + } + + public int getVkEnum() { + return vkEnum; + } + + } + + private final Set states = new HashSet<>(); + + public DynamicState(Type... types) { + addTypes(types); + } + + @Override + public VkPipelineDynamicStateCreateInfo toStruct(MemoryStack stack) { + IntBuffer stateBuf = stack.mallocInt(states.size()); + for (Type t : states) { + stateBuf.put(t.getVkEnum()); + } + stateBuf.flip(); + return VkPipelineDynamicStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO) + .pDynamicStates(stateBuf); + } + + public void addTypes(Type... types) { + states.addAll(Arrays.asList(types)); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java new file mode 100644 index 0000000000..bff57a22d9 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java @@ -0,0 +1,28 @@ +package com.jme3.vulkan.pipelines.states; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkPipelineInputAssemblyStateCreateInfo; + +public class InputAssemblyState implements PipelineState { + + private int topology = VK10.VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + private boolean primitiveRestart = false; + + @Override + public VkPipelineInputAssemblyStateCreateInfo toStruct(MemoryStack stack) { + return VkPipelineInputAssemblyStateCreateInfo.calloc(stack) + .sType(VK10.VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO) + .topology(topology) + .primitiveRestartEnable(primitiveRestart); + } + + public void setTopology(int topology) { + this.topology = topology; + } + + public void setPrimitiveRestart(boolean primitiveRestart) { + this.primitiveRestart = primitiveRestart; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/MultisampleState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/MultisampleState.java new file mode 100644 index 0000000000..e6f069dc8b --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/MultisampleState.java @@ -0,0 +1,29 @@ +package com.jme3.vulkan.pipelines.states; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkPipelineMultisampleStateCreateInfo; + +import static org.lwjgl.vulkan.VK10.*; + +public class MultisampleState implements PipelineState { + + private int rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + private boolean sampleShading = false; + + @Override + public VkPipelineMultisampleStateCreateInfo toStruct(MemoryStack stack) { + return VkPipelineMultisampleStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO) + .sampleShadingEnable(sampleShading) + .rasterizationSamples(rasterizationSamples); + } + + public void setRasterizationSamples(int rasterizationSamples) { + this.rasterizationSamples = rasterizationSamples; + } + + public void setSampleShading(boolean sampleShading) { + this.sampleShading = sampleShading; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/PipelineState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/PipelineState.java new file mode 100644 index 0000000000..aade269037 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/PipelineState.java @@ -0,0 +1,10 @@ +package com.jme3.vulkan.pipelines.states; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.Struct; + +public interface PipelineState { + + T toStruct(MemoryStack stack); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java new file mode 100644 index 0000000000..441d290d99 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java @@ -0,0 +1,60 @@ +package com.jme3.vulkan.pipelines.states; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkPipelineRasterizationStateCreateInfo; + +import static org.lwjgl.vulkan.VK10.*; + +public class RasterizationState implements PipelineState { + + private int polygonMode = VK_POLYGON_MODE_FILL; + private int cullMode = VK_CULL_MODE_BACK_BIT; + private int frontFace = VK_FRONT_FACE_CLOCKWISE; + private float lineWidth = 1f; + private boolean depthClamp = false; + private boolean rasterizerDiscard = false; + private boolean depthBias = false; + + @Override + public VkPipelineRasterizationStateCreateInfo toStruct(MemoryStack stack) { + return VkPipelineRasterizationStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO) + .depthClampEnable(depthClamp) + .rasterizerDiscardEnable(rasterizerDiscard) + .polygonMode(VK_POLYGON_MODE_FILL) + .lineWidth(lineWidth) + .cullMode(cullMode) + .frontFace(frontFace) + .cullMode(cullMode) + .depthBiasEnable(depthBias); + } + + public void setPolygonMode(int polygonMode) { + this.polygonMode = polygonMode; + } + + public void setCullMode(int cullMode) { + this.cullMode = cullMode; + } + + public void setFrontFace(int frontFace) { + this.frontFace = frontFace; + } + + public void setLineWidth(float lineWidth) { + this.lineWidth = lineWidth; + } + + public void setDepthClamp(boolean depthClamp) { + this.depthClamp = depthClamp; + } + + public void setRasterizerDiscard(boolean rasterizerDiscard) { + this.rasterizerDiscard = rasterizerDiscard; + } + + public void setDepthBias(boolean depthBias) { + this.depthBias = depthBias; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java new file mode 100644 index 0000000000..a650b5b71a --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java @@ -0,0 +1,30 @@ +package com.jme3.vulkan.pipelines.states; + +import com.jme3.vulkan.MeshDescription; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkPipelineVertexInputStateCreateInfo; + +import java.util.Objects; + +public class VertexInputState implements PipelineState { + + private MeshDescription mesh; + + public VertexInputState(MeshDescription mesh) { + setMesh(mesh); + } + + @Override + public VkPipelineVertexInputStateCreateInfo toStruct(MemoryStack stack) { + return VkPipelineVertexInputStateCreateInfo.calloc(stack) + .sType(VK10.VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO) + .pVertexBindingDescriptions(mesh.getBindings(stack)) + .pVertexAttributeDescriptions(mesh.getAttributes(stack)); + } + + public void setMesh(MeshDescription mesh) { + this.mesh = Objects.requireNonNull(mesh, "Mesh description cannot be null."); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java new file mode 100644 index 0000000000..9dbf6388b8 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java @@ -0,0 +1,88 @@ +package com.jme3.vulkan.pipelines.states; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkExtent2D; +import org.lwjgl.vulkan.VkPipelineViewportStateCreateInfo; +import org.lwjgl.vulkan.VkRect2D; +import org.lwjgl.vulkan.VkViewport; + +import java.util.ArrayList; +import java.util.List; + +import static org.lwjgl.vulkan.VK10.VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; + +public class ViewportState implements PipelineState { + + private final List viewports = new ArrayList<>(); + private final List scissors = new ArrayList<>(); + + @Override + public VkPipelineViewportStateCreateInfo toStruct(MemoryStack stack) { + VkViewport.Buffer vpBuf = VkViewport.calloc(viewports.size(), stack); + for (ViewportInfo v : viewports) { + vpBuf.get().x(v.x).y(v.y).width(v.w).height(v.h).minDepth(v.min).maxDepth(v.max); + } + vpBuf.flip(); + VkRect2D.Buffer scissorBuf = VkRect2D.calloc(scissors.size(), stack); + for (ScissorInfo s : scissors) { + VkRect2D e = scissorBuf.get(); + e.offset().set(s.x, s.y); + e.extent().set(s.w, s.h); + } + scissorBuf.flip(); + return VkPipelineViewportStateCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO) + .pViewports(vpBuf) + .pScissors(scissorBuf); + } + + public void addViewport() { + viewports.add(new ViewportInfo(0f, 0f, 128f, 128f, 0f, 1f)); + } + + public void addViewport(float x, float y, float w, float h) { + viewports.add(new ViewportInfo(x, y, w, h, 0f, 1f)); + } + + public void addViewport(float x, float y, float w, float h, float minDepth, float maxDepth) { + viewports.add(new ViewportInfo(x, y, w, h, minDepth, maxDepth)); + } + + public void addScissor() { + scissors.add(new ScissorInfo(0, 0, 128, 128)); + } + + public void addScissor(int x, int y, int w, int h) { + scissors.add(new ScissorInfo(x, y, w, h)); + } + + private static class ViewportInfo { + + private final float x, y, w, h; + private final float min, max; + + public ViewportInfo(float x, float y, float w, float h, float min, float max) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + this.min = min; + this.max = max; + } + + } + + private static class ScissorInfo { + + private final int x, y, w, h; + + public ScissorInfo(int x, int y, int w, int h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Surface.java similarity index 97% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Surface.java index b253f61505..ba5c8e4633 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Surface.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Surface.java @@ -1,7 +1,8 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.surface; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.VulkanInstance; import com.jme3.vulkan.devices.DeviceFilter; import com.jme3.vulkan.devices.PhysicalDevice; import org.lwjgl.glfw.GLFWVulkan; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java similarity index 92% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java index 106f59537c..b5a109f4c6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -1,10 +1,14 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.surface; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.*; +import com.jme3.vulkan.Queue; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; import com.jme3.vulkan.images.ImageView; +import com.jme3.vulkan.pipelines.FrameBuffer; +import com.jme3.vulkan.pass.RenderPass; import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -40,7 +44,7 @@ public int getVkEnum() { private final LogicalDevice device; private final Surface surface; - private final List images = new ArrayList<>(); + private final List images = new ArrayList<>(); private SwapchainUpdater updater; private Extent2 extent; private Image.Format format; @@ -60,12 +64,12 @@ public Runnable createNativeDestroyer() { } public void createFrameBuffers(RenderPass compat, ImageView depthStencil) { - for (SwapchainImage img : images) { + for (PresentImage img : images) { img.createFrameBuffer(compat, depthStencil); } } - public SwapchainImage acquireNextImage(SwapchainUpdater updater, Semaphore semaphore, Fence fence, long timeout) { + public PresentImage acquireNextImage(SwapchainUpdater updater, Semaphore semaphore, Fence fence, long timeout) { try (MemoryStack stack = MemoryStack.stackPush()) { IntBuffer i = stack.mallocInt(1); int code = KHRSwapchain.vkAcquireNextImageKHR(device.getNativeObject(), object, @@ -77,7 +81,7 @@ public SwapchainImage acquireNextImage(SwapchainUpdater updater, Semaphore semap } } - public void present(Queue presentQueue, SwapchainImage image, Semaphore wait) { + public void present(com.jme3.vulkan.Queue presentQueue, PresentImage image, Semaphore wait) { try (MemoryStack stack = MemoryStack.stackPush()) { VkPresentInfoKHR info = VkPresentInfoKHR.calloc(stack) .sType(KHRSwapchain.VK_STRUCTURE_TYPE_PRESENT_INFO_KHR) @@ -99,7 +103,7 @@ public Surface getSurface() { return surface; } - public List getImages() { + public List getImages() { return Collections.unmodifiableList(images); } @@ -115,15 +119,15 @@ public Builder build() { return new Builder(); } - public class SwapchainImage implements Image { + public class PresentImage implements Image { - private final LogicalDevice device; + private final LogicalDevice device; private final NativeReference ref; private final long id; private final ImageView view; private FrameBuffer frameBuffer; - private SwapchainImage(LogicalDevice device, long id) { + private PresentImage(LogicalDevice device, long id) { this.device = device; this.id = id; ref = Native.get().register(this); @@ -137,7 +141,7 @@ public ImageView createView(VkImageViewCreateInfo create) { } @Override - public LogicalDevice getDevice() { + public LogicalDevice getDevice() { return device; } @@ -204,7 +208,7 @@ public class Builder extends VulkanObject.Builder { private final VkSurfaceCapabilitiesKHR caps; private final VkSurfaceFormatKHR.Buffer formats; private final IntBuffer modes; - private final Collection queues = new ArrayList<>(); + private final Collection queues = new ArrayList<>(); private VkSurfaceFormatKHR selectedFormat; private VkExtent2D selectedExtent; @@ -270,7 +274,7 @@ protected void build() { } if (queues.size() > 1) { IntBuffer concurrent = stack.mallocInt(queues.size()); - for (Queue q : queues) { + for (com.jme3.vulkan.Queue q : queues) { concurrent.put(q.getFamilyIndex()); } concurrent.flip(); @@ -290,7 +294,7 @@ protected void build() { "Failed to get swapchain images.")); Objects.requireNonNull(imgs, "Swapchain contains no images."); for (int i = 0; i < imgs.limit(); i++) { - images.add(new SwapchainImage(device, imgs.get(i))); + images.add(new PresentImage(device, imgs.get(i))); } ref.refresh(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainUpdater.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/SwapchainUpdater.java similarity index 77% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainUpdater.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/SwapchainUpdater.java index 80b7622154..42f019a6b6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SwapchainUpdater.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/SwapchainUpdater.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.surface; public interface SwapchainUpdater { From e0efc4076c5120e47334a77e2e77db23cb48c32b Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Wed, 6 Aug 2025 16:56:24 -0400 Subject: [PATCH 21/80] successfully abstracted all vulkan components --- .../jme3/vulkan/TestCaseMeshDescription.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java new file mode 100644 index 0000000000..62f2f146c9 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java @@ -0,0 +1,71 @@ +package com.jme3.vulkan; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkVertexInputAttributeDescription; +import org.lwjgl.vulkan.VkVertexInputBindingDescription; + +import static org.lwjgl.vulkan.VK10.*; + +public class TestCaseMeshDescription implements Native, MeshDescription { + + private final VkVertexInputBindingDescription.Buffer bindings; + private final VkVertexInputAttributeDescription.Buffer attributes; + private final NativeReference ref; + + public TestCaseMeshDescription() { + // for each vertex buffer on the mesh + bindings = VkVertexInputBindingDescription.calloc(1) + .binding(0) + .stride(Float.BYTES * 8) // bytes per vertex + .inputRate(VK_VERTEX_INPUT_RATE_VERTEX); + // for each attribute in each vertex buffer + attributes = VkVertexInputAttributeDescription.calloc(3); + attributes.get(0).binding(0) + .location(0) + .format(VK_FORMAT_R32G32B32_SFLOAT) + .offset(0); + attributes.get(1).binding(0) + .location(1) + .format(VK_FORMAT_R32G32B32_SFLOAT) + .offset(Float.BYTES * 3); + attributes.get(2).binding(0) + .location(2) + .format(VK_FORMAT_R32G32_SFLOAT) + .offset(Float.BYTES * 6); + ref = Native.get().register(this); + } + + @Override + public Object getNativeObject() { + return null; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> { + bindings.free(); + attributes.free(); + }; + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + @Override + public VkVertexInputBindingDescription.Buffer getBindings(MemoryStack stack) { + return bindings; + } + + @Override + public VkVertexInputAttributeDescription.Buffer getAttributes(MemoryStack stack) { + return attributes; + } + +} From 0c035ab4b2a5e4d52ddb7d2fa7b005057b81b098 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 9 Aug 2025 09:53:09 -0400 Subject: [PATCH 22/80] organized files --- .../jme3test/vulkan/VulkanHelperTest.java | 12 ++++- .../main/java/jme3test/vulkan/VulkanTest.java | 4 +- .../java/com/jme3/vulkan/MemoryBarrier.java | 4 -- .../jme3/vulkan/TestCaseMeshDescription.java | 1 + .../src/main/java/com/jme3/vulkan/Vertex.java | 25 ---------- .../com/jme3/vulkan/buffers/GpuBuffer.java | 2 +- .../jme3/vulkan/buffers/StageableBuffer.java | 5 +- .../vulkan/{ => commands}/CommandBuffer.java | 6 +-- .../vulkan/{ => commands}/CommandPool.java | 2 +- .../{ => commands}/OneTimeCommandBuffer.java | 4 +- .../com/jme3/vulkan/{ => commands}/Queue.java | 3 +- .../vulkan/{ => commands}/QueueFamilies.java | 2 +- .../vulkan/descriptors/ImageDescriptor.java | 11 +++-- .../jme3/vulkan/devices/DeviceWeights.java | 49 ------------------- .../vulkan/devices/GeneralPhysicalDevice.java | 2 +- .../jme3/vulkan/devices/LogicalDevice.java | 2 +- .../java/com/jme3/vulkan/images/GpuImage.java | 2 +- .../jme3/vulkan/images/VulkanImageLoader.java | 4 +- .../main/java/com/jme3/vulkan/mesh/Mesh.java | 41 ++++++++++++++++ .../vulkan/{ => mesh}/MeshDescription.java | 2 +- .../java/com/jme3/vulkan/pass/RenderPass.java | 2 +- .../vulkan/pipelines/ComputePipeline.java | 3 +- .../vulkan/pipelines/GraphicsPipeline.java | 2 + .../com/jme3/vulkan/pipelines/Pipeline.java | 3 +- .../{ => pipelines}/PipelineLayout.java | 2 +- .../pipelines/states/VertexInputState.java | 2 +- .../vulkan/{ => shader}/ShaderModule.java | 2 +- .../com/jme3/vulkan/surface/Swapchain.java | 10 ++-- .../com/jme3/vulkan/{ => sync}/Fence.java | 2 +- .../com/jme3/vulkan/{ => sync}/Semaphore.java | 2 +- 30 files changed, 97 insertions(+), 116 deletions(-) delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryBarrier.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Vertex.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => commands}/CommandBuffer.java (96%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => commands}/CommandPool.java (98%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => commands}/OneTimeCommandBuffer.java (95%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => commands}/Queue.java (95%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => commands}/QueueFamilies.java (94%) delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceWeights.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => mesh}/MeshDescription.java (92%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => pipelines}/PipelineLayout.java (98%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => shader}/ShaderModule.java (98%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => sync}/Fence.java (98%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => sync}/Semaphore.java (98%) diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index dab04643f5..2f031af6cb 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -2,7 +2,6 @@ import com.jme3.app.FlyCamAppState; import com.jme3.app.SimpleApplication; -import com.jme3.material.RenderState; import com.jme3.math.Quaternion; import com.jme3.math.Transform; import com.jme3.math.Vector3f; @@ -14,6 +13,8 @@ import com.jme3.util.natives.Native; import com.jme3.vulkan.*; import com.jme3.vulkan.buffers.*; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.*; import com.jme3.vulkan.flags.ImageUsageFlags; @@ -25,11 +26,15 @@ import com.jme3.vulkan.pipelines.GraphicsPipeline; import com.jme3.vulkan.pass.RenderPass; import com.jme3.vulkan.pipelines.PipelineBindPoint; +import com.jme3.vulkan.pipelines.PipelineLayout; import com.jme3.vulkan.pipelines.states.ColorBlendAttachment; import com.jme3.vulkan.pipelines.states.DynamicState; +import com.jme3.vulkan.shader.ShaderModule; import com.jme3.vulkan.surface.Surface; import com.jme3.vulkan.surface.Swapchain; import com.jme3.vulkan.surface.SwapchainUpdater; +import com.jme3.vulkan.sync.Fence; +import com.jme3.vulkan.sync.Semaphore; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -294,10 +299,13 @@ private ImageView createDepthAttachment(CommandPool pool) { private class Frame implements Consumer { + // render manager private final CommandBuffer graphicsCommands = graphicsPool.allocateCommandBuffer(); private final Semaphore imageAvailable = new Semaphore(device); private final Semaphore renderFinished = new Semaphore(device); private final Fence inFlight = new Fence(device, true); + + // material private final GpuBuffer uniforms; private final DescriptorSet descriptorSet; @@ -307,7 +315,7 @@ public Frame() { new MemoryFlags().hostVisible().hostCoherent(), false); descriptorSet = descriptorPool.allocateSets(descriptorLayout)[0]; descriptorSet.write(BufferSetWriter.uniformBuffers(0, 0, new BufferDescriptor(uniforms)), - ImageSetWriter.combinedImageSampler(1, 0, new ImageDescriptor(texture, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))); + ImageSetWriter.combinedImageSampler(1, 0, new ImageDescriptor(texture, Image.Layout.ShaderReadOnlyOptimal))); } @Override diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java index 601b8ca048..0722616497 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java @@ -7,8 +7,8 @@ import com.jme3.util.natives.Native; import com.jme3.vulkan.devices.DeviceFilter; import com.jme3.system.vulkan.LwjglVulkanContext; -import com.jme3.vulkan.Fence; -import com.jme3.vulkan.Semaphore; +import com.jme3.vulkan.sync.Fence; +import com.jme3.vulkan.sync.Semaphore; import com.jme3.vulkan.VulkanRenderManager; import org.lwjgl.BufferUtils; import org.lwjgl.PointerBuffer; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryBarrier.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryBarrier.java deleted file mode 100644 index c7322df3db..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MemoryBarrier.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.jme3.vulkan; - -public class MemoryBarrier { -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java index 62f2f146c9..5395f6013b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java @@ -2,6 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.mesh.MeshDescription; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Vertex.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Vertex.java deleted file mode 100644 index 237992d248..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Vertex.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.jme3.vulkan; - -import org.lwjgl.system.Struct; - -import java.nio.ByteBuffer; - -public class Vertex extends Struct { - - // todo: experiment with implementing Structs - - protected Vertex(long address, ByteBuffer container) { - super(address, container); - } - - @Override - protected Vertex create(long l, ByteBuffer byteBuffer) { - return null; - } - - @Override - public int sizeof() { - return 0; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index f68f1c2b3e..2964505f4f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -3,7 +3,7 @@ import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; -import com.jme3.vulkan.CommandBuffer; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.flags.MemoryFlags; import com.jme3.vulkan.flags.BufferUsageFlags; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index 8d5476c711..1815cefe7a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -1,9 +1,12 @@ package com.jme3.vulkan.buffers; -import com.jme3.vulkan.*; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.flags.MemoryFlags; import com.jme3.vulkan.flags.BufferUsageFlags; +import com.jme3.vulkan.sync.Fence; +import com.jme3.vulkan.sync.Semaphore; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java similarity index 96% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java index 6014e59a56..f4442d115e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java @@ -1,9 +1,9 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.commands; -import org.lwjgl.BufferUtils; +import com.jme3.vulkan.sync.Fence; +import com.jme3.vulkan.sync.Semaphore; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkCommandBuffer; import org.lwjgl.vulkan.VkCommandBufferAllocateInfo; import org.lwjgl.vulkan.VkCommandBufferBeginInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java similarity index 98% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java index 1062f4038e..1bd64f5de4 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/CommandPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.commands; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/OneTimeCommandBuffer.java similarity index 95% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/OneTimeCommandBuffer.java index a060a2371a..7201f7c2b9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/OneTimeCommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/OneTimeCommandBuffer.java @@ -1,5 +1,7 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.commands; +import com.jme3.vulkan.sync.Fence; +import com.jme3.vulkan.sync.Semaphore; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkCommandBufferBeginInfo; import org.lwjgl.vulkan.VkSubmitInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/Queue.java similarity index 95% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/Queue.java index 6571dc530f..da4be2d3f6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Queue.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/Queue.java @@ -1,5 +1,6 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.commands; +import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/QueueFamilies.java similarity index 94% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/QueueFamilies.java index d0e8c960c0..0290b5d5b3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/QueueFamilies.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/QueueFamilies.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.commands; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.devices.PhysicalDevice; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java index f426c707cc..5bad3c9000 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java @@ -1,5 +1,6 @@ package com.jme3.vulkan.descriptors; +import com.jme3.vulkan.images.Image; import com.jme3.vulkan.images.ImageView; import com.jme3.vulkan.images.Sampler; import com.jme3.vulkan.images.Texture; @@ -9,13 +10,13 @@ public class ImageDescriptor { private final ImageView view; private final Sampler sampler; - private final int layout; + private final Image.Layout layout; - public ImageDescriptor(Texture texture, int layout) { + public ImageDescriptor(Texture texture, Image.Layout layout) { this(texture.getImage(), texture, layout); } - public ImageDescriptor(ImageView view, Sampler sampler, int layout) { + public ImageDescriptor(ImageView view, Sampler sampler, Image.Layout layout) { this.view = view; this.sampler = sampler; this.layout = layout; @@ -24,7 +25,7 @@ public ImageDescriptor(ImageView view, Sampler sampler, int layout) { public void fillDescriptorInfo(VkDescriptorImageInfo info) { info.imageView(view.getNativeObject()) .sampler(sampler.getNativeObject()) - .imageLayout(layout); + .imageLayout(layout.getVkEnum()); } public ImageView getView() { @@ -35,7 +36,7 @@ public Sampler getSampler() { return sampler; } - public int getLayout() { + public Image.Layout getLayout() { return layout; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceWeights.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceWeights.java deleted file mode 100644 index 155322c3dd..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceWeights.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.jme3.vulkan.devices; - -public class DeviceWeights { - - public static final Float SUCCESS = 1f; - public static final Float FAILURE = -1f; - public static final Float REJECTION = null; - - public static Float success(float weight) { - return weight; - } - - public static Float failure(float weight) { - return -weight; - } - - public static Float successOrReject(boolean success) { - return successOrReject(success, SUCCESS); - } - - public static Float successOrReject(boolean success, float weight) { - return success ? Float.valueOf(weight) : REJECTION; - } - - public static Float successOrFail(boolean success) { - return successOrFail(success, SUCCESS, FAILURE); - } - - public static Float successOrFail(boolean success, float weight) { - return success ? weight : -weight; - } - - public static Float successOrFail(boolean success, float successWeight, float failWeight) { - return success ? successWeight : -failWeight; - } - - public static boolean isSuccess(Float weight) { - return weight != null && weight >= 0f; - } - - public static boolean isFailure(Float weight) { - return weight == null || weight < 0f; - } - - public static boolean isRejection(Float weight) { - return weight == null; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java index e13a30fbce..b55ea166f9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java @@ -1,6 +1,6 @@ package com.jme3.vulkan.devices; -import com.jme3.vulkan.Queue; +import com.jme3.vulkan.commands.Queue; import com.jme3.vulkan.VulkanInstance; import com.jme3.vulkan.surface.Surface; import org.lwjgl.system.MemoryStack; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java index f399405995..3de7445ffb 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java @@ -71,7 +71,7 @@ protected void build() { if (enableAllFeatures) { enabledFeatures.set(supportedFeatures); } else for (DeviceFeature f : features) { - if (DeviceWeights.isSuccess(f.evaluateFeatureSupport(supportedFeatures))) { + if (f.evaluateFeatureSupport(supportedFeatures) != null) { f.enableFeature(enabledFeatures); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java index dfa3239f16..2b65529ede 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -2,7 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; -import com.jme3.vulkan.CommandBuffer; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.buffers.MemoryRegion; import com.jme3.vulkan.flags.ImageUsageFlags; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index 153596eca9..c3ef56b3af 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -2,8 +2,8 @@ import com.jme3.asset.*; import com.jme3.util.BufferUtils; -import com.jme3.vulkan.CommandBuffer; -import com.jme3.vulkan.CommandPool; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.flags.BufferUsageFlags; import com.jme3.vulkan.flags.ImageUsageFlags; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java new file mode 100644 index 0000000000..973bb325f4 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java @@ -0,0 +1,41 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.commands.CommandBuffer; +import org.lwjgl.system.MemoryStack; + +import java.nio.LongBuffer; +import java.util.ArrayList; +import java.util.List; + +import static org.lwjgl.vulkan.VK10.*; + +public class Mesh { + + private GpuBuffer indexBuffer; + private final List vertexBuffers = new ArrayList<>(); + + public Mesh() { + + } + + public void bindVertexBuffers(CommandBuffer cmd) { + try (MemoryStack stack = MemoryStack.stackPush()) { + LongBuffer vertBufs = stack.mallocLong(vertexBuffers.size()); + LongBuffer offsets = stack.mallocLong(vertexBuffers.size()); + for (GpuBuffer v : vertexBuffers) { + vertBufs.put(v.getNativeObject()); + offsets.put(0); + } + vertBufs.flip(); + offsets.flip(); + vkCmdBindVertexBuffers(cmd.getBuffer(), 0, vertBufs, offsets); + vkCmdBindIndexBuffer(cmd.getBuffer(), indexBuffer.getNativeObject(), 0, VK_INDEX_TYPE_UINT32); + } + } + + public void draw(CommandBuffer cmd) { + vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.size() / Integer.BYTES, 1, 0, 0, 0); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java similarity index 92% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java index e1a90bc3e7..9b0023980a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/MeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.mesh; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java index d009355fe2..8361f22385 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java @@ -1,7 +1,7 @@ package com.jme3.vulkan.pass; import com.jme3.util.natives.Native; -import com.jme3.vulkan.CommandBuffer; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.VulkanObject; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java index aa1bce0d78..e6d6e5df9e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java @@ -1,8 +1,7 @@ package com.jme3.vulkan.pipelines; import com.jme3.util.natives.Native; -import com.jme3.vulkan.PipelineLayout; -import com.jme3.vulkan.ShaderModule; +import com.jme3.vulkan.shader.ShaderModule; import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkComputePipelineCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java index 0f53f9d8a9..bdf5a9c36a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java @@ -3,8 +3,10 @@ import com.jme3.util.natives.Native; import com.jme3.vulkan.*; import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.mesh.MeshDescription; import com.jme3.vulkan.pass.RenderPass; import com.jme3.vulkan.pipelines.states.*; +import com.jme3.vulkan.shader.ShaderModule; import org.lwjgl.vulkan.*; import java.nio.LongBuffer; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java index b362a7b8e9..6f3e88f884 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java @@ -1,7 +1,6 @@ package com.jme3.vulkan.pipelines; -import com.jme3.vulkan.CommandBuffer; -import com.jme3.vulkan.PipelineLayout; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.VulkanObject; import com.jme3.vulkan.devices.LogicalDevice; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineLayout.java similarity index 98% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineLayout.java index d91aedf86a..99fb221206 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/PipelineLayout.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineLayout.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.pipelines; import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.util.natives.Native; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java index a650b5b71a..2b781c7677 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java @@ -1,6 +1,6 @@ package com.jme3.vulkan.pipelines.states; -import com.jme3.vulkan.MeshDescription; +import com.jme3.vulkan.mesh.MeshDescription; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkPipelineVertexInputStateCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java similarity index 98% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java index 8b17e70813..3c1e9fb6b4 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/ShaderModule.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.shader; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java index b5a109f4c6..6ec8dc140a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -3,12 +3,14 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.*; -import com.jme3.vulkan.Queue; +import com.jme3.vulkan.commands.Queue; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; import com.jme3.vulkan.images.ImageView; import com.jme3.vulkan.pipelines.FrameBuffer; import com.jme3.vulkan.pass.RenderPass; +import com.jme3.vulkan.sync.Fence; +import com.jme3.vulkan.sync.Semaphore; import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -81,7 +83,7 @@ public PresentImage acquireNextImage(SwapchainUpdater updater, Semaphore semapho } } - public void present(com.jme3.vulkan.Queue presentQueue, PresentImage image, Semaphore wait) { + public void present(Queue presentQueue, PresentImage image, Semaphore wait) { try (MemoryStack stack = MemoryStack.stackPush()) { VkPresentInfoKHR info = VkPresentInfoKHR.calloc(stack) .sType(KHRSwapchain.VK_STRUCTURE_TYPE_PRESENT_INFO_KHR) @@ -208,7 +210,7 @@ public class Builder extends VulkanObject.Builder { private final VkSurfaceCapabilitiesKHR caps; private final VkSurfaceFormatKHR.Buffer formats; private final IntBuffer modes; - private final Collection queues = new ArrayList<>(); + private final Collection queues = new ArrayList<>(); private VkSurfaceFormatKHR selectedFormat; private VkExtent2D selectedExtent; @@ -274,7 +276,7 @@ protected void build() { } if (queues.size() > 1) { IntBuffer concurrent = stack.mallocInt(queues.size()); - for (com.jme3.vulkan.Queue q : queues) { + for (Queue q : queues) { concurrent.put(q.getFamilyIndex()); } concurrent.flip(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Fence.java similarity index 98% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Fence.java index 567787f769..b9b88146be 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Fence.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Fence.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.sync; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java similarity index 98% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java index 57f50196f6..25cfdff5be 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Semaphore.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.sync; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; From 6a3171c6346b4b20868ad3d23f63beade805aa29 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 9 Aug 2025 16:05:59 -0400 Subject: [PATCH 23/80] added MemorySize for clarity in allocating buffer sizes --- .../jme3test/vulkan/VulkanHelperTest.java | 7 +-- .../com/jme3/vulkan/buffers/GpuBuffer.java | 12 ++--- .../com/jme3/vulkan/buffers/MemorySize.java | 51 +++++++++++++++++++ .../jme3/vulkan/buffers/PersistentBuffer.java | 4 +- .../jme3/vulkan/buffers/StageableBuffer.java | 4 +- .../java/com/jme3/vulkan/shader/Material.java | 7 +++ 6 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemorySize.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/Material.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 2f031af6cb..2835d1d911 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -217,13 +217,13 @@ public void simpleInitApp() { // the cpu cannot directly access fast gpu memory. The solution is to // copy cpu-side data to a mutual staging buffer, then have the gpu copy // that data to faster memory. Hence, why we do two copy operations here. - vertexBuffer = new StageableBuffer(device, vertexData.capacity() * Float.BYTES, + vertexBuffer = new StageableBuffer(device, MemorySize.floats(vertexData.capacity()), new BufferUsageFlags().vertexBuffer(), new MemoryFlags().deviceLocal(), false); vertexBuffer.copy(stack, vertexData); // copy data to staging buffer vertexBuffer.transfer(transferPool); // transfer staged data to vertex buffer vertexBuffer.freeStagingBuffer(); // index buffer - indexBuffer = new StageableBuffer(device, indexData.capacity() * Integer.BYTES, + indexBuffer = new StageableBuffer(device, MemorySize.ints(indexData.capacity()), new BufferUsageFlags().indexBuffer(), new MemoryFlags().deviceLocal(), false); indexBuffer.copy(stack, indexData); indexBuffer.transfer(transferPool); @@ -310,7 +310,8 @@ private class Frame implements Consumer { private final DescriptorSet descriptorSet; public Frame() { - uniforms = new PersistentBuffer(device, 16 * Float.BYTES, + // using a persistent buffer because we will be writing to the buffer very often + uniforms = new PersistentBuffer(device, MemorySize.floats(16), new BufferUsageFlags().uniformBuffer(), new MemoryFlags().hostVisible().hostCoherent(), false); descriptorSet = descriptorPool.allocateSets(descriptorLayout)[0]; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index 2964505f4f..f9e308b914 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -23,17 +23,17 @@ public class GpuBuffer implements Native { private final LogicalDevice device; private final NativeReference ref; - private final int size; + private final MemorySize size; private final long id; protected final MemoryRegion memory; - public GpuBuffer(LogicalDevice device, int size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + public GpuBuffer(LogicalDevice device, MemorySize size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { this.device = device; this.size = size; try (MemoryStack stack = MemoryStack.stackPush()) { VkBufferCreateInfo create = VkBufferCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO) - .size(size) // size in bytes + .size(size.getBytes()) .usage(usage.getUsageFlags()) .sharingMode(VulkanUtils.sharingMode(concurrent)); LongBuffer idBuf = stack.mallocLong(1); @@ -70,7 +70,7 @@ public NativeReference getNativeReference() { } private void verifyBufferSize(Buffer buffer, long bytesPerElement) { - if (buffer.limit() * bytesPerElement > size) { + if (buffer.limit() * bytesPerElement > size.getBytes()) { throw new BufferOverflowException(); } } @@ -155,8 +155,8 @@ public void freeMemory() { memory.getNativeReference().destroy(); } - public int size() { - return size; // size in bytes + public MemorySize size() { + return size; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemorySize.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemorySize.java new file mode 100644 index 0000000000..20d64c22e0 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemorySize.java @@ -0,0 +1,51 @@ +package com.jme3.vulkan.buffers; + +public class MemorySize { + + private final int elements; + private final int bytesPerElement; + private final int bytes; + + public MemorySize(int elements, int bytesPerElement) { + this.elements = elements; + this.bytesPerElement = bytesPerElement; + this.bytes = this.elements * this.bytesPerElement; + } + + public int getElements() { + return elements; + } + + public int getBytesPerElement() { + return bytesPerElement; + } + + public int getBytes() { + return bytes; + } + + public static MemorySize bytes(int elements) { + return new MemorySize(elements, 1); + } + + public static MemorySize shorts(int elements) { + return new MemorySize(elements, Short.BYTES); + } + + public static MemorySize ints(int elements) { + return new MemorySize(elements, Integer.BYTES); + } + + public static MemorySize floats(int elements) { + return new MemorySize(elements, Float.BYTES); + } + + public static MemorySize doubles(int elements) { + return new MemorySize(elements, Double.BYTES); + } + + public static MemorySize longs(int elements) { + return new MemorySize(elements, Long.BYTES); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java index 496f91194c..9906cd952d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java @@ -10,10 +10,10 @@ public class PersistentBuffer extends GpuBuffer { private final long address; - public PersistentBuffer(LogicalDevice device, int size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + public PersistentBuffer(LogicalDevice device, MemorySize size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { super(device, size, usage, mem, concurrent); try (MemoryStack stack = MemoryStack.stackPush()) { - address = memory.map(stack, 0, size, 0).get(0); + address = memory.map(stack, 0, size.getBytes(), 0).get(0); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index 1815cefe7a..451ecac6f1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -14,7 +14,7 @@ public class StageableBuffer extends GpuBuffer { private final GpuBuffer stage; - public StageableBuffer(LogicalDevice device, int size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + public StageableBuffer(LogicalDevice device, MemorySize size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { super(device, size, usage.transferDst(), mem, concurrent); stage = new GpuBuffer(device, size, new BufferUsageFlags().transferSrc(), new MemoryFlags().hostVisible().hostCoherent(), concurrent); @@ -47,7 +47,7 @@ public void transfer(CommandPool transferPool, Semaphore wait, Semaphore signal, } CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); try (MemoryStack stack = MemoryStack.stackPush()) { - recordCopy(stack, commands, stage, 0, 0, size()); + recordCopy(stack, commands, stage, 0, 0, size().getBytes()); } commands.submit(wait, signal, fence); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/Material.java new file mode 100644 index 0000000000..63bf9e8166 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/Material.java @@ -0,0 +1,7 @@ +package com.jme3.vulkan.shader; + +public class Material { + + + +} From bcb70141f00a48898b7a14cd6df7bbfe280a85dd Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 12 Aug 2025 21:20:22 -0400 Subject: [PATCH 24/80] managed to create acceptable prototype material system (still much to be done) --- .../vulkan/VkGLCompatibilityTest.java | 32 ++++++ .../jme3test/vulkan/VulkanHelperTest.java | 21 ++-- .../vulkan/descriptors/BufferDescriptor.java | 2 +- .../vulkan/descriptors/BufferSetWriter.java | 14 +-- .../jme3/vulkan/descriptors/Descriptor.java | 43 +++---- .../vulkan/descriptors/DescriptorPool.java | 2 + .../vulkan/descriptors/DescriptorSet.java | 50 ++++++++- .../descriptors/DescriptorSetWriter.java | 33 +----- .../vulkan/descriptors/ImageSetWriter.java | 9 +- .../com/jme3/vulkan/descriptors/PoolSize.java | 20 +--- .../vulkan/descriptors/SetLayoutBinding.java | 21 +--- .../jme3/vulkan/material/BufferUniform.java | 25 +++++ .../vulkan/material/ExampleUniformBuffer.java | 49 ++++++++ .../com/jme3/vulkan/material/Material.java | 106 ++++++++++++++++++ .../com/jme3/vulkan/material/Uniform.java | 85 ++++++++++++++ .../vulkan/pipelines/GraphicsPipeline.java | 8 ++ .../com/jme3/vulkan/pipelines/Pipeline.java | 2 +- .../java/com/jme3/vulkan/shader/Material.java | 7 -- .../com/jme3/vulkan/shader/ShaderModule.java | 2 + .../jme3/vulkan/shader/UniformTestStruct.java | 99 ++++++++++++++++ .../resources/Shaders/VulkanFragTest.glsl | 2 +- .../resources/Shaders/VulkanVertTest.glsl | 28 ++++- .../resources/Shaders/VulkanVertTest.j4md | 19 ++++ 23 files changed, 554 insertions(+), 125 deletions(-) create mode 100644 jme3-examples/src/main/java/jme3test/vulkan/VkGLCompatibilityTest.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/ExampleUniformBuffer.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/Material.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java create mode 100644 jme3-testdata/src/main/resources/Shaders/VulkanVertTest.j4md diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VkGLCompatibilityTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VkGLCompatibilityTest.java new file mode 100644 index 0000000000..7109080075 --- /dev/null +++ b/jme3-examples/src/main/java/jme3test/vulkan/VkGLCompatibilityTest.java @@ -0,0 +1,32 @@ +package jme3test.vulkan; + +import com.jme3.app.FlyCamAppState; +import com.jme3.app.SimpleApplication; +import com.jme3.system.AppSettings; +import com.jme3.system.vulkan.LwjglVulkanContext; + +public class VkGLCompatibilityTest extends SimpleApplication { + + public static void main(String[] args) { + VulkanHelperTest app = new VulkanHelperTest(); + AppSettings settings = new AppSettings(true); + settings.setWidth(768); + settings.setHeight(768); + settings.setRenderer("CUSTOM" + LwjglVulkanContext.class.getName()); + app.setSettings(settings); + app.setShowSettings(false); + app.start(); + } + + public VkGLCompatibilityTest() { + super(new FlyCamAppState()); + } + + @Override + public void simpleInitApp() { + + Material material; + + } + +} diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 2835d1d911..72c3560c60 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -151,13 +151,17 @@ public void simpleInitApp() { s.selectImageCount(2); } + // Describes the layout of a descriptor set. The descriptor set + // will represent two uniforms: a uniform buffer at binding 0 + // requiring 1 descriptor, and an image sampler at binding 1 + // requiring 1 descriptor. descriptorLayout = new DescriptorSetLayout(device, - SetLayoutBinding.uniformBuffer(0, 1, VK_SHADER_STAGE_VERTEX_BIT), - SetLayoutBinding.combinedImageSampler(1, 1, VK_SHADER_STAGE_FRAGMENT_BIT)); + new SetLayoutBinding(Descriptor.UniformBuffer, 0, 1, VK_SHADER_STAGE_VERTEX_BIT), + new SetLayoutBinding(Descriptor.CombinedImageSampler, 1, 1, VK_SHADER_STAGE_FRAGMENT_BIT)); descriptorPool = new DescriptorPool(device, 3, - PoolSize.uniformBuffers(3), - PoolSize.storageBuffers(4), - PoolSize.combinedImageSamplers(2)); + new PoolSize(Descriptor.UniformBuffer, 3), + new PoolSize(Descriptor.StorageBuffer, 4), + new PoolSize(Descriptor.CombinedImageSampler, 2)); CommandPool transferPool = new CommandPool(device, physDevice.getGraphics(), true, false); @@ -315,8 +319,9 @@ public Frame() { new BufferUsageFlags().uniformBuffer(), new MemoryFlags().hostVisible().hostCoherent(), false); descriptorSet = descriptorPool.allocateSets(descriptorLayout)[0]; - descriptorSet.write(BufferSetWriter.uniformBuffers(0, 0, new BufferDescriptor(uniforms)), - ImageSetWriter.combinedImageSampler(1, 0, new ImageDescriptor(texture, Image.Layout.ShaderReadOnlyOptimal))); + descriptorSet.write( + new BufferSetWriter(Descriptor.UniformBuffer, 0, 0, new BufferDescriptor(uniforms)), + new ImageSetWriter(Descriptor.CombinedImageSampler, 1, 0, new ImageDescriptor(texture, Image.Layout.ShaderReadOnlyOptimal))); } @Override @@ -346,9 +351,9 @@ public void accept(Float tpf) { // material .fillFloatBuffer(uniforms.mapFloats(stack, 0, 16, 0), true); + uniforms.unmap(); vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), pipeline.getBindPoint().getVkEnum(), pipelineLayout.getNativeObject(), 0, stack.longs(descriptorSet.getId()), null); - uniforms.unmap(); // viewport VkViewport.Buffer vp = VkViewport.calloc(1, stack) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java index 46457084a0..89e413e35e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java @@ -9,7 +9,7 @@ public class BufferDescriptor { private final long offset, range; public BufferDescriptor(GpuBuffer buffer) { - this(buffer, 0, buffer.size()); + this(buffer, 0, buffer.size().getBytes()); } public BufferDescriptor(GpuBuffer buffer, long offset, long range) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java index 101aee971b..f0b27d7d61 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java @@ -4,13 +4,11 @@ import org.lwjgl.vulkan.VkDescriptorBufferInfo; import org.lwjgl.vulkan.VkWriteDescriptorSet; -import static org.lwjgl.vulkan.VK10.*; - -public class BufferSetWriter extends DescriptorSetWriter { +public class BufferSetWriter extends BaseDescriptorWriter { private final BufferDescriptor[] descriptors; - public BufferSetWriter(int type, int binding, int arrayElement, BufferDescriptor... descriptors) { + public BufferSetWriter(Descriptor type, int binding, int arrayElement, BufferDescriptor... descriptors) { super(type, binding, arrayElement, descriptors.length); this.descriptors = descriptors; } @@ -26,12 +24,4 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { write.pBufferInfo(info); } - public static BufferSetWriter uniformBuffers(int binding, int arrayElement, BufferDescriptor... descriptors) { - return new BufferSetWriter(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, binding, arrayElement, descriptors); - } - - public static BufferSetWriter storageBuffers(int binding, int arrayElement, BufferDescriptor... descriptors) { - return new BufferSetWriter(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, binding, arrayElement, descriptors); - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java index 17c99aa15b..415fd7f701 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java @@ -1,28 +1,29 @@ package com.jme3.vulkan.descriptors; -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; - -public class Descriptor implements Native { - - @Override - public Long getNativeObject() { - return 0L; - } - - @Override - public Runnable createNativeDestroyer() { - return null; - } - - @Override - public void prematureNativeDestruction() { - +import static org.lwjgl.vulkan.VK10.*; + +public enum Descriptor { + + UniformBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER), + UniformBufferDynamic(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC), + StorageBuffer(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER), + StorageBufferDynamic(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC), + CombinedImageSampler(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER), + Sampler(VK_DESCRIPTOR_TYPE_SAMPLER), + SampledImage(VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE), + InputAttachment(VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT), + StorageImage(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE), + StorageTexelBuffer(VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER), + UniformTexelBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER); + + private final int vkEnum; + + Descriptor(int vkEnum) { + this.vkEnum = vkEnum; } - @Override - public NativeReference getNativeReference() { - return null; + public int getVkEnum() { + return vkEnum; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java index 79de4a574e..e17daa2ba3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java @@ -75,4 +75,6 @@ public void reset() { vkResetDescriptorPool(device.getNativeObject(), id, 0); } + + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java index d68efa483e..c13db183de 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -1,9 +1,16 @@ package com.jme3.vulkan.descriptors; +import com.jme3.util.natives.Native; +import com.jme3.vulkan.VulkanObject; import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkWriteDescriptorSet; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + import static org.lwjgl.vulkan.VK10.*; public class DescriptorSet { @@ -12,6 +19,7 @@ public class DescriptorSet { private final DescriptorPool pool; private final DescriptorSetLayout layout; private final long id; + private final Collection writers = new ArrayList<>(); public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSetLayout layout, long id) { this.device = device; @@ -20,11 +28,36 @@ public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSet this.id = id; } + public void update() { + try (MemoryStack stack = MemoryStack.stackPush()) { + int updating = 0; + for (DescriptorSetWriter w : writers) { + if (w.isUpdateNeeded()) { + updating++; + } + } + if (updating > 0) { + VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(updating, stack); + for (DescriptorSetWriter w : writers) { + if (w.isUpdateNeeded()) { + w.populateWrite(stack, write.get() + .sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET) + .dstSet(id)); + } + } + write.flip(); + vkUpdateDescriptorSets(device.getNativeObject(), write, null); + } + } + } + public void write(DescriptorSetWriter... writers) { try (MemoryStack stack = MemoryStack.stackPush()) { VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(writers.length, stack); for (DescriptorSetWriter w : writers) { - w.populateWrite(stack, write.get().sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET).dstSet(id)); + w.populateWrite(stack, write.get() + .sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET) + .dstSet(id)); } write.flip(); vkUpdateDescriptorSets(device.getNativeObject(), write, null); @@ -32,6 +65,9 @@ public void write(DescriptorSetWriter... writers) { } public void free() { + if (pool.getNativeReference().isDestroyed()) { + return; + } try (MemoryStack stack = MemoryStack.stackPush()) { vkFreeDescriptorSets(device.getNativeObject(), pool.getNativeObject(), stack.longs(id)); } @@ -41,4 +77,16 @@ public long getId() { return id; } + public LogicalDevice getDevice() { + return device; + } + + public DescriptorPool getPool() { + return pool; + } + + public DescriptorSetLayout getLayout() { + return layout; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java index 22e2e24f0e..032a2375ab 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java @@ -3,37 +3,10 @@ import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkWriteDescriptorSet; -public class DescriptorSetWriter { +public interface DescriptorSetWriter { - private final int type, binding, arrayElement, descriptorCount; + void populateWrite(MemoryStack stack, VkWriteDescriptorSet write); - public DescriptorSetWriter(int type, int binding, int arrayElement, int descriptorCount) { - this.type = type; - this.binding = binding; - this.arrayElement = arrayElement; - this.descriptorCount = descriptorCount; - } - - public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { - write.descriptorType(type).dstBinding(binding) - .dstArrayElement(arrayElement) - .descriptorCount(descriptorCount); - } - - public int getType() { - return type; - } - - public int getBinding() { - return binding; - } - - public int getArrayElement() { - return arrayElement; - } - - public int getDescriptorCount() { - return descriptorCount; - } + boolean isUpdateNeeded(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java index 10001fcde4..b3d7d0c789 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java @@ -1,15 +1,14 @@ package com.jme3.vulkan.descriptors; import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkDescriptorImageInfo; import org.lwjgl.vulkan.VkWriteDescriptorSet; -public class ImageSetWriter extends DescriptorSetWriter { +public class ImageSetWriter extends BaseDescriptorWriter { private final ImageDescriptor[] descriptors; - public ImageSetWriter(int type, int binding, int arrayElement, ImageDescriptor... descriptors) { + public ImageSetWriter(Descriptor type, int binding, int arrayElement, ImageDescriptor... descriptors) { super(type, binding, arrayElement, descriptors.length); this.descriptors = descriptors; } @@ -25,8 +24,4 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { write.pImageInfo(info); } - public static ImageSetWriter combinedImageSampler(int binding, int arrayElement, ImageDescriptor... descriptors) { - return new ImageSetWriter(VK10.VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, binding, arrayElement, descriptors); - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java index 36838d5a88..11d2a4d036 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java @@ -7,15 +7,15 @@ public class PoolSize { - private final int type; + private final Descriptor type; private final int size; - public PoolSize(int type, int size) { + public PoolSize(Descriptor type, int size) { this.type = type; this.size = size; } - public int getType() { + public Descriptor getType() { return type; } @@ -23,22 +23,10 @@ public int getSize() { return size; } - public static PoolSize uniformBuffers(int size) { - return new PoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, size); - } - - public static PoolSize storageBuffers(int size) { - return new PoolSize(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, size); - } - - public static PoolSize combinedImageSamplers(int size) { - return new PoolSize(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, size); - } - public static VkDescriptorPoolSize.Buffer aggregate(MemoryStack stack, PoolSize... sizes) { VkDescriptorPoolSize.Buffer buffer = VkDescriptorPoolSize.calloc(sizes.length, stack); for (PoolSize poolSize : sizes) { - buffer.get().set(poolSize.type, poolSize.size); + buffer.get().set(poolSize.type.getVkEnum(), poolSize.size); } buffer.flip(); return buffer; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java index 520e153467..a3c395e256 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java @@ -6,9 +6,10 @@ public class SetLayoutBinding { - private final int type, binding, descriptors, stages; + private final Descriptor type; + private final int binding, descriptors, stages; - public SetLayoutBinding(int type, int binding, int descriptors, int stages) { + public SetLayoutBinding(Descriptor type, int binding, int descriptors, int stages) { this.type = type; this.binding = binding; this.descriptors = descriptors; @@ -17,14 +18,14 @@ public SetLayoutBinding(int type, int binding, int descriptors, int stages) { @SuppressWarnings("DataFlowIssue") public void fillLayoutBinding(VkDescriptorSetLayoutBinding layoutBinding) { - layoutBinding.descriptorType(type) + layoutBinding.descriptorType(type.getVkEnum()) .binding(binding) .descriptorCount(descriptors) .stageFlags(stages) .pImmutableSamplers(null); } - public int getType() { + public Descriptor getType() { return type; } @@ -40,16 +41,4 @@ public int getStages() { return stages; } - public static SetLayoutBinding uniformBuffer(int binding, int descriptors, int stages) { - return new SetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, binding, descriptors, stages); - } - - public static SetLayoutBinding storageBuffer(int binding, int descriptors, int stages) { - return new SetLayoutBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, binding, descriptors, stages); - } - - public static SetLayoutBinding combinedImageSampler(int binding, int descriptors, int stages) { - return new SetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, binding, descriptors, stages); - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java new file mode 100644 index 0000000000..8035126e44 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java @@ -0,0 +1,25 @@ +package com.jme3.vulkan.material; + +import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.descriptors.Descriptor; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkDescriptorBufferInfo; +import org.lwjgl.vulkan.VkWriteDescriptorSet; + +public class BufferUniform extends Uniform { + + public BufferUniform(String name, Descriptor type, int setIndex, int bindingIndex) { + super(name, type, setIndex, bindingIndex); + } + + @Override + public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + super.populateWrite(stack, write); + VkDescriptorBufferInfo.Buffer info = VkDescriptorBufferInfo.calloc(1, stack) + .buffer(value.getNativeObject()) + .offset(0L) + .range(value.size().getBytes()); + write.pBufferInfo(info); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/ExampleUniformBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/ExampleUniformBuffer.java new file mode 100644 index 0000000000..1eaf6e2409 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/ExampleUniformBuffer.java @@ -0,0 +1,49 @@ +package com.jme3.vulkan.material; + +import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.descriptors.Descriptor; +import com.jme3.vulkan.descriptors.DescriptorSetWriter; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkDescriptorBufferInfo; +import org.lwjgl.vulkan.VkWriteDescriptorSet; + +public class ExampleUniformBuffer implements DescriptorSetWriter { + + private final int binding; + private GpuBuffer buffer; + private boolean updateFlag = true; + + public ExampleUniformBuffer(int binding, GpuBuffer buffer) { + this.binding = binding; + this.buffer = buffer; + } + + @Override + public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + VkDescriptorBufferInfo.Buffer descriptors = VkDescriptorBufferInfo.calloc(1, stack) + .buffer(buffer.getNativeObject()) + .offset(0) + .range(buffer.size().getBytes()); + write.descriptorType(Descriptor.UniformBuffer.getVkEnum()) + .dstBinding(binding) + .dstArrayElement(0) // todo: make configurable? + .descriptorCount(descriptors.limit()) + .pBufferInfo(descriptors); + updateFlag = false; + } + + @Override + public boolean isUpdateNeeded() { + return updateFlag; + } + + public void setBuffer(GpuBuffer buffer) { + this.buffer = buffer; + this.updateFlag = true; + } + + public GpuBuffer getBuffer() { + return buffer; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java new file mode 100644 index 0000000000..4aa0e97035 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -0,0 +1,106 @@ +package com.jme3.vulkan.material; + +import com.jme3.util.IntMap; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.descriptors.*; +import com.jme3.vulkan.pipelines.Pipeline; +import org.lwjgl.system.MemoryStack; + +import java.nio.LongBuffer; +import java.util.*; + +import static org.lwjgl.vulkan.VK10.*; + +/** + * Relates shader uniform values to sets and bindings. + */ +public class Material { + + private final Pipeline pipeline; + private final DescriptorSet[] sets; + private final Map> uniforms = new HashMap<>(); + + public Material(Pipeline pipeline, DescriptorPool pool, Collection> uniforms) { + this.pipeline = pipeline; + for (Uniform u : uniforms) { + if (this.uniforms.put(u.getName(), u) != null) { + throw new IllegalArgumentException("Duplicate uniform name: " + u.getName()); + } + } + this.sets = allocateSets(pipeline, pool, uniforms); + } + + private DescriptorSet[] allocateSets(Pipeline pipeline, DescriptorPool pool, Collection> uniforms) { + // group uniforms by set index + IntMap>> uniformsBySet = new IntMap<>(); + for (Uniform u : uniforms) { + List> set = uniformsBySet.get(u.getSetIndex()); + if (set == null) { + set = new ArrayList<>(); + uniformsBySet.put(u.getSetIndex(), set); + } + set.add(u); + } + // there must be enough layouts for all sets to have a different layout + if (uniformsBySet.size() > pipeline.getLayout().getDescriptorSetLayouts().length) { + throw new IllegalArgumentException("Pipeline layout does not contain enough descriptor set layouts."); + } + List availableLayouts = new LinkedList<>( + Arrays.asList(pipeline.getLayout().getDescriptorSetLayouts())); + List matchedLayouts = new ArrayList<>(uniformsBySet.size()); + // for each set definition, find a set layout that matches the definition + setLoop: for (IntMap.Entry>> set : uniformsBySet) { + // Search for a layout that is compatible with the set definition + layoutLoop: for (Iterator it = availableLayouts.iterator(); it.hasNext();) { + DescriptorSetLayout layout = it.next(); + requiredLoop: for (Uniform u : set.getValue()) { + // find a layout binding that matches the requirement + for (SetLayoutBinding available : layout.getBindings()) { + if (u.isBindingCompatible(available)) { + // Assign this binding to the uniform. + // todo: figure out a safer way to do this + u.setBinding(available); + continue requiredLoop; + } + } + // Layout does not contain a binding at the requested index. + // Layout is incompatible, try the next layout. + continue layoutLoop; + } + // Layout is compatible with the set definition + matchedLayouts.add(layout); + it.remove(); + continue setLoop; + } + // No layout is available that is compatible with the set definition + throw new IllegalArgumentException("Set layout required by material is not supported by the pipeline."); + } + if (matchedLayouts.size() != uniformsBySet.size()) { + // Not every set definition found a compatible layout. This error + // should technically be reported by a previous error, but it + // doesn't hurt to be totally sure. + throw new IllegalArgumentException("Material requirements are not compatible with pipeline."); + } + return pool.allocateSets(matchedLayouts.toArray(new DescriptorSetLayout[0])); + } + + public void bind(CommandBuffer cmd) { + for (DescriptorSet set : sets) { + set.update(); // write updates to the set + } + try (MemoryStack stack = MemoryStack.stackPush()) { + LongBuffer setBuf = stack.mallocLong(sets.length); + for (DescriptorSet s : sets) { + setBuf.put(s.getId()); + } + setBuf.flip(); + vkCmdBindDescriptorSets(cmd.getBuffer(), pipeline.getBindPoint().getVkEnum(), + pipeline.getLayout().getNativeObject(), 0, setBuf, null); + } + } + + public Uniform get(String name) { + return uniforms.get(name); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java new file mode 100644 index 0000000000..2f44daf544 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java @@ -0,0 +1,85 @@ +package com.jme3.vulkan.material; + +import com.jme3.vulkan.descriptors.Descriptor; +import com.jme3.vulkan.descriptors.DescriptorSetWriter; +import com.jme3.vulkan.descriptors.SetLayoutBinding; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkWriteDescriptorSet; + +public abstract class Uniform implements DescriptorSetWriter { + + private final String name; + private final Descriptor type; + private final int setIndex; + private final int bindingIndex; + private SetLayoutBinding binding; + private boolean updateFlag = true; + protected T value; + + public Uniform(String name, Descriptor type, int setIndex, int bindingIndex) { + this.name = name; + this.type = type; + this.setIndex = setIndex; + this.bindingIndex = bindingIndex; + } + + @Override + public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + write.descriptorType(type.getVkEnum()) + .dstBinding(binding.getBinding()) + .dstArrayElement(0) + .descriptorCount(1); + } + + @Override + public boolean isUpdateNeeded() { + return updateFlag; + } + + public boolean isBindingCompatible(SetLayoutBinding binding) { + return binding.getType() == type && binding.getBinding() == bindingIndex; + } + + public void setBinding(SetLayoutBinding binding) { + if (!isBindingCompatible(binding)) { + throw new IllegalArgumentException("Incompatible binding provided."); + } + this.binding = binding; + } + + public void setValue(T value) { + if (this.value != value) { + setUpdateNeeded(); + } + this.value = value; + } + + public void setUpdateNeeded() { + updateFlag = true; + } + + public String getName() { + return name; + } + + public Descriptor getType() { + return type; + } + + public SetLayoutBinding getBinding() { + return binding; + } + + public int getSetIndex() { + return setIndex; + } + + public int getBindingIndex() { + return bindingIndex; + } + + public T getValue() { + return value; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java index bdf5a9c36a..d4a9eddc2b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java @@ -30,6 +30,14 @@ public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPa this.mesh = mesh; } + public RenderPass getCompat() { + return compat; + } + + public int getSubpassIndex() { + return subpassIndex; + } + public Builder build() { return new Builder(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java index 6f3e88f884..3e0ec6ce30 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java @@ -6,7 +6,7 @@ import static org.lwjgl.vulkan.VK10.*; -public class Pipeline extends VulkanObject { +public abstract class Pipeline extends VulkanObject { protected final LogicalDevice device; protected final PipelineBindPoint bindPoint; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/Material.java deleted file mode 100644 index 63bf9e8166..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/Material.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.jme3.vulkan.shader; - -public class Material { - - - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java index 3c1e9fb6b4..aa488b4c23 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java @@ -8,6 +8,8 @@ import org.lwjgl.vulkan.VkShaderModuleCreateInfo; import java.nio.ByteBuffer; +import java.util.HashMap; +import java.util.Map; import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java new file mode 100644 index 0000000000..40bd2fa536 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java @@ -0,0 +1,99 @@ +package com.jme3.vulkan.shader; + +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.system.NativeResource; +import org.lwjgl.system.Struct; +import org.lwjgl.system.StructBuffer; + +import java.nio.ByteBuffer; + +public class UniformTestStruct extends Struct { + + public static final int SIZEOF; + public static final int ALIGNOF; + + public static final int X, Y, Z, W; + + static { + Layout layout = __struct( + __member(Float.BYTES), + __member(Float.BYTES), + __member(Float.BYTES), + __member(Float.BYTES) + ); + SIZEOF = layout.getSize(); + ALIGNOF = layout.getAlignment(); + X = layout.offsetof(0); + Y = layout.offsetof(1); + Z = layout.offsetof(2); + W = layout.offsetof(3); + } + + public UniformTestStruct(ByteBuffer container) { + this(MemoryUtil.memAddress(container), __checkContainer(container, SIZEOF)); + } + + protected UniformTestStruct(long address, ByteBuffer container) { + super(address, container); + } + + @Override + protected UniformTestStruct create(long address, ByteBuffer container) { + return new UniformTestStruct(address, container); + } + + @Override + public int sizeof() { + return SIZEOF; + } + + public float x() { + return nx(address()); + } + + public void x(float x) { + nx(address(), x); + } + + public static float nx(long struct) { + return MemoryUtil.memGetFloat(struct + X); + } + + public static void nx(long struct, float x) { + MemoryUtil.memPutFloat(struct + X, x); + } + + public static UniformTestStruct calloc() { + return new UniformTestStruct(MemoryUtil.nmemCallocChecked(1, SIZEOF), null); + } + + public static class Buffer extends StructBuffer implements NativeResource { + + private static final UniformTestStruct FACTORY = new UniformTestStruct(-1L, null); + + protected Buffer(ByteBuffer container, int remaining) { + super(container, remaining); + } + + protected Buffer(long address, ByteBuffer container, int mark, int position, int limit, int capacity) { + super(address, container, mark, position, limit, capacity); + } + + @Override + protected UniformTestStruct getElementFactory() { + return null; + } + + @Override + protected Buffer self() { + return this; + } + + @Override + protected Buffer create(long address, ByteBuffer container, int mark, int position, int limit, int capacity) { + return new Buffer(address, container, mark, position, limit, capacity); + } + + } + +} diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl index 945951f055..0055166028 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl @@ -5,7 +5,7 @@ layout(location = 1) in vec2 texCoord; layout(location = 0) out vec4 outColor; -layout(binding = 1) uniform sampler2D colorTexture; +layout(set = 0, binding = 1) uniform sampler2D colorTexture; void main() { outColor = texture(colorTexture, texCoord) * vec4(fragColor, 1.0); diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl index 39ce3e72bb..643876adb8 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl @@ -1,5 +1,11 @@ #version 450 +// added by preprocessor +#define VULKAN 1 +#ifdef OPENGL + // GLSLCompat stuff +#endif + layout (location = 0) in vec3 inPosition; layout (location = 1) in vec3 inColor; layout (location = 2) in vec2 inTexCoord; @@ -7,12 +13,26 @@ layout (location = 2) in vec2 inTexCoord; layout (location = 0) out vec3 fragColor; layout (location = 1) out vec2 texCoord; -layout (binding = 0) uniform UniformBufferObject { - mat4 worldViewProjectionMatrix; -} ubo; +#use com.jme3.vulkan.material.UniformBuffer as UniformBuffer + +#param Camera UniformBuffer(set = 0, binding = 0) +layout (Camera) uniform CameraBuffer { + mat4 viewProjectionMatrix; +} cam; + +#param Material UniformBuffer(set = 1, binding = 0) +layout (Material) uniform MaterialBuffer { + vec3 color; + float metallic; + float roughness; +} mat; +#param Geometry UniformBuffer(set = 2, binding = 0) +layout (Geometry) uniform GeometryBuffer { + mat4 worldMatrix; +} geom; void main() { - gl_Position = ubo.worldViewProjectionMatrix * vec4(inPosition, 1.0); + gl_Position = cam.viewProjectionMatrix * geom.worldMatrix * vec4(inPosition, 1.0); fragColor = inColor; texCoord = inTexCoord; } \ No newline at end of file diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.j4md b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.j4md new file mode 100644 index 0000000000..1d14be2c60 --- /dev/null +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.j4md @@ -0,0 +1,19 @@ +MaterialDef VulkanVertTest { + + Imports { + UniformBuffer : com.jme3.vulkan.material.UniformBuffer + } + + Vulkan { + Set { + UniformBuffer Camera (vertex) + } + Set { + UniformBuffer Material (fragment) + } + Set { + UniformBuffer Geometry (vertex) + } + } + +} \ No newline at end of file From b1685538825a6716a4181382944b71921ed9d4bd Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 12 Aug 2025 21:20:26 -0400 Subject: [PATCH 25/80] managed to create acceptable prototype material system (still much to be done) --- .../descriptors/BaseDescriptorWriter.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java new file mode 100644 index 0000000000..0e2a623e4d --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java @@ -0,0 +1,46 @@ +package com.jme3.vulkan.descriptors; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkWriteDescriptorSet; + +public class BaseDescriptorWriter implements DescriptorSetWriter { + + private final Descriptor type; + private final int binding, arrayElement, descriptorCount; + + public BaseDescriptorWriter(Descriptor type, int binding, int arrayElement, int descriptorCount) { + this.type = type; + this.binding = binding; + this.arrayElement = arrayElement; + this.descriptorCount = descriptorCount; + } + + @Override + public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + write.descriptorType(type.getVkEnum()).dstBinding(binding) + .dstArrayElement(arrayElement) + .descriptorCount(descriptorCount); + } + + @Override + public boolean isUpdateNeeded() { + throw new UnsupportedOperationException(); + } + + public Descriptor getType() { + return type; + } + + public int getBinding() { + return binding; + } + + public int getArrayElement() { + return arrayElement; + } + + public int getDescriptorCount() { + return descriptorCount; + } + +} From 6c0dbaf794fdb4484bcb1af8f7fa5031e6ed53eb Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:52:04 -0400 Subject: [PATCH 26/80] altered material system slightly --- .../vulkan/descriptors/DescriptorSet.java | 28 ++--- .../jme3/vulkan/material/BufferUniform.java | 4 +- .../com/jme3/vulkan/material/Material.java | 100 ++++++------------ .../com/jme3/vulkan/material/MaterialDef.java | 7 ++ .../vulkan/material/PBRLightingMaterial.java | 11 ++ .../com/jme3/vulkan/material/Uniform.java | 26 +---- .../com/jme3/vulkan/material/UniformSet.java | 86 +++++++++++++++ 7 files changed, 153 insertions(+), 109 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/MaterialDef.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/PBRLightingMaterial.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java index c13db183de..2eec597d24 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -19,7 +19,6 @@ public class DescriptorSet { private final DescriptorPool pool; private final DescriptorSetLayout layout; private final long id; - private final Collection writers = new ArrayList<>(); public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSetLayout layout, long id) { this.device = device; @@ -28,14 +27,9 @@ public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSet this.id = id; } - public void update() { + public void update(boolean force, DescriptorSetWriter... writers) { try (MemoryStack stack = MemoryStack.stackPush()) { - int updating = 0; - for (DescriptorSetWriter w : writers) { - if (w.isUpdateNeeded()) { - updating++; - } - } + int updating = countWritersToUpdate(force, writers); if (updating > 0) { VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(updating, stack); for (DescriptorSetWriter w : writers) { @@ -51,17 +45,17 @@ public void update() { } } - public void write(DescriptorSetWriter... writers) { - try (MemoryStack stack = MemoryStack.stackPush()) { - VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(writers.length, stack); - for (DescriptorSetWriter w : writers) { - w.populateWrite(stack, write.get() - .sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET) - .dstSet(id)); + private int countWritersToUpdate(boolean force, DescriptorSetWriter... writers) { + if (force) { + return writers.length; + } + int updating = 0; + for (DescriptorSetWriter w : writers) { + if (w.isUpdateNeeded()) { + updating++; } - write.flip(); - vkUpdateDescriptorSets(device.getNativeObject(), write, null); } + return updating; } public void free() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java index 8035126e44..8f5e97cbba 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java @@ -8,8 +8,8 @@ public class BufferUniform extends Uniform { - public BufferUniform(String name, Descriptor type, int setIndex, int bindingIndex) { - super(name, type, setIndex, bindingIndex); + public BufferUniform(String name, Descriptor type, int bindingIndex) { + super(name, type, bindingIndex); } @Override diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index 4aa0e97035..edfb930108 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -1,11 +1,12 @@ package com.jme3.vulkan.material; -import com.jme3.util.IntMap; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.pipelines.Pipeline; +import com.jme3.vulkan.pipelines.PipelineLayout; import org.lwjgl.system.MemoryStack; +import java.lang.ref.WeakReference; import java.nio.LongBuffer; import java.util.*; @@ -16,82 +17,42 @@ */ public class Material { - private final Pipeline pipeline; - private final DescriptorSet[] sets; - private final Map> uniforms = new HashMap<>(); + private final DescriptorPool pool; + private final List uniforms = new ArrayList<>(); - public Material(Pipeline pipeline, DescriptorPool pool, Collection> uniforms) { - this.pipeline = pipeline; - for (Uniform u : uniforms) { - if (this.uniforms.put(u.getName(), u) != null) { - throw new IllegalArgumentException("Duplicate uniform name: " + u.getName()); - } - } - this.sets = allocateSets(pipeline, pool, uniforms); + public Material(DescriptorPool pool) { + this.pool = pool; } - private DescriptorSet[] allocateSets(Pipeline pipeline, DescriptorPool pool, Collection> uniforms) { - // group uniforms by set index - IntMap>> uniformsBySet = new IntMap<>(); - for (Uniform u : uniforms) { - List> set = uniformsBySet.get(u.getSetIndex()); - if (set == null) { - set = new ArrayList<>(); - uniformsBySet.put(u.getSetIndex(), set); - } - set.add(u); - } - // there must be enough layouts for all sets to have a different layout - if (uniformsBySet.size() > pipeline.getLayout().getDescriptorSetLayouts().length) { - throw new IllegalArgumentException("Pipeline layout does not contain enough descriptor set layouts."); - } - List availableLayouts = new LinkedList<>( + public void bind(CommandBuffer cmd, Pipeline pipeline) { + LinkedList availableLayouts = new LinkedList<>( Arrays.asList(pipeline.getLayout().getDescriptorSetLayouts())); - List matchedLayouts = new ArrayList<>(uniformsBySet.size()); - // for each set definition, find a set layout that matches the definition - setLoop: for (IntMap.Entry>> set : uniformsBySet) { - // Search for a layout that is compatible with the set definition - layoutLoop: for (Iterator it = availableLayouts.iterator(); it.hasNext();) { - DescriptorSetLayout layout = it.next(); - requiredLoop: for (Uniform u : set.getValue()) { - // find a layout binding that matches the requirement - for (SetLayoutBinding available : layout.getBindings()) { - if (u.isBindingCompatible(available)) { - // Assign this binding to the uniform. - // todo: figure out a safer way to do this - u.setBinding(available); - continue requiredLoop; - } - } - // Layout does not contain a binding at the requested index. - // Layout is incompatible, try the next layout. - continue layoutLoop; - } - // Layout is compatible with the set definition - matchedLayouts.add(layout); - it.remove(); - continue setLoop; + ArrayList allocationLayouts = new ArrayList<>(availableLayouts.size()); + ArrayList allocationTargets = new ArrayList<>(availableLayouts.size()); + for (UniformSet set : uniforms) { + DescriptorSetLayout allocation = set.selectActiveSet(availableLayouts); + if (allocation != null) { + allocationLayouts.add(allocation); + allocationTargets.add(set); } - // No layout is available that is compatible with the set definition - throw new IllegalArgumentException("Set layout required by material is not supported by the pipeline."); } - if (matchedLayouts.size() != uniformsBySet.size()) { - // Not every set definition found a compatible layout. This error - // should technically be reported by a previous error, but it - // doesn't hurt to be totally sure. - throw new IllegalArgumentException("Material requirements are not compatible with pipeline."); + if (!allocationLayouts.isEmpty()) { + if (allocationLayouts.size() != allocationTargets.size()) { + throw new IllegalStateException("Each layout must have a corresponding target uniform set."); + } + DescriptorSet[] allocatedSets = pool.allocateSets( + allocationLayouts.toArray(new DescriptorSetLayout[0])); + for (int i = 0; i < allocatedSets.length; i++) { + allocationTargets.get(i).addActiveSet(allocatedSets[i]); + } } - return pool.allocateSets(matchedLayouts.toArray(new DescriptorSetLayout[0])); - } - - public void bind(CommandBuffer cmd) { - for (DescriptorSet set : sets) { + for (UniformSet set : uniforms) { set.update(); // write updates to the set } try (MemoryStack stack = MemoryStack.stackPush()) { - LongBuffer setBuf = stack.mallocLong(sets.length); - for (DescriptorSet s : sets) { - setBuf.put(s.getId()); + LongBuffer setBuf = stack.mallocLong(uniforms.size()); + for (UniformSet s : uniforms) { + setBuf.put(s.getActiveSet().getId()); } setBuf.flip(); vkCmdBindDescriptorSets(cmd.getBuffer(), pipeline.getBindPoint().getVkEnum(), @@ -99,8 +60,9 @@ public void bind(CommandBuffer cmd) { } } - public Uniform get(String name) { - return uniforms.get(name); + protected UniformSet addSet(UniformSet set) { + uniforms.add(set); + return set; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/MaterialDef.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/MaterialDef.java new file mode 100644 index 0000000000..a15500246f --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/MaterialDef.java @@ -0,0 +1,7 @@ +package com.jme3.vulkan.material; + +public class MaterialDef { + + + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/PBRLightingMaterial.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/PBRLightingMaterial.java new file mode 100644 index 0000000000..a35809bc8b --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/PBRLightingMaterial.java @@ -0,0 +1,11 @@ +package com.jme3.vulkan.material; + +import com.jme3.vulkan.descriptors.DescriptorPool; + +public class PBRLightingMaterial extends Material { + + public PBRLightingMaterial(DescriptorPool pool) { + super(pool); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java index 2f44daf544..fd7b823e04 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java @@ -10,23 +10,20 @@ public abstract class Uniform implements DescriptorSetWriter { private final String name; private final Descriptor type; - private final int setIndex; private final int bindingIndex; - private SetLayoutBinding binding; private boolean updateFlag = true; protected T value; - public Uniform(String name, Descriptor type, int setIndex, int bindingIndex) { + public Uniform(String name, Descriptor type, int bindingIndex) { this.name = name; this.type = type; - this.setIndex = setIndex; this.bindingIndex = bindingIndex; } @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { write.descriptorType(type.getVkEnum()) - .dstBinding(binding.getBinding()) + .dstBinding(bindingIndex) .dstArrayElement(0) .descriptorCount(1); } @@ -37,14 +34,9 @@ public boolean isUpdateNeeded() { } public boolean isBindingCompatible(SetLayoutBinding binding) { - return binding.getType() == type && binding.getBinding() == bindingIndex; - } - - public void setBinding(SetLayoutBinding binding) { - if (!isBindingCompatible(binding)) { - throw new IllegalArgumentException("Incompatible binding provided."); - } - this.binding = binding; + return binding.getType() == type + && binding.getBinding() == bindingIndex + && binding.getDescriptors() == 1; } public void setValue(T value) { @@ -66,14 +58,6 @@ public Descriptor getType() { return type; } - public SetLayoutBinding getBinding() { - return binding; - } - - public int getSetIndex() { - return setIndex; - } - public int getBindingIndex() { return bindingIndex; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java new file mode 100644 index 0000000000..9f51a57650 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -0,0 +1,86 @@ +package com.jme3.vulkan.material; + +import com.jme3.vulkan.descriptors.DescriptorSet; +import com.jme3.vulkan.descriptors.DescriptorSetLayout; +import com.jme3.vulkan.descriptors.SetLayoutBinding; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class UniformSet { + + private final Uniform[] uniforms; + private final List sets = new ArrayList<>(); + private DescriptorSet activeSet; + private boolean updateFlag = true; + + public UniformSet(Uniform... uniforms) { + this.uniforms = uniforms; + } + + public void addActiveSet(DescriptorSet activeSet) { + if (this.activeSet == activeSet) { + updateFlag = true; + } + this.activeSet = activeSet; + sets.add(activeSet); + } + + public DescriptorSetLayout selectActiveSet(List availableLayouts) { + if (activeSet == null || !availableLayouts.remove(activeSet.getLayout())) { + for (DescriptorSet s : sets) { + if (availableLayouts.remove(s.getLayout())) { + this.activeSet = s; + return null; + } + } + // Search for a layout that is compatible with the set definition + layoutLoop: for (Iterator it = availableLayouts.iterator(); it.hasNext();) { + DescriptorSetLayout layout = it.next(); + requiredLoop: for (Uniform u : uniforms) { + // find a layout binding that matches the requirement + for (SetLayoutBinding available : layout.getBindings()) { + if (u.isBindingCompatible(available)) { + // compatible binding found + continue requiredLoop; + } + } + // Layout does not contain a binding at the requested index. + // Layout is incompatible, try the next layout. + continue layoutLoop; + } + // Layout is compatible with the set definition + it.remove(); + return layout; + } + throw new IllegalStateException("Pipeline layout does not support uniform set."); + } + return null; + } + + public void update() { + if (activeSet == null) { + throw new NullPointerException("No descriptor set selected."); + } + activeSet.update(updateFlag, uniforms); + updateFlag = false; + } + + public void setActiveSet(DescriptorSet activeSet) { + this.activeSet = activeSet; + } + + public Uniform[] getUniforms() { + return uniforms; + } + + public List getAllocatedSets() { + return sets; + } + + public DescriptorSet getActiveSet() { + return activeSet; + } + +} From f7d3679ebb540fe2f2782f09b4368098e8085035 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Wed, 13 Aug 2025 13:21:14 -0400 Subject: [PATCH 27/80] basic material system is working --- .../vulkan/VkGLCompatibilityTest.java | 2 +- .../jme3test/vulkan/VulkanHelperTest.java | 33 ++++++++++------ .../java/com/jme3/shaderc/ShadercLoader.java | 28 ++++++++------ .../com/jme3/vulkan/buffers/GpuBuffer.java | 7 ++++ .../descriptors/BaseDescriptorWriter.java | 5 --- .../descriptors/DescriptorSetWriter.java | 4 +- .../jme3/vulkan/images/VulkanImageLoader.java | 3 +- .../jme3/vulkan/material/BufferUniform.java | 4 ++ .../com/jme3/vulkan/material/Material.java | 28 ++++++++++++-- .../vulkan/material/PBRLightingMaterial.java | 11 ------ .../jme3/vulkan/material/TestMaterial.java | 29 ++++++++++++++ .../jme3/vulkan/material/TextureUniform.java | 38 +++++++++++++++++++ .../com/jme3/vulkan/material/Uniform.java | 12 +++++- .../com/jme3/vulkan/material/UniformSet.java | 8 ++++ .../main/java/com/jme3/vulkan/mesh/Mesh.java | 2 +- .../jme3/vulkan/shader/UniformTestStruct.java | 4 ++ .../resources/Shaders/VulkanVertTest.glsl | 26 ++----------- 17 files changed, 174 insertions(+), 70 deletions(-) delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/PBRLightingMaterial.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TextureUniform.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VkGLCompatibilityTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VkGLCompatibilityTest.java index 7109080075..1acc6a3bac 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VkGLCompatibilityTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VkGLCompatibilityTest.java @@ -25,7 +25,7 @@ public VkGLCompatibilityTest() { @Override public void simpleInitApp() { - Material material; + //Material material; } diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 72c3560c60..27b1c53fba 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -21,6 +21,7 @@ import com.jme3.vulkan.flags.MemoryFlags; import com.jme3.vulkan.flags.BufferUsageFlags; import com.jme3.vulkan.images.*; +import com.jme3.vulkan.material.TestMaterial; import com.jme3.vulkan.pass.Attachment; import com.jme3.vulkan.pass.Subpass; import com.jme3.vulkan.pipelines.GraphicsPipeline; @@ -310,18 +311,24 @@ private class Frame implements Consumer { private final Fence inFlight = new Fence(device, true); // material - private final GpuBuffer uniforms; - private final DescriptorSet descriptorSet; +// private final GpuBuffer uniforms; +// private final DescriptorSet descriptorSet; + private final TestMaterial material = new TestMaterial(descriptorPool); public Frame() { // using a persistent buffer because we will be writing to the buffer very often - uniforms = new PersistentBuffer(device, MemorySize.floats(16), +// uniforms = new PersistentBuffer(device, MemorySize.floats(16), +// new BufferUsageFlags().uniformBuffer(), +// new MemoryFlags().hostVisible().hostCoherent(), false); +// descriptorSet = descriptorPool.allocateSets(descriptorLayout)[0]; +// descriptorSet.update(true, +// new BufferSetWriter(Descriptor.UniformBuffer, 0, 0, new BufferDescriptor(uniforms)), +// new ImageSetWriter(Descriptor.CombinedImageSampler, 1, 0, new ImageDescriptor(texture, Image.Layout.ShaderReadOnlyOptimal))); + material.getMatrices().setValue(new PersistentBuffer(device, + MemorySize.floats(16), new BufferUsageFlags().uniformBuffer(), - new MemoryFlags().hostVisible().hostCoherent(), false); - descriptorSet = descriptorPool.allocateSets(descriptorLayout)[0]; - descriptorSet.write( - new BufferSetWriter(Descriptor.UniformBuffer, 0, 0, new BufferDescriptor(uniforms)), - new ImageSetWriter(Descriptor.CombinedImageSampler, 1, 0, new ImageDescriptor(texture, Image.Layout.ShaderReadOnlyOptimal))); + new MemoryFlags().hostVisible().hostCoherent(), false)); + material.getBaseColorMap().setValue(texture); } @Override @@ -348,12 +355,14 @@ public void accept(Float tpf) { // geometry modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y)); cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()) + .fillFloatBuffer( // material - .fillFloatBuffer(uniforms.mapFloats(stack, 0, 16, 0), true); - uniforms.unmap(); - vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), pipeline.getBindPoint().getVkEnum(), - pipelineLayout.getNativeObject(), 0, stack.longs(descriptorSet.getId()), null); + material.getMatrices().getValue().mapFloats(stack, 0, 16, 0), true); + material.getMatrices().getValue().unmap(); + material.bind(graphicsCommands, pipeline); +// vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), pipeline.getBindPoint().getVkEnum(), +// pipelineLayout.getNativeObject(), 0, stack.longs(descriptorSet.getId()), null); // viewport VkViewport.Buffer vp = VkViewport.calloc(1, stack) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShadercLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShadercLoader.java index a816e1b0b4..8ffce7d8c8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShadercLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/shaderc/ShadercLoader.java @@ -45,24 +45,30 @@ public static ByteBuffer compile(String name, String code, ShaderType type, Stri synchronized (compiler) { try (MemoryStack stack = MemoryStack.stackPush()) { long preprocessed = Shaderc.shaderc_compile_into_preprocessed_text(compiler.getNativeObject(), code, type.getShaderc(), name, entry, NULL); + handleCompileCodes(preprocessed, name, code); ByteBuffer bytecode = Objects.requireNonNull(Shaderc.shaderc_result_get_bytes(preprocessed)); long compiled = Shaderc.shaderc_compile_into_spv(compiler.getNativeObject(), bytecode, type.getShaderc(), stack.UTF8(name), stack.UTF8(entry), NULL); - if (Shaderc.shaderc_result_get_compilation_status(compiled) != Shaderc.shaderc_compilation_status_success) { - LOG.log(Level.SEVERE, "Bad compile of\n{0}", ShaderDebug.formatShaderSource(code)); - throw new RuntimeException("Failed to compile " + name + ":\n" - + Shaderc.shaderc_result_get_error_message(compiled)); - } - long warnings = Shaderc.shaderc_result_get_num_warnings(compiled); - if (warnings > 0) { - LOG.warning("Compiled with " + warnings + " warning" + (warnings == 1 ? "" : "s") + ": " + name); - } else { - LOG.fine("Compiled with no warnings: " + name); - } + handleCompileCodes(compiled, name, code); return Shaderc.shaderc_result_get_bytes(compiled); }} } + private static void handleCompileCodes(long result, String name, String code) { + int status = Shaderc.shaderc_result_get_compilation_status(result); + if (status != Shaderc.shaderc_compilation_status_success) { + LOG.log(Level.SEVERE, "Bad compile of\n{0}", ShaderDebug.formatShaderSource(code)); + throw new RuntimeException("Failed to compile " + name + ":\n" + + Shaderc.shaderc_result_get_error_message(result)); + } + long warnings = Shaderc.shaderc_result_get_num_warnings(result); + if (warnings > 0) { + LOG.warning("Compiled with " + warnings + " warning" + (warnings == 1 ? "" : "s") + ": " + name); + } else { + LOG.fine("Compiled with no warnings: " + name); + } + } + public static AssetKey key(String name, ShaderType type) { return new Key(name, type, "main"); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index f9e308b914..ce898ac85f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -10,11 +10,14 @@ import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; +import org.lwjgl.system.Struct; import org.lwjgl.vulkan.VkBufferCopy; import org.lwjgl.vulkan.VkBufferCreateInfo; import org.lwjgl.vulkan.VkMemoryRequirements; import java.nio.*; +import java.util.function.Function; +import java.util.function.LongFunction; import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; @@ -103,6 +106,10 @@ public LongBuffer mapLongs(MemoryStack stack, int offset, int size, int flags) { return map(stack, offset, size * Long.BYTES, flags).getLongBuffer(0, size); } + public > T mapStruct(MemoryStack stack, int offset, int size, int flags, LongFunction factory) { + return factory.apply(map(stack, offset, size, flags).get(0)); + } + public void copy(MemoryStack stack, ByteBuffer buffer) { verifyBufferSize(buffer, Byte.BYTES); MemoryUtil.memCopy(buffer, mapBytes(stack, 0, buffer.limit(), 0)); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java index 0e2a623e4d..44a22d6e10 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java @@ -22,11 +22,6 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { .descriptorCount(descriptorCount); } - @Override - public boolean isUpdateNeeded() { - throw new UnsupportedOperationException(); - } - public Descriptor getType() { return type; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java index 032a2375ab..027d43889f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java @@ -7,6 +7,8 @@ public interface DescriptorSetWriter { void populateWrite(MemoryStack stack, VkWriteDescriptorSet write); - boolean isUpdateNeeded(); + default boolean isUpdateNeeded() { + return true; + } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index c3ef56b3af..df7de5b60a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -2,6 +2,7 @@ import com.jme3.asset.*; import com.jme3.util.BufferUtils; +import com.jme3.vulkan.buffers.MemorySize; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.buffers.GpuBuffer; @@ -150,7 +151,7 @@ private void flipImage(byte[] img, int width, int height, int bpp) { private GpuImage loadGpuImage(CommandPool transferPool, ImageData data) { try (MemoryStack stack = MemoryStack.stackPush()) { - GpuBuffer staging = new GpuBuffer(transferPool.getDevice(), data.getBuffer().limit(), + GpuBuffer staging = new GpuBuffer(transferPool.getDevice(), MemorySize.bytes(data.getBuffer().limit()), new BufferUsageFlags().transferSrc(), new MemoryFlags().hostVisible().hostCoherent(), false); staging.copy(stack, data.getBuffer()); GpuImage image = new GpuImage(transferPool.getDevice(), data.getWidth(), data.getHeight(), data.getFormat(), diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java index 8f5e97cbba..1d00b83fbf 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java @@ -8,6 +8,10 @@ public class BufferUniform extends Uniform { + public BufferUniform(Descriptor type, int bindingIndex) { + super(type, bindingIndex); + } + public BufferUniform(String name, Descriptor type, int bindingIndex) { super(name, type, bindingIndex); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index edfb930108..089d946f71 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -3,10 +3,8 @@ import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.pipelines.Pipeline; -import com.jme3.vulkan.pipelines.PipelineLayout; import org.lwjgl.system.MemoryStack; -import java.lang.ref.WeakReference; import java.nio.LongBuffer; import java.util.*; @@ -25,6 +23,10 @@ public Material(DescriptorPool pool) { } public void bind(CommandBuffer cmd, Pipeline pipeline) { + bind(cmd, pipeline, 0); + } + + public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { LinkedList availableLayouts = new LinkedList<>( Arrays.asList(pipeline.getLayout().getDescriptorSetLayouts())); ArrayList allocationLayouts = new ArrayList<>(availableLayouts.size()); @@ -56,7 +58,7 @@ public void bind(CommandBuffer cmd, Pipeline pipeline) { } setBuf.flip(); vkCmdBindDescriptorSets(cmd.getBuffer(), pipeline.getBindPoint().getVkEnum(), - pipeline.getLayout().getNativeObject(), 0, setBuf, null); + pipeline.getLayout().getNativeObject(), offset, setBuf, null); } } @@ -65,4 +67,24 @@ protected UniformSet addSet(UniformSet set) { return set; } + protected UniformSet addSet(Uniform... uniforms) { + return addSet(new UniformSet(uniforms)); + } + + public List getSets() { + return Collections.unmodifiableList(uniforms); + } + + @SuppressWarnings("unchecked") + public Uniform get(String name) { + for (UniformSet s : uniforms) { + for (Uniform u : s.getUniforms()) { + if (name.equals(u.getName())) { + return (Uniform)u; + } + } + } + return null; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/PBRLightingMaterial.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/PBRLightingMaterial.java deleted file mode 100644 index a35809bc8b..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/PBRLightingMaterial.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.jme3.vulkan.material; - -import com.jme3.vulkan.descriptors.DescriptorPool; - -public class PBRLightingMaterial extends Material { - - public PBRLightingMaterial(DescriptorPool pool) { - super(pool); - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java new file mode 100644 index 0000000000..2750aa90a9 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java @@ -0,0 +1,29 @@ +package com.jme3.vulkan.material; + +import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.descriptors.Descriptor; +import com.jme3.vulkan.descriptors.DescriptorPool; +import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.images.Texture; + +public class TestMaterial extends Material { + + private final BufferUniform matrices = new BufferUniform<>( + Descriptor.UniformBuffer, 0); + private final TextureUniform baseColorMap = new TextureUniform( + Image.Layout.ShaderReadOnlyOptimal, 1); + + public TestMaterial(DescriptorPool pool) { + super(pool); + addSet(matrices, baseColorMap); + } + + public Uniform getMatrices() { + return matrices; + } + + public Uniform getBaseColorMap() { + return baseColorMap; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TextureUniform.java new file mode 100644 index 0000000000..49936502dc --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TextureUniform.java @@ -0,0 +1,38 @@ +package com.jme3.vulkan.material; + +import com.jme3.vulkan.descriptors.Descriptor; +import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.images.Texture; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkDescriptorImageInfo; +import org.lwjgl.vulkan.VkWriteDescriptorSet; + +public class TextureUniform extends Uniform { + + private final Image.Layout layout; + + public TextureUniform(Image.Layout layout, int bindingIndex) { + super(Descriptor.CombinedImageSampler, bindingIndex); + this.layout = layout; + } + + public TextureUniform(Image.Layout layout, String name, int bindingIndex) { + super(name, Descriptor.CombinedImageSampler, bindingIndex); + this.layout = layout; + } + + @Override + public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + super.populateWrite(stack, write); + VkDescriptorImageInfo.Buffer info = VkDescriptorImageInfo.calloc(1, stack) + .imageView(value.getImage().getNativeObject()) + .sampler(value.getNativeObject()) + .imageLayout(layout.getVkEnum()); + write.pImageInfo(info); + } + + public Image.Layout getLayout() { + return layout; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java index fd7b823e04..033b5b92a7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java @@ -6,7 +6,13 @@ import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkWriteDescriptorSet; -public abstract class Uniform implements DescriptorSetWriter { +public class Uniform implements DescriptorSetWriter { + + /** + * Placeholder for uniforms that weren't provided with a name, + * usually because uniform names are unnecessary. + */ + public static final String UNNAMED = "unnamed_uniform"; private final String name; private final Descriptor type; @@ -14,6 +20,10 @@ public abstract class Uniform implements DescriptorSetWriter { private boolean updateFlag = true; protected T value; + public Uniform(Descriptor type, int bindingIndex) { + this(UNNAMED, type, bindingIndex); + } + public Uniform(String name, Descriptor type, int bindingIndex) { this.name = name; this.type = type; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java index 9f51a57650..1b489c2c6d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -5,6 +5,7 @@ import com.jme3.vulkan.descriptors.SetLayoutBinding; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -17,6 +18,13 @@ public class UniformSet { public UniformSet(Uniform... uniforms) { this.uniforms = uniforms; + // ensure duplicate binding indices are not present + HashSet bindings = new HashSet<>(); + for (Uniform u : uniforms) { + if (!bindings.add(u.getBindingIndex())) { + throw new IllegalArgumentException("Duplicate binding index in set: " + u.getBindingIndex()); + } + } } public void addActiveSet(DescriptorSet activeSet) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java index 973bb325f4..576c69eb59 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java @@ -35,7 +35,7 @@ public void bindVertexBuffers(CommandBuffer cmd) { } public void draw(CommandBuffer cmd) { - vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.size() / Integer.BYTES, 1, 0, 0, 0); + vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.size().getElements(), 1, 0, 0, 0); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java index 40bd2fa536..55a851d9c0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java @@ -67,6 +67,10 @@ public static UniformTestStruct calloc() { return new UniformTestStruct(MemoryUtil.nmemCallocChecked(1, SIZEOF), null); } + public static UniformTestStruct create(long address) { + return new UniformTestStruct(address, null); + } + public static class Buffer extends StructBuffer implements NativeResource { private static final UniformTestStruct FACTORY = new UniformTestStruct(-1L, null); diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl index 643876adb8..8ce5768a80 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl @@ -1,11 +1,5 @@ #version 450 -// added by preprocessor -#define VULKAN 1 -#ifdef OPENGL - // GLSLCompat stuff -#endif - layout (location = 0) in vec3 inPosition; layout (location = 1) in vec3 inColor; layout (location = 2) in vec2 inTexCoord; @@ -13,26 +7,12 @@ layout (location = 2) in vec2 inTexCoord; layout (location = 0) out vec3 fragColor; layout (location = 1) out vec2 texCoord; -#use com.jme3.vulkan.material.UniformBuffer as UniformBuffer - -#param Camera UniformBuffer(set = 0, binding = 0) -layout (Camera) uniform CameraBuffer { - mat4 viewProjectionMatrix; +layout (set = 0, binding = 0) uniform CameraBuffer { + mat4 worldViewProjectionMatrix; } cam; -#param Material UniformBuffer(set = 1, binding = 0) -layout (Material) uniform MaterialBuffer { - vec3 color; - float metallic; - float roughness; -} mat; -#param Geometry UniformBuffer(set = 2, binding = 0) -layout (Geometry) uniform GeometryBuffer { - mat4 worldMatrix; -} geom; - void main() { - gl_Position = cam.viewProjectionMatrix * geom.worldMatrix * vec4(inPosition, 1.0); + gl_Position = cam.worldViewProjectionMatrix * vec4(inPosition, 1.0); fragColor = inColor; texCoord = inTexCoord; } \ No newline at end of file From 62882d429fa40310c0f935ca86e41003875b511d Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Wed, 13 Aug 2025 18:10:37 -0400 Subject: [PATCH 28/80] basic material system is working --- .../jme3test/vulkan/VulkanHelperTest.java | 8 +++---- .../com/jme3/vulkan/buffers/GpuBuffer.java | 23 ++++++++++++------- .../jme3/vulkan/buffers/StageableBuffer.java | 17 ++++++++++---- .../jme3/vulkan/material/BufferUniform.java | 10 ++++++++ .../jme3/vulkan/material/TestMaterial.java | 5 ++-- .../com/jme3/vulkan/material/Uniform.java | 2 +- 6 files changed, 44 insertions(+), 21 deletions(-) diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 27b1c53fba..3e9a74161f 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -221,17 +221,15 @@ public void simpleInitApp() { // cpu-accessible memory is not usually fast for the gpu to access, but // the cpu cannot directly access fast gpu memory. The solution is to // copy cpu-side data to a mutual staging buffer, then have the gpu copy - // that data to faster memory. Hence, why we do two copy operations here. - vertexBuffer = new StageableBuffer(device, MemorySize.floats(vertexData.capacity()), + // that data to faster memory. Hence, why we use a StageableBuffer here. + vertexBuffer = new StageableBuffer(device, transferPool, MemorySize.floats(vertexData.capacity()), new BufferUsageFlags().vertexBuffer(), new MemoryFlags().deviceLocal(), false); vertexBuffer.copy(stack, vertexData); // copy data to staging buffer - vertexBuffer.transfer(transferPool); // transfer staged data to vertex buffer vertexBuffer.freeStagingBuffer(); // index buffer - indexBuffer = new StageableBuffer(device, MemorySize.ints(indexData.capacity()), + indexBuffer = new StageableBuffer(device, transferPool, MemorySize.ints(indexData.capacity()), new BufferUsageFlags().indexBuffer(), new MemoryFlags().deviceLocal(), false); indexBuffer.copy(stack, indexData); - indexBuffer.transfer(transferPool); indexBuffer.freeStagingBuffer(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index ce898ac85f..22362ea545 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -72,8 +72,8 @@ public NativeReference getNativeReference() { return ref; } - private void verifyBufferSize(Buffer buffer, long bytesPerElement) { - if (buffer.limit() * bytesPerElement > size.getBytes()) { + private void verifyBufferSize(int elements, long bytesPerElement) { + if (elements * bytesPerElement > size.getBytes()) { throw new BufferOverflowException(); } } @@ -111,41 +111,48 @@ public > T mapStruct(MemoryStack stack, int offset, int size } public void copy(MemoryStack stack, ByteBuffer buffer) { - verifyBufferSize(buffer, Byte.BYTES); + verifyBufferSize(buffer.limit(), Byte.BYTES); MemoryUtil.memCopy(buffer, mapBytes(stack, 0, buffer.limit(), 0)); unmap(); } public void copy(MemoryStack stack, ShortBuffer buffer) { - verifyBufferSize(buffer, Short.BYTES); + verifyBufferSize(buffer.limit(), Short.BYTES); MemoryUtil.memCopy(buffer, mapShorts(stack, 0, buffer.limit(), 0)); unmap(); } public void copy(MemoryStack stack, IntBuffer buffer) { - verifyBufferSize(buffer, Integer.BYTES); + verifyBufferSize(buffer.limit(), Integer.BYTES); MemoryUtil.memCopy(buffer, mapInts(stack, 0, buffer.limit(), 0)); unmap(); } public void copy(MemoryStack stack, FloatBuffer buffer) { - verifyBufferSize(buffer, Float.BYTES); + verifyBufferSize(buffer.limit(), Float.BYTES); MemoryUtil.memCopy(buffer, mapFloats(stack, 0, buffer.limit(), 0)); unmap(); } public void copy(MemoryStack stack, DoubleBuffer buffer) { - verifyBufferSize(buffer, Double.BYTES); + verifyBufferSize(buffer.limit(), Double.BYTES); MemoryUtil.memCopy(buffer, mapDoubles(stack, 0, buffer.limit(), 0)); unmap(); } public void copy(MemoryStack stack, LongBuffer buffer) { - verifyBufferSize(buffer, Long.BYTES); + verifyBufferSize(buffer.limit(), Long.BYTES); MemoryUtil.memCopy(buffer, mapLongs(stack, 0, buffer.limit(), 0)); unmap(); } + public void copy(MemoryStack stack, Struct struct) { + verifyBufferSize(struct.sizeof(), Byte.BYTES); + MemoryUtil.memCopy(MemoryUtil.memByteBuffer(struct.address(), struct.sizeof()), + mapBytes(stack, 0, struct.sizeof(), 0)); + unmap(); + } + public void unmap() { memory.unmap(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index 451ecac6f1..5bdbdf0d32 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -12,10 +12,13 @@ public class StageableBuffer extends GpuBuffer { + private final CommandPool transferPool; private final GpuBuffer stage; - public StageableBuffer(LogicalDevice device, MemorySize size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + public StageableBuffer(LogicalDevice device, CommandPool transferPool, MemorySize size, + BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { super(device, size, usage.transferDst(), mem, concurrent); + this.transferPool = transferPool; stage = new GpuBuffer(device, size, new BufferUsageFlags().transferSrc(), new MemoryFlags().hostVisible().hostCoherent(), concurrent); } @@ -28,6 +31,7 @@ public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { @Override public void unmap() { stage.unmap(); + transfer(); } @Override @@ -36,12 +40,17 @@ public void freeMemory() { stage.freeMemory(); } - public void transfer(CommandPool transferPool) { - transfer(transferPool, null, null, null); + public void unmap(Semaphore wait, Semaphore signal, Fence fence) { + stage.unmap(); + transfer(wait, signal, fence); + } + + public void transfer() { + transfer(null, null, null); transferPool.getQueue().waitIdle(); } - public void transfer(CommandPool transferPool, Semaphore wait, Semaphore signal, Fence fence) { + public void transfer(Semaphore wait, Semaphore signal, Fence fence) { if (stage.getNativeReference().isDestroyed()) { throw new IllegalStateException("Staging buffer has already been freed."); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java index 1d00b83fbf..a5be2b70c8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java @@ -3,6 +3,7 @@ import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.descriptors.Descriptor; import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.Struct; import org.lwjgl.vulkan.VkDescriptorBufferInfo; import org.lwjgl.vulkan.VkWriteDescriptorSet; @@ -26,4 +27,13 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { write.pBufferInfo(info); } + public void setStruct(Struct struct) { + if (value == null) { + throw new NullPointerException("Buffer value is null."); + } + try (MemoryStack stack = MemoryStack.stackPush()) { + value.copy(stack, struct); + } + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java index 2750aa90a9..e8642d9b41 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java @@ -4,7 +4,6 @@ import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.DescriptorPool; import com.jme3.vulkan.images.Image; -import com.jme3.vulkan.images.Texture; public class TestMaterial extends Material { @@ -18,11 +17,11 @@ public TestMaterial(DescriptorPool pool) { addSet(matrices, baseColorMap); } - public Uniform getMatrices() { + public BufferUniform getMatrices() { return matrices; } - public Uniform getBaseColorMap() { + public TextureUniform getBaseColorMap() { return baseColorMap; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java index 033b5b92a7..55b796d0de 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java @@ -6,7 +6,7 @@ import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkWriteDescriptorSet; -public class Uniform implements DescriptorSetWriter { +public class Uniform implements DescriptorSetWriter { /** * Placeholder for uniforms that weren't provided with a name, From 4a1970f326deed3513d5d3a11e581c9f83bd255f Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:09:09 -0400 Subject: [PATCH 29/80] add device interfaces for different queue types --- .../jme3test/vulkan/VulkanHelperTest.java | 11 +- .../com/jme3/vulkan/buffers/GpuBuffer.java | 5 +- .../jme3/vulkan/buffers/StageableBuffer.java | 18 ++- .../vulkan/commands/CommandAllocator.java | 16 +++ .../jme3/vulkan/commands/CommandBuffer.java | 21 ++-- .../vulkan/descriptors/DescriptorSet.java | 9 +- .../devices/AbstractPhysicalDevice.java | 105 ++++++++++++++++ .../jme3/vulkan/devices/ComputeDevice.java | 9 ++ .../vulkan/devices/GeneralPhysicalDevice.java | 32 ++--- .../jme3/vulkan/devices/GraphicalDevice.java | 9 ++ .../jme3/vulkan/devices/PhysicalDevice.java | 112 +++++------------- .../jme3/vulkan/devices/PresentDevice.java | 9 ++ .../jme3/vulkan/images/VulkanImageLoader.java | 3 +- .../vulkan/material/ExampleUniformBuffer.java | 49 -------- .../com/jme3/vulkan/material/Material.java | 28 ++--- .../com/jme3/vulkan/material/MaterialDef.java | 7 -- .../jme3/vulkan/material/TestMaterial.java | 2 + .../{ => uniforms}/BufferUniform.java | 6 +- .../{ => uniforms}/TextureUniform.java | 7 +- .../material/{ => uniforms}/Uniform.java | 20 +--- .../material/{ => uniforms}/UniformSet.java | 30 ++--- .../java/com/jme3/vulkan/sync/SyncGroup.java | 104 ++++++++++++++++ 22 files changed, 354 insertions(+), 258 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandAllocator.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/ComputeDevice.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GraphicalDevice.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PresentDevice.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/ExampleUniformBuffer.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/MaterialDef.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/{ => uniforms}/BufferUniform.java (87%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/{ => uniforms}/TextureUniform.java (82%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/{ => uniforms}/Uniform.java (74%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/{ => uniforms}/UniformSet.java (79%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 3e9a74161f..6bf866f6d2 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -36,6 +36,7 @@ import com.jme3.vulkan.surface.SwapchainUpdater; import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.sync.Semaphore; +import com.jme3.vulkan.sync.SyncGroup; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -222,14 +223,16 @@ public void simpleInitApp() { // the cpu cannot directly access fast gpu memory. The solution is to // copy cpu-side data to a mutual staging buffer, then have the gpu copy // that data to faster memory. Hence, why we use a StageableBuffer here. - vertexBuffer = new StageableBuffer(device, transferPool, MemorySize.floats(vertexData.capacity()), + vertexBuffer = new StageableBuffer(device, MemorySize.floats(vertexData.capacity()), new BufferUsageFlags().vertexBuffer(), new MemoryFlags().deviceLocal(), false); vertexBuffer.copy(stack, vertexData); // copy data to staging buffer + vertexBuffer.transfer(transferPool); vertexBuffer.freeStagingBuffer(); // index buffer - indexBuffer = new StageableBuffer(device, transferPool, MemorySize.ints(indexData.capacity()), + indexBuffer = new StageableBuffer(device, MemorySize.ints(indexData.capacity()), new BufferUsageFlags().indexBuffer(), new MemoryFlags().deviceLocal(), false); indexBuffer.copy(stack, indexData); + indexBuffer.transfer(transferPool); indexBuffer.freeStagingBuffer(); } @@ -295,7 +298,7 @@ private ImageView createDepthAttachment(CommandPool pool) { commands.begin(); image.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.DepthStencilAttachmentOptimal); commands.end(); - commands.submit(null, null, null); + commands.submit(new SyncGroup()); commands.getPool().getQueue().waitIdle(); return view; } @@ -386,7 +389,7 @@ public void accept(Float tpf) { // render manager graphicsCommands.end(); - graphicsCommands.submit(imageAvailable, renderFinished, inFlight); + graphicsCommands.submit(new SyncGroup(imageAvailable, renderFinished, inFlight)); swapchain.present(device.getPhysicalDevice().getPresent(), image, renderFinished); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index 22362ea545..13162b6a66 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -157,12 +157,11 @@ public void unmap() { memory.unmap(); } - public void recordCopy(MemoryStack stack, CommandBuffer commands, GpuBuffer source, long srcOffset, long dstOffset, long size) { - commands.begin(); + public void recordCopy(MemoryStack stack, CommandBuffer commands, GpuBuffer source, + long srcOffset, long dstOffset, long size) { VkBufferCopy.Buffer copy = VkBufferCopy.calloc(1, stack) .srcOffset(srcOffset).dstOffset(dstOffset).size(size); vkCmdCopyBuffer(commands.getBuffer(), source.getNativeObject(), id, copy); - commands.end(); } public void freeMemory() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index 5bdbdf0d32..d64dc01e0c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -7,18 +7,17 @@ import com.jme3.vulkan.flags.BufferUsageFlags; import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.sync.Semaphore; +import com.jme3.vulkan.sync.SyncGroup; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; public class StageableBuffer extends GpuBuffer { - private final CommandPool transferPool; private final GpuBuffer stage; - public StageableBuffer(LogicalDevice device, CommandPool transferPool, MemorySize size, + public StageableBuffer(LogicalDevice device, MemorySize size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { super(device, size, usage.transferDst(), mem, concurrent); - this.transferPool = transferPool; stage = new GpuBuffer(device, size, new BufferUsageFlags().transferSrc(), new MemoryFlags().hostVisible().hostCoherent(), concurrent); } @@ -31,7 +30,6 @@ public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { @Override public void unmap() { stage.unmap(); - transfer(); } @Override @@ -40,25 +38,25 @@ public void freeMemory() { stage.freeMemory(); } - public void unmap(Semaphore wait, Semaphore signal, Fence fence) { + public void unmap(SyncGroup sync) { stage.unmap(); - transfer(wait, signal, fence); } - public void transfer() { - transfer(null, null, null); + public void transfer(CommandPool transferPool) { + transfer(transferPool, new SyncGroup()); transferPool.getQueue().waitIdle(); } - public void transfer(Semaphore wait, Semaphore signal, Fence fence) { + public void transfer(CommandPool transferPool, SyncGroup sync) { if (stage.getNativeReference().isDestroyed()) { throw new IllegalStateException("Staging buffer has already been freed."); } CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); + commands.begin(); try (MemoryStack stack = MemoryStack.stackPush()) { recordCopy(stack, commands, stage, 0, 0, size().getBytes()); } - commands.submit(wait, signal, fence); + commands.endAndSubmit(sync); } public void freeStagingBuffer() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandAllocator.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandAllocator.java new file mode 100644 index 0000000000..00c0ab5e02 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandAllocator.java @@ -0,0 +1,16 @@ +package com.jme3.vulkan.commands; + +import java.util.HashMap; +import java.util.Map; + +public class CommandAllocator { + + private final Map pools = new HashMap<>(); + + + + private static class PoolGroup { + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java index f4442d115e..f24b4ea3ab 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java @@ -1,7 +1,6 @@ package com.jme3.vulkan.commands; -import com.jme3.vulkan.sync.Fence; -import com.jme3.vulkan.sync.Semaphore; +import com.jme3.vulkan.sync.SyncGroup; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkCommandBuffer; @@ -53,7 +52,7 @@ public void end() { recording = false; } - public void submit(Semaphore wait, Semaphore signal, Fence fence) { + public void submit(SyncGroup sync) { if (recording) { throw new IllegalStateException("Command buffer is still recording."); } @@ -61,17 +60,23 @@ public void submit(Semaphore wait, Semaphore signal, Fence fence) { VkSubmitInfo.Buffer submit = VkSubmitInfo.calloc(1, stack) .sType(VK_STRUCTURE_TYPE_SUBMIT_INFO) .pCommandBuffers(stack.pointers(buffer)); - if (wait != null) { - submit.waitSemaphoreCount(1).pWaitSemaphores(stack.longs(wait.getNativeObject())) + if (sync.containsWaits()) { + submit.waitSemaphoreCount(sync.getWaits().length) + .pWaitSemaphores(sync.toWaitBuffer(stack)) .pWaitDstStageMask(stack.ints(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)); } - if (signal != null) { - submit.pSignalSemaphores(stack.longs(signal.getNativeObject())); + if (sync.containsSignals()) { + submit.pSignalSemaphores(sync.toSignalBuffer(stack)); } - pool.getQueue().submit(submit, fence); + pool.getQueue().submit(submit, sync.getFence()); } } + public void endAndSubmit(SyncGroup sync) { + end(); + submit(sync); + } + public void reset() { vkResetCommandBuffer(buffer, 0); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java index 2eec597d24..cdf45226a0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -1,16 +1,9 @@ package com.jme3.vulkan.descriptors; -import com.jme3.util.natives.Native; -import com.jme3.vulkan.VulkanObject; import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkWriteDescriptorSet; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - import static org.lwjgl.vulkan.VK10.*; public class DescriptorSet { @@ -33,7 +26,7 @@ public void update(boolean force, DescriptorSetWriter... writers) { if (updating > 0) { VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(updating, stack); for (DescriptorSetWriter w : writers) { - if (w.isUpdateNeeded()) { + if (force || w.isUpdateNeeded()) { w.populateWrite(stack, write.get() .sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET) .dstSet(id)); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java new file mode 100644 index 0000000000..87ca164fa8 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java @@ -0,0 +1,105 @@ +package com.jme3.vulkan.devices; + +import com.jme3.vulkan.VulkanInstance; +import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.surface.Surface; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.*; + +import java.nio.ByteBuffer; +import java.nio.IntBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.enumerateBuffer; +import static org.lwjgl.vulkan.VK10.*; + +public abstract class AbstractPhysicalDevice implements PhysicalDevice { + + private final VulkanInstance instance; + private final VkPhysicalDevice physicalDevice; + + public AbstractPhysicalDevice(VulkanInstance instance, long id) { + this.instance = instance; + this.physicalDevice = new VkPhysicalDevice(id, instance.getNativeObject()); + } + + @Override + public VulkanInstance getInstance() { + return instance; + } + + @Override + public VkPhysicalDevice getPhysicalDevice() { + return physicalDevice; + } + + @Override + public VkQueueFamilyProperties.Buffer getQueueFamilyProperties(MemoryStack stack) { + return enumerateBuffer(stack, n -> VkQueueFamilyProperties.calloc(n, stack), (count, buffer) + -> vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, count, buffer)); + } + + @Override + public VkPhysicalDeviceProperties getProperties(MemoryStack stack) { + VkPhysicalDeviceProperties props = VkPhysicalDeviceProperties.malloc(stack); + vkGetPhysicalDeviceProperties(physicalDevice, props); + return props; + } + + @Override + public VkPhysicalDeviceFeatures getFeatures(MemoryStack stack) { + VkPhysicalDeviceFeatures features = VkPhysicalDeviceFeatures.malloc(stack); + vkGetPhysicalDeviceFeatures(physicalDevice, features); + return features; + } + + @Override + public VkExtensionProperties.Buffer getExtensionProperties(MemoryStack stack) { + return enumerateBuffer(stack, n -> VkExtensionProperties.malloc(n, stack), (count, buffer) -> + vkEnumerateDeviceExtensionProperties(physicalDevice, (ByteBuffer)null, count, buffer)); + } + + @Override + public VkPhysicalDeviceMemoryProperties getMemoryProperties(MemoryStack stack) { + VkPhysicalDeviceMemoryProperties mem = VkPhysicalDeviceMemoryProperties.malloc(stack); + vkGetPhysicalDeviceMemoryProperties(physicalDevice, mem); + return mem; + } + + @Override + public int findSupportedMemoryType(MemoryStack stack, int types, int flags) { + VkPhysicalDeviceMemoryProperties mem = getMemoryProperties(stack); + for (int i = 0; i < mem.memoryTypeCount(); i++) { + if ((types & (1 << i)) != 0 && (mem.memoryTypes().get(i).propertyFlags() & flags) != 0) { + return i; + } + } + throw new NullPointerException("Suitable memory type not found."); + } + + @Override + public Image.Format findSupportedFormat(int tiling, int features, Image.Format... candidates) { + VkFormatProperties props = VkFormatProperties.create(); + for (Image.Format f : candidates) { + vkGetPhysicalDeviceFormatProperties(physicalDevice, f.getVkEnum(), props); + if ((tiling == VK_IMAGE_TILING_LINEAR && (props.linearTilingFeatures() & features) == features) + || (tiling == VK_IMAGE_TILING_OPTIMAL && (props.optimalTilingFeatures() & features) == features)) { + return f; + } + } + throw new NullPointerException("Failed to find supported format."); + } + + @Override + public boolean querySwapchainSupport(Surface surface) { + try (MemoryStack stack = MemoryStack.stackPush()) { + IntBuffer count = stack.mallocInt(1); + KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface.getNativeObject(), count, null); + if (count.get(0) <= 0) { + return false; + } + KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface.getNativeObject(), count, null); + return count.get(0) > 0; + } + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/ComputeDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/ComputeDevice.java new file mode 100644 index 0000000000..657074bd0a --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/ComputeDevice.java @@ -0,0 +1,9 @@ +package com.jme3.vulkan.devices; + +import com.jme3.vulkan.commands.Queue; + +public interface ComputeDevice extends PhysicalDevice { + + Queue getCompute(); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java index b55ea166f9..ae39d937df 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java @@ -12,7 +12,8 @@ import static org.lwjgl.vulkan.VK10.*; -public class GeneralPhysicalDevice extends PhysicalDevice { +public class GeneralPhysicalDevice extends AbstractPhysicalDevice + implements GraphicalDevice, PresentDevice, ComputeDevice { private final Surface surface; private Integer graphicsIndex, presentIndex; @@ -24,7 +25,7 @@ public GeneralPhysicalDevice(VulkanInstance instance, Surface surface, long id) } @Override - protected boolean populateQueueFamilyIndices() { + public boolean populateQueueFamilyIndices() { try (MemoryStack stack = MemoryStack.stackPush()) { VkQueueFamilyProperties.Buffer properties = getQueueFamilyProperties(stack); IntBuffer ibuf = stack.callocInt(1); @@ -49,7 +50,7 @@ protected boolean populateQueueFamilyIndices() { } @Override - protected VkDeviceQueueCreateInfo.Buffer createQueueFamilyInfo(MemoryStack stack) { + public VkDeviceQueueCreateInfo.Buffer createQueueFamilyInfo(MemoryStack stack) { VkDeviceQueueCreateInfo.Buffer create = VkDeviceQueueCreateInfo.calloc(2, stack); create.get(0).sType(VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) .queueFamilyIndex(graphicsIndex) @@ -61,37 +62,28 @@ protected VkDeviceQueueCreateInfo.Buffer createQueueFamilyInfo(MemoryStack stack } @Override - protected void createQueues(LogicalDevice device) { + public void createQueues(LogicalDevice device) { graphics = new Queue(device, graphicsIndex, 0); present = new Queue(device, presentIndex, 0); } - public boolean allQueuesAvailable() { - return graphicsIndex != null && presentIndex != null; - } - - public Integer getGraphicsIndex() { - return graphicsIndex; - } - - public Integer getPresentIndex() { - return presentIndex; - } - - public Integer getComputeIndex() { - return graphicsIndex; - } - + @Override public Queue getGraphics() { return graphics; } + @Override public Queue getPresent() { return present; } + @Override public Queue getCompute() { return graphics; } + public boolean allQueuesAvailable() { + return graphicsIndex != null && presentIndex != null; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GraphicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GraphicalDevice.java new file mode 100644 index 0000000000..cae4a8fb73 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GraphicalDevice.java @@ -0,0 +1,9 @@ +package com.jme3.vulkan.devices; + +import com.jme3.vulkan.commands.Queue; + +public interface GraphicalDevice extends PhysicalDevice { + + Queue getGraphics(); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java index 0cbdfb002c..6c3f388616 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java @@ -12,90 +12,32 @@ import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; -public abstract class PhysicalDevice { - - private final VulkanInstance instance; - private final VkPhysicalDevice physicalDevice; - - public PhysicalDevice(VulkanInstance instance, long id) { - this.instance = instance; - this.physicalDevice = new VkPhysicalDevice(id, instance.getNativeObject()); - } - - protected abstract boolean populateQueueFamilyIndices(); - - protected abstract VkDeviceQueueCreateInfo.Buffer createQueueFamilyInfo(MemoryStack stack); - - protected abstract void createQueues(LogicalDevice device); - - public VulkanInstance getInstance() { - return instance; - } - - public VkPhysicalDevice getPhysicalDevice() { - return physicalDevice; - } - - public VkQueueFamilyProperties.Buffer getQueueFamilyProperties(MemoryStack stack) { - return enumerateBuffer(stack, n -> VkQueueFamilyProperties.calloc(n, stack), (count, buffer) - -> vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, count, buffer)); - } - - public VkPhysicalDeviceProperties getProperties(MemoryStack stack) { - VkPhysicalDeviceProperties props = VkPhysicalDeviceProperties.malloc(stack); - vkGetPhysicalDeviceProperties(physicalDevice, props); - return props; - } - - public VkPhysicalDeviceFeatures getFeatures(MemoryStack stack) { - VkPhysicalDeviceFeatures features = VkPhysicalDeviceFeatures.malloc(stack); - vkGetPhysicalDeviceFeatures(physicalDevice, features); - return features; - } - - public VkExtensionProperties.Buffer getExtensionProperties(MemoryStack stack) { - return enumerateBuffer(stack, n -> VkExtensionProperties.malloc(n, stack), (count, buffer) -> - vkEnumerateDeviceExtensionProperties(physicalDevice, (ByteBuffer)null, count, buffer)); - } - - public VkPhysicalDeviceMemoryProperties getMemoryProperties(MemoryStack stack) { - VkPhysicalDeviceMemoryProperties mem = VkPhysicalDeviceMemoryProperties.malloc(stack); - vkGetPhysicalDeviceMemoryProperties(physicalDevice, mem); - return mem; - } - - public int findSupportedMemoryType(MemoryStack stack, int types, int flags) { - VkPhysicalDeviceMemoryProperties mem = getMemoryProperties(stack); - for (int i = 0; i < mem.memoryTypeCount(); i++) { - if ((types & (1 << i)) != 0 && (mem.memoryTypes().get(i).propertyFlags() & flags) != 0) { - return i; - } - } - throw new NullPointerException("Suitable memory type not found."); - } - - public Image.Format findSupportedFormat(int tiling, int features, Image.Format... candidates) { - VkFormatProperties props = VkFormatProperties.create(); - for (Image.Format f : candidates) { - vkGetPhysicalDeviceFormatProperties(physicalDevice, f.getVkEnum(), props); - if ((tiling == VK_IMAGE_TILING_LINEAR && (props.linearTilingFeatures() & features) == features) - || (tiling == VK_IMAGE_TILING_OPTIMAL && (props.optimalTilingFeatures() & features) == features)) { - return f; - } - } - throw new NullPointerException("Failed to find supported format."); - } - - public boolean querySwapchainSupport(Surface surface) { - try (MemoryStack stack = MemoryStack.stackPush()) { - IntBuffer count = stack.mallocInt(1); - KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface.getNativeObject(), count, null); - if (count.get(0) <= 0) { - return false; - } - KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface.getNativeObject(), count, null); - return count.get(0) > 0; - } - } +public interface PhysicalDevice { + + boolean populateQueueFamilyIndices(); + + VkDeviceQueueCreateInfo.Buffer createQueueFamilyInfo(MemoryStack stack); + + void createQueues(LogicalDevice device); + + VulkanInstance getInstance(); + + VkPhysicalDevice getPhysicalDevice(); + + VkQueueFamilyProperties.Buffer getQueueFamilyProperties(MemoryStack stack); + + VkPhysicalDeviceProperties getProperties(MemoryStack stack); + + VkPhysicalDeviceFeatures getFeatures(MemoryStack stack); + + VkExtensionProperties.Buffer getExtensionProperties(MemoryStack stack); + + VkPhysicalDeviceMemoryProperties getMemoryProperties(MemoryStack stack); + + int findSupportedMemoryType(MemoryStack stack, int types, int flags); + + Image.Format findSupportedFormat(int tiling, int features, Image.Format... candidates); + + boolean querySwapchainSupport(Surface surface); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PresentDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PresentDevice.java new file mode 100644 index 0000000000..9f10f520e3 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PresentDevice.java @@ -0,0 +1,9 @@ +package com.jme3.vulkan.devices; + +import com.jme3.vulkan.commands.Queue; + +public interface PresentDevice extends PhysicalDevice { + + Queue getPresent(); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index df7de5b60a..8e46d13d0c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -9,6 +9,7 @@ import com.jme3.vulkan.flags.BufferUsageFlags; import com.jme3.vulkan.flags.ImageUsageFlags; import com.jme3.vulkan.flags.MemoryFlags; +import com.jme3.vulkan.sync.SyncGroup; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkBufferImageCopy; @@ -174,7 +175,7 @@ Image.Tiling.Optimal, new ImageUsageFlags().transferDst().sampled(), image.getNativeObject(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, region); image.transitionLayout(commands, Image.Layout.TransferDstOptimal, Image.Layout.ShaderReadOnlyOptimal); commands.end(); - commands.submit(null, null, null); + commands.submit(new SyncGroup()); transferPool.getQueue().waitIdle(); return image; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/ExampleUniformBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/ExampleUniformBuffer.java deleted file mode 100644 index 1eaf6e2409..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/ExampleUniformBuffer.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.jme3.vulkan.material; - -import com.jme3.vulkan.buffers.GpuBuffer; -import com.jme3.vulkan.descriptors.Descriptor; -import com.jme3.vulkan.descriptors.DescriptorSetWriter; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VkDescriptorBufferInfo; -import org.lwjgl.vulkan.VkWriteDescriptorSet; - -public class ExampleUniformBuffer implements DescriptorSetWriter { - - private final int binding; - private GpuBuffer buffer; - private boolean updateFlag = true; - - public ExampleUniformBuffer(int binding, GpuBuffer buffer) { - this.binding = binding; - this.buffer = buffer; - } - - @Override - public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { - VkDescriptorBufferInfo.Buffer descriptors = VkDescriptorBufferInfo.calloc(1, stack) - .buffer(buffer.getNativeObject()) - .offset(0) - .range(buffer.size().getBytes()); - write.descriptorType(Descriptor.UniformBuffer.getVkEnum()) - .dstBinding(binding) - .dstArrayElement(0) // todo: make configurable? - .descriptorCount(descriptors.limit()) - .pBufferInfo(descriptors); - updateFlag = false; - } - - @Override - public boolean isUpdateNeeded() { - return updateFlag; - } - - public void setBuffer(GpuBuffer buffer) { - this.buffer = buffer; - this.updateFlag = true; - } - - public GpuBuffer getBuffer() { - return buffer; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index 089d946f71..24a78dca91 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -2,6 +2,8 @@ import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.descriptors.*; +import com.jme3.vulkan.material.uniforms.Uniform; +import com.jme3.vulkan.material.uniforms.UniformSet; import com.jme3.vulkan.pipelines.Pipeline; import org.lwjgl.system.MemoryStack; @@ -32,8 +34,13 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { ArrayList allocationLayouts = new ArrayList<>(availableLayouts.size()); ArrayList allocationTargets = new ArrayList<>(availableLayouts.size()); for (UniformSet set : uniforms) { - DescriptorSetLayout allocation = set.selectActiveSet(availableLayouts); + set.update(pipeline); + // Select an existing descriptor set to be active. If + // no existing set may be selected, a set layout is + // returned with which to allocate a new descriptor set. + DescriptorSetLayout allocation = set.selectExistingActiveSet(availableLayouts); if (allocation != null) { + // allocate all new sets at once allocationLayouts.add(allocation); allocationTargets.add(set); } @@ -45,12 +52,11 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { DescriptorSet[] allocatedSets = pool.allocateSets( allocationLayouts.toArray(new DescriptorSetLayout[0])); for (int i = 0; i < allocatedSets.length; i++) { - allocationTargets.get(i).addActiveSet(allocatedSets[i]); + UniformSet target = allocationTargets.get(i); + target.addActiveSet(allocatedSets[i]); + allocatedSets[i].update(true, target.getUniforms()); } } - for (UniformSet set : uniforms) { - set.update(); // write updates to the set - } try (MemoryStack stack = MemoryStack.stackPush()) { LongBuffer setBuf = stack.mallocLong(uniforms.size()); for (UniformSet s : uniforms) { @@ -75,16 +81,4 @@ public List getSets() { return Collections.unmodifiableList(uniforms); } - @SuppressWarnings("unchecked") - public Uniform get(String name) { - for (UniformSet s : uniforms) { - for (Uniform u : s.getUniforms()) { - if (name.equals(u.getName())) { - return (Uniform)u; - } - } - } - return null; - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/MaterialDef.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/MaterialDef.java deleted file mode 100644 index a15500246f..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/MaterialDef.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.jme3.vulkan.material; - -public class MaterialDef { - - - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java index e8642d9b41..4615dde8a7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java @@ -4,6 +4,8 @@ import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.DescriptorPool; import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.material.uniforms.BufferUniform; +import com.jme3.vulkan.material.uniforms.TextureUniform; public class TestMaterial extends Material { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java similarity index 87% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index a5be2b70c8..d25975db9d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan.material; +package com.jme3.vulkan.material.uniforms; import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.descriptors.Descriptor; @@ -13,10 +13,6 @@ public BufferUniform(Descriptor type, int bindingIndex) { super(type, bindingIndex); } - public BufferUniform(String name, Descriptor type, int bindingIndex) { - super(name, type, bindingIndex); - } - @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { super.populateWrite(stack, write); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java similarity index 82% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TextureUniform.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index 49936502dc..422ac72931 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TextureUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan.material; +package com.jme3.vulkan.material.uniforms; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.images.Image; @@ -16,11 +16,6 @@ public TextureUniform(Image.Layout layout, int bindingIndex) { this.layout = layout; } - public TextureUniform(Image.Layout layout, String name, int bindingIndex) { - super(name, Descriptor.CombinedImageSampler, bindingIndex); - this.layout = layout; - } - @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { super.populateWrite(stack, write); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java similarity index 74% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java index 55b796d0de..61ab10de14 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Uniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan.material; +package com.jme3.vulkan.material.uniforms; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.DescriptorSetWriter; @@ -6,26 +6,14 @@ import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkWriteDescriptorSet; -public class Uniform implements DescriptorSetWriter { +public abstract class Uniform implements DescriptorSetWriter { - /** - * Placeholder for uniforms that weren't provided with a name, - * usually because uniform names are unnecessary. - */ - public static final String UNNAMED = "unnamed_uniform"; - - private final String name; private final Descriptor type; private final int bindingIndex; private boolean updateFlag = true; protected T value; public Uniform(Descriptor type, int bindingIndex) { - this(UNNAMED, type, bindingIndex); - } - - public Uniform(String name, Descriptor type, int bindingIndex) { - this.name = name; this.type = type; this.bindingIndex = bindingIndex; } @@ -60,8 +48,8 @@ public void setUpdateNeeded() { updateFlag = true; } - public String getName() { - return name; + public void clearUpdateNeeded() { + updateFlag = false; } public Descriptor getType() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/UniformSet.java similarity index 79% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/UniformSet.java index 1b489c2c6d..090509fe54 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/UniformSet.java @@ -1,20 +1,18 @@ -package com.jme3.vulkan.material; +package com.jme3.vulkan.material.uniforms; import com.jme3.vulkan.descriptors.DescriptorSet; import com.jme3.vulkan.descriptors.DescriptorSetLayout; import com.jme3.vulkan.descriptors.SetLayoutBinding; +import com.jme3.vulkan.pipelines.Pipeline; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; +import java.util.*; public class UniformSet { private final Uniform[] uniforms; private final List sets = new ArrayList<>(); + private final Collection outdatedSets = new ArrayList<>(); private DescriptorSet activeSet; - private boolean updateFlag = true; public UniformSet(Uniform... uniforms) { this.uniforms = uniforms; @@ -28,14 +26,11 @@ public UniformSet(Uniform... uniforms) { } public void addActiveSet(DescriptorSet activeSet) { - if (this.activeSet == activeSet) { - updateFlag = true; - } this.activeSet = activeSet; sets.add(activeSet); } - public DescriptorSetLayout selectActiveSet(List availableLayouts) { + public DescriptorSetLayout selectExistingActiveSet(List availableLayouts) { if (activeSet == null || !availableLayouts.remove(activeSet.getLayout())) { for (DescriptorSet s : sets) { if (availableLayouts.remove(s.getLayout())) { @@ -67,16 +62,13 @@ public DescriptorSetLayout selectActiveSet(List availableLa return null; } - public void update() { - if (activeSet == null) { - throw new NullPointerException("No descriptor set selected."); + public void update(Pipeline pipeline) { + for (DescriptorSet set : sets) { + set.update(false, uniforms); + } + for (Uniform u : uniforms) { + u.clearUpdateNeeded(); } - activeSet.update(updateFlag, uniforms); - updateFlag = false; - } - - public void setActiveSet(DescriptorSet activeSet) { - this.activeSet = activeSet; } public Uniform[] getUniforms() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java new file mode 100644 index 0000000000..27dfcffda1 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java @@ -0,0 +1,104 @@ +package com.jme3.vulkan.sync; + +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VK10; + +import java.nio.LongBuffer; + +public class SyncGroup { + + private static final Semaphore[] EMPTY = new Semaphore[0]; + + private static Semaphore[] toArray(Semaphore s) { + return s != null ? new Semaphore[] {s} : EMPTY; + } + + private final Semaphore[] waits; + private final Semaphore[] signals; + private final Fence fence; + + public SyncGroup() { + this(EMPTY, EMPTY, null); + } + + public SyncGroup(Fence fence) { + this(EMPTY, EMPTY, fence); + } + + public SyncGroup(Semaphore wait, Semaphore signal) { + this(toArray(wait), toArray(signal), null); + } + + public SyncGroup(Semaphore wait, Semaphore[] signals) { + this(toArray(wait), signals, null); + } + + public SyncGroup(Semaphore[] waits, Semaphore signal) { + this(waits, toArray(signal), null); + } + + public SyncGroup(Semaphore wait, Semaphore signal, Fence fence) { + this(toArray(wait), toArray(signal), fence); + } + + public SyncGroup(Semaphore wait, Semaphore[] signals, Fence fence) { + this(toArray(wait), signals, fence); + } + + public SyncGroup(Semaphore[] waits, Semaphore signal, Fence fence) { + this(waits, toArray(signal), fence); + } + + public SyncGroup(Semaphore[] waits, Semaphore[] signals, Fence fence) { + this.waits = waits; + this.signals = signals; + this.fence = fence; + } + + public Semaphore[] getWaits() { + return waits; + } + + public Semaphore[] getSignals() { + return signals; + } + + public Fence getFence() { + return fence; + } + + public boolean containsWaits() { + return waits.length > 0; + } + + public boolean containsSignals() { + return signals.length > 0; + } + + public boolean containsFence() { + return fence != null; + } + + public LongBuffer toWaitBuffer(MemoryStack stack) { + LongBuffer buf = stack.mallocLong(waits.length); + for (Semaphore w : waits) { + buf.put(w.getNativeObject()); + } + buf.flip(); + return buf; + } + + public LongBuffer toSignalBuffer(MemoryStack stack) { + LongBuffer buf = stack.mallocLong(signals.length); + for (Semaphore s : signals) { + buf.put(s.getNativeObject()); + } + buf.flip(); + return buf; + } + + public long getFenceHandle() { + return fence != null ? fence.getNativeObject() : VK10.VK_NULL_HANDLE; + } + +} From 521c8a72f5c45f526b17babb92e393feff2cffa9 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:39:55 -0400 Subject: [PATCH 30/80] move pool management to logical device --- .../jme3test/vulkan/VulkanHelperTest.java | 6 +-- .../vulkan/commands/CommandAllocator.java | 16 -------- .../com/jme3/vulkan/commands/CommandPool.java | 36 +++++++++++++----- .../java/com/jme3/vulkan/commands/Queue.java | 2 +- .../devices/AbstractPhysicalDevice.java | 2 +- .../vulkan/devices/GeneralPhysicalDevice.java | 2 +- .../jme3/vulkan/devices/LogicalDevice.java | 37 ++++++++++++++++++- .../jme3/vulkan/devices/PhysicalDevice.java | 8 +--- .../java/com/jme3/vulkan/surface/Surface.java | 4 +- .../com/jme3/vulkan/surface/Swapchain.java | 8 ++-- 10 files changed, 74 insertions(+), 47 deletions(-) delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandAllocator.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 6bf866f6d2..8281755e14 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -165,7 +165,7 @@ public void simpleInitApp() { new PoolSize(Descriptor.StorageBuffer, 4), new PoolSize(Descriptor.CombinedImageSampler, 2)); - CommandPool transferPool = new CommandPool(device, physDevice.getGraphics(), true, false); + CommandPool transferPool = device.getShortTermPool(physDevice.getGraphics()); // depth texture depthView = createDepthAttachment(transferPool); @@ -215,7 +215,7 @@ public void simpleInitApp() { p.getColorBlend().addAttachment(new ColorBlendAttachment()); p.getDynamicState().addTypes(DynamicState.Type.ViewPort, DynamicState.Type.Scissor); } - graphicsPool = new CommandPool(device, physDevice.getGraphics(), false, true); + graphicsPool = device.getLongTermPool(physDevice.getGraphics()); // vertex buffers try (MemoryStack stack = MemoryStack.stackPush()) { @@ -266,7 +266,7 @@ public boolean swapchainOutOfDate(Swapchain swapchain, int imageAcquireCode) { s.selectExtentByWindow(); s.selectImageCount(2); } - depthView = createDepthAttachment(new CommandPool(device, device.getPhysicalDevice().getGraphics(), true, false)); + depthView = createDepthAttachment(device.getShortTermPool(device.getPhysicalDevice().getGraphics())); swapchain.createFrameBuffers(renderPass, depthView); return true; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandAllocator.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandAllocator.java deleted file mode 100644 index 00c0ab5e02..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandAllocator.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.jme3.vulkan.commands; - -import java.util.HashMap; -import java.util.Map; - -public class CommandAllocator { - - private final Map pools = new HashMap<>(); - - - - private static class PoolGroup { - - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java index 1bd64f5de4..61597e18f4 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java @@ -9,30 +9,34 @@ import java.nio.LongBuffer; import static com.jme3.renderer.vulkan.VulkanUtils.*; -import static org.lwjgl.vulkan.VK10.*; +import static org.lwjgl.vulkan.VK11.*; public class CommandPool implements Native { - private final LogicalDevice device; private final Queue queue; private final NativeReference ref; + private final boolean shortLived, reusable, protect; private long id; - public CommandPool(LogicalDevice device, Queue queue, boolean isTransient, boolean reset) { - this.device = device; + public CommandPool(Queue queue, boolean shortLived, boolean reusable, boolean protect) { this.queue = queue; + this.shortLived = shortLived; + this.reusable = reusable; + this.protect = protect; try (MemoryStack stack = MemoryStack.stackPush()) { VkCommandPoolCreateInfo create = VkCommandPoolCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO) - .flags((isTransient ? VK_COMMAND_POOL_CREATE_TRANSIENT_BIT : 0) - | (reset ? VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT : 0)) + .flags((shortLived ? VK_COMMAND_POOL_CREATE_TRANSIENT_BIT : 0) + | (reusable ? VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT : 0) + | (protect ? VK_COMMAND_POOL_CREATE_PROTECTED_BIT : 0)) .queueFamilyIndex(queue.getFamilyIndex()); LongBuffer idBuf = stack.mallocLong(1); - check(vkCreateCommandPool(device.getNativeObject(), create, null, idBuf), "Failed to create command pool."); + check(vkCreateCommandPool(queue.getDevice().getNativeObject(), create, null, idBuf), + "Failed to create command pool."); id = idBuf.get(0); } ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); + queue.getDevice().getNativeReference().addDependent(ref); } @Override @@ -43,7 +47,7 @@ public Long getNativeObject() { @Override public Runnable createNativeDestroyer() { return () -> { - vkDestroyCommandPool(device.getNativeObject(), id, null); + vkDestroyCommandPool(queue.getDevice().getNativeObject(), id, null); }; } @@ -66,11 +70,23 @@ public OneTimeCommandBuffer allocateOneTimeCommandBuffer() { } public LogicalDevice getDevice() { - return device; + return queue.getDevice(); } public Queue getQueue() { return queue; } + public boolean isShortLived() { + return shortLived; + } + + public boolean isReusable() { + return reusable; + } + + public boolean isProtected() { + return protect; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/Queue.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/Queue.java index da4be2d3f6..faaff260f4 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/Queue.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/Queue.java @@ -40,7 +40,7 @@ public void waitIdle() { vkQueueWaitIdle(queue); } - public LogicalDevice getDevice() { + public LogicalDevice getDevice() { return device; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java index 87ca164fa8..0b80ea265c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java @@ -28,7 +28,7 @@ public VulkanInstance getInstance() { } @Override - public VkPhysicalDevice getPhysicalDevice() { + public VkPhysicalDevice getDeviceHandle() { return physicalDevice; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java index ae39d937df..ef2e65386a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java @@ -35,7 +35,7 @@ public boolean populateQueueFamilyIndices() { if (graphicsIndex == null && (flags & VK_QUEUE_GRAPHICS_BIT) > 0) { graphicsIndex = i; } else if (presentIndex == null) { - KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR(getPhysicalDevice(), + KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR(getDeviceHandle(), i, surface.getNativeObject(), ibuf); if (ibuf.get(0) == VK_TRUE) { presentIndex = i; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java index 3de7445ffb..9bcc6fd456 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java @@ -3,11 +3,14 @@ import com.jme3.util.natives.Native; import com.jme3.vulkan.VulkanInstance; import com.jme3.vulkan.VulkanObject; +import com.jme3.vulkan.commands.CommandPool; +import com.jme3.vulkan.commands.Queue; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import static com.jme3.renderer.vulkan.VulkanUtils.*; @@ -18,6 +21,7 @@ public class LogicalDevice extends VulkanObject enabledExtensions = new HashSet<>(); private final VkPhysicalDeviceFeatures enabledFeatures = VkPhysicalDeviceFeatures.calloc(); + private final Map> pools = new ConcurrentHashMap<>(); private T physical; public LogicalDevice(VulkanInstance instance) { @@ -48,6 +52,35 @@ public VkPhysicalDeviceFeatures getEnabledFeatures() { return enabledFeatures; } + public CommandPool getShortTermPool(Queue queue) { + return getPool(queue, true, false); + } + + public CommandPool getLongTermPool(Queue queue) { + return getPool(queue, false, true); + } + + public CommandPool getPool(Queue queue, boolean shortLived, boolean reusable) { + return getPool(queue, shortLived, reusable, false); + } + + public CommandPool getPool(Queue queue, boolean shortLived, boolean reusable, boolean protect) { + if (queue.getDevice() != this) { + throw new IllegalArgumentException("Queue must belong to this device."); + } + Collection p = pools.computeIfAbsent(Thread.currentThread(), + t -> new ArrayList<>()); + for (CommandPool pool : p) { + if (pool.getQueue() == queue && pool.isShortLived() == shortLived + && pool.isReusable() == reusable && pool.isProtected() == protect) { + return pool; + } + } + CommandPool pool = new CommandPool(queue, shortLived, reusable, protect); + p.add(pool); + return pool; + } + public Builder build(Function deviceFactory) { return new Builder(deviceFactory); } @@ -96,9 +129,9 @@ protected void build() { create.ppEnabledLayerNames(lyrs.flip()); } PointerBuffer ptr = stack.mallocPointer(1); - check(vkCreateDevice(physical.getPhysicalDevice(), create, null, ptr), + check(vkCreateDevice(physical.getDeviceHandle(), create, null, ptr), "Failed to create logical device."); - object = new VkDevice(ptr.get(0), physical.getPhysicalDevice(), create); + object = new VkDevice(ptr.get(0), physical.getDeviceHandle(), create); ref = Native.get().register(LogicalDevice.this); physical.getInstance().getNativeReference().addDependent(ref); physical.createQueues(LogicalDevice.this); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java index 6c3f388616..449243fddb 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java @@ -6,12 +6,6 @@ import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; -import java.nio.ByteBuffer; -import java.nio.IntBuffer; - -import static com.jme3.renderer.vulkan.VulkanUtils.*; -import static org.lwjgl.vulkan.VK10.*; - public interface PhysicalDevice { boolean populateQueueFamilyIndices(); @@ -22,7 +16,7 @@ public interface PhysicalDevice { VulkanInstance getInstance(); - VkPhysicalDevice getPhysicalDevice(); + VkPhysicalDevice getDeviceHandle(); VkQueueFamilyProperties.Buffer getQueueFamilyProperties(MemoryStack stack); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Surface.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Surface.java index ba5c8e4633..957204752f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Surface.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Surface.java @@ -37,12 +37,12 @@ public Surface(VulkanInstance instance, long window) { public Float evaluateDevice(PhysicalDevice device) { try (MemoryStack stack = MemoryStack.stackPush()) { IntBuffer count = stack.mallocInt(1); - KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device.getPhysicalDevice(), id, count, null); + KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device.getDeviceHandle(), id, count, null); if (count.get(0) == 0) { System.out.println("Reject device by surface support (formats)"); return null; } - KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device.getPhysicalDevice(), id, count, null); + KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device.getDeviceHandle(), id, count, null); if (count.get(0) == 0) { System.out.println("Reject device by surface support (present modes)"); return null; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java index 6ec8dc140a..3cb16ce036 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -221,12 +221,12 @@ public class Builder extends VulkanObject.Builder { public Builder() { caps = VkSurfaceCapabilitiesKHR.malloc(stack); - KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device.getPhysicalDevice().getPhysicalDevice(), surface.getNativeObject(), caps); + KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device.getPhysicalDevice().getDeviceHandle(), surface.getNativeObject(), caps); formats = enumerateBuffer(stack, n -> VkSurfaceFormatKHR.malloc(n, stack), (count, buffer) - -> KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device.getPhysicalDevice().getPhysicalDevice(), + -> KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device.getPhysicalDevice().getDeviceHandle(), surface.getNativeObject(), count, buffer)); modes = enumerateBuffer(stack, stack::mallocInt, (count, buffer) -> - KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device.getPhysicalDevice().getPhysicalDevice(), + KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device.getPhysicalDevice().getDeviceHandle(), surface.getNativeObject(), count, buffer)); if (formats == null || modes == null) { throw new UnsupportedOperationException("Swapchains are not supported by the device."); @@ -253,7 +253,7 @@ protected void build() { } VkSurfaceCapabilitiesKHR caps = VkSurfaceCapabilitiesKHR.calloc(stack); KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( - device.getPhysicalDevice().getPhysicalDevice(), surface.getNativeObject(), caps); + device.getPhysicalDevice().getDeviceHandle(), surface.getNativeObject(), caps); format = Image.Format.vkEnum(selectedFormat.format()); extent = new Extent2(selectedExtent); VkSwapchainCreateInfoKHR create = VkSwapchainCreateInfoKHR.calloc(stack) From a00411b7ba060e02d377434ba50e153c6acc6a12 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Thu, 14 Aug 2025 22:58:57 -0400 Subject: [PATCH 31/80] add stage mask to semaphores --- .../jme3test/vulkan/VulkanHelperTest.java | 5 ++-- .../jme3/vulkan/commands/CommandBuffer.java | 2 +- .../com/jme3/vulkan/commands/CommandPool.java | 4 ++-- .../vulkan/commands/OneTimeCommandBuffer.java | 18 +++++++------- .../java/com/jme3/vulkan/sync/Semaphore.java | 24 +++++++++++++++++++ .../java/com/jme3/vulkan/sync/SyncGroup.java | 10 ++++++++ 6 files changed, 49 insertions(+), 14 deletions(-) diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 8281755e14..e8391de111 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -297,8 +297,7 @@ private ImageView createDepthAttachment(CommandPool pool) { CommandBuffer commands = pool.allocateOneTimeCommandBuffer(); commands.begin(); image.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.DepthStencilAttachmentOptimal); - commands.end(); - commands.submit(new SyncGroup()); + commands.endAndSubmit(new SyncGroup()); commands.getPool().getQueue().waitIdle(); return view; } @@ -307,7 +306,7 @@ private class Frame implements Consumer { // render manager private final CommandBuffer graphicsCommands = graphicsPool.allocateCommandBuffer(); - private final Semaphore imageAvailable = new Semaphore(device); + private final Semaphore imageAvailable = new Semaphore(device, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); private final Semaphore renderFinished = new Semaphore(device); private final Fence inFlight = new Fence(device, true); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java index f24b4ea3ab..3e494eb648 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java @@ -63,7 +63,7 @@ public void submit(SyncGroup sync) { if (sync.containsWaits()) { submit.waitSemaphoreCount(sync.getWaits().length) .pWaitSemaphores(sync.toWaitBuffer(stack)) - .pWaitDstStageMask(stack.ints(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)); + .pWaitDstStageMask(sync.toDstStageBuffer(stack)); } if (sync.containsSignals()) { submit.pSignalSemaphores(sync.toSignalBuffer(stack)); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java index 61597e18f4..127ea18ca1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java @@ -27,8 +27,8 @@ public CommandPool(Queue queue, boolean shortLived, boolean reusable, boolean pr VkCommandPoolCreateInfo create = VkCommandPoolCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO) .flags((shortLived ? VK_COMMAND_POOL_CREATE_TRANSIENT_BIT : 0) - | (reusable ? VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT : 0) - | (protect ? VK_COMMAND_POOL_CREATE_PROTECTED_BIT : 0)) + | (reusable ? VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT : 0) + | (protect ? VK_COMMAND_POOL_CREATE_PROTECTED_BIT : 0)) .queueFamilyIndex(queue.getFamilyIndex()); LongBuffer idBuf = stack.mallocLong(1); check(vkCreateCommandPool(queue.getDevice().getNativeObject(), create, null, idBuf), diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/OneTimeCommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/OneTimeCommandBuffer.java index 7201f7c2b9..06775cf648 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/OneTimeCommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/OneTimeCommandBuffer.java @@ -2,6 +2,7 @@ import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.sync.Semaphore; +import com.jme3.vulkan.sync.SyncGroup; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkCommandBufferBeginInfo; import org.lwjgl.vulkan.VkSubmitInfo; @@ -22,7 +23,7 @@ public void begin() { throw new IllegalStateException("Command buffer already recording."); } if (active) { - throw new IllegalStateException("Buffer already freed."); + throw new IllegalStateException("One-time command buffer has already been used."); } try (MemoryStack stack = MemoryStack.stackPush()) { VkCommandBufferBeginInfo begin = VkCommandBufferBeginInfo.calloc(stack) @@ -34,7 +35,7 @@ public void begin() { } @Override - public void submit(Semaphore wait, Semaphore signal, Fence fence) { + public void submit(SyncGroup sync) { if (recording) { throw new IllegalStateException("Command buffer is still recording."); } @@ -42,14 +43,15 @@ public void submit(Semaphore wait, Semaphore signal, Fence fence) { VkSubmitInfo.Buffer submit = VkSubmitInfo.calloc(1, stack) .sType(VK_STRUCTURE_TYPE_SUBMIT_INFO) .pCommandBuffers(stack.pointers(buffer)); - if (wait != null) { - submit.waitSemaphoreCount(1).pWaitSemaphores(stack.longs(wait.getNativeObject())) - .pWaitDstStageMask(stack.ints(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)); + if (sync.containsWaits()) { + submit.waitSemaphoreCount(sync.getWaits().length) + .pWaitSemaphores(sync.toWaitBuffer(stack)) + .pWaitDstStageMask(sync.toDstStageBuffer(stack)); } - if (signal != null) { - submit.pSignalSemaphores(stack.longs(signal.getNativeObject())); + if (sync.containsSignals()) { + submit.pSignalSemaphores(sync.toSignalBuffer(stack)); } - pool.getQueue().submit(submit, fence); + pool.getQueue().submit(submit, sync.getFence()); pool.getQueue().waitIdle(); vkFreeCommandBuffers(pool.getDevice().getNativeObject(), pool.getNativeObject(), buffer); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java index 25cfdff5be..8c58c518a1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java @@ -17,9 +17,15 @@ public class Semaphore implements Native { private final LogicalDevice device; private final NativeReference ref; private long id; + private int dstStageMask; public Semaphore(LogicalDevice device) { + this(device, 0); + } + + public Semaphore(LogicalDevice device, int dstStageMask) { this.device = device; + this.dstStageMask = dstStageMask; try (MemoryStack stack = MemoryStack.stackPush()) { VkSemaphoreCreateInfo create = VkSemaphoreCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO); @@ -50,10 +56,28 @@ public NativeReference getNativeReference() { return ref; } + public void setDstStageMask(int dstStageMask) { + this.dstStageMask = dstStageMask; + } + + public void addDstStageBit(int stageBit) { + this.dstStageMask |= stageBit; + } + + public void removeDstStageBit(int stageBit) { + this.dstStageMask &= ~stageBit; + } + + public int getDstStageMask() { + return dstStageMask; + } + + @Deprecated public long getId() { return id; } + @Deprecated public LongBuffer toBuffer(MemoryStack stack) { return stack.longs(id); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java index 27dfcffda1..267d6aee05 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java @@ -3,6 +3,7 @@ import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VK10; +import java.nio.IntBuffer; import java.nio.LongBuffer; public class SyncGroup { @@ -88,6 +89,15 @@ public LongBuffer toWaitBuffer(MemoryStack stack) { return buf; } + public IntBuffer toDstStageBuffer(MemoryStack stack) { + IntBuffer buf = stack.mallocInt(waits.length); + for (Semaphore s : signals) { + buf.put(s.getDstStageMask()); + } + buf.flip(); + return buf; + } + public LongBuffer toSignalBuffer(MemoryStack stack) { LongBuffer buf = stack.mallocLong(signals.length); for (Semaphore s : signals) { From d0340ab3eb17ac11f09bc6fc951487ea6d8e542e Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 16 Aug 2025 17:53:59 -0400 Subject: [PATCH 32/80] figure out uniform details --- .../jme3test/vulkan/VulkanHelperTest.java | 13 +-- .../com/jme3/vulkan/buffers/GpuBuffer.java | 16 +++- .../jme3/vulkan/buffers/StageableBuffer.java | 21 +++-- .../com/jme3/vulkan/buffers/StaticBuffer.java | 42 +++++++++ .../vulkan/descriptors/DescriptorSet.java | 60 ++++++------- .../descriptors/DescriptorSetWriter.java | 4 - .../jme3/vulkan/devices/ComputeDevice.java | 9 -- .../vulkan/devices/GeneralPhysicalDevice.java | 8 +- .../jme3/vulkan/devices/PhysicalDevice.java | 5 ++ .../jme3/vulkan/images/VulkanImageLoader.java | 2 +- .../com/jme3/vulkan/material/Material.java | 23 ++++- .../jme3/vulkan/material/TestMaterial.java | 9 +- .../material/uniforms/AbstractUniform.java | 31 +++++++ .../material/uniforms/BufferUniform.java | 85 ++++++++++++++++--- .../material/uniforms/TextureUniform.java | 49 +++++++++-- .../vulkan/material/uniforms/Uniform.java | 63 ++------------ .../vulkan/material/uniforms/UniformSet.java | 24 ++++-- .../java/com/jme3/vulkan/sync/SyncGroup.java | 5 ++ .../java/com/jme3/vulkan/sync/TaskQueue.java | 9 ++ .../main/resources/Shaders/VulkanTest.json | 14 +++ .../resources/Shaders/VulkanVertTest.json | 15 ++++ 21 files changed, 347 insertions(+), 160 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/ComputeDevice.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/TaskQueue.java create mode 100644 jme3-testdata/src/main/resources/Shaders/VulkanTest.json create mode 100644 jme3-testdata/src/main/resources/Shaders/VulkanVertTest.json diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index e8391de111..af8ba1ee97 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -223,17 +223,12 @@ public void simpleInitApp() { // the cpu cannot directly access fast gpu memory. The solution is to // copy cpu-side data to a mutual staging buffer, then have the gpu copy // that data to faster memory. Hence, why we use a StageableBuffer here. - vertexBuffer = new StageableBuffer(device, MemorySize.floats(vertexData.capacity()), + vertexBuffer = new StaticBuffer(device, transferPool, MemorySize.floats(vertexData.capacity()), new BufferUsageFlags().vertexBuffer(), new MemoryFlags().deviceLocal(), false); - vertexBuffer.copy(stack, vertexData); // copy data to staging buffer - vertexBuffer.transfer(transferPool); - vertexBuffer.freeStagingBuffer(); - // index buffer - indexBuffer = new StageableBuffer(device, MemorySize.ints(indexData.capacity()), + vertexBuffer.copy(stack, vertexData); + indexBuffer = new StaticBuffer(device, transferPool, MemorySize.ints(indexData.capacity()), new BufferUsageFlags().indexBuffer(), new MemoryFlags().deviceLocal(), false); indexBuffer.copy(stack, indexData); - indexBuffer.transfer(transferPool); - indexBuffer.freeStagingBuffer(); } // material color texture @@ -297,7 +292,7 @@ private ImageView createDepthAttachment(CommandPool pool) { CommandBuffer commands = pool.allocateOneTimeCommandBuffer(); commands.begin(); image.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.DepthStencilAttachmentOptimal); - commands.endAndSubmit(new SyncGroup()); + commands.endAndSubmit(SyncGroup.ASYNC); commands.getPool().getQueue().waitIdle(); return view; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index 13162b6a66..4f6656022b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -11,6 +11,7 @@ import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.Struct; +import org.lwjgl.system.StructBuffer; import org.lwjgl.vulkan.VkBufferCopy; import org.lwjgl.vulkan.VkBufferCreateInfo; import org.lwjgl.vulkan.VkMemoryRequirements; @@ -106,8 +107,8 @@ public LongBuffer mapLongs(MemoryStack stack, int offset, int size, int flags) { return map(stack, offset, size * Long.BYTES, flags).getLongBuffer(0, size); } - public > T mapStruct(MemoryStack stack, int offset, int size, int flags, LongFunction factory) { - return factory.apply(map(stack, offset, size, flags).get(0)); + public T mapObject(MemoryStack stack, int offset, int size, int flags, Function factory) { + return factory.apply(map(stack, offset, size, flags)); } public void copy(MemoryStack stack, ByteBuffer buffer) { @@ -153,6 +154,13 @@ public void copy(MemoryStack stack, Struct struct) { unmap(); } + public void copy(MemoryStack stack, StructBuffer buffer) { + verifyBufferSize(buffer.limit(), buffer.sizeof()); + int size = buffer.limit() * buffer.sizeof(); + MemoryUtil.memCopy(MemoryUtil.memByteBuffer(buffer.address(), size), mapBytes(stack, 0, size, 0)); + unmap(); + } + public void unmap() { memory.unmap(); } @@ -172,4 +180,8 @@ public MemorySize size() { return size; } + public LogicalDevice getDevice() { + return device; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index d64dc01e0c..a2a89371db 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -18,7 +18,7 @@ public class StageableBuffer extends GpuBuffer { public StageableBuffer(LogicalDevice device, MemorySize size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { super(device, size, usage.transferDst(), mem, concurrent); - stage = new GpuBuffer(device, size, new BufferUsageFlags().transferSrc(), + this.stage = new GpuBuffer(device, size, new BufferUsageFlags().transferSrc(), new MemoryFlags().hostVisible().hostCoherent(), concurrent); } @@ -38,25 +38,24 @@ public void freeMemory() { stage.freeMemory(); } - public void unmap(SyncGroup sync) { - stage.unmap(); - } - public void transfer(CommandPool transferPool) { - transfer(transferPool, new SyncGroup()); - transferPool.getQueue().waitIdle(); + transfer(transferPool, SyncGroup.ASYNC); } public void transfer(CommandPool transferPool, SyncGroup sync) { if (stage.getNativeReference().isDestroyed()) { throw new IllegalStateException("Staging buffer has already been freed."); } - CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); - commands.begin(); + CommandBuffer cmd = transferPool.allocateOneTimeCommandBuffer(); + cmd.begin(); + transfer(cmd); + cmd.endAndSubmit(sync); + } + + public void transfer(CommandBuffer cmd) { try (MemoryStack stack = MemoryStack.stackPush()) { - recordCopy(stack, commands, stage, 0, 0, size().getBytes()); + recordCopy(stack, cmd, stage, 0, 0, size().getBytes()); } - commands.endAndSubmit(sync); } public void freeStagingBuffer() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java new file mode 100644 index 0000000000..0eabbcbf22 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java @@ -0,0 +1,42 @@ +package com.jme3.vulkan.buffers; + +import com.jme3.vulkan.commands.CommandPool; +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.flags.BufferUsageFlags; +import com.jme3.vulkan.flags.MemoryFlags; +import com.jme3.vulkan.sync.Fence; +import com.jme3.vulkan.sync.SyncGroup; +import com.jme3.vulkan.sync.TaskQueue; + +import java.util.concurrent.*; + +public class StaticBuffer extends StageableBuffer { + + private final CommandPool transferPool; + + public StaticBuffer(LogicalDevice device, CommandPool transferPool, MemorySize size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + super(device, size, usage, mem, concurrent); + this.transferPool = transferPool; + } + + @Override + public void unmap() { + super.unmap(); + SyncGroup sync = new SyncGroup(new Fence(getDevice(), false)); + transfer(transferPool, sync); + sync.getFence().block(5000); + freeStagingBuffer(); + } + + public void unmapAsync(TaskQueue queue, SyncGroup sync) { + if (!sync.containsFence()) { + throw new IllegalArgumentException("SyncGroup must contain a fence."); + } + transfer(transferPool, sync); + queue.submit(new FutureTask<>(() -> { + sync.getFence().block(5000); + freeStagingBuffer(); + }, true)); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java index cdf45226a0..51337ef693 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -1,67 +1,57 @@ package com.jme3.vulkan.descriptors; +import com.jme3.util.natives.Native; +import com.jme3.vulkan.VulkanObject; import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkWriteDescriptorSet; import static org.lwjgl.vulkan.VK10.*; -public class DescriptorSet { +public class DescriptorSet extends VulkanObject { private final LogicalDevice device; private final DescriptorPool pool; private final DescriptorSetLayout layout; - private final long id; public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSetLayout layout, long id) { this.device = device; this.pool = pool; this.layout = layout; - this.id = id; + this.object = id; + ref = Native.get().register(this); + pool.getNativeReference().addDependent(ref); } - public void update(boolean force, DescriptorSetWriter... writers) { - try (MemoryStack stack = MemoryStack.stackPush()) { - int updating = countWritersToUpdate(force, writers); - if (updating > 0) { - VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(updating, stack); - for (DescriptorSetWriter w : writers) { - if (force || w.isUpdateNeeded()) { - w.populateWrite(stack, write.get() - .sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET) - .dstSet(id)); - } - } - write.flip(); - vkUpdateDescriptorSets(device.getNativeObject(), write, null); + @Override + public Runnable createNativeDestroyer() { + return () -> { + try (MemoryStack stack = MemoryStack.stackPush()) { + vkFreeDescriptorSets(device.getNativeObject(), + pool.getNativeObject(), stack.longs(object)); } - } + }; } - private int countWritersToUpdate(boolean force, DescriptorSetWriter... writers) { - if (force) { - return writers.length; - } - int updating = 0; - for (DescriptorSetWriter w : writers) { - if (w.isUpdateNeeded()) { - updating++; - } + public void write(DescriptorSetWriter... writers) { + try (MemoryStack stack = MemoryStack.stackPush()) { + VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(writers.length, stack); + populateWriteBuffer(stack, write, writers); + write.flip(); + vkUpdateDescriptorSets(device.getNativeObject(), write, null); } - return updating; } - public void free() { - if (pool.getNativeReference().isDestroyed()) { - return; - } - try (MemoryStack stack = MemoryStack.stackPush()) { - vkFreeDescriptorSets(device.getNativeObject(), pool.getNativeObject(), stack.longs(id)); + public void populateWriteBuffer(MemoryStack stack, VkWriteDescriptorSet.Buffer buffer, DescriptorSetWriter... writers) { + for (DescriptorSetWriter w : writers) { + w.populateWrite(stack, buffer.get() + .sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET) + .dstSet(object)); } } public long getId() { - return id; + return object; } public LogicalDevice getDevice() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java index 027d43889f..f21740f2de 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java @@ -7,8 +7,4 @@ public interface DescriptorSetWriter { void populateWrite(MemoryStack stack, VkWriteDescriptorSet write); - default boolean isUpdateNeeded() { - return true; - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/ComputeDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/ComputeDevice.java deleted file mode 100644 index 657074bd0a..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/ComputeDevice.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.jme3.vulkan.devices; - -import com.jme3.vulkan.commands.Queue; - -public interface ComputeDevice extends PhysicalDevice { - - Queue getCompute(); - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java index ef2e65386a..50c73a46b7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java @@ -12,8 +12,7 @@ import static org.lwjgl.vulkan.VK10.*; -public class GeneralPhysicalDevice extends AbstractPhysicalDevice - implements GraphicalDevice, PresentDevice, ComputeDevice { +public class GeneralPhysicalDevice extends AbstractPhysicalDevice implements GraphicalDevice, PresentDevice { private final Surface surface; private Integer graphicsIndex, presentIndex; @@ -82,6 +81,11 @@ public Queue getCompute() { return graphics; } + @Override + public Queue getDataTransfer() { + return graphics; + } + public boolean allQueuesAvailable() { return graphicsIndex != null && presentIndex != null; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java index 449243fddb..29e0d6d314 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java @@ -1,5 +1,6 @@ package com.jme3.vulkan.devices; +import com.jme3.vulkan.commands.Queue; import com.jme3.vulkan.surface.Surface; import com.jme3.vulkan.VulkanInstance; import com.jme3.vulkan.images.Image; @@ -34,4 +35,8 @@ public interface PhysicalDevice { boolean querySwapchainSupport(Surface surface); + Queue getCompute(); + + Queue getDataTransfer(); + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index 8e46d13d0c..f89611a805 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -175,7 +175,7 @@ Image.Tiling.Optimal, new ImageUsageFlags().transferDst().sampled(), image.getNativeObject(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, region); image.transitionLayout(commands, Image.Layout.TransferDstOptimal, Image.Layout.ShaderReadOnlyOptimal); commands.end(); - commands.submit(new SyncGroup()); + commands.submit(SyncGroup.ASYNC); transferPool.getQueue().waitIdle(); return image; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index 24a78dca91..fbb6fd3958 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -19,6 +19,7 @@ public class Material { private final DescriptorPool pool; private final List uniforms = new ArrayList<>(); + private final HashMap> uniformLookup = new HashMap<>(); public Material(DescriptorPool pool) { this.pool = pool; @@ -34,7 +35,7 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { ArrayList allocationLayouts = new ArrayList<>(availableLayouts.size()); ArrayList allocationTargets = new ArrayList<>(availableLayouts.size()); for (UniformSet set : uniforms) { - set.update(pipeline); + set.update(pipeline.getDevice()); // Select an existing descriptor set to be active. If // no existing set may be selected, a set layout is // returned with which to allocate a new descriptor set. @@ -54,7 +55,7 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { for (int i = 0; i < allocatedSets.length; i++) { UniformSet target = allocationTargets.get(i); target.addActiveSet(allocatedSets[i]); - allocatedSets[i].update(true, target.getUniforms()); + allocatedSets[i].write(target.getUniforms()); } } try (MemoryStack stack = MemoryStack.stackPush()) { @@ -81,4 +82,22 @@ public List getSets() { return Collections.unmodifiableList(uniforms); } + @SuppressWarnings("unchecked") + public T get(String name) { + // Not sure if caching results are really worth it... + Uniform uniform = uniformLookup.get(name); + if (uniform != null) { + return (T)uniform; + } + for (UniformSet set : uniforms) { + for (Uniform u : set.getUniforms()) { + if (name.equals(u.getName())) { + uniformLookup.put(u.getName(), u); + return (T)u; + } + } + } + return null; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java index 4615dde8a7..fcbb8e3971 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java @@ -1,6 +1,5 @@ package com.jme3.vulkan.material; -import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.DescriptorPool; import com.jme3.vulkan.images.Image; @@ -9,17 +8,17 @@ public class TestMaterial extends Material { - private final BufferUniform matrices = new BufferUniform<>( - Descriptor.UniformBuffer, 0); + private final BufferUniform matrices = new BufferUniform( + "Matrices", Descriptor.UniformBuffer, 0); private final TextureUniform baseColorMap = new TextureUniform( - Image.Layout.ShaderReadOnlyOptimal, 1); + "BaseColorMap", Image.Layout.ShaderReadOnlyOptimal, 1); public TestMaterial(DescriptorPool pool) { super(pool); addSet(matrices, baseColorMap); } - public BufferUniform getMatrices() { + public BufferUniform getMatrices() { return matrices; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java new file mode 100644 index 0000000000..4fb896d3c0 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java @@ -0,0 +1,31 @@ +package com.jme3.vulkan.material.uniforms; + +import com.jme3.vulkan.descriptors.Descriptor; + +public abstract class AbstractUniform implements Uniform { + + protected final String name; + protected final Descriptor type; + protected final int bindingIndex; + + public AbstractUniform(String name, Descriptor type, int bindingIndex) { + this.name = name; + this.type = type; + this.bindingIndex = bindingIndex; + } + + @Override + public String getName() { + return name; + } + + @Override + public int getBindingIndex() { + return bindingIndex; + } + + public Descriptor getType() { + return type; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index d25975db9d..6427628c28 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -1,35 +1,96 @@ package com.jme3.vulkan.material.uniforms; -import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.buffers.*; import com.jme3.vulkan.descriptors.Descriptor; +import com.jme3.vulkan.descriptors.SetLayoutBinding; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.Struct; import org.lwjgl.vulkan.VkDescriptorBufferInfo; import org.lwjgl.vulkan.VkWriteDescriptorSet; -public class BufferUniform extends Uniform { +import java.util.Objects; +import java.util.function.Function; - public BufferUniform(Descriptor type, int bindingIndex) { - super(type, bindingIndex); +public class BufferUniform extends AbstractUniform { + + private GpuBuffer buffer; + private boolean updateFlag = true; + private Function, GpuBuffer> bufferFactory; + + public BufferUniform(String name, Descriptor type, int bindingIndex) { + super(name, type, bindingIndex); + } + + public BufferUniform(String name, Descriptor type, int bindingIndex, GpuBuffer buffer) { + super(name, type, bindingIndex); + this.buffer = buffer; + } + + public BufferUniform(String name, Descriptor type, int bindingIndex, Function, GpuBuffer> bufferFactory) { + super(name, type, bindingIndex); + this.bufferFactory = bufferFactory; } @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { - super.populateWrite(stack, write); VkDescriptorBufferInfo.Buffer info = VkDescriptorBufferInfo.calloc(1, stack) - .buffer(value.getNativeObject()) + .buffer(buffer.getNativeObject()) .offset(0L) - .range(value.size().getBytes()); - write.pBufferInfo(info); + .range(buffer.size().getBytes()); + write.pBufferInfo(info) + .descriptorCount(1) + .dstArrayElement(0) + .dstBinding(bindingIndex) + .descriptorType(type.getVkEnum()); + updateFlag = false; } - public void setStruct(Struct struct) { - if (value == null) { - throw new NullPointerException("Buffer value is null."); + @Override + public boolean update(LogicalDevice device) { + if (buffer == null) { + if (bufferFactory != null) { + buffer = bufferFactory.apply(device); + updateFlag = true; + } else { + throw new NullPointerException("Uniform buffer is null."); + } + } + return updateFlag; + } + + @Override + public void setValue(GpuBuffer value) { + if (this.buffer != value) { + this.buffer = value; + updateFlag = true; } + } + + @Override + public GpuBuffer getValue() { + return buffer; + } + + @Override + public boolean isBindingCompatible(SetLayoutBinding binding) { + return type == binding.getType() + && bindingIndex == binding.getBinding() + && binding.getDescriptors() == 1; + } + + public void setBufferFactory(Function, GpuBuffer> bufferFactory) { + this.bufferFactory = bufferFactory; + } + + public void setStruct(Struct struct) { try (MemoryStack stack = MemoryStack.stackPush()) { - value.copy(stack, struct); + Objects.requireNonNull(buffer, "Uniform buffer is null.").copy(stack, struct); } } + public Function, GpuBuffer> getBufferFactory() { + return bufferFactory; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index 422ac72931..700a14c9a4 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -1,29 +1,64 @@ package com.jme3.vulkan.material.uniforms; import com.jme3.vulkan.descriptors.Descriptor; +import com.jme3.vulkan.descriptors.SetLayoutBinding; +import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; import com.jme3.vulkan.images.Texture; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDescriptorImageInfo; import org.lwjgl.vulkan.VkWriteDescriptorSet; -public class TextureUniform extends Uniform { +public class TextureUniform extends AbstractUniform { private final Image.Layout layout; + private Texture texture; + private boolean updateFlag = true; - public TextureUniform(Image.Layout layout, int bindingIndex) { - super(Descriptor.CombinedImageSampler, bindingIndex); + public TextureUniform(String name, Image.Layout layout, int bindingIndex) { + super(name, Descriptor.CombinedImageSampler, bindingIndex); this.layout = layout; } @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { - super.populateWrite(stack, write); VkDescriptorImageInfo.Buffer info = VkDescriptorImageInfo.calloc(1, stack) - .imageView(value.getImage().getNativeObject()) - .sampler(value.getNativeObject()) + .imageView(texture.getImage().getNativeObject()) + .sampler(texture.getNativeObject()) .imageLayout(layout.getVkEnum()); - write.pImageInfo(info); + write.pImageInfo(info) + .descriptorType(type.getVkEnum()) + .dstBinding(bindingIndex) + .dstArrayElement(0) + .descriptorCount(1); + } + + @Override + public boolean update(LogicalDevice device) { + if (texture == null) { + throw new NullPointerException("Uniform texture is null."); + } + return updateFlag; + } + + @Override + public void setValue(Texture value) { + if (this.texture != value) { + this.texture = value; + updateFlag = true; + } + } + + @Override + public Texture getValue() { + return texture; + } + + @Override + public boolean isBindingCompatible(SetLayoutBinding binding) { + return type == binding.getType() + && bindingIndex == binding.getBinding() + && binding.getDescriptors() == 1; } public Image.Layout getLayout() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java index 61ab10de14..2edbb09ee8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java @@ -1,67 +1,22 @@ package com.jme3.vulkan.material.uniforms; -import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.DescriptorSetWriter; import com.jme3.vulkan.descriptors.SetLayoutBinding; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VkWriteDescriptorSet; +import com.jme3.vulkan.devices.LogicalDevice; -public abstract class Uniform implements DescriptorSetWriter { +public interface Uniform extends DescriptorSetWriter { - private final Descriptor type; - private final int bindingIndex; - private boolean updateFlag = true; - protected T value; + // true to trigger update of descriptor sets + boolean update(LogicalDevice device); - public Uniform(Descriptor type, int bindingIndex) { - this.type = type; - this.bindingIndex = bindingIndex; - } + void setValue(T value); - @Override - public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { - write.descriptorType(type.getVkEnum()) - .dstBinding(bindingIndex) - .dstArrayElement(0) - .descriptorCount(1); - } + T getValue(); - @Override - public boolean isUpdateNeeded() { - return updateFlag; - } + int getBindingIndex(); - public boolean isBindingCompatible(SetLayoutBinding binding) { - return binding.getType() == type - && binding.getBinding() == bindingIndex - && binding.getDescriptors() == 1; - } + boolean isBindingCompatible(SetLayoutBinding binding); - public void setValue(T value) { - if (this.value != value) { - setUpdateNeeded(); - } - this.value = value; - } - - public void setUpdateNeeded() { - updateFlag = true; - } - - public void clearUpdateNeeded() { - updateFlag = false; - } - - public Descriptor getType() { - return type; - } - - public int getBindingIndex() { - return bindingIndex; - } - - public T getValue() { - return value; - } + String getName(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/UniformSet.java index 090509fe54..d2767f87fd 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/UniformSet.java @@ -3,7 +3,10 @@ import com.jme3.vulkan.descriptors.DescriptorSet; import com.jme3.vulkan.descriptors.DescriptorSetLayout; import com.jme3.vulkan.descriptors.SetLayoutBinding; -import com.jme3.vulkan.pipelines.Pipeline; +import com.jme3.vulkan.devices.LogicalDevice; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VK10; +import org.lwjgl.vulkan.VkWriteDescriptorSet; import java.util.*; @@ -11,7 +14,6 @@ public class UniformSet { private final Uniform[] uniforms; private final List sets = new ArrayList<>(); - private final Collection outdatedSets = new ArrayList<>(); private DescriptorSet activeSet; public UniformSet(Uniform... uniforms) { @@ -62,12 +64,20 @@ public DescriptorSetLayout selectExistingActiveSet(List ava return null; } - public void update(Pipeline pipeline) { - for (DescriptorSet set : sets) { - set.update(false, uniforms); + public void update(LogicalDevice device) { + ArrayList> writers = new ArrayList<>(uniforms.length); + for (Uniform u : uniforms) { + if (u.update(device)) { + writers.add(u); + } } - for (Uniform u : uniforms) { - u.clearUpdateNeeded(); + if (!writers.isEmpty()) try (MemoryStack stack = MemoryStack.stackPush()) { + VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(writers.size() * sets.size(), stack); + for (DescriptorSet s : sets) { + s.populateWriteBuffer(stack, write, writers.toArray(new Uniform[0])); + } + write.flip(); + VK10.vkUpdateDescriptorSets(device.getNativeObject(), write, null); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java index 267d6aee05..c16b708fe0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java @@ -8,6 +8,7 @@ public class SyncGroup { + public static final SyncGroup ASYNC = new SyncGroup(); private static final Semaphore[] EMPTY = new Semaphore[0]; private static Semaphore[] toArray(Semaphore s) { @@ -38,6 +39,10 @@ public SyncGroup(Semaphore[] waits, Semaphore signal) { this(waits, toArray(signal), null); } + public SyncGroup(Semaphore[] waits, Semaphore[] signals) { + this(waits, signals, null); + } + public SyncGroup(Semaphore wait, Semaphore signal, Fence fence) { this(toArray(wait), toArray(signal), fence); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/TaskQueue.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/TaskQueue.java new file mode 100644 index 0000000000..69505c663a --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/TaskQueue.java @@ -0,0 +1,9 @@ +package com.jme3.vulkan.sync; + +import java.util.concurrent.Future; + +public interface TaskQueue { + + void submit(Future task); + +} diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanTest.json b/jme3-testdata/src/main/resources/Shaders/VulkanTest.json new file mode 100644 index 0000000000..740da8c67f --- /dev/null +++ b/jme3-testdata/src/main/resources/Shaders/VulkanTest.json @@ -0,0 +1,14 @@ +{ + "name" : "VulkanTest", + "techniques" : { + "main" : { + "shaders" : { + "vertex" : "Shaders/VulkanFragTest.json", + "fragment" : "Shaders/VulkanVertTest.json" + }, + "defines" : { + "MY_CUSTOM_DEFINE" : 1 + } + } + } +} \ No newline at end of file diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.json b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.json new file mode 100644 index 0000000000..8bc5811cb9 --- /dev/null +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.json @@ -0,0 +1,15 @@ +{ + "shader" : "Shaders/VulkanVertTest.glsl", + "type" : "vertex", + "platforms" : ["vulkan", "opengl"], + "versions" : [460, 450], + "parameters" : { + "Matrices" : { + "type" : "UniformBuffer", + "set" : 0, + "binding" : 0, + "usage" : "Stream", + "define" : "MATRICES" + } + } +} \ No newline at end of file From ab0de0e90e388df1a64d877f56dec647ca6d6c06 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 19 Aug 2025 10:59:44 -0400 Subject: [PATCH 33/80] add Flag interface to handle bit flags --- .../jme3test/vulkan/VulkanHelperTest.java | 52 +++++++------ .../com/jme3/vulkan/buffers/BufferUsage.java | 30 +++++++ .../com/jme3/vulkan/buffers/GpuBuffer.java | 13 ++-- .../jme3/vulkan/buffers/PersistentBuffer.java | 7 +- .../jme3/vulkan/buffers/StageableBuffer.java | 15 ++-- .../com/jme3/vulkan/buffers/StaticBuffer.java | 8 +- .../vulkan/descriptors/DescriptorPool.java | 2 - .../vulkan/descriptors/DescriptorSet.java | 6 +- .../vulkan/descriptors/SetLayoutBinding.java | 17 ++-- .../devices/AbstractPhysicalDevice.java | 12 +-- .../jme3/vulkan/devices/PhysicalDevice.java | 6 +- .../jme3/vulkan/flags/BufferUsageFlags.java | 38 --------- .../jme3/vulkan/flags/ImageUsageFlags.java | 33 -------- .../com/jme3/vulkan/flags/MemoryFlags.java | 38 --------- .../java/com/jme3/vulkan/images/GpuImage.java | 16 ++-- .../com/jme3/vulkan/images/ImageUsage.java | 29 +++++++ .../jme3/vulkan/images/VulkanImageLoader.java | 14 ++-- .../com/jme3/vulkan/material/Material.java | 32 ++++---- .../vulkan/material/SetAllocationInfo.java | 23 ++++++ .../jme3/vulkan/material/TestMaterial.java | 5 +- .../material/{uniforms => }/UniformSet.java | 22 ++++-- .../material/uniforms/AbstractUniform.java | 12 ++- .../material/uniforms/BufferUniform.java | 27 +++---- .../material/uniforms/TextureUniform.java | 6 +- .../vulkan/material/uniforms/Uniform.java | 11 +-- .../com/jme3/vulkan/memory/MemoryFlag.java | 26 +++++++ .../{buffers => memory}/MemoryRegion.java | 3 +- .../{buffers => memory}/MemorySize.java | 2 +- .../jme3/vulkan/pass/SubpassDependency.java | 31 ++++---- .../com/jme3/vulkan/pipelines/Access.java | 38 +++++++++ .../vulkan/pipelines/GraphicsPipeline.java | 36 ++++----- .../com/jme3/vulkan/pipelines/Pipeline.java | 2 + .../jme3/vulkan/pipelines/PipelineStage.java | 39 ++++++++++ .../com/jme3/vulkan/shader/ShaderModule.java | 8 +- .../com/jme3/vulkan/shader/ShaderStage.java | 29 +++++++ .../com/jme3/vulkan/surface/Swapchain.java | 1 + .../java/com/jme3/vulkan/sync/Semaphore.java | 20 ++--- .../java/com/jme3/vulkan/sync/SyncGroup.java | 2 +- .../com/jme3/vulkan/{ => util}/Extent2.java | 2 +- .../main/java/com/jme3/vulkan/util/Flag.java | 78 +++++++++++++++++++ .../{ => util}/RenderStateToVulkan.java | 2 +- .../main/resources/Shaders/VulkanTest.json | 4 +- .../src/main/resources/Shaders/VulkanTest.yml | 20 +++++ .../main/resources/Shaders/VulkanVertTest.yml | 6 ++ 44 files changed, 529 insertions(+), 294 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferUsage.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/BufferUsageFlags.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/MemoryFlags.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageUsage.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/SetAllocationInfo.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/{uniforms => }/UniformSet.java (81%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryFlag.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{buffers => memory}/MemoryRegion.java (97%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{buffers => memory}/MemorySize.java (97%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Access.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineStage.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderStage.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => util}/Extent2.java (96%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => util}/RenderStateToVulkan.java (99%) create mode 100644 jme3-testdata/src/main/resources/Shaders/VulkanTest.yml create mode 100644 jme3-testdata/src/main/resources/Shaders/VulkanVertTest.yml diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index af8ba1ee97..7065ee728e 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -17,26 +17,26 @@ import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.*; -import com.jme3.vulkan.flags.ImageUsageFlags; -import com.jme3.vulkan.flags.MemoryFlags; -import com.jme3.vulkan.flags.BufferUsageFlags; import com.jme3.vulkan.images.*; import com.jme3.vulkan.material.TestMaterial; +import com.jme3.vulkan.material.uniforms.BufferUniform; +import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.pass.Attachment; import com.jme3.vulkan.pass.Subpass; -import com.jme3.vulkan.pipelines.GraphicsPipeline; +import com.jme3.vulkan.pipelines.*; import com.jme3.vulkan.pass.RenderPass; -import com.jme3.vulkan.pipelines.PipelineBindPoint; -import com.jme3.vulkan.pipelines.PipelineLayout; import com.jme3.vulkan.pipelines.states.ColorBlendAttachment; import com.jme3.vulkan.pipelines.states.DynamicState; import com.jme3.vulkan.shader.ShaderModule; +import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.surface.Surface; import com.jme3.vulkan.surface.Swapchain; import com.jme3.vulkan.surface.SwapchainUpdater; import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.sync.Semaphore; import com.jme3.vulkan.sync.SyncGroup; +import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -158,8 +158,8 @@ public void simpleInitApp() { // requiring 1 descriptor, and an image sampler at binding 1 // requiring 1 descriptor. descriptorLayout = new DescriptorSetLayout(device, - new SetLayoutBinding(Descriptor.UniformBuffer, 0, 1, VK_SHADER_STAGE_VERTEX_BIT), - new SetLayoutBinding(Descriptor.CombinedImageSampler, 1, 1, VK_SHADER_STAGE_FRAGMENT_BIT)); + new SetLayoutBinding(Descriptor.UniformBuffer, 0, 1, ShaderStage.Vertex), + new SetLayoutBinding(Descriptor.CombinedImageSampler, 1, 1, ShaderStage.Fragment)); descriptorPool = new DescriptorPool(device, 3, new PoolSize(Descriptor.UniformBuffer, 3), new PoolSize(Descriptor.StorageBuffer, 4), @@ -173,9 +173,9 @@ public void simpleInitApp() { // pipeline pipelineLayout = new PipelineLayout(device, descriptorLayout); vertModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( - "Shaders/VulkanVertTest.glsl", ShaderType.Vertex)), "main"); + "Shaders/VulkanVertTest.glsl", ShaderType.Vertex))); fragModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( - "Shaders/VulkanFragTest.glsl", ShaderType.Fragment)), "main"); + "Shaders/VulkanFragTest.glsl", ShaderType.Fragment))); renderPass = new RenderPass(device); try (RenderPass.Builder p = renderPass.build()) { Attachment color = p.createAttachment(swapchain.getFormat(), VK_SAMPLE_COUNT_1_BIT, a -> { @@ -199,17 +199,17 @@ public void simpleInitApp() { s.setDepthStencilAttachment(depth.createReference(Image.Layout.DepthStencilAttachmentOptimal)); }); p.createDependency(null, subpass, d -> { - d.setSrcStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT); - d.setSrcAccessMask(subpass.getPosition()); - d.setDstStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT); - d.setDstAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT); + d.setSrcStageMask(Flag.of(PipelineStage.ColorAttachmentOutput, PipelineStage.EarlyFragmentTests)); + d.setSrcAccessMask(Flag.of(subpass.getPosition())); + d.setDstStageMask(Flag.of(PipelineStage.ColorAttachmentOutput, PipelineStage.EarlyFragmentTests)); + d.setDstAccessMask(Flag.of(Access.ColorAttachmentWrite, Access.DepthStencilAttachmentWrite)); }); } swapchain.createFrameBuffers(renderPass, depthView); pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, 0, new TestCaseMeshDescription()); try (GraphicsPipeline.Builder p = pipeline.build()) { - p.addStage(vertModule, VK_SHADER_STAGE_VERTEX_BIT); - p.addStage(fragModule, VK_SHADER_STAGE_FRAGMENT_BIT); + p.addShader(vertModule, ShaderStage.Vertex, "main"); + p.addShader(fragModule, ShaderStage.Fragment, "main"); p.getViewportState().addViewport(); p.getViewportState().addScissor(); p.getColorBlend().addAttachment(new ColorBlendAttachment()); @@ -222,12 +222,12 @@ public void simpleInitApp() { // cpu-accessible memory is not usually fast for the gpu to access, but // the cpu cannot directly access fast gpu memory. The solution is to // copy cpu-side data to a mutual staging buffer, then have the gpu copy - // that data to faster memory. Hence, why we use a StageableBuffer here. + // that data to faster memory. vertexBuffer = new StaticBuffer(device, transferPool, MemorySize.floats(vertexData.capacity()), - new BufferUsageFlags().vertexBuffer(), new MemoryFlags().deviceLocal(), false); + BufferUsage.Vertex, MemoryFlag.DeviceLocal, false); vertexBuffer.copy(stack, vertexData); indexBuffer = new StaticBuffer(device, transferPool, MemorySize.ints(indexData.capacity()), - new BufferUsageFlags().indexBuffer(), new MemoryFlags().deviceLocal(), false); + BufferUsage.Index, MemoryFlag.DeviceLocal, false); indexBuffer.copy(stack, indexData); } @@ -283,11 +283,11 @@ public void simpleUpdate(float tpf) { private ImageView createDepthAttachment(CommandPool pool) { Image.Format depthFormat = device.getPhysicalDevice().findSupportedFormat( - VK_IMAGE_TILING_OPTIMAL, + Image.Tiling.Optimal, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, Image.Format.Depth32SFloat, Image.Format.Depth32SFloat_Stencil8UInt, Image.Format.Depth24UNorm_Stencil8UInt); GpuImage image = new GpuImage(device, swapchain.getExtent().x, swapchain.getExtent().y, depthFormat, - Image.Tiling.Optimal, new ImageUsageFlags().depthStencilAttachment(), new MemoryFlags().deviceLocal()); + Image.Tiling.Optimal, ImageUsage.DepthStencilAttachment, MemoryFlag.DeviceLocal); ImageView view = image.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_DEPTH_BIT, 0, 1, 0, 1); CommandBuffer commands = pool.allocateOneTimeCommandBuffer(); commands.begin(); @@ -301,7 +301,7 @@ private class Frame implements Consumer { // render manager private final CommandBuffer graphicsCommands = graphicsPool.allocateCommandBuffer(); - private final Semaphore imageAvailable = new Semaphore(device, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); + private final Semaphore imageAvailable = new Semaphore(device, PipelineStage.ColorAttachmentOutput); private final Semaphore renderFinished = new Semaphore(device); private final Fence inFlight = new Fence(device, true); @@ -321,8 +321,9 @@ public Frame() { // new ImageSetWriter(Descriptor.CombinedImageSampler, 1, 0, new ImageDescriptor(texture, Image.Layout.ShaderReadOnlyOptimal))); material.getMatrices().setValue(new PersistentBuffer(device, MemorySize.floats(16), - new BufferUsageFlags().uniformBuffer(), - new MemoryFlags().hostVisible().hostCoherent(), false)); + BufferUsage.Uniform, + Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), + false)); material.getBaseColorMap().setValue(texture); } @@ -353,7 +354,8 @@ public void accept(Float tpf) { .fillFloatBuffer( // material - material.getMatrices().getValue().mapFloats(stack, 0, 16, 0), true); + material.getMatrices().getValue().mapFloats(stack, 0, + material.getMatrices().getValue().size().getElements(), 0), true); material.getMatrices().getValue().unmap(); material.bind(graphicsCommands, pipeline); // vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), pipeline.getBindPoint().getVkEnum(), diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferUsage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferUsage.java new file mode 100644 index 0000000000..8e78019c98 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferUsage.java @@ -0,0 +1,30 @@ +package com.jme3.vulkan.buffers; + +import com.jme3.vulkan.util.Flag; + +import static org.lwjgl.vulkan.VK10.*; + +public enum BufferUsage implements Flag { + + Uniform(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT), + Index(VK_BUFFER_USAGE_INDEX_BUFFER_BIT), + Storage(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT), + StorageTexel(VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT), + Indirect(VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT), + TransferDst(VK_BUFFER_USAGE_TRANSFER_DST_BIT), + TransferSrc(VK_BUFFER_USAGE_TRANSFER_SRC_BIT), + UniformTexel(VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT), + Vertex(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT); + + private final int vkEnum; + + BufferUsage(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int bits() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index 4f6656022b..205db174b6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -5,8 +5,10 @@ import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.flags.MemoryFlags; -import com.jme3.vulkan.flags.BufferUsageFlags; +import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemoryRegion; +import com.jme3.vulkan.memory.MemorySize; +import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; @@ -18,7 +20,6 @@ import java.nio.*; import java.util.function.Function; -import java.util.function.LongFunction; import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; @@ -31,14 +32,14 @@ public class GpuBuffer implements Native { private final long id; protected final MemoryRegion memory; - public GpuBuffer(LogicalDevice device, MemorySize size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + public GpuBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { this.device = device; this.size = size; try (MemoryStack stack = MemoryStack.stackPush()) { VkBufferCreateInfo create = VkBufferCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO) .size(size.getBytes()) - .usage(usage.getUsageFlags()) + .usage(usage.bits()) .sharingMode(VulkanUtils.sharingMode(concurrent)); LongBuffer idBuf = stack.mallocLong(1); check(vkCreateBuffer(device.getNativeObject(), create, null, idBuf), @@ -47,7 +48,7 @@ public GpuBuffer(LogicalDevice device, MemorySize size, BufferUsageFlags usag VkMemoryRequirements bufferMem = VkMemoryRequirements.malloc(stack); vkGetBufferMemoryRequirements(device.getNativeObject(), id, bufferMem); memory = new MemoryRegion(device, bufferMem.size(), device.getPhysicalDevice().findSupportedMemoryType( - stack, bufferMem.memoryTypeBits(), mem.getMemoryFlags())); + stack, bufferMem.memoryTypeBits(), mem)); memory.bind(this, 0); } ref = Native.get().register(this); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java index 9906cd952d..d7c5ce1107 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java @@ -1,8 +1,9 @@ package com.jme3.vulkan.buffers; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.flags.MemoryFlags; -import com.jme3.vulkan.flags.BufferUsageFlags; +import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemorySize; +import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; @@ -10,7 +11,7 @@ public class PersistentBuffer extends GpuBuffer { private final long address; - public PersistentBuffer(LogicalDevice device, MemorySize size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + public PersistentBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { super(device, size, usage, mem, concurrent); try (MemoryStack stack = MemoryStack.stackPush()) { address = memory.map(stack, 0, size.getBytes(), 0).get(0); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index a2a89371db..440d315b04 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -3,11 +3,10 @@ import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.flags.MemoryFlags; -import com.jme3.vulkan.flags.BufferUsageFlags; -import com.jme3.vulkan.sync.Fence; -import com.jme3.vulkan.sync.Semaphore; +import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.sync.SyncGroup; +import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; @@ -16,10 +15,10 @@ public class StageableBuffer extends GpuBuffer { private final GpuBuffer stage; public StageableBuffer(LogicalDevice device, MemorySize size, - BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { - super(device, size, usage.transferDst(), mem, concurrent); - this.stage = new GpuBuffer(device, size, new BufferUsageFlags().transferSrc(), - new MemoryFlags().hostVisible().hostCoherent(), concurrent); + Flag usage, Flag mem, boolean concurrent) { + super(device, size, usage.add(BufferUsage.TransferDst), mem, concurrent); + this.stage = new GpuBuffer(device, size, BufferUsage.TransferSrc, + Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), concurrent); } @Override diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java index 0eabbcbf22..ab3a9b5e6b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java @@ -2,11 +2,13 @@ import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.flags.BufferUsageFlags; -import com.jme3.vulkan.flags.MemoryFlags; +import com.jme3.vulkan.material.uniforms.BufferUniform; +import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.sync.SyncGroup; import com.jme3.vulkan.sync.TaskQueue; +import com.jme3.vulkan.util.Flag; import java.util.concurrent.*; @@ -14,7 +16,7 @@ public class StaticBuffer extends StageableBuffer { private final CommandPool transferPool; - public StaticBuffer(LogicalDevice device, CommandPool transferPool, MemorySize size, BufferUsageFlags usage, MemoryFlags mem, boolean concurrent) { + public StaticBuffer(LogicalDevice device, CommandPool transferPool, MemorySize size, Flag usage, Flag mem, boolean concurrent) { super(device, size, usage, mem, concurrent); this.transferPool = transferPool; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java index e17daa2ba3..79de4a574e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java @@ -75,6 +75,4 @@ public void reset() { vkResetDescriptorPool(device.getNativeObject(), id, 0); } - - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java index 51337ef693..809c0dd2c8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -27,8 +27,7 @@ public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSet public Runnable createNativeDestroyer() { return () -> { try (MemoryStack stack = MemoryStack.stackPush()) { - vkFreeDescriptorSets(device.getNativeObject(), - pool.getNativeObject(), stack.longs(object)); + vkFreeDescriptorSets(device.getNativeObject(), pool.getNativeObject(), stack.longs(object)); } }; } @@ -37,7 +36,6 @@ public void write(DescriptorSetWriter... writers) { try (MemoryStack stack = MemoryStack.stackPush()) { VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(writers.length, stack); populateWriteBuffer(stack, write, writers); - write.flip(); vkUpdateDescriptorSets(device.getNativeObject(), write, null); } } @@ -48,8 +46,10 @@ public void populateWriteBuffer(MemoryStack stack, VkWriteDescriptorSet.Buffer b .sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET) .dstSet(object)); } + buffer.flip(); } + @Deprecated public long getId() { return object; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java index a3c395e256..6fe0a1a827 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java @@ -1,15 +1,20 @@ package com.jme3.vulkan.descriptors; +import com.jme3.vulkan.shader.ShaderStage; +import com.jme3.vulkan.util.Flag; import org.lwjgl.vulkan.VkDescriptorSetLayoutBinding; -import static org.lwjgl.vulkan.VK10.*; - public class SetLayoutBinding { private final Descriptor type; - private final int binding, descriptors, stages; + private final int binding, descriptors; + private final Flag stages; + + public SetLayoutBinding(Descriptor type, int binding, int descriptors) { + this(type, binding, descriptors, ShaderStage.All); + } - public SetLayoutBinding(Descriptor type, int binding, int descriptors, int stages) { + public SetLayoutBinding(Descriptor type, int binding, int descriptors, Flag stages) { this.type = type; this.binding = binding; this.descriptors = descriptors; @@ -21,7 +26,7 @@ public void fillLayoutBinding(VkDescriptorSetLayoutBinding layoutBinding) { layoutBinding.descriptorType(type.getVkEnum()) .binding(binding) .descriptorCount(descriptors) - .stageFlags(stages) + .stageFlags(stages.bits()) .pImmutableSamplers(null); } @@ -37,7 +42,7 @@ public int getDescriptors() { return descriptors; } - public int getStages() { + public Flag getStages() { return stages; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java index 0b80ea265c..4c76f0bc6b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java @@ -2,7 +2,9 @@ import com.jme3.vulkan.VulkanInstance; import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.memory.MemoryFlag; import com.jme3.vulkan.surface.Surface; +import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -66,10 +68,10 @@ public VkPhysicalDeviceMemoryProperties getMemoryProperties(MemoryStack stack) { } @Override - public int findSupportedMemoryType(MemoryStack stack, int types, int flags) { + public int findSupportedMemoryType(MemoryStack stack, int types, Flag flags) { VkPhysicalDeviceMemoryProperties mem = getMemoryProperties(stack); for (int i = 0; i < mem.memoryTypeCount(); i++) { - if ((types & (1 << i)) != 0 && (mem.memoryTypes().get(i).propertyFlags() & flags) != 0) { + if ((types & (1 << i)) != 0 && (mem.memoryTypes().get(i).propertyFlags() & flags.bits()) != 0) { return i; } } @@ -77,12 +79,12 @@ public int findSupportedMemoryType(MemoryStack stack, int types, int flags) { } @Override - public Image.Format findSupportedFormat(int tiling, int features, Image.Format... candidates) { + public Image.Format findSupportedFormat(Image.Tiling tiling, int features, Image.Format... candidates) { VkFormatProperties props = VkFormatProperties.create(); for (Image.Format f : candidates) { vkGetPhysicalDeviceFormatProperties(physicalDevice, f.getVkEnum(), props); - if ((tiling == VK_IMAGE_TILING_LINEAR && (props.linearTilingFeatures() & features) == features) - || (tiling == VK_IMAGE_TILING_OPTIMAL && (props.optimalTilingFeatures() & features) == features)) { + if ((tiling == Image.Tiling.Linear && (props.linearTilingFeatures() & features) == features) + || (tiling == Image.Tiling.Optimal && (props.optimalTilingFeatures() & features) == features)) { return f; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java index 29e0d6d314..d77c2e1001 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java @@ -1,9 +1,11 @@ package com.jme3.vulkan.devices; import com.jme3.vulkan.commands.Queue; +import com.jme3.vulkan.memory.MemoryFlag; import com.jme3.vulkan.surface.Surface; import com.jme3.vulkan.VulkanInstance; import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -29,9 +31,9 @@ public interface PhysicalDevice { VkPhysicalDeviceMemoryProperties getMemoryProperties(MemoryStack stack); - int findSupportedMemoryType(MemoryStack stack, int types, int flags); + int findSupportedMemoryType(MemoryStack stack, int types, Flag flags); - Image.Format findSupportedFormat(int tiling, int features, Image.Format... candidates); + Image.Format findSupportedFormat(Image.Tiling tiling, int features, Image.Format... candidates); boolean querySwapchainSupport(Surface surface); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/BufferUsageFlags.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/BufferUsageFlags.java deleted file mode 100644 index 364875bbe9..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/BufferUsageFlags.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.jme3.vulkan.flags; - -import static org.lwjgl.vulkan.VK10.*; - -public class BufferUsageFlags { - - private int usageFlags; - - public BufferUsageFlags vertexBuffer() { - usageFlags |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; - return this; - } - - public BufferUsageFlags indexBuffer() { - usageFlags |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT; - return this; - } - - public BufferUsageFlags transferSrc() { - usageFlags |= VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - return this; - } - - public BufferUsageFlags transferDst() { - usageFlags |= VK_BUFFER_USAGE_TRANSFER_DST_BIT; - return this; - } - - public BufferUsageFlags uniformBuffer() { - usageFlags |= VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; - return this; - } - - public int getUsageFlags() { - return usageFlags; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java deleted file mode 100644 index 8ed82c59e8..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/ImageUsageFlags.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.jme3.vulkan.flags; - -import static org.lwjgl.vulkan.VK10.*; - -public class ImageUsageFlags { - - private int usageFlags; - - public ImageUsageFlags transferSrc() { - usageFlags |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; - return this; - } - - public ImageUsageFlags transferDst() { - usageFlags |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; - return this; - } - - public ImageUsageFlags sampled() { - usageFlags |= VK_IMAGE_USAGE_SAMPLED_BIT; - return this; - } - - public ImageUsageFlags depthStencilAttachment() { - usageFlags |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT; - return this; - } - - public int getUsageFlags() { - return usageFlags; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/MemoryFlags.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/MemoryFlags.java deleted file mode 100644 index ade8e39d3d..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/flags/MemoryFlags.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.jme3.vulkan.flags; - -import static org.lwjgl.vulkan.VK10.*; - -public class MemoryFlags { - - private int memFlags = 0; - - public MemoryFlags hostVisible() { - memFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; - return this; - } - - public MemoryFlags hostCoherent() { - memFlags |= VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; - return this; - } - - public MemoryFlags hostCached() { - memFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT; - return this; - } - - public MemoryFlags deviceLocal() { - memFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - return this; - } - - public MemoryFlags lazilyAllocated() { - memFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT; - return this; - } - - public int getMemoryFlags() { - return memFlags; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java index 2b65529ede..053744d838 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -4,9 +4,9 @@ import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.buffers.MemoryRegion; -import com.jme3.vulkan.flags.ImageUsageFlags; -import com.jme3.vulkan.flags.MemoryFlags; +import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemoryRegion; +import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkImageCreateInfo; import org.lwjgl.vulkan.VkImageMemoryBarrier; @@ -28,11 +28,13 @@ public class GpuImage implements Image { private final Image.Format format; private final Image.Tiling tiling; - public GpuImage(LogicalDevice device, int width, int height, Image.Format format, Image.Tiling tiling, ImageUsageFlags usage, MemoryFlags mem) { + public GpuImage(LogicalDevice device, int width, int height, Image.Format format, + Image.Tiling tiling, Flag usage, Flag mem) { this(device, VK_IMAGE_TYPE_2D, width, height, 1, format, tiling, usage, mem); } - public GpuImage(LogicalDevice device, int type, int width, int height, int depth, Image.Format format, Image.Tiling tiling, ImageUsageFlags usage, MemoryFlags mem) { + public GpuImage(LogicalDevice device, int type, int width, int height, int depth, + Image.Format format, Image.Tiling tiling, Flag usage, Flag mem) { this.device = device; this.type = type; this.width = width; @@ -49,7 +51,7 @@ public GpuImage(LogicalDevice device, int type, int width, int height, int de .format(format.getVkEnum()) .tiling(tiling.getVkEnum()) .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) - .usage(usage.getUsageFlags()) + .usage(usage.bits()) .samples(VK_SAMPLE_COUNT_1_BIT) .sharingMode(VK_SHARING_MODE_EXCLUSIVE); create.extent().width(width).height(height).depth(depth); @@ -60,7 +62,7 @@ public GpuImage(LogicalDevice device, int type, int width, int height, int de VkMemoryRequirements memReq = VkMemoryRequirements.malloc(stack); vkGetImageMemoryRequirements(device.getNativeObject(), id, memReq); memory = new MemoryRegion(device, memReq.size(), device.getPhysicalDevice().findSupportedMemoryType( - stack, memReq.memoryTypeBits(), mem.getMemoryFlags())); + stack, memReq.memoryTypeBits(), mem)); memory.bind(this, 0); } ref = Native.get().register(this); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageUsage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageUsage.java new file mode 100644 index 0000000000..a3dc8397a2 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageUsage.java @@ -0,0 +1,29 @@ +package com.jme3.vulkan.images; + +import com.jme3.vulkan.util.Flag; + +import static org.lwjgl.vulkan.VK10.*; + +public enum ImageUsage implements Flag { + + TransferDst(VK_IMAGE_USAGE_TRANSFER_DST_BIT), + TransferSrc(VK_IMAGE_USAGE_TRANSFER_SRC_BIT), + ColorAttachment(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT), + Sampled(VK_IMAGE_USAGE_SAMPLED_BIT), + Storage(VK_IMAGE_USAGE_STORAGE_BIT), + DepthStencilAttachment(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT), + InputAttachment(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT), + TransientAttachment(VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT); + + private final int vkEnum; + + ImageUsage(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int bits() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index f89611a805..dc4ac78106 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -2,14 +2,14 @@ import com.jme3.asset.*; import com.jme3.util.BufferUtils; -import com.jme3.vulkan.buffers.MemorySize; +import com.jme3.vulkan.buffers.BufferUsage; +import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.buffers.GpuBuffer; -import com.jme3.vulkan.flags.BufferUsageFlags; -import com.jme3.vulkan.flags.ImageUsageFlags; -import com.jme3.vulkan.flags.MemoryFlags; import com.jme3.vulkan.sync.SyncGroup; +import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkBufferImageCopy; @@ -153,11 +153,11 @@ private void flipImage(byte[] img, int width, int height, int bpp) { private GpuImage loadGpuImage(CommandPool transferPool, ImageData data) { try (MemoryStack stack = MemoryStack.stackPush()) { GpuBuffer staging = new GpuBuffer(transferPool.getDevice(), MemorySize.bytes(data.getBuffer().limit()), - new BufferUsageFlags().transferSrc(), new MemoryFlags().hostVisible().hostCoherent(), false); + BufferUsage.TransferSrc, Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCached), false); staging.copy(stack, data.getBuffer()); GpuImage image = new GpuImage(transferPool.getDevice(), data.getWidth(), data.getHeight(), data.getFormat(), - Image.Tiling.Optimal, new ImageUsageFlags().transferDst().sampled(), - new MemoryFlags().deviceLocal()); + Image.Tiling.Optimal, Flag.of(ImageUsage.TransferDst, ImageUsage.Sampled), + MemoryFlag.DeviceLocal); CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); commands.begin(); image.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.TransferDstOptimal); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index fbb6fd3958..5c08d05260 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -2,8 +2,8 @@ import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.descriptors.*; +import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.material.uniforms.Uniform; -import com.jme3.vulkan.material.uniforms.UniformSet; import com.jme3.vulkan.pipelines.Pipeline; import org.lwjgl.system.MemoryStack; @@ -32,28 +32,22 @@ public void bind(CommandBuffer cmd, Pipeline pipeline) { public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { LinkedList availableLayouts = new LinkedList<>( Arrays.asList(pipeline.getLayout().getDescriptorSetLayouts())); - ArrayList allocationLayouts = new ArrayList<>(availableLayouts.size()); - ArrayList allocationTargets = new ArrayList<>(availableLayouts.size()); + ArrayList allocations = new ArrayList<>(availableLayouts.size()); for (UniformSet set : uniforms) { set.update(pipeline.getDevice()); // Select an existing descriptor set to be active. If - // no existing set may be selected, a set layout is + // no existing set may be selected, non-null allocation info is // returned with which to allocate a new descriptor set. - DescriptorSetLayout allocation = set.selectExistingActiveSet(availableLayouts); - if (allocation != null) { - // allocate all new sets at once - allocationLayouts.add(allocation); - allocationTargets.add(set); + SetAllocationInfo a = set.selectExistingActiveSet(availableLayouts); + if (a != null) { + allocations.add(a); } } - if (!allocationLayouts.isEmpty()) { - if (allocationLayouts.size() != allocationTargets.size()) { - throw new IllegalStateException("Each layout must have a corresponding target uniform set."); - } - DescriptorSet[] allocatedSets = pool.allocateSets( - allocationLayouts.toArray(new DescriptorSetLayout[0])); + if (!allocations.isEmpty()) { + DescriptorSet[] allocatedSets = pool.allocateSets(allocations.stream() + .map(SetAllocationInfo::getLayout).toArray(DescriptorSetLayout[]::new)); for (int i = 0; i < allocatedSets.length; i++) { - UniformSet target = allocationTargets.get(i); + UniformSet target = allocations.get(i).getSet(); target.addActiveSet(allocatedSets[i]); allocatedSets[i].write(target.getUniforms()); } @@ -61,7 +55,7 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { try (MemoryStack stack = MemoryStack.stackPush()) { LongBuffer setBuf = stack.mallocLong(uniforms.size()); for (UniformSet s : uniforms) { - setBuf.put(s.getActiveSet().getId()); + setBuf.put(s.getActiveSet().getNativeObject()); } setBuf.flip(); vkCmdBindDescriptorSets(cmd.getBuffer(), pipeline.getBindPoint().getVkEnum(), @@ -69,6 +63,10 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { } } + public DescriptorSetLayout[] createLayouts(LogicalDevice device) { + return uniforms.stream().map(u -> u.createLayout(device)).toArray(DescriptorSetLayout[]::new); + } + protected UniformSet addSet(UniformSet set) { uniforms.add(set); return set; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/SetAllocationInfo.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/SetAllocationInfo.java new file mode 100644 index 0000000000..a9acb3634e --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/SetAllocationInfo.java @@ -0,0 +1,23 @@ +package com.jme3.vulkan.material; + +import com.jme3.vulkan.descriptors.DescriptorSetLayout; + +public class SetAllocationInfo { + + private final UniformSet set; + private final DescriptorSetLayout layout; + + public SetAllocationInfo(UniformSet set, DescriptorSetLayout layout) { + this.set = set; + this.layout = layout; + } + + public UniformSet getSet() { + return set; + } + + public DescriptorSetLayout getLayout() { + return layout; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java index fcbb8e3971..ce31d6b41f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java @@ -5,13 +5,14 @@ import com.jme3.vulkan.images.Image; import com.jme3.vulkan.material.uniforms.BufferUniform; import com.jme3.vulkan.material.uniforms.TextureUniform; +import com.jme3.vulkan.shader.ShaderStage; public class TestMaterial extends Material { private final BufferUniform matrices = new BufferUniform( - "Matrices", Descriptor.UniformBuffer, 0); + "Matrices", Descriptor.UniformBuffer, 0, ShaderStage.Vertex); private final TextureUniform baseColorMap = new TextureUniform( - "BaseColorMap", Image.Layout.ShaderReadOnlyOptimal, 1); + "BaseColorMap", Image.Layout.ShaderReadOnlyOptimal, 1, ShaderStage.Fragment); public TestMaterial(DescriptorPool pool) { super(pool); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java similarity index 81% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/UniformSet.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java index d2767f87fd..29b8f92b31 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -1,9 +1,10 @@ -package com.jme3.vulkan.material.uniforms; +package com.jme3.vulkan.material; import com.jme3.vulkan.descriptors.DescriptorSet; import com.jme3.vulkan.descriptors.DescriptorSetLayout; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.material.uniforms.Uniform; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkWriteDescriptorSet; @@ -19,25 +20,32 @@ public class UniformSet { public UniformSet(Uniform... uniforms) { this.uniforms = uniforms; // ensure duplicate binding indices are not present - HashSet bindings = new HashSet<>(); + BitSet bindings = new BitSet(); for (Uniform u : uniforms) { - if (!bindings.add(u.getBindingIndex())) { + int i = u.getBindingIndex(); + if (bindings.get(i)) { throw new IllegalArgumentException("Duplicate binding index in set: " + u.getBindingIndex()); } + bindings.set(i); } } + public DescriptorSetLayout createLayout(LogicalDevice device) { + return new DescriptorSetLayout(device, Arrays.stream(uniforms) + .map(Uniform::createBinding).toArray(SetLayoutBinding[]::new)); + } + public void addActiveSet(DescriptorSet activeSet) { this.activeSet = activeSet; sets.add(activeSet); } - public DescriptorSetLayout selectExistingActiveSet(List availableLayouts) { + public SetAllocationInfo selectExistingActiveSet(List availableLayouts) { if (activeSet == null || !availableLayouts.remove(activeSet.getLayout())) { for (DescriptorSet s : sets) { if (availableLayouts.remove(s.getLayout())) { this.activeSet = s; - return null; + return null; // no allocation necessary } } // Search for a layout that is compatible with the set definition @@ -57,10 +65,11 @@ public DescriptorSetLayout selectExistingActiveSet(List ava } // Layout is compatible with the set definition it.remove(); - return layout; + return new SetAllocationInfo(this, layout); // allocate new descriptor set } throw new IllegalStateException("Pipeline layout does not support uniform set."); } + // no allocation necessary return null; } @@ -76,7 +85,6 @@ public void update(LogicalDevice device) { for (DescriptorSet s : sets) { s.populateWriteBuffer(stack, write, writers.toArray(new Uniform[0])); } - write.flip(); VK10.vkUpdateDescriptorSets(device.getNativeObject(), write, null); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java index 4fb896d3c0..9ab4817c46 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java @@ -1,17 +1,27 @@ package com.jme3.vulkan.material.uniforms; import com.jme3.vulkan.descriptors.Descriptor; +import com.jme3.vulkan.descriptors.SetLayoutBinding; +import com.jme3.vulkan.shader.ShaderStage; +import com.jme3.vulkan.util.Flag; public abstract class AbstractUniform implements Uniform { protected final String name; protected final Descriptor type; protected final int bindingIndex; + protected final Flag stages; - public AbstractUniform(String name, Descriptor type, int bindingIndex) { + public AbstractUniform(String name, Descriptor type, int bindingIndex, Flag stages) { this.name = name; this.type = type; this.bindingIndex = bindingIndex; + this.stages = stages; + } + + @Override + public SetLayoutBinding createBinding() { + return new SetLayoutBinding(type, bindingIndex, 1, stages); } @Override diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index 6427628c28..7497630bf3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -4,6 +4,8 @@ import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.shader.ShaderStage; +import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.Struct; import org.lwjgl.vulkan.VkDescriptorBufferInfo; @@ -14,24 +16,21 @@ public class BufferUniform extends AbstractUniform { + private static final String BUFFER_NULL_ERROR = "Uniform buffer is null."; + private GpuBuffer buffer; private boolean updateFlag = true; private Function, GpuBuffer> bufferFactory; - public BufferUniform(String name, Descriptor type, int bindingIndex) { - super(name, type, bindingIndex); + public BufferUniform(String name, Descriptor type, int bindingIndex, Flag stages) { + super(name, type, bindingIndex, stages); } - public BufferUniform(String name, Descriptor type, int bindingIndex, GpuBuffer buffer) { - super(name, type, bindingIndex); + public BufferUniform(String name, Descriptor type, int bindingIndex, Flag stages, GpuBuffer buffer) { + super(name, type, bindingIndex, stages); this.buffer = buffer; } - public BufferUniform(String name, Descriptor type, int bindingIndex, Function, GpuBuffer> bufferFactory) { - super(name, type, bindingIndex); - this.bufferFactory = bufferFactory; - } - @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { VkDescriptorBufferInfo.Buffer info = VkDescriptorBufferInfo.calloc(1, stack) @@ -50,10 +49,10 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { public boolean update(LogicalDevice device) { if (buffer == null) { if (bufferFactory != null) { - buffer = bufferFactory.apply(device); + buffer = Objects.requireNonNull(bufferFactory.apply(device), "Buffer factory produced null."); updateFlag = true; } else { - throw new NullPointerException("Uniform buffer is null."); + throw new NullPointerException(BUFFER_NULL_ERROR); } } return updateFlag; @@ -83,12 +82,6 @@ public void setBufferFactory(Function, GpuBuffer> bufferFactory this.bufferFactory = bufferFactory; } - public void setStruct(Struct struct) { - try (MemoryStack stack = MemoryStack.stackPush()) { - Objects.requireNonNull(buffer, "Uniform buffer is null.").copy(stack, struct); - } - } - public Function, GpuBuffer> getBufferFactory() { return bufferFactory; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index 700a14c9a4..59cfa553b9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -5,6 +5,8 @@ import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; import com.jme3.vulkan.images.Texture; +import com.jme3.vulkan.shader.ShaderStage; +import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDescriptorImageInfo; import org.lwjgl.vulkan.VkWriteDescriptorSet; @@ -15,8 +17,8 @@ public class TextureUniform extends AbstractUniform { private Texture texture; private boolean updateFlag = true; - public TextureUniform(String name, Image.Layout layout, int bindingIndex) { - super(name, Descriptor.CombinedImageSampler, bindingIndex); + public TextureUniform(String name, Image.Layout layout, int bindingIndex, Flag stages) { + super(name, Descriptor.CombinedImageSampler, bindingIndex, stages); this.layout = layout; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java index 2edbb09ee8..62c895e938 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java @@ -6,17 +6,18 @@ public interface Uniform extends DescriptorSetWriter { - // true to trigger update of descriptor sets boolean update(LogicalDevice device); - void setValue(T value); + boolean isBindingCompatible(SetLayoutBinding binding); - T getValue(); + SetLayoutBinding createBinding(); - int getBindingIndex(); + void setValue(T value); - boolean isBindingCompatible(SetLayoutBinding binding); + T getValue(); String getName(); + int getBindingIndex(); + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryFlag.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryFlag.java new file mode 100644 index 0000000000..1614125d15 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryFlag.java @@ -0,0 +1,26 @@ +package com.jme3.vulkan.memory; + +import com.jme3.vulkan.util.Flag; + +import static org.lwjgl.vulkan.VK10.*; + +public enum MemoryFlag implements Flag { + + HostVisible(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT), + HostCoherent(VK_MEMORY_PROPERTY_HOST_COHERENT_BIT), + HostCached(VK_MEMORY_PROPERTY_HOST_CACHED_BIT), + DeviceLocal(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT), + LazilyAllocated(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT); + + private final int vkEnum; + + MemoryFlag(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int bits() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java similarity index 97% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java index eedabe8441..697ff2463e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemoryRegion.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java @@ -1,7 +1,8 @@ -package com.jme3.vulkan.buffers; +package com.jme3.vulkan.memory; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; import org.lwjgl.PointerBuffer; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemorySize.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java similarity index 97% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemorySize.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java index 20d64c22e0..9d780cc6d0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/MemorySize.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan.buffers; +package com.jme3.vulkan.memory; public class MemorySize { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java index 5a498643c3..d0d9b715f2 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java @@ -1,5 +1,8 @@ package com.jme3.vulkan.pass; +import com.jme3.vulkan.pipelines.Access; +import com.jme3.vulkan.pipelines.PipelineStage; +import com.jme3.vulkan.util.Flag; import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkSubpassDependency; @@ -11,8 +14,8 @@ public class SubpassDependency { private final Subpass srcSubpass, dstSubpass; - private int srcStageMask, srcAccessMask; - private int dstStageMask, dstAccessMask; + private Flag srcStageMask, dstStageMask; + private Flag srcAccessMask, dstAccessMask; protected SubpassDependency(Subpass srcSubpass, Subpass dstSubpass) { this.srcSubpass = srcSubpass; @@ -31,25 +34,25 @@ protected SubpassDependency(SubpassDependency base, List subpasses) { public void fillStruct(VkSubpassDependency struct) { struct.srcSubpass(srcSubpass != null ? srcSubpass.getPosition() : VK10.VK_SUBPASS_EXTERNAL) .dstSubpass(dstSubpass != null ? dstSubpass.getPosition() : VK10.VK_SUBPASS_EXTERNAL) - .srcStageMask(srcStageMask) - .srcAccessMask(srcAccessMask) - .dstStageMask(dstStageMask) - .dstAccessMask(dstAccessMask); + .srcStageMask(srcStageMask.bits()) + .srcAccessMask(srcAccessMask.bits()) + .dstStageMask(dstStageMask.bits()) + .dstAccessMask(dstAccessMask.bits()); } - public void setSrcStageMask(int srcStageMask) { + public void setSrcStageMask(Flag srcStageMask) { this.srcStageMask = srcStageMask; } - public void setSrcAccessMask(int srcAccessMask) { + public void setSrcAccessMask(Flag srcAccessMask) { this.srcAccessMask = srcAccessMask; } - public void setDstStageMask(int dstStageMask) { + public void setDstStageMask(Flag dstStageMask) { this.dstStageMask = dstStageMask; } - public void setDstAccessMask(int dstAccessMask) { + public void setDstAccessMask(Flag dstAccessMask) { this.dstAccessMask = dstAccessMask; } @@ -61,19 +64,19 @@ public Subpass getDstSubpass() { return dstSubpass; } - public int getSrcStageMask() { + public Flag getSrcStageMask() { return srcStageMask; } - public int getSrcAccessMask() { + public Flag getSrcAccessMask() { return srcAccessMask; } - public int getDstStageMask() { + public Flag getDstStageMask() { return dstStageMask; } - public int getDstAccessMask() { + public Flag getDstAccessMask() { return dstAccessMask; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Access.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Access.java new file mode 100644 index 0000000000..3a57db548e --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Access.java @@ -0,0 +1,38 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.vulkan.util.Flag; + +import static org.lwjgl.vulkan.VK10.*; + +public enum Access implements Flag { + + ColorAttachmentWrite(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT), + ColorAttachmentRead(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT), + HostWrite(VK_ACCESS_HOST_WRITE_BIT), + HostRead(VK_ACCESS_HOST_READ_BIT), + IndexRead(VK_ACCESS_INDEX_READ_BIT), + DepthStencilAttachmentWrite(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT), + DepthStencilAttachmentRead(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT), + IndirectCommandRead(VK_ACCESS_INDIRECT_COMMAND_READ_BIT), + InputAttachmentRead(VK_ACCESS_INPUT_ATTACHMENT_READ_BIT), + MemoryWrite(VK_ACCESS_MEMORY_WRITE_BIT), + MemoryRead(VK_ACCESS_MEMORY_READ_BIT), + ShaderWrite(VK_ACCESS_SHADER_WRITE_BIT), + ShaderRead(VK_ACCESS_SHADER_READ_BIT), + TransferWrite(VK_ACCESS_TRANSFER_WRITE_BIT), + TransferRead(VK_ACCESS_TRANSFER_READ_BIT), + UniformRead(VK_ACCESS_UNIFORM_READ_BIT), + VertexAttributeRead(VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT); + + private final int vkEnum; + + Access(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int bits() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java index d4a9eddc2b..f53272332d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java @@ -7,6 +7,7 @@ import com.jme3.vulkan.pass.RenderPass; import com.jme3.vulkan.pipelines.states.*; import com.jme3.vulkan.shader.ShaderModule; +import com.jme3.vulkan.shader.ShaderStage; import org.lwjgl.vulkan.*; import java.nio.LongBuffer; @@ -15,7 +16,6 @@ import static com.jme3.renderer.vulkan.VulkanUtils.check; import static org.lwjgl.vulkan.VK10.*; -import static org.lwjgl.vulkan.VK10.VK_NULL_HANDLE; public class GraphicsPipeline extends Pipeline { @@ -44,7 +44,7 @@ public Builder build() { public class Builder extends VulkanObject.Builder { - private final Collection stages = new ArrayList<>(); + private final Collection stages = new ArrayList<>(); private final DynamicState dynamic = new DynamicState(); private final VertexInputState vertexInput = new VertexInputState(mesh); private final InputAssemblyState inputAssembly = new InputAssemblyState(); @@ -57,11 +57,11 @@ public class Builder extends VulkanObject.Builder { @Override protected void build() { VkPipelineShaderStageCreateInfo.Buffer stageBuf = VkPipelineShaderStageCreateInfo.calloc(stages.size(), stack); - for (ShaderStage s : stages) { + for (ShaderStageInfo s : stages) { stageBuf.get().sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) - .stage(s.stages) + .stage(s.stage.bits()) .module(s.module.getNativeObject()) - .pName(stack.UTF8(s.module.getEntryPoint())); + .pName(stack.UTF8(s.entryPoint)); } stageBuf.flip(); VkGraphicsPipelineCreateInfo.Buffer pipeline = VkGraphicsPipelineCreateInfo.calloc(1, stack) @@ -91,8 +91,12 @@ protected void build() { device.getNativeReference().addDependent(ref); } - public void addStage(ShaderModule module, int stages) { - this.stages.add(new ShaderStage(module, stages)); + public void addShader(ShaderModule module, ShaderStage stage) { + addShader(module, stage, DEFAULT_SHADER_ENTRY_POINT); + } + + public void addShader(ShaderModule module, ShaderStage stage, String entryPoint) { + this.stages.add(new ShaderStageInfo(module, stage, entryPoint)); } public DynamicState getDynamicState() { @@ -129,22 +133,16 @@ public ColorBlendState getColorBlend() { } - public static class ShaderStage { + public static class ShaderStageInfo { private final ShaderModule module; - private final int stages; + private final ShaderStage stage; + private final String entryPoint; - public ShaderStage(ShaderModule module, int stages) { + public ShaderStageInfo(ShaderModule module, ShaderStage stage, String entryPoint) { this.module = module; - this.stages = stages; - } - - public ShaderModule getModule() { - return module; - } - - public int getStages() { - return stages; + this.stage = stage; + this.entryPoint = entryPoint; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java index 3e0ec6ce30..151030db8b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java @@ -8,6 +8,8 @@ public abstract class Pipeline extends VulkanObject { + public static final String DEFAULT_SHADER_ENTRY_POINT = "main"; + protected final LogicalDevice device; protected final PipelineBindPoint bindPoint; protected final PipelineLayout layout; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineStage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineStage.java new file mode 100644 index 0000000000..ac93159b84 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineStage.java @@ -0,0 +1,39 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.vulkan.util.Flag; + +import static org.lwjgl.vulkan.VK10.*; + +public enum PipelineStage implements Flag { + + TopOfPipe(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT), + ColorAttachmentOutput(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT), + AllCommands(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT), + AllGraphics(VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT), + EarlyFragmentTests(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT), + BottomOfPipe(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT), + ComputeShader(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT), + DrawIndirect(VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT), + FragmentShader(VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT), + GeometryShader(VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT), + Host(VK_PIPELINE_STAGE_HOST_BIT), + LateFragmentTests(VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT), + TessellationControlShader(VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT), + TessellationEvalShader(VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT), + Transfer(VK_PIPELINE_STAGE_TRANSFER_BIT), + VertexInput(VK_PIPELINE_STAGE_VERTEX_INPUT_BIT), + VertexShader(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT), + None(0); + + private final int vkEnum; + + PipelineStage(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int bits() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java index aa488b4c23..f592b6b265 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java @@ -18,12 +18,10 @@ public class ShaderModule implements Native { private final LogicalDevice device; private final NativeReference ref; - private final String entryPoint; private long id; - public ShaderModule(LogicalDevice device, ByteBuffer code, String entryPoint) { + public ShaderModule(LogicalDevice device, ByteBuffer code) { this.device = device; - this.entryPoint = entryPoint; try (MemoryStack stack = MemoryStack.stackPush()) { VkShaderModuleCreateInfo create = VkShaderModuleCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) @@ -55,8 +53,4 @@ public NativeReference getNativeReference() { return ref; } - public String getEntryPoint() { - return entryPoint; - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderStage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderStage.java new file mode 100644 index 0000000000..332c80497c --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderStage.java @@ -0,0 +1,29 @@ +package com.jme3.vulkan.shader; + +import com.jme3.vulkan.util.Flag; + +import static org.lwjgl.vulkan.VK10.*; + +public enum ShaderStage implements Flag { + + All(VK_SHADER_STAGE_ALL), + AllGraphics(VK_SHADER_STAGE_ALL_GRAPHICS), + Vertex(VK_SHADER_STAGE_VERTEX_BIT), + Geometry(VK_SHADER_STAGE_GEOMETRY_BIT), + TessellationEval(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT), + TessellationControl(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT), + Fragment(VK_SHADER_STAGE_FRAGMENT_BIT), + Compute(VK_SHADER_STAGE_COMPUTE_BIT); + + private final int vkEnum; + + ShaderStage(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int bits() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java index 3cb16ce036..ea4fe15f16 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -11,6 +11,7 @@ import com.jme3.vulkan.pass.RenderPass; import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.sync.Semaphore; +import com.jme3.vulkan.util.Extent2; import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java index 8c58c518a1..f0a8d2b4b3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java @@ -3,6 +3,8 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.pipelines.PipelineStage; +import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkSemaphoreCreateInfo; @@ -17,13 +19,13 @@ public class Semaphore implements Native { private final LogicalDevice device; private final NativeReference ref; private long id; - private int dstStageMask; + private Flag dstStageMask; public Semaphore(LogicalDevice device) { - this(device, 0); + this(device, PipelineStage.None); } - public Semaphore(LogicalDevice device, int dstStageMask) { + public Semaphore(LogicalDevice device, Flag dstStageMask) { this.device = device; this.dstStageMask = dstStageMask; try (MemoryStack stack = MemoryStack.stackPush()) { @@ -56,19 +58,19 @@ public NativeReference getNativeReference() { return ref; } - public void setDstStageMask(int dstStageMask) { + public void setDstStageMask(Flag dstStageMask) { this.dstStageMask = dstStageMask; } - public void addDstStageBit(int stageBit) { - this.dstStageMask |= stageBit; + public void addDstStage(Flag stageBit) { + this.dstStageMask = this.dstStageMask.add(stageBit); } - public void removeDstStageBit(int stageBit) { - this.dstStageMask &= ~stageBit; + public void removeDstStageBit(Flag stageBit) { + this.dstStageMask = this.dstStageMask.remove(stageBit); } - public int getDstStageMask() { + public Flag getDstStageMask() { return dstStageMask; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java index c16b708fe0..34c497901b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java @@ -97,7 +97,7 @@ public LongBuffer toWaitBuffer(MemoryStack stack) { public IntBuffer toDstStageBuffer(MemoryStack stack) { IntBuffer buf = stack.mallocInt(waits.length); for (Semaphore s : signals) { - buf.put(s.getDstStageMask()); + buf.put(s.getDstStageMask().bits()); } buf.flip(); return buf; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Extent2.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Extent2.java similarity index 96% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/Extent2.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Extent2.java index 278a2157b0..f3b99e53eb 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Extent2.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Extent2.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.util; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkExtent2D; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java new file mode 100644 index 0000000000..bbcc3a279b --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java @@ -0,0 +1,78 @@ +package com.jme3.vulkan.util; + +public interface Flag { + + int bits(); + + default Flag add(Flag flag) { + return new FlagImpl<>(bits() | flag.bits()); + } + + default Flag add(Flag... flags) { + int result = bits(); + for (Flag f : flags) { + result |= f.bits(); + } + return new FlagImpl<>(result); + } + + default Flag remove(Flag flag) { + return new FlagImpl<>(bits() & ~flag.bits()); + } + + default Flag remove(Flag... flags) { + int result = bits(); + for (Flag f : flags) { + result &= ~f.bits(); + } + return new FlagImpl<>(result); + } + + default boolean contains(Flag flag) { + int bits = flag.bits(); + return (bits() & bits) == bits; + } + + default boolean containsOneOf(Flag flag) { + return (bits() & flag.bits()) > 0; + } + + static Flag of(int bits) { + return new FlagImpl<>(bits); + } + + @SafeVarargs + static Flag of(Flag... flags) { + return new FlagImpl<>(flags); + } + + @SafeVarargs + static int bitsOf(Flag... flags) { + int result = 0; + for (Flag f : flags) { + result |= f.bits(); + } + return result; + } + + class FlagImpl implements Flag { + + private final int bits; + + public FlagImpl(int bits) { + this.bits = bits; + } + + @SafeVarargs + public FlagImpl(Flag... flags) { + this.bits = bitsOf(flags); + } + + @Override + public int bits() { + return bits; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/RenderStateToVulkan.java similarity index 99% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/RenderStateToVulkan.java index 9c177c74b0..b0988ab6a5 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/RenderStateToVulkan.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/RenderStateToVulkan.java @@ -1,4 +1,4 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.util; import com.jme3.material.RenderState.*; import static org.lwjgl.vulkan.VK10.*; diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanTest.json b/jme3-testdata/src/main/resources/Shaders/VulkanTest.json index 740da8c67f..8ee1d9344e 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanTest.json +++ b/jme3-testdata/src/main/resources/Shaders/VulkanTest.json @@ -5,10 +5,8 @@ "shaders" : { "vertex" : "Shaders/VulkanFragTest.json", "fragment" : "Shaders/VulkanVertTest.json" - }, - "defines" : { - "MY_CUSTOM_DEFINE" : 1 } + // more technique data... } } } \ No newline at end of file diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanTest.yml b/jme3-testdata/src/main/resources/Shaders/VulkanTest.yml new file mode 100644 index 0000000000..19daacd60d --- /dev/null +++ b/jme3-testdata/src/main/resources/Shaders/VulkanTest.yml @@ -0,0 +1,20 @@ +name: "VulkanTest" +parameters: + Matrices: + type: "UniformBuffer" + set: 0 + binding: 0 + usage: "Stream" + define: "MATRICES" + stages: ["vertex"] + BaseColorMap: + type: "Texture" + set: 0 + binding: 1 + default: "Common/Textures/MissingTexture.jpg" + stages: ["fragment"] +techniques: + main: + shaders: + vertex: "Shaders/VulkanVertTest.yml" + fragment: "Shaders/VulkanFragTest.yml" \ No newline at end of file diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.yml b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.yml new file mode 100644 index 0000000000..2d48bd103a --- /dev/null +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.yml @@ -0,0 +1,6 @@ +shader: "Shaders/VulkanVertTest.glsl" +type: "vertex" +platforms: ["vulkan", "opengl", "gles"] +versions: [460, 450] +parameters: + Matrices: "MATRICES" \ No newline at end of file From 6657009e7c6c18b9726119c2f4014bc796086e7a Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 19 Aug 2025 11:00:54 -0400 Subject: [PATCH 34/80] fix build error --- .../main/java/com/jme3/vulkan/pipelines/ComputePipeline.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java index e6d6e5df9e..bd668efda5 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java @@ -16,7 +16,7 @@ public class ComputePipeline extends Pipeline { private final ShaderModule shader; - public ComputePipeline(LogicalDevice device, PipelineBindPoint bindPoint, PipelineLayout layout, ShaderModule shader) { + public ComputePipeline(LogicalDevice device, PipelineBindPoint bindPoint, PipelineLayout layout, ShaderModule shader, String entryPoint) { super(device, bindPoint, layout); this.shader = shader; try (MemoryStack stack = MemoryStack.stackPush()) { @@ -24,7 +24,7 @@ public ComputePipeline(LogicalDevice device, PipelineBindPoint bindPoint, Pip .sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) .stage(VK_SHADER_STAGE_COMPUTE_BIT) .module(shader.getNativeObject()) - .pName(stack.UTF8(shader.getEntryPoint())); + .pName(stack.UTF8(entryPoint)); VkComputePipelineCreateInfo.Buffer pipeline = VkComputePipelineCreateInfo.calloc(1, stack) .sType(VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO) .stage(stage) From 72b0156a1268d555c83c2b9565ccd03870a0e7d0 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 19 Aug 2025 11:01:59 -0400 Subject: [PATCH 35/80] fix json error --- jme3-testdata/src/main/resources/Shaders/VulkanTest.json | 1 - 1 file changed, 1 deletion(-) diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanTest.json b/jme3-testdata/src/main/resources/Shaders/VulkanTest.json index 8ee1d9344e..7c0a0ada7e 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanTest.json +++ b/jme3-testdata/src/main/resources/Shaders/VulkanTest.json @@ -6,7 +6,6 @@ "vertex" : "Shaders/VulkanFragTest.json", "fragment" : "Shaders/VulkanVertTest.json" } - // more technique data... } } } \ No newline at end of file From ed6096ecc5f1571d8df59c8add3af6d417a358a6 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 19 Aug 2025 11:33:55 -0400 Subject: [PATCH 36/80] extract GpuBuffer into an interface; create VersionedBuffer in preparation of multiple simultaneous frames --- .../jme3test/vulkan/VulkanHelperTest.java | 4 +- .../com/jme3/vulkan/buffers/GpuBuffer.java | 118 ++++-------------- .../jme3/vulkan/buffers/PersistentBuffer.java | 3 +- .../jme3/vulkan/buffers/StageableBuffer.java | 6 +- .../jme3/vulkan/buffers/VersionedBuffer.java | 71 +++++++++++ .../com/jme3/vulkan/buffers/VulkanBuffer.java | 107 ++++++++++++++++ .../com/jme3/vulkan/memory/MemorySize.java | 14 +++ 7 files changed, 225 insertions(+), 98 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 7065ee728e..02e50a9b30 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -374,8 +374,8 @@ public void accept(Float tpf) { vkCmdSetScissor(graphicsCommands.getBuffer(), 0, scissor); // mesh - vkCmdBindVertexBuffers(graphicsCommands.getBuffer(), 0, stack.longs(vertexBuffer.getNativeObject()), stack.longs(0)); - vkCmdBindIndexBuffer(graphicsCommands.getBuffer(), indexBuffer.getNativeObject(), 0, VK_INDEX_TYPE_UINT32); + vkCmdBindVertexBuffers(graphicsCommands.getBuffer(), 0, stack.longs(vertexBuffer.getId()), stack.longs(0)); + vkCmdBindIndexBuffer(graphicsCommands.getBuffer(), indexBuffer.getId(), 0, VK_INDEX_TYPE_UINT32); vkCmdDrawIndexed(graphicsCommands.getBuffer(), indexData.limit(), 1, 0, 0, 0); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index 205db174b6..137a3ef439 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -1,188 +1,122 @@ package com.jme3.vulkan.buffers; -import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.memory.MemoryFlag; -import com.jme3.vulkan.memory.MemoryRegion; import com.jme3.vulkan.memory.MemorySize; -import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.Struct; import org.lwjgl.system.StructBuffer; import org.lwjgl.vulkan.VkBufferCopy; -import org.lwjgl.vulkan.VkBufferCreateInfo; -import org.lwjgl.vulkan.VkMemoryRequirements; import java.nio.*; import java.util.function.Function; -import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; -public class GpuBuffer implements Native { - - private final LogicalDevice device; - private final NativeReference ref; - private final MemorySize size; - private final long id; - protected final MemoryRegion memory; - - public GpuBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { - this.device = device; - this.size = size; - try (MemoryStack stack = MemoryStack.stackPush()) { - VkBufferCreateInfo create = VkBufferCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO) - .size(size.getBytes()) - .usage(usage.bits()) - .sharingMode(VulkanUtils.sharingMode(concurrent)); - LongBuffer idBuf = stack.mallocLong(1); - check(vkCreateBuffer(device.getNativeObject(), create, null, idBuf), - "Failed to create buffer."); - id = idBuf.get(0); - VkMemoryRequirements bufferMem = VkMemoryRequirements.malloc(stack); - vkGetBufferMemoryRequirements(device.getNativeObject(), id, bufferMem); - memory = new MemoryRegion(device, bufferMem.size(), device.getPhysicalDevice().findSupportedMemoryType( - stack, bufferMem.memoryTypeBits(), mem)); - memory.bind(this, 0); - } - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - memory.getNativeReference().addDependent(ref); - } +public interface GpuBuffer { - @Override - public Long getNativeObject() { - return id; - } + PointerBuffer map(MemoryStack stack, int offset, int size, int flags); - @Override - public Runnable createNativeDestroyer() { - return () -> vkDestroyBuffer(device.getNativeObject(), id, null); - } + void unmap(); - @Override - public void prematureNativeDestruction() {} + void freeMemory(); - @Override - public NativeReference getNativeReference() { - return ref; - } + MemorySize size(); + + long getId(); - private void verifyBufferSize(int elements, long bytesPerElement) { - if (elements * bytesPerElement > size.getBytes()) { + default void verifyBufferSize(int elements, long bytesPerElement) { + if (elements * bytesPerElement > size().getBytes()) { throw new BufferOverflowException(); } } - public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { - return memory.map(stack, offset, size, flags); - } - - public ByteBuffer mapBytes(MemoryStack stack, int offset, int size, int flags) { + default ByteBuffer mapBytes(MemoryStack stack, int offset, int size, int flags) { return map(stack, offset, size, flags).getByteBuffer(0, size); } - public ShortBuffer mapShorts(MemoryStack stack, int offset, int size, int flags) { + default ShortBuffer mapShorts(MemoryStack stack, int offset, int size, int flags) { return map(stack, offset, size * Short.BYTES, flags).getShortBuffer(0, size); } - public IntBuffer mapInts(MemoryStack stack, int offset, int size, int flags) { + default IntBuffer mapInts(MemoryStack stack, int offset, int size, int flags) { return map(stack, offset, size * Integer.BYTES, flags).getIntBuffer(0, size); } - public FloatBuffer mapFloats(MemoryStack stack, int offset, int size, int flags) { + default FloatBuffer mapFloats(MemoryStack stack, int offset, int size, int flags) { return map(stack, offset, size * Float.BYTES, flags).getFloatBuffer(0, size); } - public DoubleBuffer mapDoubles(MemoryStack stack, int offset, int size, int flags) { + default DoubleBuffer mapDoubles(MemoryStack stack, int offset, int size, int flags) { return map(stack, offset, size * Double.BYTES, flags).getDoubleBuffer(0, size); } - public LongBuffer mapLongs(MemoryStack stack, int offset, int size, int flags) { + default LongBuffer mapLongs(MemoryStack stack, int offset, int size, int flags) { return map(stack, offset, size * Long.BYTES, flags).getLongBuffer(0, size); } - public T mapObject(MemoryStack stack, int offset, int size, int flags, Function factory) { + default T mapObject(MemoryStack stack, int offset, int size, int flags, Function factory) { return factory.apply(map(stack, offset, size, flags)); } - public void copy(MemoryStack stack, ByteBuffer buffer) { + default void copy(MemoryStack stack, ByteBuffer buffer) { verifyBufferSize(buffer.limit(), Byte.BYTES); MemoryUtil.memCopy(buffer, mapBytes(stack, 0, buffer.limit(), 0)); unmap(); } - public void copy(MemoryStack stack, ShortBuffer buffer) { + default void copy(MemoryStack stack, ShortBuffer buffer) { verifyBufferSize(buffer.limit(), Short.BYTES); MemoryUtil.memCopy(buffer, mapShorts(stack, 0, buffer.limit(), 0)); unmap(); } - public void copy(MemoryStack stack, IntBuffer buffer) { + default void copy(MemoryStack stack, IntBuffer buffer) { verifyBufferSize(buffer.limit(), Integer.BYTES); MemoryUtil.memCopy(buffer, mapInts(stack, 0, buffer.limit(), 0)); unmap(); } - public void copy(MemoryStack stack, FloatBuffer buffer) { + default void copy(MemoryStack stack, FloatBuffer buffer) { verifyBufferSize(buffer.limit(), Float.BYTES); MemoryUtil.memCopy(buffer, mapFloats(stack, 0, buffer.limit(), 0)); unmap(); } - public void copy(MemoryStack stack, DoubleBuffer buffer) { + default void copy(MemoryStack stack, DoubleBuffer buffer) { verifyBufferSize(buffer.limit(), Double.BYTES); MemoryUtil.memCopy(buffer, mapDoubles(stack, 0, buffer.limit(), 0)); unmap(); } - public void copy(MemoryStack stack, LongBuffer buffer) { + default void copy(MemoryStack stack, LongBuffer buffer) { verifyBufferSize(buffer.limit(), Long.BYTES); MemoryUtil.memCopy(buffer, mapLongs(stack, 0, buffer.limit(), 0)); unmap(); } - public void copy(MemoryStack stack, Struct struct) { + default void copy(MemoryStack stack, Struct struct) { verifyBufferSize(struct.sizeof(), Byte.BYTES); MemoryUtil.memCopy(MemoryUtil.memByteBuffer(struct.address(), struct.sizeof()), mapBytes(stack, 0, struct.sizeof(), 0)); unmap(); } - public void copy(MemoryStack stack, StructBuffer buffer) { + default void copy(MemoryStack stack, StructBuffer buffer) { verifyBufferSize(buffer.limit(), buffer.sizeof()); int size = buffer.limit() * buffer.sizeof(); MemoryUtil.memCopy(MemoryUtil.memByteBuffer(buffer.address(), size), mapBytes(stack, 0, size, 0)); unmap(); } - public void unmap() { - memory.unmap(); - } - - public void recordCopy(MemoryStack stack, CommandBuffer commands, GpuBuffer source, + default void recordCopy(MemoryStack stack, CommandBuffer commands, GpuBuffer source, long srcOffset, long dstOffset, long size) { VkBufferCopy.Buffer copy = VkBufferCopy.calloc(1, stack) .srcOffset(srcOffset).dstOffset(dstOffset).size(size); - vkCmdCopyBuffer(commands.getBuffer(), source.getNativeObject(), id, copy); - } - - public void freeMemory() { - memory.getNativeReference().destroy(); - } - - public MemorySize size() { - return size; - } - - public LogicalDevice getDevice() { - return device; + vkCmdCopyBuffer(commands.getBuffer(), source.getNativeObject(), getNativeObject(), copy); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java index d7c5ce1107..cedcaed2d7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java @@ -1,5 +1,6 @@ package com.jme3.vulkan.buffers; +import com.jme3.vulkan.VulkanObject; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.memory.MemoryFlag; import com.jme3.vulkan.memory.MemorySize; @@ -7,7 +8,7 @@ import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -public class PersistentBuffer extends GpuBuffer { +public class PersistentBuffer extends VulkanBuffer { private final long address; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index 440d315b04..02e0686c5e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -10,14 +10,14 @@ import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -public class StageableBuffer extends GpuBuffer { +public class StageableBuffer extends VulkanBuffer { - private final GpuBuffer stage; + private final VulkanBuffer stage; public StageableBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { super(device, size, usage.add(BufferUsage.TransferDst), mem, concurrent); - this.stage = new GpuBuffer(device, size, BufferUsage.TransferSrc, + this.stage = new VulkanBuffer(device, size, BufferUsage.TransferSrc, Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), concurrent); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java new file mode 100644 index 0000000000..8510f8debd --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java @@ -0,0 +1,71 @@ +package com.jme3.vulkan.buffers; + +import com.jme3.vulkan.memory.MemorySize; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; + +public class VersionedBuffer implements GpuBuffer { + + private final GpuBuffer[] buffers; + private int version = 0; + private boolean mapped = false; + + public VersionedBuffer(GpuBuffer... buffers) { + assert buffers.length > 0; + this.buffers = buffers; + MemorySize standard = buffers[0].size(); + for (int i = 1; i < buffers.length; i++) { + if (!buffers[i].size().equals(standard)) { + throw new IllegalArgumentException("All buffers must be of equivalent size."); + } + } + } + + @Override + public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { + mapped = true; + return buffers[version].map(stack, offset, size, flags); + } + + @Override + public void unmap() { + mapped = false; + buffers[version].unmap(); + } + + @Override + public void freeMemory() { + for (GpuBuffer buf : buffers) { + buf.freeMemory(); + } + } + + @Override + public MemorySize size() { + return buffers[version].size(); + } + + @Override + public long getId() { + return buffers[version].getId(); + } + + public void setVersion(int version) { + if (mapped) { + throw new IllegalStateException("Cannot change version while buffer is mapped."); + } + if (version < 0 || version >= buffers.length) { + throw new IndexOutOfBoundsException("Version must be between 0 (inclusive) and the number of internal buffers (exclusive)."); + } + this.version = version; + } + + public GpuBuffer[] getInternalBuffers() { + return buffers; + } + + public int getVersion() { + return version; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java new file mode 100644 index 0000000000..835aa1fe76 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java @@ -0,0 +1,107 @@ +package com.jme3.vulkan.buffers; + +import com.jme3.renderer.vulkan.VulkanUtils; +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemoryRegion; +import com.jme3.vulkan.memory.MemorySize; +import com.jme3.vulkan.util.Flag; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkBufferCreateInfo; +import org.lwjgl.vulkan.VkMemoryRequirements; + +import java.nio.*; + +import static com.jme3.renderer.vulkan.VulkanUtils.check; +import static org.lwjgl.vulkan.VK10.*; + +public class VulkanBuffer implements GpuBuffer, Native { + + private final LogicalDevice device; + private final NativeReference ref; + private final MemorySize size; + private final long id; + protected final MemoryRegion memory; + + public VulkanBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { + this.device = device; + this.size = size; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkBufferCreateInfo create = VkBufferCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO) + .size(size.getBytes()) + .usage(usage.bits()) + .sharingMode(VulkanUtils.sharingMode(concurrent)); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateBuffer(device.getNativeObject(), create, null, idBuf), + "Failed to create buffer."); + id = idBuf.get(0); + VkMemoryRequirements bufferMem = VkMemoryRequirements.malloc(stack); + vkGetBufferMemoryRequirements(device.getNativeObject(), id, bufferMem); + memory = new MemoryRegion(device, bufferMem.size(), device.getPhysicalDevice().findSupportedMemoryType( + stack, bufferMem.memoryTypeBits(), mem)); + memory.bind(this, 0); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + memory.getNativeReference().addDependent(ref); + } + + @Override + public Long getNativeObject() { + return id; + } + + @Override + public long getId() { + return id; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyBuffer(device.getNativeObject(), id, null); + } + + @Override + public void prematureNativeDestruction() {} + + @Override + public NativeReference getNativeReference() { + return ref; + } + + @Override + public void verifyBufferSize(int elements, long bytesPerElement) { + if (elements * bytesPerElement > size.getBytes()) { + throw new BufferOverflowException(); + } + } + + @Override + public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { + return memory.map(stack, offset, size, flags); + } + + @Override + public void unmap() { + memory.unmap(); + } + + @Override + public void freeMemory() { + memory.getNativeReference().destroy(); + } + + @Override + public MemorySize size() { + return size; + } + + public LogicalDevice getDevice() { + return device; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java index 9d780cc6d0..227748b163 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java @@ -1,5 +1,7 @@ package com.jme3.vulkan.memory; +import java.util.Objects; + public class MemorySize { private final int elements; @@ -12,6 +14,18 @@ public MemorySize(int elements, int bytesPerElement) { this.bytes = this.elements * this.bytesPerElement; } + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + MemorySize that = (MemorySize) o; + return elements == that.elements && bytesPerElement == that.bytesPerElement; + } + + @Override + public int hashCode() { + return Objects.hash(elements, bytesPerElement); + } + public int getElements() { return elements; } From 5587e178d5ee9691ae95b5aa43b1a1e88d62dc81 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 19 Aug 2025 11:35:35 -0400 Subject: [PATCH 37/80] fix build errors related to GpuBuffer interface extraction --- .../src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java | 2 +- .../main/java/com/jme3/vulkan/images/VulkanImageLoader.java | 5 +++-- .../com/jme3/vulkan/material/uniforms/BufferUniform.java | 2 +- .../src/main/java/com/jme3/vulkan/memory/MemoryRegion.java | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index 137a3ef439..e6e150d2e0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -116,7 +116,7 @@ default void recordCopy(MemoryStack stack, CommandBuffer commands, GpuBuffer sou long srcOffset, long dstOffset, long size) { VkBufferCopy.Buffer copy = VkBufferCopy.calloc(1, stack) .srcOffset(srcOffset).dstOffset(dstOffset).size(size); - vkCmdCopyBuffer(commands.getBuffer(), source.getNativeObject(), getNativeObject(), copy); + vkCmdCopyBuffer(commands.getBuffer(), source.getId(), getId(), copy); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index dc4ac78106..05f0ffeade 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -3,6 +3,7 @@ import com.jme3.asset.*; import com.jme3.util.BufferUtils; import com.jme3.vulkan.buffers.BufferUsage; +import com.jme3.vulkan.buffers.VulkanBuffer; import com.jme3.vulkan.memory.MemoryFlag; import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.commands.CommandBuffer; @@ -152,7 +153,7 @@ private void flipImage(byte[] img, int width, int height, int bpp) { private GpuImage loadGpuImage(CommandPool transferPool, ImageData data) { try (MemoryStack stack = MemoryStack.stackPush()) { - GpuBuffer staging = new GpuBuffer(transferPool.getDevice(), MemorySize.bytes(data.getBuffer().limit()), + GpuBuffer staging = new VulkanBuffer(transferPool.getDevice(), MemorySize.bytes(data.getBuffer().limit()), BufferUsage.TransferSrc, Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCached), false); staging.copy(stack, data.getBuffer()); GpuImage image = new GpuImage(transferPool.getDevice(), data.getWidth(), data.getHeight(), data.getFormat(), @@ -171,7 +172,7 @@ private GpuImage loadGpuImage(CommandPool transferPool, ImageData data) { .layerCount(1); region.imageOffset().set(0, 0, 0); region.imageExtent().set(data.getWidth(), data.getHeight(), 1); - vkCmdCopyBufferToImage(commands.getBuffer(), staging.getNativeObject(), + vkCmdCopyBufferToImage(commands.getBuffer(), staging.getId(), image.getNativeObject(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, region); image.transitionLayout(commands, Image.Layout.TransferDstOptimal, Image.Layout.ShaderReadOnlyOptimal); commands.end(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index 7497630bf3..9cb1e32ff7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -34,7 +34,7 @@ public BufferUniform(String name, Descriptor type, int bindingIndex, Flag Date: Sun, 24 Aug 2025 12:44:15 -0400 Subject: [PATCH 38/80] alter material system to support versions of resources per frame-in-flight --- .../jme3test/vulkan/VulkanHelperTest.java | 51 +++-- .../main/java/jme3test/vulkan/VulkanTest.java | 6 +- ...{VulkanObject.java => AbstractNative.java} | 4 +- .../java/com/jme3/vulkan/VulkanInstance.java | 5 +- .../com/jme3/vulkan/VulkanRenderManager.java | 35 --- .../com/jme3/vulkan/buffers/GpuBuffer.java | 12 +- .../jme3/vulkan/buffers/PersistentBuffer.java | 1 - .../jme3/vulkan/buffers/VersionedBuffer.java | 74 +++--- .../vulkan/descriptors/DescriptorSet.java | 20 +- .../descriptors/DescriptorSetLayout.java | 2 + .../jme3/vulkan/devices/LogicalDevice.java | 6 +- .../com/jme3/vulkan/frames/UpdateFrame.java | 7 + .../vulkan/frames/UpdateFrameManager.java | 107 +++++++++ .../jme3/vulkan/frames/VersionWrapper.java | 42 ++++ .../jme3/vulkan/frames/VersionedResource.java | 49 ++++ .../com/jme3/vulkan/material/Material.java | 45 ++-- .../com/jme3/vulkan/material/UniformSet.java | 211 +++++++++++++----- .../material/uniforms/AbstractUniform.java | 1 + .../material/uniforms/BufferUniform.java | 52 ++--- .../vulkan/material/uniforms/Uniform.java | 75 ++++++- .../java/com/jme3/vulkan/pass/RenderPass.java | 6 +- .../vulkan/pipelines/GraphicsPipeline.java | 2 +- .../com/jme3/vulkan/pipelines/Pipeline.java | 4 +- .../com/jme3/vulkan/surface/Swapchain.java | 4 +- 24 files changed, 567 insertions(+), 254 deletions(-) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{VulkanObject.java => AbstractNative.java} (80%) delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrame.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionWrapper.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 02e50a9b30..46e5befc84 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -2,6 +2,7 @@ import com.jme3.app.FlyCamAppState; import com.jme3.app.SimpleApplication; +import com.jme3.math.Matrix4f; import com.jme3.math.Quaternion; import com.jme3.math.Transform; import com.jme3.math.Vector3f; @@ -17,9 +18,10 @@ import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.*; +import com.jme3.vulkan.frames.UpdateFrame; +import com.jme3.vulkan.frames.UpdateFrameManager; import com.jme3.vulkan.images.*; import com.jme3.vulkan.material.TestMaterial; -import com.jme3.vulkan.material.uniforms.BufferUniform; import com.jme3.vulkan.memory.MemoryFlag; import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.pass.Attachment; @@ -42,7 +44,6 @@ import java.nio.FloatBuffer; import java.nio.IntBuffer; -import java.util.function.Consumer; import java.util.logging.Level; import static org.lwjgl.vulkan.VK13.*; @@ -61,7 +62,7 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda private StageableBuffer vertexBuffer, indexBuffer; private DescriptorPool descriptorPool; private DescriptorSetLayout descriptorLayout; - private VulkanRenderManager renderer; + private UpdateFrameManager frames; private boolean swapchainResizeFlag = false; private boolean applicationStopped = false; @@ -83,6 +84,9 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda 0, 1, 2, 2, 3, 0, 4, 5, 6, 6, 7, 4); + // material + private TestMaterial material; + // geometry private final Transform modelTransform = new Transform(); @@ -115,6 +119,8 @@ public void simpleInitApp() { flyCam.setMoveSpeed(5f); flyCam.setDragToRotate(true); + frames = new UpdateFrameManager(2, n -> new Frame()); + long window = ((LwjglVulkanContext)context).getWindowHandle(); instance = new VulkanInstance(VK_API_VERSION_1_3); @@ -165,6 +171,14 @@ public void simpleInitApp() { new PoolSize(Descriptor.StorageBuffer, 4), new PoolSize(Descriptor.CombinedImageSampler, 2)); + material = new TestMaterial(descriptorPool); + material.getMatrices().setValue(frames.wrap(n -> new PersistentBuffer(device, + MemorySize.floats(16), + BufferUsage.Uniform, + Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), + false))); + material.getBaseColorMap().setValue(texture); // fixme + CommandPool transferPool = device.getShortTermPool(physDevice.getGraphics()); // depth texture @@ -236,8 +250,6 @@ public void simpleInitApp() { texture = new Texture(device, image.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1), VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); - renderer = new VulkanRenderManager(2, n -> new Frame()); - } @Override @@ -278,7 +290,7 @@ public void reshape(int w, int h) { @Override public void simpleUpdate(float tpf) { - renderer.render(tpf); + frames.update(tpf); } private ImageView createDepthAttachment(CommandPool pool) { @@ -297,7 +309,7 @@ private ImageView createDepthAttachment(CommandPool pool) { return view; } - private class Frame implements Consumer { + private class Frame implements UpdateFrame { // render manager private final CommandBuffer graphicsCommands = graphicsPool.allocateCommandBuffer(); @@ -308,7 +320,7 @@ private class Frame implements Consumer { // material // private final GpuBuffer uniforms; // private final DescriptorSet descriptorSet; - private final TestMaterial material = new TestMaterial(descriptorPool); + //private final TestMaterial material = new TestMaterial(descriptorPool); public Frame() { // using a persistent buffer because we will be writing to the buffer very often @@ -319,16 +331,16 @@ public Frame() { // descriptorSet.update(true, // new BufferSetWriter(Descriptor.UniformBuffer, 0, 0, new BufferDescriptor(uniforms)), // new ImageSetWriter(Descriptor.CombinedImageSampler, 1, 0, new ImageDescriptor(texture, Image.Layout.ShaderReadOnlyOptimal))); - material.getMatrices().setValue(new PersistentBuffer(device, - MemorySize.floats(16), - BufferUsage.Uniform, - Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), - false)); - material.getBaseColorMap().setValue(texture); +// material.getMatrices().setValue(frames.wrap(n -> new PersistentBuffer(device, +// MemorySize.floats(16), +// BufferUsage.Uniform, +// Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), +// false))); +// material.getBaseColorMap().setValue(texture); } @Override - public void accept(Float tpf) { + public void update(UpdateFrameManager frames, float tpf) { // render manager if (applicationStopped) return; @@ -350,13 +362,12 @@ public void accept(Float tpf) { // geometry modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y)); - cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()) - .fillFloatBuffer( + Matrix4f worldViewProjection = cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()); // material - material.getMatrices().getValue().mapFloats(stack, 0, - material.getMatrices().getValue().size().getElements(), 0), true); - material.getMatrices().getValue().unmap(); + GpuBuffer matrixBuffer = material.getMatrices().getVersion(); + worldViewProjection.fillFloatBuffer(matrixBuffer.mapFloats(stack, 0, matrixBuffer.size().getElements(), 0), true); + matrixBuffer.unmap(); material.bind(graphicsCommands, pipeline); // vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), pipeline.getBindPoint().getVkEnum(), // pipelineLayout.getNativeObject(), 0, stack.longs(descriptorSet.getId()), null); diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java index 0722616497..5efc3e4aa4 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java @@ -9,7 +9,7 @@ import com.jme3.system.vulkan.LwjglVulkanContext; import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.sync.Semaphore; -import com.jme3.vulkan.VulkanRenderManager; +import com.jme3.vulkan.frames.UpdateFrameManager; import org.lwjgl.BufferUtils; import org.lwjgl.PointerBuffer; import org.lwjgl.glfw.GLFW; @@ -39,7 +39,7 @@ public class VulkanTest extends SimpleApplication { private VkDevice device; private VkQueue graphicsQueue, presentQueue; private VkCommandBuffer commandBuffer; - private final VulkanRenderManager renderer = new VulkanRenderManager(2, n -> new Frame()); + private final UpdateFrameManager renderer = new UpdateFrameManager(2, n -> new Frame()); private final Collection instanceExtensions = new ArrayList<>(); private final Collection deviceExtensions = new ArrayList<>(); private final List layers = new ArrayList<>(); @@ -176,7 +176,7 @@ public void stop() { @Override public void simpleUpdate(float tpf) { - renderer.render(tpf); + renderer.update(tpf); Native.get().flush(); // flush unused native objects } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanObject.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/AbstractNative.java similarity index 80% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanObject.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/AbstractNative.java index 67add85eb2..e364df5a5d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanObject.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/AbstractNative.java @@ -4,7 +4,7 @@ import com.jme3.util.natives.NativeReference; import org.lwjgl.system.MemoryStack; -public abstract class VulkanObject implements Native { +public abstract class AbstractNative implements Native { protected T object; protected NativeReference ref; @@ -22,7 +22,7 @@ public NativeReference getNativeReference() { return ref; } - public static abstract class Builder implements AutoCloseable { + public static abstract class Builder implements AutoCloseable { protected final MemoryStack stack = MemoryStack.stackPush(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java index 9308da126a..b03e28f4e7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java @@ -4,7 +4,6 @@ import com.jme3.util.natives.Native; import org.lwjgl.PointerBuffer; import org.lwjgl.glfw.GLFWVulkan; -import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.EXTDebugUtils; import org.lwjgl.vulkan.VkApplicationInfo; @@ -16,7 +15,7 @@ import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; -public class VulkanInstance extends VulkanObject { +public class VulkanInstance extends AbstractNative { public static final String ENGINE_NAME = "jMonkeyEngine"; public static final String LUNARG_LAYER = "VK_LAYER_KHRONOS_validation"; @@ -52,7 +51,7 @@ public Builder build() { return new Builder(); } - public class Builder extends VulkanObject.Builder { + public class Builder extends AbstractNative.Builder { @Override protected void build() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java deleted file mode 100644 index 325b0f25a5..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanRenderManager.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.jme3.vulkan; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.IntFunction; - -public class VulkanRenderManager { - - private final IntFunction> frameFactory; - private final List> frames = new ArrayList<>(); - private int currentFrame = 0; - - public VulkanRenderManager(int frames, IntFunction> frameFactory) { - this.frameFactory = frameFactory; - setFrames(frames); - } - - public void render(float tpf) { - frames.get(currentFrame).accept(tpf); - if (++currentFrame >= frames.size()) { - currentFrame = 0; - } - } - - public void setFrames(int n) { - while (n > frames.size()) { - frames.add(frameFactory.apply(frames.size())); - } - while (n < frames.size()) { - frames.remove(frames.size() - 1); - } - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index e6e150d2e0..b0579c0f6e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -1,8 +1,6 @@ package com.jme3.vulkan.buffers; -import com.jme3.util.natives.Native; import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.memory.MemorySize; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; @@ -34,8 +32,12 @@ default void verifyBufferSize(int elements, long bytesPerElement) { } } + default T map(MemoryStack stack, int offset, int size, int flags, Function factory) { + return factory.apply(map(stack, offset, size, flags)); + } + default ByteBuffer mapBytes(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size, flags).getByteBuffer(0, size); + return map(stack, offset, size * Byte.BYTES, flags).getByteBuffer(0, size); } default ShortBuffer mapShorts(MemoryStack stack, int offset, int size, int flags) { @@ -58,10 +60,6 @@ default LongBuffer mapLongs(MemoryStack stack, int offset, int size, int flags) return map(stack, offset, size * Long.BYTES, flags).getLongBuffer(0, size); } - default T mapObject(MemoryStack stack, int offset, int size, int flags, Function factory) { - return factory.apply(map(stack, offset, size, flags)); - } - default void copy(MemoryStack stack, ByteBuffer buffer) { verifyBufferSize(buffer.limit(), Byte.BYTES); MemoryUtil.memCopy(buffer, mapBytes(stack, 0, buffer.limit(), 0)); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java index cedcaed2d7..a1b638fbec 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java @@ -1,6 +1,5 @@ package com.jme3.vulkan.buffers; -import com.jme3.vulkan.VulkanObject; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.memory.MemoryFlag; import com.jme3.vulkan.memory.MemorySize; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java index 8510f8debd..9a44940a29 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java @@ -1,71 +1,79 @@ package com.jme3.vulkan.buffers; +import com.jme3.vulkan.frames.VersionedResource; +import com.jme3.vulkan.frames.UpdateFrameManager; import com.jme3.vulkan.memory.MemorySize; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -public class VersionedBuffer implements GpuBuffer { +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; - private final GpuBuffer[] buffers; - private int version = 0; - private boolean mapped = false; +public class VersionedBuffer implements GpuBuffer, VersionedResource { - public VersionedBuffer(GpuBuffer... buffers) { - assert buffers.length > 0; - this.buffers = buffers; - MemorySize standard = buffers[0].size(); - for (int i = 1; i < buffers.length; i++) { - if (!buffers[i].size().equals(standard)) { - throw new IllegalArgumentException("All buffers must be of equivalent size."); - } + private final UpdateFrameManager frames; + private final MemorySize size; + private final List buffers; + + public VersionedBuffer(UpdateFrameManager frames, MemorySize size, Function factory) { + this.frames = frames; + this.size = size; + ArrayList bufferList = new ArrayList<>(); + for (int i = 0; i < frames.getTotalFrames(); i++) { + bufferList.add(factory.apply(size)); } + this.buffers = Collections.unmodifiableList(bufferList); } @Override public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { - mapped = true; - return buffers[version].map(stack, offset, size, flags); + return getVersion().map(stack, offset, size, flags); } @Override public void unmap() { - mapped = false; - buffers[version].unmap(); + getVersion().unmap(); } @Override public void freeMemory() { - for (GpuBuffer buf : buffers) { - buf.freeMemory(); - } + buffers.forEach(GpuBuffer::freeMemory); } @Override public MemorySize size() { - return buffers[version].size(); + return size; } @Override public long getId() { - return buffers[version].getId(); + return getVersion().getId(); } - public void setVersion(int version) { - if (mapped) { - throw new IllegalStateException("Cannot change version while buffer is mapped."); - } - if (version < 0 || version >= buffers.length) { - throw new IndexOutOfBoundsException("Version must be between 0 (inclusive) and the number of internal buffers (exclusive)."); - } - this.version = version; + @Override + public T getVersion() { + return getVersion(frames.getCurrentFrame()); } - public GpuBuffer[] getInternalBuffers() { - return buffers; + @Override + public T getVersion(int i) { + return buffers.get(Math.min(i, buffers.size() - 1)); } - public int getVersion() { - return version; + @Override + public int getNumVersions() { + return buffers.size(); + } + + @Override + public int getCurrentVersionIndex() { + return Math.min(frames.getCurrentFrame(), buffers.size() - 1); + } + + public List getInternalBuffers() { + return buffers; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java index 809c0dd2c8..3e3805edd6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -1,14 +1,14 @@ package com.jme3.vulkan.descriptors; import com.jme3.util.natives.Native; -import com.jme3.vulkan.VulkanObject; +import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkWriteDescriptorSet; import static org.lwjgl.vulkan.VK10.*; -public class DescriptorSet extends VulkanObject { +public class DescriptorSet extends AbstractNative { private final LogicalDevice device; private final DescriptorPool pool; @@ -35,20 +35,16 @@ public Runnable createNativeDestroyer() { public void write(DescriptorSetWriter... writers) { try (MemoryStack stack = MemoryStack.stackPush()) { VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(writers.length, stack); - populateWriteBuffer(stack, write, writers); + for (DescriptorSetWriter w : writers) { + w.populateWrite(stack, write.get() + .sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET) + .dstSet(object)); + } + write.flip(); vkUpdateDescriptorSets(device.getNativeObject(), write, null); } } - public void populateWriteBuffer(MemoryStack stack, VkWriteDescriptorSet.Buffer buffer, DescriptorSetWriter... writers) { - for (DescriptorSetWriter w : writers) { - w.populateWrite(stack, buffer.get() - .sType(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET) - .dstSet(object)); - } - buffer.flip(); - } - @Deprecated public long getId() { return object; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java index 321bb5f298..81ad411d16 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java @@ -3,6 +3,8 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.material.UniformSet; +import com.jme3.vulkan.material.uniforms.Uniform; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDescriptorSetLayoutBinding; import org.lwjgl.vulkan.VkDescriptorSetLayoutCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java index 9bcc6fd456..a91e6bd621 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java @@ -2,7 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.vulkan.VulkanInstance; -import com.jme3.vulkan.VulkanObject; +import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.commands.Queue; import org.lwjgl.PointerBuffer; @@ -16,7 +16,7 @@ import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; -public class LogicalDevice extends VulkanObject { +public class LogicalDevice extends AbstractNative { private final VulkanInstance instance; private final Set enabledExtensions = new HashSet<>(); @@ -85,7 +85,7 @@ public Builder build(Function deviceFactory) { return new Builder(deviceFactory); } - public class Builder extends VulkanObject.Builder { + public class Builder extends AbstractNative.Builder { private final Function deviceFactory; private final Set extensions = new HashSet<>(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrame.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrame.java new file mode 100644 index 0000000000..a7a012bd63 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrame.java @@ -0,0 +1,7 @@ +package com.jme3.vulkan.frames; + +public interface UpdateFrame { + + void update(UpdateFrameManager frames, float tpf); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java new file mode 100644 index 0000000000..46a924afad --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java @@ -0,0 +1,107 @@ +package com.jme3.vulkan.frames; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.IntFunction; + +public class UpdateFrameManager { + + private final UpdateFrame[] frames; + private int currentFrame = 0; + + public UpdateFrameManager(int frames, IntFunction factory) { + this.frames = new UpdateFrame[frames]; + for (int i = 0; i < frames; i++) { + this.frames[i] = factory.apply(i); + } + } + + public void update(float tpf) { + frames[currentFrame].update(this, tpf); + if (++currentFrame >= frames.length) { + currentFrame = 0; + } + } + + public int getTotalFrames() { + return frames.length; + } + + public int getCurrentFrame() { + return currentFrame; + } + + public VersionedResource wrap(IntFunction generator) { + return new VersionPerFrame<>(generator); + } + + public VersionedResource wrap(T resource) { + return new SingleVersion<>(resource); + } + + private class VersionPerFrame implements VersionedResource { + + private final List versions; + + public VersionPerFrame(IntFunction generator) { + ArrayList versionList = new ArrayList<>(getTotalFrames()); + for (int i = 0; i < getTotalFrames(); i++) { + versionList.add(generator.apply(i)); + } + versions = Collections.unmodifiableList(versionList); + } + + @Override + public T getVersion() { + return getVersion(currentFrame); + } + + @Override + public T getVersion(int i) { + return versions.get(i); + } + + @Override + public int getNumVersions() { + return versions.size(); + } + + @Override + public int getCurrentVersionIndex() { + return currentFrame; + } + + } + + private class SingleVersion implements VersionedResource { + + private final T version; + + public SingleVersion(T version) { + this.version = version; + } + + @Override + public T getVersion() { + return version; + } + + @Override + public T getVersion(int i) { + return version; + } + + @Override + public int getNumVersions() { + return 1; + } + + @Override + public int getCurrentVersionIndex() { + return 0; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionWrapper.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionWrapper.java new file mode 100644 index 0000000000..39ce89a017 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionWrapper.java @@ -0,0 +1,42 @@ +package com.jme3.vulkan.frames; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.IntFunction; + +public class VersionWrapper implements VersionedResource { + + private final UpdateFrameManager frames; + private final List versions; + + public VersionWrapper(UpdateFrameManager frames, IntFunction generator) { + this.frames = frames; + ArrayList versionList = new ArrayList<>(frames.getTotalFrames()); + for (int i = 0; i < frames.getTotalFrames(); i++) { + versionList.add(generator.apply(i)); + } + versions = Collections.unmodifiableList(versionList); + } + + @Override + public T getVersion() { + return getVersion(frames.getCurrentFrame()); + } + + @Override + public T getVersion(int i) { + return versions.get(i); + } + + @Override + public int getNumVersions() { + return versions.size(); + } + + @Override + public int getCurrentVersionIndex() { + return frames.getCurrentFrame(); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java new file mode 100644 index 0000000000..3086af9673 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java @@ -0,0 +1,49 @@ +package com.jme3.vulkan.frames; + +/** + * Maps resources to frame indices. + * + * @param resource type + */ +public interface VersionedResource { + + /** + * Gets the resource version for the current frame. + * + *

This is functionally identical to

+ *

+     * int currentFrameIndex = ...
+     * T version = getVersion(currentFrameIndex);
+     * 
+ *

Where {@code currentFrameIndex} is the index of the current frame.

+ */ + T getVersion(); + + /** + * Gets the resource version for the specified frame index. The index + * may be between 0 (inclusive) and the number of frames-in-flight + * (exclusive), regardless of the number of versions this resource + * contains. + * + *

This method is deterministic. Calls with the same arguments return + * the same resource.

+ * + * @param i frame index + * @return resource version mapped to the frame index + */ + T getVersion(int i); + + /** + * Gets the number of unique versions this resource maintains. + */ + int getNumVersions(); + + /** + * Gets the index of the {@link #getVersion() current version}, which + * is not necessarily the current frame index, but is determined + * by the current frame index. This should always return the same + * value on the same frame. + */ + int getCurrentVersionIndex(); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index 5c08d05260..92e78fb394 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -18,7 +18,7 @@ public class Material { private final DescriptorPool pool; - private final List uniforms = new ArrayList<>(); + private final List uniformSets = new ArrayList<>(); private final HashMap> uniformLookup = new HashMap<>(); public Material(DescriptorPool pool) { @@ -32,30 +32,10 @@ public void bind(CommandBuffer cmd, Pipeline pipeline) { public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { LinkedList availableLayouts = new LinkedList<>( Arrays.asList(pipeline.getLayout().getDescriptorSetLayouts())); - ArrayList allocations = new ArrayList<>(availableLayouts.size()); - for (UniformSet set : uniforms) { - set.update(pipeline.getDevice()); - // Select an existing descriptor set to be active. If - // no existing set may be selected, non-null allocation info is - // returned with which to allocate a new descriptor set. - SetAllocationInfo a = set.selectExistingActiveSet(availableLayouts); - if (a != null) { - allocations.add(a); - } - } - if (!allocations.isEmpty()) { - DescriptorSet[] allocatedSets = pool.allocateSets(allocations.stream() - .map(SetAllocationInfo::getLayout).toArray(DescriptorSetLayout[]::new)); - for (int i = 0; i < allocatedSets.length; i++) { - UniformSet target = allocations.get(i).getSet(); - target.addActiveSet(allocatedSets[i]); - allocatedSets[i].write(target.getUniforms()); - } - } try (MemoryStack stack = MemoryStack.stackPush()) { - LongBuffer setBuf = stack.mallocLong(uniforms.size()); - for (UniformSet s : uniforms) { - setBuf.put(s.getActiveSet().getNativeObject()); + LongBuffer setBuf = stack.mallocLong(uniformSets.size()); + for (UniformSet set : uniformSets) { + setBuf.put(set.acquireSet(pipeline.getDevice(), pool, availableLayouts).getNativeObject()); } setBuf.flip(); vkCmdBindDescriptorSets(cmd.getBuffer(), pipeline.getBindPoint().getVkEnum(), @@ -64,11 +44,16 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { } public DescriptorSetLayout[] createLayouts(LogicalDevice device) { - return uniforms.stream().map(u -> u.createLayout(device)).toArray(DescriptorSetLayout[]::new); + return uniformSets.stream().map(u -> u.createLayout(device)).toArray(DescriptorSetLayout[]::new); } protected UniformSet addSet(UniformSet set) { - uniforms.add(set); + uniformSets.add(set); + return set; + } + + protected UniformSet addSet(int setIndex, UniformSet set) { + uniformSets.add(setIndex, set); return set; } @@ -77,18 +62,18 @@ protected UniformSet addSet(Uniform... uniforms) { } public List getSets() { - return Collections.unmodifiableList(uniforms); + return Collections.unmodifiableList(uniformSets); } @SuppressWarnings("unchecked") public T get(String name) { - // Not sure if caching results are really worth it... + // Not sure if caching the results is really worth it... Uniform uniform = uniformLookup.get(name); if (uniform != null) { return (T)uniform; } - for (UniformSet set : uniforms) { - for (Uniform u : set.getUniforms()) { + for (UniformSet set : uniformSets) { + for (Uniform u : set) { if (name.equals(u.getName())) { uniformLookup.put(u.getName(), u); return (T)u; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java index 29b8f92b31..b84e320c42 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -1,24 +1,20 @@ package com.jme3.vulkan.material; -import com.jme3.vulkan.descriptors.DescriptorSet; -import com.jme3.vulkan.descriptors.DescriptorSetLayout; -import com.jme3.vulkan.descriptors.SetLayoutBinding; +import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.material.uniforms.Uniform; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VK10; -import org.lwjgl.vulkan.VkWriteDescriptorSet; import java.util.*; -public class UniformSet { +public class UniformSet implements Iterable { private final Uniform[] uniforms; - private final List sets = new ArrayList<>(); - private DescriptorSet activeSet; + private final FrameIndex currentFrame; + private final Map frames = new HashMap<>(); public UniformSet(Uniform... uniforms) { this.uniforms = uniforms; + this.currentFrame = new FrameIndex(this.uniforms); // ensure duplicate binding indices are not present BitSet bindings = new BitSet(); for (Uniform u : uniforms) { @@ -30,75 +26,180 @@ public UniformSet(Uniform... uniforms) { } } + public DescriptorSet acquireSet(LogicalDevice device, DescriptorPool pool, List availableLayouts) { + for (Uniform u : uniforms) { + u.update(device); + } + currentFrame.update(uniforms); + FrameData data = frames.get(currentFrame); + if (data == null) { + frames.put(currentFrame.copy(), data = new FrameData()); + } + return data.get(pool, availableLayouts).update(uniforms); + } + public DescriptorSetLayout createLayout(LogicalDevice device) { - return new DescriptorSetLayout(device, Arrays.stream(uniforms) - .map(Uniform::createBinding).toArray(SetLayoutBinding[]::new)); + SetLayoutBinding[] bindings = new SetLayoutBinding[uniforms.length]; + for (int i = 0; i < uniforms.length; i++) { + bindings[i] = uniforms[i].createBinding(); + } + return new DescriptorSetLayout(device, bindings); } - public void addActiveSet(DescriptorSet activeSet) { - this.activeSet = activeSet; - sets.add(activeSet); + @Override + public Iterator iterator() { + return new SetIterator(); } - public SetAllocationInfo selectExistingActiveSet(List availableLayouts) { - if (activeSet == null || !availableLayouts.remove(activeSet.getLayout())) { - for (DescriptorSet s : sets) { - if (availableLayouts.remove(s.getLayout())) { - this.activeSet = s; - return null; // no allocation necessary + /** + * Maps {@link DescriptorSetLayout DescriptorSetLayouts} to {@link SupportedSet SupportedSets} + * by the ID of the DescriptorSetLayout. If no available layout has a mapped set, a new set + * is allocated with an available compatible layout and mapped with it. + */ + private class FrameData { + + private final Map sets = new HashMap<>(); + + public SupportedSet get(DescriptorPool pool, List availableLayouts) { + for (Iterator it = availableLayouts.iterator(); it.hasNext();) { + DescriptorSetLayout layout = it.next(); + SupportedSet set = sets.get(layout.getNativeObject()); + if (set != null) { + it.remove(); + return set; } } - // Search for a layout that is compatible with the set definition - layoutLoop: for (Iterator it = availableLayouts.iterator(); it.hasNext();) { + for (Iterator it = availableLayouts.iterator(); it.hasNext();) { DescriptorSetLayout layout = it.next(); - requiredLoop: for (Uniform u : uniforms) { - // find a layout binding that matches the requirement - for (SetLayoutBinding available : layout.getBindings()) { - if (u.isBindingCompatible(available)) { - // compatible binding found - continue requiredLoop; - } + if (isLayoutCompatible(layout)) { + it.remove(); + SupportedSet set = new SupportedSet(pool.allocateSets(layout)[0]); + sets.put(set.set.getLayout().getNativeObject(), set); + return set; + } + } + throw new UnsupportedOperationException("Material is not compatible with the pipeline (uniform set not supported)."); + } + + private boolean isLayoutCompatible(DescriptorSetLayout layout) { + for (Uniform u : uniforms) { + for (SetLayoutBinding b : layout.getBindings()) { + if (!u.isBindingCompatible(b)) { + return false; } - // Layout does not contain a binding at the requested index. - // Layout is incompatible, try the next layout. - continue layoutLoop; } - // Layout is compatible with the set definition - it.remove(); - return new SetAllocationInfo(this, layout); // allocate new descriptor set } - throw new IllegalStateException("Pipeline layout does not support uniform set."); + return true; } - // no allocation necessary - return null; + } - public void update(LogicalDevice device) { - ArrayList> writers = new ArrayList<>(uniforms.length); - for (Uniform u : uniforms) { - if (u.update(device)) { - writers.add(u); + /** + * Identifies a FrameData by the resource versions the uniforms are or were using. + */ + private static class FrameIndex { + + private final int[] versions; + + private FrameIndex(Uniform[] uniforms) { + versions = new int[uniforms.length]; + update(uniforms); + } + + private FrameIndex(FrameIndex index) { + versions = new int[index.versions.length]; + copy(index); + } + + public void update(Uniform[] uniforms) { + if (versions.length != uniforms.length) { + throw new IllegalArgumentException("Index must contain one version per uniform."); + } + for (int i = 0; i < uniforms.length; i++) { + versions[i] = uniforms[i].getValue().getCurrentVersionIndex(); } } - if (!writers.isEmpty()) try (MemoryStack stack = MemoryStack.stackPush()) { - VkWriteDescriptorSet.Buffer write = VkWriteDescriptorSet.calloc(writers.size() * sets.size(), stack); - for (DescriptorSet s : sets) { - s.populateWriteBuffer(stack, write, writers.toArray(new Uniform[0])); + + public void copy(FrameIndex source) { + if (versions.length != source.versions.length) { + throw new IllegalArgumentException("Copy source and target do not have the same number of versions."); } - VK10.vkUpdateDescriptorSets(device.getNativeObject(), write, null); + System.arraycopy(source.versions, 0, versions, 0, versions.length); + } + + public FrameIndex copy() { + return new FrameIndex(this); + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + FrameIndex that = (FrameIndex)o; + if (versions == that.versions) return true; + if (versions.length != that.versions.length) return false; + for (int i = 0; i < versions.length; i++) { + if (versions[i] != that.versions[i]) return false; + } + return true; + } + + @Override + public int hashCode() { + return Arrays.hashCode(versions); } - } - public Uniform[] getUniforms() { - return uniforms; } - public List getAllocatedSets() { - return sets; + private static class SupportedSet { + + private final DescriptorSet set; + private long[] variants; + + public SupportedSet(DescriptorSet set) { + this.set = set; + } + + public DescriptorSet update(Uniform[] uniforms) { + if (variants == null) { + // write all uniforms + variants = new long[uniforms.length]; + set.write(uniforms); + } else { + // write only uniforms that have changed since the last update with this set + final ArrayList writers = new ArrayList<>(uniforms.length); + for (int i = 0; i < variants.length; i++) { + if (variants[i] < uniforms[i].getVariant()) { + writers.add(uniforms[i]); + } + } + if (!writers.isEmpty()) { + set.write(writers.toArray(new Uniform[0])); + } + } + // update variant counters to indicate that all uniforms have been + // evaluated since they were last updated + for (int i = 0; i < variants.length; i++) { + variants[i] = uniforms[i].getVariant(); + } + return set; + } + } - public DescriptorSet getActiveSet() { - return activeSet; + private class SetIterator implements Iterator { + + private int index = 0; + + @Override + public boolean hasNext() { + return index < uniforms.length; + } + + @Override + public Uniform next() { + return uniforms[index++]; + } + } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java index 9ab4817c46..7136e8f447 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java @@ -2,6 +2,7 @@ import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; +import com.jme3.vulkan.frames.UpdateFrameManager; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index 9cb1e32ff7..3205ed22a5 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -4,35 +4,27 @@ import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.frames.VersionedResource; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.Struct; import org.lwjgl.vulkan.VkDescriptorBufferInfo; import org.lwjgl.vulkan.VkWriteDescriptorSet; -import java.util.Objects; -import java.util.function.Function; - public class BufferUniform extends AbstractUniform { private static final String BUFFER_NULL_ERROR = "Uniform buffer is null."; - private GpuBuffer buffer; + private VersionedResource resource; private boolean updateFlag = true; - private Function, GpuBuffer> bufferFactory; public BufferUniform(String name, Descriptor type, int bindingIndex, Flag stages) { super(name, type, bindingIndex, stages); } - public BufferUniform(String name, Descriptor type, int bindingIndex, Flag stages, GpuBuffer buffer) { - super(name, type, bindingIndex, stages); - this.buffer = buffer; - } - @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + GpuBuffer buffer = resource.getVersion(); VkDescriptorBufferInfo.Buffer info = VkDescriptorBufferInfo.calloc(1, stack) .buffer(buffer.getId()) .offset(0L) @@ -47,43 +39,29 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { @Override public boolean update(LogicalDevice device) { - if (buffer == null) { - if (bufferFactory != null) { - buffer = Objects.requireNonNull(bufferFactory.apply(device), "Buffer factory produced null."); - updateFlag = true; - } else { - throw new NullPointerException(BUFFER_NULL_ERROR); - } + if (resource == null) { + throw new NullPointerException(BUFFER_NULL_ERROR); } return updateFlag; } - @Override - public void setValue(GpuBuffer value) { - if (this.buffer != value) { - this.buffer = value; - updateFlag = true; - } - } - - @Override - public GpuBuffer getValue() { - return buffer; - } - @Override public boolean isBindingCompatible(SetLayoutBinding binding) { return type == binding.getType() - && bindingIndex == binding.getBinding() - && binding.getDescriptors() == 1; + && bindingIndex == binding.getBinding(); } - public void setBufferFactory(Function, GpuBuffer> bufferFactory) { - this.bufferFactory = bufferFactory; + @Override + public void setValue(VersionedResource value) { + if (this.resource != value) { + this.resource = value; + updateFlag = true; + } } - public Function, GpuBuffer> getBufferFactory() { - return bufferFactory; + @Override + public VersionedResource getValue() { + return resource; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java index 62c895e938..73c222ddc3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java @@ -3,21 +3,86 @@ import com.jme3.vulkan.descriptors.DescriptorSetWriter; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.frames.VersionedResource; public interface Uniform extends DescriptorSetWriter { - boolean update(LogicalDevice device); + /** + * Gets the name by which this uniform is identified. + */ + String getName(); + + /** + * Updates this uniform. + * + * @param device the current logical device + */ + void update(LogicalDevice device); + /** + * Tests if the {@link SetLayoutBinding} is compatible with this uniform, + * indicating that this uniform may be bound to the binding which it represents. + * Bindings that previously tested as compatible should always be compatible with + * this uniform. + * + * @param binding binding to test + * @return true if the binding is compatible + */ boolean isBindingCompatible(SetLayoutBinding binding); + /** + * Creates a new {@link SetLayoutBinding} that is completely (and always will be) + * {@link #isBindingCompatible(SetLayoutBinding) compatible} with this uniform. + * + * @return new set layout binding that is compatible with this uniform + */ SetLayoutBinding createBinding(); - void setValue(T value); - - T getValue(); + /** + * Sets the {@link VersionedResource} containing the resources this + * uniform is to represent. + * + *

Changing the value will typically result in the {@link #getVariant() + * variant index} being increment, requiring {@link com.jme3.vulkan.descriptors.DescriptorSet + * DescriptorSets} to be partially rewritten. Changing the value itself will + * rarely ever require rewriting DescriptorSets.

+ */ + void setValue(VersionedResource value); - String getName(); + /** + * Returns the {@link VersionedResource} containing the resources this + * uniform represents. + */ + VersionedResource getValue(); + /** + * The binding this uniform is targeting. Should be unique among all + * uniforms within a single {@link com.jme3.vulkan.material.UniformSet UniformSet}. + * + * @return the index of the target binding + */ int getBindingIndex(); + /** + * Gets the variant index of this uniform. The variant index starts at {@code 0}, + * and be incremented each time the uniform is changed enough to require a + * rewrite of {@link com.jme3.vulkan.descriptors.DescriptorSet DescriptorSets}. + * + * @return the variant index + */ + long getVariant(); + + /** + * Returns the {@link VersionedResource VersionedResource's} version for the current frame. + * + *

Is functionally identical to

+ *

+     * Uniform<T> uniform = ...
+     * T version = uniform.getValue().getVersion();
+     * 
+ */ + default T getVersion() { + return getValue().getVersion(); + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java index 8361f22385..194762e494 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java @@ -2,7 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.VulkanObject; +import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; import com.jme3.vulkan.pipelines.FrameBuffer; @@ -19,7 +19,7 @@ import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; -public class RenderPass extends VulkanObject { +public class RenderPass extends AbstractNative { private final LogicalDevice device; private final List attachments = new ArrayList<>(); @@ -116,7 +116,7 @@ public Builder buildCopyOf(RenderPass base) { return new Builder(base); } - public class Builder extends VulkanObject.Builder { + public class Builder extends AbstractNative.Builder { public Builder() {} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java index f53272332d..0b4db732d5 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java @@ -42,7 +42,7 @@ public Builder build() { return new Builder(); } - public class Builder extends VulkanObject.Builder { + public class Builder extends AbstractNative.Builder { private final Collection stages = new ArrayList<>(); private final DynamicState dynamic = new DynamicState(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java index 151030db8b..0b03611ffe 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java @@ -1,12 +1,12 @@ package com.jme3.vulkan.pipelines; import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.VulkanObject; +import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.devices.LogicalDevice; import static org.lwjgl.vulkan.VK10.*; -public abstract class Pipeline extends VulkanObject { +public abstract class Pipeline extends AbstractNative { public static final String DEFAULT_SHADER_ENTRY_POINT = "main"; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java index ea4fe15f16..9581ed522f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -24,7 +24,7 @@ import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; -public class Swapchain extends VulkanObject { +public class Swapchain extends AbstractNative { public enum PresentMode { @@ -206,7 +206,7 @@ public FrameBuffer getFrameBuffer() { } - public class Builder extends VulkanObject.Builder { + public class Builder extends AbstractNative.Builder { private final VkSurfaceCapabilitiesKHR caps; private final VkSurfaceFormatKHR.Buffer formats; From d4646f6149f50936d71b04d05b1f2ebf1eec2fea Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sun, 24 Aug 2025 14:00:00 -0400 Subject: [PATCH 39/80] fix build and runtime errors (new material system is operational) --- .../jme3test/vulkan/VulkanHelperTest.java | 17 +- .../main/java/jme3test/vulkan/VulkanTest.java | 901 ------------------ .../jme3/vulkan/buffers/PersistentBuffer.java | 6 +- .../vulkan/descriptors/BufferDescriptor.java | 2 +- .../com/jme3/vulkan/material/Material.java | 2 +- .../com/jme3/vulkan/material/UniformSet.java | 21 +- .../material/uniforms/BufferUniform.java | 17 +- .../material/uniforms/TextureUniform.java | 28 +- .../main/java/com/jme3/vulkan/mesh/Mesh.java | 13 +- .../java/com/jme3/vulkan/sync/SyncGroup.java | 9 +- 10 files changed, 56 insertions(+), 960 deletions(-) delete mode 100644 jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 46e5befc84..7a63041a72 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -119,8 +119,6 @@ public void simpleInitApp() { flyCam.setMoveSpeed(5f); flyCam.setDragToRotate(true); - frames = new UpdateFrameManager(2, n -> new Frame()); - long window = ((LwjglVulkanContext)context).getWindowHandle(); instance = new VulkanInstance(VK_API_VERSION_1_3); @@ -171,14 +169,6 @@ public void simpleInitApp() { new PoolSize(Descriptor.StorageBuffer, 4), new PoolSize(Descriptor.CombinedImageSampler, 2)); - material = new TestMaterial(descriptorPool); - material.getMatrices().setValue(frames.wrap(n -> new PersistentBuffer(device, - MemorySize.floats(16), - BufferUsage.Uniform, - Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), - false))); - material.getBaseColorMap().setValue(texture); // fixme - CommandPool transferPool = device.getShortTermPool(physDevice.getGraphics()); // depth texture @@ -245,11 +235,18 @@ public void simpleInitApp() { indexBuffer.copy(stack, indexData); } + frames = new UpdateFrameManager(2, n -> new Frame()); + // material color texture GpuImage image = assetManager.loadAsset(VulkanImageLoader.key(transferPool, "Common/Textures/MissingTexture.png")); texture = new Texture(device, image.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1), VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); + material = new TestMaterial(descriptorPool); + material.getMatrices().setValue(frames.wrap(n -> new PersistentBuffer( + device, MemorySize.floats(16), BufferUsage.Uniform, false))); + material.getBaseColorMap().setValue(frames.wrap(texture)); + } @Override diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java deleted file mode 100644 index 5efc3e4aa4..0000000000 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanTest.java +++ /dev/null @@ -1,901 +0,0 @@ -package jme3test.vulkan; - -import com.jme3.app.SimpleApplication; -import com.jme3.shaderc.ShaderType; -import com.jme3.shaderc.ShadercLoader; -import com.jme3.system.AppSettings; -import com.jme3.util.natives.Native; -import com.jme3.vulkan.devices.DeviceFilter; -import com.jme3.system.vulkan.LwjglVulkanContext; -import com.jme3.vulkan.sync.Fence; -import com.jme3.vulkan.sync.Semaphore; -import com.jme3.vulkan.frames.UpdateFrameManager; -import org.lwjgl.BufferUtils; -import org.lwjgl.PointerBuffer; -import org.lwjgl.glfw.GLFW; -import org.lwjgl.glfw.GLFWVulkan; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.*; - -import java.nio.ByteBuffer; -import java.nio.IntBuffer; -import java.nio.LongBuffer; -import java.util.*; -import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; -import java.util.logging.Level; -import java.util.logging.Logger; - -import static com.jme3.renderer.vulkan.VulkanUtils.*; -import static org.lwjgl.system.MemoryUtil.NULL; -import static org.lwjgl.vulkan.EXTDebugUtils.*; -import static org.lwjgl.vulkan.VK13.*; - -public class VulkanTest extends SimpleApplication { - - private static final Logger LOG = Logger.getLogger(VulkanTest.class.getName()); - - private VkInstance instance; - private VkDevice device; - private VkQueue graphicsQueue, presentQueue; - private VkCommandBuffer commandBuffer; - private final UpdateFrameManager renderer = new UpdateFrameManager(2, n -> new Frame()); - private final Collection instanceExtensions = new ArrayList<>(); - private final Collection deviceExtensions = new ArrayList<>(); - private final List layers = new ArrayList<>(); - private final Collection deviceFilters = new ArrayList<>(); - private final VkDebugUtilsMessengerCallbackEXT debugCallback = new VulkanDebugCallback(Level.SEVERE); - private LwjglVulkanContext vulkanContext; - private Swapchain swapchain; - private LongBuffer imageViews; - private LongBuffer frameBuffers; - private long surface = NULL; - private long vertModule = NULL; - private long fragModule = NULL; - private long pipelineLayout = NULL; - private long renderPass = NULL; - private long pipeline = NULL; - private long debugMessenger = NULL; - private long commandPool = NULL; - private Semaphore imageAvailableSemaphore; - private Semaphore renderFinishedSemaphore; - private Fence inFlightFence; - - public static void main(String[] args) { - VulkanTest app = new VulkanTest(); - AppSettings settings = new AppSettings(true); - settings.setWidth(800); - settings.setHeight(800); - settings.setRenderer("CUSTOM" + LwjglVulkanContext.class.getName()); - app.setSettings(settings); - app.start(); - } - - @Override - public void simpleInitApp() { - vulkanContext = (LwjglVulkanContext)context; - assetManager.registerLoader(ShadercLoader.class, "glsl"); - flyCam.setDragToRotate(true); - - deviceExtensions.add(KHRSwapchain.VK_KHR_SWAPCHAIN_EXTENSION_NAME); - layers.add("VK_LAYER_KHRONOS_validation"); // basic validation layer from the Vulkan SDK - try (MemoryStack stack = MemoryStack.stackPush()) { - PointerBuffer layerPtrs = createLayerBuffer(stack, layers); - createInstance(stack, layerPtrs); - if (layerPtrs != null) { - createDebugMessenger(stack); - } - surface = createSurface(stack, instance); - PhysicalDevice physDevice = findPhysicalDevice(stack, instance, surface); - QueueFamilyIndices queues = populateQueueFamilies(stack, physDevice.getDevice()); - device = createLogicalDevice(stack, physDevice, queues, createLayerBuffer(stack, layers)); - graphicsQueue = getQueue(stack, device, queues.getGraphics(), 0); - presentQueue = getQueue(stack, device, queues.getPresents(), 0); - swapchain = new Swapchain(stack, new SwapchainSupport(stack, physDevice.getDevice(), surface), - device, queues, surface, vulkanContext.getWindowHandle()); - imageViews = swapchain.createImageViews(stack, device); - vertModule = createVertexModule(stack, device); - fragModule = createFragmentModule(stack, device); - pipelineLayout = createPipelineLayout(stack, device); - renderPass = createRenderPass(stack, device, swapchain); - pipeline = createGraphicsPipeline(stack, device, vertModule, fragModule, pipelineLayout, renderPass); - frameBuffers = createFrameBuffers(stack, device, swapchain, imageViews, renderPass); - commandPool = createCommandPool(stack, device, queues); - commandBuffer = createCommandBuffer(stack, device, commandPool); - createSyncObjects(device); - } - - } - - @Override - public void stop() { - Native.get().clear(); // clear all native objects - // destruction will later be handled by a NativeObjectManager - System.out.println("Destroy vulkan objects..."); - if (commandPool != NULL) { - System.out.println(" destroy command pool"); - vkDestroyCommandPool(device, commandPool, null); - } - if (frameBuffers != null) { - System.out.println(" destroy framebuffers (" + frameBuffers.limit() + ")"); - for (int i = 0; i < frameBuffers.limit(); i++) { - vkDestroyFramebuffer(device, frameBuffers.get(i), null); - } - } - if (vertModule != NULL) { - System.out.println(" destroy vertex module"); - vkDestroyShaderModule(device, vertModule, null); - } - if (fragModule != NULL) { - System.out.println(" destroy fragment module"); - vkDestroyShaderModule(device, fragModule, null); - } - if (renderPass != NULL) { - System.out.println(" destroy render pass"); - vkDestroyRenderPass(device, renderPass, null); - } - if (pipeline != NULL) { - System.out.println(" destroy graphics pipeline"); - vkDestroyPipeline(device, pipeline, null); - } - if (pipelineLayout != NULL) { - System.out.println(" destroy pipeline layout"); - vkDestroyPipelineLayout(device, pipelineLayout, null); - } - if (imageViews != null) { - System.out.println(" destroy image views"); - for (int i = 0; i < imageViews.limit(); i++) { - vkDestroyImageView(device, imageViews.get(i), null); - } - } - if (swapchain != null) { - System.out.println(" destroy swapchain"); - swapchain.destroy(device); - } - if (device != null) { - System.out.println(" destroy device"); - vkDeviceWaitIdle(device); - vkDestroyDevice(device, null); - } - if (debugMessenger != NULL) { - System.out.println(" destroy debug messenger"); - verifyExtensionMethod(instance, "vkDestroyDebugUtilsMessengerEXT"); - vkDestroyDebugUtilsMessengerEXT(instance, debugMessenger, null); - } - if (surface != NULL) { - System.out.println(" destroy surface"); - KHRSurface.vkDestroySurfaceKHR(instance, surface, null); - } - if (instance != null) { - System.out.println(" destroy instance"); - vkDestroyInstance(instance, null); - } - System.out.println("Vulkan destruction complete!"); - super.stop(); - } - - @Override - public void simpleUpdate(float tpf) { - renderer.update(tpf); - Native.get().flush(); // flush unused native objects - } - - private void createInstance(MemoryStack stack, PointerBuffer layers) { - VkApplicationInfo app = VkApplicationInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_APPLICATION_INFO) - .pApplicationName(stack.ASCII(context.getSettings().getTitle())) - .applicationVersion(VK_MAKE_VERSION(1, 0, 0)) - .pEngineName(stack.ASCII("JMonkeyEngine")) - .engineVersion(VK_MAKE_VERSION(3, 9, 0)) - .apiVersion(VK_API_VERSION_1_3); - VkInstanceCreateInfo create = VkInstanceCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO) - .pApplicationInfo(app); - addExtension(Objects.requireNonNull(GLFWVulkan.glfwGetRequiredInstanceExtensions())); - addExtension(stack, VK_EXT_DEBUG_UTILS_EXTENSION_NAME); - create.ppEnabledExtensionNames(gatherPointers(stack, instanceExtensions)); - if (layers != null) { - //create.pNext(createDebugger(stack, debugCallback)); // causing native crashes? - create.ppEnabledLayerNames(layers); - } - instance = new VkInstance(getPointer(stack, - ptr -> check(vkCreateInstance(create, null, ptr), "Failed to create instance.")), create); - } - - private PointerBuffer createLayerBuffer(MemoryStack stack, Collection layers) { - verifyValidationLayerSupport(stack); - return layers.isEmpty() ? null : toPointers(stack, layers.stream(), layers.size(), stack::UTF8); - } - - private void createDebugMessenger(MemoryStack stack) { - verifyExtensionMethod(instance, "vkCreateDebugUtilsMessengerEXT"); - debugMessenger = getLong(stack, ptr -> vkCreateDebugUtilsMessengerEXT(instance, createDebugger(stack, debugCallback), null, ptr)); - } - - private long createSurface(MemoryStack stack, VkInstance instance) { - return getLong(stack, ptr -> GLFWVulkan.glfwCreateWindowSurface(instance, vulkanContext.getWindowHandle(), null, ptr)); - } - - private PhysicalDevice findPhysicalDevice(MemoryStack stack, VkInstance instance, long surface) { - PointerBuffer devices = enumerateBuffer(stack, stack::mallocPointer, - (count, buffer) -> check(vkEnumeratePhysicalDevices(instance, count, buffer), "Failed to enumerate physical devices")); - PhysicalDevice device = null; - float score = 0f; - for (PhysicalDevice d : iteratePointers(devices, p -> new PhysicalDevice(new VkPhysicalDevice(p, instance)))) { - Float s = evaluateDevice(d, surface); - if (s != null && (device == null || s > score) && populateQueueFamilies(stack, d.getDevice()).isComplete()) { - device = d; - score = s; - } - } - if (device == null) { - throw new NullPointerException("Failed to find suitable GPU."); - } - return device; - } - - private Float evaluateDevice(PhysicalDevice device, long surface) { - try (MemoryStack stack = MemoryStack.stackPush()) { - System.out.println("evaluating device"); - VkExtensionProperties.Buffer exts = Objects.requireNonNull(enumerateBuffer(stack, n -> { - System.out.println("create extension properties buffer: " + n); - return VkExtensionProperties.malloc(n, stack); - }, - (count, buffer) -> vkEnumerateDeviceExtensionProperties(device.getDevice(), (ByteBuffer) null, count, buffer))); - if (!deviceExtensions.stream().allMatch(e -> { - for (VkExtensionProperties p : exts) { - if (p.extensionNameString().equals(e)) { - return true; - } - } - return false; - })) return null; - if (!new SwapchainSupport(stack, device.getDevice(), surface).isSupported()) { - return null; - } - if (deviceFilters.isEmpty()) { - return 0f; - } - float score = 0f; - for (DeviceFilter e : deviceFilters) { - //Float s = e.evaluateDevice(device.getDevice()); - Float s = 0f; - if (s == null) { - return null; - } - score += s; - } - return score; - } - } - - private QueueFamilyIndices populateQueueFamilies(MemoryStack stack, VkPhysicalDevice device) { - QueueFamilyIndices fams = new QueueFamilyIndices(); - VkQueueFamilyProperties.Buffer props = enumerateBuffer(stack, VkQueueFamilyProperties::malloc, - (count, buffer) -> vkGetPhysicalDeviceQueueFamilyProperties(device, count, buffer)); - int index = 0; - for (VkQueueFamilyProperties p : props) { - final int i = index; - if (isBitSet(p.queueFlags(), VK_QUEUE_GRAPHICS_BIT)) { - fams.setGraphics(i); - } - if (getInt(stack, result -> KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR(device, i, surface, result)) == VK_TRUE) { - fams.setPresents(i); - } - index++; - } - return fams; - } - - private VkDevice createLogicalDevice(MemoryStack stack, PhysicalDevice device, QueueFamilyIndices fams, PointerBuffer layers) { - // todo: register present queue here - VkDeviceQueueCreateInfo.Buffer queueCreate = VkDeviceQueueCreateInfo.calloc(fams.getLength(), stack); - for (int i = 0; i < fams.getLength(); i++) { - System.out.println("Queue family index: " + fams.getQueue(i)); - queueCreate.get(i).sType(VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO) - .queueFamilyIndex(fams.getQueue(i)) - .pQueuePriorities(stack.floats(1f)); - } - queueCreate.rewind(); - PointerBuffer exts = toPointers(stack, deviceExtensions.stream(), deviceExtensions.size(), stack::UTF8); - VkDeviceCreateInfo deviceCreate = VkDeviceCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO) - .pQueueCreateInfos(queueCreate) - .pEnabledFeatures(device.getFeatures()) - .ppEnabledExtensionNames(exts); - if (layers != null) { - deviceCreate.ppEnabledLayerNames(layers); - } - System.out.println("device: " + device.getDevice() + ", device_create: " + deviceCreate); - long devHandle = getPointer(stack, ptr -> check(vkCreateDevice(device.getDevice(), deviceCreate, null, ptr), - "Failed to create logical device.")); - return new VkDevice(devHandle, device.getDevice(), deviceCreate); - } - - private VkQueue getQueue(MemoryStack stack, VkDevice device, int queueIndex, int i) { - return new VkQueue(getPointer(stack, ptr -> vkGetDeviceQueue(device, queueIndex, i, ptr)), device); - } - - private long createVertexModule(MemoryStack stack, VkDevice device) { - return createShaderModule(stack, device, assetManager.loadAsset(ShadercLoader.key("Shaders/VulkanVertTest.glsl", ShaderType.Vertex))); - } - - private long createFragmentModule(MemoryStack stack, VkDevice device) { - return createShaderModule(stack, device, assetManager.loadAsset(ShadercLoader.key("Shaders/VulkanFragTest.glsl", ShaderType.Fragment))); - } - - private long createPipelineLayout(MemoryStack stack, VkDevice device) { - VkPipelineLayoutCreateInfo layoutCreate = VkPipelineLayoutCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO); - return getLong(stack, ptr -> check(vkCreatePipelineLayout(device, layoutCreate, null, ptr), - "Failed to create pipeline layout.")); - } - - private long createShaderModule(MemoryStack stack, VkDevice device, ByteBuffer code) { - VkShaderModuleCreateInfo create = VkShaderModuleCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) - .pCode(code); - return getLong(stack, ptr -> check(vkCreateShaderModule(device, create, null, ptr), - "Failed to create shader module.")); - } - - private long createGraphicsPipeline(MemoryStack stack, VkDevice device, long vert, long frag, long layout, long renderPass) { - VkPipelineShaderStageCreateInfo.Buffer stages = VkPipelineShaderStageCreateInfo.calloc(2, stack); - stages.get(0).sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) - .stage(VK_SHADER_STAGE_VERTEX_BIT) - .module(vert) - .pName(stack.UTF8("main")); // function initially called in the shader - stages.get(1).sType(VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO) - .stage(VK_SHADER_STAGE_FRAGMENT_BIT) - .module(frag) - .pName(stack.UTF8("main")); - VkPipelineDynamicStateCreateInfo dynamic = VkPipelineDynamicStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO) - .pDynamicStates(stack.ints(VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR)); - VkPipelineVertexInputStateCreateInfo vertInput = VkPipelineVertexInputStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO); - VkPipelineInputAssemblyStateCreateInfo assembly = VkPipelineInputAssemblyStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO) - .topology(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST) - .primitiveRestartEnable(false); - VkViewport.Buffer viewport = VkViewport.calloc(1, stack) - .x(0f).y(0f) - .width(swapchain.getExtent().width()).height(swapchain.getExtent().height()) - .minDepth(0f).maxDepth(1f); - VkRect2D.Buffer scissor = VkRect2D.calloc(1, stack) - .offset(VkOffset2D.calloc(stack).set(0, 0)) - .extent(swapchain.getExtent()); - VkPipelineViewportStateCreateInfo vpState = VkPipelineViewportStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO) - .pViewports(viewport) - .pScissors(scissor); - VkPipelineRasterizationStateCreateInfo raster = VkPipelineRasterizationStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO) - .depthClampEnable(false) - .rasterizerDiscardEnable(false) - .polygonMode(VK_POLYGON_MODE_FILL) - .lineWidth(1f) - .cullMode(VK_CULL_MODE_BACK_BIT) - .frontFace(VK_FRONT_FACE_CLOCKWISE) - .depthBiasEnable(false); - VkPipelineMultisampleStateCreateInfo multisample = VkPipelineMultisampleStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO) - .sampleShadingEnable(false) - .rasterizationSamples(VK_SAMPLE_COUNT_1_BIT); - // todo: configure depth and stencil buffers - VkPipelineColorBlendAttachmentState.Buffer blendAtt = VkPipelineColorBlendAttachmentState.calloc(1, stack) - .colorWriteMask(VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT) - .blendEnable(false) - .srcColorBlendFactor(VK_BLEND_FACTOR_ONE) - .dstColorBlendFactor(VK_BLEND_FACTOR_ZERO) - .colorBlendOp(VK_BLEND_OP_ADD) - .srcAlphaBlendFactor(VK_BLEND_FACTOR_ONE) - .srcAlphaBlendFactor(VK_BLEND_FACTOR_ZERO) - .alphaBlendOp(VK_BLEND_OP_ADD); - VkPipelineColorBlendStateCreateInfo blend = VkPipelineColorBlendStateCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO) - .logicOpEnable(false) - .logicOp(VK_LOGIC_OP_COPY) - .pAttachments(blendAtt); - VkGraphicsPipelineCreateInfo.Buffer pipeline = VkGraphicsPipelineCreateInfo.calloc(1, stack) - .sType(VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO) - .stageCount(2) - .pStages(stages) - .pVertexInputState(vertInput) - .pInputAssemblyState(assembly) - .pViewportState(vpState) - .pRasterizationState(raster) - .pMultisampleState(multisample) - .pColorBlendState(blend) - .pDynamicState(dynamic) - .layout(layout) - .renderPass(renderPass) - .subpass(0) - .basePipelineHandle(VK_NULL_HANDLE) - .basePipelineIndex(-1); - return getLong(stack, ptr -> check(vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, pipeline, null, ptr), - "Failed to create graphics pipeline.")); - } - - private long createRenderPass(MemoryStack stack, VkDevice device, Swapchain swapchain) { - VkAttachmentDescription.Buffer color = VkAttachmentDescription.calloc(1, stack) - .format(swapchain.getFormat()) - .samples(VK_SAMPLE_COUNT_1_BIT) - .loadOp(VK_ATTACHMENT_LOAD_OP_CLEAR) - .storeOp(VK_ATTACHMENT_STORE_OP_STORE) - .stencilLoadOp(VK_ATTACHMENT_LOAD_OP_DONT_CARE) - .stencilStoreOp(VK_ATTACHMENT_STORE_OP_DONT_CARE) - .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) - .finalLayout(KHRSwapchain.VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); - VkAttachmentReference.Buffer refs = VkAttachmentReference.calloc(1, stack) - .attachment(0) // references the attachment in the render pass attachment array - .layout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); - VkSubpassDescription.Buffer subpass = VkSubpassDescription.calloc(1, stack) - .pipelineBindPoint(VK_PIPELINE_BIND_POINT_GRAPHICS) - .colorAttachmentCount(1) - .pColorAttachments(refs); - VkSubpassDependency.Buffer dependency = VkSubpassDependency.calloc(1, stack) - .srcSubpass(VK_SUBPASS_EXTERNAL) // refers to the implicit pass before our subpass - .dstSubpass(0) // refers to our only subpass - .srcStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) - .srcAccessMask(0) - .dstStageMask(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) - .dstAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT); - VkRenderPassCreateInfo create = VkRenderPassCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO) - .pAttachments(color) // render pass attachment array - .pSubpasses(subpass) - .pDependencies(dependency); - return getLong(stack, ptr -> check(vkCreateRenderPass(device, create, null, ptr), - "Failed to create render pass.")); - } - - private LongBuffer createFrameBuffers(MemoryStack stack, VkDevice device, Swapchain swapchain, LongBuffer imageViews, long renderPass) { - LongBuffer buffers = BufferUtils.createLongBuffer(imageViews.limit()); - for (int i = 0; i < imageViews.limit(); i++) { - VkFramebufferCreateInfo create = VkFramebufferCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO) - .renderPass(renderPass) - .pAttachments(stack.longs(imageViews.get(i))) - .width(swapchain.getExtent().width()) - .height(swapchain.getExtent().height()) - .layers(1); - buffers.put(i, getLong(stack, ptr -> check(vkCreateFramebuffer(device, create, null, ptr), - "Failed to create framebuffer."))); - } - return buffers; - } - - private long createCommandPool(MemoryStack stack, VkDevice device, QueueFamilyIndices queues) { - VkCommandPoolCreateInfo create = VkCommandPoolCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO) - .flags(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT) - .queueFamilyIndex(queues.getGraphics()); - return getLong(stack, ptr -> check(vkCreateCommandPool(device, create, null, ptr), - "Failed to create command pool.")); - } - - private VkCommandBuffer createCommandBuffer(MemoryStack stack, VkDevice device, long commandPool) { - VkCommandBufferAllocateInfo allocate = VkCommandBufferAllocateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO) - .commandPool(commandPool) - .level(VK_COMMAND_BUFFER_LEVEL_PRIMARY) - .commandBufferCount(1); - return new VkCommandBuffer(getPointer(stack, ptr -> check(vkAllocateCommandBuffers(device, allocate, ptr), - "Failed to create command buffer.")), device); - } - - private void recordCommandBuffer(MemoryStack stack, int imageIndex) { - VkCommandBufferBeginInfo commandBegin = VkCommandBufferBeginInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO); - check(vkBeginCommandBuffer(commandBuffer, commandBegin), "Failed to begin recording command buffer"); - VkRenderPassBeginInfo passBegin = VkRenderPassBeginInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO) - .renderPass(renderPass) - .framebuffer(frameBuffers.get(imageIndex)) - .clearValueCount(1); - VkClearValue.Buffer clear = VkClearValue.calloc(1, stack); - clear.color().float32(stack.floats(0f, 0f, 0f, 1f)); - passBegin.pClearValues(clear); - passBegin.renderArea().offset(VkOffset2D.malloc(stack).set(0, 0)) - .extent(swapchain.getExtent()); - vkCmdBeginRenderPass(commandBuffer, passBegin, VK_SUBPASS_CONTENTS_INLINE); - vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline); - VkViewport.Buffer vp = VkViewport.calloc(1, stack) - .x(0f).y(0f).width(swapchain.getExtent().width()).height(swapchain.getExtent().height()) - .minDepth(0f).maxDepth(1f); - vkCmdSetViewport(commandBuffer, 0, vp); - VkRect2D.Buffer scissor = VkRect2D.calloc(1, stack) - .offset(VkOffset2D.malloc(stack).set(0, 0)) - .extent(swapchain.getExtent()); - vkCmdSetScissor(commandBuffer, 0, scissor); - vkCmdDraw(commandBuffer, 3, 1, 0, 0); - vkCmdEndRenderPass(commandBuffer); - check(vkEndCommandBuffer(commandBuffer), "Failed to record command buffer."); - } - - private void createSyncObjects(VkDevice device) { - //imageAvailableSemaphore = new Semaphore(device); - //renderFinishedSemaphore = new Semaphore(device); - //inFlightFence = new Fence(device, true); - } - - private void verifyValidationLayerSupport(MemoryStack stack) { - VkLayerProperties.Buffer supported = enumerateBuffer(stack, n -> VkLayerProperties.malloc(n, stack), - VK10::vkEnumerateInstanceLayerProperties); - Objects.requireNonNull(supported); - requestLoop: for (String r : layers) { - for (VkLayerProperties l : supported) { - if (r.equals(l.layerNameString())) { - continue requestLoop; - } - } - throw new NullPointerException("Validation layer " + r + " is not available."); - } - } - - private VkDebugUtilsMessengerCreateInfoEXT createDebugger(MemoryStack stack, VkDebugUtilsMessengerCallbackEXT callback) { - VkDebugUtilsMessengerCreateInfoEXT create = VkDebugUtilsMessengerCreateInfoEXT.calloc(stack) - .sType(VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) - .messageSeverity(VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT - | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) - .messageType(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT); - if (callback != null) { - create.pfnUserCallback(callback); - } - return create; - } - - private void addExtension(MemoryStack stack, String ext) { - instanceExtensions.add(stack.mallocPointer(1).put(stack.UTF8(ext)).rewind()); - } - - private void addExtension(PointerBuffer ext) { - instanceExtensions.add(ext); - } - - private class Frame implements Consumer { - - private final Semaphore imageAvailable = null; - private final Semaphore renderFinished = null; - private final Fence inFlight = null; - - public Frame() {} - - @Override - public void accept(Float tpf) { - try (MemoryStack stack = MemoryStack.stackPush()) { - System.out.println("start frame render commands"); - inFlight.blockThenReset(5000); - int image = getInt(stack, i -> check(KHRSwapchain.vkAcquireNextImageKHR( - device, swapchain.getSwapchain(), TimeUnit.SECONDS.toNanos(5), imageAvailable.getId(), VK_NULL_HANDLE, i), - "Failed to acquire next swapchain image.")); // forces rendering to wait for image availability - vkResetCommandBuffer(commandBuffer, 0); - recordCommandBuffer(stack, image); - VkSubmitInfo.Buffer submit = VkSubmitInfo.calloc(1, stack) - .sType(VK_STRUCTURE_TYPE_SUBMIT_INFO) - .waitSemaphoreCount(1) - .pWaitSemaphores(imageAvailableSemaphore.toBuffer(stack)) // waits until the image has been acquired - .pWaitDstStageMask(stack.ints(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)) - .pCommandBuffers(stack.pointers(commandBuffer)) - .pSignalSemaphores(stack.longs(renderFinished.getId())); // forces the present operation to wait - check(vkQueueSubmit(graphicsQueue, submit, inFlightFence.getId()), "Failed to submit commands to graphics queue."); - VkPresentInfoKHR present = VkPresentInfoKHR.calloc(stack) - .sType(KHRSwapchain.VK_STRUCTURE_TYPE_PRESENT_INFO_KHR) - .pWaitSemaphores(renderFinishedSemaphore.toBuffer(stack)) // waits until rendering has completed - .swapchainCount(1) - .pSwapchains(stack.longs(swapchain.getSwapchain())) - .pImageIndices(stack.ints(image)); - check(KHRSwapchain.vkQueuePresentKHR(presentQueue, present), "Failed to present image to swapchain"); - System.out.println("end frame render commands"); - BufferUtils bufutils; - } - } - - private void recordCommandBuffer(MemoryStack stack, int imageIndex) { - VkCommandBufferBeginInfo commandBegin = VkCommandBufferBeginInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO); - check(vkBeginCommandBuffer(commandBuffer, commandBegin), "Failed to begin recording command buffer"); - VkRenderPassBeginInfo passBegin = VkRenderPassBeginInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO) - .renderPass(renderPass) - .framebuffer(frameBuffers.get(imageIndex)) - .clearValueCount(1); - - VkClearValue.Buffer clear = VkClearValue.calloc(1, stack); - clear.color().float32(stack.floats(0f, 0f, 0f, 1f)); - passBegin.pClearValues(clear); - passBegin.renderArea().offset(VkOffset2D.malloc(stack).set(0, 0)) - .extent(swapchain.getExtent()); - vkCmdBeginRenderPass(commandBuffer, passBegin, VK_SUBPASS_CONTENTS_INLINE); - vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline); - VkViewport.Buffer vp = VkViewport.calloc(1, stack) - .x(0f).y(0f).width(swapchain.getExtent().width()).height(swapchain.getExtent().height()) - .minDepth(0f).maxDepth(1f); - vkCmdSetViewport(commandBuffer, 0, vp); - VkRect2D.Buffer scissor = VkRect2D.calloc(1, stack) - .offset(VkOffset2D.malloc(stack).set(0, 0)) - .extent(swapchain.getExtent()); - vkCmdSetScissor(commandBuffer, 0, scissor); - vkCmdDraw(commandBuffer, 3, 1, 0, 0); - vkCmdEndRenderPass(commandBuffer); - check(vkEndCommandBuffer(commandBuffer), "Failed to record command buffer."); - } - - } - - private static class QueueFamilyIndices { - - public static final int GRAPHICS = 0, PRESENTS = 1; - private final Integer[] queues = new Integer[2]; - - public void setGraphics(Integer graphics) { - queues[GRAPHICS] = graphics; - } - - public void setPresents(Integer presents) { - queues[PRESENTS] = presents; - } - - public Integer[] getQueues() { - return queues; - } - - public Integer getQueue(int i) { - return queues[i]; - } - - public Integer getGraphics() { - return queues[GRAPHICS]; - } - - public Integer getPresents() { - return queues[PRESENTS]; - } - - public int getLength() { - return queues.length; - } - - public boolean isComplete() { - return Arrays.stream(queues).allMatch(Objects::nonNull); - } - - public boolean requiresConcurrentSharing() { - return !Objects.equals(getGraphics(), getPresents()); - } - - private IntBuffer toBuffer(MemoryStack stack) { - if (!isComplete()) { - throw new IllegalStateException("Not all queues found in this context."); - } - IntBuffer buf = stack.mallocInt(queues.length); - for (int i = 0; i < queues.length; i++) { - buf.put(i, queues[i]); - } - return buf; - } - - } - - private static class PhysicalDevice { - - private final VkPhysicalDevice device; - private final VkPhysicalDeviceProperties props; - private final VkPhysicalDeviceFeatures features; - - private PhysicalDevice(VkPhysicalDevice device) { - props = VkPhysicalDeviceProperties.create(); - features = VkPhysicalDeviceFeatures.create(); - vkGetPhysicalDeviceProperties(device, props); - vkGetPhysicalDeviceFeatures(device, features); - this.device = device; - } - - public VkPhysicalDevice getDevice() { - return device; - } - - public VkPhysicalDeviceProperties getProps() { - return props; - } - - public VkPhysicalDeviceFeatures getFeatures() { - return features; - } - - } - - private static class SwapchainSupport { - - private final VkSurfaceCapabilitiesKHR caps; - private final VkSurfaceFormatKHR.Buffer formats; - private final IntBuffer modes; - - public SwapchainSupport(MemoryStack stack, VkPhysicalDevice device, long surface) { - caps = VkSurfaceCapabilitiesKHR.malloc(stack); - KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, surface, caps); - formats = enumerateBuffer(stack, n -> VkSurfaceFormatKHR.malloc(n, stack), - (count, buffer) -> KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, count, buffer)); - modes = enumerateBuffer(stack, stack::mallocInt, - (count, buffer) -> KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, count, buffer)); - } - - public VkSurfaceFormatKHR selectFormat() { - return formats.stream() - .filter(f -> f.format() == VK_FORMAT_B8G8R8A8_SRGB) - .filter(f -> f.colorSpace() == KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) - .findAny().orElse(formats.get(0)); - } - - public int selectMode() { - for (int i = 0; i < modes.limit(); i++) { - if (modes.get(i) == KHRSurface.VK_PRESENT_MODE_MAILBOX_KHR) { - return modes.get(i); - } - } - return KHRSurface.VK_PRESENT_MODE_FIFO_KHR; - } - - public VkExtent2D selectExtent(MemoryStack stack, long window) { - if (caps.currentExtent().width() != UINT32_MAX) { - return caps.currentExtent(); - } - IntBuffer width = stack.mallocInt(1); - IntBuffer height = stack.mallocInt(1); - GLFW.glfwGetFramebufferSize(window, width, height); - VkExtent2D ext = VkExtent2D.malloc(stack); - ext.width(Math.min(Math.max(width.get(0), caps.minImageExtent().width()), caps.maxImageExtent().width())); - ext.height(Math.min(Math.max(width.get(0), caps.minImageExtent().height()), caps.maxImageExtent().height())); - return ext; - } - - public int selectImageCount() { - int n = caps.minImageCount() + 1; - return caps.minImageCount() > 0 ? Math.min(n, caps.minImageCount()) : n; - } - - public boolean isSupported() { - return formats != null && modes != null; - } - - public VkSurfaceCapabilitiesKHR getCaps() { - return caps; - } - - public VkSurfaceFormatKHR.Buffer getFormats() { - return formats; - } - - public IntBuffer getModes() { - return modes; - } - - } - - private static class Swapchain { - - private final long swapchain; - private final LongBuffer images; - private final int format; - private final VkExtent2D extent; - - @SuppressWarnings("resource") // todo: watch for memory leaks - public Swapchain(MemoryStack stack, SwapchainSupport support, VkDevice device, QueueFamilyIndices queues, long surface, long window) { - VkSurfaceFormatKHR fmt = support.selectFormat(); - format = fmt.format(); - extent = support.selectExtent(stack, window); - VkSwapchainCreateInfoKHR create = VkSwapchainCreateInfoKHR.calloc(stack) - .sType(KHRSwapchain.VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR) - .surface(surface) - .minImageCount(support.selectImageCount()) - .imageFormat(format) - .imageColorSpace(fmt.colorSpace()) - .imageExtent(extent) - .imageArrayLayers(1) // this will probably never change for games - .imageUsage(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) // rendering directly to the swapchain images - .preTransform(support.getCaps().currentTransform()) - .compositeAlpha(KHRSurface.VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) // blending with other windows - .presentMode(support.selectMode()) - .clipped(true) - .oldSwapchain(VK_NULL_HANDLE); - if (queues.requiresConcurrentSharing()) { // different graphics and present queues - create.imageSharingMode(VK_SHARING_MODE_CONCURRENT) - .queueFamilyIndexCount(queues.getLength()) - .pQueueFamilyIndices(queues.toBuffer(stack)); - } else { // use a faster sharing mode - create.imageSharingMode(VK_SHARING_MODE_EXCLUSIVE); - } - swapchain = getLong(stack, ptr -> check(KHRSwapchain.vkCreateSwapchainKHR(device, create, null, ptr), - "Failed to create swapchain.")); - images = enumerateBuffer(stack, BufferUtils::createLongBuffer, - (count, buffer) -> KHRSwapchain.vkGetSwapchainImagesKHR(device, swapchain, count, buffer)); - } - - public LongBuffer createImageViews(MemoryStack stack, VkDevice device) { - LongBuffer views = BufferUtils.createLongBuffer(images.limit()); - for (int i = 0; i < images.limit(); i++) { - VkImageViewCreateInfo create = VkImageViewCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) - .image(images.get(i)) - .viewType(VK_IMAGE_VIEW_TYPE_2D) - .format(format); - create.components().r(VK_COMPONENT_SWIZZLE_IDENTITY) - .g(VK_COMPONENT_SWIZZLE_IDENTITY) - .b(VK_COMPONENT_SWIZZLE_IDENTITY) - .a(VK_COMPONENT_SWIZZLE_IDENTITY); - create.subresourceRange().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) - .baseMipLevel(0) - .levelCount(1) - .baseArrayLayer(0) - .layerCount(1); - views.put(getLong(stack, ptr -> check(vkCreateImageView(device, create, null, ptr), - "Failed to create image view."))); - } - views.rewind(); - return views; - } - - public void destroy(VkDevice device) { - KHRSwapchain.vkDestroySwapchainKHR(device, swapchain, null); - } - - public long getSwapchain() { - return swapchain; - } - - public LongBuffer getImages() { - return images; - } - - public int getFormat() { - return format; - } - - public VkExtent2D getExtent() { - return extent; - } - - } - - private static class VulkanDebugCallback extends VkDebugUtilsMessengerCallbackEXT { - - private Level exceptionThreshold; - - public VulkanDebugCallback(Level exceptionThreshold) { - this.exceptionThreshold = exceptionThreshold; - } - - @Override - public int invoke(int messageSeverity, int messageTypes, long pCallbackData, long pUserData) { - try (VkDebugUtilsMessengerCallbackDataEXT data = VkDebugUtilsMessengerCallbackDataEXT.create(pCallbackData)) { - //LOG.log(getLoggingLevel(messageSeverity), data.pMessageString()); - Level lvl = getLoggingLevel(messageSeverity); - if (exceptionThreshold != null && lvl.intValue() >= exceptionThreshold.intValue()) { - throw new RuntimeException(lvl.getName() + ": " + data.pMessageString()); - } else { - System.err.println(lvl.getName() + " " + data.pMessageString()); - } - } - return VK_FALSE; // always return false, true is only really used for testing validation layers - } - - public Level getLoggingLevel(int messageSeverity) { - switch (messageSeverity) { - case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: - return Level.SEVERE; - case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: - return Level.WARNING; - case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: - return Level.INFO; - case EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: - return Level.FINE; - default: throw new UnsupportedOperationException("Unsupported severity bit: " - + Integer.numberOfTrailingZeros(Integer.highestOneBit(messageSeverity))); - } - } - - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java index a1b638fbec..bfc08c3095 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java @@ -11,7 +11,11 @@ public class PersistentBuffer extends VulkanBuffer { private final long address; - public PersistentBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { + public PersistentBuffer(LogicalDevice device, MemorySize size, Flag usage, boolean concurrent) { + this(device, size, usage, Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), concurrent); + } + + public PersistentBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { super(device, size, usage, mem, concurrent); try (MemoryStack stack = MemoryStack.stackPush()) { address = memory.map(stack, 0, size.getBytes(), 0).get(0); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java index 89e413e35e..a8cd7e58b3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java @@ -19,7 +19,7 @@ public BufferDescriptor(GpuBuffer buffer, long offset, long range) { } public void fillDescriptorInfo(VkDescriptorBufferInfo info) { - info.buffer(buffer.getNativeObject()).offset(offset).range(range); + info.buffer(buffer.getId()).offset(offset).range(range); } public GpuBuffer getBuffer() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index 92e78fb394..f1ec5c8493 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -35,7 +35,7 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { try (MemoryStack stack = MemoryStack.stackPush()) { LongBuffer setBuf = stack.mallocLong(uniformSets.size()); for (UniformSet set : uniformSets) { - setBuf.put(set.acquireSet(pipeline.getDevice(), pool, availableLayouts).getNativeObject()); + setBuf.put(set.update(pipeline.getDevice(), pool, availableLayouts).getNativeObject()); } setBuf.flip(); vkCmdBindDescriptorSets(cmd.getBuffer(), pipeline.getBindPoint().getVkEnum(), diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java index b84e320c42..95c41abec8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -13,8 +13,8 @@ public class UniformSet implements Iterable { private final Map frames = new HashMap<>(); public UniformSet(Uniform... uniforms) { - this.uniforms = uniforms; - this.currentFrame = new FrameIndex(this.uniforms); + this.uniforms = Objects.requireNonNull(uniforms); + this.currentFrame = new FrameIndex(this.uniforms, false); // ensure duplicate binding indices are not present BitSet bindings = new BitSet(); for (Uniform u : uniforms) { @@ -26,9 +26,12 @@ public UniformSet(Uniform... uniforms) { } } - public DescriptorSet acquireSet(LogicalDevice device, DescriptorPool pool, List availableLayouts) { + public DescriptorSet update(LogicalDevice device, DescriptorPool pool, List availableLayouts) { for (Uniform u : uniforms) { u.update(device); + if (u.getValue() == null) { + throw new NullPointerException("Uniform \"" + u.getName() + "\" contains no value."); + } } currentFrame.update(uniforms); FrameData data = frames.get(currentFrame); @@ -84,12 +87,12 @@ public SupportedSet get(DescriptorPool pool, List available private boolean isLayoutCompatible(DescriptorSetLayout layout) { for (Uniform u : uniforms) { for (SetLayoutBinding b : layout.getBindings()) { - if (!u.isBindingCompatible(b)) { - return false; + if (u.isBindingCompatible(b)) { + return true; } } } - return true; + return false; } } @@ -101,9 +104,11 @@ private static class FrameIndex { private final int[] versions; - private FrameIndex(Uniform[] uniforms) { + private FrameIndex(Uniform[] uniforms, boolean update) { versions = new int[uniforms.length]; - update(uniforms); + if (update) { + update(uniforms); + } } private FrameIndex(FrameIndex index) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index 3205ed22a5..73cb6e401a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -16,7 +16,7 @@ public class BufferUniform extends AbstractUniform { private static final String BUFFER_NULL_ERROR = "Uniform buffer is null."; private VersionedResource resource; - private boolean updateFlag = true; + private long variant = 0L; public BufferUniform(String name, Descriptor type, int bindingIndex, Flag stages) { super(name, type, bindingIndex, stages); @@ -34,16 +34,10 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { .dstArrayElement(0) .dstBinding(bindingIndex) .descriptorType(type.getVkEnum()); - updateFlag = false; } @Override - public boolean update(LogicalDevice device) { - if (resource == null) { - throw new NullPointerException(BUFFER_NULL_ERROR); - } - return updateFlag; - } + public void update(LogicalDevice device) {} @Override public boolean isBindingCompatible(SetLayoutBinding binding) { @@ -55,7 +49,7 @@ public boolean isBindingCompatible(SetLayoutBinding binding) { public void setValue(VersionedResource value) { if (this.resource != value) { this.resource = value; - updateFlag = true; + variant++; } } @@ -64,4 +58,9 @@ public VersionedResource getValue() { return resource; } + @Override + public long getVariant() { + return variant; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index 59cfa553b9..aac9acc69f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -3,6 +3,7 @@ import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.frames.VersionedResource; import com.jme3.vulkan.images.Image; import com.jme3.vulkan.images.Texture; import com.jme3.vulkan.shader.ShaderStage; @@ -14,8 +15,8 @@ public class TextureUniform extends AbstractUniform { private final Image.Layout layout; - private Texture texture; - private boolean updateFlag = true; + private VersionedResource texture; + private long variant = 0L; public TextureUniform(String name, Image.Layout layout, int bindingIndex, Flag stages) { super(name, Descriptor.CombinedImageSampler, bindingIndex, stages); @@ -24,9 +25,10 @@ public TextureUniform(String name, Image.Layout layout, int bindingIndex, Flag device) { - if (texture == null) { - throw new NullPointerException("Uniform texture is null."); - } - return updateFlag; - } + public void update(LogicalDevice device) {} @Override - public void setValue(Texture value) { + public void setValue(VersionedResource value) { if (this.texture != value) { this.texture = value; - updateFlag = true; + variant++; } } @Override - public Texture getValue() { + public VersionedResource getValue() { return texture; } + @Override + public long getVariant() { + return variant; + } + @Override public boolean isBindingCompatible(SetLayoutBinding binding) { return type == binding.getType() diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java index 576c69eb59..746edc65c1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java @@ -20,18 +20,7 @@ public Mesh() { } public void bindVertexBuffers(CommandBuffer cmd) { - try (MemoryStack stack = MemoryStack.stackPush()) { - LongBuffer vertBufs = stack.mallocLong(vertexBuffers.size()); - LongBuffer offsets = stack.mallocLong(vertexBuffers.size()); - for (GpuBuffer v : vertexBuffers) { - vertBufs.put(v.getNativeObject()); - offsets.put(0); - } - vertBufs.flip(); - offsets.flip(); - vkCmdBindVertexBuffers(cmd.getBuffer(), 0, vertBufs, offsets); - vkCmdBindIndexBuffer(cmd.getBuffer(), indexBuffer.getNativeObject(), 0, VK_INDEX_TYPE_UINT32); - } + } public void draw(CommandBuffer cmd) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java index 34c497901b..3db4cd33c7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java @@ -5,11 +5,12 @@ import java.nio.IntBuffer; import java.nio.LongBuffer; +import java.util.Objects; public class SyncGroup { - public static final SyncGroup ASYNC = new SyncGroup(); private static final Semaphore[] EMPTY = new Semaphore[0]; + public static final SyncGroup ASYNC = new SyncGroup(); private static Semaphore[] toArray(Semaphore s) { return s != null ? new Semaphore[] {s} : EMPTY; @@ -56,8 +57,8 @@ public SyncGroup(Semaphore[] waits, Semaphore signal, Fence fence) { } public SyncGroup(Semaphore[] waits, Semaphore[] signals, Fence fence) { - this.waits = waits; - this.signals = signals; + this.waits = Objects.requireNonNull(waits); + this.signals = Objects.requireNonNull(signals); this.fence = fence; } @@ -96,7 +97,7 @@ public LongBuffer toWaitBuffer(MemoryStack stack) { public IntBuffer toDstStageBuffer(MemoryStack stack) { IntBuffer buf = stack.mallocInt(waits.length); - for (Semaphore s : signals) { + for (Semaphore s : waits) { buf.put(s.getDstStageMask().bits()); } buf.flip(); From 42a845a490d80c20b35a02ea1731854a5052c140 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sun, 24 Aug 2025 14:10:00 -0400 Subject: [PATCH 40/80] fix warning on DescriptorSet destruction for DescriptorPools not created with a certain flag --- .../vulkan/descriptors/DescriptorPool.java | 37 ++++++++++++++++++- .../vulkan/descriptors/DescriptorSet.java | 2 +- .../main/java/com/jme3/vulkan/util/Flag.java | 4 ++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java index 79de4a574e..170a87c959 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java @@ -4,6 +4,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -14,17 +15,41 @@ public class DescriptorPool implements Native { + public enum Create implements Flag { + + FreeDescriptorSets(VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT); + + private final int vkEnum; + + Create(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int bits() { + return vkEnum; + } + + } + private final LogicalDevice device; private final NativeReference ref; + private final Flag flags; private final long id; public DescriptorPool(LogicalDevice device, int sets, PoolSize... sizes) { + this(device, sets, Flag.none(), sizes); + } + + public DescriptorPool(LogicalDevice device, int sets, Flag flags, PoolSize... sizes) { this.device = device; + this.flags = flags; try (MemoryStack stack = MemoryStack.stackPush()) { VkDescriptorPoolCreateInfo create = VkDescriptorPoolCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO) .pPoolSizes(PoolSize.aggregate(stack, sizes)) - .maxSets(sets); + .maxSets(sets) + .flags(this.flags.bits()); LongBuffer idBuf = stack.mallocLong(1); check(vkCreateDescriptorPool(device.getNativeObject(), create, null, idBuf), "Failed to create descriptor pool."); @@ -52,6 +77,12 @@ public NativeReference getNativeReference() { return ref; } + /** + * Allocates a {@link DescriptorSet} for each {@link DescriptorSetLayout} provided. + * + * @param layouts layouts to allocate DescriptorSets with + * @return allocated DescriptorSets, in the same order as {@code layouts} + */ public DescriptorSet[] allocateSets(DescriptorSetLayout... layouts) { assert layouts.length > 0 : "Must specify at least one set layout."; // layouts length = number of descriptor sets created @@ -75,4 +106,8 @@ public void reset() { vkResetDescriptorPool(device.getNativeObject(), id, 0); } + public boolean isFreeSetsEnabled() { + return flags.contains(Create.FreeDescriptorSets); + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java index 3e3805edd6..d73448098b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -26,7 +26,7 @@ public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSet @Override public Runnable createNativeDestroyer() { return () -> { - try (MemoryStack stack = MemoryStack.stackPush()) { + if (pool.isFreeSetsEnabled()) try (MemoryStack stack = MemoryStack.stackPush()) { vkFreeDescriptorSets(device.getNativeObject(), pool.getNativeObject(), stack.longs(object)); } }; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java index bbcc3a279b..4482f0498b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java @@ -41,6 +41,10 @@ static Flag of(int bits) { return new FlagImpl<>(bits); } + static Flag none() { + return of(0); + } + @SafeVarargs static Flag of(Flag... flags) { return new FlagImpl<>(flags); From ba4ea7fde1ad6dddaefe9e6c3e2dbfbba8cf9cb9 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sun, 24 Aug 2025 15:32:36 -0400 Subject: [PATCH 41/80] use Flag for CommandPool creation instead of booleans --- .../com/jme3/vulkan/commands/CommandPool.java | 48 ++++++++++++------- .../vulkan/descriptors/DescriptorPool.java | 4 +- .../vulkan/descriptors/DescriptorSet.java | 6 ++- .../jme3/vulkan/devices/LogicalDevice.java | 16 +++---- 4 files changed, 42 insertions(+), 32 deletions(-) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java index 127ea18ca1..6adb7e4a61 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java @@ -3,6 +3,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkCommandPoolCreateInfo; @@ -13,22 +14,41 @@ public class CommandPool implements Native { + public enum Create implements Flag { + + Transient(VK_COMMAND_POOL_CREATE_TRANSIENT_BIT), + ResetCommandBuffer(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT), + Protected(VK_COMMAND_POOL_CREATE_PROTECTED_BIT); + + private final int vkEnum; + + Create(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int bits() { + return vkEnum; + } + + } + private final Queue queue; private final NativeReference ref; - private final boolean shortLived, reusable, protect; + private final Flag flags; private long id; - public CommandPool(Queue queue, boolean shortLived, boolean reusable, boolean protect) { + public CommandPool(Queue queue) { + this(queue, Create.ResetCommandBuffer); + } + + public CommandPool(Queue queue, Flag flags) { this.queue = queue; - this.shortLived = shortLived; - this.reusable = reusable; - this.protect = protect; + this.flags = flags; try (MemoryStack stack = MemoryStack.stackPush()) { VkCommandPoolCreateInfo create = VkCommandPoolCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO) - .flags((shortLived ? VK_COMMAND_POOL_CREATE_TRANSIENT_BIT : 0) - | (reusable ? VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT : 0) - | (protect ? VK_COMMAND_POOL_CREATE_PROTECTED_BIT : 0)) + .flags(this.flags.bits()) .queueFamilyIndex(queue.getFamilyIndex()); LongBuffer idBuf = stack.mallocLong(1); check(vkCreateCommandPool(queue.getDevice().getNativeObject(), create, null, idBuf), @@ -77,16 +97,8 @@ public Queue getQueue() { return queue; } - public boolean isShortLived() { - return shortLived; - } - - public boolean isReusable() { - return reusable; - } - - public boolean isProtected() { - return protect; + public Flag getFlags() { + return flags; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java index 170a87c959..9536329896 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java @@ -106,8 +106,8 @@ public void reset() { vkResetDescriptorPool(device.getNativeObject(), id, 0); } - public boolean isFreeSetsEnabled() { - return flags.contains(Create.FreeDescriptorSets); + public Flag getFlags() { + return flags; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java index d73448098b..ff41f587a6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java @@ -26,8 +26,10 @@ public DescriptorSet(LogicalDevice device, DescriptorPool pool, DescriptorSet @Override public Runnable createNativeDestroyer() { return () -> { - if (pool.isFreeSetsEnabled()) try (MemoryStack stack = MemoryStack.stackPush()) { - vkFreeDescriptorSets(device.getNativeObject(), pool.getNativeObject(), stack.longs(object)); + if (pool.getFlags().contains(DescriptorPool.Create.FreeDescriptorSets)) { + try (MemoryStack stack = MemoryStack.stackPush()) { + vkFreeDescriptorSets(device.getNativeObject(), pool.getNativeObject(), stack.longs(object)); + } } }; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java index a91e6bd621..fa453884fe 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java @@ -5,6 +5,7 @@ import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.commands.Queue; +import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -53,30 +54,25 @@ public VkPhysicalDeviceFeatures getEnabledFeatures() { } public CommandPool getShortTermPool(Queue queue) { - return getPool(queue, true, false); + return getPool(queue, CommandPool.Create.Transient); } public CommandPool getLongTermPool(Queue queue) { - return getPool(queue, false, true); + return getPool(queue, CommandPool.Create.ResetCommandBuffer); } - public CommandPool getPool(Queue queue, boolean shortLived, boolean reusable) { - return getPool(queue, shortLived, reusable, false); - } - - public CommandPool getPool(Queue queue, boolean shortLived, boolean reusable, boolean protect) { + public CommandPool getPool(Queue queue, Flag flags) { if (queue.getDevice() != this) { throw new IllegalArgumentException("Queue must belong to this device."); } Collection p = pools.computeIfAbsent(Thread.currentThread(), t -> new ArrayList<>()); for (CommandPool pool : p) { - if (pool.getQueue() == queue && pool.isShortLived() == shortLived - && pool.isReusable() == reusable && pool.isProtected() == protect) { + if (pool.getQueue() == queue && pool.getFlags().contains(flags)) { return pool; } } - CommandPool pool = new CommandPool(queue, shortLived, reusable, protect); + CommandPool pool = new CommandPool(queue, flags); p.add(pool); return pool; } From 56a0a42eddd319e2517cab01a6b29ad6f93abd22 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 30 Aug 2025 07:53:29 -0400 Subject: [PATCH 42/80] prototype meshes; improve usability; abstract images and buffers in preparation for opengl compatibility --- VulkanDesign.txt | 87 +++++ .../vulkan/AttributeBufferBenchmark.java | 78 ++++ .../jme3test/vulkan/VulkanHelperTest.java | 107 +++--- .../src/main/java/com/jme3/vulkan/Format.java | 362 ++++++++++++++++++ .../java/com/jme3/vulkan/SharingMode.java | 27 ++ .../main/java/com/jme3/vulkan/Swizzle.java | 28 ++ .../vulkan/buffers/BasicVulkanBuffer.java | 95 +++++ .../com/jme3/vulkan/buffers/BufferMode.java | 31 ++ .../com/jme3/vulkan/buffers/GpuBuffer.java | 80 ++-- .../jme3/vulkan/buffers/PersistentBuffer.java | 40 +- .../jme3/vulkan/buffers/StageableBuffer.java | 14 +- .../com/jme3/vulkan/buffers/StaticBuffer.java | 5 +- .../jme3/vulkan/buffers/VersionedBuffer.java | 13 +- .../com/jme3/vulkan/buffers/VulkanBuffer.java | 106 +---- .../vulkan/descriptors/DescriptorPool.java | 2 +- .../vulkan/descriptors/ImageDescriptor.java | 15 +- .../devices/AbstractPhysicalDevice.java | 15 +- .../jme3/vulkan/devices/PhysicalDevice.java | 9 +- .../jme3/vulkan/frames/VersionedResource.java | 2 +- .../java/com/jme3/vulkan/images/GpuImage.java | 222 +++++++---- .../java/com/jme3/vulkan/images/Image.java | 195 +--------- .../com/jme3/vulkan/images/ImageUsage.java | 8 +- .../com/jme3/vulkan/images/ImageView.java | 164 ++++++-- .../com/jme3/vulkan/images/VulkanImage.java | 186 +++++++++ .../jme3/vulkan/images/VulkanImageLoader.java | 60 +-- .../vulkan/material/SetAllocationInfo.java | 23 -- .../jme3/vulkan/material/TestMaterial.java | 4 +- .../material/uniforms/TextureUniform.java | 10 +- .../{MemoryFlag.java => MemoryProp.java} | 4 +- .../com/jme3/vulkan/memory/MemoryRegion.java | 33 +- .../jme3/vulkan/mesh/AttributeModifier.java | 161 ++++++++ .../com/jme3/vulkan/mesh/FlexibleMesh.java | 35 ++ .../java/com/jme3/vulkan/mesh/InputRate.java | 20 + .../main/java/com/jme3/vulkan/mesh/Mesh.java | 25 +- .../jme3/vulkan/mesh/NewMeshDescription.java | 10 + .../{ => mesh}/TestCaseMeshDescription.java | 40 +- .../com/jme3/vulkan/mesh/VertexAttribute.java | 45 +++ .../com/jme3/vulkan/mesh/VertexBinding.java | 73 ++++ .../java/com/jme3/vulkan/pass/Attachment.java | 61 +-- .../jme3/vulkan/pass/AttachmentReference.java | 12 +- .../java/com/jme3/vulkan/pass/RenderPass.java | 6 +- .../com/jme3/vulkan/surface/Swapchain.java | 111 ++++-- .../main/java/com/jme3/vulkan/sync/Fence.java | 4 + .../java/com/jme3/vulkan/sync/Semaphore.java | 8 + .../java/com/jme3/vulkan/sync/SyncGroup.java | 11 +- .../main/java/com/jme3/vulkan/util/Flag.java | 8 +- .../java/com/jme3/vulkan/util/LibEnum.java | 11 + 47 files changed, 1951 insertions(+), 715 deletions(-) create mode 100644 VulkanDesign.txt create mode 100644 jme3-examples/src/main/java/jme3test/vulkan/AttributeBufferBenchmark.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Format.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/SharingMode.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swizzle.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferMode.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/SetAllocationInfo.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/{MemoryFlag.java => MemoryProp.java} (86%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/FlexibleMesh.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NewMeshDescription.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{ => mesh}/TestCaseMeshDescription.java (61%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/LibEnum.java diff --git a/VulkanDesign.txt b/VulkanDesign.txt new file mode 100644 index 0000000000..563d311db7 --- /dev/null +++ b/VulkanDesign.txt @@ -0,0 +1,87 @@ +Some resources require copies per concurrent frame. There are some unresolved problems with implementing this: + + 1. UniformSets need to have a DescriptorSet per concurrent frame, but only if at least one uniform requires resource copies. + 2. Resources need to know the current frame's index so the correct copy is used. + 3. Not all resources need to have copies per frame. This should be configurable by this user even after resources have been created (either by changing a state or replacing the resource entirely). + +There are a couple different levels at which the copy split can happen: + + 1. Inside GpuBuffer and Image implementations (very low-level). + 2. Each geometry has materials and meshes for each frame. + +I like solution 1 because it gives more control over what resources are copied per-frame (neatly solving problem 3). If a mesh contains a buffer that doesn't need copies and another that does, solution 2 would require both buffers have copies. Using the buffer copy feature, users can swap out buffers with any other implementation. + +Solution 1 could solve problem 2 by either setting the current frame when the frame begins, or pass as an argument for buffer functions. I lean toward setting at the start of the frame, because it would simplify the API. Each resource could have a method for that, and it is up to the implementors what to do with the current frame. The only problem here is how to ensure all resources get updated correctly. + +Solution 1 struggles a bit with problem 1. UniformSet already has a system for choosing one DescriptorSet among several cached sets, so that shouldn't be a huge problem. The main problem is that uniforms need some way to indicate whether they use frame copies or not. Ideally, this shouldn't be a setting on the uniform, but rather on the underlying resource. This could be solved by providing a method for resources which returns their preference. + +Here's the rough implementation plan for solution 1: make a low-level interface (maybe RenderResource) which supplies methods for frame interaction (knowing the current frame and indicating whether copies are being used). Uniforms and UniformSets will base their functionality on whether any resource is using frame copies. Other than that, copies are solely up to the specific resource implementations. With this in mind, the current problems are: + + 1. How to ensure all resources are properly updated. Not updating a resource may lead to read/write conflicts with the GPU. + 2. I'm not happy with having an API method whose sole purpose is to communicate a boolean, where most implementations will simply return true or false without any calculation. It feels wrong, maybe because of how wishy-washy this is. + 3. How will resources know how many frames are available. Sure, they could wait N frames to see where the index goes back to zero, but I don't like this limitation. + +Problem 2 could be solved by having only resources that use copies to implement RenderResource (it would have to renamed). This would more rigidly enforce the API, but it doesn't completely solve the original problem of UniformSets knowing which resources use multiple copies. UniformSet could check if the resource implements RenderResource, but I'm not entirely happy with that either (I do think it's better than before, though). + +Problem 1 could possibly be solved using a registry. The obvious problem with that is how the resources know about the registry, and I really don't want to make the registry static. + +------- + +I suppose I'm probably missing the real problem here. Requirements: + + 1. Some resources have multiple copies. + 2. The copy that should be interacted with is determined by the active frame. + 3. When a resource is destroyed, all its copies should also be destroyed. + +We already have a system that can support requirement 1 and partially requirement 2. A buffer can delegate to the correct copy, perhaps through a chain of delegates. + + 1. Buffers delegate to a downstream copy depending on the current frame. Similar to a LinkedList. + PRO: Depends only on the implementation. + PRO: Automatically generates copies on demand. + CON: Too automatic. No way to indicate that no copies should be generated. + CON: Seems a bit too finicky. It'll probably outsmart itself. + 2. Create a buffer implementation that delegates to one of many internal buffers depending on the current frame. + PRO: No need to alter current implementations. Works out of the box. + PRO: Simple to understand. + +#1 is the way to go here. No downsides that I can see (although that does depend on future decisions). +The other half of requirement 2 is informing the buffer which copy should be interacted with. There are three options: + + 1. Inform the buffer at command time. + PRO: Flexible. Another copy besides the one for the active frame can be interacted with if desired. + PRO: Clear. It's easy to tell at a glance exactly what copy is being interacted with. + CON: Makes the API much messier. A lot of methods will have to take an extra argument. + CON: It is difficult to tell whether any given buffer supports concurrency via copies. You're basically dropped in a minefield. + 2. Inform the buffer when the frame changes. + PRO: Doesn't touch the existing public API. + CON: Inflexible. Either impossible or difficult to interact with another copy. + CON: Unclear. You have to know context to know which copy is being interacted with. + CON: Accidental saving. Users may accidentally reference a copy thinking it is the managing buffer. + CON: Difficult to ensure all buffers are properly registered for such notifications. + +Just by looking at the number of cons, #2 is clearly not the way to go. I'm liking #1 much better now, too. We still have to address the two cons #1 has. Starting with the first con, the methods that will require changing are: + + 1. GpuBuffer#map(MemoryStack, int, int int) + + all related helper methods (map and copy) + 2. GpuBuffer#unmap() + 3. GpuBuffer#getId() + * Since GpuBuffer is not a Native<>, getNativeObject is left untouched :) + 4. Image#createView(VkImageViewCreateInfo) + + all related helper methods + +Likewise, in order to avoid changing Native#getNativeObject, Image will gain getId() and will no longer implement Native<>. It's silly to expect an Image to be Native<> anyway. That's an implementation thing. + +The second con for #1 is more serious, in my opinion. #1 is mostly an implementation solution, meaning an unsafely-mutable buffer (with no copies) could easily be passed into a mutator not designed for that sort of mutation. + + 1. Make a "SafelyMutableBuffer" interface extending GpuBuffer. The buffer manager will implement this. + PRO: Strictly enforces that unsafe buffers cannot be thrown into any mutator. + PLUS! Could even replace the need to change GpuBuffer API. + CON: Ends up having duplicate methods that have unclear functionality (what to do with getId() with no frame indicator?). + BUT... What about splitting SafelyMutableBuffer from GpuBuffer entirely? When would you want to treat a regular GpuBuffer like a SafelyMutableBuffer? For reading, of course. Nevermind. + BUT... This is not really a con. The methods GpuBuffer provides should only be used with special handling. SafelyMutableBuffer extends it to provide seperate safe methods. GpuBuffer's methods could act on, say, the first copy or the last interacted copy. + CON: Yeah, this isn't very maintainable... simply too many extra methods. + CON: And this whole thing is getting too complicated. + 2. Add a method to GpuBuffer indicating safety. + CON: Weak, completely on the mutators to enforce. + + diff --git a/jme3-examples/src/main/java/jme3test/vulkan/AttributeBufferBenchmark.java b/jme3-examples/src/main/java/jme3test/vulkan/AttributeBufferBenchmark.java new file mode 100644 index 0000000000..6aa1148389 --- /dev/null +++ b/jme3-examples/src/main/java/jme3test/vulkan/AttributeBufferBenchmark.java @@ -0,0 +1,78 @@ +package jme3test.vulkan; + +import com.jme3.vulkan.Format; +import org.lwjgl.system.MemoryUtil; + +import java.nio.ByteBuffer; + +/** + * Benchmarks interaction with ByteBuffers through {@link com.jme3.vulkan.Format.Component + * Component} compatibility, which ensure that whatever primitives are provided + * are correctly put into the buffer, and vise versa. Components will be critical + * for ensuring that Meshes don't care what MeshDescription they are using. + * + *

From the tests, it seems that the extra overhead Components use for puts + * is minimal. Component put versus direct put pretty much take the same time.

+ */ +public class AttributeBufferBenchmark { + + public static final Format format = Format.RGBA8_SRGB; + public static final int verts = 5000; + + private static long startNanos; + + public static void main(String[] args) { + + ByteBuffer buffer = MemoryUtil.memCalloc(format.getTotalBytes() * verts); + + for (int t = 0; t < 10; t++) { + fillBufferByComponent(buffer); + fillBufferRaw(buffer); + System.out.println(); + } + + MemoryUtil.memFree(buffer); + + } + + public static void fillBufferByComponent(ByteBuffer buffer) { + float value = getTestValue(); + start(); + for (int i = 0; i < verts; i++) { + int p = i * format.getTotalBytes(); + for (Format.Component c : format) { + // The advantage of Component put is that we can provide + // any primitive type, and the Component will automatically + // convert to the correct type. + c.putFloat(buffer, p, value); + } + } + end("Fill buffer by component"); + } + + public static void fillBufferRaw(ByteBuffer buffer) { + float value = getTestValue(); + start(); + for (int i = 0; i < verts; i++) { + int p = i * format.getTotalBytes(); + for (Format.Component c : format) { + buffer.put(p + c.getOffset(), (byte)value); + } + } + end("Fill buffer raw"); + } + + public static void start() { + startNanos = System.nanoTime(); + } + + public static void end(String task) { + long end = System.nanoTime(); + System.out.println(task + ": " + ((double)Math.abs(end - startNanos) / 1_000_000) + "ms"); + } + + public static float getTestValue() { + return (float)Math.random(); + } + +} diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 7a63041a72..13ca09bd43 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -22,8 +22,9 @@ import com.jme3.vulkan.frames.UpdateFrameManager; import com.jme3.vulkan.images.*; import com.jme3.vulkan.material.TestMaterial; -import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; +import com.jme3.vulkan.mesh.TestCaseMeshDescription; import com.jme3.vulkan.pass.Attachment; import com.jme3.vulkan.pass.Subpass; import com.jme3.vulkan.pipelines.*; @@ -148,14 +149,14 @@ public void simpleInitApp() { // swapchain swapchain = new Swapchain(device, surface); - try (Swapchain.Builder s = swapchain.build()) { + swapchain.build(s -> { s.addQueue(physDevice.getGraphics()); s.addQueue(physDevice.getPresent()); - s.selectFormat(Image.Format.B8G8R8A8_SRGB.getVkEnum(), KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR); + s.selectFormat(Format.B8G8R8A8_SRGB.getVkEnum(), KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR); s.selectMode(Swapchain.PresentMode.Mailbox); s.selectExtentByWindow(); s.selectImageCount(2); - } + }); // Describes the layout of a descriptor set. The descriptor set // will represent two uniforms: a uniform buffer at binding 0 @@ -183,24 +184,24 @@ public void simpleInitApp() { renderPass = new RenderPass(device); try (RenderPass.Builder p = renderPass.build()) { Attachment color = p.createAttachment(swapchain.getFormat(), VK_SAMPLE_COUNT_1_BIT, a -> { - a.setLoad(Image.Load.Clear); - a.setStore(Image.Store.Store); - a.setStencilLoad(Image.Load.DontCare); - a.setStencilStore(Image.Store.DontCare); - a.setInitialLayout(Image.Layout.Undefined); - a.setFinalLayout(Image.Layout.PresentSrc); + a.setLoad(VulkanImage.Load.Clear); + a.setStore(VulkanImage.Store.Store); + a.setStencilLoad(VulkanImage.Load.DontCare); + a.setStencilStore(VulkanImage.Store.DontCare); + a.setInitialLayout(VulkanImage.Layout.Undefined); + a.setFinalLayout(VulkanImage.Layout.PresentSrc); }); Attachment depth = p.createAttachment(depthView.getImage().getFormat(), VK_SAMPLE_COUNT_1_BIT, a -> { - a.setLoad(Image.Load.Clear); - a.setStore(Image.Store.DontCare); - a.setStencilLoad(Image.Load.DontCare); - a.setStencilStore(Image.Store.DontCare); - a.setInitialLayout(Image.Layout.Undefined); - a.setFinalLayout(Image.Layout.DepthStencilAttachmentOptimal); + a.setLoad(VulkanImage.Load.Clear); + a.setStore(VulkanImage.Store.DontCare); + a.setStencilLoad(VulkanImage.Load.DontCare); + a.setStencilStore(VulkanImage.Store.DontCare); + a.setInitialLayout(VulkanImage.Layout.Undefined); + a.setFinalLayout(VulkanImage.Layout.DepthStencilAttachmentOptimal); }); Subpass subpass = p.createSubpass(PipelineBindPoint.Graphics, s -> { - s.addColorAttachment(color.createReference(Image.Layout.ColorAttachmentOptimal)); - s.setDepthStencilAttachment(depth.createReference(Image.Layout.DepthStencilAttachmentOptimal)); + s.addColorAttachment(color.createReference(VulkanImage.Layout.ColorAttachmentOptimal)); + s.setDepthStencilAttachment(depth.createReference(VulkanImage.Layout.DepthStencilAttachmentOptimal)); }); p.createDependency(null, subpass, d -> { d.setSrcStageMask(Flag.of(PipelineStage.ColorAttachmentOutput, PipelineStage.EarlyFragmentTests)); @@ -222,18 +223,16 @@ public void simpleInitApp() { graphicsPool = device.getLongTermPool(physDevice.getGraphics()); // vertex buffers - try (MemoryStack stack = MemoryStack.stackPush()) { - // cpu-accessible memory is not usually fast for the gpu to access, but - // the cpu cannot directly access fast gpu memory. The solution is to - // copy cpu-side data to a mutual staging buffer, then have the gpu copy - // that data to faster memory. - vertexBuffer = new StaticBuffer(device, transferPool, MemorySize.floats(vertexData.capacity()), - BufferUsage.Vertex, MemoryFlag.DeviceLocal, false); - vertexBuffer.copy(stack, vertexData); - indexBuffer = new StaticBuffer(device, transferPool, MemorySize.ints(indexData.capacity()), - BufferUsage.Index, MemoryFlag.DeviceLocal, false); - indexBuffer.copy(stack, indexData); - } + // cpu-accessible memory is not usually fast for the gpu to access, but + // the cpu cannot directly access fast gpu memory. The solution is to + // copy cpu-side data to a mutual staging buffer, then have the gpu copy + // that data to faster memory. + vertexBuffer = new StaticBuffer(device, transferPool, MemorySize.floats(vertexData.capacity()), + BufferUsage.Vertex, MemoryProp.DeviceLocal, false); + vertexBuffer.copy(vertexData); + indexBuffer = new StaticBuffer(device, transferPool, MemorySize.ints(indexData.capacity()), + BufferUsage.Index, MemoryProp.DeviceLocal, false); + indexBuffer.copy(indexData); frames = new UpdateFrameManager(2, n -> new Frame()); @@ -265,7 +264,7 @@ public boolean swapchainOutOfDate(Swapchain swapchain, int imageAcquireCode) { try (Swapchain.Builder s = swapchain.build()) { s.addQueue(device.getPhysicalDevice().getGraphics()); s.addQueue(device.getPhysicalDevice().getPresent()); - s.selectFormat(Image.Format.B8G8R8A8_SRGB.getVkEnum(), KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR); + s.selectFormat(Format.B8G8R8A8_SRGB.getVkEnum(), KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR); s.selectMode(Swapchain.PresentMode.Mailbox); s.selectExtentByWindow(); s.selectImageCount(2); @@ -291,16 +290,25 @@ public void simpleUpdate(float tpf) { } private ImageView createDepthAttachment(CommandPool pool) { - Image.Format depthFormat = device.getPhysicalDevice().findSupportedFormat( - Image.Tiling.Optimal, + Format depthFormat = device.getPhysicalDevice().findSupportedFormat( + VulkanImage.Tiling.Optimal, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, - Image.Format.Depth32SFloat, Image.Format.Depth32SFloat_Stencil8UInt, Image.Format.Depth24UNorm_Stencil8UInt); - GpuImage image = new GpuImage(device, swapchain.getExtent().x, swapchain.getExtent().y, depthFormat, - Image.Tiling.Optimal, ImageUsage.DepthStencilAttachment, MemoryFlag.DeviceLocal); - ImageView view = image.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_DEPTH_BIT, 0, 1, 0, 1); + Format.Depth32SFloat, Format.Depth32SFloat_Stencil8UInt, Format.Depth24UNorm_Stencil8UInt); + GpuImage image = new GpuImage(device, Image.Type.V2D); + try (GpuImage.Builder i = image.build()) { + i.setSize(swapchain.getExtent().x, swapchain.getExtent().y); + i.setFormat(depthFormat); + i.setTiling(VulkanImage.Tiling.Optimal); + i.setUsage(ImageUsage.DepthStencilAttachment); + i.setMemoryProps(MemoryProp.DeviceLocal); + } + ImageView view = new ImageView(image, VulkanImage.View.TwoDemensional); + try (ImageView.Builder v = view.build()) { + v.allMipmaps(); + } CommandBuffer commands = pool.allocateOneTimeCommandBuffer(); commands.begin(); - image.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.DepthStencilAttachmentOptimal); + image.transitionLayout(commands, VulkanImage.Layout.Undefined, VulkanImage.Layout.DepthStencilAttachmentOptimal); commands.endAndSubmit(SyncGroup.ASYNC); commands.getPool().getQueue().waitIdle(); return view; @@ -355,20 +363,21 @@ public void update(UpdateFrameManager frames, float tpf) { // material renderPass.begin(graphicsCommands, image.getFrameBuffer()); pipeline.bind(graphicsCommands); - try (MemoryStack stack = MemoryStack.stackPush()) { - // geometry - modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y)); - Matrix4f worldViewProjection = cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()); + // geometry + modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y)); + Matrix4f worldViewProjection = cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()); - // material - GpuBuffer matrixBuffer = material.getMatrices().getVersion(); - worldViewProjection.fillFloatBuffer(matrixBuffer.mapFloats(stack, 0, matrixBuffer.size().getElements(), 0), true); - matrixBuffer.unmap(); - material.bind(graphicsCommands, pipeline); + // material + GpuBuffer matrixBuffer = material.getMatrices().getVersion(); + worldViewProjection.fillFloatBuffer(matrixBuffer.mapFloats(0, matrixBuffer.size().getElements()), true); + matrixBuffer.unmap(); + material.bind(graphicsCommands, pipeline); // vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), pipeline.getBindPoint().getVkEnum(), // pipelineLayout.getNativeObject(), 0, stack.longs(descriptorSet.getId()), null); + try (MemoryStack stack = MemoryStack.stackPush()) { + // viewport VkViewport.Buffer vp = VkViewport.calloc(1, stack) .x(0f).y(0f) @@ -384,7 +393,7 @@ public void update(UpdateFrameManager frames, float tpf) { // mesh vkCmdBindVertexBuffers(graphicsCommands.getBuffer(), 0, stack.longs(vertexBuffer.getId()), stack.longs(0)); vkCmdBindIndexBuffer(graphicsCommands.getBuffer(), indexBuffer.getId(), 0, VK_INDEX_TYPE_UINT32); - vkCmdDrawIndexed(graphicsCommands.getBuffer(), indexData.limit(), 1, 0, 0, 0); + vkCmdDrawIndexed(graphicsCommands.getBuffer(), indexBuffer.size().getElements(), 1, 0, 0, 0); } @@ -394,7 +403,7 @@ public void update(UpdateFrameManager frames, float tpf) { // render manager graphicsCommands.end(); graphicsCommands.submit(new SyncGroup(imageAvailable, renderFinished, inFlight)); - swapchain.present(device.getPhysicalDevice().getPresent(), image, renderFinished); + swapchain.present(device.getPhysicalDevice().getPresent(), image, renderFinished.toGroupWait()); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Format.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Format.java new file mode 100644 index 0000000000..2669326748 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Format.java @@ -0,0 +1,362 @@ +package com.jme3.vulkan; + +import com.jme3.vulkan.images.VulkanImage; +import com.jme3.vulkan.util.Flag; + +import java.nio.ByteBuffer; +import java.util.Iterator; + +import static org.lwjgl.vulkan.VK10.*; + +public enum Format implements Iterable { + + RGBA32SFloat(VK_FORMAT_R32G32B32A32_SFLOAT, array(cf(4), cf(4), cf(4), cf(4)), true, false, false), + RGB32SFloat(VK_FORMAT_R32G32B32_SFLOAT, array(cf(4), cf(4), cf(4)), true, false, false), + RG32SFloat(VK_FORMAT_R32G32_SFLOAT, array(cf(4), cf(4)), true, false, false), + + RGBA8_SRGB(VK_FORMAT_R8G8B8A8_SRGB, array(cf(1), cf(1), cf(1), cf(1)), true, false, false), + R8_SRGB(VK_FORMAT_R8_SRGB, array(cf(1)), true, false, false), + BGR8_SRGB(VK_FORMAT_B8G8R8_SRGB, array(cf(1), cf(1), cf(1)), true, false, false), + ABGR8_SRGB(VK_FORMAT_A8B8G8R8_SRGB_PACK32, array(cf(1), cf(1), cf(1), cf(1)), true, false, false), + B8G8R8A8_SRGB(VK_FORMAT_B8G8R8A8_SRGB, array(cf(1), cf(1), cf(1), cf(1)), true, false, false), + + Depth32SFloat(VK_FORMAT_D32_SFLOAT, array(cf(4)), false, true, false), + Depth32SFloat_Stencil8UInt(VK_FORMAT_D32_SFLOAT_S8_UINT, array(cf(4), c(1)), false, true, true), + Depth24UNorm_Stencil8UInt(VK_FORMAT_D24_UNORM_S8_UINT, array(cf(3), c(1)), false, true, true), + Depth16UNorm(VK_FORMAT_D16_UNORM, array(cf(2)), false, true, false), + Depth16UNorm_Stencil8UInt(VK_FORMAT_D16_UNORM_S8_UINT, array(cf(2), c(1)), false, true, true); + + private final int vkEnum, totalBytes; + private final Component[] components; + private final boolean color, depth, stencil; + + Format(int vkEnum, Component[] components, boolean color, boolean depth, boolean stencil) { + this.vkEnum = vkEnum; + this.components = components; + this.color = color; + this.depth = depth; + this.stencil = stencil; + int total = 0; + for (Component c : components) { + c.setOffset(total); + total += c.getBytes(); + } + this.totalBytes = total; + } + + @Override + public Iterator iterator() { + return new ComponentIterator(components); + } + + public int getVkEnum() { + return vkEnum; + } + + public Flag getAspects() { + int bits = 0; + if (color) bits |= VulkanImage.Aspect.Color.bits(); + if (depth) bits |= VulkanImage.Aspect.Depth.bits(); + if (stencil) bits |= VulkanImage.Aspect.Stencil.bits(); + return Flag.of(bits); + } + + public int getTotalBits() { + return totalBytes * Byte.SIZE; + } + + public int getTotalBytes() { + return totalBytes; + } + + public int getNumComponents() { + return components.length; + } + + public Component getComponent(int component) { + return components[component]; + } + + public boolean isColor() { + return color; + } + + public boolean isDepth() { + return depth; + } + + public boolean isStencil() { + return stencil; + } + + public static Format byVkEnum(int vkEnum) { + for (Format f : Format.values()) { + if (f.getVkEnum() == vkEnum) { + return f; + } + } + return null; + } + + private static Component[] array(Component... components) { + return components; + } + + private static Component c(int bytes) { + return new Component(bytes, false); + } + + private static Component cf(int bytes) { + return new Component(bytes, true); + } + + public static class Component { + + private final int bytes; + private final boolean floatingPoint; + private int offset; + + private Component(int bytes, boolean floatingPoint) { + assert bytes > 0 : "Component size in bytes must be positive"; + this.bytes = bytes; + this.floatingPoint = floatingPoint && bytes >= 4; + } + + private void setOffset(int offset) { + this.offset = offset; + } + + public int getBytes() { + return bytes; + } + + public int getOffset() { + return offset; + } + + public boolean isFloatingPoint() { + return floatingPoint; + } + + public Component putByte(ByteBuffer buffer, int position, byte value) { + position += offset; + switch (bytes) { + case 1: buffer.put(position, value); break; + case 2: case 3: buffer.putShort(position, value); break; + case 4: case 5: case 6: case 7: { + if (floatingPoint) buffer.putFloat(position, value); + else buffer.putInt(position, value); + } break; + default: { + if (floatingPoint) buffer.putDouble(position, value); + else buffer.putLong(position, value); + } + } + return this; + } + + public Component putShort(ByteBuffer buffer, int position, short value) { + position += offset; + switch (bytes) { + case 1: buffer.put(position, (byte)value); break; + case 2: case 3: buffer.putShort(position, value); break; + case 4: case 5: case 6: case 7: { + if (floatingPoint) buffer.putFloat(position, value); + else buffer.putInt(position, value); + } break; + default: { + if (floatingPoint) buffer.putDouble(position, value); + else buffer.putLong(position, value); + } + } + return this; + } + + public Component putInt(ByteBuffer buffer, int position, int value) { + position += offset; + switch (bytes) { + case 1: buffer.put(position, (byte)value); break; + case 2: case 3: buffer.putShort(position, (short)value); break; + case 4: case 5: case 6: case 7: { + if (floatingPoint) buffer.putFloat(position, value); + else buffer.putInt(position, value); + } break; + default: { + if (floatingPoint) buffer.putDouble(position, value); + else buffer.putLong(position, value); + } + } + return this; + } + + public Component putFloat(ByteBuffer buffer, int position, float value) { + position += offset; + switch (bytes) { + case 1: buffer.put(position, (byte)value); break; + case 2: case 3: buffer.putShort(position, (short)value); break; + case 4: case 5: case 6: case 7: { + if (floatingPoint) buffer.putFloat(position, value); + else buffer.putInt(position, (int)value); + } break; + default: { + if (floatingPoint) buffer.putDouble(position, value); + else buffer.putLong(position, (long)value); + } + } + return this; + } + + public Component putDouble(ByteBuffer buffer, int position, double value) { + position += offset; + switch (bytes) { + case 1: buffer.put(position, (byte)value); break; + case 2: case 3: buffer.putShort(position, (short)value); break; + case 4: case 5: case 6: case 7: { + if (floatingPoint) buffer.putFloat(position, (float)value); + else buffer.putInt(position, (int)value); + } break; + default: { + if (floatingPoint) buffer.putDouble(position, value); + else buffer.putLong(position, (long)value); + } + } + return this; + } + + public Component putLong(ByteBuffer buffer, int position, long value) { + position += offset; + switch (bytes) { + case 1: buffer.put(position, (byte)value); break; + case 2: case 3: buffer.putShort(position, (short)value); break; + case 4: case 5: case 6: case 7: { + if (floatingPoint) buffer.putFloat(position, value); + else buffer.putInt(position, (int)value); + } break; + default: { + if (floatingPoint) buffer.putDouble(position, value); + else buffer.putLong(position, value); + } + } + return this; + } + + public byte getByte(ByteBuffer buffer, int position) { + position += offset; + switch (bytes) { + case 1: return buffer.get(position); + case 2: case 3: return (byte)buffer.getShort(position); + case 4: case 5: case 6: case 7: { + if (floatingPoint) return (byte)buffer.getFloat(position); + else return (byte)buffer.getInt(position); + } + default: { + if (floatingPoint) return (byte)buffer.getDouble(position); + else return (byte)buffer.getLong(position); + } + } + } + + public short getShort(ByteBuffer buffer, int position) { + position += offset; + switch (bytes) { + case 1: return buffer.get(position); + case 2: case 3: return buffer.getShort(position); + case 4: case 5: case 6: case 7: { + if (floatingPoint) return (short)buffer.getFloat(position); + else return (short)buffer.getInt(position); + } + default: { + if (floatingPoint) return (short)buffer.getDouble(position); + else return (short)buffer.getLong(position); + } + } + } + + public int getInt(ByteBuffer buffer, int position) { + position += offset; + switch (bytes) { + case 1: return buffer.get(position); + case 2: case 3: return buffer.getShort(position); + case 4: case 5: case 6: case 7: { + if (floatingPoint) return (int)buffer.getFloat(position); + else return buffer.getInt(position); + } + default: { + if (floatingPoint) return (int)buffer.getDouble(position); + else return (int)buffer.getLong(position); + } + } + } + + public float getFloat(ByteBuffer buffer, int position) { + position += offset; + switch (bytes) { + case 1: return buffer.get(position); + case 2: case 3: return buffer.getShort(position); + case 4: case 5: case 6: case 7: { + if (floatingPoint) return buffer.getFloat(position); + else return buffer.getInt(position); + } + default: { + if (floatingPoint) return (float)buffer.getDouble(position); + else return buffer.getLong(position); + } + } + } + + public double getDouble(ByteBuffer buffer, int position) { + position += offset; + switch (bytes) { + case 1: return buffer.get(position); + case 2: case 3: return buffer.getShort(position); + case 4: case 5: case 6: case 7: { + if (floatingPoint) return buffer.getFloat(position); + else return buffer.getInt(position); + } + default: { + if (floatingPoint) return buffer.getDouble(position); + else return buffer.getLong(position); + } + } + } + + public long getLong(ByteBuffer buffer, int position) { + position += offset; + switch (bytes) { + case 1: return buffer.get(position); + case 2: case 3: return buffer.getShort(position); + case 4: case 5: case 6: case 7: { + if (floatingPoint) return (long)buffer.getFloat(position); + else return buffer.getInt(position); + } + default: { + if (floatingPoint) return (long)buffer.getDouble(position); + else return buffer.getLong(position); + } + } + } + + } + + private static class ComponentIterator implements Iterator { + + private final Component[] components; + private int index = 0; + + private ComponentIterator(Component[] components) { + this.components = components; + } + + @Override + public boolean hasNext() { + return index < components.length; + } + + @Override + public Component next() { + return components[index++]; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SharingMode.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SharingMode.java new file mode 100644 index 0000000000..1879ac58ab --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SharingMode.java @@ -0,0 +1,27 @@ +package com.jme3.vulkan; + +import com.jme3.vulkan.util.LibEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum SharingMode implements LibEnum { + + Exclusive(VK_SHARING_MODE_EXCLUSIVE), + Concurrent(VK_SHARING_MODE_CONCURRENT); + + private final int vkEnum; + + SharingMode(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + + public static SharingMode concurrent(boolean concurrent) { + return concurrent ? Concurrent : Exclusive; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swizzle.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swizzle.java new file mode 100644 index 0000000000..0922edd3f5 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swizzle.java @@ -0,0 +1,28 @@ +package com.jme3.vulkan; + +import com.jme3.vulkan.util.LibEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum Swizzle implements LibEnum { + + Identity(VK_COMPONENT_SWIZZLE_IDENTITY), + R(VK_COMPONENT_SWIZZLE_R), + G(VK_COMPONENT_SWIZZLE_G), + B(VK_COMPONENT_SWIZZLE_B), + A(VK_COMPONENT_SWIZZLE_A), + One(VK_COMPONENT_SWIZZLE_ONE), + Zero(VK_COMPONENT_SWIZZLE_ZERO); + + private final int vkEnum; + + Swizzle(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java new file mode 100644 index 0000000000..f7a24018b6 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java @@ -0,0 +1,95 @@ +package com.jme3.vulkan.buffers; + +import com.jme3.renderer.vulkan.VulkanUtils; +import com.jme3.util.natives.Native; +import com.jme3.vulkan.AbstractNative; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.memory.MemoryProp; +import com.jme3.vulkan.memory.MemoryRegion; +import com.jme3.vulkan.memory.MemorySize; +import com.jme3.vulkan.util.Flag; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkBufferCopy; +import org.lwjgl.vulkan.VkBufferCreateInfo; +import org.lwjgl.vulkan.VkMemoryRequirements; + +import java.nio.BufferOverflowException; +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.check; +import static org.lwjgl.vulkan.VK10.*; + +public class BasicVulkanBuffer extends AbstractNative implements VulkanBuffer { + + private final LogicalDevice device; + private final MemorySize size; + protected final MemoryRegion memory; + + public BasicVulkanBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { + this.device = device; + this.size = size; + try (MemoryStack stack = MemoryStack.stackPush()) { + VkBufferCreateInfo create = VkBufferCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO) + .size(size.getBytes()) + .usage(usage.bits()) + .sharingMode(VulkanUtils.sharingMode(concurrent)); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateBuffer(device.getNativeObject(), create, null, idBuf), + "Failed to create buffer."); + object = idBuf.get(0); + VkMemoryRequirements bufferMem = VkMemoryRequirements.malloc(stack); + vkGetBufferMemoryRequirements(device.getNativeObject(), object, bufferMem); + memory = new MemoryRegion(device, bufferMem.size(), mem, bufferMem.memoryTypeBits()); + memory.bind(this, 0); + } + ref = Native.get().register(this); + device.getNativeReference().addDependent(ref); + memory.getNativeReference().addDependent(ref); + } + + @Override + public long getId() { + return object; + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyBuffer(device.getNativeObject(), object, null); + } + + @Override + public void verifyBufferSize(int elements, long bytesPerElement) { + if (elements * bytesPerElement > size.getBytes()) { + throw new BufferOverflowException(); + } + } + + @Override + public PointerBuffer map(int offset, int size) { + return memory.map(offset, size); + } + + @Override + public void unmap() { + memory.unmap(); + } + + @Override + public void freeMemory() { + memory.getNativeReference().destroy(); + } + + @Override + public MemorySize size() { + return size; + } + + @Override + public LogicalDevice getDevice() { + return device; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferMode.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferMode.java new file mode 100644 index 0000000000..018652f4eb --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferMode.java @@ -0,0 +1,31 @@ +package com.jme3.vulkan.buffers; + +/** + * Hint for communicating the mode of buffer to use. Does not + * map directly with buffer implementations. + */ +public enum BufferMode { + + /** + * Buffer is best suited for no modifications. A static buffers is usually + * only accessible by the GPU after the initial upload, and may throw an + * exception if attempting to do so. + */ + Static, + + /** + * Buffer is best suited for occassional modifications. Usually such buffers + * use fast GPU memory, with a CPU-accessible intermediate buffer to transfer + * updates from the CPU to the GPU. Similar to {@link #Static}, except the + * intermediate buffer is not destroyed after the initial upload. + */ + Adjustable, + + /** + * Buffer is best suited for regular modifications, ideally every frame. + * Usually such buffers emphasize CPU access, usually to the detriment of + * GPU access speeds. + */ + Dynamic, + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index b0579c0f6e..53d30efc9b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -16,7 +16,17 @@ public interface GpuBuffer { - PointerBuffer map(MemoryStack stack, int offset, int size, int flags); + /** + * Maps the memory of this buffer and returns a pointer to the mapped + * region. If the memory is currently mapped when this is called, an + * exception is thrown. + * + * @param offset offset, in bytes, of the mapping + * @param size size, in bytes, of the mapping, or {@link org.lwjgl.vulkan.VK10#VK_WHOLE_SIZE + * VK_WHOLE_SIZE} to map all buffer memory starting at {@code offset}. + * @return Buffer containing a pointer to the mapped memory + */ + PointerBuffer map(int offset, int size); void unmap(); @@ -32,89 +42,81 @@ default void verifyBufferSize(int elements, long bytesPerElement) { } } - default T map(MemoryStack stack, int offset, int size, int flags, Function factory) { - return factory.apply(map(stack, offset, size, flags)); + default T map(int offset, int size, Function factory) { + return factory.apply(map(offset, size)); } - default ByteBuffer mapBytes(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Byte.BYTES, flags).getByteBuffer(0, size); + default ByteBuffer mapBytes(int offset, int size) { + return map(offset * Byte.BYTES, size * Byte.BYTES).getByteBuffer(0, size); } - default ShortBuffer mapShorts(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Short.BYTES, flags).getShortBuffer(0, size); + default ShortBuffer mapShorts(int offset, int size) { + return map(offset * Short.BYTES, size * Short.BYTES).getShortBuffer(0, size); } - default IntBuffer mapInts(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Integer.BYTES, flags).getIntBuffer(0, size); + default IntBuffer mapInts(int offset, int size) { + return map(offset * Integer.BYTES, size * Integer.BYTES).getIntBuffer(0, size); } - default FloatBuffer mapFloats(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Float.BYTES, flags).getFloatBuffer(0, size); + default FloatBuffer mapFloats(int offset, int size) { + return map(offset * Float.BYTES, size * Float.BYTES).getFloatBuffer(0, size); } - default DoubleBuffer mapDoubles(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Double.BYTES, flags).getDoubleBuffer(0, size); + default DoubleBuffer mapDoubles(int offset, int size) { + return map(offset * Double.BYTES, size * Double.BYTES).getDoubleBuffer(0, size); } - default LongBuffer mapLongs(MemoryStack stack, int offset, int size, int flags) { - return map(stack, offset, size * Long.BYTES, flags).getLongBuffer(0, size); + default LongBuffer mapLongs(int offset, int size) { + return map(offset * Long.BYTES, size * Long.BYTES).getLongBuffer(0, size); } - default void copy(MemoryStack stack, ByteBuffer buffer) { + default void copy(ByteBuffer buffer) { verifyBufferSize(buffer.limit(), Byte.BYTES); - MemoryUtil.memCopy(buffer, mapBytes(stack, 0, buffer.limit(), 0)); + MemoryUtil.memCopy(buffer, mapBytes(0, buffer.limit())); unmap(); } - default void copy(MemoryStack stack, ShortBuffer buffer) { + default void copy(ShortBuffer buffer) { verifyBufferSize(buffer.limit(), Short.BYTES); - MemoryUtil.memCopy(buffer, mapShorts(stack, 0, buffer.limit(), 0)); + MemoryUtil.memCopy(buffer, mapShorts(0, buffer.limit())); unmap(); } - default void copy(MemoryStack stack, IntBuffer buffer) { + default void copy(IntBuffer buffer) { verifyBufferSize(buffer.limit(), Integer.BYTES); - MemoryUtil.memCopy(buffer, mapInts(stack, 0, buffer.limit(), 0)); + MemoryUtil.memCopy(buffer, mapInts(0, buffer.limit())); unmap(); } - default void copy(MemoryStack stack, FloatBuffer buffer) { + default void copy(FloatBuffer buffer) { verifyBufferSize(buffer.limit(), Float.BYTES); - MemoryUtil.memCopy(buffer, mapFloats(stack, 0, buffer.limit(), 0)); + MemoryUtil.memCopy(buffer, mapFloats(0, buffer.limit())); unmap(); } - default void copy(MemoryStack stack, DoubleBuffer buffer) { + default void copy(DoubleBuffer buffer) { verifyBufferSize(buffer.limit(), Double.BYTES); - MemoryUtil.memCopy(buffer, mapDoubles(stack, 0, buffer.limit(), 0)); + MemoryUtil.memCopy(buffer, mapDoubles(0, buffer.limit())); unmap(); } - default void copy(MemoryStack stack, LongBuffer buffer) { + default void copy(LongBuffer buffer) { verifyBufferSize(buffer.limit(), Long.BYTES); - MemoryUtil.memCopy(buffer, mapLongs(stack, 0, buffer.limit(), 0)); + MemoryUtil.memCopy(buffer, mapLongs(0, buffer.limit())); unmap(); } - default void copy(MemoryStack stack, Struct struct) { + default void copy(Struct struct) { verifyBufferSize(struct.sizeof(), Byte.BYTES); - MemoryUtil.memCopy(MemoryUtil.memByteBuffer(struct.address(), struct.sizeof()), - mapBytes(stack, 0, struct.sizeof(), 0)); + MemoryUtil.memCopy(MemoryUtil.memByteBuffer(struct.address(), struct.sizeof()), mapBytes(0, struct.sizeof())); unmap(); } - default void copy(MemoryStack stack, StructBuffer buffer) { + default void copy(StructBuffer buffer) { verifyBufferSize(buffer.limit(), buffer.sizeof()); int size = buffer.limit() * buffer.sizeof(); - MemoryUtil.memCopy(MemoryUtil.memByteBuffer(buffer.address(), size), mapBytes(stack, 0, size, 0)); + MemoryUtil.memCopy(MemoryUtil.memByteBuffer(buffer.address(), size), mapBytes(0, size)); unmap(); } - default void recordCopy(MemoryStack stack, CommandBuffer commands, GpuBuffer source, - long srcOffset, long dstOffset, long size) { - VkBufferCopy.Buffer copy = VkBufferCopy.calloc(1, stack) - .srcOffset(srcOffset).dstOffset(dstOffset).size(size); - vkCmdCopyBuffer(commands.getBuffer(), source.getId(), getId(), copy); - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java index bfc08c3095..43de9ce30c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java @@ -1,37 +1,53 @@ package com.jme3.vulkan.buffers; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; -import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; -public class PersistentBuffer extends VulkanBuffer { +import java.nio.ByteBuffer; - private final long address; +public class PersistentBuffer extends BasicVulkanBuffer { + + private final PointerBuffer regionAddress; + private final ByteBuffer regionBuffer; + private final PointerBuffer mappedAddress = MemoryUtil.memCallocPointer(1); public PersistentBuffer(LogicalDevice device, MemorySize size, Flag usage, boolean concurrent) { - this(device, size, usage, Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), concurrent); + this(device, size, usage, Flag.of(MemoryProp.HostVisible, MemoryProp.HostCoherent), concurrent); } - public PersistentBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { + public PersistentBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { super(device, size, usage, mem, concurrent); - try (MemoryStack stack = MemoryStack.stackPush()) { - address = memory.map(stack, 0, size.getBytes(), 0).get(0); + if (!mem.contains(MemoryProp.HostVisible)) { + throw new IllegalArgumentException("Memory must be host visible."); } + regionAddress = memory.map(0, size.getBytes()); + regionBuffer = regionAddress.getByteBuffer(0, size.getBytes()); } @Override - public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { - return stack.pointers(address); + public PointerBuffer map(int offset, int size) { + if (offset > 0) { + mappedAddress.put(0, MemoryUtil.memAddress(regionBuffer, offset)); + } else { + mappedAddress.put(0, regionAddress.get(0)); + } + return mappedAddress; } @Override public void unmap() {} - public long getAddress() { - return address; + @Override + public Runnable createNativeDestroyer() { + Runnable sup = super.createNativeDestroyer(); + return () -> { + sup.run(); + MemoryUtil.memFree(mappedAddress); + }; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index 02e0686c5e..812f4ce0b6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -3,27 +3,27 @@ import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.sync.SyncGroup; import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -public class StageableBuffer extends VulkanBuffer { +public class StageableBuffer extends BasicVulkanBuffer { private final VulkanBuffer stage; public StageableBuffer(LogicalDevice device, MemorySize size, - Flag usage, Flag mem, boolean concurrent) { + Flag usage, Flag mem, boolean concurrent) { super(device, size, usage.add(BufferUsage.TransferDst), mem, concurrent); - this.stage = new VulkanBuffer(device, size, BufferUsage.TransferSrc, - Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), concurrent); + this.stage = new BasicVulkanBuffer(device, size, BufferUsage.TransferSrc, + Flag.of(MemoryProp.HostVisible, MemoryProp.HostCoherent), concurrent); } @Override - public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { - return stage.map(stack, offset, size, flags); + public PointerBuffer map(int offset, int size) { + return stage.map(offset, size); } @Override diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java index ab3a9b5e6b..fe3a10c6a2 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java @@ -2,8 +2,7 @@ import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.material.uniforms.BufferUniform; -import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.sync.SyncGroup; @@ -16,7 +15,7 @@ public class StaticBuffer extends StageableBuffer { private final CommandPool transferPool; - public StaticBuffer(LogicalDevice device, CommandPool transferPool, MemorySize size, Flag usage, Flag mem, boolean concurrent) { + public StaticBuffer(LogicalDevice device, CommandPool transferPool, MemorySize size, Flag usage, Flag mem, boolean concurrent) { super(device, size, usage, mem, concurrent); this.transferPool = transferPool; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java index 9a44940a29..dd991ae53e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java @@ -1,17 +1,17 @@ package com.jme3.vulkan.buffers; +import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.frames.VersionedResource; import com.jme3.vulkan.frames.UpdateFrameManager; import com.jme3.vulkan.memory.MemorySize; import org.lwjgl.PointerBuffer; -import org.lwjgl.system.MemoryStack; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.function.Function; -public class VersionedBuffer implements GpuBuffer, VersionedResource { +public class VersionedBuffer implements VulkanBuffer, VersionedResource { private final UpdateFrameManager frames; private final MemorySize size; @@ -28,8 +28,8 @@ public VersionedBuffer(UpdateFrameManager frames, MemorySize size, Function getInternalBuffers() { return buffers; } + @Override + public LogicalDevice getDevice() { + return getVersion().getDevice(); + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java index 835aa1fe76..46b560582b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java @@ -1,107 +1,23 @@ package com.jme3.vulkan.buffers; -import com.jme3.renderer.vulkan.VulkanUtils; -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.memory.MemoryFlag; -import com.jme3.vulkan.memory.MemoryRegion; -import com.jme3.vulkan.memory.MemorySize; -import com.jme3.vulkan.util.Flag; -import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VkBufferCreateInfo; -import org.lwjgl.vulkan.VkMemoryRequirements; +import org.lwjgl.vulkan.VkBufferCopy; -import java.nio.*; - -import static com.jme3.renderer.vulkan.VulkanUtils.check; import static org.lwjgl.vulkan.VK10.*; -public class VulkanBuffer implements GpuBuffer, Native { - - private final LogicalDevice device; - private final NativeReference ref; - private final MemorySize size; - private final long id; - protected final MemoryRegion memory; - - public VulkanBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { - this.device = device; - this.size = size; - try (MemoryStack stack = MemoryStack.stackPush()) { - VkBufferCreateInfo create = VkBufferCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO) - .size(size.getBytes()) - .usage(usage.bits()) - .sharingMode(VulkanUtils.sharingMode(concurrent)); - LongBuffer idBuf = stack.mallocLong(1); - check(vkCreateBuffer(device.getNativeObject(), create, null, idBuf), - "Failed to create buffer."); - id = idBuf.get(0); - VkMemoryRequirements bufferMem = VkMemoryRequirements.malloc(stack); - vkGetBufferMemoryRequirements(device.getNativeObject(), id, bufferMem); - memory = new MemoryRegion(device, bufferMem.size(), device.getPhysicalDevice().findSupportedMemoryType( - stack, bufferMem.memoryTypeBits(), mem)); - memory.bind(this, 0); - } - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - memory.getNativeReference().addDependent(ref); - } - - @Override - public Long getNativeObject() { - return id; - } - - @Override - public long getId() { - return id; - } - - @Override - public Runnable createNativeDestroyer() { - return () -> vkDestroyBuffer(device.getNativeObject(), id, null); - } - - @Override - public void prematureNativeDestruction() {} +public interface VulkanBuffer extends GpuBuffer { - @Override - public NativeReference getNativeReference() { - return ref; - } - - @Override - public void verifyBufferSize(int elements, long bytesPerElement) { - if (elements * bytesPerElement > size.getBytes()) { - throw new BufferOverflowException(); - } - } - - @Override - public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { - return memory.map(stack, offset, size, flags); - } - - @Override - public void unmap() { - memory.unmap(); - } - - @Override - public void freeMemory() { - memory.getNativeReference().destroy(); - } - - @Override - public MemorySize size() { - return size; - } + LogicalDevice getDevice(); - public LogicalDevice getDevice() { - return device; + default void recordCopy(MemoryStack stack, CommandBuffer commands, GpuBuffer source, + long srcOffset, long dstOffset, long size) { + VkBufferCopy.Buffer copy = VkBufferCopy.calloc(1, stack) + .srcOffset(srcOffset) + .dstOffset(dstOffset) + .size(size); + vkCmdCopyBuffer(commands.getBuffer(), source.getId(), getId(), copy); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java index 9536329896..5485f1347b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java @@ -38,7 +38,7 @@ public int bits() { private final long id; public DescriptorPool(LogicalDevice device, int sets, PoolSize... sizes) { - this(device, sets, Flag.none(), sizes); + this(device, sets, Flag.empty(), sizes); } public DescriptorPool(LogicalDevice device, int sets, Flag flags, PoolSize... sizes) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java index 5bad3c9000..cc11c0dc8a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java @@ -1,22 +1,19 @@ package com.jme3.vulkan.descriptors; -import com.jme3.vulkan.images.Image; -import com.jme3.vulkan.images.ImageView; -import com.jme3.vulkan.images.Sampler; -import com.jme3.vulkan.images.Texture; +import com.jme3.vulkan.images.*; import org.lwjgl.vulkan.VkDescriptorImageInfo; public class ImageDescriptor { private final ImageView view; private final Sampler sampler; - private final Image.Layout layout; + private final VulkanImage.Layout layout; - public ImageDescriptor(Texture texture, Image.Layout layout) { + public ImageDescriptor(Texture texture, VulkanImage.Layout layout) { this(texture.getImage(), texture, layout); } - public ImageDescriptor(ImageView view, Sampler sampler, Image.Layout layout) { + public ImageDescriptor(ImageView view, Sampler sampler, VulkanImage.Layout layout) { this.view = view; this.sampler = sampler; this.layout = layout; @@ -25,7 +22,7 @@ public ImageDescriptor(ImageView view, Sampler sampler, Image.Layout layout) { public void fillDescriptorInfo(VkDescriptorImageInfo info) { info.imageView(view.getNativeObject()) .sampler(sampler.getNativeObject()) - .imageLayout(layout.getVkEnum()); + .imageLayout(layout.getEnum()); } public ImageView getView() { @@ -36,7 +33,7 @@ public Sampler getSampler() { return sampler; } - public Image.Layout getLayout() { + public VulkanImage.Layout getLayout() { return layout; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java index 4c76f0bc6b..3a551c7313 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java @@ -1,8 +1,9 @@ package com.jme3.vulkan.devices; +import com.jme3.vulkan.Format; import com.jme3.vulkan.VulkanInstance; -import com.jme3.vulkan.images.Image; -import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.images.VulkanImage; +import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.surface.Surface; import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; @@ -68,7 +69,7 @@ public VkPhysicalDeviceMemoryProperties getMemoryProperties(MemoryStack stack) { } @Override - public int findSupportedMemoryType(MemoryStack stack, int types, Flag flags) { + public int findSupportedMemoryType(MemoryStack stack, int types, Flag flags) { VkPhysicalDeviceMemoryProperties mem = getMemoryProperties(stack); for (int i = 0; i < mem.memoryTypeCount(); i++) { if ((types & (1 << i)) != 0 && (mem.memoryTypes().get(i).propertyFlags() & flags.bits()) != 0) { @@ -79,12 +80,12 @@ public int findSupportedMemoryType(MemoryStack stack, int types, Flag flags); + int findSupportedMemoryType(MemoryStack stack, int types, Flag flags); - Image.Format findSupportedFormat(Image.Tiling tiling, int features, Image.Format... candidates); + Format findSupportedFormat(VulkanImage.Tiling tiling, int features, Format... candidates); boolean querySwapchainSupport(Surface surface); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java index 3086af9673..58a908460b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java @@ -1,7 +1,7 @@ package com.jme3.vulkan.frames; /** - * Maps resources to frame indices. + * Immutably maps frame indices to resources. * * @param resource type */ diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java index 053744d838..104bf3c39c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -1,16 +1,18 @@ package com.jme3.vulkan.images; import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.AbstractNative; +import com.jme3.vulkan.Format; +import com.jme3.vulkan.SharingMode; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemoryRegion; import com.jme3.vulkan.util.Flag; +import com.jme3.vulkan.util.LibEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkImageCreateInfo; import org.lwjgl.vulkan.VkImageMemoryBarrier; -import org.lwjgl.vulkan.VkImageViewCreateInfo; import org.lwjgl.vulkan.VkMemoryRequirements; import java.nio.LongBuffer; @@ -18,60 +20,22 @@ import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; -public class GpuImage implements Image { +public class GpuImage extends AbstractNative implements VulkanImage { private final LogicalDevice device; - private final NativeReference ref; - private final long id; - private final MemoryRegion memory; - private final int type, width, height, depth; - private final Image.Format format; - private final Image.Tiling tiling; + private final LibEnum type; + private MemoryRegion memory; - public GpuImage(LogicalDevice device, int width, int height, Image.Format format, - Image.Tiling tiling, Flag usage, Flag mem) { - this(device, VK_IMAGE_TYPE_2D, width, height, 1, format, tiling, usage, mem); - } + private int width, height, depth; + private int mipmaps, layers; + private Flag usage; + private Format format = Format.RGBA8_SRGB; + private LibEnum tiling = Tiling.Optimal; + private LibEnum sharing = SharingMode.Exclusive; - public GpuImage(LogicalDevice device, int type, int width, int height, int depth, - Image.Format format, Image.Tiling tiling, Flag usage, Flag mem) { + public GpuImage(LogicalDevice device, LibEnum type) { this.device = device; this.type = type; - this.width = width; - this.height = height; - this.depth = depth; - this.format = format; - this.tiling = tiling; - try (MemoryStack stack = MemoryStack.stackPush()) { - VkImageCreateInfo create = VkImageCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) - .imageType(type) - .mipLevels(1) - .arrayLayers(1) - .format(format.getVkEnum()) - .tiling(tiling.getVkEnum()) - .initialLayout(VK_IMAGE_LAYOUT_UNDEFINED) - .usage(usage.bits()) - .samples(VK_SAMPLE_COUNT_1_BIT) - .sharingMode(VK_SHARING_MODE_EXCLUSIVE); - create.extent().width(width).height(height).depth(depth); - LongBuffer idBuf = stack.mallocLong(1); - check(vkCreateImage(device.getNativeObject(), create, null, idBuf), - "Failed to create image."); - id = idBuf.get(0); - VkMemoryRequirements memReq = VkMemoryRequirements.malloc(stack); - vkGetImageMemoryRequirements(device.getNativeObject(), id, memReq); - memory = new MemoryRegion(device, memReq.size(), device.getPhysicalDevice().findSupportedMemoryType( - stack, memReq.memoryTypeBits(), mem)); - memory.bind(this, 0); - } - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - } - - @Override - public ImageView createView(VkImageViewCreateInfo create) { - return new ImageView(this, create); } @Override @@ -80,7 +44,7 @@ public LogicalDevice getDevice() { } @Override - public int getType() { + public LibEnum getType() { return type; } @@ -100,63 +64,161 @@ public int getDepth() { } @Override - public Image.Format getFormat() { - return format; + public int getMipmaps() { + return mipmaps; } @Override - public Image.Tiling getTiling() { - return tiling; + public int getLayers() { + return layers; } @Override - public Long getNativeObject() { - return id; + public Flag getUsage() { + return usage; } @Override - public Runnable createNativeDestroyer() { - return () -> vkDestroyImage(device.getNativeObject(), id, null); + public Format getFormat() { + return format; } @Override - public void prematureNativeDestruction() {} + public LibEnum getTiling() { + return tiling; + } @Override - public NativeReference getNativeReference() { - return ref; + public LibEnum getSharingMode() { + return sharing; } - public void transitionLayout(CommandBuffer commands, Image.Layout srcLayout, Image.Layout dstLayout) { + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyImage(device.getNativeObject(), object, null); + } + + // todo: replace with transition autocloseable and deprecate this method + public void transitionLayout(CommandBuffer commands, Layout srcLayout, Layout dstLayout) { try (MemoryStack stack = MemoryStack.stackPush()) { - int[] args = Image.Layout.getTransferArguments(srcLayout, dstLayout); + int[] args = VulkanImage.Layout.getTransferArguments(srcLayout, dstLayout); VkImageMemoryBarrier.Buffer barrier = VkImageMemoryBarrier.calloc(1, stack) .sType(VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) - .oldLayout(srcLayout.getVkEnum()) - .newLayout(dstLayout.getVkEnum()) + .oldLayout(srcLayout.getEnum()) + .newLayout(dstLayout.getEnum()) .srcQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) .dstQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) // for transfering queue ownership - .image(id) + .image(object) .srcAccessMask(args[0]) .dstAccessMask(args[1]); barrier.subresourceRange() .baseMipLevel(0) .levelCount(1) .baseArrayLayer(0) - .layerCount(1); - int aspect = 0; - if (format.isColor()) { - aspect |= VK_IMAGE_ASPECT_COLOR_BIT; - } - if (format.isDepth()) { - aspect |= VK_IMAGE_ASPECT_DEPTH_BIT; - } - if (format.isStencil()) { - aspect |= VK_IMAGE_ASPECT_STENCIL_BIT; - } - barrier.subresourceRange().aspectMask(aspect); + .layerCount(1) + .aspectMask(format.getAspects().bits()); vkCmdPipelineBarrier(commands.getBuffer(), args[2], args[3], 0, null, null, barrier); } } + public Builder build() { + return new Builder(); + } + + public class Builder extends AbstractNative.Builder { + + private Flag mem; + private LibEnum layout = Layout.Undefined; + + @Override + protected void build() { + VkImageCreateInfo create = VkImageCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) + .imageType(type.getEnum()) + .mipLevels(mipmaps) + .arrayLayers(layers) + .format(format.getVkEnum()) + .tiling(tiling.getEnum()) + .initialLayout(layout.getEnum()) + .usage(usage.bits()) + .samples(VK_SAMPLE_COUNT_1_BIT) // todo: multisampling + .sharingMode(sharing.getEnum()); + create.extent().width(width).height(height).depth(depth); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateImage(device.getNativeObject(), create, null, idBuf), + "Failed to create image."); + object = idBuf.get(0); + VkMemoryRequirements memReq = VkMemoryRequirements.malloc(stack); + vkGetImageMemoryRequirements(device.getNativeObject(), object, memReq); + memory = new MemoryRegion(device, memReq.size(), mem, memReq.memoryTypeBits()); + memory.bind(GpuImage.this, 0); + ref = Native.get().register(GpuImage.this); + device.getNativeReference().addDependent(ref); + } + + public void setWidth(int w) { + width = w; + } + + public void setHeight(int h) { + height = h; + } + + public void setDepth(int d) { + depth = d; + } + + public void setSize(int w) { + width = w; + } + + public void setSize(int w, int h) { + width = w; + height = h; + } + + public void setSize(int w, int h, int d) { + width = w; + height = h; + depth = d; + } + + public void setNumMipmaps(int m) { + mipmaps = m; + } + + public void setNumLayers(int l) { + layers = l; + } + + public void setUsage(Flag u) { + usage = u; + } + + public void setMemoryProps(Flag m) { + this.mem = m; + } + + public void setFormat(Format f) { + format = f; + } + + public void setTiling(LibEnum t) { + tiling = t; + } + + public void setLayout(LibEnum l) { + this.layout = l; + } + + public Flag getMemoryProps() { + return mem; + } + + public LibEnum getLayout() { + return layout; + } + + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java index 15785a63c9..6022d49dd3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java @@ -1,174 +1,13 @@ package com.jme3.vulkan.images; -import com.jme3.util.natives.Native; -import com.jme3.vulkan.devices.LogicalDevice; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.KHRSwapchain; -import org.lwjgl.vulkan.VkImageViewCreateInfo; +import com.jme3.vulkan.Format; +import com.jme3.vulkan.util.LibEnum; -import static org.lwjgl.vulkan.VK10.*; +public interface Image { -public interface Image extends Native { + interface Type extends LibEnum {} - enum Format { - - RGBA32SFloat(VK_FORMAT_R32G32B32A32_SFLOAT, 32 * 4, true, false, false), - RGBA8_SRGB(VK_FORMAT_R8G8B8A8_SRGB, 32, true, false, false), - R8_SRGB(VK_FORMAT_R8_SRGB, 8, true, false, false), - BGR8_SRGB(VK_FORMAT_B8G8R8_SRGB, 24, true, false, false), - ABGR8_SRGB(VK_FORMAT_A8B8G8R8_SRGB_PACK32, 32, true, false, false), - B8G8R8A8_SRGB(VK_FORMAT_B8G8R8A8_SRGB, 32, true, false, false), - - Depth32SFloat(VK_FORMAT_D32_SFLOAT, 32, false, true, false), - Depth32SFloat_Stencil8UInt(VK_FORMAT_D32_SFLOAT_S8_UINT, 40, false, true, true), - Depth24UNorm_Stencil8UInt(VK_FORMAT_D24_UNORM_S8_UINT, 32, false, true, true), - Depth16UNorm(VK_FORMAT_D16_UNORM, 16, false, true, false), - Depth16UNorm_Stencil8UInt(VK_FORMAT_D16_UNORM_S8_UINT, 24, false, true, true); - - private final int vkEnum, bits; - private final boolean color, depth, stencil; - - Format(int vkEnum, int bits, boolean color, boolean depth, boolean stencil) { - this.vkEnum = vkEnum; - this.bits = bits; - this.color = color; - this.depth = depth; - this.stencil = stencil; - } - - public int getVkEnum() { - return vkEnum; - } - - public int getBits() { - return bits; - } - - public boolean isColor() { - return color; - } - - public boolean isDepth() { - return depth; - } - - public boolean isStencil() { - return stencil; - } - - public static Format vkEnum(int vkEnum) { - for (Format f : Format.values()) { - if (f.vkEnum == vkEnum) { - return f; - } - } - throw new UnsupportedOperationException("Format " + vkEnum + " is not supported."); - } - - } - - enum Layout { - - Undefined(VK_IMAGE_LAYOUT_UNDEFINED), - General(VK_IMAGE_LAYOUT_GENERAL), - PreInitialized(VK_IMAGE_LAYOUT_PREINITIALIZED), - ColorAttachmentOptimal(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL), - DepthStencilAttachmentOptimal(VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL), - DepthStencilReadOnlyOptimal(VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL), - TransferSrcOptimal(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL), - TransferDstOptimal(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), - ShaderReadOnlyOptimal(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), - PresentSrc(KHRSwapchain.VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); - - private final int vkEnum; - - Layout(int vkEnum) { - this.vkEnum = vkEnum; - } - - public int getVkEnum() { - return vkEnum; - } - - public static int[] getTransferArguments(Layout srcLayout, Layout dstLayout) { - // output array format: {srcAccessMask, dstAccessMask, srcStage, dstStage} - switch (srcLayout) { - case Undefined: switch (dstLayout) { - case TransferDstOptimal: return new int[] { - 0, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, - VK_PIPELINE_STAGE_TRANSFER_BIT}; - case DepthStencilAttachmentOptimal: return new int[] { - 0, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, - VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT}; - } break; - case TransferDstOptimal: switch (dstLayout) { - case ShaderReadOnlyOptimal: return new int[] { - VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT, - VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT}; - } break; - } - throw new UnsupportedOperationException("Unsupported layout transition: " + srcLayout + " to " + dstLayout); - } - - } - - enum Tiling { - - Optimal(VK_IMAGE_TILING_OPTIMAL), - Linear(VK_IMAGE_TILING_LINEAR); - - private final int vkEnum; - - Tiling(int vkEnum) { - this.vkEnum = vkEnum; - } - - public int getVkEnum() { - return vkEnum; - } - - } - - enum Load { - - Clear(VK_ATTACHMENT_LOAD_OP_CLEAR), - Load(VK_ATTACHMENT_LOAD_OP_LOAD), - DontCare(VK_ATTACHMENT_LOAD_OP_DONT_CARE); - - private final int vkEnum; - - Load(int vkEnum) { - this.vkEnum = vkEnum; - } - - public int getVkEnum() { - return vkEnum; - } - - } - - enum Store { - - Store(VK_ATTACHMENT_STORE_OP_STORE), - DontCare(VK_ATTACHMENT_STORE_OP_DONT_CARE); - - private final int vkEnum; - - Store(int vkEnum) { - this.vkEnum = vkEnum; - } - - public int getVkEnum() { - return vkEnum; - } - - } - - ImageView createView(VkImageViewCreateInfo create); - - LogicalDevice getDevice(); - - int getType(); + LibEnum getType(); int getWidth(); @@ -176,28 +15,10 @@ public int getVkEnum() { int getDepth(); - Format getFormat(); + int getMipmaps(); - Tiling getTiling(); + int getLayers(); - default ImageView createView(int type, int aspects, int baseMip, int mipCount, int baseLayer, int layerCount) { - try (MemoryStack stack = MemoryStack.stackPush()) { - VkImageViewCreateInfo create = VkImageViewCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) - .image(getNativeObject()) - .viewType(type) - .format(getFormat().getVkEnum()); - create.components().r(VK_COMPONENT_SWIZZLE_IDENTITY) - .g(VK_COMPONENT_SWIZZLE_IDENTITY) - .b(VK_COMPONENT_SWIZZLE_IDENTITY) - .a(VK_COMPONENT_SWIZZLE_IDENTITY); - create.subresourceRange().aspectMask(aspects) - .baseMipLevel(baseMip) - .levelCount(mipCount) - .baseArrayLayer(baseLayer) - .layerCount(layerCount); - return createView(create); - } - } + Format getFormat(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageUsage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageUsage.java index a3dc8397a2..3492344c09 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageUsage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageUsage.java @@ -15,15 +15,15 @@ public enum ImageUsage implements Flag { InputAttachment(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT), TransientAttachment(VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT); - private final int vkEnum; + private final int bits; - ImageUsage(int vkEnum) { - this.vkEnum = vkEnum; + ImageUsage(int bits) { + this.bits = bits; } @Override public int bits() { - return vkEnum; + return bits; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java index 5084a8841f..4b92f93ca9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java @@ -1,56 +1,152 @@ package com.jme3.vulkan.images; import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VK10; +import com.jme3.vulkan.AbstractNative; +import com.jme3.vulkan.Swizzle; +import com.jme3.vulkan.util.Flag; +import com.jme3.vulkan.util.LibEnum; import org.lwjgl.vulkan.VkImageViewCreateInfo; -import java.nio.LongBuffer; +import static org.lwjgl.vulkan.VK10.*; -public class ImageView implements Native { +public class ImageView extends AbstractNative { - private final Image image; - private final NativeReference ref; - private final long id; + private final VulkanImage image; + private final LibEnum type; - public ImageView(Image image, VkImageViewCreateInfo create) { + private LibEnum swizzleR = Swizzle.R; + private LibEnum swizzleG = Swizzle.G; + private LibEnum swizzleB = Swizzle.B; + private LibEnum swizzleA = Swizzle.A; + private Flag aspect = VulkanImage.Aspect.Color; + private int baseMipmap = 0; + private int mipmapCount = 1; + private int baseLayer = 0; + private int layerCount = 1; + + public ImageView(VulkanImage image, LibEnum type) { this.image = image; - create.sType(VK10.VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO); - create.image(image.getNativeObject()); - System.out.println("creating imageView: " + toString()); - try (MemoryStack stack = MemoryStack.stackPush()) { - LongBuffer idBuf = stack.mallocLong(1); - VK10.vkCreateImageView(image.getDevice().getNativeObject(), create, null, idBuf); - id = idBuf.get(0); - } - ref = Native.get().register(this); - image.getNativeReference().addDependent(ref); + this.type = type; } @Override - public Long getNativeObject() { - return id; + public Runnable createNativeDestroyer() { + return () -> vkDestroyImageView(image.getDevice().getNativeObject(), object, null); } - @Override - public Runnable createNativeDestroyer() { - return () -> { - System.out.println("destroying imageView: " + toString()); - VK10.vkDestroyImageView(image.getDevice().getNativeObject(), id, null); - }; + public VulkanImage getImage() { + return image; } - @Override - public void prematureNativeDestruction() {} + public LibEnum getType() { + return type; + } - @Override - public NativeReference getNativeReference() { - return ref; + public LibEnum getSwizzleR() { + return swizzleR; } - public Image getImage() { - return image; + public LibEnum getSwizzleG() { + return swizzleG; + } + + public LibEnum getSwizzleB() { + return swizzleB; + } + + public LibEnum getSwizzleA() { + return swizzleA; + } + + public Flag getAspect() { + return aspect; + } + + public int getBaseMipmap() { + return baseMipmap; + } + + public int getMipmapCount() { + return mipmapCount; + } + + public int getBaseLayer() { + return baseLayer; + } + + public int getLayerCount() { + return layerCount; + } + + public Builder build() { + return new Builder(); + } + + public class Builder extends AbstractNative.Builder { + + @Override + protected void build() { + VkImageViewCreateInfo create = VkImageViewCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) + .image(image.getNativeObject()) + .viewType(type.getEnum()) + .format(image.getFormat().getVkEnum()); + create.components() + .r(swizzleR.getEnum()) + .g(swizzleG.getEnum()) + .b(swizzleB.getEnum()) + .a(swizzleA.getEnum()); + create.subresourceRange() + .aspectMask(aspect.bits()) + .baseMipLevel(baseMipmap) + .levelCount(mipmapCount) + .baseArrayLayer(baseLayer) + .layerCount(layerCount); + ref = Native.get().register(ImageView.this); + image.getNativeReference().addDependent(ref); + } + + public void allMipmaps() { + baseMipmap = 0; + mipmapCount = image.getMipmaps(); + } + + public void setSwizzleR(LibEnum swizzleR) { + ImageView.this.swizzleR = swizzleR; + } + + public void setSwizzleG(LibEnum swizzleG) { + ImageView.this.swizzleG = swizzleG; + } + + public void setSwizzleB(LibEnum swizzleB) { + ImageView.this.swizzleB = swizzleB; + } + + public void setSwizzleA(LibEnum swizzleA) { + ImageView.this.swizzleA = swizzleA; + } + + public void setAspect(Flag aspect) { + ImageView.this.aspect = aspect; + } + + public void setBaseMipmap(int baseMipmap) { + ImageView.this.baseMipmap = baseMipmap; + } + + public void setMipmapCount(int mipmapCount) { + ImageView.this.mipmapCount = mipmapCount; + } + + public void setBaseLayer(int baseLayer) { + ImageView.this.baseLayer = baseLayer; + } + + public void setLayerCount(int layerCount) { + ImageView.this.layerCount = layerCount; + } + } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java new file mode 100644 index 0000000000..a2c025dc51 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java @@ -0,0 +1,186 @@ +package com.jme3.vulkan.images; + +import com.jme3.util.natives.Native; +import com.jme3.vulkan.SharingMode; +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.util.Flag; +import com.jme3.vulkan.util.LibEnum; +import org.lwjgl.vulkan.KHRSwapchain; + +import static org.lwjgl.vulkan.VK10.*; + +public interface VulkanImage extends Image, Native { + + enum Type implements Image.Type { + + OneDemensional(VK_IMAGE_TYPE_1D), + TwoDemensional(VK_IMAGE_TYPE_2D), + ThreeDemensional(VK_IMAGE_TYPE_3D); + + private final int vkEnum; + + Type(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + + } + + enum Layout implements LibEnum { + + Undefined(VK_IMAGE_LAYOUT_UNDEFINED), + General(VK_IMAGE_LAYOUT_GENERAL), + PreInitialized(VK_IMAGE_LAYOUT_PREINITIALIZED), + ColorAttachmentOptimal(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL), + DepthStencilAttachmentOptimal(VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL), + DepthStencilReadOnlyOptimal(VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL), + TransferSrcOptimal(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL), + TransferDstOptimal(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), + ShaderReadOnlyOptimal(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), + PresentSrc(KHRSwapchain.VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + + private final int vkEnum; + + Layout(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + + @SuppressWarnings("SwitchStatementWithTooFewBranches") + public static int[] getTransferArguments(Layout srcLayout, Layout dstLayout) { + // output array format: {srcAccessMask, dstAccessMask, srcStage, dstStage} + switch (srcLayout) { + case Undefined: switch (dstLayout) { + case TransferDstOptimal: return new int[] { + 0, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT}; + case DepthStencilAttachmentOptimal: return new int[] { + 0, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, + VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT}; + } break; + case TransferDstOptimal: switch (dstLayout) { + case ShaderReadOnlyOptimal: return new int[] { + VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT}; + } break; + } + throw new UnsupportedOperationException("Unsupported layout transition: " + srcLayout + " to " + dstLayout); + } + + } + + enum Tiling implements LibEnum { + + Optimal(VK_IMAGE_TILING_OPTIMAL), + Linear(VK_IMAGE_TILING_LINEAR); + + private final int vkEnum; + + Tiling(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + + } + + enum Load implements LibEnum { + + Clear(VK_ATTACHMENT_LOAD_OP_CLEAR), + Load(VK_ATTACHMENT_LOAD_OP_LOAD), + DontCare(VK_ATTACHMENT_LOAD_OP_DONT_CARE); + + private final int vkEnum; + + Load(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + + } + + enum Store implements LibEnum { + + Store(VK_ATTACHMENT_STORE_OP_STORE), + DontCare(VK_ATTACHMENT_STORE_OP_DONT_CARE); + + private final int vkEnum; + + Store(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + + } + + enum View implements LibEnum { + + OneDemensional(VK_IMAGE_VIEW_TYPE_1D), + TwoDemensional(VK_IMAGE_VIEW_TYPE_2D), + ThreeDemensional(VK_IMAGE_VIEW_TYPE_3D), + OneDemensionalArray(VK_IMAGE_VIEW_TYPE_1D_ARRAY), + TwoDemensionalArray(VK_IMAGE_VIEW_TYPE_2D_ARRAY), + Cube(VK_IMAGE_VIEW_TYPE_CUBE), + CubeArray(VK_IMAGE_VIEW_TYPE_CUBE_ARRAY); + + private final int vkEnum; + + View(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + + } + + enum Aspect implements Flag { + + Color(VK_IMAGE_ASPECT_COLOR_BIT), + Depth(VK_IMAGE_ASPECT_DEPTH_BIT), + Stencil(VK_IMAGE_ASPECT_STENCIL_BIT), + MetaData(VK_IMAGE_ASPECT_METADATA_BIT); + + private final int bits; + + Aspect(int bits) { + this.bits = bits; + } + + @Override + public int bits() { + return bits; + } + + } + + LogicalDevice getDevice(); + + Flag getUsage(); + + LibEnum getTiling(); + + LibEnum getSharingMode(); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index 05f0ffeade..1cc84f3c98 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -2,9 +2,10 @@ import com.jme3.asset.*; import com.jme3.util.BufferUtils; +import com.jme3.vulkan.Format; import com.jme3.vulkan.buffers.BufferUsage; import com.jme3.vulkan.buffers.VulkanBuffer; -import com.jme3.vulkan.memory.MemoryFlag; +import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.commands.CommandPool; @@ -67,7 +68,7 @@ public ImageData load(BufferedImage img, boolean flipY) { } ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * 4); buffer.put(data); - return new ImageData(buffer, width, height, Image.Format.ABGR8_SRGB); + return new ImageData(buffer, width, height, Format.ABGR8_SRGB); } case BufferedImage.TYPE_3BYTE_BGR: { // most common in JPEG images if (flipY) { @@ -75,7 +76,7 @@ public ImageData load(BufferedImage img, boolean flipY) { } ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * 3); buffer.put(data); - return new ImageData(buffer, width, height, Image.Format.BGR8_SRGB); + return new ImageData(buffer, width, height, Format.BGR8_SRGB); } case BufferedImage.TYPE_BYTE_GRAY: { // grayscale fonts if (flipY) { @@ -83,17 +84,17 @@ public ImageData load(BufferedImage img, boolean flipY) { } ByteBuffer buffer = BufferUtils.createByteBuffer(width * height); buffer.put(data); - return new ImageData(buffer, width, height, Image.Format.R8_SRGB); + return new ImageData(buffer, width, height, Format.R8_SRGB); } } if (img.getTransparency() == Transparency.OPAQUE) { ByteBuffer buffer = BufferUtils.createByteBuffer(img.getWidth() * img.getHeight() * 4); for (int y = 0; y < height; y++) { + int ny = y; + if (flipY) { + ny = height - y - 1; + } for (int x = 0; x < width; x++) { - int ny = y; - if (flipY) { - ny = height - y - 1; - } int rgb = img.getRGB(x, ny); byte r = (byte) ((rgb & 0x00FF0000) >> 16); byte g = (byte) ((rgb & 0x0000FF00) >> 8); @@ -103,15 +104,15 @@ public ImageData load(BufferedImage img, boolean flipY) { } } buffer.flip(); - return new ImageData(buffer, width, height, Image.Format.RGBA8_SRGB); + return new ImageData(buffer, width, height, Format.RGBA8_SRGB); } else { ByteBuffer buffer = BufferUtils.createByteBuffer(img.getWidth() * img.getHeight() * 4); - for (int y = 0; y < height; y++){ - for (int x = 0; x < width; x++){ - int ny = y; - if (flipY) { - ny = height - y - 1; - } + for (int y = 0; y < height; y++) { + int ny = y; + if (flipY) { + ny = height - y - 1; + } + for (int x = 0; x < width; x++) { int rgb = img.getRGB(x,ny); byte a = (byte) ((rgb & 0xFF000000) >> 24); byte r = (byte) ((rgb & 0x00FF0000) >> 16); @@ -121,7 +122,7 @@ public ImageData load(BufferedImage img, boolean flipY) { } } buffer.flip(); - return new ImageData(buffer, width, height, Image.Format.RGBA8_SRGB); + return new ImageData(buffer, width, height, Format.RGBA8_SRGB); } } @@ -154,19 +155,24 @@ private void flipImage(byte[] img, int width, int height, int bpp) { private GpuImage loadGpuImage(CommandPool transferPool, ImageData data) { try (MemoryStack stack = MemoryStack.stackPush()) { GpuBuffer staging = new VulkanBuffer(transferPool.getDevice(), MemorySize.bytes(data.getBuffer().limit()), - BufferUsage.TransferSrc, Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCached), false); - staging.copy(stack, data.getBuffer()); - GpuImage image = new GpuImage(transferPool.getDevice(), data.getWidth(), data.getHeight(), data.getFormat(), - Image.Tiling.Optimal, Flag.of(ImageUsage.TransferDst, ImageUsage.Sampled), - MemoryFlag.DeviceLocal); + BufferUsage.TransferSrc, Flag.of(MemoryProp.HostVisible, MemoryProp.HostCached), false); + staging.copy(data.getBuffer()); + GpuImage image = new GpuImage(transferPool.getDevice(), VulkanImage.Type.TwoDemensional); + try (GpuImage.Builder i = image.build()) { + i.setSize(data.getWidth(), data.getHeight()); + i.setFormat(data.getFormat()); + i.setTiling(VulkanImage.Tiling.Optimal); + i.setUsage(Flag.of(ImageUsage.TransferDst, ImageUsage.Sampled)); + i.setMemoryProps(MemoryProp.DeviceLocal); + } CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); commands.begin(); - image.transitionLayout(commands, Image.Layout.Undefined, Image.Layout.TransferDstOptimal); + image.transitionLayout(commands, VulkanImage.Layout.Undefined, VulkanImage.Layout.TransferDstOptimal); VkBufferImageCopy.Buffer region = VkBufferImageCopy.calloc(1, stack) .bufferOffset(0) .bufferRowLength(0) // padding bytes .bufferImageHeight(0); // padding bytes - region.imageSubresource().aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + region.imageSubresource().aspectMask(VulkanImage.Aspect.Color.bits()) .mipLevel(0) .baseArrayLayer(0) .layerCount(1); @@ -174,7 +180,7 @@ private GpuImage loadGpuImage(CommandPool transferPool, ImageData data) { region.imageExtent().set(data.getWidth(), data.getHeight(), 1); vkCmdCopyBufferToImage(commands.getBuffer(), staging.getId(), image.getNativeObject(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, region); - image.transitionLayout(commands, Image.Layout.TransferDstOptimal, Image.Layout.ShaderReadOnlyOptimal); + image.transitionLayout(commands, VulkanImage.Layout.TransferDstOptimal, VulkanImage.Layout.ShaderReadOnlyOptimal); commands.end(); commands.submit(SyncGroup.ASYNC); transferPool.getQueue().waitIdle(); @@ -237,9 +243,9 @@ public static class ImageData { private final ByteBuffer buffer; private final int width, height; - private final Image.Format format; + private final Format format; - public ImageData(ByteBuffer buffer, int width, int height, Image.Format format) { + public ImageData(ByteBuffer buffer, int width, int height, Format format) { this.buffer = buffer; this.width = width; this.height = height; @@ -258,7 +264,7 @@ public int getHeight() { return height; } - public Image.Format getFormat() { + public Format getFormat() { return format; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/SetAllocationInfo.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/SetAllocationInfo.java deleted file mode 100644 index a9acb3634e..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/SetAllocationInfo.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.jme3.vulkan.material; - -import com.jme3.vulkan.descriptors.DescriptorSetLayout; - -public class SetAllocationInfo { - - private final UniformSet set; - private final DescriptorSetLayout layout; - - public SetAllocationInfo(UniformSet set, DescriptorSetLayout layout) { - this.set = set; - this.layout = layout; - } - - public UniformSet getSet() { - return set; - } - - public DescriptorSetLayout getLayout() { - return layout; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java index ce31d6b41f..d25650ba1e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java @@ -2,7 +2,7 @@ import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.DescriptorPool; -import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.images.VulkanImage; import com.jme3.vulkan.material.uniforms.BufferUniform; import com.jme3.vulkan.material.uniforms.TextureUniform; import com.jme3.vulkan.shader.ShaderStage; @@ -12,7 +12,7 @@ public class TestMaterial extends Material { private final BufferUniform matrices = new BufferUniform( "Matrices", Descriptor.UniformBuffer, 0, ShaderStage.Vertex); private final TextureUniform baseColorMap = new TextureUniform( - "BaseColorMap", Image.Layout.ShaderReadOnlyOptimal, 1, ShaderStage.Fragment); + "BaseColorMap", VulkanImage.Layout.ShaderReadOnlyOptimal, 1, ShaderStage.Fragment); public TestMaterial(DescriptorPool pool) { super(pool); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index aac9acc69f..e4e3f3fee7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -4,8 +4,8 @@ import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.frames.VersionedResource; -import com.jme3.vulkan.images.Image; import com.jme3.vulkan.images.Texture; +import com.jme3.vulkan.images.VulkanImage; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; @@ -14,11 +14,11 @@ public class TextureUniform extends AbstractUniform { - private final Image.Layout layout; + private final VulkanImage.Layout layout; private VersionedResource texture; private long variant = 0L; - public TextureUniform(String name, Image.Layout layout, int bindingIndex, Flag stages) { + public TextureUniform(String name, VulkanImage.Layout layout, int bindingIndex, Flag stages) { super(name, Descriptor.CombinedImageSampler, bindingIndex, stages); this.layout = layout; } @@ -29,7 +29,7 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { VkDescriptorImageInfo.Buffer info = VkDescriptorImageInfo.calloc(1, stack) .imageView(tex.getImage().getNativeObject()) .sampler(tex.getNativeObject()) - .imageLayout(layout.getVkEnum()); + .imageLayout(layout.getEnum()); write.pImageInfo(info) .descriptorType(type.getVkEnum()) .dstBinding(bindingIndex) @@ -65,7 +65,7 @@ public boolean isBindingCompatible(SetLayoutBinding binding) { && binding.getDescriptors() == 1; } - public Image.Layout getLayout() { + public VulkanImage.Layout getLayout() { return layout; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryFlag.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryProp.java similarity index 86% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryFlag.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryProp.java index 1614125d15..cd7a9a3d8d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryFlag.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryProp.java @@ -4,7 +4,7 @@ import static org.lwjgl.vulkan.VK10.*; -public enum MemoryFlag implements Flag { +public enum MemoryProp implements Flag { HostVisible(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT), HostCoherent(VK_MEMORY_PROPERTY_HOST_COHERENT_BIT), @@ -14,7 +14,7 @@ public enum MemoryFlag implements Flag { private final int vkEnum; - MemoryFlag(int vkEnum) { + MemoryProp(int vkEnum) { this.vkEnum = vkEnum; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java index d8725985b5..75a72941a8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java @@ -5,8 +5,10 @@ import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkMemoryAllocateInfo; import java.nio.*; @@ -19,18 +21,21 @@ public class MemoryRegion implements Native { private final LogicalDevice device; private final NativeReference ref; + private final Flag flags; private final long id; private final long size; private final AtomicBoolean mapped = new AtomicBoolean(false); + private final PointerBuffer mapping = MemoryUtil.memCallocPointer(1); - public MemoryRegion(LogicalDevice device, long size, int typeIndex) { + public MemoryRegion(LogicalDevice device, long size, Flag flags, int typeBits) { this.device = device; + this.flags = flags; this.size = size; try (MemoryStack stack = MemoryStack.stackPush()) { VkMemoryAllocateInfo allocate = VkMemoryAllocateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO) .allocationSize(size) - .memoryTypeIndex(typeIndex); + .memoryTypeIndex(device.getPhysicalDevice().findSupportedMemoryType(stack, typeBits, flags)); LongBuffer idBuf = stack.mallocLong(1); check(vkAllocateMemory(device.getNativeObject(), allocate, null, idBuf), "Failed to allocate buffer memory."); @@ -47,7 +52,10 @@ public Long getNativeObject() { @Override public Runnable createNativeDestroyer() { - return () -> vkFreeMemory(device.getNativeObject(), id, null); + return () -> { + vkFreeMemory(device.getNativeObject(), id, null); + MemoryUtil.memFree(mapping); + }; } @Override @@ -68,19 +76,30 @@ public void bind(Image image, long offset) { "Failed to bind image memory."); } - public PointerBuffer map(MemoryStack stack, int offset, int size, int flags) { + public PointerBuffer map() { + return map(0L, VK_WHOLE_SIZE); + } + + public PointerBuffer map(long offset) { + return map(offset, VK_WHOLE_SIZE); + } + + public PointerBuffer map(long offset, long size) { if (mapped.getAndSet(true)) { throw new IllegalStateException("Memory already mapped."); } - PointerBuffer data = stack.mallocPointer(1); - vkMapMemory(device.getNativeObject(), id, offset, size, flags, data); - return data; + if (!this.flags.contains(MemoryProp.HostVisible)) { + throw new IllegalStateException("Cannot map memory that is not host visible."); + } + vkMapMemory(device.getNativeObject(), id, offset, size, 0, mapping); + return mapping; } public void unmap() { if (!mapped.getAndSet(false)) { throw new IllegalStateException("Memory is not mapped."); } + mapping.put(0, VK_NULL_HANDLE); vkUnmapMemory(device.getNativeObject(), id); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java new file mode 100644 index 0000000000..0729c190c7 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java @@ -0,0 +1,161 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector2f; +import com.jme3.math.Vector3f; +import com.jme3.math.Vector4f; +import com.jme3.vulkan.Format; + +import java.nio.ByteBuffer; + +public class AttributeModifier implements AutoCloseable { + + private final VertexAttribute attribute; + private final ByteBuffer buffer; + + public AttributeModifier(VertexAttribute attribute) { + this.attribute = attribute; + this.buffer = attribute.getBinding().map(); + } + + @Override + public void close() { + attribute.getBinding().unmap(); + } + + public int transformPosition(int vertex) { + return attribute.getBinding().getStride() * vertex + attribute.getOffset(); + } + + public AttributeModifier putByte(int vertex, int component, byte value) { + attribute.getFormat().getComponent(component).putByte(buffer, transformPosition(vertex), value); + return this; + } + + public AttributeModifier putShort(int vertex, int component, short value) { + attribute.getFormat().getComponent(component).putShort(buffer, transformPosition(vertex), value); + return this; + } + + public AttributeModifier putInt(int vertex, int component, int value) { + attribute.getFormat().getComponent(component).putInt(buffer, transformPosition(vertex), value); + return this; + } + + public AttributeModifier putFloat(int vertex, int component, float value) { + attribute.getFormat().getComponent(component).putFloat(buffer, transformPosition(vertex), value); + return this; + } + + public AttributeModifier putDouble(int vertex, int component, double value) { + attribute.getFormat().getComponent(component).putDouble(buffer, transformPosition(vertex), value); + return this; + } + + public AttributeModifier putLong(int vertex, int component, long value) { + attribute.getFormat().getComponent(component).putLong(buffer, transformPosition(vertex), value); + return this; + } + + public AttributeModifier putVector2(int vertex, int baseComponent, Vector2f value) { + vertex = transformPosition(vertex); + attribute.getFormat().getComponent(baseComponent++).putFloat(buffer, vertex, value.x); + attribute.getFormat().getComponent(baseComponent ).putFloat(buffer, vertex, value.y); + return this; + } + + public AttributeModifier putVector3(int vertex, int baseComponent, Vector3f value) { + vertex = transformPosition(vertex); + Format f = attribute.getFormat(); + f.getComponent(baseComponent++).putFloat(buffer, vertex, value.x); + f.getComponent(baseComponent++).putFloat(buffer, vertex, value.y); + f.getComponent(baseComponent ).putFloat(buffer, vertex, value.z); + return this; + } + + public AttributeModifier putVector4(int vertex, int baseComponent, Vector4f value) { + vertex = transformPosition(vertex); + Format f = attribute.getFormat(); + f.getComponent(baseComponent++).putFloat(buffer, vertex, value.x); + f.getComponent(baseComponent++).putFloat(buffer, vertex, value.y); + f.getComponent(baseComponent++).putFloat(buffer, vertex, value.z); + f.getComponent(baseComponent ).putFloat(buffer, vertex, value.w); + return this; + } + + public AttributeModifier putColor(int vertex, int baseComponent, ColorRGBA value) { + vertex = transformPosition(vertex); + Format f = attribute.getFormat(); + f.getComponent(baseComponent++).putFloat(buffer, vertex, value.r); + f.getComponent(baseComponent++).putFloat(buffer, vertex, value.g); + f.getComponent(baseComponent++).putFloat(buffer, vertex, value.b); + f.getComponent(baseComponent ).putFloat(buffer, vertex, value.a); + return this; + } + + public byte getByte(int vertex, int component) { + return attribute.getFormat().getComponent(component).getByte(buffer, transformPosition(vertex)); + } + + public short getShort(int vertex, int component) { + return attribute.getFormat().getComponent(component).getShort(buffer, transformPosition(vertex)); + } + + public int getInt(int vertex, int component) { + return attribute.getFormat().getComponent(component).getInt(buffer, transformPosition(vertex)); + } + + public float getFloat(int vertex, int component) { + return attribute.getFormat().getComponent(component).getFloat(buffer, transformPosition(vertex)); + } + + public double getDouble(int vertex, int component) { + return attribute.getFormat().getComponent(component).getDouble(buffer, transformPosition(vertex)); + } + + public long getLong(int vertex, int component) { + return attribute.getFormat().getComponent(component).getLong(buffer, transformPosition(vertex)); + } + + public Vector2f getVector2(int vertex, int baseComponent, Vector2f store) { + if (store == null) { + store = new Vector2f(); + } + return store.set( + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent )); + } + + public Vector3f getVector3(int vertex, int baseComponent, Vector3f store) { + if (store == null) { + store = new Vector3f(); + } + return store.set( + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent )); + } + + public Vector4f getVector4(int vertex, int baseComponent, Vector4f store) { + if (store == null) { + store = new Vector4f(); + } + return store.set( + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent )); + } + + public ColorRGBA getColor(int vertex, int baseComponent, ColorRGBA store) { + if (store == null) { + store = new ColorRGBA(); + } + return store.set( + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent )); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/FlexibleMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/FlexibleMesh.java new file mode 100644 index 0000000000..7e4595a299 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/FlexibleMesh.java @@ -0,0 +1,35 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.vulkan.buffers.BufferMode; +import com.jme3.vulkan.buffers.GpuBuffer; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class FlexibleMesh { + + protected final MeshDescription description; + protected final List buffers = new ArrayList<>(); + private final Map attrModes = new HashMap<>(); + + public FlexibleMesh(MeshDescription description) { + this.description = description; + } + + protected void declareAttribute(String name, BufferMode mode) { + attrModes.put(name, mode); + } + + public static class VertexBuffer { + + private final GpuBuffer buffer; + + public VertexBuffer(GpuBuffer buffer) { + this.buffer = buffer; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java new file mode 100644 index 0000000000..aef33f88ff --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java @@ -0,0 +1,20 @@ +package com.jme3.vulkan.mesh; + +import static org.lwjgl.vulkan.VK10.*; + +public enum InputRate { + + Vertex(VK_VERTEX_INPUT_RATE_VERTEX), + Instance(VK_VERTEX_INPUT_RATE_INSTANCE); + + private final int vkEnum; + + InputRate(int vkEnum) { + this.vkEnum = vkEnum; + } + + public int getVkEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java index 746edc65c1..fe7d866e6b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java @@ -1,30 +1,9 @@ package com.jme3.vulkan.mesh; import com.jme3.vulkan.buffers.GpuBuffer; -import com.jme3.vulkan.commands.CommandBuffer; -import org.lwjgl.system.MemoryStack; -import java.nio.LongBuffer; -import java.util.ArrayList; -import java.util.List; +public interface Mesh { -import static org.lwjgl.vulkan.VK10.*; - -public class Mesh { - - private GpuBuffer indexBuffer; - private final List vertexBuffers = new ArrayList<>(); - - public Mesh() { - - } - - public void bindVertexBuffers(CommandBuffer cmd) { - - } - - public void draw(CommandBuffer cmd) { - vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.size().getElements(), 1, 0, 0, 0); - } + GpuBuffer getBindingBuffer(int binding); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NewMeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NewMeshDescription.java new file mode 100644 index 0000000000..9588253a1d --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NewMeshDescription.java @@ -0,0 +1,10 @@ +package com.jme3.vulkan.mesh; + +import java.util.ArrayList; +import java.util.Collection; + +public class NewMeshDescription { + + private final Collection bindings = new ArrayList<>(); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java similarity index 61% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java index 5395f6013b..24daf1c6c1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/TestCaseMeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java @@ -1,11 +1,12 @@ -package com.jme3.vulkan; +package com.jme3.vulkan.mesh; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; -import com.jme3.vulkan.mesh.MeshDescription; import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.Struct; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; +import org.lwjgl.vulkan.VkViewport; import static org.lwjgl.vulkan.VK10.*; @@ -20,21 +21,26 @@ public TestCaseMeshDescription() { bindings = VkVertexInputBindingDescription.calloc(1) .binding(0) .stride(Float.BYTES * 8) // bytes per vertex - .inputRate(VK_VERTEX_INPUT_RATE_VERTEX); - // for each attribute in each vertex buffer - attributes = VkVertexInputAttributeDescription.calloc(3); - attributes.get(0).binding(0) - .location(0) - .format(VK_FORMAT_R32G32B32_SFLOAT) - .offset(0); - attributes.get(1).binding(0) - .location(1) - .format(VK_FORMAT_R32G32B32_SFLOAT) - .offset(Float.BYTES * 3); - attributes.get(2).binding(0) - .location(2) - .format(VK_FORMAT_R32G32_SFLOAT) - .offset(Float.BYTES * 6); + .inputRate(InputRate.Vertex.getVkEnum()); + try (VkViewport struct = VkViewport.calloc()) { + // for each attribute in each vertex buffer + attributes = VkVertexInputAttributeDescription.calloc(3); + attributes.get(0) + .binding(0) + .location(0) + .format(VK_FORMAT_R32G32B32_SFLOAT) + .offset(0); + attributes.get(1) + .binding(0) + .location(1) + .format(VK_FORMAT_R32G32B32_SFLOAT) + .offset(Float.BYTES * 3); + attributes.get(2) + .binding(0) + .location(2) + .format(VK_FORMAT_R32G32_SFLOAT) + .offset(Float.BYTES * 6); + } ref = Native.get().register(this); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java new file mode 100644 index 0000000000..0a9dbfca2a --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java @@ -0,0 +1,45 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.vulkan.Format; + +public class VertexAttribute { + + private final VertexBinding binding; + private final String name; + private final Format format; + private final int location; + private final int offset; + + public VertexAttribute(VertexBinding binding, String name, Format format, int location, int offset) { + this.binding = binding; + this.name = name; + this.format = format; + this.location = location; + this.offset = offset; + } + + public AttributeModifier modify() { + return new AttributeModifier(this); + } + + public String getName() { + return name; + } + + public VertexBinding getBinding() { + return binding; + } + + public Format getFormat() { + return format; + } + + public int getLocation() { + return location; + } + + public int getOffset() { + return offset; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java new file mode 100644 index 0000000000..63ede20874 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java @@ -0,0 +1,73 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.vulkan.buffers.GpuBuffer; + +import java.nio.ByteBuffer; + +public class VertexBinding { + + private final GpuBuffer buffer; + private final int stride; + private final InputRate rate; + private ModificationSession session; + + public VertexBinding(GpuBuffer buffer, int stride, InputRate rate) { + this.buffer = buffer; + this.stride = stride; + this.rate = rate; + } + + public ByteBuffer map() { + if (session == null) { + session = new ModificationSession(); + return session.data; + } + return session.addModifier(); + } + + public void unmap() { + if (session == null) { + throw new NullPointerException("No modification session is mapped."); + } + if (!session.removeModifier()) { + session = null; + } + } + + public GpuBuffer getBuffer() { + return buffer; + } + + public int getStride() { + return stride; + } + + public InputRate getRate() { + return rate; + } + + public class ModificationSession { + + private final ByteBuffer data; + private int modifiers = 1; + + private ModificationSession() { + this.data = buffer.mapBytes(0, buffer.size().getBytes()); + } + + public ByteBuffer addModifier() { + modifiers++; + return data; + } + + public boolean removeModifier() { + if (--modifiers == 0) { + buffer.unmap(); + return false; + } + return true; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Attachment.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Attachment.java index a269eac314..51be558383 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Attachment.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Attachment.java @@ -1,6 +1,7 @@ package com.jme3.vulkan.pass; -import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.Format; +import com.jme3.vulkan.images.VulkanImage; import org.lwjgl.vulkan.VkAttachmentDescription; /** @@ -9,16 +10,16 @@ public class Attachment { private final int position; - private final Image.Format format; + private final Format format; private final int samples; - private Image.Load load = Image.Load.Clear; - private Image.Store store = Image.Store.Store; - private Image.Load stencilLoad = Image.Load.DontCare; - private Image.Store stencilStore = Image.Store.DontCare; - private Image.Layout initialLayout = Image.Layout.Undefined; - private Image.Layout finalLayout = Image.Layout.General; - - protected Attachment(int position, Image.Format format, int samples) { + private VulkanImage.Load load = VulkanImage.Load.Clear; + private VulkanImage.Store store = VulkanImage.Store.Store; + private VulkanImage.Load stencilLoad = VulkanImage.Load.DontCare; + private VulkanImage.Store stencilStore = VulkanImage.Store.DontCare; + private VulkanImage.Layout initialLayout = VulkanImage.Layout.Undefined; + private VulkanImage.Layout finalLayout = VulkanImage.Layout.General; + + protected Attachment(int position, Format format, int samples) { this.position = position; this.format = format; this.samples = samples; @@ -36,42 +37,42 @@ protected Attachment(int position, Attachment base) { this.finalLayout = base.finalLayout; } - public AttachmentReference createReference(Image.Layout layout) { + public AttachmentReference createReference(VulkanImage.Layout layout) { return new AttachmentReference(this, layout); } public void fillStruct(VkAttachmentDescription struct) { struct.format(format.getVkEnum()) .samples(samples) - .loadOp(load.getVkEnum()) - .storeOp(store.getVkEnum()) - .stencilLoadOp(stencilLoad.getVkEnum()) - .stencilStoreOp(stencilStore.getVkEnum()) - .initialLayout(initialLayout.getVkEnum()) - .finalLayout(finalLayout.getVkEnum()); + .loadOp(load.getEnum()) + .storeOp(store.getEnum()) + .stencilLoadOp(stencilLoad.getEnum()) + .stencilStoreOp(stencilStore.getEnum()) + .initialLayout(initialLayout.getEnum()) + .finalLayout(finalLayout.getEnum()); } - public void setLoad(Image.Load load) { + public void setLoad(VulkanImage.Load load) { this.load = load; } - public void setStencilLoad(Image.Load stencilLoad) { + public void setStencilLoad(VulkanImage.Load stencilLoad) { this.stencilLoad = stencilLoad; } - public void setStore(Image.Store store) { + public void setStore(VulkanImage.Store store) { this.store = store; } - public void setStencilStore(Image.Store stencilStore) { + public void setStencilStore(VulkanImage.Store stencilStore) { this.stencilStore = stencilStore; } - public void setInitialLayout(Image.Layout initialLayout) { + public void setInitialLayout(VulkanImage.Layout initialLayout) { this.initialLayout = initialLayout; } - public void setFinalLayout(Image.Layout finalLayout) { + public void setFinalLayout(VulkanImage.Layout finalLayout) { this.finalLayout = finalLayout; } @@ -79,7 +80,7 @@ public int getPosition() { return position; } - public Image.Format getFormat() { + public Format getFormat() { return format; } @@ -87,27 +88,27 @@ public int getSamples() { return samples; } - public Image.Load getLoad() { + public VulkanImage.Load getLoad() { return load; } - public Image.Load getStencilLoad() { + public VulkanImage.Load getStencilLoad() { return stencilLoad; } - public Image.Store getStore() { + public VulkanImage.Store getStore() { return store; } - public Image.Store getStencilStore() { + public VulkanImage.Store getStencilStore() { return stencilStore; } - public Image.Layout getInitialLayout() { + public VulkanImage.Layout getInitialLayout() { return initialLayout; } - public Image.Layout getFinalLayout() { + public VulkanImage.Layout getFinalLayout() { return finalLayout; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java index 097be3efd1..b45412dd13 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java @@ -1,6 +1,6 @@ package com.jme3.vulkan.pass; -import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.images.VulkanImage; import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkAttachmentReference; @@ -10,23 +10,23 @@ public class AttachmentReference { private final Attachment attachment; - private final Image.Layout layout; + private final VulkanImage.Layout layout; - protected AttachmentReference(Attachment attachment, Image.Layout layout) { + protected AttachmentReference(Attachment attachment, VulkanImage.Layout layout) { this.attachment = attachment; this.layout = layout; } public void fillStruct(VkAttachmentReference struct) { struct.attachment(getAttachmentPosition()) - .layout(layout.getVkEnum()); + .layout(layout.getEnum()); } public Attachment getAttachment() { return attachment; } - public Image.Layout getLayout() { + public VulkanImage.Layout getLayout() { return layout; } @@ -42,7 +42,7 @@ public boolean isCompatible(AttachmentReference ref) { return isUnused() == ref.isUnused() && (isUnused() || attachment.isCompatible(ref.attachment)) && layout == ref.layout; } - public static AttachmentReference unused(Image.Layout layout) { + public static AttachmentReference unused(VulkanImage.Layout layout) { return new AttachmentReference(null, layout); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java index 194762e494..8d8c46ade5 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java @@ -1,10 +1,10 @@ package com.jme3.vulkan.pass; import com.jme3.util.natives.Native; +import com.jme3.vulkan.Format; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.images.Image; import com.jme3.vulkan.pipelines.FrameBuffer; import com.jme3.vulkan.pipelines.PipelineBindPoint; import org.lwjgl.system.MemoryStack; @@ -164,13 +164,13 @@ protected void build() { device.getNativeReference().addDependent(ref); } - public Attachment createAttachment(Image.Format format, int samples) { + public Attachment createAttachment(Format format, int samples) { Attachment a = new Attachment(attachments.size(), format, samples); attachments.add(a); return a; } - public Attachment createAttachment(Image.Format format, int samples, Consumer config) { + public Attachment createAttachment(Format format, int samples, Consumer config) { Attachment a = createAttachment(format, samples); config.accept(a); return a; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java index 9581ed522f..041f627723 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -6,12 +6,17 @@ import com.jme3.vulkan.commands.Queue; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.images.ImageUsage; import com.jme3.vulkan.images.ImageView; +import com.jme3.vulkan.images.VulkanImage; import com.jme3.vulkan.pipelines.FrameBuffer; import com.jme3.vulkan.pass.RenderPass; import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.sync.Semaphore; +import com.jme3.vulkan.sync.SyncGroup; import com.jme3.vulkan.util.Extent2; +import com.jme3.vulkan.util.Flag; +import com.jme3.vulkan.util.LibEnum; import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -20,6 +25,7 @@ import java.nio.LongBuffer; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; @@ -48,9 +54,11 @@ public int getVkEnum() { private final LogicalDevice device; private final Surface surface; private final List images = new ArrayList<>(); - private SwapchainUpdater updater; + private Consumer builder; private Extent2 extent; - private Image.Format format; + private Format format; + private int imageLayers = 1; + private Flag imageUsage = ImageUsage.ColorAttachment; public Swapchain(LogicalDevice device, Surface surface) { this.device = device; @@ -72,11 +80,11 @@ public void createFrameBuffers(RenderPass compat, ImageView depthStencil) { } } - public PresentImage acquireNextImage(SwapchainUpdater updater, Semaphore semaphore, Fence fence, long timeout) { + public PresentImage acquireNextImage(SwapchainUpdater updater, Semaphore semaphore, Fence fence, long timeoutMillis) { try (MemoryStack stack = MemoryStack.stackPush()) { IntBuffer i = stack.mallocInt(1); int code = KHRSwapchain.vkAcquireNextImageKHR(device.getNativeObject(), object, - TimeUnit.MILLISECONDS.toNanos(timeout), Native.getId(semaphore), Native.getId(fence), i); + TimeUnit.MILLISECONDS.toNanos(timeoutMillis), Native.getId(semaphore), Native.getId(fence), i); if (updater.swapchainOutOfDate(this, code)) { return null; } @@ -84,20 +92,37 @@ public PresentImage acquireNextImage(SwapchainUpdater updater, Semaphore semapho } } - public void present(Queue presentQueue, PresentImage image, Semaphore wait) { + public void present(Queue presentQueue, PresentImage image, SyncGroup sync) { + int imageIndex = images.indexOf(image); + if (imageIndex < 0) { + throw new IllegalArgumentException("Image does not belong to this swapchain."); + } try (MemoryStack stack = MemoryStack.stackPush()) { VkPresentInfoKHR info = VkPresentInfoKHR.calloc(stack) .sType(KHRSwapchain.VK_STRUCTURE_TYPE_PRESENT_INFO_KHR) .swapchainCount(1) .pSwapchains(stack.longs(object)) - .pImageIndices(stack.ints(images.indexOf(image))); - if (wait != null) { - info.pWaitSemaphores(stack.longs(wait.getNativeObject())); + .pImageIndices(stack.ints(imageIndex)); + if (sync.containsWaits()) { + info.pWaitSemaphores(sync.toWaitBuffer(stack)); } check(KHRSwapchain.vkQueuePresentKHR(presentQueue.getQueue(), info)); } } + public void build(Consumer builder) { + if (builder == null) { + throw new NullPointerException("Builder function cannot be null."); + } + try (Builder b = new Builder()) { + (this.builder = builder).accept(b); + } + } + + public void update() { + build(builder); + } + public LogicalDevice getDevice() { return device; } @@ -114,15 +139,19 @@ public Extent2 getExtent() { return extent; } - public Image.Format getFormat() { + public Format getFormat() { return format; } - public Builder build() { - return new Builder(); + public int getImageLayers() { + return imageLayers; } - public class PresentImage implements Image { + public Flag getImageUsage() { + return imageUsage; + } + + public class PresentImage implements VulkanImage { private final LogicalDevice device; private final NativeReference ref; @@ -135,12 +164,10 @@ private PresentImage(LogicalDevice device, long id) { this.id = id; ref = Native.get().register(this); Swapchain.this.ref.addDependent(ref); - view = createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1); - } - - @Override - public ImageView createView(VkImageViewCreateInfo create) { - return new ImageView(this, create); + view = new ImageView(this, VulkanImage.View.TwoDemensional); + try (ImageView.Builder v = view.build()) { + v.setLayerCount(imageLayers); + } } @Override @@ -149,8 +176,8 @@ public LogicalDevice getDevice() { } @Override - public int getType() { - return VK_IMAGE_TYPE_2D; + public LibEnum getType() { + return Type.TwoDemensional; } @Override @@ -165,17 +192,37 @@ public int getHeight() { @Override public int getDepth() { - return 1; + return 1; // swapchain images are always 2D } @Override - public Image.Format getFormat() { + public int getMipmaps() { + return 1; // swapchain images always have only 1 mipmap + } + + @Override + public int getLayers() { + return imageLayers; + } + + @Override + public Flag getUsage() { + return imageUsage; + } + + @Override + public Format getFormat() { return format; } @Override - public Image.Tiling getTiling() { - return Tiling.Optimal; + public VulkanImage.Tiling getTiling() { + return VulkanImage.Tiling.Optimal; + } + + @Override + public LibEnum getSharingMode() { + return SharingMode.Exclusive; } @Override @@ -185,7 +232,7 @@ public Long getNativeObject() { @Override public Runnable createNativeDestroyer() { - return () -> {}; + return () -> {}; // image is implicitly destroyed by the swapchain } @Override @@ -255,7 +302,7 @@ protected void build() { VkSurfaceCapabilitiesKHR caps = VkSurfaceCapabilitiesKHR.calloc(stack); KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( device.getPhysicalDevice().getDeviceHandle(), surface.getNativeObject(), caps); - format = Image.Format.vkEnum(selectedFormat.format()); + format = Format.byVkEnum(selectedFormat.format()); extent = new Extent2(selectedExtent); VkSwapchainCreateInfoKHR create = VkSwapchainCreateInfoKHR.calloc(stack) .sType(KHRSwapchain.VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR) @@ -264,8 +311,8 @@ protected void build() { .imageFormat(format.getVkEnum()) .imageColorSpace(selectedFormat.colorSpace()) .imageExtent(selectedExtent) - .imageArrayLayers(1) - .imageUsage(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) + .imageArrayLayers(imageLayers) + .imageUsage(imageUsage.bits()) .preTransform(caps.currentTransform()) .compositeAlpha(KHRSurface.VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) .presentMode(selectedMode.getVkEnum()) @@ -354,6 +401,14 @@ public int selectImageCount(int preferredCount) { return (selectedImageCount = preferredCount); } + public void setImageLayers(int layers) { + Swapchain.this.imageLayers = layers; + } + + public void setImageUsage(Flag usage) { + Swapchain.this.imageUsage = usage; + } + public int getMinImageCount() { return caps.minImageCount(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Fence.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Fence.java index b9b88146be..cbf49f57c8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Fence.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Fence.java @@ -73,6 +73,10 @@ public void reset() { vkResetFences(device.getNativeObject(), id); } + public SyncGroup toGroup() { + return new SyncGroup(this); + } + public boolean isBlocking() { return vkGetFenceStatus(device.getNativeObject(), id) != VK_SUCCESS; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java index f0a8d2b4b3..a2d535f411 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java @@ -74,6 +74,14 @@ public Flag getDstStageMask() { return dstStageMask; } + public SyncGroup toGroupWait() { + return new SyncGroup(this, SyncGroup.EMPTY_SEMAPHORE_ARRAY); + } + + public SyncGroup toGroupSignal() { + return new SyncGroup(SyncGroup.EMPTY_SEMAPHORE_ARRAY, this); + } + @Deprecated public long getId() { return id; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java index 3db4cd33c7..f351bf100c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java @@ -9,11 +9,11 @@ public class SyncGroup { - private static final Semaphore[] EMPTY = new Semaphore[0]; + public static final Semaphore[] EMPTY_SEMAPHORE_ARRAY = new Semaphore[0]; public static final SyncGroup ASYNC = new SyncGroup(); private static Semaphore[] toArray(Semaphore s) { - return s != null ? new Semaphore[] {s} : EMPTY; + return s != null ? new Semaphore[] {s} : EMPTY_SEMAPHORE_ARRAY; } private final Semaphore[] waits; @@ -21,11 +21,11 @@ private static Semaphore[] toArray(Semaphore s) { private final Fence fence; public SyncGroup() { - this(EMPTY, EMPTY, null); + this(EMPTY_SEMAPHORE_ARRAY, EMPTY_SEMAPHORE_ARRAY, null); } public SyncGroup(Fence fence) { - this(EMPTY, EMPTY, fence); + this(EMPTY_SEMAPHORE_ARRAY, EMPTY_SEMAPHORE_ARRAY, fence); } public SyncGroup(Semaphore wait, Semaphore signal) { @@ -98,6 +98,9 @@ public LongBuffer toWaitBuffer(MemoryStack stack) { public IntBuffer toDstStageBuffer(MemoryStack stack) { IntBuffer buf = stack.mallocInt(waits.length); for (Semaphore s : waits) { + if (s.getDstStageMask().isEmpty()) { + throw new IllegalStateException("Wait semaphore destination stage mask cannot be empty."); + } buf.put(s.getDstStageMask().bits()); } buf.flip(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java index 4482f0498b..eed155b266 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java @@ -33,15 +33,19 @@ default boolean contains(Flag flag) { return (bits() & bits) == bits; } - default boolean containsOneOf(Flag flag) { + default boolean containsAny(Flag flag) { return (bits() & flag.bits()) > 0; } + default boolean isEmpty() { + return bits() == 0; + } + static Flag of(int bits) { return new FlagImpl<>(bits); } - static Flag none() { + static Flag empty() { return of(0); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/LibEnum.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/LibEnum.java new file mode 100644 index 0000000000..d7907c7127 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/LibEnum.java @@ -0,0 +1,11 @@ +package com.jme3.vulkan.util; + +public interface LibEnum { + + int getEnum(); + + default boolean is(LibEnum vk) { + return vk != null && getEnum() == vk.getEnum(); + } + +} From e29d2a958fcac4b6a08da767f3e606405d5fa9dd Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 30 Aug 2025 07:58:47 -0400 Subject: [PATCH 43/80] fix image loader key type --- .../src/main/java/jme3test/vulkan/VulkanHelperTest.java | 6 +++--- .../main/java/com/jme3/vulkan/images/VulkanImageLoader.java | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 13ca09bd43..80d68315d4 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -237,8 +237,8 @@ public void simpleInitApp() { frames = new UpdateFrameManager(2, n -> new Frame()); // material color texture - GpuImage image = assetManager.loadAsset(VulkanImageLoader.key(transferPool, "Common/Textures/MissingTexture.png")); - texture = new Texture(device, image.createView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1), + VulkanImage image = assetManager.loadAsset(VulkanImageLoader.key(transferPool, "Common/Textures/MissingTexture.png")); + texture = new Texture(device, new ImageView(image, VulkanImage.View.TwoDemensional), VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); material = new TestMaterial(descriptorPool); @@ -294,7 +294,7 @@ private ImageView createDepthAttachment(CommandPool pool) { VulkanImage.Tiling.Optimal, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, Format.Depth32SFloat, Format.Depth32SFloat_Stencil8UInt, Format.Depth24UNorm_Stencil8UInt); - GpuImage image = new GpuImage(device, Image.Type.V2D); + GpuImage image = new GpuImage(device, VulkanImage.Type.TwoDemensional); try (GpuImage.Builder i = image.build()) { i.setSize(swapchain.getExtent().x, swapchain.getExtent().y); i.setFormat(depthFormat); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index 1cc84f3c98..5441ae24f9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -3,6 +3,7 @@ import com.jme3.asset.*; import com.jme3.util.BufferUtils; import com.jme3.vulkan.Format; +import com.jme3.vulkan.buffers.BasicVulkanBuffer; import com.jme3.vulkan.buffers.BufferUsage; import com.jme3.vulkan.buffers.VulkanBuffer; import com.jme3.vulkan.memory.MemoryProp; @@ -154,7 +155,7 @@ private void flipImage(byte[] img, int width, int height, int bpp) { private GpuImage loadGpuImage(CommandPool transferPool, ImageData data) { try (MemoryStack stack = MemoryStack.stackPush()) { - GpuBuffer staging = new VulkanBuffer(transferPool.getDevice(), MemorySize.bytes(data.getBuffer().limit()), + GpuBuffer staging = new BasicVulkanBuffer(transferPool.getDevice(), MemorySize.bytes(data.getBuffer().limit()), BufferUsage.TransferSrc, Flag.of(MemoryProp.HostVisible, MemoryProp.HostCached), false); staging.copy(data.getBuffer()); GpuImage image = new GpuImage(transferPool.getDevice(), VulkanImage.Type.TwoDemensional); @@ -219,7 +220,7 @@ public boolean isFlip() { } - public static class ImageKey extends Key { + public static class ImageKey extends Key { private final CommandPool pool; From 85b3d9559ff29f25555b957c1e814e87618920ed Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sun, 31 Aug 2025 20:09:01 -0400 Subject: [PATCH 44/80] mess around with meshes more --- .../jme3test/vulkan/VulkanHelperTest.java | 24 +- .../com/jme3/vulkan/buffers/BufferMode.java | 31 --- .../com/jme3/vulkan/buffers/GpuBuffer.java | 56 +++++ .../jme3/vulkan/buffers/StageableBuffer.java | 3 - .../jme3/vulkan/commands/CommandBuffer.java | 3 + .../java/com/jme3/vulkan/images/GpuImage.java | 5 + .../java/com/jme3/vulkan/images/Image.java | 2 + .../com/jme3/vulkan/images/VulkanImage.java | 2 +- .../com/jme3/vulkan/material/Material.java | 4 +- .../com/jme3/vulkan/material/UniformSet.java | 1 + .../com/jme3/vulkan/memory/MemoryRegion.java | 8 +- .../com/jme3/vulkan/memory/MemorySize.java | 20 ++ .../com/jme3/vulkan/mesh/AdaptiveMesh.java | 56 +++++ .../jme3/vulkan/mesh/AttributeModifier.java | 212 ++++++++++++++++-- .../com/jme3/vulkan/mesh/FlexibleMesh.java | 35 --- .../java/com/jme3/vulkan/mesh/IndexType.java | 23 ++ .../com/jme3/vulkan/mesh/IndexedMesh.java | 39 ++++ .../java/com/jme3/vulkan/mesh/InputRate.java | 7 +- .../main/java/com/jme3/vulkan/mesh/Mesh.java | 7 +- .../com/jme3/vulkan/mesh/MeshDescription.java | 16 +- .../com/jme3/vulkan/mesh/MyCustomMesh.java | 11 + .../vulkan/mesh/TestCaseMeshDescription.java | 44 ++-- .../com/jme3/vulkan/mesh/VertexAttribute.java | 2 +- .../com/jme3/vulkan/mesh/VertexBinding.java | 57 +---- .../com/jme3/vulkan/mesh/VertexBuffer.java | 27 +++ .../jme3/vulkan/newframes/DataPipeline.java | 7 + .../pipelines/states/RasterizationState.java | 2 +- .../pipelines/states/VertexInputState.java | 4 +- .../com/jme3/vulkan/surface/Swapchain.java | 35 +-- .../main/java/com/jme3/vulkan/util/Flag.java | 4 + 30 files changed, 532 insertions(+), 215 deletions(-) delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferMode.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/FlexibleMesh.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexedMesh.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/DataPipeline.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 80d68315d4..d4d0111b03 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -24,6 +24,7 @@ import com.jme3.vulkan.material.TestMaterial; import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; +import com.jme3.vulkan.mesh.IndexType; import com.jme3.vulkan.mesh.TestCaseMeshDescription; import com.jme3.vulkan.pass.Attachment; import com.jme3.vulkan.pass.Subpass; @@ -261,14 +262,14 @@ public boolean swapchainOutOfDate(Swapchain swapchain, int imageAcquireCode) { if (swapchainResizeFlag || imageAcquireCode == KHRSwapchain.VK_ERROR_OUT_OF_DATE_KHR || imageAcquireCode == KHRSwapchain.VK_SUBOPTIMAL_KHR) { swapchainResizeFlag = false; - try (Swapchain.Builder s = swapchain.build()) { - s.addQueue(device.getPhysicalDevice().getGraphics()); - s.addQueue(device.getPhysicalDevice().getPresent()); - s.selectFormat(Format.B8G8R8A8_SRGB.getVkEnum(), KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR); - s.selectMode(Swapchain.PresentMode.Mailbox); - s.selectExtentByWindow(); - s.selectImageCount(2); - } +// try (Swapchain.Builder s = swapchain.build()) { +// s.addQueue(device.getPhysicalDevice().getGraphics()); +// s.addQueue(device.getPhysicalDevice().getPresent()); +// s.selectFormat(Format.B8G8R8A8_SRGB.getVkEnum(), KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR); +// s.selectMode(Swapchain.PresentMode.Mailbox); +// s.selectExtentByWindow(); +// s.selectImageCount(2); +// } depthView = createDepthAttachment(device.getShortTermPool(device.getPhysicalDevice().getGraphics())); swapchain.createFrameBuffers(renderPass, depthView); return true; @@ -370,7 +371,7 @@ public void update(UpdateFrameManager frames, float tpf) { // material GpuBuffer matrixBuffer = material.getMatrices().getVersion(); - worldViewProjection.fillFloatBuffer(matrixBuffer.mapFloats(0, matrixBuffer.size().getElements()), true); + worldViewProjection.fillFloatBuffer(matrixBuffer.mapFloats(), true); matrixBuffer.unmap(); material.bind(graphicsCommands, pipeline); // vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), pipeline.getBindPoint().getVkEnum(), @@ -392,7 +393,7 @@ public void update(UpdateFrameManager frames, float tpf) { // mesh vkCmdBindVertexBuffers(graphicsCommands.getBuffer(), 0, stack.longs(vertexBuffer.getId()), stack.longs(0)); - vkCmdBindIndexBuffer(graphicsCommands.getBuffer(), indexBuffer.getId(), 0, VK_INDEX_TYPE_UINT32); + vkCmdBindIndexBuffer(graphicsCommands.getBuffer(), indexBuffer.getId(), 0, IndexType.UInt32.getEnum()); vkCmdDrawIndexed(graphicsCommands.getBuffer(), indexBuffer.size().getElements(), 1, 0, 0, 0); } @@ -401,8 +402,7 @@ public void update(UpdateFrameManager frames, float tpf) { renderPass.end(graphicsCommands); // render manager - graphicsCommands.end(); - graphicsCommands.submit(new SyncGroup(imageAvailable, renderFinished, inFlight)); + graphicsCommands.endAndSubmit(new SyncGroup(imageAvailable, renderFinished, inFlight)); swapchain.present(device.getPhysicalDevice().getPresent(), image, renderFinished.toGroupWait()); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferMode.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferMode.java deleted file mode 100644 index 018652f4eb..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferMode.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.jme3.vulkan.buffers; - -/** - * Hint for communicating the mode of buffer to use. Does not - * map directly with buffer implementations. - */ -public enum BufferMode { - - /** - * Buffer is best suited for no modifications. A static buffers is usually - * only accessible by the GPU after the initial upload, and may throw an - * exception if attempting to do so. - */ - Static, - - /** - * Buffer is best suited for occassional modifications. Usually such buffers - * use fast GPU memory, with a CPU-accessible intermediate buffer to transfer - * updates from the CPU to the GPU. Similar to {@link #Static}, except the - * intermediate buffer is not destroyed after the initial upload. - */ - Adjustable, - - /** - * Buffer is best suited for regular modifications, ideally every frame. - * Usually such buffers emphasize CPU access, usually to the detriment of - * GPU access speeds. - */ - Dynamic, - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index 53d30efc9b..f413cf7e25 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -46,30 +46,86 @@ default T map(int offset, int size, Function factory) { return factory.apply(map(offset, size)); } + default T map(int offset, Function factory) { + return factory.apply(map(offset, size().getBytes() - offset)); + } + + default T map(Function factory) { + return factory.apply(map(0, size().getBytes())); + } + default ByteBuffer mapBytes(int offset, int size) { return map(offset * Byte.BYTES, size * Byte.BYTES).getByteBuffer(0, size); } + default ByteBuffer mapBytes(int offset) { + return mapBytes(offset, size().getBytes() - offset); + } + + default ByteBuffer mapBytes() { + return mapBytes(0, size().getBytes()); + } + default ShortBuffer mapShorts(int offset, int size) { return map(offset * Short.BYTES, size * Short.BYTES).getShortBuffer(0, size); } + default ShortBuffer mapShorts(int offset) { + return mapShorts(offset, size().getShorts() - offset); + } + + default ShortBuffer mapShorts() { + return mapShorts(0, size().getShorts()); + } + default IntBuffer mapInts(int offset, int size) { return map(offset * Integer.BYTES, size * Integer.BYTES).getIntBuffer(0, size); } + default IntBuffer mapInts(int offset) { + return mapInts(offset, size().getInts() - offset); + } + + default IntBuffer mapInts() { + return mapInts(0, size().getInts()); + } + default FloatBuffer mapFloats(int offset, int size) { return map(offset * Float.BYTES, size * Float.BYTES).getFloatBuffer(0, size); } + default FloatBuffer mapFloats(int offset) { + return mapFloats(offset, size().getFloats() - offset); + } + + default FloatBuffer mapFloats() { + return mapFloats(0, size().getFloats()); + } + default DoubleBuffer mapDoubles(int offset, int size) { return map(offset * Double.BYTES, size * Double.BYTES).getDoubleBuffer(0, size); } + default DoubleBuffer mapDoubles(int offset) { + return mapDoubles(offset, size().getDoubles() - offset); + } + + default DoubleBuffer mapDoubles() { + return mapDoubles(0, size().getDoubles()); + } + default LongBuffer mapLongs(int offset, int size) { return map(offset * Long.BYTES, size * Long.BYTES).getLongBuffer(0, size); } + default LongBuffer mapLongs(int offset) { + return mapLongs(offset, size().getLongs() - offset); + } + + default LongBuffer mapLongs() { + return mapLongs(0, size().getLongs()); + } + default void copy(ByteBuffer buffer) { verifyBufferSize(buffer.limit(), Byte.BYTES); MemoryUtil.memCopy(buffer, mapBytes(0, buffer.limit())); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index 812f4ce0b6..2dd2ca8cd9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -42,9 +42,6 @@ public void transfer(CommandPool transferPool) { } public void transfer(CommandPool transferPool, SyncGroup sync) { - if (stage.getNativeReference().isDestroyed()) { - throw new IllegalStateException("Staging buffer has already been freed."); - } CommandBuffer cmd = transferPool.allocateOneTimeCommandBuffer(); cmd.begin(); transfer(cmd); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java index 3e494eb648..42f99a8ec1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java @@ -78,6 +78,9 @@ public void endAndSubmit(SyncGroup sync) { } public void reset() { + if (!pool.getFlags().contains(CommandPool.Create.ResetCommandBuffer)) { + throw new UnsupportedOperationException("Command buffer resetting is not supported by the allocating pool."); + } vkResetCommandBuffer(buffer, 0); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java index 104bf3c39c..e4cf07dbc2 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -43,6 +43,11 @@ public LogicalDevice getDevice() { return device; } + @Override + public long getId() { + return object; + } + @Override public LibEnum getType() { return type; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java index 6022d49dd3..03ff05f4a6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java @@ -7,6 +7,8 @@ public interface Image { interface Type extends LibEnum {} + long getId(); + LibEnum getType(); int getWidth(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java index a2c025dc51..769a455b11 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java @@ -9,7 +9,7 @@ import static org.lwjgl.vulkan.VK10.*; -public interface VulkanImage extends Image, Native { +public interface VulkanImage extends Image { enum Type implements Image.Type { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index f1ec5c8493..df4f64a50f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -30,8 +30,8 @@ public void bind(CommandBuffer cmd, Pipeline pipeline) { } public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { - LinkedList availableLayouts = new LinkedList<>( - Arrays.asList(pipeline.getLayout().getDescriptorSetLayouts())); + LinkedList availableLayouts = new LinkedList<>(); + Collections.addAll(availableLayouts, pipeline.getLayout().getDescriptorSetLayouts()); try (MemoryStack stack = MemoryStack.stackPush()) { LongBuffer setBuf = stack.mallocLong(uniformSets.size()); for (UniformSet set : uniformSets) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java index 95c41abec8..cb352c18e1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -138,6 +138,7 @@ public FrameIndex copy() { @Override public boolean equals(Object o) { + if (o == this) return true; if (o == null || getClass() != o.getClass()) return false; FrameIndex that = (FrameIndex)o; if (versions == that.versions) return true; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java index 75a72941a8..f47f7120cf 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java @@ -72,7 +72,7 @@ public void bind(GpuBuffer buffer, long offset) { } public void bind(Image image, long offset) { - check(vkBindImageMemory(device.getNativeObject(), image.getNativeObject(), id, offset), + check(vkBindImageMemory(device.getNativeObject(), image.getId(), id, offset), "Failed to bind image memory."); } @@ -85,12 +85,12 @@ public PointerBuffer map(long offset) { } public PointerBuffer map(long offset, long size) { + if (!flags.contains(MemoryProp.HostVisible)) { + throw new IllegalStateException("Cannot map memory that is not host visible."); + } if (mapped.getAndSet(true)) { throw new IllegalStateException("Memory already mapped."); } - if (!this.flags.contains(MemoryProp.HostVisible)) { - throw new IllegalStateException("Cannot map memory that is not host visible."); - } vkMapMemory(device.getNativeObject(), id, offset, size, 0, mapping); return mapping; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java index 227748b163..1234df47ef 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java @@ -38,6 +38,26 @@ public int getBytes() { return bytes; } + public int getShorts() { + return bytes / Short.BYTES; + } + + public int getInts() { + return bytes / Integer.BYTES; + } + + public int getFloats() { + return bytes / Float.BYTES; + } + + public int getDoubles() { + return bytes / Double.BYTES; + } + + public int getLongs() { + return bytes / Long.BYTES; + } + public static MemorySize bytes(int elements) { return new MemorySize(elements, 1); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java new file mode 100644 index 0000000000..28fe3755e3 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java @@ -0,0 +1,56 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.bounding.BoundingVolume; +import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.commands.CommandBuffer; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class AdaptiveMesh implements Mesh { + + protected final MeshDescription description; + protected final List buffers = new ArrayList<>(); + + public AdaptiveMesh(MeshDescription description) { + this.description = description; + } + + @Override + public void bindVertexBuffers(CommandBuffer cmd) { + + } + + @Override + public void bind(CommandBuffer cmd) { + + } + + @Override + public void draw(CommandBuffer cmd) { + + } + + @Override + public BoundingVolume computeBounds() { + return null; + } + + public static class VertexBuffer { + + //private final BufferMode hint; + private GpuBuffer buffer; + + public VertexBuffer() { + //this.hint = hint; + } + + public void createBuffer() { + //buffer = hint.createBuffer() + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java index 0729c190c7..89f239279f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java @@ -6,21 +6,23 @@ import com.jme3.math.Vector4f; import com.jme3.vulkan.Format; -import java.nio.ByteBuffer; +import java.nio.*; public class AttributeModifier implements AutoCloseable { private final VertexAttribute attribute; + private final VertexBuffer vertexBuffer; private final ByteBuffer buffer; - public AttributeModifier(VertexAttribute attribute) { + public AttributeModifier(Mesh mesh, VertexAttribute attribute) { this.attribute = attribute; - this.buffer = attribute.getBinding().map(); + this.vertexBuffer = mesh.getBuffer(attribute.getBinding().getBinding()); + this.buffer = vertexBuffer.map(); } @Override public void close() { - attribute.getBinding().unmap(); + vertexBuffer.unmap(); } public int transformPosition(int vertex) { @@ -58,38 +60,212 @@ public AttributeModifier putLong(int vertex, int component, long value) { } public AttributeModifier putVector2(int vertex, int baseComponent, Vector2f value) { + return putVector2(vertex, baseComponent, value.x, value.y); + } + + public AttributeModifier putVector2(int vertex, int baseComponent, float x, float y) { vertex = transformPosition(vertex); - attribute.getFormat().getComponent(baseComponent++).putFloat(buffer, vertex, value.x); - attribute.getFormat().getComponent(baseComponent ).putFloat(buffer, vertex, value.y); + attribute.getFormat().getComponent(baseComponent++).putFloat(buffer, vertex, x); + attribute.getFormat().getComponent(baseComponent ).putFloat(buffer, vertex, y); return this; } public AttributeModifier putVector3(int vertex, int baseComponent, Vector3f value) { + return putVector3(vertex, baseComponent, value.x, value.y, value.z); + } + + public AttributeModifier putVector3(int vertex, int baseComponent, float x, float y, float z) { vertex = transformPosition(vertex); Format f = attribute.getFormat(); - f.getComponent(baseComponent++).putFloat(buffer, vertex, value.x); - f.getComponent(baseComponent++).putFloat(buffer, vertex, value.y); - f.getComponent(baseComponent ).putFloat(buffer, vertex, value.z); + f.getComponent(baseComponent++).putFloat(buffer, vertex, x); + f.getComponent(baseComponent++).putFloat(buffer, vertex, y); + f.getComponent(baseComponent ).putFloat(buffer, vertex, z); return this; } public AttributeModifier putVector4(int vertex, int baseComponent, Vector4f value) { + return putVector4(vertex, baseComponent, value.x, value.y, value.z, value.w); + } + + public AttributeModifier putVector4(int vertex, int baseComponent, float x, float y, float z, float w) { vertex = transformPosition(vertex); Format f = attribute.getFormat(); - f.getComponent(baseComponent++).putFloat(buffer, vertex, value.x); - f.getComponent(baseComponent++).putFloat(buffer, vertex, value.y); - f.getComponent(baseComponent++).putFloat(buffer, vertex, value.z); - f.getComponent(baseComponent ).putFloat(buffer, vertex, value.w); + f.getComponent(baseComponent++).putFloat(buffer, vertex, x); + f.getComponent(baseComponent++).putFloat(buffer, vertex, y); + f.getComponent(baseComponent++).putFloat(buffer, vertex, z); + f.getComponent(baseComponent ).putFloat(buffer, vertex, w); return this; } public AttributeModifier putColor(int vertex, int baseComponent, ColorRGBA value) { - vertex = transformPosition(vertex); + return putVector4(vertex, baseComponent, value.r, value.g, value.b, value.a); + } + + public AttributeModifier putBytes(int baseVertex, int baseComponent, byte[] values) { Format f = attribute.getFormat(); - f.getComponent(baseComponent++).putFloat(buffer, vertex, value.r); - f.getComponent(baseComponent++).putFloat(buffer, vertex, value.g); - f.getComponent(baseComponent++).putFloat(buffer, vertex, value.b); - f.getComponent(baseComponent ).putFloat(buffer, vertex, value.a); + int vertPos = transformPosition(baseVertex); + for (byte v : values) { + f.getComponent(baseComponent).putByte(buffer, vertPos, v); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + return this; + } + + public AttributeModifier putBytes(int baseVertex, int baseComponent, ByteBuffer values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + int bufPos = values.position(); + while (values.hasRemaining()) { + f.getComponent(baseComponent).putByte(buffer, vertPos, values.get()); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + values.position(bufPos); + return this; + } + + public AttributeModifier putShorts(int baseVertex, int baseComponent, short[] values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + for (short v : values) { + f.getComponent(baseComponent).putShort(buffer, vertPos, v); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + return this; + } + + public AttributeModifier putShorts(int baseVertex, int baseComponent, ShortBuffer values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + int bufPos = values.position(); + while (values.hasRemaining()) { + f.getComponent(baseComponent).putShort(buffer, vertPos, values.get()); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + values.position(bufPos); + return this; + } + + public AttributeModifier putInts(int baseVertex, int baseComponent, int[] values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + for (int v : values) { + f.getComponent(baseComponent).putInt(buffer, vertPos, v); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + return this; + } + + public AttributeModifier putInts(int baseVertex, int baseComponent, IntBuffer values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + int bufPos = values.position(); + while (values.hasRemaining()) { + f.getComponent(baseComponent).putInt(buffer, vertPos, values.get()); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + values.position(bufPos); + return this; + } + + public AttributeModifier putFloats(int baseVertex, int baseComponent, float[] values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + for (float v : values) { + f.getComponent(baseComponent).putFloat(buffer, vertPos, v); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + return this; + } + + public AttributeModifier putFloats(int baseVertex, int baseComponent, FloatBuffer values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + int bufPos = values.position(); + while (values.hasRemaining()) { + f.getComponent(baseComponent).putFloat(buffer, vertPos, values.get()); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + values.position(bufPos); + return this; + } + + public AttributeModifier putDoubles(int baseVertex, int baseComponent, double[] values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + for (double v : values) { + f.getComponent(baseComponent).putDouble(buffer, vertPos, v); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + return this; + } + + public AttributeModifier putDoubles(int baseVertex, int baseComponent, DoubleBuffer values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + int bufPos = values.position(); + while (values.hasRemaining()) { + f.getComponent(baseComponent).putDouble(buffer, vertPos, values.get()); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + values.position(bufPos); + return this; + } + + public AttributeModifier putLongs(int baseVertex, int baseComponent, long[] values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + for (long v : values) { + f.getComponent(baseComponent).putLong(buffer, vertPos, v); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + return this; + } + + public AttributeModifier putLongs(int baseVertex, int baseComponent, LongBuffer values) { + Format f = attribute.getFormat(); + int vertPos = transformPosition(baseVertex); + int bufPos = values.position(); + while (values.hasRemaining()) { + f.getComponent(baseComponent).putLong(buffer, vertPos, values.get()); + if (++baseComponent >= f.getNumComponents()) { + baseComponent = 0; + vertPos = transformPosition(++baseVertex); + } + } + values.position(bufPos); return this; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/FlexibleMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/FlexibleMesh.java deleted file mode 100644 index 7e4595a299..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/FlexibleMesh.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.jme3.vulkan.mesh; - -import com.jme3.vulkan.buffers.BufferMode; -import com.jme3.vulkan.buffers.GpuBuffer; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class FlexibleMesh { - - protected final MeshDescription description; - protected final List buffers = new ArrayList<>(); - private final Map attrModes = new HashMap<>(); - - public FlexibleMesh(MeshDescription description) { - this.description = description; - } - - protected void declareAttribute(String name, BufferMode mode) { - attrModes.put(name, mode); - } - - public static class VertexBuffer { - - private final GpuBuffer buffer; - - public VertexBuffer(GpuBuffer buffer) { - this.buffer = buffer; - } - - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java new file mode 100644 index 0000000000..956cbf48fa --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java @@ -0,0 +1,23 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.vulkan.util.LibEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum IndexType implements LibEnum { + + UInt32(VK_INDEX_TYPE_UINT32), + UInt16(VK_INDEX_TYPE_UINT16); + + private final int vkEnum; + + IndexType(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexedMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexedMesh.java new file mode 100644 index 0000000000..0d84825e9b --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexedMesh.java @@ -0,0 +1,39 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.commands.CommandBuffer; +import org.lwjgl.system.MemoryStack; + +import java.nio.LongBuffer; +import java.util.ArrayList; +import java.util.List; + +import static org.lwjgl.vulkan.VK10.*; + +public abstract class IndexedMesh implements Mesh { + + protected final List vertexBuffers = new ArrayList<>(); + protected GpuBuffer indexBuffer; + + @Override + public void bind(CommandBuffer cmd) { + try (MemoryStack stack = MemoryStack.stackPush()) { + LongBuffer vertBufs = stack.mallocLong(vertexBuffers.size()); + LongBuffer offsets = stack.mallocLong(vertexBuffers.size()); + for (GpuBuffer vb : vertexBuffers) { + vertBufs.put(vb.getId()); + offsets.put(0); + } + vertBufs.flip(); + offsets.flip(); + vkCmdBindVertexBuffers(cmd.getBuffer(), 0, vertBufs, offsets); + } + vkCmdBindIndexBuffer(cmd.getBuffer(), indexBuffer.getId(), 0, IndexType.UInt32.getEnum()); + } + + @Override + public void draw(CommandBuffer cmd) { + vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.size().getElements(), 1, 0, 0, 0); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java index aef33f88ff..24c58acd46 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java @@ -1,8 +1,10 @@ package com.jme3.vulkan.mesh; +import com.jme3.vulkan.util.LibEnum; + import static org.lwjgl.vulkan.VK10.*; -public enum InputRate { +public enum InputRate implements LibEnum { Vertex(VK_VERTEX_INPUT_RATE_VERTEX), Instance(VK_VERTEX_INPUT_RATE_INSTANCE); @@ -13,7 +15,8 @@ public enum InputRate { this.vkEnum = vkEnum; } - public int getVkEnum() { + @Override + public int getEnum() { return vkEnum; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java index fe7d866e6b..5af6b246ee 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java @@ -1,9 +1,12 @@ package com.jme3.vulkan.mesh; -import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.bounding.BoundingVolume; +import com.jme3.vulkan.commands.CommandBuffer; public interface Mesh { - GpuBuffer getBindingBuffer(int binding); + void bind(CommandBuffer cmd); + + void draw(CommandBuffer cmd); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java index 9b0023980a..3a8d24e286 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java @@ -4,10 +4,22 @@ import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; +/** + * Describes the layout of vertex bindings and attributes, and simultaneously + * acts as a compatability layer between a mesh and a mesh control. + */ public interface MeshDescription { - VkVertexInputBindingDescription.Buffer getBindings(MemoryStack stack); + VertexBinding getBinding(int i); - VkVertexInputAttributeDescription.Buffer getAttributes(MemoryStack stack); + VertexAttribute getAttribute(String name); + + VkVertexInputBindingDescription.Buffer getBindingInfo(MemoryStack stack); + + VkVertexInputAttributeDescription.Buffer getAttributeInfo(MemoryStack stack); + + default AttributeModifier modifyAttribute(Mesh mesh, String attribute) { + return new AttributeModifier(mesh, getAttribute(attribute)); + } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java new file mode 100644 index 0000000000..e34d0a00e5 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java @@ -0,0 +1,11 @@ +package com.jme3.vulkan.mesh; + +public class MyCustomMesh extends IndexedMesh { + + private final + + public MyCustomMesh() { + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java index 24daf1c6c1..ba933dff22 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java @@ -3,10 +3,8 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.Struct; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; -import org.lwjgl.vulkan.VkViewport; import static org.lwjgl.vulkan.VK10.*; @@ -21,26 +19,24 @@ public TestCaseMeshDescription() { bindings = VkVertexInputBindingDescription.calloc(1) .binding(0) .stride(Float.BYTES * 8) // bytes per vertex - .inputRate(InputRate.Vertex.getVkEnum()); - try (VkViewport struct = VkViewport.calloc()) { - // for each attribute in each vertex buffer - attributes = VkVertexInputAttributeDescription.calloc(3); - attributes.get(0) - .binding(0) - .location(0) - .format(VK_FORMAT_R32G32B32_SFLOAT) - .offset(0); - attributes.get(1) - .binding(0) - .location(1) - .format(VK_FORMAT_R32G32B32_SFLOAT) - .offset(Float.BYTES * 3); - attributes.get(2) - .binding(0) - .location(2) - .format(VK_FORMAT_R32G32_SFLOAT) - .offset(Float.BYTES * 6); - } + .inputRate(InputRate.Vertex.getEnum()); + // for each attribute in each vertex buffer + attributes = VkVertexInputAttributeDescription.calloc(3); + attributes.get(0) + .binding(0) + .location(0) + .format(VK_FORMAT_R32G32B32_SFLOAT) + .offset(0); + attributes.get(1) + .binding(0) + .location(1) + .format(VK_FORMAT_R32G32B32_SFLOAT) + .offset(Float.BYTES * 3); + attributes.get(2) + .binding(0) + .location(2) + .format(VK_FORMAT_R32G32_SFLOAT) + .offset(Float.BYTES * 6); ref = Native.get().register(this); } @@ -66,12 +62,12 @@ public NativeReference getNativeReference() { } @Override - public VkVertexInputBindingDescription.Buffer getBindings(MemoryStack stack) { + public VkVertexInputBindingDescription.Buffer getBindingInfo(MemoryStack stack) { return bindings; } @Override - public VkVertexInputAttributeDescription.Buffer getAttributes(MemoryStack stack) { + public VkVertexInputAttributeDescription.Buffer getAttributeInfo(MemoryStack stack) { return attributes; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java index 0a9dbfca2a..2ffe7dcb63 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java @@ -18,7 +18,7 @@ public VertexAttribute(VertexBinding binding, String name, Format format, int lo this.offset = offset; } - public AttributeModifier modify() { + public AttributeModifier modify(Mesh mesh) { return new AttributeModifier(this); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java index 63ede20874..4e7c5b880b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java @@ -1,73 +1,32 @@ package com.jme3.vulkan.mesh; import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.util.LibEnum; import java.nio.ByteBuffer; public class VertexBinding { - private final GpuBuffer buffer; + private final int binding; private final int stride; - private final InputRate rate; - private ModificationSession session; + private final LibEnum rate; - public VertexBinding(GpuBuffer buffer, int stride, InputRate rate) { - this.buffer = buffer; + public VertexBinding(int binding, int stride, LibEnum rate) { + this.binding = binding; this.stride = stride; this.rate = rate; } - public ByteBuffer map() { - if (session == null) { - session = new ModificationSession(); - return session.data; - } - return session.addModifier(); - } - - public void unmap() { - if (session == null) { - throw new NullPointerException("No modification session is mapped."); - } - if (!session.removeModifier()) { - session = null; - } - } - - public GpuBuffer getBuffer() { - return buffer; + public int getBinding() { + return binding; } public int getStride() { return stride; } - public InputRate getRate() { + public LibEnum getRate() { return rate; } - public class ModificationSession { - - private final ByteBuffer data; - private int modifiers = 1; - - private ModificationSession() { - this.data = buffer.mapBytes(0, buffer.size().getBytes()); - } - - public ByteBuffer addModifier() { - modifiers++; - return data; - } - - public boolean removeModifier() { - if (--modifiers == 0) { - buffer.unmap(); - return false; - } - return true; - } - - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java new file mode 100644 index 0000000000..4df8c5bafb --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java @@ -0,0 +1,27 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.vulkan.buffers.GpuBuffer; + +import java.nio.ByteBuffer; + +public class VertexBuffer { + + private final GpuBuffer buffer; + private ByteBuffer mappedBuffer; + private int mappers = 0; + + public ByteBuffer map() { + if (mappers++ == 0) { + mappedBuffer = buffer.mapBytes(); + } + return mappedBuffer; + } + + public void unmap() { + if ((mappers = Math.max(mappers - 1, 0)) == 0) { + mappedBuffer = null; + buffer.unmap(); + } + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/DataPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/DataPipeline.java new file mode 100644 index 0000000000..21f696a0e0 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/DataPipeline.java @@ -0,0 +1,7 @@ +package com.jme3.vulkan.newframes; + +public interface DataPipeline { + + + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java index 441d290d99..0315ff3504 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java @@ -21,7 +21,7 @@ public VkPipelineRasterizationStateCreateInfo toStruct(MemoryStack stack) { .sType(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO) .depthClampEnable(depthClamp) .rasterizerDiscardEnable(rasterizerDiscard) - .polygonMode(VK_POLYGON_MODE_FILL) + .polygonMode(polygonMode) .lineWidth(lineWidth) .cullMode(cullMode) .frontFace(frontFace) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java index 2b781c7677..c4bd2b8bca 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java @@ -19,8 +19,8 @@ public VertexInputState(MeshDescription mesh) { public VkPipelineVertexInputStateCreateInfo toStruct(MemoryStack stack) { return VkPipelineVertexInputStateCreateInfo.calloc(stack) .sType(VK10.VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO) - .pVertexBindingDescriptions(mesh.getBindings(stack)) - .pVertexAttributeDescriptions(mesh.getAttributes(stack)); + .pVertexBindingDescriptions(mesh.getBindingInfo(stack)) + .pVertexAttributeDescriptions(mesh.getAttributeInfo(stack)); } public void setMesh(MeshDescription mesh) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java index 041f627723..7396e4f8f2 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -1,7 +1,6 @@ package com.jme3.vulkan.surface; import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.*; import com.jme3.vulkan.commands.Queue; import com.jme3.vulkan.devices.LogicalDevice; @@ -154,18 +153,15 @@ public Flag getImageUsage() { public class PresentImage implements VulkanImage { private final LogicalDevice device; - private final NativeReference ref; private final long id; - private final ImageView view; + private final ImageView colorView; private FrameBuffer frameBuffer; private PresentImage(LogicalDevice device, long id) { this.device = device; this.id = id; - ref = Native.get().register(this); - Swapchain.this.ref.addDependent(ref); - view = new ImageView(this, VulkanImage.View.TwoDemensional); - try (ImageView.Builder v = view.build()) { + colorView = new ImageView(this, VulkanImage.View.TwoDemensional); + try (ImageView.Builder v = colorView.build()) { v.setLayerCount(imageLayers); } } @@ -175,6 +171,11 @@ public LogicalDevice getDevice() { return device; } + @Override + public long getId() { + return id; + } + @Override public LibEnum getType() { return Type.TwoDemensional; @@ -225,26 +226,8 @@ public LibEnum getSharingMode() { return SharingMode.Exclusive; } - @Override - public Long getNativeObject() { - return id; - } - - @Override - public Runnable createNativeDestroyer() { - return () -> {}; // image is implicitly destroyed by the swapchain - } - - @Override - public void prematureNativeDestruction() {} - - @Override - public NativeReference getNativeReference() { - return ref; - } - public void createFrameBuffer(RenderPass compat, ImageView depthStencil) { - this.frameBuffer = new FrameBuffer(getDevice(), compat, extent.x, extent.y, 1, view, depthStencil); + this.frameBuffer = new FrameBuffer(getDevice(), compat, extent.x, extent.y, 1, colorView, depthStencil); } public FrameBuffer getFrameBuffer() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java index eed155b266..849f8e3096 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java @@ -41,6 +41,10 @@ default boolean isEmpty() { return bits() == 0; } + default boolean is(Flag flag) { + return bits() == flag.bits(); + } + static Flag of(int bits) { return new FlagImpl<>(bits); } From 669ce8f86c8eb733acb4c76fa370d57dfd684cbc Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 1 Sep 2025 12:53:13 -0400 Subject: [PATCH 45/80] have uniforms use Resources/DataPipelines instead of VersionedResources --- VulkanDesign.txt | 17 ++ .../jme3test/vulkan/VulkanHelperTest.java | 2 +- .../com/jme3/vulkan/material/UniformSet.java | 161 ++++++++---------- .../material/uniforms/BufferUniform.java | 28 +-- .../material/uniforms/TextureUniform.java | 2 +- .../vulkan/material/uniforms/Uniform.java | 20 +-- .../newframes/BufferStagingPipeline.java | 36 ++++ .../jme3/vulkan/newframes/DataPipeline.java | 7 - .../newframes/MultiFrameStagingPipeline.java | 30 ++++ .../com/jme3/vulkan/newframes/Resource.java | 10 ++ 10 files changed, 184 insertions(+), 129 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/BufferStagingPipeline.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/DataPipeline.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/MultiFrameStagingPipeline.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/Resource.java diff --git a/VulkanDesign.txt b/VulkanDesign.txt index 563d311db7..5643a3292d 100644 --- a/VulkanDesign.txt +++ b/VulkanDesign.txt @@ -84,4 +84,21 @@ The second con for #1 is more serious, in my opinion. #1 is mostly an implementa 2. Add a method to GpuBuffer indicating safety. CON: Weak, completely on the mutators to enforce. +--------- +After more thought, I decided to move towards a "data pipeline" approach. The pipeline(s) transform the input data into the correct format. Pipelines, as I see them, would address several key issues: + + 1. Different versions per frame. Pipelines could descretely present different inputs/outputs depending on the frame. + 2. Jankiness in the different buffer types in order to have staging buffers. Pipelines will handle transfers from the staging buffer to the GPU-side buffer(s), and it will be much more flexible, too, since pipelines can also handle per-frame versions. + +There are a couple issues pipelines raise or don't adequately solve: + + 1. How do uniforms determine what resource version is currently being dealt with? + - The most straightforward approach would be to store the resources themselves in the frame index rather than the resource index. This seems all right to me, except we would need to use WeakReferences to not interfere with resources getting GC'd. + - Done. That turned out pretty well, actually. + 2. Name conflict: Pipeline is already a thing. DataPipeline would just seem like a vulkan pipeline that processes data. + - DataGraph. Since I do envision it functioning similar to a graph. + - Resource. Rather bland, but it does encompass the general idea. + - Data. Ditto. + 3. How should internals be properly synchronized? + - Pipelines requiring that commands be submitted will be given a command buffer on init. Pipelines only need to submit commands to the command buffer. diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index d4d0111b03..71a0491eab 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -243,7 +243,7 @@ public void simpleInitApp() { VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); material = new TestMaterial(descriptorPool); - material.getMatrices().setValue(frames.wrap(n -> new PersistentBuffer( + material.getMatrices().setResource(frames.wrap(n -> new PersistentBuffer( device, MemorySize.floats(16), BufferUsage.Uniform, false))); material.getBaseColorMap().setValue(frames.wrap(texture)); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java index cb352c18e1..3a5a93b196 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -4,17 +4,18 @@ import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.material.uniforms.Uniform; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.WeakReference; import java.util.*; public class UniformSet implements Iterable { private final Uniform[] uniforms; - private final FrameIndex currentFrame; - private final Map frames = new HashMap<>(); + private final Collection activeFrames = new ArrayList<>(); + private int frameCacheTimeout = 10; public UniformSet(Uniform... uniforms) { - this.uniforms = Objects.requireNonNull(uniforms); - this.currentFrame = new FrameIndex(this.uniforms, false); + this.uniforms = uniforms; // ensure duplicate binding indices are not present BitSet bindings = new BitSet(); for (Uniform u : uniforms) { @@ -26,6 +27,11 @@ public UniformSet(Uniform... uniforms) { } } + @Override + public Iterator iterator() { + return new IteratorImpl(); + } + public DescriptorSet update(LogicalDevice device, DescriptorPool pool, List availableLayouts) { for (Uniform u : uniforms) { u.update(device); @@ -33,12 +39,12 @@ public DescriptorSet update(LogicalDevice device, DescriptorPool pool, List device) { @@ -49,24 +55,31 @@ public DescriptorSetLayout createLayout(LogicalDevice device) { return new DescriptorSetLayout(device, bindings); } - @Override - public Iterator iterator() { - return new SetIterator(); + public void setFrameCacheTimeout(int frameCacheTimeout) { + this.frameCacheTimeout = frameCacheTimeout; + } + + public int getFrameCacheTimeout() { + return frameCacheTimeout; } /** - * Maps {@link DescriptorSetLayout DescriptorSetLayouts} to {@link SupportedSet SupportedSets} - * by the ID of the DescriptorSetLayout. If no available layout has a mapped set, a new set - * is allocated with an available compatible layout and mapped with it. + * Maps {@link DescriptorSetLayout DescriptorSetLayouts} to {@link DescriptorSet DescriptorSets} + * by the ID of the DescriptorSetLayout for a particular combination of uniform values. If no + * available layout has a mapped set, a new set is allocated with an available compatible layout + * and mapped with it. */ private class FrameData { - private final Map sets = new HashMap<>(); + private final FrameIndex index = new FrameIndex(); + private final Map sets = new HashMap<>(); + private int timeout = frameCacheTimeout; - public SupportedSet get(DescriptorPool pool, List availableLayouts) { + public DescriptorSet get(DescriptorPool pool, List availableLayouts) { + timeout = frameCacheTimeout; for (Iterator it = availableLayouts.iterator(); it.hasNext();) { DescriptorSetLayout layout = it.next(); - SupportedSet set = sets.get(layout.getNativeObject()); + DescriptorSet set = sets.get(layout.getNativeObject()); if (set != null) { it.remove(); return set; @@ -76,14 +89,23 @@ public SupportedSet get(DescriptorPool pool, List available DescriptorSetLayout layout = it.next(); if (isLayoutCompatible(layout)) { it.remove(); - SupportedSet set = new SupportedSet(pool.allocateSets(layout)[0]); - sets.put(set.set.getLayout().getNativeObject(), set); + DescriptorSet set = pool.allocateSets(layout)[0]; + sets.put(set.getLayout().getNativeObject(), set); + set.write(uniforms); return set; } } throw new UnsupportedOperationException("Material is not compatible with the pipeline (uniform set not supported)."); } + public boolean cycleTimeout() { + return --timeout <= 0 || index.isOutOfDate(); + } + + public boolean isCurrent() { + return index.isCurrent(); + } + private boolean isLayoutCompatible(DescriptorSetLayout layout) { for (Uniform u : uniforms) { for (SetLayoutBinding b : layout.getBindings()) { @@ -98,101 +120,52 @@ private boolean isLayoutCompatible(DescriptorSetLayout layout) { } /** - * Identifies a FrameData by the resource versions the uniforms are or were using. + * Represents a frame by the values used for that frame. If any resources have + * been reclaimed, the frame is considered out of date and will be removed. */ - private static class FrameIndex { - - private final int[] versions; + private class FrameIndex { - private FrameIndex(Uniform[] uniforms, boolean update) { - versions = new int[uniforms.length]; - if (update) { - update(uniforms); - } - } + private final ReferenceQueue queue = new ReferenceQueue<>(); + private final WeakReference[] versions; - private FrameIndex(FrameIndex index) { - versions = new int[index.versions.length]; - copy(index); + private FrameIndex() { + versions = new WeakReference[uniforms.length]; + update(); } - public void update(Uniform[] uniforms) { - if (versions.length != uniforms.length) { - throw new IllegalArgumentException("Index must contain one version per uniform."); - } + public void update() { for (int i = 0; i < uniforms.length; i++) { - versions[i] = uniforms[i].getValue().getCurrentVersionIndex(); - } - } - - public void copy(FrameIndex source) { - if (versions.length != source.versions.length) { - throw new IllegalArgumentException("Copy source and target do not have the same number of versions."); + versions[i] = new WeakReference<>(uniforms[i].getValue(), queue); } - System.arraycopy(source.versions, 0, versions, 0, versions.length); } - public FrameIndex copy() { - return new FrameIndex(this); - } - - @Override - public boolean equals(Object o) { - if (o == this) return true; - if (o == null || getClass() != o.getClass()) return false; - FrameIndex that = (FrameIndex)o; - if (versions == that.versions) return true; - if (versions.length != that.versions.length) return false; + public boolean isCurrent() { for (int i = 0; i < versions.length; i++) { - if (versions[i] != that.versions[i]) return false; + // todo: consider using refersTo() from Java 16 to not interfere with the GC + if (versions[i].get() != uniforms[i].getValue()) { + return false; + } } return true; } - @Override - public int hashCode() { - return Arrays.hashCode(versions); - } - - } - - private static class SupportedSet { - - private final DescriptorSet set; - private long[] variants; - - public SupportedSet(DescriptorSet set) { - this.set = set; - } - - public DescriptorSet update(Uniform[] uniforms) { - if (variants == null) { - // write all uniforms - variants = new long[uniforms.length]; - set.write(uniforms); - } else { - // write only uniforms that have changed since the last update with this set - final ArrayList writers = new ArrayList<>(uniforms.length); - for (int i = 0; i < variants.length; i++) { - if (variants[i] < uniforms[i].getVariant()) { - writers.add(uniforms[i]); - } - } - if (!writers.isEmpty()) { - set.write(writers.toArray(new Uniform[0])); + public int getAccuracy() { + int accuracy = 0; + for (int i = 0; i < versions.length; i++) { + if (versions[i].get() != uniforms[i].getResource()) { + accuracy++; } } - // update variant counters to indicate that all uniforms have been - // evaluated since they were last updated - for (int i = 0; i < variants.length; i++) { - variants[i] = uniforms[i].getVariant(); - } - return set; + return accuracy; + } + + public boolean isOutOfDate() { + return queue.poll() != null; } } - private class SetIterator implements Iterator { + private class IteratorImpl implements Iterator { private int index = 0; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index 73cb6e401a..feb7d530d9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -4,7 +4,7 @@ import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.frames.VersionedResource; +import com.jme3.vulkan.newframes.Resource; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; @@ -13,9 +13,8 @@ public class BufferUniform extends AbstractUniform { - private static final String BUFFER_NULL_ERROR = "Uniform buffer is null."; - - private VersionedResource resource; + private Resource resource; + private GpuBuffer buffer; private long variant = 0L; public BufferUniform(String name, Descriptor type, int bindingIndex, Flag stages) { @@ -24,7 +23,6 @@ public BufferUniform(String name, Descriptor type, int bindingIndex, Flag device) {} + public void update(LogicalDevice device) { + buffer = resource.execute(); + } @Override public boolean isBindingCompatible(SetLayoutBinding binding) { return type == binding.getType() - && bindingIndex == binding.getBinding(); + && bindingIndex == binding.getBinding() + && binding.getDescriptors() == 1; } @Override - public void setValue(VersionedResource value) { - if (this.resource != value) { - this.resource = value; + public void setResource(Resource resource) { + if (this.resource != resource) { + this.resource = resource; variant++; } } @Override - public VersionedResource getValue() { + public Resource getResource() { return resource; } + @Override + public GpuBuffer getValue() { + return buffer; + } + @Override public long getVariant() { return variant; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index e4e3f3fee7..555e312dd1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -49,7 +49,7 @@ public void setValue(VersionedResource value) { } @Override - public VersionedResource getValue() { + public VersionedResource getResource() { return texture; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java index 73c222ddc3..efb51df80e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java @@ -4,6 +4,7 @@ import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.frames.VersionedResource; +import com.jme3.vulkan.newframes.Resource; public interface Uniform extends DescriptorSetWriter { @@ -47,13 +48,15 @@ public interface Uniform extends DescriptorSetWriter { * DescriptorSets} to be partially rewritten. Changing the value itself will * rarely ever require rewriting DescriptorSets.

*/ - void setValue(VersionedResource value); + void setResource(Resource value); /** * Returns the {@link VersionedResource} containing the resources this * uniform represents. */ - VersionedResource getValue(); + Resource getResource(); + + T getValue(); /** * The binding this uniform is targeting. Should be unique among all @@ -72,17 +75,4 @@ public interface Uniform extends DescriptorSetWriter { */ long getVariant(); - /** - * Returns the {@link VersionedResource VersionedResource's} version for the current frame. - * - *

Is functionally identical to

- *

-     * Uniform<T> uniform = ...
-     * T version = uniform.getValue().getVersion();
-     * 
- */ - default T getVersion() { - return getValue().getVersion(); - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/BufferStagingPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/BufferStagingPipeline.java new file mode 100644 index 0000000000..7cdddfe9ec --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/BufferStagingPipeline.java @@ -0,0 +1,36 @@ +package com.jme3.vulkan.newframes; + +import com.jme3.vulkan.buffers.VulkanBuffer; +import com.jme3.vulkan.commands.CommandBuffer; +import org.lwjgl.system.MemoryStack; + +/** + * Transfers data in a host-accessible buffer to another buffer. + */ +public class BufferStagingPipeline implements Resource { + + private final VulkanBuffer result; + private VulkanBuffer input; + + public BufferStagingPipeline(VulkanBuffer result) { + this.result = result; + } + + @Override + public void setInput(VulkanBuffer input) { + this.input = input; + } + + @Override + public void execute(CommandBuffer cmd) { + try (MemoryStack stack = MemoryStack.stackPush()) { + result.recordCopy(stack, cmd, input, 0, 0, input.size().getBytes()); + } + } + + @Override + public VulkanBuffer getResult() { + return result; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/DataPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/DataPipeline.java deleted file mode 100644 index 21f696a0e0..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/DataPipeline.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.jme3.vulkan.newframes; - -public interface DataPipeline { - - - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/MultiFrameStagingPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/MultiFrameStagingPipeline.java new file mode 100644 index 0000000000..97dfbbe264 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/MultiFrameStagingPipeline.java @@ -0,0 +1,30 @@ +package com.jme3.vulkan.newframes; + +import com.jme3.vulkan.buffers.VulkanBuffer; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.frames.UpdateFrameManager; + +public class MultiFrameStagingPipeline implements Resource { + + private final UpdateFrameManager frames; + + public MultiFrameStagingPipeline(UpdateFrameManager frames) { + this.frames = frames; + } + + @Override + public void setInput(VulkanBuffer input) { + + } + + @Override + public void execute(CommandBuffer cmd) { + + } + + @Override + public VulkanBuffer getResult() { + return null; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/Resource.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/Resource.java new file mode 100644 index 0000000000..ae97072e69 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/Resource.java @@ -0,0 +1,10 @@ +package com.jme3.vulkan.newframes; + +/** + * Transforms incoming data into a useful format. + */ +public interface Resource { + + T execute(); + +} From 0fc91371e3792a05b9d6ef64884f03d4c6e82af8 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 1 Sep 2025 14:48:28 -0400 Subject: [PATCH 46/80] have uniforms use Resources/DataPipelines instead of VersionedResources --- .../jme3test/vulkan/VulkanHelperTest.java | 5 +- .../main/java/com/jme3/vulkan/data/Data.java | 26 +++++++ .../Resource.java => data/DataPipe.java} | 4 +- .../com/jme3/vulkan/data/PerFrameData.java | 59 ++++++++++++++ .../jme3/vulkan/data/PerFrameStagingPipe.java | 41 ++++++++++ .../com/jme3/vulkan/data/StagingPipe.java | 35 +++++++++ .../jme3/vulkan/data/ThroughputDataPipe.java | 7 ++ .../vulkan/frames/UpdateFrameManager.java | 77 +------------------ .../com/jme3/vulkan/material/UniformSet.java | 2 +- .../material/uniforms/BufferUniform.java | 8 +- .../material/uniforms/TextureUniform.java | 26 ++++--- .../vulkan/material/uniforms/Uniform.java | 15 ++-- .../newframes/BufferStagingPipeline.java | 36 --------- .../newframes/MultiFrameStagingPipeline.java | 30 -------- 14 files changed, 209 insertions(+), 162 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/{newframes/Resource.java => data/DataPipe.java} (54%) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/BufferStagingPipeline.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/MultiFrameStagingPipeline.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 71a0491eab..aabc3134ae 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -16,6 +16,7 @@ import com.jme3.vulkan.buffers.*; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.commands.CommandPool; +import com.jme3.vulkan.data.Data; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.*; import com.jme3.vulkan.frames.UpdateFrame; @@ -243,9 +244,9 @@ public void simpleInitApp() { VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); material = new TestMaterial(descriptorPool); - material.getMatrices().setResource(frames.wrap(n -> new PersistentBuffer( + material.getMatrices().setPipe(frames.perFrame(n -> new PersistentBuffer( device, MemorySize.floats(16), BufferUsage.Uniform, false))); - material.getBaseColorMap().setValue(frames.wrap(texture)); + material.getBaseColorMap().setPipe(new Data<>(texture)); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java new file mode 100644 index 0000000000..1ff73b4107 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java @@ -0,0 +1,26 @@ +package com.jme3.vulkan.data; + +public class Data implements DataPipe { + + private T data; + + public Data() {} + + public Data(T data) { + this.data = data; + } + + @Override + public T execute() { + return data; + } + + public void set(T data) { + this.data = data; + } + + public T get() { + return data; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/Resource.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java similarity index 54% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/Resource.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java index ae97072e69..c8bb72ebb8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/Resource.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java @@ -1,9 +1,9 @@ -package com.jme3.vulkan.newframes; +package com.jme3.vulkan.data; /** * Transforms incoming data into a useful format. */ -public interface Resource { +public interface DataPipe { T execute(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java new file mode 100644 index 0000000000..4ae270cf21 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java @@ -0,0 +1,59 @@ +package com.jme3.vulkan.data; + +import com.jme3.vulkan.frames.UpdateFrameManager; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.function.IntFunction; + +public class PerFrameData implements DataPipe { + + private final UpdateFrameManager frames; + private final ArrayList data = new ArrayList<>(); + + @SafeVarargs + public PerFrameData(UpdateFrameManager frames, T... data) { + this.frames = frames; + Collections.addAll(this.data, data); + if (this.data.size() != frames.getTotalFrames()) { + throw new IllegalArgumentException("Must have one data entry per frame."); + } + } + + public PerFrameData(UpdateFrameManager frames, IntFunction generator) { + this.frames = frames; + for (int i = 0; i < frames.getTotalFrames(); i++) { + data.add(generator.apply(i)); + } + } + + @Override + public T execute() { + return data.get(frames.getCurrentFrame()); + } + + private void verifyFrameInBounds(int frame) { + if (frame >= frames.getTotalFrames()) { + throw new IndexOutOfBoundsException("Frame index " + frame + " out of bounds for " + frames.getTotalFrames() + " frames."); + } + } + + public void set(int frame, T data) { + verifyFrameInBounds(frame); + this.data.set(frame, data); + } + + public void set(T data) { + this.data.set(frames.getCurrentFrame(), data); + } + + public T get(int frame) { + verifyFrameInBounds(frame); + return data.get(frame); + } + + public T get() { + return data.get(frames.getCurrentFrame()); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java new file mode 100644 index 0000000000..f514953f7d --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java @@ -0,0 +1,41 @@ +package com.jme3.vulkan.data; + +import com.jme3.vulkan.buffers.VulkanBuffer; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.frames.UpdateFrameManager; +import org.lwjgl.system.MemoryStack; + +import java.util.function.IntFunction; + +public class PerFrameStagingPipe implements ThroughputDataPipe { + + private final UpdateFrameManager frames; + private final CommandBuffer commands; + private final VulkanBuffer[] outputs; + private DataPipe input; + + public PerFrameStagingPipe(UpdateFrameManager frames, CommandBuffer commands, IntFunction generator) { + this.frames = frames; + this.commands = commands; + this.outputs = new VulkanBuffer[frames.getTotalFrames()]; + for (int i = 0; i < outputs.length; i++) { + outputs[i] = generator.apply(i); + } + } + + @Override + public VulkanBuffer execute() { + VulkanBuffer in = input.execute(); + VulkanBuffer out = outputs[frames.getCurrentFrame()]; + try (MemoryStack stack = MemoryStack.stackPush()) { + out.recordCopy(stack, commands, in, 0, 0, in.size().getBytes()); + } + return out; + } + + @Override + public void setInput(DataPipe input) { + this.input = input; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java new file mode 100644 index 0000000000..c8ef1278c3 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java @@ -0,0 +1,35 @@ +package com.jme3.vulkan.data; + +import com.jme3.vulkan.buffers.VulkanBuffer; +import com.jme3.vulkan.commands.CommandBuffer; +import org.lwjgl.system.MemoryStack; + +/** + * Transfers data in a host-accessible buffer to another buffer. + */ +public class StagingPipe implements ThroughputDataPipe { + + private final VulkanBuffer output; + private final CommandBuffer commands; + private DataPipe input; + + public StagingPipe(VulkanBuffer output, CommandBuffer commands) { + this.output = output; + this.commands = commands; + } + + @Override + public VulkanBuffer execute() { + VulkanBuffer in = input.execute(); + try (MemoryStack stack = MemoryStack.stackPush()) { + output.recordCopy(stack, commands, in, 0, 0, in.size().getBytes()); + } + return output; + } + + @Override + public void setInput(DataPipe input) { + this.input = input; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java new file mode 100644 index 0000000000..5b41b17e5f --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java @@ -0,0 +1,7 @@ +package com.jme3.vulkan.data; + +public interface ThroughputDataPipe extends DataPipe { + + void setInput(DataPipe input); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java index 46a924afad..761dd10b03 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java @@ -1,8 +1,7 @@ package com.jme3.vulkan.frames; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import com.jme3.vulkan.data.PerFrameData; + import java.util.function.IntFunction; public class UpdateFrameManager { @@ -32,76 +31,8 @@ public int getCurrentFrame() { return currentFrame; } - public VersionedResource wrap(IntFunction generator) { - return new VersionPerFrame<>(generator); - } - - public VersionedResource wrap(T resource) { - return new SingleVersion<>(resource); - } - - private class VersionPerFrame implements VersionedResource { - - private final List versions; - - public VersionPerFrame(IntFunction generator) { - ArrayList versionList = new ArrayList<>(getTotalFrames()); - for (int i = 0; i < getTotalFrames(); i++) { - versionList.add(generator.apply(i)); - } - versions = Collections.unmodifiableList(versionList); - } - - @Override - public T getVersion() { - return getVersion(currentFrame); - } - - @Override - public T getVersion(int i) { - return versions.get(i); - } - - @Override - public int getNumVersions() { - return versions.size(); - } - - @Override - public int getCurrentVersionIndex() { - return currentFrame; - } - - } - - private class SingleVersion implements VersionedResource { - - private final T version; - - public SingleVersion(T version) { - this.version = version; - } - - @Override - public T getVersion() { - return version; - } - - @Override - public T getVersion(int i) { - return version; - } - - @Override - public int getNumVersions() { - return 1; - } - - @Override - public int getCurrentVersionIndex() { - return 0; - } - + public PerFrameData perFrame(IntFunction generator) { + return new PerFrameData<>(this, generator); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java index 3a5a93b196..63d0383088 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -152,7 +152,7 @@ public boolean isCurrent() { public int getAccuracy() { int accuracy = 0; for (int i = 0; i < versions.length; i++) { - if (versions[i].get() != uniforms[i].getResource()) { + if (versions[i].get() != uniforms[i].getPipe()) { accuracy++; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index feb7d530d9..a6443ea818 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -4,7 +4,7 @@ import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.newframes.Resource; +import com.jme3.vulkan.data.DataPipe; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; @@ -13,7 +13,7 @@ public class BufferUniform extends AbstractUniform { - private Resource resource; + private DataPipe resource; private GpuBuffer buffer; private long variant = 0L; @@ -47,7 +47,7 @@ public boolean isBindingCompatible(SetLayoutBinding binding) { } @Override - public void setResource(Resource resource) { + public void setPipe(DataPipe resource) { if (this.resource != resource) { this.resource = resource; variant++; @@ -55,7 +55,7 @@ public void setResource(Resource resource) { } @Override - public Resource getResource() { + public DataPipe getPipe() { return resource; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index 555e312dd1..43565c2eb8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -1,5 +1,6 @@ package com.jme3.vulkan.material.uniforms; +import com.jme3.vulkan.data.DataPipe; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; @@ -15,7 +16,8 @@ public class TextureUniform extends AbstractUniform { private final VulkanImage.Layout layout; - private VersionedResource texture; + private DataPipe data; + private Texture texture; private long variant = 0L; public TextureUniform(String name, VulkanImage.Layout layout, int bindingIndex, Flag stages) { @@ -25,10 +27,9 @@ public TextureUniform(String name, VulkanImage.Layout layout, int bindingIndex, @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { - Texture tex = texture.getVersion(); VkDescriptorImageInfo.Buffer info = VkDescriptorImageInfo.calloc(1, stack) - .imageView(tex.getImage().getNativeObject()) - .sampler(tex.getNativeObject()) + .imageView(texture.getImage().getNativeObject()) + .sampler(texture.getNativeObject()) .imageLayout(layout.getEnum()); write.pImageInfo(info) .descriptorType(type.getVkEnum()) @@ -38,18 +39,25 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { } @Override - public void update(LogicalDevice device) {} + public void update(LogicalDevice device) { + texture = data.execute(); + } @Override - public void setValue(VersionedResource value) { - if (this.texture != value) { - this.texture = value; + public void setPipe(DataPipe value) { + if (this.data != value) { + this.data = value; variant++; } } @Override - public VersionedResource getResource() { + public DataPipe getPipe() { + return data; + } + + @Override + public Texture getValue() { return texture; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java index efb51df80e..8c97aad4d5 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java @@ -4,7 +4,7 @@ import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.frames.VersionedResource; -import com.jme3.vulkan.newframes.Resource; +import com.jme3.vulkan.data.DataPipe; public interface Uniform extends DescriptorSetWriter { @@ -40,22 +40,27 @@ public interface Uniform extends DescriptorSetWriter { SetLayoutBinding createBinding(); /** - * Sets the {@link VersionedResource} containing the resources this - * uniform is to represent. + * Sets the {@link DataPipe} that will provide the uniform value. * *

Changing the value will typically result in the {@link #getVariant() * variant index} being increment, requiring {@link com.jme3.vulkan.descriptors.DescriptorSet * DescriptorSets} to be partially rewritten. Changing the value itself will * rarely ever require rewriting DescriptorSets.

*/ - void setResource(Resource value); + void setPipe(DataPipe value); /** * Returns the {@link VersionedResource} containing the resources this * uniform represents. */ - Resource getResource(); + DataPipe getPipe(); + /** + * Gets the value extracted from {@link #setPipe(DataPipe) pipe} execution + * during {@link #update(LogicalDevice) update}. + * + * @return value from the data pipe + */ T getValue(); /** diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/BufferStagingPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/BufferStagingPipeline.java deleted file mode 100644 index 7cdddfe9ec..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/BufferStagingPipeline.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.jme3.vulkan.newframes; - -import com.jme3.vulkan.buffers.VulkanBuffer; -import com.jme3.vulkan.commands.CommandBuffer; -import org.lwjgl.system.MemoryStack; - -/** - * Transfers data in a host-accessible buffer to another buffer. - */ -public class BufferStagingPipeline implements Resource { - - private final VulkanBuffer result; - private VulkanBuffer input; - - public BufferStagingPipeline(VulkanBuffer result) { - this.result = result; - } - - @Override - public void setInput(VulkanBuffer input) { - this.input = input; - } - - @Override - public void execute(CommandBuffer cmd) { - try (MemoryStack stack = MemoryStack.stackPush()) { - result.recordCopy(stack, cmd, input, 0, 0, input.size().getBytes()); - } - } - - @Override - public VulkanBuffer getResult() { - return result; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/MultiFrameStagingPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/MultiFrameStagingPipeline.java deleted file mode 100644 index 97dfbbe264..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/newframes/MultiFrameStagingPipeline.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.jme3.vulkan.newframes; - -import com.jme3.vulkan.buffers.VulkanBuffer; -import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.frames.UpdateFrameManager; - -public class MultiFrameStagingPipeline implements Resource { - - private final UpdateFrameManager frames; - - public MultiFrameStagingPipeline(UpdateFrameManager frames) { - this.frames = frames; - } - - @Override - public void setInput(VulkanBuffer input) { - - } - - @Override - public void execute(CommandBuffer cmd) { - - } - - @Override - public VulkanBuffer getResult() { - return null; - } - -} From ab434fddbfcdc5184904e1b132e82c3f90cccb10 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 1 Sep 2025 20:02:45 -0400 Subject: [PATCH 47/80] have uniforms use Resources/DataPipelines instead of VersionedResources --- VulkanDesign.txt | 18 +++++ .../jme3test/vulkan/VulkanHelperTest.java | 68 +++++++++---------- .../main/java/com/jme3/vulkan/data/Data.java | 24 ++++--- .../java/com/jme3/vulkan/data/DataPipe.java | 4 +- .../com/jme3/vulkan/data/PerFrameData.java | 27 ++++---- .../jme3/vulkan/data/PerFrameStagingPipe.java | 19 +++--- .../com/jme3/vulkan/data/StagingPipe.java | 19 +++--- .../jme3/vulkan/data/TerminalDataPipe.java | 9 +++ .../jme3/vulkan/data/ThroughputDataPipe.java | 6 +- .../com/jme3/vulkan/material/Material.java | 21 +++++- .../com/jme3/vulkan/material/UniformSet.java | 8 ++- .../material/uniforms/BufferUniform.java | 25 +++---- .../material/uniforms/TextureUniform.java | 26 +++---- .../vulkan/material/uniforms/Uniform.java | 33 +++------ .../java/com/jme3/vulkan/sync/Semaphore.java | 34 +++------- .../java/com/jme3/vulkan/sync/SyncGroup.java | 17 +++-- 16 files changed, 188 insertions(+), 170 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/TerminalDataPipe.java diff --git a/VulkanDesign.txt b/VulkanDesign.txt index 5643a3292d..2497e129bf 100644 --- a/VulkanDesign.txt +++ b/VulkanDesign.txt @@ -102,3 +102,21 @@ There are a couple issues pipelines raise or don't adequately solve: - Data. Ditto. 3. How should internals be properly synchronized? - Pipelines requiring that commands be submitted will be given a command buffer on init. Pipelines only need to submit commands to the command buffer. + +Well, that turned out much better than I anticipated. The only problem now is that I accidentally locked the input data behind an anonymous hierarchy of DataPipes. + + 1. Make uniforms able to store the necessary terminal data pipes. + - I don't like this method. The user would have to manually provide the terminal pipes, and they may not actually affect the uniform anyway. + 2. Have a second structure (I'll call it Parameters, for now) mirroring Material which is specifically for storing the data pipes. The data pipes are configured for transfering data from slots in Parameters to corresponding uniforms. + - I like this method better. It's more structured than the other solution, but also allows uniforms to be informed by multiple parameter slots (or even none), if desired. + - I wonder if this could be transformed into something much bigger... + +There is actually one more problem I overlooked with DataPipes. CommandBuffers need to be passed at pipe execution time, because each frame has its own set of CommandBuffers (for the most part). I could simply pass a CommandBuffer as an argument, except I'm not sure if all the pipes in the same pipeline are gauranteed to be happy submitting under to a single CommandBuffer. It'd be perfectly fine for them to do so (and they really shouldn't care), the question is more about performance. + + 1. Pass one CommandBuffer through the pipeline. All pipes submit commands to only that CommandBuffer. + - Could possibly be missing out on performance benefits, but I really can't think of a specific case off the top of my head. + 2. Pass a CommandBuffer manager which will return the optimal CommandBuffer for the situation. + - Again, I'm fuzzy on exactly what situations would warrant multiple CommandBuffers, so I'm not willing to implement this at the moment. + - I could do a simple version of this just out of principle. Perhaps in the future we will know enough to implement such a system. + +For now, I'll go with #1. \ No newline at end of file diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index aabc3134ae..36204e7ac0 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -17,6 +17,8 @@ import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.commands.CommandPool; import com.jme3.vulkan.data.Data; +import com.jme3.vulkan.data.PerFrameData; +import com.jme3.vulkan.data.TerminalDataPipe; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.*; import com.jme3.vulkan.frames.UpdateFrame; @@ -244,8 +246,10 @@ public void simpleInitApp() { VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); material = new TestMaterial(descriptorPool); - material.getMatrices().setPipe(frames.perFrame(n -> new PersistentBuffer( - device, MemorySize.floats(16), BufferUsage.Uniform, false))); + PerFrameData matrixInputPipe = frames.perFrame(n -> + new PersistentBuffer(device, MemorySize.floats(16), BufferUsage.Uniform, false)); + material.getMatrices().setPipe(matrixInputPipe); + material.registerPipe("Matrices", matrixInputPipe); material.getBaseColorMap().setPipe(new Data<>(texture)); } @@ -319,33 +323,13 @@ private ImageView createDepthAttachment(CommandPool pool) { private class Frame implements UpdateFrame { // render manager + private final CommandBuffer transferCommands = graphicsPool.allocateCommandBuffer(); private final CommandBuffer graphicsCommands = graphicsPool.allocateCommandBuffer(); private final Semaphore imageAvailable = new Semaphore(device, PipelineStage.ColorAttachmentOutput); + private final Semaphore transferFinished = new Semaphore(device, PipelineStage.TopOfPipe); private final Semaphore renderFinished = new Semaphore(device); private final Fence inFlight = new Fence(device, true); - // material -// private final GpuBuffer uniforms; -// private final DescriptorSet descriptorSet; - //private final TestMaterial material = new TestMaterial(descriptorPool); - - public Frame() { - // using a persistent buffer because we will be writing to the buffer very often -// uniforms = new PersistentBuffer(device, MemorySize.floats(16), -// new BufferUsageFlags().uniformBuffer(), -// new MemoryFlags().hostVisible().hostCoherent(), false); -// descriptorSet = descriptorPool.allocateSets(descriptorLayout)[0]; -// descriptorSet.update(true, -// new BufferSetWriter(Descriptor.UniformBuffer, 0, 0, new BufferDescriptor(uniforms)), -// new ImageSetWriter(Descriptor.CombinedImageSampler, 1, 0, new ImageDescriptor(texture, Image.Layout.ShaderReadOnlyOptimal))); -// material.getMatrices().setValue(frames.wrap(n -> new PersistentBuffer(device, -// MemorySize.floats(16), -// BufferUsage.Uniform, -// Flag.of(MemoryFlag.HostVisible, MemoryFlag.HostCoherent), -// false))); -// material.getBaseColorMap().setValue(texture); - } - @Override public void update(UpdateFrameManager frames, float tpf) { @@ -358,25 +342,35 @@ public void update(UpdateFrameManager frames, float tpf) { return; // no image available: skip rendering this frame } inFlight.reset(); + renderManager.setCamera(cam, false); + + // compute geometry states + modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y)); + Matrix4f worldViewProjection = cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()); + + // Begin data transfer commands. Transfer and graphics commands could be put + // in seperate threads since they are synchronized by a semaphore. + transferCommands.reset(); + transferCommands.begin(); + + // update material data + TerminalDataPipe matrixBuffer = material.getPipe("Matrices"); + worldViewProjection.fillFloatBuffer(matrixBuffer.getInput().mapFloats(), true); + matrixBuffer.getInput().unmap(); // can this wait until transfer commands are submitted? + material.update(transferCommands); // use the transfer buffer for material updates + + // submit data transfer commands + transferCommands.endAndSubmit(SyncGroup.signal(transferFinished)); + + // begin graphics commands graphicsCommands.reset(); graphicsCommands.begin(); - // material + // material graphics renderPass.begin(graphicsCommands, image.getFrameBuffer()); pipeline.bind(graphicsCommands); - - // geometry - modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y)); - Matrix4f worldViewProjection = cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()); - - // material - GpuBuffer matrixBuffer = material.getMatrices().getVersion(); - worldViewProjection.fillFloatBuffer(matrixBuffer.mapFloats(), true); - matrixBuffer.unmap(); material.bind(graphicsCommands, pipeline); -// vkCmdBindDescriptorSets(graphicsCommands.getBuffer(), pipeline.getBindPoint().getVkEnum(), -// pipelineLayout.getNativeObject(), 0, stack.longs(descriptorSet.getId()), null); try (MemoryStack stack = MemoryStack.stackPush()) { @@ -403,7 +397,7 @@ public void update(UpdateFrameManager frames, float tpf) { renderPass.end(graphicsCommands); // render manager - graphicsCommands.endAndSubmit(new SyncGroup(imageAvailable, renderFinished, inFlight)); + graphicsCommands.endAndSubmit(new SyncGroup(new Semaphore[] {imageAvailable, transferFinished}, renderFinished, inFlight)); swapchain.present(device.getPhysicalDevice().getPresent(), image, renderFinished.toGroupWait()); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java index 1ff73b4107..c16a716cde 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java @@ -1,26 +1,30 @@ package com.jme3.vulkan.data; -public class Data implements DataPipe { +import com.jme3.vulkan.commands.CommandBuffer; - private T data; +public class Data implements TerminalDataPipe { + + private T input; public Data() {} - public Data(T data) { - this.data = data; + public Data(T input) { + this.input = input; } @Override - public T execute() { - return data; + public T execute(CommandBuffer cmd) { + return input; } - public void set(T data) { - this.data = data; + @Override + public void setInput(T input) { + this.input = input; } - public T get() { - return data; + @Override + public T getInput() { + return input; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java index c8bb72ebb8..42b10ae5b6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java @@ -1,10 +1,12 @@ package com.jme3.vulkan.data; +import com.jme3.vulkan.commands.CommandBuffer; + /** * Transforms incoming data into a useful format. */ public interface DataPipe { - T execute(); + T execute(CommandBuffer cmd); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java index 4ae270cf21..7093f40fb7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java @@ -1,12 +1,13 @@ package com.jme3.vulkan.data; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.frames.UpdateFrameManager; import java.util.ArrayList; import java.util.Collections; import java.util.function.IntFunction; -public class PerFrameData implements DataPipe { +public class PerFrameData implements TerminalDataPipe { private final UpdateFrameManager frames; private final ArrayList data = new ArrayList<>(); @@ -28,7 +29,17 @@ public PerFrameData(UpdateFrameManager frames, IntFunction generator) { } @Override - public T execute() { + public T execute(CommandBuffer cmd) { + return data.get(frames.getCurrentFrame()); + } + + @Override + public void setInput(T input) { + this.data.set(frames.getCurrentFrame(), input); + } + + @Override + public T getInput() { return data.get(frames.getCurrentFrame()); } @@ -38,22 +49,14 @@ private void verifyFrameInBounds(int frame) { } } - public void set(int frame, T data) { + public void setInput(int frame, T data) { verifyFrameInBounds(frame); this.data.set(frame, data); } - public void set(T data) { - this.data.set(frames.getCurrentFrame(), data); - } - - public T get(int frame) { + public T getInput(int frame) { verifyFrameInBounds(frame); return data.get(frame); } - public T get() { - return data.get(frames.getCurrentFrame()); - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java index f514953f7d..9673bb0b04 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java @@ -10,13 +10,11 @@ public class PerFrameStagingPipe implements ThroughputDataPipe { private final UpdateFrameManager frames; - private final CommandBuffer commands; private final VulkanBuffer[] outputs; - private DataPipe input; + private DataPipe input; - public PerFrameStagingPipe(UpdateFrameManager frames, CommandBuffer commands, IntFunction generator) { + public PerFrameStagingPipe(UpdateFrameManager frames, IntFunction generator) { this.frames = frames; - this.commands = commands; this.outputs = new VulkanBuffer[frames.getTotalFrames()]; for (int i = 0; i < outputs.length; i++) { outputs[i] = generator.apply(i); @@ -24,18 +22,23 @@ public PerFrameStagingPipe(UpdateFrameManager frames, CommandBuffer commands, In } @Override - public VulkanBuffer execute() { - VulkanBuffer in = input.execute(); + public VulkanBuffer execute(CommandBuffer cmd) { + VulkanBuffer in = input.execute(cmd); VulkanBuffer out = outputs[frames.getCurrentFrame()]; try (MemoryStack stack = MemoryStack.stackPush()) { - out.recordCopy(stack, commands, in, 0, 0, in.size().getBytes()); + out.recordCopy(stack, cmd, in, 0, 0, Math.min(in.size().getBytes(), out.size().getBytes())); } return out; } @Override - public void setInput(DataPipe input) { + public void setInput(DataPipe input) { this.input = input; } + @Override + public DataPipe getInput() { + return input; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java index c8ef1278c3..46a2efb532 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java @@ -10,26 +10,29 @@ public class StagingPipe implements ThroughputDataPipe { private final VulkanBuffer output; - private final CommandBuffer commands; - private DataPipe input; + private DataPipe input; - public StagingPipe(VulkanBuffer output, CommandBuffer commands) { + public StagingPipe(VulkanBuffer output) { this.output = output; - this.commands = commands; } @Override - public VulkanBuffer execute() { - VulkanBuffer in = input.execute(); + public VulkanBuffer execute(CommandBuffer cmd) { + VulkanBuffer in = input.execute(cmd); try (MemoryStack stack = MemoryStack.stackPush()) { - output.recordCopy(stack, commands, in, 0, 0, in.size().getBytes()); + output.recordCopy(stack, cmd, in, 0, 0, Math.min(in.size().getBytes(), output.size().getBytes())); } return output; } @Override - public void setInput(DataPipe input) { + public void setInput(DataPipe input) { this.input = input; } + @Override + public DataPipe getInput() { + return input; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/TerminalDataPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/TerminalDataPipe.java new file mode 100644 index 0000000000..09f3302823 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/TerminalDataPipe.java @@ -0,0 +1,9 @@ +package com.jme3.vulkan.data; + +public interface TerminalDataPipe extends DataPipe { + + void setInput(In input); + + In getInput(); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java index 5b41b17e5f..188c312ed0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java @@ -1,7 +1,9 @@ package com.jme3.vulkan.data; -public interface ThroughputDataPipe extends DataPipe { +public interface ThroughputDataPipe extends DataPipe { - void setInput(DataPipe input); + void setInput(DataPipe input); + + DataPipe getInput(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index df4f64a50f..20bd4f652d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -1,6 +1,7 @@ package com.jme3.vulkan.material; import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.data.DataPipe; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.material.uniforms.Uniform; @@ -20,11 +21,18 @@ public class Material { private final DescriptorPool pool; private final List uniformSets = new ArrayList<>(); private final HashMap> uniformLookup = new HashMap<>(); + private final Map> pipes = new HashMap<>(); public Material(DescriptorPool pool) { this.pool = pool; } + public void update(CommandBuffer cmd) { + for (UniformSet s : uniformSets) { + s.update(cmd); + } + } + public void bind(CommandBuffer cmd, Pipeline pipeline) { bind(cmd, pipeline, 0); } @@ -35,7 +43,7 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { try (MemoryStack stack = MemoryStack.stackPush()) { LongBuffer setBuf = stack.mallocLong(uniformSets.size()); for (UniformSet set : uniformSets) { - setBuf.put(set.update(pipeline.getDevice(), pool, availableLayouts).getNativeObject()); + setBuf.put(set.acquireSet(pool, availableLayouts).getNativeObject()); } setBuf.flip(); vkCmdBindDescriptorSets(cmd.getBuffer(), pipeline.getBindPoint().getVkEnum(), @@ -65,8 +73,12 @@ public List getSets() { return Collections.unmodifiableList(uniformSets); } + public void registerPipe(String name, DataPipe pipe) { + pipes.put(name, pipe); + } + @SuppressWarnings("unchecked") - public T get(String name) { + public T getUniform(String name) { // Not sure if caching the results is really worth it... Uniform uniform = uniformLookup.get(name); if (uniform != null) { @@ -83,4 +95,9 @@ public T get(String name) { return null; } + @SuppressWarnings("unchecked") + public T getPipe(String name) { + return (T)pipes.get(name); + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java index 63d0383088..ac85ae66c7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -1,5 +1,6 @@ package com.jme3.vulkan.material; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.material.uniforms.Uniform; @@ -32,13 +33,16 @@ public Iterator iterator() { return new IteratorImpl(); } - public DescriptorSet update(LogicalDevice device, DescriptorPool pool, List availableLayouts) { + public void update(CommandBuffer cmd) { for (Uniform u : uniforms) { - u.update(device); + u.update(cmd); if (u.getValue() == null) { throw new NullPointerException("Uniform \"" + u.getName() + "\" contains no value."); } } + } + + public DescriptorSet acquireSet(DescriptorPool pool, List availableLayouts) { activeFrames.removeIf(FrameData::cycleTimeout); FrameData data = activeFrames.stream().filter(FrameData::isCurrent).findAny().orElse(null); if (data == null) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index a6443ea818..345da04f06 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -1,9 +1,9 @@ package com.jme3.vulkan.material.uniforms; import com.jme3.vulkan.buffers.*; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; -import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.data.DataPipe; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; @@ -13,9 +13,8 @@ public class BufferUniform extends AbstractUniform { - private DataPipe resource; + private DataPipe pipe; private GpuBuffer buffer; - private long variant = 0L; public BufferUniform(String name, Descriptor type, int bindingIndex, Flag stages) { super(name, type, bindingIndex, stages); @@ -35,8 +34,8 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { } @Override - public void update(LogicalDevice device) { - buffer = resource.execute(); + public void update(CommandBuffer cmd) { + buffer = pipe.execute(cmd); } @Override @@ -47,16 +46,13 @@ public boolean isBindingCompatible(SetLayoutBinding binding) { } @Override - public void setPipe(DataPipe resource) { - if (this.resource != resource) { - this.resource = resource; - variant++; - } + public void setPipe(DataPipe pipe) { + this.pipe = pipe; } @Override - public DataPipe getPipe() { - return resource; + public DataPipe getPipe() { + return pipe; } @Override @@ -64,9 +60,4 @@ public GpuBuffer getValue() { return buffer; } - @Override - public long getVariant() { - return variant; - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index 43565c2eb8..6b9b6c2a5d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -1,10 +1,9 @@ package com.jme3.vulkan.material.uniforms; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.data.DataPipe; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; -import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.frames.VersionedResource; import com.jme3.vulkan.images.Texture; import com.jme3.vulkan.images.VulkanImage; import com.jme3.vulkan.shader.ShaderStage; @@ -16,9 +15,8 @@ public class TextureUniform extends AbstractUniform { private final VulkanImage.Layout layout; - private DataPipe data; + private DataPipe pipe; private Texture texture; - private long variant = 0L; public TextureUniform(String name, VulkanImage.Layout layout, int bindingIndex, Flag stages) { super(name, Descriptor.CombinedImageSampler, bindingIndex, stages); @@ -39,21 +37,18 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { } @Override - public void update(LogicalDevice device) { - texture = data.execute(); + public void update(CommandBuffer cmd) { + texture = pipe.execute(cmd); } @Override - public void setPipe(DataPipe value) { - if (this.data != value) { - this.data = value; - variant++; - } + public void setPipe(DataPipe pipe) { + this.pipe = pipe; } @Override - public DataPipe getPipe() { - return data; + public DataPipe getPipe() { + return pipe; } @Override @@ -61,11 +56,6 @@ public Texture getValue() { return texture; } - @Override - public long getVariant() { - return variant; - } - @Override public boolean isBindingCompatible(SetLayoutBinding binding) { return type == binding.getType() diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java index 8c97aad4d5..d0c5fe7ecd 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java @@ -1,9 +1,8 @@ package com.jme3.vulkan.material.uniforms; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.descriptors.DescriptorSetWriter; import com.jme3.vulkan.descriptors.SetLayoutBinding; -import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.frames.VersionedResource; import com.jme3.vulkan.data.DataPipe; public interface Uniform extends DescriptorSetWriter { @@ -14,11 +13,12 @@ public interface Uniform extends DescriptorSetWriter { String getName(); /** - * Updates this uniform. + * Updates this uniform and extracts the uniform value from the + * {@link #setPipe(DataPipe) data pipe}. * - * @param device the current logical device + * @param cmd command buffer to submit commands to */ - void update(LogicalDevice device); + void update(CommandBuffer cmd); /** * Tests if the {@link SetLayoutBinding} is compatible with this uniform, @@ -41,23 +41,17 @@ public interface Uniform extends DescriptorSetWriter { /** * Sets the {@link DataPipe} that will provide the uniform value. - * - *

Changing the value will typically result in the {@link #getVariant() - * variant index} being increment, requiring {@link com.jme3.vulkan.descriptors.DescriptorSet - * DescriptorSets} to be partially rewritten. Changing the value itself will - * rarely ever require rewriting DescriptorSets.

*/ - void setPipe(DataPipe value); + void setPipe(DataPipe pipe); /** - * Returns the {@link VersionedResource} containing the resources this - * uniform represents. + * Returns the {@link DataPipe} supplying the uniform value. */ - DataPipe getPipe(); + DataPipe getPipe(); /** * Gets the value extracted from {@link #setPipe(DataPipe) pipe} execution - * during {@link #update(LogicalDevice) update}. + * during {@link #update(CommandBuffer) update}. * * @return value from the data pipe */ @@ -71,13 +65,4 @@ public interface Uniform extends DescriptorSetWriter { */ int getBindingIndex(); - /** - * Gets the variant index of this uniform. The variant index starts at {@code 0}, - * and be incremented each time the uniform is changed enough to require a - * rewrite of {@link com.jme3.vulkan.descriptors.DescriptorSet DescriptorSets}. - * - * @return the variant index - */ - long getVariant(); - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java index a2d535f411..e5a4015d34 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java @@ -2,6 +2,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.pipelines.PipelineStage; import com.jme3.vulkan.util.Flag; @@ -14,11 +15,11 @@ import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; -public class Semaphore implements Native { +public class Semaphore extends AbstractNative { + + public static final Semaphore[] EMPTY = new Semaphore[0]; private final LogicalDevice device; - private final NativeReference ref; - private long id; private Flag dstStageMask; public Semaphore(LogicalDevice device) { @@ -31,31 +32,16 @@ public Semaphore(LogicalDevice device, Flag dstStageMask) { try (MemoryStack stack = MemoryStack.stackPush()) { VkSemaphoreCreateInfo create = VkSemaphoreCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO); - id = getLong(stack, ptr -> check(vkCreateSemaphore(device.getNativeObject(), create, null, ptr), + object = getLong(stack, ptr -> check(vkCreateSemaphore(device.getNativeObject(), create, null, ptr), "Failed to create semaphore.")); ref = Native.get().register(this); device.getNativeReference().addDependent(ref); } } - @Override - public Long getNativeObject() { - return id; - } - @Override public Runnable createNativeDestroyer() { - return () -> vkDestroySemaphore(device.getNativeObject(), nonNull(id), null); - } - - @Override - public void prematureNativeDestruction() { - id = MemoryUtil.NULL; - } - - @Override - public NativeReference getNativeReference() { - return ref; + return () -> vkDestroySemaphore(device.getNativeObject(), nonNull(object), null); } public void setDstStageMask(Flag dstStageMask) { @@ -75,21 +61,21 @@ public Flag getDstStageMask() { } public SyncGroup toGroupWait() { - return new SyncGroup(this, SyncGroup.EMPTY_SEMAPHORE_ARRAY); + return new SyncGroup(this, EMPTY); } public SyncGroup toGroupSignal() { - return new SyncGroup(SyncGroup.EMPTY_SEMAPHORE_ARRAY, this); + return new SyncGroup(EMPTY, this); } @Deprecated public long getId() { - return id; + return object; } @Deprecated public LongBuffer toBuffer(MemoryStack stack) { - return stack.longs(id); + return stack.longs(object); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java index f351bf100c..8f6b28e852 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java @@ -8,12 +8,11 @@ import java.util.Objects; public class SyncGroup { - - public static final Semaphore[] EMPTY_SEMAPHORE_ARRAY = new Semaphore[0]; + public static final SyncGroup ASYNC = new SyncGroup(); private static Semaphore[] toArray(Semaphore s) { - return s != null ? new Semaphore[] {s} : EMPTY_SEMAPHORE_ARRAY; + return s != null ? new Semaphore[] {s} : Semaphore.EMPTY; } private final Semaphore[] waits; @@ -21,11 +20,11 @@ private static Semaphore[] toArray(Semaphore s) { private final Fence fence; public SyncGroup() { - this(EMPTY_SEMAPHORE_ARRAY, EMPTY_SEMAPHORE_ARRAY, null); + this(Semaphore.EMPTY, Semaphore.EMPTY, null); } public SyncGroup(Fence fence) { - this(EMPTY_SEMAPHORE_ARRAY, EMPTY_SEMAPHORE_ARRAY, fence); + this(Semaphore.EMPTY, Semaphore.EMPTY, fence); } public SyncGroup(Semaphore wait, Semaphore signal) { @@ -120,4 +119,12 @@ public long getFenceHandle() { return fence != null ? fence.getNativeObject() : VK10.VK_NULL_HANDLE; } + public static SyncGroup wait(Semaphore... waits) { + return new SyncGroup(waits, Semaphore.EMPTY); + } + + public static SyncGroup signal(Semaphore... signals) { + return new SyncGroup(Semaphore.EMPTY, signals); + } + } From 97750fde5c62f75915ae8d1a7afb4cf2fccd6a21 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 1 Sep 2025 21:33:25 -0400 Subject: [PATCH 48/80] simplified handling of DataPipe results by uniforms --- .../jme3test/vulkan/VulkanHelperTest.java | 5 +- .../java/com/jme3/vulkan/data/PipeResult.java | 29 +++++++++++ .../com/jme3/vulkan/material/Material.java | 3 +- .../material/uniforms/AbstractUniform.java | 28 +++++++++++ .../material/uniforms/BufferUniform.java | 26 +--------- .../material/uniforms/TextureUniform.java | 29 ++--------- .../com/jme3/vulkan/mesh/AdaptiveMesh.java | 50 +++++++++++-------- .../main/java/com/jme3/vulkan/mesh/Mesh.java | 2 + 8 files changed, 96 insertions(+), 76 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PipeResult.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 36204e7ac0..09518e11e1 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -248,8 +248,7 @@ public void simpleInitApp() { material = new TestMaterial(descriptorPool); PerFrameData matrixInputPipe = frames.perFrame(n -> new PersistentBuffer(device, MemorySize.floats(16), BufferUsage.Uniform, false)); - material.getMatrices().setPipe(matrixInputPipe); - material.registerPipe("Matrices", matrixInputPipe); + material.getMatrices().setPipe(material.setPipe("Matrices", matrixInputPipe)); material.getBaseColorMap().setPipe(new Data<>(texture)); } @@ -357,7 +356,7 @@ public void update(UpdateFrameManager frames, float tpf) { // update material data TerminalDataPipe matrixBuffer = material.getPipe("Matrices"); worldViewProjection.fillFloatBuffer(matrixBuffer.getInput().mapFloats(), true); - matrixBuffer.getInput().unmap(); // can this wait until transfer commands are submitted? + matrixBuffer.getInput().unmap(); material.update(transferCommands); // use the transfer buffer for material updates // submit data transfer commands diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PipeResult.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PipeResult.java new file mode 100644 index 0000000000..2124698469 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PipeResult.java @@ -0,0 +1,29 @@ +package com.jme3.vulkan.data; + +import com.jme3.vulkan.commands.CommandBuffer; + +public class PipeResult implements ThroughputDataPipe { + + private DataPipe input; + private T result; + + @Override + public void setInput(DataPipe input) { + this.input = input; + } + + @Override + public DataPipe getInput() { + return input; + } + + @Override + public T execute(CommandBuffer cmd) { + return result = input.execute(cmd); + } + + public T getResult() { + return result; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index 20bd4f652d..fe812cf96e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -73,8 +73,9 @@ public List getSets() { return Collections.unmodifiableList(uniformSets); } - public void registerPipe(String name, DataPipe pipe) { + public T setPipe(String name, T pipe) { pipes.put(name, pipe); + return pipe; } @SuppressWarnings("unchecked") diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java index 7136e8f447..55766f8363 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java @@ -1,5 +1,8 @@ package com.jme3.vulkan.material.uniforms; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.data.DataPipe; +import com.jme3.vulkan.data.PipeResult; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.frames.UpdateFrameManager; @@ -12,6 +15,7 @@ public abstract class AbstractUniform implements Uniform { protected final Descriptor type; protected final int bindingIndex; protected final Flag stages; + protected final PipeResult pipe = new PipeResult<>(); public AbstractUniform(String name, Descriptor type, int bindingIndex, Flag stages) { this.name = name; @@ -35,8 +39,32 @@ public int getBindingIndex() { return bindingIndex; } + @Override + public void update(CommandBuffer cmd) { + pipe.execute(cmd); + } + + @Override + public void setPipe(DataPipe pipe) { + this.pipe.setInput(pipe); + } + + @Override + public DataPipe getPipe() { + return pipe.getInput(); + } + + @Override + public T getValue() { + return pipe.getResult(); + } + public Descriptor getType() { return type; } + public Flag getStages() { + return stages; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index 345da04f06..65de96f1a6 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -1,10 +1,8 @@ package com.jme3.vulkan.material.uniforms; import com.jme3.vulkan.buffers.*; -import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; -import com.jme3.vulkan.data.DataPipe; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; @@ -13,15 +11,13 @@ public class BufferUniform extends AbstractUniform { - private DataPipe pipe; - private GpuBuffer buffer; - public BufferUniform(String name, Descriptor type, int bindingIndex, Flag stages) { super(name, type, bindingIndex, stages); } @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + GpuBuffer buffer = getValue(); VkDescriptorBufferInfo.Buffer info = VkDescriptorBufferInfo.calloc(1, stack) .buffer(buffer.getId()) .offset(0L) @@ -33,11 +29,6 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { .descriptorType(type.getVkEnum()); } - @Override - public void update(CommandBuffer cmd) { - buffer = pipe.execute(cmd); - } - @Override public boolean isBindingCompatible(SetLayoutBinding binding) { return type == binding.getType() @@ -45,19 +36,4 @@ public boolean isBindingCompatible(SetLayoutBinding binding) { && binding.getDescriptors() == 1; } - @Override - public void setPipe(DataPipe pipe) { - this.pipe = pipe; - } - - @Override - public DataPipe getPipe() { - return pipe; - } - - @Override - public GpuBuffer getValue() { - return buffer; - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index 6b9b6c2a5d..f1c4a6e65b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -1,7 +1,5 @@ package com.jme3.vulkan.material.uniforms; -import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.data.DataPipe; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.images.Texture; @@ -15,8 +13,6 @@ public class TextureUniform extends AbstractUniform { private final VulkanImage.Layout layout; - private DataPipe pipe; - private Texture texture; public TextureUniform(String name, VulkanImage.Layout layout, int bindingIndex, Flag stages) { super(name, Descriptor.CombinedImageSampler, bindingIndex, stages); @@ -25,9 +21,10 @@ public TextureUniform(String name, VulkanImage.Layout layout, int bindingIndex, @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { + Texture tex = getValue(); VkDescriptorImageInfo.Buffer info = VkDescriptorImageInfo.calloc(1, stack) - .imageView(texture.getImage().getNativeObject()) - .sampler(texture.getNativeObject()) + .imageView(tex.getImage().getNativeObject()) + .sampler(tex.getNativeObject()) .imageLayout(layout.getEnum()); write.pImageInfo(info) .descriptorType(type.getVkEnum()) @@ -36,26 +33,6 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { .descriptorCount(1); } - @Override - public void update(CommandBuffer cmd) { - texture = pipe.execute(cmd); - } - - @Override - public void setPipe(DataPipe pipe) { - this.pipe = pipe; - } - - @Override - public DataPipe getPipe() { - return pipe; - } - - @Override - public Texture getValue() { - return texture; - } - @Override public boolean isBindingCompatible(SetLayoutBinding binding) { return type == binding.getType() diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java index 28fe3755e3..874f60feb1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java @@ -1,54 +1,62 @@ package com.jme3.vulkan.mesh; -import com.jme3.bounding.BoundingVolume; import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.data.DataPipe; +import org.lwjgl.system.MemoryStack; +import java.nio.LongBuffer; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; + +import static org.lwjgl.vulkan.VK10.*; public class AdaptiveMesh implements Mesh { protected final MeshDescription description; - protected final List buffers = new ArrayList<>(); + protected final List vertexBuffers = new ArrayList<>(); + protected VertexBuffer indexBuffer; public AdaptiveMesh(MeshDescription description) { this.description = description; } @Override - public void bindVertexBuffers(CommandBuffer cmd) { - + public void update(CommandBuffer cmd) { + for (VertexBuffer vb : vertexBuffers) { + vb.update(cmd); + } + indexBuffer.update(cmd); } @Override public void bind(CommandBuffer cmd) { - + try (MemoryStack stack = MemoryStack.stackPush()) { + LongBuffer verts = stack.mallocLong(vertexBuffers.size()); + LongBuffer offsets = stack.mallocLong(vertexBuffers.size()); + for (VertexBuffer vb : vertexBuffers) { + verts.put(vb.buffer.getId()); + offsets.put(0L); + } + verts.flip(); + offsets.flip(); + vkCmdBindVertexBuffers(cmd.getBuffer(), 0, verts, offsets); + } + vkCmdBindIndexBuffer(cmd.getBuffer(), indexBuffer.buffer.getId(), 0, IndexType.UInt32.getEnum()); } @Override public void draw(CommandBuffer cmd) { - + vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.buffer.size().getElements(), 1, 0, 0, 0); } - @Override - public BoundingVolume computeBounds() { - return null; - } - - public static class VertexBuffer { + protected static class VertexBuffer { - //private final BufferMode hint; + private DataPipe pipe; private GpuBuffer buffer; - public VertexBuffer() { - //this.hint = hint; - } - - public void createBuffer() { - //buffer = hint.createBuffer() + public void update(CommandBuffer cmd) { + buffer = pipe.execute(cmd); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java index 5af6b246ee..a68a66c9e0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java @@ -5,6 +5,8 @@ public interface Mesh { + void update(CommandBuffer cmd); + void bind(CommandBuffer cmd); void draw(CommandBuffer cmd); From bb7ab4681429cc193b5feab7c9b2c7f74404a961 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 8 Sep 2025 22:35:03 -0400 Subject: [PATCH 49/80] completed AdaptiveMesh; added CommandBatch system to properly update buffers only when necessary; RENDERING WORKS! --- VulkanDesign.txt | 17 +- .../jme3test/vulkan/VulkanHelperTest.java | 177 +++++++++------ .../src/main/java/com/jme3/vulkan/Format.java | 29 +++ .../com/jme3/vulkan/buffers/BufferRegion.java | 68 ++++++ .../com/jme3/vulkan/buffers/GpuBuffer.java | 11 +- .../jme3/vulkan/buffers/StageableBuffer.java | 53 ++++- .../com/jme3/vulkan/buffers/StaticBuffer.java | 32 +-- .../jme3/vulkan/buffers/VersionedBuffer.java | 84 ------- .../jme3/vulkan/commands/CommandBuffer.java | 5 + .../com/jme3/vulkan/commands/CommandPool.java | 4 +- ...uffer.java => TransientCommandBuffer.java} | 6 +- .../main/java/com/jme3/vulkan/data/Data.java | 30 --- .../java/com/jme3/vulkan/data/DataPipe.java | 12 - .../com/jme3/vulkan/data/PerFrameData.java | 62 ----- .../jme3/vulkan/data/PerFrameStagingPipe.java | 44 ---- .../java/com/jme3/vulkan/data/PipeResult.java | 29 --- .../com/jme3/vulkan/data/StagingPipe.java | 38 ---- .../jme3/vulkan/data/TerminalDataPipe.java | 9 - .../jme3/vulkan/data/ThroughputDataPipe.java | 9 - .../jme3/vulkan/frames/PerFrameCommand.java | 19 ++ .../jme3/vulkan/frames/PerFrameResource.java | 45 ++++ .../com/jme3/vulkan/frames/SingleCommand.java | 19 ++ .../jme3/vulkan/frames/SingleResource.java | 38 ++++ .../vulkan/frames/UpdateFrameManager.java | 14 +- .../jme3/vulkan/frames/VersionWrapper.java | 42 ---- .../jme3/vulkan/frames/VersionedResource.java | 45 ++-- .../java/com/jme3/vulkan/images/GpuImage.java | 8 + .../com/jme3/vulkan/images/ImageView.java | 11 +- .../java/com/jme3/vulkan/images/Texture.java | 4 +- .../com/jme3/vulkan/images/VulkanImage.java | 3 + .../jme3/vulkan/images/VulkanImageLoader.java | 3 +- .../com/jme3/vulkan/material/Material.java | 12 - .../com/jme3/vulkan/material/UniformSet.java | 8 +- .../material/uniforms/AbstractUniform.java | 23 +- .../material/uniforms/BufferUniform.java | 2 +- .../material/uniforms/TextureUniform.java | 2 +- .../vulkan/material/uniforms/Uniform.java | 20 +- .../com/jme3/vulkan/mesh/AdaptiveMesh.java | 132 +++++++++-- .../jme3/vulkan/mesh/AttributeModifier.java | 21 +- .../java/com/jme3/vulkan/mesh/IndexType.java | 21 +- .../com/jme3/vulkan/mesh/IndexedMesh.java | 39 ---- .../main/java/com/jme3/vulkan/mesh/Mesh.java | 2 - .../com/jme3/vulkan/mesh/MeshDescription.java | 74 +++++- .../com/jme3/vulkan/mesh/MyCustomMesh.java | 77 ++++++- .../jme3/vulkan/mesh/NewMeshDescription.java | 10 - .../vulkan/mesh/NullAttributeModifier.java | 211 ++++++++++++++++++ .../vulkan/mesh/TestCaseMeshDescription.java | 74 ------ .../com/jme3/vulkan/mesh/VertexAttribute.java | 9 +- .../com/jme3/vulkan/mesh/VertexBinding.java | 40 +++- .../com/jme3/vulkan/mesh/VertexBuffer.java | 60 ++++- .../vulkan/pipelines/states/DynamicState.java | 18 +- .../com/jme3/vulkan/surface/Swapchain.java | 6 + .../java/com/jme3/vulkan/sync/SyncGroup.java | 42 +++- .../jme3/vulkan/update/BasicCommandBatch.java | 39 ++++ .../java/com/jme3/vulkan/update/Command.java | 9 + .../com/jme3/vulkan/update/CommandBatch.java | 9 + .../com/jme3/vulkan/update/CommandRunner.java | 62 +++++ .../resources/Shaders/VulkanFragTest.glsl | 3 +- .../resources/Shaders/VulkanVertTest.glsl | 5 +- 59 files changed, 1239 insertions(+), 761 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferRegion.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/{OneTimeCommandBuffer.java => TransientCommandBuffer.java} (92%) delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PipeResult.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/TerminalDataPipe.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameCommand.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleCommand.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleResource.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionWrapper.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexedMesh.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NewMeshDescription.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/BasicCommandBatch.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/Command.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandBatch.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandRunner.java diff --git a/VulkanDesign.txt b/VulkanDesign.txt index 2497e129bf..8b96eacb1d 100644 --- a/VulkanDesign.txt +++ b/VulkanDesign.txt @@ -119,4 +119,19 @@ There is actually one more problem I overlooked with DataPipes. CommandBuffers n - Again, I'm fuzzy on exactly what situations would warrant multiple CommandBuffers, so I'm not willing to implement this at the moment. - I could do a simple version of this just out of principle. Perhaps in the future we will know enough to implement such a system. -For now, I'll go with #1. \ No newline at end of file +For now, I'll go with #1. + +----- + +Well, I've run into a new problem. I'm not sure what it is exactly, but the DataPipe system isn't working as smoothly as I'd hoped. It doesn't handle different forms of buffers very well (static, dynamic, adaptive). For example, in order for a static buffer to work, the staging buffer should be deleted after the transfer is complete. DataPipes have no clean way to handle that (and really, niether does any other available system). At the same time, DataPipes need a "needs update" check so that certain operations can be skipped if the incoming buffer hasn't changed. + +My original idea was to have a Buffer implementation that deferred to one of N internal buffers depending on the frame could still possibly work. + +----- + +Yesterday, the occured to me that there are two main issues I'm trying to combat: + + 1. Updating items (buffers especially) at the correct time. + 2. Ensuring the proper items are used at any given time (i.e. per-frame versions). + +Now, a new solution to the first problem would be an update registry system. On creation, you register the item with a particular update batch, which will then update the item at the correct time. Furthermore, this will centralize CommandBuffer usage and make it easier to fine-tune synchronization (which would have otherwise been a fairly major problem). diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 09518e11e1..41d0e168fa 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -16,19 +16,16 @@ import com.jme3.vulkan.buffers.*; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.commands.CommandPool; -import com.jme3.vulkan.data.Data; -import com.jme3.vulkan.data.PerFrameData; -import com.jme3.vulkan.data.TerminalDataPipe; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.*; +import com.jme3.vulkan.frames.SingleResource; import com.jme3.vulkan.frames.UpdateFrame; import com.jme3.vulkan.frames.UpdateFrameManager; import com.jme3.vulkan.images.*; import com.jme3.vulkan.material.TestMaterial; import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; -import com.jme3.vulkan.mesh.IndexType; -import com.jme3.vulkan.mesh.TestCaseMeshDescription; +import com.jme3.vulkan.mesh.*; import com.jme3.vulkan.pass.Attachment; import com.jme3.vulkan.pass.Subpass; import com.jme3.vulkan.pipelines.*; @@ -43,12 +40,15 @@ import com.jme3.vulkan.sync.Fence; import com.jme3.vulkan.sync.Semaphore; import com.jme3.vulkan.sync.SyncGroup; +import com.jme3.vulkan.update.CommandBatch; +import com.jme3.vulkan.update.BasicCommandBatch; import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; import java.nio.FloatBuffer; import java.nio.IntBuffer; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import static org.lwjgl.vulkan.VK13.*; @@ -74,6 +74,7 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda private VulkanLogger logger; // mesh + private Mesh mesh; private final FloatBuffer vertexData = BufferUtils.createFloatBuffer( -0.5f, -0.5f, 0f, 1f, 0f, 0f, 1f, 0f, 0.5f, -0.5f, 0f, 0f, 1f, 0f, 0f, 0f, @@ -101,9 +102,15 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda // framebuffer private ImageView depthView; + // commands + private CommandBatch graphics, perFrameData, sharedData; + private Fence sharedDataFence; + public static void main(String[] args) { VulkanHelperTest app = new VulkanHelperTest(); AppSettings settings = new AppSettings(true); + settings.setFrameRate(0); + settings.setVSync(false); settings.setWidth(768); settings.setHeight(768); settings.setRenderer("CUSTOM" + LwjglVulkanContext.class.getName()); @@ -151,6 +158,8 @@ public void simpleInitApp() { } GeneralPhysicalDevice physDevice = device.getPhysicalDevice(); + graphicsPool = device.getLongTermPool(physDevice.getGraphics()); + // swapchain swapchain = new Swapchain(device, surface); swapchain.build(s -> { @@ -174,17 +183,17 @@ public void simpleInitApp() { new PoolSize(Descriptor.StorageBuffer, 4), new PoolSize(Descriptor.CombinedImageSampler, 2)); - CommandPool transferPool = device.getShortTermPool(physDevice.getGraphics()); + CommandPool initPool = device.getShortTermPool(physDevice.getGraphics()); + CommandBuffer initCommands = initPool.allocateTransientCommandBuffer(); + initCommands.begin(); // depth texture - depthView = createDepthAttachment(transferPool); + depthView = createDepthAttachment(initCommands); - // pipeline - pipelineLayout = new PipelineLayout(device, descriptorLayout); - vertModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( - "Shaders/VulkanVertTest.glsl", ShaderType.Vertex))); - fragModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( - "Shaders/VulkanFragTest.glsl", ShaderType.Fragment))); + initCommands.endAndSubmit(SyncGroup.ASYNC); + initCommands.getPool().getQueue().waitIdle(); + + // render pass renderPass = new RenderPass(device); try (RenderPass.Builder p = renderPass.build()) { Attachment color = p.createAttachment(swapchain.getFormat(), VK_SAMPLE_COUNT_1_BIT, a -> { @@ -215,41 +224,54 @@ public void simpleInitApp() { }); } swapchain.createFrameBuffers(renderPass, depthView); - pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, 0, new TestCaseMeshDescription()); + + // mesh description + MeshDescription meshDesc = new MeshDescription(); + int meshBinding0 = meshDesc.addAttribute(VertexAttribute.POSITION, InputRate.Vertex, Format.RGB32SFloat, 0); + meshDesc.addAttribute(VertexAttribute.TEXCOORD, meshBinding0, Format.RG32SFloat, 1); + meshDesc.addAttribute(VertexAttribute.NORMALS, meshBinding0, Format.RGB32SFloat, 2); + + // pipeline + pipelineLayout = new PipelineLayout(device, descriptorLayout); + vertModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( + "Shaders/VulkanVertTest.glsl", ShaderType.Vertex))); + fragModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( + "Shaders/VulkanFragTest.glsl", ShaderType.Fragment))); + pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, 0, meshDesc); try (GraphicsPipeline.Builder p = pipeline.build()) { p.addShader(vertModule, ShaderStage.Vertex, "main"); p.addShader(fragModule, ShaderStage.Fragment, "main"); + p.getRasterization().setCullMode(VK_CULL_MODE_NONE); p.getViewportState().addViewport(); p.getViewportState().addScissor(); p.getColorBlend().addAttachment(new ColorBlendAttachment()); p.getDynamicState().addTypes(DynamicState.Type.ViewPort, DynamicState.Type.Scissor); } - graphicsPool = device.getLongTermPool(physDevice.getGraphics()); - - // vertex buffers - // cpu-accessible memory is not usually fast for the gpu to access, but - // the cpu cannot directly access fast gpu memory. The solution is to - // copy cpu-side data to a mutual staging buffer, then have the gpu copy - // that data to faster memory. - vertexBuffer = new StaticBuffer(device, transferPool, MemorySize.floats(vertexData.capacity()), - BufferUsage.Vertex, MemoryProp.DeviceLocal, false); - vertexBuffer.copy(vertexData); - indexBuffer = new StaticBuffer(device, transferPool, MemorySize.ints(indexData.capacity()), - BufferUsage.Index, MemoryProp.DeviceLocal, false); - indexBuffer.copy(indexData); frames = new UpdateFrameManager(2, n -> new Frame()); // material color texture - VulkanImage image = assetManager.loadAsset(VulkanImageLoader.key(transferPool, "Common/Textures/MissingTexture.png")); - texture = new Texture(device, new ImageView(image, VulkanImage.View.TwoDemensional), - VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); + VulkanImage image = assetManager.loadAsset(VulkanImageLoader.key(initPool, "Common/Textures/MissingTexture.png")); + ImageView imgView = new ImageView(image, VulkanImage.View.TwoDemensional); + try (ImageView.Builder i = imgView.build()) { + i.setAspect(VulkanImage.Aspect.Color); + } + texture = new Texture(device, imgView, VK_FILTER_LINEAR, VK_FILTER_LINEAR, + VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); + + graphics = new BasicCommandBatch(); + perFrameData = new BasicCommandBatch(); + sharedData = new BasicCommandBatch(); + sharedDataFence = new Fence(device, true); + + // mesh + mesh = new MyCustomMesh(device, frames, meshDesc, sharedData, + Vector3f.UNIT_Z, Vector3f.UNIT_Y, 1f, 1f, 0.5f, 0.5f); material = new TestMaterial(descriptorPool); - PerFrameData matrixInputPipe = frames.perFrame(n -> - new PersistentBuffer(device, MemorySize.floats(16), BufferUsage.Uniform, false)); - material.getMatrices().setPipe(material.setPipe("Matrices", matrixInputPipe)); - material.getBaseColorMap().setPipe(new Data<>(texture)); + material.getMatrices().setResource(frames.perFrame(n -> + new PersistentBuffer(device, MemorySize.floats(16), BufferUsage.Uniform, false))); + material.getBaseColorMap().setResource(new SingleResource<>(texture)); } @@ -274,7 +296,11 @@ public boolean swapchainOutOfDate(Swapchain swapchain, int imageAcquireCode) { // s.selectExtentByWindow(); // s.selectImageCount(2); // } - depthView = createDepthAttachment(device.getShortTermPool(device.getPhysicalDevice().getGraphics())); + CommandBuffer cmd = device.getShortTermPool(device.getPhysicalDevice().getGraphics()).allocateTransientCommandBuffer(); + cmd.begin(); + depthView = createDepthAttachment(cmd); + cmd.endAndSubmit(SyncGroup.ASYNC); + cmd.getPool().getQueue().waitIdle(); swapchain.createFrameBuffers(renderPass, depthView); return true; } @@ -294,7 +320,7 @@ public void simpleUpdate(float tpf) { frames.update(tpf); } - private ImageView createDepthAttachment(CommandPool pool) { + private ImageView createDepthAttachment(CommandBuffer cmd) { Format depthFormat = device.getPhysicalDevice().findSupportedFormat( VulkanImage.Tiling.Optimal, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, @@ -310,70 +336,82 @@ private ImageView createDepthAttachment(CommandPool pool) { ImageView view = new ImageView(image, VulkanImage.View.TwoDemensional); try (ImageView.Builder v = view.build()) { v.allMipmaps(); + v.setAspect(VulkanImage.Aspect.Depth); } - CommandBuffer commands = pool.allocateOneTimeCommandBuffer(); - commands.begin(); - image.transitionLayout(commands, VulkanImage.Layout.Undefined, VulkanImage.Layout.DepthStencilAttachmentOptimal); - commands.endAndSubmit(SyncGroup.ASYNC); - commands.getPool().getQueue().waitIdle(); + image.transitionLayout(cmd, VulkanImage.Layout.Undefined, VulkanImage.Layout.DepthStencilAttachmentOptimal); return view; } private class Frame implements UpdateFrame { // render manager - private final CommandBuffer transferCommands = graphicsPool.allocateCommandBuffer(); + private final CommandBuffer perFrameDataCommands = graphicsPool.allocateCommandBuffer(); + private final CommandBuffer sharedDataCommands = graphicsPool.allocateCommandBuffer(); private final CommandBuffer graphicsCommands = graphicsPool.allocateCommandBuffer(); private final Semaphore imageAvailable = new Semaphore(device, PipelineStage.ColorAttachmentOutput); - private final Semaphore transferFinished = new Semaphore(device, PipelineStage.TopOfPipe); + private final Semaphore perFrameDataFinished = new Semaphore(device, PipelineStage.TopOfPipe); + private final Semaphore sharedDataFinished = new Semaphore(device, PipelineStage.TopOfPipe); private final Semaphore renderFinished = new Semaphore(device); private final Fence inFlight = new Fence(device, true); @Override public void update(UpdateFrameManager frames, float tpf) { - // render manager + // block until this frame has fully completed previous rendering commands if (applicationStopped) return; inFlight.block(5000); if (applicationStopped) return; + + // get swapchain image to present with Swapchain.PresentImage image = swapchain.acquireNextImage(VulkanHelperTest.this, imageAvailable, null, 5000); if (image == null) { return; // no image available: skip rendering this frame } inFlight.reset(); + // set camera to render with renderManager.setCamera(cam, false); - // compute geometry states - modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y)); - Matrix4f worldViewProjection = cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()); + // update matrix uniform (geometry) + { + // compute geometry states + modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y)); + Matrix4f worldViewProjection = cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix()); - // Begin data transfer commands. Transfer and graphics commands could be put - // in seperate threads since they are synchronized by a semaphore. - transferCommands.reset(); - transferCommands.begin(); + // update material uniform + GpuBuffer matrixBuffer = material.getMatrices().getResource().get(); + worldViewProjection.fillFloatBuffer(matrixBuffer.mapFloats(), true); + matrixBuffer.unmap(); + } - // update material data - TerminalDataPipe matrixBuffer = material.getPipe("Matrices"); - worldViewProjection.fillFloatBuffer(matrixBuffer.getInput().mapFloats(), true); - matrixBuffer.getInput().unmap(); - material.update(transferCommands); // use the transfer buffer for material updates + // update shared data + { + sharedDataFence.block(5000); + sharedDataCommands.resetAndBegin(); + SyncGroup dataSync = sharedDataFinished.toGroupSignal(); + if (sharedData.run(sharedDataCommands, frames.getCurrentFrame())) { + sharedDataFence.reset(); + dataSync.setFence(sharedDataFence); // force the next frame to wait + } + sharedDataCommands.endAndSubmit(dataSync); + } - // submit data transfer commands - transferCommands.endAndSubmit(SyncGroup.signal(transferFinished)); + // update per-frame data + { + perFrameDataCommands.resetAndBegin(); + perFrameData.run(perFrameDataCommands, frames.getCurrentFrame()); + perFrameDataCommands.endAndSubmit(perFrameDataFinished.toGroupSignal()); + } // begin graphics commands - graphicsCommands.reset(); - graphicsCommands.begin(); + graphicsCommands.resetAndBegin(); // material graphics renderPass.begin(graphicsCommands, image.getFrameBuffer()); pipeline.bind(graphicsCommands); - material.bind(graphicsCommands, pipeline); + // viewport and scissor try (MemoryStack stack = MemoryStack.stackPush()) { - - // viewport VkViewport.Buffer vp = VkViewport.calloc(1, stack) .x(0f).y(0f) .width(swapchain.getExtent().getX()) @@ -384,19 +422,22 @@ public void update(UpdateFrameManager frames, float tpf) { scissor.offset().set(0, 0); scissor.extent(swapchain.getExtent().toStruct(stack)); vkCmdSetScissor(graphicsCommands.getBuffer(), 0, scissor); + } - // mesh - vkCmdBindVertexBuffers(graphicsCommands.getBuffer(), 0, stack.longs(vertexBuffer.getId()), stack.longs(0)); - vkCmdBindIndexBuffer(graphicsCommands.getBuffer(), indexBuffer.getId(), 0, IndexType.UInt32.getEnum()); - vkCmdDrawIndexed(graphicsCommands.getBuffer(), indexBuffer.size().getElements(), 1, 0, 0, 0); + // run graphics commands via CommandBatch + graphics.run(graphicsCommands, frames.getCurrentFrame()); + material.bind(graphicsCommands, pipeline); + mesh.bind(graphicsCommands); + for (int i = 0; i < 100; i++) { + mesh.draw(graphicsCommands); } // material renderPass.end(graphicsCommands); // render manager - graphicsCommands.endAndSubmit(new SyncGroup(new Semaphore[] {imageAvailable, transferFinished}, renderFinished, inFlight)); + graphicsCommands.endAndSubmit(new SyncGroup(new Semaphore[] {imageAvailable, perFrameDataFinished, sharedDataFinished}, renderFinished, inFlight)); swapchain.present(device.getPhysicalDevice().getPresent(), image, renderFinished.toGroupWait()); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Format.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Format.java index 2669326748..542b78be41 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Format.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Format.java @@ -26,6 +26,35 @@ public enum Format implements Iterable { Depth16UNorm(VK_FORMAT_D16_UNORM, array(cf(2)), false, true, false), Depth16UNorm_Stencil8UInt(VK_FORMAT_D16_UNORM_S8_UINT, array(cf(2), c(1)), false, true, true); + public enum Feature implements Flag { + + DepthStencilAttachment(VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT), + BlitDst(VK_FORMAT_FEATURE_BLIT_DST_BIT), + BlitSrc(VK_FORMAT_FEATURE_BLIT_SRC_BIT), + ColorAttachment(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT), + SampledImage(VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT), + ColorAttachmentBlend(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT), + SampledImageFilterLinear(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT), + StorageImageAtomic(VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT), + StorageImage(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT), + StorageTexelBufferAtomic(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT), + StorageTexelBuffer(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT), + UniformTexelBuffer(VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT), + VertexBuffer(VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT); + + private final int bits; + + Feature(int bits) { + this.bits = bits; + } + + @Override + public int bits() { + return bits; + } + + } + private final int vkEnum, totalBytes; private final Component[] components; private final boolean color, depth, stencil; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferRegion.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferRegion.java new file mode 100644 index 0000000000..c613ab7135 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferRegion.java @@ -0,0 +1,68 @@ +package com.jme3.vulkan.buffers; + +import com.jme3.vulkan.memory.MemorySize; + +public class BufferRegion { + + private int offset, end; + + public BufferRegion(int offset, int size) { + this.offset = verifyOffset(offset); + this.end = offset + verifySize(size); + } + + public BufferRegion set(BufferRegion region) { + this.offset = region.offset; + this.end = region.end; + return this; + } + + public BufferRegion set(int offset, int size) { + this.offset = verifyOffset(offset); + this.end = offset + verifySize(size); + return this; + } + + public BufferRegion unionLocal(BufferRegion region) { + offset = Math.min(offset, region.offset); + end = Math.max(end, region.end); + return this; + } + + public BufferRegion unionLocal(int offset, int size) { + this.offset = Math.min(this.offset, verifyOffset(offset)); + this.end = Math.max(this.end, offset + verifySize(size)); + return this; + } + + public int getOffset() { + return offset; + } + + public int getSize() { + return end - offset; + } + + public int getEnd() { + return end; + } + + public static BufferRegion all(MemorySize size) { + return new BufferRegion(0, size.getBytes()); + } + + private static int verifyOffset(int offset) { + if (offset < 0) { + throw new IllegalArgumentException("Offset cannot be negative."); + } + return offset; + } + + private static int verifySize(int size) { + if (size <= 0) { + throw new IllegalArgumentException("Size must be positive."); + } + return size; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index f413cf7e25..bcdab77a4b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -22,8 +22,7 @@ public interface GpuBuffer { * exception is thrown. * * @param offset offset, in bytes, of the mapping - * @param size size, in bytes, of the mapping, or {@link org.lwjgl.vulkan.VK10#VK_WHOLE_SIZE - * VK_WHOLE_SIZE} to map all buffer memory starting at {@code offset}. + * @param size size, in bytes, of the mapping * @return Buffer containing a pointer to the mapped memory */ PointerBuffer map(int offset, int size); @@ -42,6 +41,14 @@ default void verifyBufferSize(int elements, long bytesPerElement) { } } + default PointerBuffer map(int offset) { + return map(offset, size().getBytes() - offset); + } + + default PointerBuffer map() { + return map(0, size().getBytes()); + } + default T map(int offset, int size, Function factory) { return factory.apply(map(offset, size)); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java index 2dd2ca8cd9..f6ae4f1d95 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java @@ -6,23 +6,36 @@ import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.sync.SyncGroup; +import com.jme3.vulkan.update.Command; import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -public class StageableBuffer extends BasicVulkanBuffer { +public class StageableBuffer extends BasicVulkanBuffer implements Command { - private final VulkanBuffer stage; + protected VulkanBuffer stage; + protected BufferRegion dirtyRegion; public StageableBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { super(device, size, usage.add(BufferUsage.TransferDst), mem, concurrent); - this.stage = new BasicVulkanBuffer(device, size, BufferUsage.TransferSrc, - Flag.of(MemoryProp.HostVisible, MemoryProp.HostCoherent), concurrent); + } + + @Override + public boolean run(CommandBuffer cmd, int frame) { + return transfer(cmd); } @Override public PointerBuffer map(int offset, int size) { + if (dirtyRegion != null) { + dirtyRegion.unionLocal(offset, size); + } else { + dirtyRegion = new BufferRegion(offset, size); + } + if (stage == null) { + stage = createStagingBuffer(); + } return stage.map(offset, size); } @@ -35,6 +48,12 @@ public void unmap() { public void freeMemory() { super.freeMemory(); stage.freeMemory(); + dirtyRegion = null; + } + + protected VulkanBuffer createStagingBuffer() { + return new BasicVulkanBuffer(getDevice(), size(), BufferUsage.TransferSrc, + Flag.of(MemoryProp.HostVisible, MemoryProp.HostCoherent), false); } public void transfer(CommandPool transferPool) { @@ -42,20 +61,30 @@ public void transfer(CommandPool transferPool) { } public void transfer(CommandPool transferPool, SyncGroup sync) { - CommandBuffer cmd = transferPool.allocateOneTimeCommandBuffer(); - cmd.begin(); - transfer(cmd); - cmd.endAndSubmit(sync); + if (stage != null && dirtyRegion != null) { + CommandBuffer cmd = transferPool.allocateTransientCommandBuffer(); + cmd.begin(); + transfer(cmd); + cmd.endAndSubmit(sync); + } } - public void transfer(CommandBuffer cmd) { - try (MemoryStack stack = MemoryStack.stackPush()) { - recordCopy(stack, cmd, stage, 0, 0, size().getBytes()); + public boolean transfer(CommandBuffer cmd) { + if (stage != null && dirtyRegion != null) { + try (MemoryStack stack = MemoryStack.stackPush()) { + recordCopy(stack, cmd, stage, dirtyRegion.getOffset(), dirtyRegion.getOffset(), dirtyRegion.getSize()); + } + dirtyRegion = null; + return true; } + return false; } public void freeStagingBuffer() { - stage.freeMemory(); + if (stage != null) { + stage.freeMemory(); + stage = null; + } } public GpuBuffer getStagingBuffer() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java index fe3a10c6a2..ddaefc9a0e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java @@ -1,43 +1,23 @@ package com.jme3.vulkan.buffers; -import com.jme3.vulkan.commands.CommandPool; +import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; -import com.jme3.vulkan.sync.Fence; -import com.jme3.vulkan.sync.SyncGroup; -import com.jme3.vulkan.sync.TaskQueue; import com.jme3.vulkan.util.Flag; -import java.util.concurrent.*; - public class StaticBuffer extends StageableBuffer { - private final CommandPool transferPool; - - public StaticBuffer(LogicalDevice device, CommandPool transferPool, MemorySize size, Flag usage, Flag mem, boolean concurrent) { + public StaticBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) { super(device, size, usage, mem, concurrent); - this.transferPool = transferPool; } @Override - public void unmap() { - super.unmap(); - SyncGroup sync = new SyncGroup(new Fence(getDevice(), false)); - transfer(transferPool, sync); - sync.getFence().block(5000); - freeStagingBuffer(); - } - - public void unmapAsync(TaskQueue queue, SyncGroup sync) { - if (!sync.containsFence()) { - throw new IllegalArgumentException("SyncGroup must contain a fence."); - } - transfer(transferPool, sync); - queue.submit(new FutureTask<>(() -> { - sync.getFence().block(5000); + public boolean run(CommandBuffer cmd, int frame) { + if (dirtyRegion == null) { freeStagingBuffer(); - }, true)); + } + return super.run(cmd, frame); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java deleted file mode 100644 index dd991ae53e..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VersionedBuffer.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.jme3.vulkan.buffers; - -import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.frames.VersionedResource; -import com.jme3.vulkan.frames.UpdateFrameManager; -import com.jme3.vulkan.memory.MemorySize; -import org.lwjgl.PointerBuffer; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.function.Function; - -public class VersionedBuffer implements VulkanBuffer, VersionedResource { - - private final UpdateFrameManager frames; - private final MemorySize size; - private final List buffers; - - public VersionedBuffer(UpdateFrameManager frames, MemorySize size, Function factory) { - this.frames = frames; - this.size = size; - ArrayList bufferList = new ArrayList<>(); - for (int i = 0; i < frames.getTotalFrames(); i++) { - bufferList.add(factory.apply(size)); - } - this.buffers = Collections.unmodifiableList(bufferList); - } - - @Override - public PointerBuffer map(int offset, int size) { - return getVersion().map(offset, size); - } - - @Override - public void unmap() { - getVersion().unmap(); - } - - @Override - public void freeMemory() { - buffers.forEach(GpuBuffer::freeMemory); - } - - @Override - public MemorySize size() { - return size; - } - - @Override - public long getId() { - return getVersion().getId(); - } - - @Override - public T getVersion() { - return getVersion(frames.getCurrentFrame()); - } - - @Override - public T getVersion(int i) { - return buffers.get(Math.min(i, buffers.size() - 1)); - } - - @Override - public int getNumVersions() { - return buffers.size(); - } - - @Override - public int getCurrentVersionIndex() { - return Math.min(frames.getCurrentFrame(), buffers.size() - 1); - } - - public List getInternalBuffers() { - return buffers; - } - - @Override - public LogicalDevice getDevice() { - return getVersion().getDevice(); - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java index 42f99a8ec1..219abc6090 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java @@ -44,6 +44,11 @@ public void begin() { } } + public void resetAndBegin() { + reset(); + begin(); + } + public void end() { if (!recording) { throw new IllegalStateException("Command buffer has not begun recording."); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java index 6adb7e4a61..de3d4dfeed 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java @@ -85,8 +85,8 @@ public CommandBuffer allocateCommandBuffer() { return new CommandBuffer(this); } - public OneTimeCommandBuffer allocateOneTimeCommandBuffer() { - return new OneTimeCommandBuffer(this); + public TransientCommandBuffer allocateTransientCommandBuffer() { + return new TransientCommandBuffer(this); } public LogicalDevice getDevice() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/OneTimeCommandBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/TransientCommandBuffer.java similarity index 92% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/OneTimeCommandBuffer.java rename to jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/TransientCommandBuffer.java index 06775cf648..b2de94614a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/OneTimeCommandBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/TransientCommandBuffer.java @@ -1,7 +1,5 @@ package com.jme3.vulkan.commands; -import com.jme3.vulkan.sync.Fence; -import com.jme3.vulkan.sync.Semaphore; import com.jme3.vulkan.sync.SyncGroup; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkCommandBufferBeginInfo; @@ -9,11 +7,11 @@ import static org.lwjgl.vulkan.VK10.*; -public class OneTimeCommandBuffer extends CommandBuffer { +public class TransientCommandBuffer extends CommandBuffer { private boolean active = false; - public OneTimeCommandBuffer(CommandPool pool) { + public TransientCommandBuffer(CommandPool pool) { super(pool); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java deleted file mode 100644 index c16a716cde..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/Data.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.jme3.vulkan.data; - -import com.jme3.vulkan.commands.CommandBuffer; - -public class Data implements TerminalDataPipe { - - private T input; - - public Data() {} - - public Data(T input) { - this.input = input; - } - - @Override - public T execute(CommandBuffer cmd) { - return input; - } - - @Override - public void setInput(T input) { - this.input = input; - } - - @Override - public T getInput() { - return input; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java deleted file mode 100644 index 42b10ae5b6..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/DataPipe.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.jme3.vulkan.data; - -import com.jme3.vulkan.commands.CommandBuffer; - -/** - * Transforms incoming data into a useful format. - */ -public interface DataPipe { - - T execute(CommandBuffer cmd); - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java deleted file mode 100644 index 7093f40fb7..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameData.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.jme3.vulkan.data; - -import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.frames.UpdateFrameManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.function.IntFunction; - -public class PerFrameData implements TerminalDataPipe { - - private final UpdateFrameManager frames; - private final ArrayList data = new ArrayList<>(); - - @SafeVarargs - public PerFrameData(UpdateFrameManager frames, T... data) { - this.frames = frames; - Collections.addAll(this.data, data); - if (this.data.size() != frames.getTotalFrames()) { - throw new IllegalArgumentException("Must have one data entry per frame."); - } - } - - public PerFrameData(UpdateFrameManager frames, IntFunction generator) { - this.frames = frames; - for (int i = 0; i < frames.getTotalFrames(); i++) { - data.add(generator.apply(i)); - } - } - - @Override - public T execute(CommandBuffer cmd) { - return data.get(frames.getCurrentFrame()); - } - - @Override - public void setInput(T input) { - this.data.set(frames.getCurrentFrame(), input); - } - - @Override - public T getInput() { - return data.get(frames.getCurrentFrame()); - } - - private void verifyFrameInBounds(int frame) { - if (frame >= frames.getTotalFrames()) { - throw new IndexOutOfBoundsException("Frame index " + frame + " out of bounds for " + frames.getTotalFrames() + " frames."); - } - } - - public void setInput(int frame, T data) { - verifyFrameInBounds(frame); - this.data.set(frame, data); - } - - public T getInput(int frame) { - verifyFrameInBounds(frame); - return data.get(frame); - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java deleted file mode 100644 index 9673bb0b04..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PerFrameStagingPipe.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.jme3.vulkan.data; - -import com.jme3.vulkan.buffers.VulkanBuffer; -import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.frames.UpdateFrameManager; -import org.lwjgl.system.MemoryStack; - -import java.util.function.IntFunction; - -public class PerFrameStagingPipe implements ThroughputDataPipe { - - private final UpdateFrameManager frames; - private final VulkanBuffer[] outputs; - private DataPipe input; - - public PerFrameStagingPipe(UpdateFrameManager frames, IntFunction generator) { - this.frames = frames; - this.outputs = new VulkanBuffer[frames.getTotalFrames()]; - for (int i = 0; i < outputs.length; i++) { - outputs[i] = generator.apply(i); - } - } - - @Override - public VulkanBuffer execute(CommandBuffer cmd) { - VulkanBuffer in = input.execute(cmd); - VulkanBuffer out = outputs[frames.getCurrentFrame()]; - try (MemoryStack stack = MemoryStack.stackPush()) { - out.recordCopy(stack, cmd, in, 0, 0, Math.min(in.size().getBytes(), out.size().getBytes())); - } - return out; - } - - @Override - public void setInput(DataPipe input) { - this.input = input; - } - - @Override - public DataPipe getInput() { - return input; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PipeResult.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PipeResult.java deleted file mode 100644 index 2124698469..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/PipeResult.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.jme3.vulkan.data; - -import com.jme3.vulkan.commands.CommandBuffer; - -public class PipeResult implements ThroughputDataPipe { - - private DataPipe input; - private T result; - - @Override - public void setInput(DataPipe input) { - this.input = input; - } - - @Override - public DataPipe getInput() { - return input; - } - - @Override - public T execute(CommandBuffer cmd) { - return result = input.execute(cmd); - } - - public T getResult() { - return result; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java deleted file mode 100644 index 46a2efb532..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/StagingPipe.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.jme3.vulkan.data; - -import com.jme3.vulkan.buffers.VulkanBuffer; -import com.jme3.vulkan.commands.CommandBuffer; -import org.lwjgl.system.MemoryStack; - -/** - * Transfers data in a host-accessible buffer to another buffer. - */ -public class StagingPipe implements ThroughputDataPipe { - - private final VulkanBuffer output; - private DataPipe input; - - public StagingPipe(VulkanBuffer output) { - this.output = output; - } - - @Override - public VulkanBuffer execute(CommandBuffer cmd) { - VulkanBuffer in = input.execute(cmd); - try (MemoryStack stack = MemoryStack.stackPush()) { - output.recordCopy(stack, cmd, in, 0, 0, Math.min(in.size().getBytes(), output.size().getBytes())); - } - return output; - } - - @Override - public void setInput(DataPipe input) { - this.input = input; - } - - @Override - public DataPipe getInput() { - return input; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/TerminalDataPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/TerminalDataPipe.java deleted file mode 100644 index 09f3302823..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/TerminalDataPipe.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.jme3.vulkan.data; - -public interface TerminalDataPipe extends DataPipe { - - void setInput(In input); - - In getInput(); - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java deleted file mode 100644 index 188c312ed0..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/data/ThroughputDataPipe.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.jme3.vulkan.data; - -public interface ThroughputDataPipe extends DataPipe { - - void setInput(DataPipe input); - - DataPipe getInput(); - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameCommand.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameCommand.java new file mode 100644 index 0000000000..4c926e2c44 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameCommand.java @@ -0,0 +1,19 @@ +package com.jme3.vulkan.frames; + +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.update.Command; + +import java.util.function.IntFunction; + +public class PerFrameCommand extends PerFrameResource implements Command { + + public PerFrameCommand(UpdateFrameManager frames, IntFunction generator) { + super(frames, generator); + } + + @Override + public boolean run(CommandBuffer cmd, int frame) { + return get(frame).run(cmd, frame); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java new file mode 100644 index 0000000000..c913b1588d --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java @@ -0,0 +1,45 @@ +package com.jme3.vulkan.frames; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.IntFunction; + +public class PerFrameResource implements VersionedResource { + + private final UpdateFrameManager frames; + private final List resources; + + public PerFrameResource(UpdateFrameManager frames, IntFunction generator) { + this.frames = frames; + resources = new ArrayList<>(frames.getTotalFrames()); + for (int i = 0; i < frames.getTotalFrames(); i++) { + resources.add(generator.apply(i)); + } + } + + @Override + public void set(T resource) { + resources.set(frames.getCurrentFrame(), resource); + } + + @Override + public void set(int frame, T resource) { + resources.set(frame, resource); + } + + @Override + public T get() { + return resources.get(frames.getCurrentFrame()); + } + + @Override + public T get(int frame) { + return resources.get(frame); + } + + @Override + public int getNumResources() { + return resources.size(); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleCommand.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleCommand.java new file mode 100644 index 0000000000..9ae1a3f8ae --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleCommand.java @@ -0,0 +1,19 @@ +package com.jme3.vulkan.frames; + +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.update.Command; + +public class SingleCommand extends SingleResource implements Command { + + public SingleCommand() {} + + public SingleCommand(T resource) { + super(resource); + } + + @Override + public boolean run(CommandBuffer cmd, int frame) { + return get(frame).run(cmd, frame); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleResource.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleResource.java new file mode 100644 index 0000000000..e3207111cd --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleResource.java @@ -0,0 +1,38 @@ +package com.jme3.vulkan.frames; + +public class SingleResource implements VersionedResource { + + private T resource; + + public SingleResource() {} + + public SingleResource(T resource) { + this.resource = resource; + } + + @Override + public void set(T resource) { + this.resource = resource; + } + + @Override + public void set(int frame, T resource) { + this.resource = resource; + } + + @Override + public T get() { + return resource; + } + + @Override + public T get(int frame) { + return resource; + } + + @Override + public int getNumResources() { + return 1; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java index 761dd10b03..1693746c1e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java @@ -1,6 +1,6 @@ package com.jme3.vulkan.frames; -import com.jme3.vulkan.data.PerFrameData; +import com.jme3.vulkan.update.Command; import java.util.function.IntFunction; @@ -9,10 +9,10 @@ public class UpdateFrameManager { private final UpdateFrame[] frames; private int currentFrame = 0; - public UpdateFrameManager(int frames, IntFunction factory) { + public UpdateFrameManager(int frames, IntFunction generator) { this.frames = new UpdateFrame[frames]; for (int i = 0; i < frames; i++) { - this.frames[i] = factory.apply(i); + this.frames[i] = generator.apply(i); } } @@ -31,8 +31,12 @@ public int getCurrentFrame() { return currentFrame; } - public PerFrameData perFrame(IntFunction generator) { - return new PerFrameData<>(this, generator); + public PerFrameResource perFrame(IntFunction generator) { + return new PerFrameResource<>(this, generator); + } + + public PerFrameCommand perFrameCommand(IntFunction generator) { + return new PerFrameCommand<>(this, generator); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionWrapper.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionWrapper.java deleted file mode 100644 index 39ce89a017..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionWrapper.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.jme3.vulkan.frames; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.function.IntFunction; - -public class VersionWrapper implements VersionedResource { - - private final UpdateFrameManager frames; - private final List versions; - - public VersionWrapper(UpdateFrameManager frames, IntFunction generator) { - this.frames = frames; - ArrayList versionList = new ArrayList<>(frames.getTotalFrames()); - for (int i = 0; i < frames.getTotalFrames(); i++) { - versionList.add(generator.apply(i)); - } - versions = Collections.unmodifiableList(versionList); - } - - @Override - public T getVersion() { - return getVersion(frames.getCurrentFrame()); - } - - @Override - public T getVersion(int i) { - return versions.get(i); - } - - @Override - public int getNumVersions() { - return versions.size(); - } - - @Override - public int getCurrentVersionIndex() { - return frames.getCurrentFrame(); - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java index 58a908460b..ea14b3d4b3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java @@ -8,42 +8,37 @@ public interface VersionedResource { /** - * Gets the resource version for the current frame. + * Sets the resource for the current frame. * - *

This is functionally identical to

- *

-     * int currentFrameIndex = ...
-     * T version = getVersion(currentFrameIndex);
-     * 
- *

Where {@code currentFrameIndex} is the index of the current frame.

+ * @param resource resource to assign (not null) */ - T getVersion(); + void set(T resource); /** - * Gets the resource version for the specified frame index. The index - * may be between 0 (inclusive) and the number of frames-in-flight - * (exclusive), regardless of the number of versions this resource - * contains. + * Sets the resource for the specified frame. * - *

This method is deterministic. Calls with the same arguments return - * the same resource.

- * - * @param i frame index - * @return resource version mapped to the frame index + * @param frame frame to assign to (not negative) + * @param resource resource to assign (not null) */ - T getVersion(int i); + void set(int frame, T resource); /** - * Gets the number of unique versions this resource maintains. + * Gets the resource for the current frame. Must return the same value + * over the course of a frame. + */ + T get(); + + /** + * Gets the resource for the specified frame index. + * + * @param frame frame index (not negative) + * @return resource version mapped to the frame index */ - int getNumVersions(); + T get(int frame); /** - * Gets the index of the {@link #getVersion() current version}, which - * is not necessarily the current frame index, but is determined - * by the current frame index. This should always return the same - * value on the same frame. + * Gets the number of unique resources this resource maintains. */ - int getCurrentVersionIndex(); + int getNumResources(); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java index e4cf07dbc2..82a7f3a165 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -1,6 +1,7 @@ package com.jme3.vulkan.images; import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.Format; import com.jme3.vulkan.SharingMode; @@ -36,6 +37,8 @@ public class GpuImage extends AbstractNative implements VulkanImage { public GpuImage(LogicalDevice device, LibEnum type) { this.device = device; this.type = type; + width = height = depth = 1; + mipmaps = layers = 1; } @Override @@ -98,6 +101,11 @@ public LibEnum getSharingMode() { return sharing; } + @Override + public void addNativeDependent(NativeReference ref) { + this.ref.addDependent(ref); + } + @Override public Runnable createNativeDestroyer() { return () -> vkDestroyImage(device.getNativeObject(), object, null); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java index 4b92f93ca9..53cf392e75 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java @@ -7,6 +7,9 @@ import com.jme3.vulkan.util.LibEnum; import org.lwjgl.vulkan.VkImageViewCreateInfo; +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.check; import static org.lwjgl.vulkan.VK10.*; public class ImageView extends AbstractNative { @@ -88,7 +91,7 @@ public class Builder extends AbstractNative.Builder { protected void build() { VkImageViewCreateInfo create = VkImageViewCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) - .image(image.getNativeObject()) + .image(image.getId()) .viewType(type.getEnum()) .format(image.getFormat().getVkEnum()); create.components() @@ -102,8 +105,12 @@ protected void build() { .levelCount(mipmapCount) .baseArrayLayer(baseLayer) .layerCount(layerCount); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateImageView(image.getDevice().getNativeObject(), create, null, idBuf), + "Failed to create image view."); + object = idBuf.get(0); ref = Native.get().register(ImageView.this); - image.getNativeReference().addDependent(ref); + image.addNativeDependent(ref); } public void allMipmaps() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java index dea4ffb66c..e51ee51363 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java @@ -2,13 +2,15 @@ import com.jme3.vulkan.devices.LogicalDevice; +import java.util.Objects; + public class Texture extends Sampler { private final ImageView image; public Texture(LogicalDevice device, ImageView image, int min, int mag, int edgeMode, int mipmapMode) { super(device, min, mag, edgeMode, mipmapMode); - this.image = image; + this.image = Objects.requireNonNull(image); } public ImageView getImage() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java index 769a455b11..2c8f823c63 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java @@ -1,6 +1,7 @@ package com.jme3.vulkan.images; import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.SharingMode; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.util.Flag; @@ -183,4 +184,6 @@ public int bits() { LibEnum getSharingMode(); + void addNativeDependent(NativeReference ref); + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index 5441ae24f9..a4c04b7a7b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -5,7 +5,6 @@ import com.jme3.vulkan.Format; import com.jme3.vulkan.buffers.BasicVulkanBuffer; import com.jme3.vulkan.buffers.BufferUsage; -import com.jme3.vulkan.buffers.VulkanBuffer; import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.commands.CommandBuffer; @@ -166,7 +165,7 @@ private GpuImage loadGpuImage(CommandPool transferPool, ImageData data) { i.setUsage(Flag.of(ImageUsage.TransferDst, ImageUsage.Sampled)); i.setMemoryProps(MemoryProp.DeviceLocal); } - CommandBuffer commands = transferPool.allocateOneTimeCommandBuffer(); + CommandBuffer commands = transferPool.allocateTransientCommandBuffer(); commands.begin(); image.transitionLayout(commands, VulkanImage.Layout.Undefined, VulkanImage.Layout.TransferDstOptimal); VkBufferImageCopy.Buffer region = VkBufferImageCopy.calloc(1, stack) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java index fe812cf96e..a1a68a9962 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java @@ -1,7 +1,6 @@ package com.jme3.vulkan.material; import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.data.DataPipe; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.material.uniforms.Uniform; @@ -21,7 +20,6 @@ public class Material { private final DescriptorPool pool; private final List uniformSets = new ArrayList<>(); private final HashMap> uniformLookup = new HashMap<>(); - private final Map> pipes = new HashMap<>(); public Material(DescriptorPool pool) { this.pool = pool; @@ -73,11 +71,6 @@ public List getSets() { return Collections.unmodifiableList(uniformSets); } - public T setPipe(String name, T pipe) { - pipes.put(name, pipe); - return pipe; - } - @SuppressWarnings("unchecked") public T getUniform(String name) { // Not sure if caching the results is really worth it... @@ -96,9 +89,4 @@ public T getUniform(String name) { return null; } - @SuppressWarnings("unchecked") - public T getPipe(String name) { - return (T)pipes.get(name); - } - } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java index ac85ae66c7..e42d18a8be 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -36,7 +36,7 @@ public Iterator iterator() { public void update(CommandBuffer cmd) { for (Uniform u : uniforms) { u.update(cmd); - if (u.getValue() == null) { + if (u.getResource().get() == null) { throw new NullPointerException("Uniform \"" + u.getName() + "\" contains no value."); } } @@ -139,14 +139,14 @@ private FrameIndex() { public void update() { for (int i = 0; i < uniforms.length; i++) { - versions[i] = new WeakReference<>(uniforms[i].getValue(), queue); + versions[i] = new WeakReference<>(uniforms[i].getResource().get(), queue); } } public boolean isCurrent() { for (int i = 0; i < versions.length; i++) { // todo: consider using refersTo() from Java 16 to not interfere with the GC - if (versions[i].get() != uniforms[i].getValue()) { + if (versions[i].get() != uniforms[i].getResource().get()) { return false; } } @@ -156,7 +156,7 @@ public boolean isCurrent() { public int getAccuracy() { int accuracy = 0; for (int i = 0; i < versions.length; i++) { - if (versions[i].get() != uniforms[i].getPipe()) { + if (versions[i].get() != uniforms[i].getResource()) { accuracy++; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java index 55766f8363..8e41c8935e 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java @@ -1,11 +1,9 @@ package com.jme3.vulkan.material.uniforms; import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.data.DataPipe; -import com.jme3.vulkan.data.PipeResult; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; -import com.jme3.vulkan.frames.UpdateFrameManager; +import com.jme3.vulkan.frames.VersionedResource; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; @@ -15,7 +13,7 @@ public abstract class AbstractUniform implements Uniform { protected final Descriptor type; protected final int bindingIndex; protected final Flag stages; - protected final PipeResult pipe = new PipeResult<>(); + protected VersionedResource resource; public AbstractUniform(String name, Descriptor type, int bindingIndex, Flag stages) { this.name = name; @@ -40,23 +38,16 @@ public int getBindingIndex() { } @Override - public void update(CommandBuffer cmd) { - pipe.execute(cmd); - } - - @Override - public void setPipe(DataPipe pipe) { - this.pipe.setInput(pipe); - } + public void update(CommandBuffer cmd) {} @Override - public DataPipe getPipe() { - return pipe.getInput(); + public void setResource(VersionedResource resource) { + this.resource = resource; } @Override - public T getValue() { - return pipe.getResult(); + public VersionedResource getResource() { + return resource; } public Descriptor getType() { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index 65de96f1a6..fe714e8b2a 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -17,7 +17,7 @@ public BufferUniform(String name, Descriptor type, int bindingIndex, Flag extends DescriptorSetWriter { @@ -14,7 +14,7 @@ public interface Uniform extends DescriptorSetWriter { /** * Updates this uniform and extracts the uniform value from the - * {@link #setPipe(DataPipe) data pipe}. + * {@link #setResource(VersionedResource) data pipe}. * * @param cmd command buffer to submit commands to */ @@ -40,22 +40,14 @@ public interface Uniform extends DescriptorSetWriter { SetLayoutBinding createBinding(); /** - * Sets the {@link DataPipe} that will provide the uniform value. + * Sets the {@link VersionedResource} that will provide the uniform value. */ - void setPipe(DataPipe pipe); + void setResource(VersionedResource resource); /** - * Returns the {@link DataPipe} supplying the uniform value. + * Returns the {@link VersionedResource} supplying the uniform value. */ - DataPipe getPipe(); - - /** - * Gets the value extracted from {@link #setPipe(DataPipe) pipe} execution - * during {@link #update(CommandBuffer) update}. - * - * @return value from the data pipe - */ - T getValue(); + VersionedResource getResource(); /** * The binding this uniform is targeting. Should be unique among all diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java index 874f60feb1..5ba4ca77b3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java @@ -1,62 +1,148 @@ package com.jme3.vulkan.mesh; -import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.buffers.*; import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.data.DataPipe; +import com.jme3.vulkan.frames.VersionedResource; +import com.jme3.vulkan.memory.MemorySize; import org.lwjgl.system.MemoryStack; import java.nio.LongBuffer; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import static org.lwjgl.vulkan.VK10.*; -public class AdaptiveMesh implements Mesh { +public abstract class AdaptiveMesh implements Mesh { + + protected enum VertexMode { + + Stream, Dynamic, Static; + + } protected final MeshDescription description; - protected final List vertexBuffers = new ArrayList<>(); - protected VertexBuffer indexBuffer; + protected VersionedResource indexBuffer; + private final List vertexBuffers = new ArrayList<>(); + private int vertices; public AdaptiveMesh(MeshDescription description) { this.description = description; } - @Override - public void update(CommandBuffer cmd) { - for (VertexBuffer vb : vertexBuffers) { - vb.update(cmd); - } - indexBuffer.update(cmd); - } - @Override public void bind(CommandBuffer cmd) { try (MemoryStack stack = MemoryStack.stackPush()) { LongBuffer verts = stack.mallocLong(vertexBuffers.size()); LongBuffer offsets = stack.mallocLong(vertexBuffers.size()); for (VertexBuffer vb : vertexBuffers) { - verts.put(vb.buffer.getId()); + verts.put(vb.getResource().get().getId()); offsets.put(0L); } verts.flip(); offsets.flip(); vkCmdBindVertexBuffers(cmd.getBuffer(), 0, verts, offsets); } - vkCmdBindIndexBuffer(cmd.getBuffer(), indexBuffer.buffer.getId(), 0, IndexType.UInt32.getEnum()); + if (indexBuffer != null) { + vkCmdBindIndexBuffer(cmd.getBuffer(), indexBuffer.get().getId(), 0, IndexType.of(indexBuffer.get()).getEnum()); + } } @Override public void draw(CommandBuffer cmd) { - vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.buffer.size().getElements(), 1, 0, 0, 0); + if (indexBuffer != null) { + vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.get().size().getElements(), 1, 0, 0, 0); + } else { + vkCmdDraw(cmd.getBuffer(), vertices, 1, 0, 0); + } + } + + public int getNumVertices() { + return vertices; + } + + @SuppressWarnings("resource") + protected AttributeModifier modifyAttribute(String attribute) { + VertexAttribute attr = description.getAttribute(attribute); + if (attr != null) { + return new AttributeModifier(vertexBuffers.get(attr.getBinding().getBindingIndex()), attr).map(); + } else { + return new NullAttributeModifier().map(); + } + } + + protected abstract VersionedResource createStreamingBuffer(MemorySize size); + + protected abstract VersionedResource createDynamicBuffer(MemorySize size); + + protected abstract VersionedResource createStaticBuffer(MemorySize size); + + protected Builder build(int vertices) { + return new Builder(vertices); } - protected static class VertexBuffer { + protected class Builder implements AutoCloseable { - private DataPipe pipe; - private GpuBuffer buffer; + private final Map attributes = new HashMap<>(); + + private Builder(int vertices) { + AdaptiveMesh.this.vertices = vertices; + for (VertexBinding b : description) { + for (VertexAttribute a : b) { + attributes.put(a.getName(), new AttributeInfo()); + } + } + } + + @Override + public void close() { + VertexMode[] modes = new VertexMode[description.getBindings().size()]; + for (Map.Entry e : attributes.entrySet()) { + int i = description.getAttribute(e.getKey()).getBinding().getBindingIndex(); + VertexMode mode = modes[i]; + if (mode == null || e.getValue().getMode().ordinal() < mode.ordinal()) { + modes[i] = e.getValue().getMode(); + } + } + for (int i = 0; i < modes.length; i++) { + vertexBuffers.add(new VertexBuffer(createVertexBuffer(description.getBinding(i), modes[i]))); + } + } + + public void setMode(String name, VertexMode mode) { + AttributeInfo attr = attributes.get(name); + if (attr != null) { + attr.setMode(mode); + } + } + + private VersionedResource createVertexBuffer(VertexBinding binding, VertexMode mode) { + MemorySize size = MemorySize.bytes(binding.getStride() * vertices); + switch (mode) { + case Stream: return createStreamingBuffer(size); + case Dynamic: return createDynamicBuffer(size); + case Static: return createStaticBuffer(size); + default: throw new UnsupportedOperationException(); + } + } + + } + + /** + * Contains information about an attribute with the purpose + * of generating vertex buffers from that information. + * + *

This could technically be collapsed into VertexMode, but there + * may be other properties in the future that could be set.

+ */ + private static class AttributeInfo { + + private VertexMode mode = VertexMode.Static; + + public void setMode(VertexMode mode) { + this.mode = mode; + } - public void update(CommandBuffer cmd) { - buffer = pipe.execute(cmd); + public VertexMode getMode() { + return mode; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java index 89f239279f..2137d45685 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java @@ -10,19 +10,23 @@ public class AttributeModifier implements AutoCloseable { + private final VertexBuffer vertex; private final VertexAttribute attribute; - private final VertexBuffer vertexBuffer; - private final ByteBuffer buffer; + private ByteBuffer buffer; - public AttributeModifier(Mesh mesh, VertexAttribute attribute) { + public AttributeModifier(VertexBuffer vertex, VertexAttribute attribute) { + this.vertex = vertex; this.attribute = attribute; - this.vertexBuffer = mesh.getBuffer(attribute.getBinding().getBinding()); - this.buffer = vertexBuffer.map(); + } + + protected AttributeModifier map() { + buffer = vertex.mapBytes(); + return this; } @Override public void close() { - vertexBuffer.unmap(); + vertex.unmap(); } public int transformPosition(int vertex) { @@ -65,8 +69,9 @@ public AttributeModifier putVector2(int vertex, int baseComponent, Vector2f valu public AttributeModifier putVector2(int vertex, int baseComponent, float x, float y) { vertex = transformPosition(vertex); - attribute.getFormat().getComponent(baseComponent++).putFloat(buffer, vertex, x); - attribute.getFormat().getComponent(baseComponent ).putFloat(buffer, vertex, y); + Format f = attribute.getFormat(); + f.getComponent(baseComponent++).putFloat(buffer, vertex, x); + f.getComponent(baseComponent ).putFloat(buffer, vertex, y); return this; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java index 956cbf48fa..86352c1e31 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java @@ -1,18 +1,21 @@ package com.jme3.vulkan.mesh; +import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.util.LibEnum; import static org.lwjgl.vulkan.VK10.*; public enum IndexType implements LibEnum { - UInt32(VK_INDEX_TYPE_UINT32), - UInt16(VK_INDEX_TYPE_UINT16); + UInt32(VK_INDEX_TYPE_UINT32, 2), + UInt16(VK_INDEX_TYPE_UINT16, 4); private final int vkEnum; + private final int bytes; - IndexType(int vkEnum) { + IndexType(int vkEnum, int bytes) { this.vkEnum = vkEnum; + this.bytes = bytes; } @Override @@ -20,4 +23,16 @@ public int getEnum() { return vkEnum; } + public int getBytes() { + return bytes; + } + + public static IndexType of(GpuBuffer buffer) { + if (buffer.size().getBytesPerElement() <= UInt16.bytes) { + return UInt16; + } else { + return UInt32; + } + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexedMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexedMesh.java deleted file mode 100644 index 0d84825e9b..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexedMesh.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.jme3.vulkan.mesh; - -import com.jme3.vulkan.buffers.GpuBuffer; -import com.jme3.vulkan.commands.CommandBuffer; -import org.lwjgl.system.MemoryStack; - -import java.nio.LongBuffer; -import java.util.ArrayList; -import java.util.List; - -import static org.lwjgl.vulkan.VK10.*; - -public abstract class IndexedMesh implements Mesh { - - protected final List vertexBuffers = new ArrayList<>(); - protected GpuBuffer indexBuffer; - - @Override - public void bind(CommandBuffer cmd) { - try (MemoryStack stack = MemoryStack.stackPush()) { - LongBuffer vertBufs = stack.mallocLong(vertexBuffers.size()); - LongBuffer offsets = stack.mallocLong(vertexBuffers.size()); - for (GpuBuffer vb : vertexBuffers) { - vertBufs.put(vb.getId()); - offsets.put(0); - } - vertBufs.flip(); - offsets.flip(); - vkCmdBindVertexBuffers(cmd.getBuffer(), 0, vertBufs, offsets); - } - vkCmdBindIndexBuffer(cmd.getBuffer(), indexBuffer.getId(), 0, IndexType.UInt32.getEnum()); - } - - @Override - public void draw(CommandBuffer cmd) { - vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.size().getElements(), 1, 0, 0, 0); - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java index a68a66c9e0..5af6b246ee 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java @@ -5,8 +5,6 @@ public interface Mesh { - void update(CommandBuffer cmd); - void bind(CommandBuffer cmd); void draw(CommandBuffer cmd); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java index 3a8d24e286..b2cb9b7ec8 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java @@ -1,25 +1,85 @@ package com.jme3.vulkan.mesh; +import com.jme3.vulkan.Format; +import com.jme3.vulkan.util.LibEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; +import java.util.*; + /** * Describes the layout of vertex bindings and attributes, and simultaneously * acts as a compatability layer between a mesh and a mesh control. */ -public interface MeshDescription { +public class MeshDescription implements Iterable { + + private final List bindings = new ArrayList<>(); + + public VkVertexInputBindingDescription.Buffer getBindingInfo(MemoryStack stack) { + VkVertexInputBindingDescription.Buffer binds = VkVertexInputBindingDescription.calloc(bindings.size(), stack); + for (VertexBinding b : bindings) { + binds.get().binding(b.getBindingIndex()) + .stride(b.getStride()) + .inputRate(b.getRate().getEnum()); + } + binds.flip(); + return binds; + } + + public VkVertexInputAttributeDescription.Buffer getAttributeInfo(MemoryStack stack) { + int size = 0; + for (VertexBinding b : bindings) { + size += b.getAttributes().size(); + } + VkVertexInputAttributeDescription.Buffer attr = VkVertexInputAttributeDescription.calloc(size, stack); + for (VertexBinding binding : bindings) { + for (VertexAttribute a : binding) { + attr.get().binding(binding.getBindingIndex()) + .location(a.getLocation()) + .format(a.getFormat().getVkEnum()) + .offset(a.getOffset()); + } + } + attr.flip(); + return attr; + } + + public int addBinding(LibEnum rate) { + VertexBinding binding = new VertexBinding(bindings.size(), rate); + bindings.add(binding); + return binding.getBindingIndex(); + } - VertexBinding getBinding(int i); + public int addAttribute(String name, LibEnum rate, Format format, int location) { + int binding = addBinding(rate); + addAttribute(name, binding, format, location); + return binding; + } - VertexAttribute getAttribute(String name); + public void addAttribute(String name, int bindingIndex, Format format, int location) { + getBinding(bindingIndex).addAttribute(name, format, location); + } - VkVertexInputBindingDescription.Buffer getBindingInfo(MemoryStack stack); + public VertexBinding getBinding(int index) { + return bindings.get(index); + } - VkVertexInputAttributeDescription.Buffer getAttributeInfo(MemoryStack stack); + public VertexAttribute getAttribute(String name) { + for (VertexBinding b : bindings) { + VertexAttribute a = b.getAttribute(name); + if (a != null) return a; + } + return null; + } + + public List getBindings() { + return Collections.unmodifiableList(bindings); + } - default AttributeModifier modifyAttribute(Mesh mesh, String attribute) { - return new AttributeModifier(mesh, getAttribute(attribute)); + @Override + public Iterator iterator() { + return bindings.iterator(); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java index e34d0a00e5..7b39c0c9e0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java @@ -1,11 +1,82 @@ package com.jme3.vulkan.mesh; -public class MyCustomMesh extends IndexedMesh { +import com.jme3.math.Vector3f; +import com.jme3.vulkan.buffers.*; +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.frames.SingleCommand; +import com.jme3.vulkan.frames.SingleResource; +import com.jme3.vulkan.frames.UpdateFrameManager; +import com.jme3.vulkan.frames.VersionedResource; +import com.jme3.vulkan.memory.MemoryProp; +import com.jme3.vulkan.memory.MemorySize; +import com.jme3.vulkan.update.CommandBatch; +import com.jme3.vulkan.util.Flag; - private final +import java.nio.ShortBuffer; +import java.util.Objects; - public MyCustomMesh() { +public class MyCustomMesh extends AdaptiveMesh { + private final LogicalDevice device; + private final UpdateFrameManager frames; + private final CommandBatch updateStaticBuffers; + + public MyCustomMesh(LogicalDevice device, + UpdateFrameManager frames, + MeshDescription description, + CommandBatch updateStaticBuffers, + Vector3f normal, Vector3f up, float width, float height, float centerX, float centerY) { + super(description); + this.device = device; + this.frames = frames; + this.updateStaticBuffers = updateStaticBuffers; + StaticBuffer indices = new StaticBuffer(device, MemorySize.shorts(6), BufferUsage.Index, MemoryProp.DeviceLocal, false); + ShortBuffer iBuf = indices.mapShorts(); + iBuf.put((short)0).put((short)2).put((short)3) + .put((short)0).put((short)1).put((short)2); + indices.unmap(); + indexBuffer = updateStaticBuffers.add(new SingleCommand<>(indices)); + try (Builder m = build(4)) { + m.setMode(VertexAttribute.POSITION, VertexMode.Static); + m.setMode(VertexAttribute.NORMALS, VertexMode.Static); + m.setMode(VertexAttribute.TEXCOORD, VertexMode.Static); + } + Vector3f x = normal.cross(up); + Vector3f y = normal.cross(x); + Vector3f tempX = new Vector3f(); + Vector3f tempY = new Vector3f(); + try (AttributeModifier position = modifyAttribute(VertexAttribute.POSITION); + AttributeModifier normals = modifyAttribute(VertexAttribute.NORMALS); + AttributeModifier texCoord = modifyAttribute(VertexAttribute.TEXCOORD)) { + position.putVector3(0, 0, x.mult(-width * centerX, tempX).addLocal(y.mult(height * (1f - centerY), tempY))); + position.putVector3(1, 0, x.mult(width * (1.0f - centerX), tempX).addLocal(y.mult(height * (1f - centerY), tempY))); + position.putVector3(2, 0, x.mult(width * (1.0f - centerX), tempX).addLocal(y.mult(-height * centerY, tempY))); + position.putVector3(3, 0, x.mult(-width * centerX, tempX).addLocal(y.mult(-height * centerY, tempY))); + normals.putVector3(0, 0, normal); + normals.putVector3(1, 0, normal); + normals.putVector3(2, 0, normal); + normals.putVector3(3, 0, normal); + texCoord.putVector2(0, 0, 0f, 0f); + texCoord.putVector2(1, 0, 1f, 0f); + texCoord.putVector2(2, 0, 1f, 1f); + texCoord.putVector2(3, 0, 0f, 1f); + } + } + + @Override + protected VersionedResource createStreamingBuffer(MemorySize size) { + throw new UnsupportedOperationException("Streaming buffers not implemented."); + } + + @Override + protected VersionedResource createDynamicBuffer(MemorySize size) { + throw new UnsupportedOperationException("Dynamic buffers not implemented."); + } + + @Override + protected VersionedResource createStaticBuffer(MemorySize size) { + return updateStaticBuffers.add(new SingleCommand<>(new StaticBuffer( + device, size, BufferUsage.Vertex, MemoryProp.DeviceLocal, false))); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NewMeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NewMeshDescription.java deleted file mode 100644 index 9588253a1d..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NewMeshDescription.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.jme3.vulkan.mesh; - -import java.util.ArrayList; -import java.util.Collection; - -public class NewMeshDescription { - - private final Collection bindings = new ArrayList<>(); - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java new file mode 100644 index 0000000000..c97ff8766c --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java @@ -0,0 +1,211 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector2f; +import com.jme3.math.Vector3f; +import com.jme3.math.Vector4f; + +import java.nio.*; + +public class NullAttributeModifier extends AttributeModifier { + + public NullAttributeModifier() { + super(null, null); + } + + @Override + protected AttributeModifier map() { + return this; + } + + @Override + public void close() {} + + @Override + public AttributeModifier putByte(int vertex, int component, byte value) { + return this; + } + + @Override + public AttributeModifier putShort(int vertex, int component, short value) { + return this; + } + + @Override + public AttributeModifier putInt(int vertex, int component, int value) { + return this; + } + + @Override + public AttributeModifier putFloat(int vertex, int component, float value) { + return this; + } + + @Override + public AttributeModifier putDouble(int vertex, int component, double value) { + return this; + } + + @Override + public AttributeModifier putLong(int vertex, int component, long value) { + return this; + } + + @Override + public AttributeModifier putVector2(int vertex, int baseComponent, Vector2f value) { + return this; + } + + @Override + public AttributeModifier putVector2(int vertex, int baseComponent, float x, float y) { + return this; + } + + @Override + public AttributeModifier putVector3(int vertex, int baseComponent, Vector3f value) { + return this; + } + + @Override + public AttributeModifier putVector3(int vertex, int baseComponent, float x, float y, float z) { + return this; + } + + @Override + public AttributeModifier putVector4(int vertex, int baseComponent, Vector4f value) { + return putVector4(vertex, baseComponent, value.x, value.y, value.z, value.w); + } + + @Override + public AttributeModifier putVector4(int vertex, int baseComponent, float x, float y, float z, float w) { + return this; + } + + @Override + public AttributeModifier putColor(int vertex, int baseComponent, ColorRGBA value) { + return this; + } + + @Override + public AttributeModifier putBytes(int baseVertex, int baseComponent, byte[] values) { + return this; + } + + @Override + public AttributeModifier putBytes(int baseVertex, int baseComponent, ByteBuffer values) { + return this; + } + + @Override + public AttributeModifier putShorts(int baseVertex, int baseComponent, short[] values) { + return this; + } + + @Override + public AttributeModifier putShorts(int baseVertex, int baseComponent, ShortBuffer values) { + return this; + } + + @Override + public AttributeModifier putInts(int baseVertex, int baseComponent, int[] values) { + return this; + } + + @Override + public AttributeModifier putInts(int baseVertex, int baseComponent, IntBuffer values) { + return this; + } + + @Override + public AttributeModifier putFloats(int baseVertex, int baseComponent, float[] values) { + return this; + } + + @Override + public AttributeModifier putFloats(int baseVertex, int baseComponent, FloatBuffer values) { + return this; + } + + @Override + public AttributeModifier putDoubles(int baseVertex, int baseComponent, double[] values) { + return this; + } + + @Override + public AttributeModifier putDoubles(int baseVertex, int baseComponent, DoubleBuffer values) { + return this; + } + + @Override + public AttributeModifier putLongs(int baseVertex, int baseComponent, long[] values) { + return this; + } + + @Override + public AttributeModifier putLongs(int baseVertex, int baseComponent, LongBuffer values) { + return this; + } + + @Override + public byte getByte(int vertex, int component) { + return 0; + } + + @Override + public short getShort(int vertex, int component) { + return 0; + } + + @Override + public int getInt(int vertex, int component) { + return 0; + } + + @Override + public float getFloat(int vertex, int component) { + return 0f; + } + + @Override + public double getDouble(int vertex, int component) { + return 0.0; + } + + @Override + public long getLong(int vertex, int component) { + return 0L; + } + + @Override + public Vector2f getVector2(int vertex, int baseComponent, Vector2f store) { + if (store == null) { + store = new Vector2f(); + } + return store; + } + + @Override + public Vector3f getVector3(int vertex, int baseComponent, Vector3f store) { + if (store == null) { + store = new Vector3f(); + } + return store; + } + + @Override + public Vector4f getVector4(int vertex, int baseComponent, Vector4f store) { + if (store == null) { + store = new Vector4f(); + } + return store; + } + + @Override + public ColorRGBA getColor(int vertex, int baseComponent, ColorRGBA store) { + if (store == null) { + store = new ColorRGBA(); + } + return store; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java deleted file mode 100644 index ba933dff22..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/TestCaseMeshDescription.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.jme3.vulkan.mesh; - -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VkVertexInputAttributeDescription; -import org.lwjgl.vulkan.VkVertexInputBindingDescription; - -import static org.lwjgl.vulkan.VK10.*; - -public class TestCaseMeshDescription implements Native, MeshDescription { - - private final VkVertexInputBindingDescription.Buffer bindings; - private final VkVertexInputAttributeDescription.Buffer attributes; - private final NativeReference ref; - - public TestCaseMeshDescription() { - // for each vertex buffer on the mesh - bindings = VkVertexInputBindingDescription.calloc(1) - .binding(0) - .stride(Float.BYTES * 8) // bytes per vertex - .inputRate(InputRate.Vertex.getEnum()); - // for each attribute in each vertex buffer - attributes = VkVertexInputAttributeDescription.calloc(3); - attributes.get(0) - .binding(0) - .location(0) - .format(VK_FORMAT_R32G32B32_SFLOAT) - .offset(0); - attributes.get(1) - .binding(0) - .location(1) - .format(VK_FORMAT_R32G32B32_SFLOAT) - .offset(Float.BYTES * 3); - attributes.get(2) - .binding(0) - .location(2) - .format(VK_FORMAT_R32G32_SFLOAT) - .offset(Float.BYTES * 6); - ref = Native.get().register(this); - } - - @Override - public Object getNativeObject() { - return null; - } - - @Override - public Runnable createNativeDestroyer() { - return () -> { - bindings.free(); - attributes.free(); - }; - } - - @Override - public void prematureNativeDestruction() {} - - @Override - public NativeReference getNativeReference() { - return ref; - } - - @Override - public VkVertexInputBindingDescription.Buffer getBindingInfo(MemoryStack stack) { - return bindings; - } - - @Override - public VkVertexInputAttributeDescription.Buffer getAttributeInfo(MemoryStack stack) { - return attributes; - } - -} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java index 2ffe7dcb63..68fa0f2123 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java @@ -4,6 +4,11 @@ public class VertexAttribute { + public static final String POSITION = "jme_position"; + public static final String NORMALS = "jme_normals"; + public static final String TEXCOORD = "jme_texCoord"; + public static final String COLOR = "jme_color"; + private final VertexBinding binding; private final String name; private final Format format; @@ -18,10 +23,6 @@ public VertexAttribute(VertexBinding binding, String name, Format format, int lo this.offset = offset; } - public AttributeModifier modify(Mesh mesh) { - return new AttributeModifier(this); - } - public String getName() { return name; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java index 4e7c5b880b..c4601134d3 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java @@ -1,23 +1,36 @@ package com.jme3.vulkan.mesh; -import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.Format; import com.jme3.vulkan.util.LibEnum; -import java.nio.ByteBuffer; +import java.util.*; -public class VertexBinding { +public class VertexBinding implements Iterable { private final int binding; - private final int stride; private final LibEnum rate; + private final Map attributes = new HashMap<>(); + private int stride; - public VertexBinding(int binding, int stride, LibEnum rate) { + public VertexBinding(int binding, LibEnum rate) { this.binding = binding; - this.stride = stride; this.rate = rate; } - public int getBinding() { + private int findNextAttributeOffset(Format format) { + int offset = 0; + for (VertexAttribute a : attributes.values()) { + offset = Math.max(offset, a.getOffset() + a.getFormat().getTotalBytes()); + } + stride = offset + format.getTotalBytes(); + return offset; + } + + protected void addAttribute(String name, Format format, int location) { + attributes.put(name, new VertexAttribute(this, name, format, location, findNextAttributeOffset(format))); + } + + public int getBindingIndex() { return binding; } @@ -29,4 +42,17 @@ public LibEnum getRate() { return rate; } + public VertexAttribute getAttribute(String name) { + return attributes.get(name); + } + + public Map getAttributes() { + return Collections.unmodifiableMap(attributes); + } + + @Override + public Iterator iterator() { + return attributes.values().iterator(); + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java index 4df8c5bafb..05b340f75c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java @@ -1,27 +1,69 @@ package com.jme3.vulkan.mesh; -import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.buffers.*; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.frames.VersionedResource; +import com.jme3.vulkan.update.Command; +import org.lwjgl.PointerBuffer; -import java.nio.ByteBuffer; +import java.nio.*; public class VertexBuffer { - private final GpuBuffer buffer; - private ByteBuffer mappedBuffer; + private final VersionedResource resource; + private GpuBuffer buffer; private int mappers = 0; + private PointerBuffer memory; - public ByteBuffer map() { + public VertexBuffer(VersionedResource resource) { + this.resource = resource; + } + + public PointerBuffer map() { if (mappers++ == 0) { - mappedBuffer = buffer.mapBytes(); + memory = (buffer = resource.get()).map(); + } + // the mapped buffer could only ever not match the frame's current buffer if + // not all mappings were cleared on the previous frame (i.e. mappers != 0) + if (buffer != resource.get()) { + throw new IllegalStateException("Not all mappings were properly unmapped."); } - return mappedBuffer; + return memory; } public void unmap() { - if ((mappers = Math.max(mappers - 1, 0)) == 0) { - mappedBuffer = null; + if (--mappers <= 0) { + memory = null; buffer.unmap(); } } + public ByteBuffer mapBytes() { + return map().getByteBuffer(0, buffer.size().getBytes()); + } + + public ShortBuffer mapShorts() { + return map().getShortBuffer(0, buffer.size().getShorts()); + } + + public IntBuffer mapInts() { + return map().getIntBuffer(0, buffer.size().getInts()); + } + + public FloatBuffer mapFloats() { + return map().getFloatBuffer(0, buffer.size().getFloats()); + } + + public DoubleBuffer mapDoubles() { + return map().getDoubleBuffer(0, buffer.size().getDoubles()); + } + + public LongBuffer mapLongs() { + return map().getLongBuffer(0, buffer.size().getLongs()); + } + + public VersionedResource getResource() { + return resource; + } + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java index 1f12488608..b8bff79656 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java @@ -1,5 +1,6 @@ package com.jme3.vulkan.pipelines.states; +import com.jme3.vulkan.util.LibEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkPipelineDynamicStateCreateInfo; @@ -12,7 +13,7 @@ public class DynamicState implements PipelineState { - public enum Type { + public enum Type implements LibEnum { ViewPort(VK_DYNAMIC_STATE_VIEWPORT), Scissor(VK_DYNAMIC_STATE_SCISSOR), @@ -30,23 +31,25 @@ public enum Type { this.vkEnum = vkEnum; } - public int getVkEnum() { + @Override + public int getEnum() { return vkEnum; } } - private final Set states = new HashSet<>(); + private final Set> states = new HashSet<>(); - public DynamicState(Type... types) { + @SafeVarargs + public DynamicState(LibEnum... types) { addTypes(types); } @Override public VkPipelineDynamicStateCreateInfo toStruct(MemoryStack stack) { IntBuffer stateBuf = stack.mallocInt(states.size()); - for (Type t : states) { - stateBuf.put(t.getVkEnum()); + for (LibEnum t : states) { + stateBuf.put(t.getEnum()); } stateBuf.flip(); return VkPipelineDynamicStateCreateInfo.calloc(stack) @@ -54,7 +57,8 @@ public VkPipelineDynamicStateCreateInfo toStruct(MemoryStack stack) { .pDynamicStates(stateBuf); } - public void addTypes(Type... types) { + @SafeVarargs + public final void addTypes(LibEnum... types) { states.addAll(Arrays.asList(types)); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java index 7396e4f8f2..961b143f8d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -1,6 +1,7 @@ package com.jme3.vulkan.surface; import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.*; import com.jme3.vulkan.commands.Queue; import com.jme3.vulkan.devices.LogicalDevice; @@ -226,6 +227,11 @@ public LibEnum getSharingMode() { return SharingMode.Exclusive; } + @Override + public void addNativeDependent(NativeReference ref) { + Swapchain.this.ref.addDependent(ref); + } + public void createFrameBuffer(RenderPass compat, ImageView depthStencil) { this.frameBuffer = new FrameBuffer(getDevice(), compat, extent.x, extent.y, 1, colorView, depthStencil); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java index 8f6b28e852..597b73db07 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java @@ -1,5 +1,6 @@ package com.jme3.vulkan.sync; +import com.jme3.vulkan.devices.LogicalDevice; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VK10; @@ -15,9 +16,9 @@ private static Semaphore[] toArray(Semaphore s) { return s != null ? new Semaphore[] {s} : Semaphore.EMPTY; } - private final Semaphore[] waits; - private final Semaphore[] signals; - private final Fence fence; + private Semaphore[] waits; + private Semaphore[] signals; + private Fence fence; public SyncGroup() { this(Semaphore.EMPTY, Semaphore.EMPTY, null); @@ -61,18 +62,53 @@ public SyncGroup(Semaphore[] waits, Semaphore[] signals, Fence fence) { this.fence = fence; } + public void setWaits(Semaphore... waits) { + this.waits = Objects.requireNonNull(waits); + } + + public void setWaits(SyncGroup sync) { + this.waits = sync.waits; + } + public Semaphore[] getWaits() { return waits; } + public void setSignals(Semaphore... signals) { + this.signals = Objects.requireNonNull(signals); + } + + public void setSignals(SyncGroup sync) { + this.signals = sync.signals; + } + public Semaphore[] getSignals() { return signals; } + public void setFence(Fence fence) { + this.fence = fence; + } + + public void setFence(SyncGroup sync) { + this.fence = sync.fence; + } + public Fence getFence() { return fence; } + public Fence getOrCreateFence(LogicalDevice device) { + return getOrCreateFence(device, false); + } + + public Fence getOrCreateFence(LogicalDevice device, boolean signal) { + if (fence == null) { + fence = new Fence(device, signal); + } + return fence; + } + public boolean containsWaits() { return waits.length > 0; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/BasicCommandBatch.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/BasicCommandBatch.java new file mode 100644 index 0000000000..f2bc404267 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/BasicCommandBatch.java @@ -0,0 +1,39 @@ +package com.jme3.vulkan.update; + +import com.jme3.vulkan.commands.CommandBuffer; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class BasicCommandBatch implements CommandBatch { + + private final List> commands = new ArrayList<>(); + + @Override + public boolean run(CommandBuffer cmd, int frame) { + boolean run = false; + for (Iterator> it = commands.iterator(); it.hasNext();) { + Command c = it.next().get(); + if (c == null) { + it.remove(); + } else { + run = c.run(cmd, frame) || run; + } + } + return run; + } + + @Override + public T add(T command) { + commands.add(new WeakReference<>(command)); + return command; + } + + @Override + public void remove(Command command) { + commands.removeIf(ref -> ref.get() == command); + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/Command.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/Command.java new file mode 100644 index 0000000000..b138d771b2 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/Command.java @@ -0,0 +1,9 @@ +package com.jme3.vulkan.update; + +import com.jme3.vulkan.commands.CommandBuffer; + +public interface Command { + + boolean run(CommandBuffer cmd, int frame); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandBatch.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandBatch.java new file mode 100644 index 0000000000..2e0152c161 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandBatch.java @@ -0,0 +1,9 @@ +package com.jme3.vulkan.update; + +public interface CommandBatch extends Command { + + T add(T command); + + void remove(Command command); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandRunner.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandRunner.java new file mode 100644 index 0000000000..428f4f8836 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandRunner.java @@ -0,0 +1,62 @@ +package com.jme3.vulkan.update; + +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.frames.UpdateFrameManager; +import com.jme3.vulkan.sync.Fence; +import com.jme3.vulkan.sync.SyncGroup; + +import java.util.Objects; + +public class CommandRunner { + + private final LogicalDevice device; + private final UpdateFrameManager frames; + private final CommandBuffer buffer; + private CommandBatch commands; + private Fence prevRunFence; + + public CommandRunner(LogicalDevice device, UpdateFrameManager frames, CommandBuffer buffer) { + this(device, frames, buffer, null); + } + + public CommandRunner(LogicalDevice device, UpdateFrameManager frames, CommandBuffer buffer, CommandBatch commands) { + this.device = device; + this.frames = frames; + this.buffer = buffer; + } + + public void run(SyncGroup sync) { + if (prevRunFence != null) { + prevRunFence.block(5000); + } + buffer.resetAndBegin(); + if (Objects.requireNonNull(commands).run(buffer, frames.getCurrentFrame())) { + prevRunFence = sync.getOrCreateFence(device); + } else { + prevRunFence = null; + } + buffer.endAndSubmit(sync); + } + + public void setCommands(CommandBatch commands) { + this.commands = commands; + } + + public LogicalDevice getDevice() { + return device; + } + + public UpdateFrameManager getFrames() { + return frames; + } + + public CommandBuffer getBuffer() { + return buffer; + } + + public CommandBatch getCommands() { + return commands; + } + +} diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl index 0055166028..af634c5255 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl @@ -1,6 +1,5 @@ #version 450 -layout(location = 0) in vec3 fragColor; layout(location = 1) in vec2 texCoord; layout(location = 0) out vec4 outColor; @@ -8,5 +7,5 @@ layout(location = 0) out vec4 outColor; layout(set = 0, binding = 1) uniform sampler2D colorTexture; void main() { - outColor = texture(colorTexture, texCoord) * vec4(fragColor, 1.0); + outColor = texture(colorTexture, texCoord); } \ No newline at end of file diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl index 8ce5768a80..8006a0fb69 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl @@ -1,8 +1,8 @@ #version 450 layout (location = 0) in vec3 inPosition; -layout (location = 1) in vec3 inColor; -layout (location = 2) in vec2 inTexCoord; +layout (location = 1) in vec2 inTexCoord; +layout (location = 2) in vec3 inNormal; layout (location = 0) out vec3 fragColor; layout (location = 1) out vec2 texCoord; @@ -13,6 +13,5 @@ layout (set = 0, binding = 0) uniform CameraBuffer { void main() { gl_Position = cam.worldViewProjectionMatrix * vec4(inPosition, 1.0); - fragColor = inColor; texCoord = inTexCoord; } \ No newline at end of file From 3099a266145de949eed5b430963752ddc2baca0f Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Mon, 8 Sep 2025 22:36:12 -0400 Subject: [PATCH 50/80] fix vertex shader producing an unused varying --- jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl | 2 +- jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl index af634c5255..a1a5605e9f 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanFragTest.glsl @@ -1,6 +1,6 @@ #version 450 -layout(location = 1) in vec2 texCoord; +layout(location = 0) in vec2 texCoord; layout(location = 0) out vec4 outColor; diff --git a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl index 8006a0fb69..5960ce60f9 100644 --- a/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl +++ b/jme3-testdata/src/main/resources/Shaders/VulkanVertTest.glsl @@ -4,8 +4,7 @@ layout (location = 0) in vec3 inPosition; layout (location = 1) in vec2 inTexCoord; layout (location = 2) in vec3 inNormal; -layout (location = 0) out vec3 fragColor; -layout (location = 1) out vec2 texCoord; +layout (location = 0) out vec2 texCoord; layout (set = 0, binding = 0) uniform CameraBuffer { mat4 worldViewProjectionMatrix; From 4756c04c88c8848a87dabd3fe436267465c34cdf Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 9 Sep 2025 10:14:33 -0400 Subject: [PATCH 51/80] rename updateStaticBuffers to updateSharedBuffers --- .../src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java index 7b39c0c9e0..6fe61c6226 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java @@ -24,18 +24,18 @@ public class MyCustomMesh extends AdaptiveMesh { public MyCustomMesh(LogicalDevice device, UpdateFrameManager frames, MeshDescription description, - CommandBatch updateStaticBuffers, + CommandBatch updateSharedBuffers, Vector3f normal, Vector3f up, float width, float height, float centerX, float centerY) { super(description); this.device = device; this.frames = frames; - this.updateStaticBuffers = updateStaticBuffers; + this.updateStaticBuffers = updateSharedBuffers; StaticBuffer indices = new StaticBuffer(device, MemorySize.shorts(6), BufferUsage.Index, MemoryProp.DeviceLocal, false); ShortBuffer iBuf = indices.mapShorts(); iBuf.put((short)0).put((short)2).put((short)3) .put((short)0).put((short)1).put((short)2); indices.unmap(); - indexBuffer = updateStaticBuffers.add(new SingleCommand<>(indices)); + indexBuffer = updateSharedBuffers.add(new SingleCommand<>(indices)); try (Builder m = build(4)) { m.setMode(VertexAttribute.POSITION, VertexMode.Static); m.setMode(VertexAttribute.NORMALS, VertexMode.Static); From 519301ef4e670f347d4a2623fd876714ab338f19 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 9 Sep 2025 10:33:54 -0400 Subject: [PATCH 52/80] add enum to represent common attribute names --- .../jme3test/vulkan/VulkanHelperTest.java | 6 ++--- .../com/jme3/vulkan/mesh/AdaptiveMesh.java | 8 +++++++ .../jme3/vulkan/mesh/BuiltInAttribute.java | 24 +++++++++++++++++++ .../com/jme3/vulkan/mesh/MeshDescription.java | 8 +++++++ .../com/jme3/vulkan/mesh/MyCustomMesh.java | 15 +++++------- 5 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/BuiltInAttribute.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 41d0e168fa..e5341ab85b 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -227,9 +227,9 @@ public void simpleInitApp() { // mesh description MeshDescription meshDesc = new MeshDescription(); - int meshBinding0 = meshDesc.addAttribute(VertexAttribute.POSITION, InputRate.Vertex, Format.RGB32SFloat, 0); - meshDesc.addAttribute(VertexAttribute.TEXCOORD, meshBinding0, Format.RG32SFloat, 1); - meshDesc.addAttribute(VertexAttribute.NORMALS, meshBinding0, Format.RGB32SFloat, 2); + int meshBinding0 = meshDesc.addAttribute(BuiltInAttribute.Position, InputRate.Vertex, Format.RGB32SFloat, 0); + meshDesc.addAttribute(BuiltInAttribute.TexCoord, meshBinding0, Format.RG32SFloat, 1); + meshDesc.addAttribute(BuiltInAttribute.Normal, meshBinding0, Format.RGB32SFloat, 2); // pipeline pipelineLayout = new PipelineLayout(device, descriptorLayout); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java index 5ba4ca77b3..dbcc62ba81 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java @@ -69,6 +69,10 @@ protected AttributeModifier modifyAttribute(String attribute) { } } + protected AttributeModifier modifyAttribute(BuiltInAttribute name) { + return modifyAttribute(name.getName()); + } + protected abstract VersionedResource createStreamingBuffer(MemorySize size); protected abstract VersionedResource createDynamicBuffer(MemorySize size); @@ -114,6 +118,10 @@ public void setMode(String name, VertexMode mode) { } } + public void setMode(BuiltInAttribute name, VertexMode mode) { + setMode(name.getName(), mode); + } + private VersionedResource createVertexBuffer(VertexBinding binding, VertexMode mode) { MemorySize size = MemorySize.bytes(binding.getStride() * vertices); switch (mode) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/BuiltInAttribute.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/BuiltInAttribute.java new file mode 100644 index 0000000000..7ca00ae465 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/BuiltInAttribute.java @@ -0,0 +1,24 @@ +package com.jme3.vulkan.mesh; + +/** + * Names of common attributes such as position, texture coordinates, and normals. + */ +public enum BuiltInAttribute { + + Position("jme_position"), + TexCoord("jme_texcoord"), + Normal("jme_normal"), + Tangent("jme_tangent"), + Color("jme_color"); + + private final String name; + + BuiltInAttribute(String name) { + this.name = name; + } + + public String getName() { + return name; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java index b2cb9b7ec8..5d2989e507 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java @@ -61,6 +61,14 @@ public void addAttribute(String name, int bindingIndex, Format format, int locat getBinding(bindingIndex).addAttribute(name, format, location); } + public int addAttribute(BuiltInAttribute name, LibEnum rate, Format format, int location) { + return addAttribute(name.getName(), rate, format, location); + } + + public void addAttribute(BuiltInAttribute name, int bindingIndex, Format format, int location) { + addAttribute(name.getName(), bindingIndex, format, location); + } + public VertexBinding getBinding(int index) { return bindings.get(index); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java index 6fe61c6226..cc0ce22a7d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java @@ -4,16 +4,13 @@ import com.jme3.vulkan.buffers.*; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.frames.SingleCommand; -import com.jme3.vulkan.frames.SingleResource; import com.jme3.vulkan.frames.UpdateFrameManager; import com.jme3.vulkan.frames.VersionedResource; import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; import com.jme3.vulkan.update.CommandBatch; -import com.jme3.vulkan.util.Flag; import java.nio.ShortBuffer; -import java.util.Objects; public class MyCustomMesh extends AdaptiveMesh { @@ -37,17 +34,17 @@ public MyCustomMesh(LogicalDevice device, indices.unmap(); indexBuffer = updateSharedBuffers.add(new SingleCommand<>(indices)); try (Builder m = build(4)) { - m.setMode(VertexAttribute.POSITION, VertexMode.Static); - m.setMode(VertexAttribute.NORMALS, VertexMode.Static); - m.setMode(VertexAttribute.TEXCOORD, VertexMode.Static); + m.setMode(BuiltInAttribute.Position, VertexMode.Static); + m.setMode(BuiltInAttribute.TexCoord, VertexMode.Static); + m.setMode(BuiltInAttribute.Normal, VertexMode.Static); } Vector3f x = normal.cross(up); Vector3f y = normal.cross(x); Vector3f tempX = new Vector3f(); Vector3f tempY = new Vector3f(); - try (AttributeModifier position = modifyAttribute(VertexAttribute.POSITION); - AttributeModifier normals = modifyAttribute(VertexAttribute.NORMALS); - AttributeModifier texCoord = modifyAttribute(VertexAttribute.TEXCOORD)) { + try (AttributeModifier position = modifyAttribute(BuiltInAttribute.Position); + AttributeModifier normals = modifyAttribute(BuiltInAttribute.Normal); + AttributeModifier texCoord = modifyAttribute(BuiltInAttribute.TexCoord)) { position.putVector3(0, 0, x.mult(-width * centerX, tempX).addLocal(y.mult(height * (1f - centerY), tempY))); position.putVector3(1, 0, x.mult(width * (1.0f - centerX), tempX).addLocal(y.mult(height * (1f - centerY), tempY))); position.putVector3(2, 0, x.mult(width * (1.0f - centerX), tempX).addLocal(y.mult(-height * centerY, tempY))); From 20a2120d6f022baf461ee54de7a368ca8a5bd12a Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 9 Sep 2025 14:59:48 -0400 Subject: [PATCH 53/80] improve pipeline and sampler usability --- .../jme3test/vulkan/VulkanHelperTest.java | 10 +- .../java/com/jme3/vulkan/SharingMode.java | 4 +- .../main/java/com/jme3/vulkan/Swizzle.java | 4 +- .../com/jme3/vulkan/images/AddressMode.java | 25 ++ .../com/jme3/vulkan/images/BorderColor.java | 27 ++ .../java/com/jme3/vulkan/images/Filter.java | 23 ++ .../java/com/jme3/vulkan/images/GpuImage.java | 24 +- .../java/com/jme3/vulkan/images/Image.java | 6 +- .../com/jme3/vulkan/images/ImageView.java | 32 +-- .../com/jme3/vulkan/images/MipmapMode.java | 23 ++ .../java/com/jme3/vulkan/images/Sampler.java | 233 +++++++++++++++--- .../java/com/jme3/vulkan/images/Texture.java | 4 +- .../com/jme3/vulkan/images/VulkanImage.java | 17 +- .../java/com/jme3/vulkan/mesh/IndexType.java | 4 +- .../java/com/jme3/vulkan/mesh/InputRate.java | 4 +- .../com/jme3/vulkan/mesh/MeshDescription.java | 8 +- .../com/jme3/vulkan/mesh/VertexBinding.java | 8 +- .../com/jme3/vulkan/pipelines/CompareOp.java | 29 +++ .../com/jme3/vulkan/pipelines/CullMode.java | 25 ++ .../jme3/vulkan/pipelines/FaceWinding.java | 23 ++ .../com/jme3/vulkan/pipelines/LogicOp.java | 37 +++ .../jme3/vulkan/pipelines/PolygonMode.java | 24 ++ .../com/jme3/vulkan/pipelines/Topology.java | 32 +++ .../pipelines/states/ColorBlendState.java | 9 +- .../pipelines/states/DepthStencilState.java | 8 +- .../vulkan/pipelines/states/DynamicState.java | 12 +- .../pipelines/states/InputAssemblyState.java | 8 +- .../pipelines/states/RasterizationState.java | 26 +- .../pipelines/states/VertexInputState.java | 3 +- .../pipelines/states/ViewportState.java | 12 +- .../com/jme3/vulkan/surface/Swapchain.java | 6 +- .../java/com/jme3/vulkan/util/IntEnum.java | 38 +++ .../java/com/jme3/vulkan/util/LibEnum.java | 11 - 33 files changed, 610 insertions(+), 149 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/AddressMode.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/BorderColor.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Filter.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/MipmapMode.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CompareOp.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CullMode.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FaceWinding.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/LogicOp.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PolygonMode.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Topology.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/IntEnum.java delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/LibEnum.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index e5341ab85b..288fc8c219 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -241,7 +241,7 @@ public void simpleInitApp() { try (GraphicsPipeline.Builder p = pipeline.build()) { p.addShader(vertModule, ShaderStage.Vertex, "main"); p.addShader(fragModule, ShaderStage.Fragment, "main"); - p.getRasterization().setCullMode(VK_CULL_MODE_NONE); + p.getRasterization().setCullMode(CullMode.None); p.getViewportState().addViewport(); p.getViewportState().addScissor(); p.getColorBlend().addAttachment(new ColorBlendAttachment()); @@ -256,8 +256,12 @@ public void simpleInitApp() { try (ImageView.Builder i = imgView.build()) { i.setAspect(VulkanImage.Aspect.Color); } - texture = new Texture(device, imgView, VK_FILTER_LINEAR, VK_FILTER_LINEAR, - VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_MIPMAP_MODE_LINEAR); + texture = new Texture(device, imgView); + try (Sampler.Builder t = texture.build()) { + t.setMinMagFilters(Filter.Linear, Filter.Linear); + t.setEdgeModes(AddressMode.Repeat); + t.setMipmapMode(MipmapMode.Linear); + } graphics = new BasicCommandBatch(); perFrameData = new BasicCommandBatch(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SharingMode.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SharingMode.java index 1879ac58ab..1368b80b0d 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SharingMode.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SharingMode.java @@ -1,10 +1,10 @@ package com.jme3.vulkan; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import static org.lwjgl.vulkan.VK10.*; -public enum SharingMode implements LibEnum { +public enum SharingMode implements IntEnum { Exclusive(VK_SHARING_MODE_EXCLUSIVE), Concurrent(VK_SHARING_MODE_CONCURRENT); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swizzle.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swizzle.java index 0922edd3f5..8717c51d3c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swizzle.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swizzle.java @@ -1,10 +1,10 @@ package com.jme3.vulkan; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import static org.lwjgl.vulkan.VK10.*; -public enum Swizzle implements LibEnum { +public enum Swizzle implements IntEnum { Identity(VK_COMPONENT_SWIZZLE_IDENTITY), R(VK_COMPONENT_SWIZZLE_R), diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/AddressMode.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/AddressMode.java new file mode 100644 index 0000000000..e131b3cb1e --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/AddressMode.java @@ -0,0 +1,25 @@ +package com.jme3.vulkan.images; + +import com.jme3.vulkan.util.IntEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum AddressMode implements IntEnum { + + ClampToBorder(VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER), + ClampToEdge(VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE), + Repeat(VK_SAMPLER_ADDRESS_MODE_REPEAT), + MirroredRepeat(VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT); + + private final int vkEnum; + + AddressMode(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/BorderColor.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/BorderColor.java new file mode 100644 index 0000000000..def7e52452 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/BorderColor.java @@ -0,0 +1,27 @@ +package com.jme3.vulkan.images; + +import com.jme3.vulkan.util.IntEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum BorderColor implements IntEnum { + + FloatOpaqueBlack(VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK), + FloatOpaqueWhite(VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE), + FloatTransparentBlack(VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK), + IntOpaqueBlack(VK_BORDER_COLOR_INT_OPAQUE_BLACK), + IntOpaqueWhite(VK_BORDER_COLOR_INT_OPAQUE_WHITE), + IntTransparentBlack(VK_BORDER_COLOR_INT_TRANSPARENT_BLACK); + + private final int vkEnum; + + BorderColor(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Filter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Filter.java new file mode 100644 index 0000000000..1c84bced98 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Filter.java @@ -0,0 +1,23 @@ +package com.jme3.vulkan.images; + +import com.jme3.vulkan.util.IntEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum Filter implements IntEnum { + + Linear(VK_FILTER_LINEAR), + Nearest(VK_FILTER_NEAREST); + + private final int vkEnum; + + Filter(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java index 82a7f3a165..046a6b7144 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -10,7 +10,7 @@ import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemoryRegion; import com.jme3.vulkan.util.Flag; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkImageCreateInfo; import org.lwjgl.vulkan.VkImageMemoryBarrier; @@ -24,17 +24,17 @@ public class GpuImage extends AbstractNative implements VulkanImage { private final LogicalDevice device; - private final LibEnum type; + private final IntEnum type; private MemoryRegion memory; private int width, height, depth; private int mipmaps, layers; private Flag usage; private Format format = Format.RGBA8_SRGB; - private LibEnum tiling = Tiling.Optimal; - private LibEnum sharing = SharingMode.Exclusive; + private IntEnum tiling = Tiling.Optimal; + private IntEnum sharing = SharingMode.Exclusive; - public GpuImage(LogicalDevice device, LibEnum type) { + public GpuImage(LogicalDevice device, IntEnum type) { this.device = device; this.type = type; width = height = depth = 1; @@ -52,7 +52,7 @@ public long getId() { } @Override - public LibEnum getType() { + public IntEnum getType() { return type; } @@ -92,12 +92,12 @@ public Format getFormat() { } @Override - public LibEnum getTiling() { + public IntEnum getTiling() { return tiling; } @Override - public LibEnum getSharingMode() { + public IntEnum getSharingMode() { return sharing; } @@ -141,7 +141,7 @@ public Builder build() { public class Builder extends AbstractNative.Builder { private Flag mem; - private LibEnum layout = Layout.Undefined; + private IntEnum layout = Layout.Undefined; @Override protected void build() { @@ -216,11 +216,11 @@ public void setFormat(Format f) { format = f; } - public void setTiling(LibEnum t) { + public void setTiling(IntEnum t) { tiling = t; } - public void setLayout(LibEnum l) { + public void setLayout(IntEnum l) { this.layout = l; } @@ -228,7 +228,7 @@ public Flag getMemoryProps() { return mem; } - public LibEnum getLayout() { + public IntEnum getLayout() { return layout; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java index 03ff05f4a6..e54b233ad0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java @@ -1,15 +1,15 @@ package com.jme3.vulkan.images; import com.jme3.vulkan.Format; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; public interface Image { - interface Type extends LibEnum {} + interface Type extends IntEnum {} long getId(); - LibEnum getType(); + IntEnum getType(); int getWidth(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java index 53cf392e75..74d3ebb750 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java @@ -4,7 +4,7 @@ import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.Swizzle; import com.jme3.vulkan.util.Flag; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.vulkan.VkImageViewCreateInfo; import java.nio.LongBuffer; @@ -15,19 +15,19 @@ public class ImageView extends AbstractNative { private final VulkanImage image; - private final LibEnum type; + private final IntEnum type; - private LibEnum swizzleR = Swizzle.R; - private LibEnum swizzleG = Swizzle.G; - private LibEnum swizzleB = Swizzle.B; - private LibEnum swizzleA = Swizzle.A; + private IntEnum swizzleR = Swizzle.R; + private IntEnum swizzleG = Swizzle.G; + private IntEnum swizzleB = Swizzle.B; + private IntEnum swizzleA = Swizzle.A; private Flag aspect = VulkanImage.Aspect.Color; private int baseMipmap = 0; private int mipmapCount = 1; private int baseLayer = 0; private int layerCount = 1; - public ImageView(VulkanImage image, LibEnum type) { + public ImageView(VulkanImage image, IntEnum type) { this.image = image; this.type = type; } @@ -41,23 +41,23 @@ public VulkanImage getImage() { return image; } - public LibEnum getType() { + public IntEnum getType() { return type; } - public LibEnum getSwizzleR() { + public IntEnum getSwizzleR() { return swizzleR; } - public LibEnum getSwizzleG() { + public IntEnum getSwizzleG() { return swizzleG; } - public LibEnum getSwizzleB() { + public IntEnum getSwizzleB() { return swizzleB; } - public LibEnum getSwizzleA() { + public IntEnum getSwizzleA() { return swizzleA; } @@ -118,19 +118,19 @@ public void allMipmaps() { mipmapCount = image.getMipmaps(); } - public void setSwizzleR(LibEnum swizzleR) { + public void setSwizzleR(IntEnum swizzleR) { ImageView.this.swizzleR = swizzleR; } - public void setSwizzleG(LibEnum swizzleG) { + public void setSwizzleG(IntEnum swizzleG) { ImageView.this.swizzleG = swizzleG; } - public void setSwizzleB(LibEnum swizzleB) { + public void setSwizzleB(IntEnum swizzleB) { ImageView.this.swizzleB = swizzleB; } - public void setSwizzleA(LibEnum swizzleA) { + public void setSwizzleA(IntEnum swizzleA) { ImageView.this.swizzleA = swizzleA; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/MipmapMode.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/MipmapMode.java new file mode 100644 index 0000000000..b1dae1ee45 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/MipmapMode.java @@ -0,0 +1,23 @@ +package com.jme3.vulkan.images; + +import com.jme3.vulkan.util.IntEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum MipmapMode implements IntEnum { + + Linear(VK_SAMPLER_MIPMAP_MODE_LINEAR), + Nearest(VK_SAMPLER_MIPMAP_MODE_NEAREST); + + private final int vkEnum; + + MipmapMode(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java index 7d5a379418..c2dbb79cee 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java @@ -1,67 +1,220 @@ package com.jme3.vulkan.images; import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; +import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.devices.LogicalDevice; -import org.lwjgl.system.MemoryStack; +import com.jme3.vulkan.pipelines.CompareOp; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.vulkan.VkPhysicalDeviceProperties; import org.lwjgl.vulkan.VkSamplerCreateInfo; import java.nio.LongBuffer; +import java.util.Objects; +import static com.jme3.renderer.vulkan.VulkanUtils.check; import static org.lwjgl.vulkan.VK10.*; -public class Sampler implements Native { +public class Sampler extends AbstractNative { + + public static final int U = 0, V = 1, W = 2; + public static final float LOD_CLAMP_NONE = VK_LOD_CLAMP_NONE; + public static final float DISABLE_ANISOTROPY = 0f; private final LogicalDevice device; - private final NativeReference ref; - private final long id; + private IntEnum mipmapMode = MipmapMode.Nearest; + private IntEnum min = Filter.Linear; + private IntEnum mag = Filter.Linear; + private final IntEnum[] edgeModes = {AddressMode.ClampToEdge, AddressMode.ClampToEdge, AddressMode.ClampToEdge}; + private float anisotropy = Float.MAX_VALUE; + private IntEnum borderColor = BorderColor.FloatOpaqueBlack; + private IntEnum compare = CompareOp.Always; + private float mipLodBias = 0f; + private float minLod = 0f; + private float maxLod = LOD_CLAMP_NONE; + private boolean unnormalizedCoords = false; - public Sampler(LogicalDevice device, int min, int mag, int edgeMode, int mipmapMode) { + public Sampler(LogicalDevice device) { this.device = device; - try (MemoryStack stack = MemoryStack.stackPush()) { + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroySampler(device.getNativeObject(), object, null); + } + + public LogicalDevice getDevice() { + return device; + } + + public IntEnum getMipmapMode() { + return mipmapMode; + } + + public IntEnum getMin() { + return min; + } + + public IntEnum getMag() { + return mag; + } + + public IntEnum[] getEdgeModes() { + return edgeModes; + } + + public float getAnisotropy() { + return anisotropy; + } + + public IntEnum getBorderColor() { + return borderColor; + } + + public IntEnum getCompare() { + return compare; + } + + public float getMipLodBias() { + return mipLodBias; + } + + public float getMinLod() { + return minLod; + } + + public float getMaxLod() { + return maxLod; + } + + public boolean isUnnormalizedCoords() { + return unnormalizedCoords; + } + + public Builder build() { + return new Builder(); + } + + public class Builder extends AbstractNative.Builder { + + private Builder() {} + + @Override + protected void build() { VkPhysicalDeviceProperties props = device.getPhysicalDevice().getProperties(stack); VkSamplerCreateInfo create = VkSamplerCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO) - .minFilter(min) - .magFilter(mag) - .addressModeU(edgeMode) - .addressModeV(edgeMode) - .addressModeW(edgeMode) - .anisotropyEnable(true) - .maxAnisotropy(props.limits().maxSamplerAnisotropy()) - .borderColor(VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK) - .unnormalizedCoordinates(false) // use (0, 1) sampler coordinates - .compareEnable(false) - .compareOp(VK_COMPARE_OP_ALWAYS) - .mipmapMode(mipmapMode) - .mipLodBias(0f) - .minLod(0f) - .maxLod(0f); + .minFilter(min.getEnum()) + .magFilter(mag.getEnum()) + .addressModeU(edgeModes[U].getEnum()) + .addressModeV(edgeModes[V].getEnum()) + .addressModeW(edgeModes[W].getEnum()) + .anisotropyEnable(anisotropy > DISABLE_ANISOTROPY) + .maxAnisotropy(Math.min(anisotropy, props.limits().maxSamplerAnisotropy())) + .borderColor(borderColor.getEnum()) + .unnormalizedCoordinates(unnormalizedCoords) + .compareEnable(compare != null) + .compareOp(IntEnum.get(compare, CompareOp.Always).getEnum()) + .mipmapMode(mipmapMode.getEnum()) + .mipLodBias(mipLodBias) + .minLod(minLod) + .maxLod(maxLod); LongBuffer idBuf = stack.mallocLong(1); - vkCreateSampler(device.getNativeObject(), create, null, idBuf); - id = idBuf.get(0); + check(vkCreateSampler(device.getNativeObject(), create, null, idBuf), + "Failed to create sampler."); + object = idBuf.get(0); + ref = Native.get().register(Sampler.this); + device.getNativeReference().addDependent(ref); } - ref = Native.get().register(this); - device.getNativeReference().addDependent(ref); - } - @Override - public Long getNativeObject() { - return id; - } + public void setMipmapMode(IntEnum m) { + mipmapMode = Objects.requireNonNull(m); + } - @Override - public Runnable createNativeDestroyer() { - return () -> vkDestroySampler(device.getNativeObject(), id, null); - } + public void setMinFilter(IntEnum f) { + min = Objects.requireNonNull(f); + } - @Override - public void prematureNativeDestruction() {} + public void setMagFilter(IntEnum f) { + mag = Objects.requireNonNull(f); + } + + public void setMinMagFilters(IntEnum min, IntEnum mag) { + setMagFilter(min); + setMagFilter(mag); + } + + public void setEdgeMode(int demension, IntEnum a) { + if (demension < 0 || demension >= edgeModes.length) { + throw new IndexOutOfBoundsException("Invalid edge mode demension (" + demension + "). " + + "Must be between 0 (inclusive) and " + edgeModes.length + " (exclusive)."); + } + edgeModes[demension] = Objects.requireNonNull(a); + } + + public void setEdgeModeU(IntEnum u) { + setEdgeMode(U, u); + } + + public void setEdgeModeV(IntEnum v) { + setEdgeMode(V, v); + } + + public void setEdgeModeW(IntEnum w) { + setEdgeMode(W, w); + } + + public void setEdgeModes(IntEnum u, IntEnum v, IntEnum w) { + setEdgeMode(U, u); + setEdgeMode(V, v); + setEdgeMode(W, w); + } + + public void setEdgeModes(IntEnum e) { + setEdgeMode(U, e); + setEdgeMode(V, e); + setEdgeMode(W, e); + } + + public void setAnisotropy(float a) { + anisotropy = a; + } + + public void maxAnisotropy() { + setAnisotropy(Float.MAX_VALUE); + } + + public void disableAnisotropy() { + setAnisotropy(DISABLE_ANISOTROPY); + } + + public void setBorderColor(BorderColor c) { + borderColor = Objects.requireNonNull(c); + } + + public void setCompare(CompareOp c) { + compare = Objects.requireNonNull(c); + } + + public void setMipLodBias(float bias) { + mipLodBias = bias; + } + + public void setMinLod(float lod) { + minLod = lod; + } + + public void setMaxLod(float lod) { + maxLod = lod; + } + + public void disableMaxLod() { + setMaxLod(LOD_CLAMP_NONE); + } + + public void setUnnormalizedCoords(boolean u) { + unnormalizedCoords = u; + } - @Override - public NativeReference getNativeReference() { - return ref; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java index e51ee51363..33c34469d9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java @@ -8,8 +8,8 @@ public class Texture extends Sampler { private final ImageView image; - public Texture(LogicalDevice device, ImageView image, int min, int mag, int edgeMode, int mipmapMode) { - super(device, min, mag, edgeMode, mipmapMode); + public Texture(LogicalDevice device, ImageView image) { + super(device); this.image = Objects.requireNonNull(image); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java index 2c8f823c63..aadc6050fe 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java @@ -1,11 +1,10 @@ package com.jme3.vulkan.images; -import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.SharingMode; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.util.Flag; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.vulkan.KHRSwapchain; import static org.lwjgl.vulkan.VK10.*; @@ -31,7 +30,7 @@ public int getEnum() { } - enum Layout implements LibEnum { + enum Layout implements IntEnum { Undefined(VK_IMAGE_LAYOUT_UNDEFINED), General(VK_IMAGE_LAYOUT_GENERAL), @@ -78,7 +77,7 @@ public static int[] getTransferArguments(Layout srcLayout, Layout dstLayout) { } - enum Tiling implements LibEnum { + enum Tiling implements IntEnum { Optimal(VK_IMAGE_TILING_OPTIMAL), Linear(VK_IMAGE_TILING_LINEAR); @@ -96,7 +95,7 @@ public int getEnum() { } - enum Load implements LibEnum { + enum Load implements IntEnum { Clear(VK_ATTACHMENT_LOAD_OP_CLEAR), Load(VK_ATTACHMENT_LOAD_OP_LOAD), @@ -115,7 +114,7 @@ public int getEnum() { } - enum Store implements LibEnum { + enum Store implements IntEnum { Store(VK_ATTACHMENT_STORE_OP_STORE), DontCare(VK_ATTACHMENT_STORE_OP_DONT_CARE); @@ -133,7 +132,7 @@ public int getEnum() { } - enum View implements LibEnum { + enum View implements IntEnum { OneDemensional(VK_IMAGE_VIEW_TYPE_1D), TwoDemensional(VK_IMAGE_VIEW_TYPE_2D), @@ -180,9 +179,9 @@ public int bits() { Flag getUsage(); - LibEnum getTiling(); + IntEnum getTiling(); - LibEnum getSharingMode(); + IntEnum getSharingMode(); void addNativeDependent(NativeReference ref); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java index 86352c1e31..e7fa3b213c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java @@ -1,11 +1,11 @@ package com.jme3.vulkan.mesh; import com.jme3.vulkan.buffers.GpuBuffer; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import static org.lwjgl.vulkan.VK10.*; -public enum IndexType implements LibEnum { +public enum IndexType implements IntEnum { UInt32(VK_INDEX_TYPE_UINT32, 2), UInt16(VK_INDEX_TYPE_UINT16, 4); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java index 24c58acd46..6fbda3315b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java @@ -1,10 +1,10 @@ package com.jme3.vulkan.mesh; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import static org.lwjgl.vulkan.VK10.*; -public enum InputRate implements LibEnum { +public enum InputRate implements IntEnum { Vertex(VK_VERTEX_INPUT_RATE_VERTEX), Instance(VK_VERTEX_INPUT_RATE_INSTANCE); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java index 5d2989e507..190ac999ac 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java @@ -1,7 +1,7 @@ package com.jme3.vulkan.mesh; import com.jme3.vulkan.Format; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkVertexInputAttributeDescription; import org.lwjgl.vulkan.VkVertexInputBindingDescription; @@ -45,13 +45,13 @@ public VkVertexInputAttributeDescription.Buffer getAttributeInfo(MemoryStack sta return attr; } - public int addBinding(LibEnum rate) { + public int addBinding(IntEnum rate) { VertexBinding binding = new VertexBinding(bindings.size(), rate); bindings.add(binding); return binding.getBindingIndex(); } - public int addAttribute(String name, LibEnum rate, Format format, int location) { + public int addAttribute(String name, IntEnum rate, Format format, int location) { int binding = addBinding(rate); addAttribute(name, binding, format, location); return binding; @@ -61,7 +61,7 @@ public void addAttribute(String name, int bindingIndex, Format format, int locat getBinding(bindingIndex).addAttribute(name, format, location); } - public int addAttribute(BuiltInAttribute name, LibEnum rate, Format format, int location) { + public int addAttribute(BuiltInAttribute name, IntEnum rate, Format format, int location) { return addAttribute(name.getName(), rate, format, location); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java index c4601134d3..fbce4738dd 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java @@ -1,18 +1,18 @@ package com.jme3.vulkan.mesh; import com.jme3.vulkan.Format; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import java.util.*; public class VertexBinding implements Iterable { private final int binding; - private final LibEnum rate; + private final IntEnum rate; private final Map attributes = new HashMap<>(); private int stride; - public VertexBinding(int binding, LibEnum rate) { + public VertexBinding(int binding, IntEnum rate) { this.binding = binding; this.rate = rate; } @@ -38,7 +38,7 @@ public int getStride() { return stride; } - public LibEnum getRate() { + public IntEnum getRate() { return rate; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CompareOp.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CompareOp.java new file mode 100644 index 0000000000..d652296fad --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CompareOp.java @@ -0,0 +1,29 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.vulkan.util.IntEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum CompareOp implements IntEnum { + + LessOrEqual(VK_COMPARE_OP_LESS_OR_EQUAL), + Always(VK_COMPARE_OP_ALWAYS), + Equal(VK_COMPARE_OP_EQUAL), + Greater(VK_COMPARE_OP_GREATER), + Less(VK_COMPARE_OP_LESS), + GreaterOrEqual(VK_COMPARE_OP_GREATER_OR_EQUAL), + Never(VK_COMPARE_OP_NEVER), + NotEqual(VK_COMPARE_OP_NOT_EQUAL); + + private final int vkEnum; + + CompareOp(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CullMode.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CullMode.java new file mode 100644 index 0000000000..22c4fd90a4 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CullMode.java @@ -0,0 +1,25 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.vulkan.util.Flag; + +import static org.lwjgl.vulkan.VK10.*; + +public enum CullMode implements Flag { + + None(VK_CULL_MODE_NONE), + Back(VK_CULL_MODE_BACK_BIT), + Front(VK_CULL_MODE_FRONT_BIT), + FrontAndBack(VK_CULL_MODE_FRONT_AND_BACK); + + private final int bits; + + CullMode(int bits) { + this.bits = bits; + } + + @Override + public int bits() { + return bits; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FaceWinding.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FaceWinding.java new file mode 100644 index 0000000000..13d87661ba --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FaceWinding.java @@ -0,0 +1,23 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.vulkan.util.IntEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum FaceWinding implements IntEnum { + + Clockwise(VK_FRONT_FACE_CLOCKWISE), + CounterClockwise(VK_FRONT_FACE_COUNTER_CLOCKWISE); + + private final int vkEnum; + + FaceWinding(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/LogicOp.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/LogicOp.java new file mode 100644 index 0000000000..1feed0881f --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/LogicOp.java @@ -0,0 +1,37 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.vulkan.util.IntEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum LogicOp implements IntEnum { + + Copy(VK_LOGIC_OP_COPY), + And(VK_LOGIC_OP_AND), + Or(VK_LOGIC_OP_OR), + None(VK_LOGIC_OP_NO_OP), + Clear(VK_LOGIC_OP_CLEAR), + AndInverted(VK_LOGIC_OP_AND_INVERTED), + AndReverse(VK_LOGIC_OP_AND_REVERSE), + CopyInverted(VK_LOGIC_OP_COPY_INVERTED), + Equivalent(VK_LOGIC_OP_EQUIVALENT), + Invert(VK_LOGIC_OP_INVERT), + Nand(VK_LOGIC_OP_NAND), + Nor(VK_LOGIC_OP_NOR), + OrInverted(VK_LOGIC_OP_OR_INVERTED), + OrReverse(VK_LOGIC_OP_OR_REVERSE), + Set(VK_LOGIC_OP_SET), + Xor(VK_LOGIC_OP_XOR); + + private final int vkEnum; + + LogicOp(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PolygonMode.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PolygonMode.java new file mode 100644 index 0000000000..7146b81878 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PolygonMode.java @@ -0,0 +1,24 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.vulkan.util.IntEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum PolygonMode implements IntEnum { + + Fill(VK_POLYGON_MODE_FILL), + Line(VK_POLYGON_MODE_LINE), + Point(VK_POLYGON_MODE_POINT); + + private final int vkEnum; + + PolygonMode(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Topology.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Topology.java new file mode 100644 index 0000000000..abc30f15e7 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Topology.java @@ -0,0 +1,32 @@ +package com.jme3.vulkan.pipelines; + +import com.jme3.vulkan.util.IntEnum; + +import static org.lwjgl.vulkan.VK10.*; + +public enum Topology implements IntEnum { + + LineList(VK_PRIMITIVE_TOPOLOGY_LINE_LIST), + LineStrip(VK_PRIMITIVE_TOPOLOGY_LINE_STRIP), + TriangleList(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST), + PatchList(VK_PRIMITIVE_TOPOLOGY_PATCH_LIST), + PointList(VK_PRIMITIVE_TOPOLOGY_POINT_LIST), + LineListAdjacency(VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY), + LineStripAdjacency(VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY), + TriangleFan(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN), + TriangleListAdjacency(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY), + TriangleStrip(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP), + TriangleStripAdjacency(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY); + + private final int vkEnum; + + Topology(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java index 904753d2fd..b51e4927cf 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java @@ -1,5 +1,7 @@ package com.jme3.vulkan.pipelines.states; +import com.jme3.vulkan.pipelines.LogicOp; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkPipelineColorBlendAttachmentState; import org.lwjgl.vulkan.VkPipelineColorBlendStateCreateInfo; @@ -7,14 +9,13 @@ import java.util.ArrayList; import java.util.List; -import static org.lwjgl.vulkan.VK10.VK_LOGIC_OP_COPY; import static org.lwjgl.vulkan.VK10.VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; public class ColorBlendState implements PipelineState { private final List attachments = new ArrayList<>(); private boolean logicEnabled = false; - private int logic = VK_LOGIC_OP_COPY; + private IntEnum logic = LogicOp.Copy; @Override public VkPipelineColorBlendStateCreateInfo toStruct(MemoryStack stack) { @@ -26,7 +27,7 @@ public VkPipelineColorBlendStateCreateInfo toStruct(MemoryStack stack) { return VkPipelineColorBlendStateCreateInfo.calloc(stack) .sType(VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO) .logicOpEnable(logicEnabled) - .logicOp(logic) + .logicOp(logic.getEnum()) .pAttachments(attBuf); } @@ -38,7 +39,7 @@ public void setLogicEnabled(boolean logicEnabled) { this.logicEnabled = logicEnabled; } - public void setLogic(int logic) { + public void setLogic(IntEnum logic) { this.logic = logic; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java index 8e9ec2a5e7..52e8bbe192 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java @@ -1,5 +1,7 @@ package com.jme3.vulkan.pipelines.states; +import com.jme3.vulkan.pipelines.CompareOp; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkPipelineDepthStencilStateCreateInfo; @@ -10,7 +12,7 @@ public class DepthStencilState implements PipelineState depthCompare = CompareOp.LessOrEqual; @Override public VkPipelineDepthStencilStateCreateInfo toStruct(MemoryStack stack) { @@ -20,7 +22,7 @@ public VkPipelineDepthStencilStateCreateInfo toStruct(MemoryStack stack) { .depthWriteEnable(depthWrite) .depthBoundsTestEnable(depthBoundsTest) .stencilTestEnable(stencilTest) - .depthCompareOp(depthCompare); + .depthCompareOp(depthCompare.getEnum()); } public void setDepthTest(boolean depthTest) { @@ -39,7 +41,7 @@ public void setStencilTest(boolean stencilTest) { this.stencilTest = stencilTest; } - public void setDepthCompare(int depthCompare) { + public void setDepthCompare(IntEnum depthCompare) { this.depthCompare = depthCompare; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java index b8bff79656..a9a56ccd21 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java @@ -1,6 +1,6 @@ package com.jme3.vulkan.pipelines.states; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkPipelineDynamicStateCreateInfo; @@ -13,7 +13,7 @@ public class DynamicState implements PipelineState { - public enum Type implements LibEnum { + public enum Type implements IntEnum { ViewPort(VK_DYNAMIC_STATE_VIEWPORT), Scissor(VK_DYNAMIC_STATE_SCISSOR), @@ -38,17 +38,17 @@ public int getEnum() { } - private final Set> states = new HashSet<>(); + private final Set> states = new HashSet<>(); @SafeVarargs - public DynamicState(LibEnum... types) { + public DynamicState(IntEnum... types) { addTypes(types); } @Override public VkPipelineDynamicStateCreateInfo toStruct(MemoryStack stack) { IntBuffer stateBuf = stack.mallocInt(states.size()); - for (LibEnum t : states) { + for (IntEnum t : states) { stateBuf.put(t.getEnum()); } stateBuf.flip(); @@ -58,7 +58,7 @@ public VkPipelineDynamicStateCreateInfo toStruct(MemoryStack stack) { } @SafeVarargs - public final void addTypes(LibEnum... types) { + public final void addTypes(IntEnum... types) { states.addAll(Arrays.asList(types)); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java index bff57a22d9..3be8212b6b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java @@ -1,23 +1,25 @@ package com.jme3.vulkan.pipelines.states; +import com.jme3.vulkan.pipelines.Topology; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkPipelineInputAssemblyStateCreateInfo; public class InputAssemblyState implements PipelineState { - private int topology = VK10.VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + private IntEnum topology = Topology.TriangleList; private boolean primitiveRestart = false; @Override public VkPipelineInputAssemblyStateCreateInfo toStruct(MemoryStack stack) { return VkPipelineInputAssemblyStateCreateInfo.calloc(stack) .sType(VK10.VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO) - .topology(topology) + .topology(topology.getEnum()) .primitiveRestartEnable(primitiveRestart); } - public void setTopology(int topology) { + public void setTopology(IntEnum topology) { this.topology = topology; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java index 0315ff3504..91a1052863 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java @@ -1,5 +1,10 @@ package com.jme3.vulkan.pipelines.states; +import com.jme3.vulkan.pipelines.CullMode; +import com.jme3.vulkan.pipelines.FaceWinding; +import com.jme3.vulkan.pipelines.PolygonMode; +import com.jme3.vulkan.util.Flag; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkPipelineRasterizationStateCreateInfo; @@ -7,9 +12,9 @@ public class RasterizationState implements PipelineState { - private int polygonMode = VK_POLYGON_MODE_FILL; - private int cullMode = VK_CULL_MODE_BACK_BIT; - private int frontFace = VK_FRONT_FACE_CLOCKWISE; + private IntEnum polygonMode = PolygonMode.Fill; + private Flag cullMode = CullMode.Back; + private IntEnum faceWinding = FaceWinding.Clockwise; private float lineWidth = 1f; private boolean depthClamp = false; private boolean rasterizerDiscard = false; @@ -21,24 +26,23 @@ public VkPipelineRasterizationStateCreateInfo toStruct(MemoryStack stack) { .sType(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO) .depthClampEnable(depthClamp) .rasterizerDiscardEnable(rasterizerDiscard) - .polygonMode(polygonMode) + .polygonMode(polygonMode.getEnum()) .lineWidth(lineWidth) - .cullMode(cullMode) - .frontFace(frontFace) - .cullMode(cullMode) + .cullMode(cullMode.bits()) + .frontFace(faceWinding.getEnum()) .depthBiasEnable(depthBias); } - public void setPolygonMode(int polygonMode) { + public void setPolygonMode(IntEnum polygonMode) { this.polygonMode = polygonMode; } - public void setCullMode(int cullMode) { + public void setCullMode(Flag cullMode) { this.cullMode = cullMode; } - public void setFrontFace(int frontFace) { - this.frontFace = frontFace; + public void setFaceWinding(IntEnum faceWinding) { + this.faceWinding = faceWinding; } public void setLineWidth(float lineWidth) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java index c4bd2b8bca..1cce2b84ee 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java @@ -17,6 +17,7 @@ public VertexInputState(MeshDescription mesh) { @Override public VkPipelineVertexInputStateCreateInfo toStruct(MemoryStack stack) { + Objects.requireNonNull(mesh, "Mesh description is not defined."); return VkPipelineVertexInputStateCreateInfo.calloc(stack) .sType(VK10.VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO) .pVertexBindingDescriptions(mesh.getBindingInfo(stack)) @@ -24,7 +25,7 @@ public VkPipelineVertexInputStateCreateInfo toStruct(MemoryStack stack) { } public void setMesh(MeshDescription mesh) { - this.mesh = Objects.requireNonNull(mesh, "Mesh description cannot be null."); + this.mesh = mesh; } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java index 9dbf6388b8..9bbac6a0c1 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java @@ -37,11 +37,11 @@ public VkPipelineViewportStateCreateInfo toStruct(MemoryStack stack) { } public void addViewport() { - viewports.add(new ViewportInfo(0f, 0f, 128f, 128f, 0f, 1f)); + addViewport(0f, 0f, 128f, 128f); } public void addViewport(float x, float y, float w, float h) { - viewports.add(new ViewportInfo(x, y, w, h, 0f, 1f)); + addViewport(x, y, w, h, 0f, 1f); } public void addViewport(float x, float y, float w, float h, float minDepth, float maxDepth) { @@ -49,7 +49,7 @@ public void addViewport(float x, float y, float w, float h, float minDepth, floa } public void addScissor() { - scissors.add(new ScissorInfo(0, 0, 128, 128)); + addScissor(0, 0, 128, 128); } public void addScissor(int x, int y, int w, int h) { @@ -58,8 +58,8 @@ public void addScissor(int x, int y, int w, int h) { private static class ViewportInfo { - private final float x, y, w, h; - private final float min, max; + public final float x, y, w, h; + public final float min, max; public ViewportInfo(float x, float y, float w, float h, float min, float max) { this.x = x; @@ -74,7 +74,7 @@ public ViewportInfo(float x, float y, float w, float h, float min, float max) { private static class ScissorInfo { - private final int x, y, w, h; + public final int x, y, w, h; public ScissorInfo(int x, int y, int w, int h) { this.x = x; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java index 961b143f8d..296e6119bd 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -16,7 +16,7 @@ import com.jme3.vulkan.sync.SyncGroup; import com.jme3.vulkan.util.Extent2; import com.jme3.vulkan.util.Flag; -import com.jme3.vulkan.util.LibEnum; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; @@ -178,7 +178,7 @@ public long getId() { } @Override - public LibEnum getType() { + public IntEnum getType() { return Type.TwoDemensional; } @@ -223,7 +223,7 @@ public VulkanImage.Tiling getTiling() { } @Override - public LibEnum getSharingMode() { + public IntEnum getSharingMode() { return SharingMode.Exclusive; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/IntEnum.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/IntEnum.java new file mode 100644 index 0000000000..24c17fdf02 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/IntEnum.java @@ -0,0 +1,38 @@ +package com.jme3.vulkan.util; + +public interface IntEnum { + + int getEnum(); + + default boolean is(IntEnum intEnum) { + return intEnum != null && is(intEnum.getEnum()); + } + + default boolean is(int intEnum) { + return getEnum() == intEnum; + } + + static IntEnum get(IntEnum intEnum, IntEnum defEnum) { + return intEnum != null ? intEnum : defEnum; + } + + static IntEnum of(int libEnum) { + return new EnumImpl<>(libEnum); + } + + class EnumImpl implements IntEnum { + + private final int libEnum; + + public EnumImpl(int libEnum) { + this.libEnum = libEnum; + } + + @Override + public int getEnum() { + return libEnum; + } + + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/LibEnum.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/LibEnum.java deleted file mode 100644 index d7907c7127..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/LibEnum.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.jme3.vulkan.util; - -public interface LibEnum { - - int getEnum(); - - default boolean is(LibEnum vk) { - return vk != null && getEnum() == vk.getEnum(); - } - -} From 2f3f8c55094de5ea6735b9d15d7d4cf241a30b2d Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 9 Sep 2025 18:38:24 -0400 Subject: [PATCH 54/80] improve pipeline and sampler usability --- .../java/jme3test/vulkan/VulkanHelperTest.java | 3 ++- .../descriptors/BaseDescriptorWriter.java | 2 +- .../com/jme3/vulkan/descriptors/Descriptor.java | 7 +++++-- .../com/jme3/vulkan/descriptors/PoolSize.java | 11 +++++------ .../vulkan/descriptors/SetLayoutBinding.java | 11 ++++++----- .../java/com/jme3/vulkan/images/Sampler.java | 17 ++++++++++------- .../material/uniforms/AbstractUniform.java | 7 ++++--- .../vulkan/material/uniforms/BufferUniform.java | 7 ++++--- .../material/uniforms/TextureUniform.java | 11 ++++++----- .../jme3/vulkan/pipelines/GraphicsPipeline.java | 6 ++---- .../pipelines/states/VertexInputState.java | 4 ---- .../java/com/jme3/vulkan/surface/Swapchain.java | 16 +++++++++------- 12 files changed, 54 insertions(+), 48 deletions(-) diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 288fc8c219..b554f9b6c2 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -237,10 +237,11 @@ public void simpleInitApp() { "Shaders/VulkanVertTest.glsl", ShaderType.Vertex))); fragModule = new ShaderModule(device, assetManager.loadAsset(ShadercLoader.key( "Shaders/VulkanFragTest.glsl", ShaderType.Fragment))); - pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, 0, meshDesc); + pipeline = new GraphicsPipeline(device, pipelineLayout, renderPass, 0); try (GraphicsPipeline.Builder p = pipeline.build()) { p.addShader(vertModule, ShaderStage.Vertex, "main"); p.addShader(fragModule, ShaderStage.Fragment, "main"); + p.getVertexInput().setMesh(meshDesc); p.getRasterization().setCullMode(CullMode.None); p.getViewportState().addViewport(); p.getViewportState().addScissor(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java index 44a22d6e10..3440148f8b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java @@ -17,7 +17,7 @@ public BaseDescriptorWriter(Descriptor type, int binding, int arrayElement, int @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { - write.descriptorType(type.getVkEnum()).dstBinding(binding) + write.descriptorType(type.getEnum()).dstBinding(binding) .dstArrayElement(arrayElement) .descriptorCount(descriptorCount); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java index 415fd7f701..69a08b21d7 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java @@ -1,8 +1,10 @@ package com.jme3.vulkan.descriptors; +import com.jme3.vulkan.util.IntEnum; + import static org.lwjgl.vulkan.VK10.*; -public enum Descriptor { +public enum Descriptor implements IntEnum { UniformBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER), UniformBufferDynamic(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC), @@ -22,7 +24,8 @@ public enum Descriptor { this.vkEnum = vkEnum; } - public int getVkEnum() { + @Override + public int getEnum() { return vkEnum; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java index 11d2a4d036..976f7214b5 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java @@ -1,21 +1,20 @@ package com.jme3.vulkan.descriptors; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDescriptorPoolSize; -import static org.lwjgl.vulkan.VK10.*; - public class PoolSize { - private final Descriptor type; + private final IntEnum type; private final int size; - public PoolSize(Descriptor type, int size) { + public PoolSize(IntEnum type, int size) { this.type = type; this.size = size; } - public Descriptor getType() { + public IntEnum getType() { return type; } @@ -26,7 +25,7 @@ public int getSize() { public static VkDescriptorPoolSize.Buffer aggregate(MemoryStack stack, PoolSize... sizes) { VkDescriptorPoolSize.Buffer buffer = VkDescriptorPoolSize.calloc(sizes.length, stack); for (PoolSize poolSize : sizes) { - buffer.get().set(poolSize.type.getVkEnum(), poolSize.size); + buffer.get().set(poolSize.type.getEnum(), poolSize.size); } buffer.flip(); return buffer; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java index 6fe0a1a827..6e37abf797 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java @@ -2,19 +2,20 @@ import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.vulkan.VkDescriptorSetLayoutBinding; public class SetLayoutBinding { - private final Descriptor type; + private final IntEnum type; private final int binding, descriptors; private final Flag stages; - public SetLayoutBinding(Descriptor type, int binding, int descriptors) { + public SetLayoutBinding(IntEnum type, int binding, int descriptors) { this(type, binding, descriptors, ShaderStage.All); } - public SetLayoutBinding(Descriptor type, int binding, int descriptors, Flag stages) { + public SetLayoutBinding(IntEnum type, int binding, int descriptors, Flag stages) { this.type = type; this.binding = binding; this.descriptors = descriptors; @@ -23,14 +24,14 @@ public SetLayoutBinding(Descriptor type, int binding, int descriptors, Flag getType() { return type; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java index c2dbb79cee..1f011a9960 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java @@ -17,7 +17,6 @@ public class Sampler extends AbstractNative { public static final int U = 0, V = 1, W = 2; - public static final float LOD_CLAMP_NONE = VK_LOD_CLAMP_NONE; public static final float DISABLE_ANISOTROPY = 0f; private final LogicalDevice device; @@ -30,7 +29,7 @@ public class Sampler extends AbstractNative { private IntEnum compare = CompareOp.Always; private float mipLodBias = 0f; private float minLod = 0f; - private float maxLod = LOD_CLAMP_NONE; + private float maxLod = VK_LOD_CLAMP_NONE; private boolean unnormalizedCoords = false; public Sampler(LogicalDevice device) { @@ -66,6 +65,10 @@ public float getAnisotropy() { return anisotropy; } + public boolean isAnisotropyEnabled() { + return anisotropy > DISABLE_ANISOTROPY; + } + public IntEnum getBorderColor() { return borderColor; } @@ -145,8 +148,8 @@ public void setMinMagFilters(IntEnum min, IntEnum mag) { public void setEdgeMode(int demension, IntEnum a) { if (demension < 0 || demension >= edgeModes.length) { - throw new IndexOutOfBoundsException("Invalid edge mode demension (" + demension + "). " + - "Must be between 0 (inclusive) and " + edgeModes.length + " (exclusive)."); + throw new IndexOutOfBoundsException("Invalid demension index (" + demension + "). " + + "Must be 0 (U), 1 (V), or 2 (W)."); } edgeModes[demension] = Objects.requireNonNull(a); } @@ -187,11 +190,11 @@ public void disableAnisotropy() { setAnisotropy(DISABLE_ANISOTROPY); } - public void setBorderColor(BorderColor c) { + public void setBorderColor(IntEnum c) { borderColor = Objects.requireNonNull(c); } - public void setCompare(CompareOp c) { + public void setCompare(IntEnum c) { compare = Objects.requireNonNull(c); } @@ -208,7 +211,7 @@ public void setMaxLod(float lod) { } public void disableMaxLod() { - setMaxLod(LOD_CLAMP_NONE); + setMaxLod(VK_LOD_CLAMP_NONE); } public void setUnnormalizedCoords(boolean u) { diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java index 8e41c8935e..464984f750 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java @@ -6,16 +6,17 @@ import com.jme3.vulkan.frames.VersionedResource; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; +import com.jme3.vulkan.util.IntEnum; public abstract class AbstractUniform implements Uniform { protected final String name; - protected final Descriptor type; + protected final IntEnum type; protected final int bindingIndex; protected final Flag stages; protected VersionedResource resource; - public AbstractUniform(String name, Descriptor type, int bindingIndex, Flag stages) { + public AbstractUniform(String name, IntEnum type, int bindingIndex, Flag stages) { this.name = name; this.type = type; this.bindingIndex = bindingIndex; @@ -50,7 +51,7 @@ public VersionedResource getResource() { return resource; } - public Descriptor getType() { + public IntEnum getType() { return type; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java index fe714e8b2a..319bbcab90 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java @@ -5,13 +5,14 @@ import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDescriptorBufferInfo; import org.lwjgl.vulkan.VkWriteDescriptorSet; public class BufferUniform extends AbstractUniform { - public BufferUniform(String name, Descriptor type, int bindingIndex, Flag stages) { + public BufferUniform(String name, IntEnum type, int bindingIndex, Flag stages) { super(name, type, bindingIndex, stages); } @@ -26,12 +27,12 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { .descriptorCount(1) .dstArrayElement(0) .dstBinding(bindingIndex) - .descriptorType(type.getVkEnum()); + .descriptorType(type.getEnum()); } @Override public boolean isBindingCompatible(SetLayoutBinding binding) { - return type == binding.getType() + return type.is(binding.getType()) && bindingIndex == binding.getBinding() && binding.getDescriptors() == 1; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index 1c3576b4b7..2b3fc96950 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -6,15 +6,16 @@ import com.jme3.vulkan.images.VulkanImage; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; +import com.jme3.vulkan.util.IntEnum; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDescriptorImageInfo; import org.lwjgl.vulkan.VkWriteDescriptorSet; public class TextureUniform extends AbstractUniform { - private final VulkanImage.Layout layout; + private final IntEnum layout; - public TextureUniform(String name, VulkanImage.Layout layout, int bindingIndex, Flag stages) { + public TextureUniform(String name, IntEnum layout, int bindingIndex, Flag stages) { super(name, Descriptor.CombinedImageSampler, bindingIndex, stages); this.layout = layout; } @@ -27,7 +28,7 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { .sampler(tex.getNativeObject()) .imageLayout(layout.getEnum()); write.pImageInfo(info) - .descriptorType(type.getVkEnum()) + .descriptorType(type.getEnum()) .dstBinding(bindingIndex) .dstArrayElement(0) .descriptorCount(1); @@ -35,12 +36,12 @@ public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { @Override public boolean isBindingCompatible(SetLayoutBinding binding) { - return type == binding.getType() + return type.is(binding.getType()) && bindingIndex == binding.getBinding() && binding.getDescriptors() == 1; } - public VulkanImage.Layout getLayout() { + public IntEnum getLayout() { return layout; } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java index 0b4db732d5..698645bd3c 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java @@ -21,13 +21,11 @@ public class GraphicsPipeline extends Pipeline { private final RenderPass compat; private final int subpassIndex; - private final MeshDescription mesh; - public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass compat, int subpassIndex, MeshDescription mesh) { + public GraphicsPipeline(LogicalDevice device, PipelineLayout layout, RenderPass compat, int subpassIndex) { super(device, PipelineBindPoint.Graphics, layout); this.compat = compat; this.subpassIndex = subpassIndex; - this.mesh = mesh; } public RenderPass getCompat() { @@ -46,7 +44,7 @@ public class Builder extends AbstractNative.Builder { private final Collection stages = new ArrayList<>(); private final DynamicState dynamic = new DynamicState(); - private final VertexInputState vertexInput = new VertexInputState(mesh); + private final VertexInputState vertexInput = new VertexInputState(); private final InputAssemblyState inputAssembly = new InputAssemblyState(); private final ViewportState viewport = new ViewportState(); private final DepthStencilState depthStencil = new DepthStencilState(); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java index 1cce2b84ee..393662cf13 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java @@ -11,10 +11,6 @@ public class VertexInputState implements PipelineState { - public enum PresentMode { + public enum PresentMode implements IntEnum { FirstInFirstOut(KHRSurface.VK_PRESENT_MODE_FIFO_KHR), FirstInFirstOutRelaxed(KHRSurface.VK_PRESENT_MODE_FIFO_RELAXED_KHR), @@ -45,7 +45,8 @@ public enum PresentMode { this.vkEnum = vkEnum; } - public int getVkEnum() { + @Override + public int getEnum() { return vkEnum; } @@ -251,7 +252,7 @@ public class Builder extends AbstractNative.Builder { private VkSurfaceFormatKHR selectedFormat; private VkExtent2D selectedExtent; - private PresentMode selectedMode; + private IntEnum selectedMode; private Integer selectedImageCount; private Swapchain base; @@ -304,7 +305,7 @@ protected void build() { .imageUsage(imageUsage.bits()) .preTransform(caps.currentTransform()) .compositeAlpha(KHRSurface.VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) - .presentMode(selectedMode.getVkEnum()) + .presentMode(selectedMode.getEnum()) .clipped(true); if (base != null) { create.oldSwapchain(base.getNativeObject()); @@ -357,10 +358,11 @@ public VkSurfaceFormatKHR selectFormat(int... preferredFormats) { return (selectedFormat = formats.get(0)); } - public PresentMode selectMode(PresentMode... preferredModes) { - for (PresentMode m : preferredModes) { + @SafeVarargs + public final IntEnum selectMode(IntEnum... preferredModes) { + for (IntEnum m : preferredModes) { for (int i = 0; i < modes.limit(); i++) { - if (modes.get(i) == m.getVkEnum()) { + if (modes.get(i) == m.getEnum()) { return (selectedMode = m); } } From 42d7525e3fc60d0d166525c1c8a8262fd61791b6 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Wed, 10 Sep 2025 22:29:23 -0400 Subject: [PATCH 55/80] preparing to alter Spatial --- VulkanDesign.txt | 140 +----------------- .../jme3test/vulkan/VulkanHelperTest.java | 2 +- .../java/com/jme3/vulkan/scene/Geometry.java | 5 + .../main/java/com/jme3/vulkan/scene/Node.java | 32 ++++ .../java/com/jme3/vulkan/scene/Spatial.java | 104 +++++++++++++ 5 files changed, 146 insertions(+), 137 deletions(-) create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Geometry.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Node.java create mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Spatial.java diff --git a/VulkanDesign.txt b/VulkanDesign.txt index 8b96eacb1d..3e6ca6c92b 100644 --- a/VulkanDesign.txt +++ b/VulkanDesign.txt @@ -1,137 +1,5 @@ -Some resources require copies per concurrent frame. There are some unresolved problems with implementing this: +Spatial: Current problems: - 1. UniformSets need to have a DescriptorSet per concurrent frame, but only if at least one uniform requires resource copies. - 2. Resources need to know the current frame's index so the correct copy is used. - 3. Not all resources need to have copies per frame. This should be configurable by this user even after resources have been created (either by changing a state or replacing the resource entirely). - -There are a couple different levels at which the copy split can happen: - - 1. Inside GpuBuffer and Image implementations (very low-level). - 2. Each geometry has materials and meshes for each frame. - -I like solution 1 because it gives more control over what resources are copied per-frame (neatly solving problem 3). If a mesh contains a buffer that doesn't need copies and another that does, solution 2 would require both buffers have copies. Using the buffer copy feature, users can swap out buffers with any other implementation. - -Solution 1 could solve problem 2 by either setting the current frame when the frame begins, or pass as an argument for buffer functions. I lean toward setting at the start of the frame, because it would simplify the API. Each resource could have a method for that, and it is up to the implementors what to do with the current frame. The only problem here is how to ensure all resources get updated correctly. - -Solution 1 struggles a bit with problem 1. UniformSet already has a system for choosing one DescriptorSet among several cached sets, so that shouldn't be a huge problem. The main problem is that uniforms need some way to indicate whether they use frame copies or not. Ideally, this shouldn't be a setting on the uniform, but rather on the underlying resource. This could be solved by providing a method for resources which returns their preference. - -Here's the rough implementation plan for solution 1: make a low-level interface (maybe RenderResource) which supplies methods for frame interaction (knowing the current frame and indicating whether copies are being used). Uniforms and UniformSets will base their functionality on whether any resource is using frame copies. Other than that, copies are solely up to the specific resource implementations. With this in mind, the current problems are: - - 1. How to ensure all resources are properly updated. Not updating a resource may lead to read/write conflicts with the GPU. - 2. I'm not happy with having an API method whose sole purpose is to communicate a boolean, where most implementations will simply return true or false without any calculation. It feels wrong, maybe because of how wishy-washy this is. - 3. How will resources know how many frames are available. Sure, they could wait N frames to see where the index goes back to zero, but I don't like this limitation. - -Problem 2 could be solved by having only resources that use copies to implement RenderResource (it would have to renamed). This would more rigidly enforce the API, but it doesn't completely solve the original problem of UniformSets knowing which resources use multiple copies. UniformSet could check if the resource implements RenderResource, but I'm not entirely happy with that either (I do think it's better than before, though). - -Problem 1 could possibly be solved using a registry. The obvious problem with that is how the resources know about the registry, and I really don't want to make the registry static. - -------- - -I suppose I'm probably missing the real problem here. Requirements: - - 1. Some resources have multiple copies. - 2. The copy that should be interacted with is determined by the active frame. - 3. When a resource is destroyed, all its copies should also be destroyed. - -We already have a system that can support requirement 1 and partially requirement 2. A buffer can delegate to the correct copy, perhaps through a chain of delegates. - - 1. Buffers delegate to a downstream copy depending on the current frame. Similar to a LinkedList. - PRO: Depends only on the implementation. - PRO: Automatically generates copies on demand. - CON: Too automatic. No way to indicate that no copies should be generated. - CON: Seems a bit too finicky. It'll probably outsmart itself. - 2. Create a buffer implementation that delegates to one of many internal buffers depending on the current frame. - PRO: No need to alter current implementations. Works out of the box. - PRO: Simple to understand. - -#1 is the way to go here. No downsides that I can see (although that does depend on future decisions). -The other half of requirement 2 is informing the buffer which copy should be interacted with. There are three options: - - 1. Inform the buffer at command time. - PRO: Flexible. Another copy besides the one for the active frame can be interacted with if desired. - PRO: Clear. It's easy to tell at a glance exactly what copy is being interacted with. - CON: Makes the API much messier. A lot of methods will have to take an extra argument. - CON: It is difficult to tell whether any given buffer supports concurrency via copies. You're basically dropped in a minefield. - 2. Inform the buffer when the frame changes. - PRO: Doesn't touch the existing public API. - CON: Inflexible. Either impossible or difficult to interact with another copy. - CON: Unclear. You have to know context to know which copy is being interacted with. - CON: Accidental saving. Users may accidentally reference a copy thinking it is the managing buffer. - CON: Difficult to ensure all buffers are properly registered for such notifications. - -Just by looking at the number of cons, #2 is clearly not the way to go. I'm liking #1 much better now, too. We still have to address the two cons #1 has. Starting with the first con, the methods that will require changing are: - - 1. GpuBuffer#map(MemoryStack, int, int int) - + all related helper methods (map and copy) - 2. GpuBuffer#unmap() - 3. GpuBuffer#getId() - * Since GpuBuffer is not a Native<>, getNativeObject is left untouched :) - 4. Image#createView(VkImageViewCreateInfo) - + all related helper methods - -Likewise, in order to avoid changing Native#getNativeObject, Image will gain getId() and will no longer implement Native<>. It's silly to expect an Image to be Native<> anyway. That's an implementation thing. - -The second con for #1 is more serious, in my opinion. #1 is mostly an implementation solution, meaning an unsafely-mutable buffer (with no copies) could easily be passed into a mutator not designed for that sort of mutation. - - 1. Make a "SafelyMutableBuffer" interface extending GpuBuffer. The buffer manager will implement this. - PRO: Strictly enforces that unsafe buffers cannot be thrown into any mutator. - PLUS! Could even replace the need to change GpuBuffer API. - CON: Ends up having duplicate methods that have unclear functionality (what to do with getId() with no frame indicator?). - BUT... What about splitting SafelyMutableBuffer from GpuBuffer entirely? When would you want to treat a regular GpuBuffer like a SafelyMutableBuffer? For reading, of course. Nevermind. - BUT... This is not really a con. The methods GpuBuffer provides should only be used with special handling. SafelyMutableBuffer extends it to provide seperate safe methods. GpuBuffer's methods could act on, say, the first copy or the last interacted copy. - CON: Yeah, this isn't very maintainable... simply too many extra methods. - CON: And this whole thing is getting too complicated. - 2. Add a method to GpuBuffer indicating safety. - CON: Weak, completely on the mutators to enforce. - ---------- - -After more thought, I decided to move towards a "data pipeline" approach. The pipeline(s) transform the input data into the correct format. Pipelines, as I see them, would address several key issues: - - 1. Different versions per frame. Pipelines could descretely present different inputs/outputs depending on the frame. - 2. Jankiness in the different buffer types in order to have staging buffers. Pipelines will handle transfers from the staging buffer to the GPU-side buffer(s), and it will be much more flexible, too, since pipelines can also handle per-frame versions. - -There are a couple issues pipelines raise or don't adequately solve: - - 1. How do uniforms determine what resource version is currently being dealt with? - - The most straightforward approach would be to store the resources themselves in the frame index rather than the resource index. This seems all right to me, except we would need to use WeakReferences to not interfere with resources getting GC'd. - - Done. That turned out pretty well, actually. - 2. Name conflict: Pipeline is already a thing. DataPipeline would just seem like a vulkan pipeline that processes data. - - DataGraph. Since I do envision it functioning similar to a graph. - - Resource. Rather bland, but it does encompass the general idea. - - Data. Ditto. - 3. How should internals be properly synchronized? - - Pipelines requiring that commands be submitted will be given a command buffer on init. Pipelines only need to submit commands to the command buffer. - -Well, that turned out much better than I anticipated. The only problem now is that I accidentally locked the input data behind an anonymous hierarchy of DataPipes. - - 1. Make uniforms able to store the necessary terminal data pipes. - - I don't like this method. The user would have to manually provide the terminal pipes, and they may not actually affect the uniform anyway. - 2. Have a second structure (I'll call it Parameters, for now) mirroring Material which is specifically for storing the data pipes. The data pipes are configured for transfering data from slots in Parameters to corresponding uniforms. - - I like this method better. It's more structured than the other solution, but also allows uniforms to be informed by multiple parameter slots (or even none), if desired. - - I wonder if this could be transformed into something much bigger... - -There is actually one more problem I overlooked with DataPipes. CommandBuffers need to be passed at pipe execution time, because each frame has its own set of CommandBuffers (for the most part). I could simply pass a CommandBuffer as an argument, except I'm not sure if all the pipes in the same pipeline are gauranteed to be happy submitting under to a single CommandBuffer. It'd be perfectly fine for them to do so (and they really shouldn't care), the question is more about performance. - - 1. Pass one CommandBuffer through the pipeline. All pipes submit commands to only that CommandBuffer. - - Could possibly be missing out on performance benefits, but I really can't think of a specific case off the top of my head. - 2. Pass a CommandBuffer manager which will return the optimal CommandBuffer for the situation. - - Again, I'm fuzzy on exactly what situations would warrant multiple CommandBuffers, so I'm not willing to implement this at the moment. - - I could do a simple version of this just out of principle. Perhaps in the future we will know enough to implement such a system. - -For now, I'll go with #1. - ------ - -Well, I've run into a new problem. I'm not sure what it is exactly, but the DataPipe system isn't working as smoothly as I'd hoped. It doesn't handle different forms of buffers very well (static, dynamic, adaptive). For example, in order for a static buffer to work, the staging buffer should be deleted after the transfer is complete. DataPipes have no clean way to handle that (and really, niether does any other available system). At the same time, DataPipes need a "needs update" check so that certain operations can be skipped if the incoming buffer hasn't changed. - -My original idea was to have a Buffer implementation that deferred to one of N internal buffers depending on the frame could still possibly work. - ------ - -Yesterday, the occured to me that there are two main issues I'm trying to combat: - - 1. Updating items (buffers especially) at the correct time. - 2. Ensuring the proper items are used at any given time (i.e. per-frame versions). - -Now, a new solution to the first problem would be an update registry system. On creation, you register the item with a particular update batch, which will then update the item at the correct time. Furthermore, this will centralize CommandBuffer usage and make it easier to fine-tune synchronization (which would have otherwise been a fairly major problem). + * The transform refresh only works when transform setter methods are used. I propose that the world transform should be recalculated on every frame. It will make the system a lot simpler, I think. + * An explicit world light list is unnecessary. All that needs to be done to capture all lights affecting a spatial is to iterate up the hierarchy and collect lights from the local light lists. Iterating up the hierarchy is extremely cheap and I want to take more advantage of it. + * There should be at most one method in Spatial for iterating over an entire tree. It should use depth-first traversal. Breadth-first traversal isn't used within the engine and is obviously more expensive. collideWith() is also counted as a traversal method. If possible, I'd like to take more advantage of SceneGraphIterator, since I think it is the most powerful traversal available. \ No newline at end of file diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index b554f9b6c2..f23bc36c56 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -178,7 +178,7 @@ public void simpleInitApp() { descriptorLayout = new DescriptorSetLayout(device, new SetLayoutBinding(Descriptor.UniformBuffer, 0, 1, ShaderStage.Vertex), new SetLayoutBinding(Descriptor.CombinedImageSampler, 1, 1, ShaderStage.Fragment)); - descriptorPool = new DescriptorPool(device, 3, + descriptorPool = new DescriptorPool(device, 10, new PoolSize(Descriptor.UniformBuffer, 3), new PoolSize(Descriptor.StorageBuffer, 4), new PoolSize(Descriptor.CombinedImageSampler, 2)); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Geometry.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Geometry.java new file mode 100644 index 0000000000..ed3e56e948 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Geometry.java @@ -0,0 +1,5 @@ +package com.jme3.vulkan.scene; + +public class Geometry { + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Node.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Node.java new file mode 100644 index 0000000000..91f8a369f2 --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Node.java @@ -0,0 +1,32 @@ +package com.jme3.vulkan.scene; + +import com.jme3.util.SafeArrayList; + +public class Node extends Spatial { + + private SafeArrayList children = new SafeArrayList<>(Spatial.class); + + public void attachChild(Spatial child) { + children.add(child); + child.setParent(this); + } + + public boolean detachChild(Spatial child) { + if (children.remove(child)) { + child.setParent(null); + return true; + } + return false; + } + + @Override + protected void findNextIteration(GraphIterator iterator) { + int i = iterator.advanceIndex(); + if (i >= children.size()) { + iterator.moveUp(); + } else { + iterator.moveDown(children.get(i)); + } + } + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Spatial.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Spatial.java new file mode 100644 index 0000000000..174f4902ae --- /dev/null +++ b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Spatial.java @@ -0,0 +1,104 @@ +package com.jme3.vulkan.scene; + +import java.util.*; + +public abstract class Spatial implements Iterable { + + private Node parent; + + public void removeFromParent() { + + } + + public Node getParent() { + return parent; + } + + protected void setParent(Node parent) { + this.parent = parent; + } + + protected abstract void findNextIteration(GraphIterator iterator); + + @Override + public Iterator iterator() { + return new GraphIterator(this); + } + + public static class GraphIterator implements Iterator { + + private final Stack childIndices = new Stack<>(); + private Spatial current; + private int currentIndex = 0; + private int iteration = -1; + + public GraphIterator(Spatial start) { + current = Objects.requireNonNull(start); + } + + @Override + public boolean hasNext() { + return current != null; + } + + @Override + public Spatial next() { + if (++iteration > 0) { + current.findNextIteration(this); + } + return current; + } + + @Override + public void remove() { + if (current.getParent() != null) { + current.removeFromParent(); + moveUp(); + currentIndex--; + } + } + + protected void moveUp() { + if (!childIndices.isEmpty()) { + current = current.getParent(); + currentIndex = childIndices.pop(); + if (current != null) { + current.findNextIteration(this); + } + } else { + current = null; + } + } + + protected void moveDown(Spatial node) { + if (node.getParent() != current) { + throw new IllegalArgumentException("Next node must be a child of the current node."); + } + current = node; + childIndices.push(currentIndex); + currentIndex = 0; + } + + protected int advanceIndex() { + return currentIndex++; + } + + protected int getCurrentIndex() { + return currentIndex; + } + + public void skipChildren() { + moveUp(); + } + + public int getDepth() { + return childIndices.size(); + } + + public int getIteration() { + return iteration; + } + + } + +} From cb5c47a32a15435a23ef9dfcb27f675664d795a6 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Fri, 12 Sep 2025 11:34:33 -0400 Subject: [PATCH 56/80] move vulkan to core --- .../java/com/jme3/vulkan/AbstractNative.java | 0 .../src/main/java/com/jme3/vulkan/Format.java | 0 .../java/com/jme3/vulkan/SharingMode.java | 0 .../main/java/com/jme3/vulkan/Swizzle.java | 0 .../java/com/jme3/vulkan/VulkanInstance.java | 0 .../java/com/jme3/vulkan/VulkanLogger.java | 0 .../jme3/vulkan/app/VulkanApplication.java | 0 .../vulkan/buffers/BasicVulkanBuffer.java | 2 - .../com/jme3/vulkan/buffers/BufferRegion.java | 0 .../com/jme3/vulkan/buffers/BufferUsage.java | 0 .../com/jme3/vulkan/buffers/GpuBuffer.java | 5 - .../jme3/vulkan/buffers/PersistentBuffer.java | 0 .../jme3/vulkan/buffers/StageableBuffer.java | 0 .../com/jme3/vulkan/buffers/StaticBuffer.java | 0 .../com/jme3/vulkan/buffers/VulkanBuffer.java | 0 .../jme3/vulkan/commands/CommandBuffer.java | 0 .../com/jme3/vulkan/commands/CommandPool.java | 0 .../java/com/jme3/vulkan/commands/Queue.java | 0 .../jme3/vulkan/commands/QueueFamilies.java | 0 .../commands/TransientCommandBuffer.java | 0 .../descriptors/BaseDescriptorWriter.java | 0 .../vulkan/descriptors/BufferDescriptor.java | 0 .../vulkan/descriptors/BufferSetWriter.java | 0 .../jme3/vulkan/descriptors/Descriptor.java | 0 .../vulkan/descriptors/DescriptorPool.java | 0 .../vulkan/descriptors/DescriptorSet.java | 0 .../descriptors/DescriptorSetLayout.java | 2 - .../descriptors/DescriptorSetWriter.java | 0 .../vulkan/descriptors/ImageDescriptor.java | 0 .../vulkan/descriptors/ImageSetWriter.java | 0 .../com/jme3/vulkan/descriptors/PoolSize.java | 0 .../vulkan/descriptors/SetLayoutBinding.java | 0 .../devices/AbstractPhysicalDevice.java | 0 .../jme3/vulkan/devices/DeviceExtension.java | 0 .../jme3/vulkan/devices/DeviceFeature.java | 0 .../com/jme3/vulkan/devices/DeviceFilter.java | 0 .../jme3/vulkan/devices/DeviceProperty.java | 0 .../vulkan/devices/GeneralPhysicalDevice.java | 0 .../jme3/vulkan/devices/GraphicalDevice.java | 0 .../jme3/vulkan/devices/LogicalDevice.java | 0 .../jme3/vulkan/devices/PhysicalDevice.java | 0 .../jme3/vulkan/devices/PresentDevice.java | 0 .../jme3/vulkan/frames/PerFrameCommand.java | 0 .../jme3/vulkan/frames/PerFrameResource.java | 0 .../com/jme3/vulkan/frames/SingleCommand.java | 0 .../jme3/vulkan/frames/SingleResource.java | 0 .../com/jme3/vulkan/frames/UpdateFrame.java | 0 .../vulkan/frames/UpdateFrameManager.java | 0 .../jme3/vulkan/frames/VersionedResource.java | 0 .../com/jme3/vulkan/images/AddressMode.java | 0 .../com/jme3/vulkan/images/BorderColor.java | 0 .../java/com/jme3/vulkan/images/Filter.java | 0 .../java/com/jme3/vulkan/images/GpuImage.java | 0 .../java/com/jme3/vulkan/images/Image.java | 0 .../com/jme3/vulkan/images/ImageUsage.java | 0 .../com/jme3/vulkan/images/ImageView.java | 0 .../com/jme3/vulkan/images/MipmapMode.java | 0 .../java/com/jme3/vulkan/images/Sampler.java | 0 .../java/com/jme3/vulkan/images/Texture.java | 0 .../com/jme3/vulkan/images/VulkanImage.java | 0 .../jme3/vulkan/images/VulkanImageLoader.java | 0 .../com/jme3/vulkan/material/Material.java | 0 .../jme3/vulkan/material/TestMaterial.java | 0 .../com/jme3/vulkan/material/UniformSet.java | 0 .../material/uniforms/AbstractUniform.java | 0 .../material/uniforms/BufferUniform.java | 0 .../material/uniforms/TextureUniform.java | 0 .../vulkan/material/uniforms/Uniform.java | 0 .../com/jme3/vulkan/memory/MemoryProp.java | 0 .../com/jme3/vulkan/memory/MemoryRegion.java | 0 .../com/jme3/vulkan/memory/MemorySize.java | 0 .../com/jme3/vulkan/mesh/AdaptiveMesh.java | 36 +++- .../jme3/vulkan/mesh/AttributeModifier.java | 202 ++++++++---------- .../jme3/vulkan/mesh/BuiltInAttribute.java | 0 .../java/com/jme3/vulkan/mesh/IndexType.java | 0 .../java/com/jme3/vulkan/mesh/InputRate.java | 0 .../main/java/com/jme3/vulkan/mesh/Mesh.java | 5 +- .../com/jme3/vulkan/mesh/MeshDescription.java | 0 .../com/jme3/vulkan/mesh/MyCustomMesh.java | 0 .../vulkan/mesh/NullAttributeModifier.java | 0 .../com/jme3/vulkan/mesh/VertexAttribute.java | 0 .../com/jme3/vulkan/mesh/VertexBinding.java | 0 .../com/jme3/vulkan/mesh/VertexBuffer.java | 2 - .../com/jme3/vulkan/mesh/VertexReader.java | 67 ++++++ .../com/jme3/vulkan/mesh/VertexWriter.java | 76 +++++++ .../java/com/jme3/vulkan/pass/Attachment.java | 0 .../jme3/vulkan/pass/AttachmentReference.java | 0 .../java/com/jme3/vulkan/pass/RenderPass.java | 0 .../java/com/jme3/vulkan/pass/Subpass.java | 1 - .../jme3/vulkan/pass/SubpassDependency.java | 0 .../com/jme3/vulkan/pipelines/Access.java | 0 .../com/jme3/vulkan/pipelines/CompareOp.java | 0 .../vulkan/pipelines/ComputePipeline.java | 0 .../com/jme3/vulkan/pipelines/CullMode.java | 0 .../jme3/vulkan/pipelines/FaceWinding.java | 0 .../jme3/vulkan/pipelines/FrameBuffer.java | 0 .../vulkan/pipelines/GraphicsPipeline.java | 1 - .../com/jme3/vulkan/pipelines/LogicOp.java | 0 .../com/jme3/vulkan/pipelines/Pipeline.java | 0 .../vulkan/pipelines/PipelineBindPoint.java | 0 .../jme3/vulkan/pipelines/PipelineLayout.java | 0 .../jme3/vulkan/pipelines/PipelineStage.java | 0 .../jme3/vulkan/pipelines/PolygonMode.java | 0 .../com/jme3/vulkan/pipelines/Topology.java | 0 .../states/ColorBlendAttachment.java | 0 .../pipelines/states/ColorBlendState.java | 0 .../pipelines/states/DepthStencilState.java | 0 .../vulkan/pipelines/states/DynamicState.java | 0 .../pipelines/states/InputAssemblyState.java | 0 .../pipelines/states/MultisampleState.java | 0 .../pipelines/states/PipelineState.java | 0 .../pipelines/states/RasterizationState.java | 0 .../pipelines/states/VertexInputState.java | 0 .../pipelines/states/ViewportState.java | 1 - .../java/com/jme3/vulkan/scene/NotNode.java | 8 +- .../com/jme3/vulkan/scene/NotSpatial.java | 20 +- .../com/jme3/vulkan/shader/ShaderModule.java | 2 - .../com/jme3/vulkan/shader/ShaderStage.java | 0 .../jme3/vulkan/shader/UniformTestStruct.java | 0 .../java/com/jme3/vulkan/surface/Surface.java | 0 .../com/jme3/vulkan/surface/Swapchain.java | 0 .../jme3/vulkan/surface/SwapchainUpdater.java | 0 .../main/java/com/jme3/vulkan/sync/Fence.java | 0 .../java/com/jme3/vulkan/sync/Semaphore.java | 2 - .../java/com/jme3/vulkan/sync/SyncGroup.java | 0 .../java/com/jme3/vulkan/sync/TaskQueue.java | 0 .../jme3/vulkan/update/BasicCommandBatch.java | 0 .../java/com/jme3/vulkan/update/Command.java | 0 .../com/jme3/vulkan/update/CommandBatch.java | 0 .../com/jme3/vulkan/update/CommandRunner.java | 0 .../java/com/jme3/vulkan/util/Extent2.java | 0 .../main/java/com/jme3/vulkan/util/Flag.java | 0 .../java/com/jme3/vulkan/util/IntEnum.java | 0 .../jme3/vulkan/util/RenderStateToVulkan.java | 0 .../jme3test/vulkan/VulkanHelperTest.java | 8 - .../java/com/jme3/vulkan/scene/Geometry.java | 5 - 136 files changed, 287 insertions(+), 158 deletions(-) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/AbstractNative.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/Format.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/SharingMode.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/Swizzle.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/VulkanInstance.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/VulkanLogger.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/app/VulkanApplication.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java (97%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/buffers/BufferRegion.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/buffers/BufferUsage.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java (97%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/commands/CommandPool.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/commands/Queue.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/commands/QueueFamilies.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/commands/TransientCommandBuffer.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java (95%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/devices/DeviceExtension.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/devices/DeviceFeature.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/devices/DeviceProperty.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/devices/GraphicalDevice.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/devices/PresentDevice.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/frames/PerFrameCommand.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/frames/SingleCommand.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/frames/SingleResource.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/frames/UpdateFrame.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/frames/VersionedResource.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/AddressMode.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/BorderColor.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/Filter.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/GpuImage.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/Image.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/ImageUsage.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/ImageView.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/MipmapMode.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/Sampler.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/Texture.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/VulkanImage.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/material/Material.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/material/TestMaterial.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/material/UniformSet.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/memory/MemoryProp.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/memory/MemorySize.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java (80%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java (65%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/BuiltInAttribute.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/IndexType.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/InputRate.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/Mesh.java (75%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java (95%) create mode 100644 jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexReader.java create mode 100644 jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pass/Attachment.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pass/RenderPass.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pass/Subpass.java (99%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/Access.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/CompareOp.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/CullMode.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/FaceWinding.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java (99%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/LogicOp.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/PipelineBindPoint.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/PipelineLayout.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/PipelineStage.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/PolygonMode.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/Topology.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendAttachment.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/states/MultisampleState.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/states/PipelineState.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java (98%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Node.java => jme3-core/src/main/java/com/jme3/vulkan/scene/NotNode.java (70%) rename jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Spatial.java => jme3-core/src/main/java/com/jme3/vulkan/scene/NotSpatial.java (81%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/shader/ShaderModule.java (97%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/shader/ShaderStage.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/surface/Surface.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/surface/Swapchain.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/surface/SwapchainUpdater.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/sync/Fence.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/sync/Semaphore.java (96%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/sync/SyncGroup.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/sync/TaskQueue.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/update/BasicCommandBatch.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/update/Command.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/update/CommandBatch.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/update/CommandRunner.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/util/Extent2.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/util/Flag.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/util/IntEnum.java (100%) rename {jme3-lwjgl3 => jme3-core}/src/main/java/com/jme3/vulkan/util/RenderStateToVulkan.java (100%) delete mode 100644 jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Geometry.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/AbstractNative.java b/jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/AbstractNative.java rename to jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Format.java b/jme3-core/src/main/java/com/jme3/vulkan/Format.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/Format.java rename to jme3-core/src/main/java/com/jme3/vulkan/Format.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/SharingMode.java b/jme3-core/src/main/java/com/jme3/vulkan/SharingMode.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/SharingMode.java rename to jme3-core/src/main/java/com/jme3/vulkan/SharingMode.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swizzle.java b/jme3-core/src/main/java/com/jme3/vulkan/Swizzle.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/Swizzle.java rename to jme3-core/src/main/java/com/jme3/vulkan/Swizzle.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java b/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanInstance.java rename to jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanLogger.java b/jme3-core/src/main/java/com/jme3/vulkan/VulkanLogger.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/VulkanLogger.java rename to jme3-core/src/main/java/com/jme3/vulkan/VulkanLogger.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/app/VulkanApplication.java b/jme3-core/src/main/java/com/jme3/vulkan/app/VulkanApplication.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/app/VulkanApplication.java rename to jme3-core/src/main/java/com/jme3/vulkan/app/VulkanApplication.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java similarity index 97% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java rename to jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java index f7a24018b6..01878c12e0 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java @@ -3,7 +3,6 @@ import com.jme3.renderer.vulkan.VulkanUtils; import com.jme3.util.natives.Native; import com.jme3.vulkan.AbstractNative; -import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemoryRegion; @@ -11,7 +10,6 @@ import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VkBufferCopy; import org.lwjgl.vulkan.VkBufferCreateInfo; import org.lwjgl.vulkan.VkMemoryRequirements; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferRegion.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BufferRegion.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferRegion.java rename to jme3-core/src/main/java/com/jme3/vulkan/buffers/BufferRegion.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferUsage.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BufferUsage.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/BufferUsage.java rename to jme3-core/src/main/java/com/jme3/vulkan/buffers/BufferUsage.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java similarity index 97% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java rename to jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index bcdab77a4b..5e7e401d33 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -1,19 +1,14 @@ package com.jme3.vulkan.buffers; -import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.memory.MemorySize; import org.lwjgl.PointerBuffer; -import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.Struct; import org.lwjgl.system.StructBuffer; -import org.lwjgl.vulkan.VkBufferCopy; import java.nio.*; import java.util.function.Function; -import static org.lwjgl.vulkan.VK10.*; - public interface GpuBuffer { /** diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java rename to jme3-core/src/main/java/com/jme3/vulkan/buffers/PersistentBuffer.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java rename to jme3-core/src/main/java/com/jme3/vulkan/buffers/StageableBuffer.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java rename to jme3-core/src/main/java/com/jme3/vulkan/buffers/StaticBuffer.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java rename to jme3-core/src/main/java/com/jme3/vulkan/buffers/VulkanBuffer.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java rename to jme3-core/src/main/java/com/jme3/vulkan/commands/CommandBuffer.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java b/jme3-core/src/main/java/com/jme3/vulkan/commands/CommandPool.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/CommandPool.java rename to jme3-core/src/main/java/com/jme3/vulkan/commands/CommandPool.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/Queue.java b/jme3-core/src/main/java/com/jme3/vulkan/commands/Queue.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/Queue.java rename to jme3-core/src/main/java/com/jme3/vulkan/commands/Queue.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/QueueFamilies.java b/jme3-core/src/main/java/com/jme3/vulkan/commands/QueueFamilies.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/QueueFamilies.java rename to jme3-core/src/main/java/com/jme3/vulkan/commands/QueueFamilies.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/TransientCommandBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/commands/TransientCommandBuffer.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/commands/TransientCommandBuffer.java rename to jme3-core/src/main/java/com/jme3/vulkan/commands/TransientCommandBuffer.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/BaseDescriptorWriter.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/BufferDescriptor.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/BufferSetWriter.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/Descriptor.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorPool.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java similarity index 95% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java index 81ad411d16..321bb5f298 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetLayout.java @@ -3,8 +3,6 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.material.UniformSet; -import com.jme3.vulkan.material.uniforms.Uniform; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkDescriptorSetLayoutBinding; import org.lwjgl.vulkan.VkDescriptorSetLayoutCreateInfo; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSetWriter.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/ImageSetWriter.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/PoolSize.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java rename to jme3-core/src/main/java/com/jme3/vulkan/descriptors/SetLayoutBinding.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java rename to jme3-core/src/main/java/com/jme3/vulkan/devices/AbstractPhysicalDevice.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceExtension.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/DeviceExtension.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceExtension.java rename to jme3-core/src/main/java/com/jme3/vulkan/devices/DeviceExtension.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFeature.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/DeviceFeature.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFeature.java rename to jme3-core/src/main/java/com/jme3/vulkan/devices/DeviceFeature.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java rename to jme3-core/src/main/java/com/jme3/vulkan/devices/DeviceFilter.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceProperty.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/DeviceProperty.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/DeviceProperty.java rename to jme3-core/src/main/java/com/jme3/vulkan/devices/DeviceProperty.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java rename to jme3-core/src/main/java/com/jme3/vulkan/devices/GeneralPhysicalDevice.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GraphicalDevice.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/GraphicalDevice.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/GraphicalDevice.java rename to jme3-core/src/main/java/com/jme3/vulkan/devices/GraphicalDevice.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java rename to jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java rename to jme3-core/src/main/java/com/jme3/vulkan/devices/PhysicalDevice.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PresentDevice.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/PresentDevice.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/devices/PresentDevice.java rename to jme3-core/src/main/java/com/jme3/vulkan/devices/PresentDevice.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameCommand.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameCommand.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameCommand.java rename to jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameCommand.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java rename to jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleCommand.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleCommand.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleCommand.java rename to jme3-core/src/main/java/com/jme3/vulkan/frames/SingleCommand.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/SingleResource.java rename to jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrame.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/UpdateFrame.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrame.java rename to jme3-core/src/main/java/com/jme3/vulkan/frames/UpdateFrame.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java rename to jme3-core/src/main/java/com/jme3/vulkan/frames/UpdateFrameManager.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/frames/VersionedResource.java rename to jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/AddressMode.java b/jme3-core/src/main/java/com/jme3/vulkan/images/AddressMode.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/AddressMode.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/AddressMode.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/BorderColor.java b/jme3-core/src/main/java/com/jme3/vulkan/images/BorderColor.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/BorderColor.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/BorderColor.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Filter.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Filter.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Filter.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/Filter.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/GpuImage.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Image.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Image.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/Image.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageUsage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/ImageUsage.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageUsage.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/ImageUsage.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java b/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/ImageView.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/MipmapMode.java b/jme3-core/src/main/java/com/jme3/vulkan/images/MipmapMode.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/MipmapMode.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/MipmapMode.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Sampler.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Texture.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/Texture.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/Texture.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImage.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImage.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImage.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-core/src/main/java/com/jme3/vulkan/material/Material.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/Material.java rename to jme3-core/src/main/java/com/jme3/vulkan/material/Material.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java b/jme3-core/src/main/java/com/jme3/vulkan/material/TestMaterial.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/TestMaterial.java rename to jme3-core/src/main/java/com/jme3/vulkan/material/TestMaterial.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-core/src/main/java/com/jme3/vulkan/material/UniformSet.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/UniformSet.java rename to jme3-core/src/main/java/com/jme3/vulkan/material/UniformSet.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java rename to jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java rename to jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/BufferUniform.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java rename to jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java rename to jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryProp.java b/jme3-core/src/main/java/com/jme3/vulkan/memory/MemoryProp.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryProp.java rename to jme3-core/src/main/java/com/jme3/vulkan/memory/MemoryProp.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java b/jme3-core/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java rename to jme3-core/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java b/jme3-core/src/main/java/com/jme3/vulkan/memory/MemorySize.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/memory/MemorySize.java rename to jme3-core/src/main/java/com/jme3/vulkan/memory/MemorySize.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java similarity index 80% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java index dbcc62ba81..1821e4009f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java @@ -1,5 +1,7 @@ package com.jme3.vulkan.mesh; +import com.jme3.bounding.BoundingVolume; +import com.jme3.math.Vector3f; import com.jme3.vulkan.buffers.*; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.frames.VersionedResource; @@ -20,8 +22,9 @@ protected enum VertexMode { } protected final MeshDescription description; - protected VersionedResource indexBuffer; private final List vertexBuffers = new ArrayList<>(); + protected VersionedResource indexBuffer; + private BoundingVolume bound; private int vertices; public AdaptiveMesh(MeshDescription description) { @@ -55,10 +58,35 @@ public void draw(CommandBuffer cmd) { } } - public int getNumVertices() { + @Override + public int getVertexCount() { return vertices; } + @Override + public int getTriangleCount() { + return indexBuffer != null ? indexBuffer.get().size().getElements() / 3 : 0; + } + + protected void updateBound(AttributeModifier attribute) { + Vector3f pos = new Vector3f(); + Vector3f min = new Vector3f(); + Vector3f max = new Vector3f(); + for (int i = 0; i < vertices; i++) { + pos = attribute.getVector3(i, 0, pos); + if (i == 0) { + min.set(max.set(pos)); + } else { + min.x = Math.min(min.x, pos.x); + min.y = Math.min(min.y, pos.y); + min.z = Math.min(min.z, pos.z); + max.x = Math.max(max.x, pos.x); + max.y = Math.max(max.y, pos.y); + max.z = Math.max(max.z, pos.z); + } + } + } + @SuppressWarnings("resource") protected AttributeModifier modifyAttribute(String attribute) { VertexAttribute attr = description.getAttribute(attribute); @@ -107,7 +135,7 @@ public void close() { } } for (int i = 0; i < modes.length; i++) { - vertexBuffers.add(new VertexBuffer(createVertexBuffer(description.getBinding(i), modes[i]))); + vertexBuffers.add(new VertexBuffer(createBufferResource(description.getBinding(i), modes[i]))); } } @@ -122,7 +150,7 @@ public void setMode(BuiltInAttribute name, VertexMode mode) { setMode(name.getName(), mode); } - private VersionedResource createVertexBuffer(VertexBinding binding, VertexMode mode) { + private VersionedResource createBufferResource(VertexBinding binding, VertexMode mode) { MemorySize size = MemorySize.bytes(binding.getStride() * vertices); switch (mode) { case Stream: return createStreamingBuffer(size); diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java similarity index 65% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java index 2137d45685..3e02f39719 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java @@ -1,14 +1,10 @@ package com.jme3.vulkan.mesh; -import com.jme3.math.ColorRGBA; -import com.jme3.math.Vector2f; -import com.jme3.math.Vector3f; -import com.jme3.math.Vector4f; import com.jme3.vulkan.Format; import java.nio.*; -public class AttributeModifier implements AutoCloseable { +public class AttributeModifier implements AutoCloseable, VertexWriter, VertexReader { private final VertexBuffer vertex; private final VertexAttribute attribute; @@ -29,58 +25,78 @@ public void close() { vertex.unmap(); } - public int transformPosition(int vertex) { + public int vertexToPosition(int vertex) { return attribute.getBinding().getStride() * vertex + attribute.getOffset(); } + public int positionToVertex(int position) { + return (position - attribute.getOffset()) / attribute.getBinding().getStride(); + } + + @Override + public int capacity() { + return buffer.capacity() / attribute.getBinding().getStride(); + } + + @Override + public int limit() { + return positionToVertex(buffer.limit()); + } + + @Override + public AttributeModifier limit(int vertex) { + buffer.limit(vertexToPosition(vertex)); + return this; + } + + @Override public AttributeModifier putByte(int vertex, int component, byte value) { - attribute.getFormat().getComponent(component).putByte(buffer, transformPosition(vertex), value); + attribute.getFormat().getComponent(component).putByte(buffer, vertexToPosition(vertex), value); return this; } + @Override public AttributeModifier putShort(int vertex, int component, short value) { - attribute.getFormat().getComponent(component).putShort(buffer, transformPosition(vertex), value); + attribute.getFormat().getComponent(component).putShort(buffer, vertexToPosition(vertex), value); return this; } + @Override public AttributeModifier putInt(int vertex, int component, int value) { - attribute.getFormat().getComponent(component).putInt(buffer, transformPosition(vertex), value); + attribute.getFormat().getComponent(component).putInt(buffer, vertexToPosition(vertex), value); return this; } + @Override public AttributeModifier putFloat(int vertex, int component, float value) { - attribute.getFormat().getComponent(component).putFloat(buffer, transformPosition(vertex), value); + attribute.getFormat().getComponent(component).putFloat(buffer, vertexToPosition(vertex), value); return this; } + @Override public AttributeModifier putDouble(int vertex, int component, double value) { - attribute.getFormat().getComponent(component).putDouble(buffer, transformPosition(vertex), value); + attribute.getFormat().getComponent(component).putDouble(buffer, vertexToPosition(vertex), value); return this; } + @Override public AttributeModifier putLong(int vertex, int component, long value) { - attribute.getFormat().getComponent(component).putLong(buffer, transformPosition(vertex), value); + attribute.getFormat().getComponent(component).putLong(buffer, vertexToPosition(vertex), value); return this; } - public AttributeModifier putVector2(int vertex, int baseComponent, Vector2f value) { - return putVector2(vertex, baseComponent, value.x, value.y); - } - + @Override public AttributeModifier putVector2(int vertex, int baseComponent, float x, float y) { - vertex = transformPosition(vertex); + vertex = vertexToPosition(vertex); Format f = attribute.getFormat(); f.getComponent(baseComponent++).putFloat(buffer, vertex, x); f.getComponent(baseComponent ).putFloat(buffer, vertex, y); return this; } - public AttributeModifier putVector3(int vertex, int baseComponent, Vector3f value) { - return putVector3(vertex, baseComponent, value.x, value.y, value.z); - } - + @Override public AttributeModifier putVector3(int vertex, int baseComponent, float x, float y, float z) { - vertex = transformPosition(vertex); + vertex = vertexToPosition(vertex); Format f = attribute.getFormat(); f.getComponent(baseComponent++).putFloat(buffer, vertex, x); f.getComponent(baseComponent++).putFloat(buffer, vertex, y); @@ -88,12 +104,9 @@ public AttributeModifier putVector3(int vertex, int baseComponent, float x, floa return this; } - public AttributeModifier putVector4(int vertex, int baseComponent, Vector4f value) { - return putVector4(vertex, baseComponent, value.x, value.y, value.z, value.w); - } - + @Override public AttributeModifier putVector4(int vertex, int baseComponent, float x, float y, float z, float w) { - vertex = transformPosition(vertex); + vertex = vertexToPosition(vertex); Format f = attribute.getFormat(); f.getComponent(baseComponent++).putFloat(buffer, vertex, x); f.getComponent(baseComponent++).putFloat(buffer, vertex, y); @@ -102,241 +115,214 @@ public AttributeModifier putVector4(int vertex, int baseComponent, float x, floa return this; } - public AttributeModifier putColor(int vertex, int baseComponent, ColorRGBA value) { - return putVector4(vertex, baseComponent, value.r, value.g, value.b, value.a); - } - - public AttributeModifier putBytes(int baseVertex, int baseComponent, byte[] values) { + @Override + public AttributeModifier putBytes(int baseVertex, int baseComponent, byte... values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); for (byte v : values) { f.getComponent(baseComponent).putByte(buffer, vertPos, v); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } return this; } + @Override public AttributeModifier putBytes(int baseVertex, int baseComponent, ByteBuffer values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); int bufPos = values.position(); while (values.hasRemaining()) { f.getComponent(baseComponent).putByte(buffer, vertPos, values.get()); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } values.position(bufPos); return this; } - public AttributeModifier putShorts(int baseVertex, int baseComponent, short[] values) { + @Override + public AttributeModifier putShorts(int baseVertex, int baseComponent, short... values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); for (short v : values) { f.getComponent(baseComponent).putShort(buffer, vertPos, v); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } return this; } + @Override public AttributeModifier putShorts(int baseVertex, int baseComponent, ShortBuffer values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); int bufPos = values.position(); while (values.hasRemaining()) { f.getComponent(baseComponent).putShort(buffer, vertPos, values.get()); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } values.position(bufPos); return this; } - public AttributeModifier putInts(int baseVertex, int baseComponent, int[] values) { + @Override + public AttributeModifier putInts(int baseVertex, int baseComponent, int... values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); for (int v : values) { f.getComponent(baseComponent).putInt(buffer, vertPos, v); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } return this; } + @Override public AttributeModifier putInts(int baseVertex, int baseComponent, IntBuffer values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); int bufPos = values.position(); while (values.hasRemaining()) { f.getComponent(baseComponent).putInt(buffer, vertPos, values.get()); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } values.position(bufPos); return this; } - public AttributeModifier putFloats(int baseVertex, int baseComponent, float[] values) { + @Override + public AttributeModifier putFloats(int baseVertex, int baseComponent, float... values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); for (float v : values) { f.getComponent(baseComponent).putFloat(buffer, vertPos, v); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } return this; } + @Override public AttributeModifier putFloats(int baseVertex, int baseComponent, FloatBuffer values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); int bufPos = values.position(); while (values.hasRemaining()) { f.getComponent(baseComponent).putFloat(buffer, vertPos, values.get()); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } values.position(bufPos); return this; } - public AttributeModifier putDoubles(int baseVertex, int baseComponent, double[] values) { + @Override + public AttributeModifier putDoubles(int baseVertex, int baseComponent, double... values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); for (double v : values) { f.getComponent(baseComponent).putDouble(buffer, vertPos, v); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } return this; } + @Override public AttributeModifier putDoubles(int baseVertex, int baseComponent, DoubleBuffer values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); int bufPos = values.position(); while (values.hasRemaining()) { f.getComponent(baseComponent).putDouble(buffer, vertPos, values.get()); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } values.position(bufPos); return this; } - public AttributeModifier putLongs(int baseVertex, int baseComponent, long[] values) { + @Override + public AttributeModifier putLongs(int baseVertex, int baseComponent, long... values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); for (long v : values) { f.getComponent(baseComponent).putLong(buffer, vertPos, v); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } return this; } + @Override public AttributeModifier putLongs(int baseVertex, int baseComponent, LongBuffer values) { Format f = attribute.getFormat(); - int vertPos = transformPosition(baseVertex); + int vertPos = vertexToPosition(baseVertex); int bufPos = values.position(); while (values.hasRemaining()) { f.getComponent(baseComponent).putLong(buffer, vertPos, values.get()); if (++baseComponent >= f.getNumComponents()) { baseComponent = 0; - vertPos = transformPosition(++baseVertex); + vertPos = vertexToPosition(++baseVertex); } } values.position(bufPos); return this; } + @Override public byte getByte(int vertex, int component) { - return attribute.getFormat().getComponent(component).getByte(buffer, transformPosition(vertex)); + return attribute.getFormat().getComponent(component).getByte(buffer, vertexToPosition(vertex)); } + @Override public short getShort(int vertex, int component) { - return attribute.getFormat().getComponent(component).getShort(buffer, transformPosition(vertex)); + return attribute.getFormat().getComponent(component).getShort(buffer, vertexToPosition(vertex)); } + @Override public int getInt(int vertex, int component) { - return attribute.getFormat().getComponent(component).getInt(buffer, transformPosition(vertex)); + return attribute.getFormat().getComponent(component).getInt(buffer, vertexToPosition(vertex)); } + @Override public float getFloat(int vertex, int component) { - return attribute.getFormat().getComponent(component).getFloat(buffer, transformPosition(vertex)); + return attribute.getFormat().getComponent(component).getFloat(buffer, vertexToPosition(vertex)); } + @Override public double getDouble(int vertex, int component) { - return attribute.getFormat().getComponent(component).getDouble(buffer, transformPosition(vertex)); + return attribute.getFormat().getComponent(component).getDouble(buffer, vertexToPosition(vertex)); } + @Override public long getLong(int vertex, int component) { - return attribute.getFormat().getComponent(component).getLong(buffer, transformPosition(vertex)); - } - - public Vector2f getVector2(int vertex, int baseComponent, Vector2f store) { - if (store == null) { - store = new Vector2f(); - } - return store.set( - getFloat(vertex, baseComponent++), - getFloat(vertex, baseComponent )); - } - - public Vector3f getVector3(int vertex, int baseComponent, Vector3f store) { - if (store == null) { - store = new Vector3f(); - } - return store.set( - getFloat(vertex, baseComponent++), - getFloat(vertex, baseComponent++), - getFloat(vertex, baseComponent )); - } - - public Vector4f getVector4(int vertex, int baseComponent, Vector4f store) { - if (store == null) { - store = new Vector4f(); - } - return store.set( - getFloat(vertex, baseComponent++), - getFloat(vertex, baseComponent++), - getFloat(vertex, baseComponent++), - getFloat(vertex, baseComponent )); - } - - public ColorRGBA getColor(int vertex, int baseComponent, ColorRGBA store) { - if (store == null) { - store = new ColorRGBA(); - } - return store.set( - getFloat(vertex, baseComponent++), - getFloat(vertex, baseComponent++), - getFloat(vertex, baseComponent++), - getFloat(vertex, baseComponent )); + return attribute.getFormat().getComponent(component).getLong(buffer, vertexToPosition(vertex)); } } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/BuiltInAttribute.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/BuiltInAttribute.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/BuiltInAttribute.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/BuiltInAttribute.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/IndexType.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/IndexType.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/IndexType.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/InputRate.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/InputRate.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/InputRate.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/Mesh.java similarity index 75% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/Mesh.java index 5af6b246ee..6951fa5ecf 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/Mesh.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/Mesh.java @@ -1,6 +1,5 @@ package com.jme3.vulkan.mesh; -import com.jme3.bounding.BoundingVolume; import com.jme3.vulkan.commands.CommandBuffer; public interface Mesh { @@ -9,4 +8,8 @@ public interface Mesh { void draw(CommandBuffer cmd); + int getVertexCount(); + + int getTriangleCount(); + } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/MeshDescription.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexAttribute.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexBinding.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java similarity index 95% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java index 05b340f75c..a5c166631b 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexBuffer.java @@ -1,9 +1,7 @@ package com.jme3.vulkan.mesh; import com.jme3.vulkan.buffers.*; -import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.frames.VersionedResource; -import com.jme3.vulkan.update.Command; import org.lwjgl.PointerBuffer; import java.nio.*; diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexReader.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexReader.java new file mode 100644 index 0000000000..5688959e1d --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexReader.java @@ -0,0 +1,67 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector2f; +import com.jme3.math.Vector3f; +import com.jme3.math.Vector4f; + +public interface VertexReader { + + int capacity(); + + int limit(); + + byte getByte(int vertex, int component); + + short getShort(int vertex, int component); + + int getInt(int vertex, int component); + + float getFloat(int vertex, int component); + + double getDouble(int vertex, int component); + + long getLong(int vertex, int component); + + default Vector2f getVector2(int vertex, int baseComponent, Vector2f store) { + if (store == null) { + store = new Vector2f(); + } + return store.set( + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent )); + } + + default Vector3f getVector3(int vertex, int baseComponent, Vector3f store) { + if (store == null) { + store = new Vector3f(); + } + return store.set( + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent )); + } + + default Vector4f getVector4(int vertex, int baseComponent, Vector4f store) { + if (store == null) { + store = new Vector4f(); + } + return store.set( + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent )); + } + + default ColorRGBA getColor(int vertex, int baseComponent, ColorRGBA store) { + if (store == null) { + store = new ColorRGBA(); + } + return store.set( + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent++), + getFloat(vertex, baseComponent )); + } + +} diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java new file mode 100644 index 0000000000..aa79c3eca9 --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java @@ -0,0 +1,76 @@ +package com.jme3.vulkan.mesh; + +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector2f; +import com.jme3.math.Vector3f; +import com.jme3.math.Vector4f; + +import java.nio.*; + +public interface VertexWriter { + + int capacity(); + + int limit(); + + VertexWriter limit(int vertex); + + VertexWriter putByte(int vertex, int component, byte value); + + VertexWriter putShort(int vertex, int component, short value); + + VertexWriter putInt(int vertex, int component, int value); + + VertexWriter putFloat(int vertex, int component, float value); + + VertexWriter putDouble(int vertex, int component, double value); + + VertexWriter putLong(int vertex, int component, long value); + + VertexWriter putVector2(int vertex, int baseComponent, float x, float y); + + VertexWriter putVector3(int vertex, int baseComponent, float x, float y, float z); + + VertexWriter putVector4(int vertex, int baseComponent, float x, float y, float z, float w); + + default VertexWriter putVector2(int vertex, int baseComponent, Vector2f value) { + return putVector2(vertex, baseComponent, value.x, value.y); + } + + default VertexWriter putVector3(int vertex, int baseComponent, Vector3f value) { + return putVector3(vertex, baseComponent, value.x, value.y, value.z); + } + + default VertexWriter putVector4(int vertex, int baseComponent, Vector4f value) { + return putVector4(vertex, baseComponent, value.x, value.y, value.z, value.w); + } + + default VertexWriter putColor(int vertex, int baseComponent, ColorRGBA value) { + return putVector4(vertex, baseComponent, value.r, value.g, value.b, value.a); + } + + VertexWriter putBytes(int baseVertex, int baseComponent, byte... values); + + VertexWriter putBytes(int baseVertex, int baseComponent, ByteBuffer values); + + VertexWriter putShorts(int baseVertex, int baseComponent, short... values); + + VertexWriter putShorts(int baseVertex, int baseComponent, ShortBuffer values); + + VertexWriter putInts(int baseVertex, int baseComponent, int... values); + + VertexWriter putInts(int baseVertex, int baseComponent, IntBuffer values); + + VertexWriter putFloats(int baseVertex, int baseComponent, float... values); + + VertexWriter putFloats(int baseVertex, int baseComponent, FloatBuffer values); + + VertexWriter putDoubles(int baseVertex, int baseComponent, double... values); + + VertexWriter putDoubles(int baseVertex, int baseComponent, DoubleBuffer values); + + VertexWriter putLongs(int baseVertex, int baseComponent, long... values); + + VertexWriter putLongs(int baseVertex, int baseComponent, LongBuffer values); + +} diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Attachment.java b/jme3-core/src/main/java/com/jme3/vulkan/pass/Attachment.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Attachment.java rename to jme3-core/src/main/java/com/jme3/vulkan/pass/Attachment.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java b/jme3-core/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java rename to jme3-core/src/main/java/com/jme3/vulkan/pass/AttachmentReference.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java b/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/RenderPass.java rename to jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Subpass.java b/jme3-core/src/main/java/com/jme3/vulkan/pass/Subpass.java similarity index 99% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Subpass.java rename to jme3-core/src/main/java/com/jme3/vulkan/pass/Subpass.java index 0b56913472..3a3a668e86 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/Subpass.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/pass/Subpass.java @@ -2,7 +2,6 @@ import com.jme3.vulkan.pipelines.PipelineBindPoint; import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VK10; import org.lwjgl.vulkan.VkAttachmentReference; import org.lwjgl.vulkan.VkSubpassDescription; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java b/jme3-core/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java rename to jme3-core/src/main/java/com/jme3/vulkan/pass/SubpassDependency.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Access.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Access.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Access.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/Access.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CompareOp.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/CompareOp.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CompareOp.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/CompareOp.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/ComputePipeline.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CullMode.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/CullMode.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/CullMode.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/CullMode.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FaceWinding.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/FaceWinding.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FaceWinding.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/FaceWinding.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java similarity index 99% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java index 698645bd3c..79858502ba 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java @@ -3,7 +3,6 @@ import com.jme3.util.natives.Native; import com.jme3.vulkan.*; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.mesh.MeshDescription; import com.jme3.vulkan.pass.RenderPass; import com.jme3.vulkan.pipelines.states.*; import com.jme3.vulkan.shader.ShaderModule; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/LogicOp.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/LogicOp.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/LogicOp.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/LogicOp.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineBindPoint.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/PipelineBindPoint.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineBindPoint.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/PipelineBindPoint.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineLayout.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/PipelineLayout.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineLayout.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/PipelineLayout.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineStage.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/PipelineStage.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PipelineStage.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/PipelineStage.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PolygonMode.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/PolygonMode.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/PolygonMode.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/PolygonMode.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Topology.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Topology.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/Topology.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/Topology.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendAttachment.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendAttachment.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendAttachment.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendAttachment.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/ColorBlendState.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/DepthStencilState.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/DynamicState.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/InputAssemblyState.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/MultisampleState.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/MultisampleState.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/MultisampleState.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/MultisampleState.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/PipelineState.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/PipelineState.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/PipelineState.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/PipelineState.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/RasterizationState.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/VertexInputState.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java similarity index 98% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java rename to jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java index 9bbac6a0c1..9bd2243978 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/states/ViewportState.java @@ -1,7 +1,6 @@ package com.jme3.vulkan.pipelines.states; import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VkExtent2D; import org.lwjgl.vulkan.VkPipelineViewportStateCreateInfo; import org.lwjgl.vulkan.VkRect2D; import org.lwjgl.vulkan.VkViewport; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Node.java b/jme3-core/src/main/java/com/jme3/vulkan/scene/NotNode.java similarity index 70% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Node.java rename to jme3-core/src/main/java/com/jme3/vulkan/scene/NotNode.java index 91f8a369f2..63bf9fc362 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Node.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/scene/NotNode.java @@ -2,16 +2,16 @@ import com.jme3.util.SafeArrayList; -public class Node extends Spatial { +public class NotNode extends NotSpatial { - private SafeArrayList children = new SafeArrayList<>(Spatial.class); + private SafeArrayList children = new SafeArrayList<>(NotSpatial.class); - public void attachChild(Spatial child) { + public void attachChild(NotSpatial child) { children.add(child); child.setParent(this); } - public boolean detachChild(Spatial child) { + public boolean detachChild(NotSpatial child) { if (children.remove(child)) { child.setParent(null); return true; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/vulkan/scene/NotSpatial.java similarity index 81% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Spatial.java rename to jme3-core/src/main/java/com/jme3/vulkan/scene/NotSpatial.java index 174f4902ae..27e6292e96 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Spatial.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/scene/NotSpatial.java @@ -2,37 +2,37 @@ import java.util.*; -public abstract class Spatial implements Iterable { +public abstract class NotSpatial implements Iterable { - private Node parent; + private NotNode parent; public void removeFromParent() { } - public Node getParent() { + public NotNode getParent() { return parent; } - protected void setParent(Node parent) { + protected void setParent(NotNode parent) { this.parent = parent; } protected abstract void findNextIteration(GraphIterator iterator); @Override - public Iterator iterator() { + public Iterator iterator() { return new GraphIterator(this); } - public static class GraphIterator implements Iterator { + public static class GraphIterator implements Iterator { private final Stack childIndices = new Stack<>(); - private Spatial current; + private NotSpatial current; private int currentIndex = 0; private int iteration = -1; - public GraphIterator(Spatial start) { + public GraphIterator(NotSpatial start) { current = Objects.requireNonNull(start); } @@ -42,7 +42,7 @@ public boolean hasNext() { } @Override - public Spatial next() { + public NotSpatial next() { if (++iteration > 0) { current.findNextIteration(this); } @@ -70,7 +70,7 @@ protected void moveUp() { } } - protected void moveDown(Spatial node) { + protected void moveDown(NotSpatial node) { if (node.getParent() != current) { throw new IllegalArgumentException("Next node must be a child of the current node."); } diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java b/jme3-core/src/main/java/com/jme3/vulkan/shader/ShaderModule.java similarity index 97% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java rename to jme3-core/src/main/java/com/jme3/vulkan/shader/ShaderModule.java index f592b6b265..b8f17bd62f 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderModule.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/shader/ShaderModule.java @@ -8,8 +8,6 @@ import org.lwjgl.vulkan.VkShaderModuleCreateInfo; import java.nio.ByteBuffer; -import java.util.HashMap; -import java.util.Map; import static com.jme3.renderer.vulkan.VulkanUtils.*; import static org.lwjgl.vulkan.VK10.*; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderStage.java b/jme3-core/src/main/java/com/jme3/vulkan/shader/ShaderStage.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/ShaderStage.java rename to jme3-core/src/main/java/com/jme3/vulkan/shader/ShaderStage.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java b/jme3-core/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java rename to jme3-core/src/main/java/com/jme3/vulkan/shader/UniformTestStruct.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Surface.java b/jme3-core/src/main/java/com/jme3/vulkan/surface/Surface.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Surface.java rename to jme3-core/src/main/java/com/jme3/vulkan/surface/Surface.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/Swapchain.java rename to jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/SwapchainUpdater.java b/jme3-core/src/main/java/com/jme3/vulkan/surface/SwapchainUpdater.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/surface/SwapchainUpdater.java rename to jme3-core/src/main/java/com/jme3/vulkan/surface/SwapchainUpdater.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Fence.java b/jme3-core/src/main/java/com/jme3/vulkan/sync/Fence.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Fence.java rename to jme3-core/src/main/java/com/jme3/vulkan/sync/Fence.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java b/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java similarity index 96% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java rename to jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java index e5a4015d34..b14c7d19e9 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/Semaphore.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java @@ -1,13 +1,11 @@ package com.jme3.vulkan.sync; import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.AbstractNative; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.pipelines.PipelineStage; import com.jme3.vulkan.util.Flag; import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; import org.lwjgl.vulkan.VkSemaphoreCreateInfo; import java.nio.LongBuffer; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java b/jme3-core/src/main/java/com/jme3/vulkan/sync/SyncGroup.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/SyncGroup.java rename to jme3-core/src/main/java/com/jme3/vulkan/sync/SyncGroup.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/TaskQueue.java b/jme3-core/src/main/java/com/jme3/vulkan/sync/TaskQueue.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/sync/TaskQueue.java rename to jme3-core/src/main/java/com/jme3/vulkan/sync/TaskQueue.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/BasicCommandBatch.java b/jme3-core/src/main/java/com/jme3/vulkan/update/BasicCommandBatch.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/BasicCommandBatch.java rename to jme3-core/src/main/java/com/jme3/vulkan/update/BasicCommandBatch.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/Command.java b/jme3-core/src/main/java/com/jme3/vulkan/update/Command.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/Command.java rename to jme3-core/src/main/java/com/jme3/vulkan/update/Command.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandBatch.java b/jme3-core/src/main/java/com/jme3/vulkan/update/CommandBatch.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandBatch.java rename to jme3-core/src/main/java/com/jme3/vulkan/update/CommandBatch.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandRunner.java b/jme3-core/src/main/java/com/jme3/vulkan/update/CommandRunner.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/update/CommandRunner.java rename to jme3-core/src/main/java/com/jme3/vulkan/update/CommandRunner.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Extent2.java b/jme3-core/src/main/java/com/jme3/vulkan/util/Extent2.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Extent2.java rename to jme3-core/src/main/java/com/jme3/vulkan/util/Extent2.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java b/jme3-core/src/main/java/com/jme3/vulkan/util/Flag.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/Flag.java rename to jme3-core/src/main/java/com/jme3/vulkan/util/Flag.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/IntEnum.java b/jme3-core/src/main/java/com/jme3/vulkan/util/IntEnum.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/IntEnum.java rename to jme3-core/src/main/java/com/jme3/vulkan/util/IntEnum.java diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/RenderStateToVulkan.java b/jme3-core/src/main/java/com/jme3/vulkan/util/RenderStateToVulkan.java similarity index 100% rename from jme3-lwjgl3/src/main/java/com/jme3/vulkan/util/RenderStateToVulkan.java rename to jme3-core/src/main/java/com/jme3/vulkan/util/RenderStateToVulkan.java diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index f23bc36c56..f0bd3ae172 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -12,23 +12,16 @@ import com.jme3.system.vulkan.LwjglVulkanContext; import com.jme3.util.BufferUtils; import com.jme3.util.natives.Native; -import com.jme3.vulkan.*; -import com.jme3.vulkan.buffers.*; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.commands.CommandPool; -import com.jme3.vulkan.descriptors.*; -import com.jme3.vulkan.devices.*; import com.jme3.vulkan.frames.SingleResource; import com.jme3.vulkan.frames.UpdateFrame; import com.jme3.vulkan.frames.UpdateFrameManager; -import com.jme3.vulkan.images.*; import com.jme3.vulkan.material.TestMaterial; import com.jme3.vulkan.memory.MemoryProp; import com.jme3.vulkan.memory.MemorySize; -import com.jme3.vulkan.mesh.*; import com.jme3.vulkan.pass.Attachment; import com.jme3.vulkan.pass.Subpass; -import com.jme3.vulkan.pipelines.*; import com.jme3.vulkan.pass.RenderPass; import com.jme3.vulkan.pipelines.states.ColorBlendAttachment; import com.jme3.vulkan.pipelines.states.DynamicState; @@ -48,7 +41,6 @@ import java.nio.FloatBuffer; import java.nio.IntBuffer; -import java.util.concurrent.TimeUnit; import java.util.logging.Level; import static org.lwjgl.vulkan.VK13.*; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Geometry.java b/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Geometry.java deleted file mode 100644 index ed3e56e948..0000000000 --- a/jme3-lwjgl3/src/main/java/com/jme3/vulkan/scene/Geometry.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.jme3.vulkan.scene; - -public class Geometry { - -} From 29c1818510f57f4ef1187ae263da406672c04d0c Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Fri, 12 Sep 2025 15:19:32 -0400 Subject: [PATCH 57/80] temporarily renamed Mesh to GLMesh to not conflict with the new Mesh interface --- .../src/main/java/com/jme3/anim/Joint.java | 2 +- .../main/java/com/jme3/anim/MorphControl.java | 10 ++--- .../java/com/jme3/anim/SkinningControl.java | 22 +++++----- .../main/java/com/jme3/animation/Bone.java | 2 +- .../com/jme3/animation/SkeletonControl.java | 22 +++++----- .../main/java/com/jme3/app/BasicProfiler.java | 10 ++--- .../java/com/jme3/app/BasicProfilerState.java | 6 +-- .../java/com/jme3/bounding/BoundingBox.java | 4 +- .../com/jme3/collision/CollisionResult.java | 4 +- .../java/com/jme3/collision/bih/BIHTree.java | 12 ++--- .../java/com/jme3/effect/ParticleMesh.java | 4 +- .../shapes/EmitterMeshConvexHullShape.java | 4 +- .../effect/shapes/EmitterMeshFaceShape.java | 8 ++-- .../effect/shapes/EmitterMeshVertexShape.java | 8 ++-- .../environment/util/BoundingSphereDebug.java | 4 +- .../java/com/jme3/font/BitmapTextPage.java | 10 ++--- .../java/com/jme3/material/RenderState.java | 6 +-- .../logic/DefaultTechniqueDefLogic.java | 4 +- .../java/com/jme3/renderer/RenderContext.java | 7 +-- .../java/com/jme3/renderer/RenderManager.java | 4 +- .../main/java/com/jme3/renderer/Renderer.java | 6 +-- .../java/com/jme3/renderer/Statistics.java | 6 +-- .../com/jme3/renderer/opengl/GLRenderer.java | 16 +++---- .../main/java/com/jme3/scene/BatchNode.java | 20 ++++----- .../com/jme3/scene/{Mesh.java => GLMesh.java} | 28 ++++++------ .../main/java/com/jme3/scene/Geometry.java | 28 ++++++------ .../com/jme3/scene/GeometryGroupNode.java | 2 +- .../src/main/java/com/jme3/scene/Spatial.java | 6 +-- .../java/com/jme3/scene/VertexBuffer.java | 2 +- .../com/jme3/scene/control/LodControl.java | 4 +- .../main/java/com/jme3/scene/debug/Arrow.java | 4 +- .../main/java/com/jme3/scene/debug/Grid.java | 4 +- .../jme3/scene/debug/SkeletonDebugger.java | 4 +- .../scene/debug/SkeletonInterBoneWire.java | 4 +- .../com/jme3/scene/debug/SkeletonPoints.java | 4 +- .../com/jme3/scene/debug/SkeletonWire.java | 4 +- .../java/com/jme3/scene/debug/WireBox.java | 4 +- .../com/jme3/scene/debug/WireFrustum.java | 6 +-- .../java/com/jme3/scene/debug/WireSphere.java | 4 +- .../debug/custom/ArmatureInterJointsWire.java | 4 +- .../jme3/scene/debug/custom/ArmatureNode.java | 4 +- .../jme3/scene/debug/custom/JointShape.java | 4 +- .../jme3/scene/instancing/InstancedNode.java | 4 +- .../java/com/jme3/scene/mesh/IndexBuffer.java | 3 +- .../jme3/scene/mesh/VirtualIndexBuffer.java | 2 +- .../jme3/scene/mesh/WrappedIndexBuffer.java | 8 ++-- .../com/jme3/scene/shape/AbstractBox.java | 4 +- .../java/com/jme3/scene/shape/CenterQuad.java | 4 +- .../main/java/com/jme3/scene/shape/Curve.java | 12 ++--- .../java/com/jme3/scene/shape/Cylinder.java | 4 +- .../main/java/com/jme3/scene/shape/Dome.java | 4 +- .../main/java/com/jme3/scene/shape/Line.java | 4 +- .../java/com/jme3/scene/shape/PQTorus.java | 4 +- .../main/java/com/jme3/scene/shape/Quad.java | 4 +- .../com/jme3/scene/shape/RectangleMesh.java | 4 +- .../java/com/jme3/scene/shape/Sphere.java | 4 +- .../java/com/jme3/scene/shape/Surface.java | 4 +- .../main/java/com/jme3/scene/shape/Torus.java | 4 +- .../java/com/jme3/system/NullRenderer.java | 4 +- .../jme3/util/TangentBinormalGenerator.java | 44 +++++++++---------- .../main/java/com/jme3/util/TangentUtils.java | 16 +++---- .../jme3/util/mikktspace/MikkTSpaceImpl.java | 6 +-- .../MikktspaceTangentGenerator.java | 8 ++-- .../natives}/AbstractNative.java | 4 +- .../java/com/jme3/vulkan/VulkanInstance.java | 11 +++++ .../vulkan/buffers/BasicVulkanBuffer.java | 2 +- .../vulkan/descriptors/DescriptorSet.java | 2 +- .../jme3/vulkan/devices/LogicalDevice.java | 2 +- .../jme3/vulkan/frames/PerFrameResource.java | 6 +++ .../jme3/vulkan/frames/SingleResource.java | 29 ++++++++++++ .../jme3/vulkan/frames/VersionedResource.java | 2 +- .../java/com/jme3/vulkan/images/GpuImage.java | 2 +- .../com/jme3/vulkan/images/ImageView.java | 2 +- .../java/com/jme3/vulkan/images/Sampler.java | 2 +- .../com/jme3/vulkan/mesh/AdaptiveMesh.java | 20 +++++---- .../com/jme3/vulkan/mesh/MyCustomMesh.java | 16 ++++--- .../java/com/jme3/vulkan/pass/RenderPass.java | 2 +- .../vulkan/pipelines/GraphicsPipeline.java | 2 +- .../com/jme3/vulkan/pipelines/Pipeline.java | 2 +- .../com/jme3/vulkan/surface/Swapchain.java | 1 + .../java/com/jme3/vulkan/sync/Semaphore.java | 2 +- .../com/jme3/scene/plugins/OBJLoader.java | 8 ++-- .../collision/CollideIgnoreTransformTest.java | 4 +- .../java/com/jme3/light/LightSortTest.java | 6 +-- .../jme3/renderer/OpaqueComparatorTest.java | 4 +- .../com/jme3/scene/PhantomTrianglesTest.java | 6 +-- .../java/com/jme3/scene/mesh/MeshTest.java | 4 +- .../scene/mesh/VirtualIndexBufferTest.java | 2 +- .../java/com/jme3/tools/LodGeneratorTest.java | 10 ++--- .../java/com/jme3/util/TestIssue1909.java | 4 +- .../java/com/jme3/util/TestIssue1919.java | 30 ++++++------- .../optimize/GeometryBatchFactory.java | 16 +++---- .../java/jme3tools/optimize/LodGenerator.java | 12 ++--- .../java/jme3tools/optimize/TextureAtlas.java | 12 ++--- .../jme3test/animation/TestIssue2076.java | 6 +-- .../jme3test/app/TestCustomAppSettings.java | 6 +-- .../main/java/jme3test/audio/TestAmbient.java | 4 +- .../jme3test/audio/TestAudioDirectional.java | 4 +- .../main/java/jme3test/audio/TestDoppler.java | 4 +- .../src/main/java/jme3test/audio/TestOgg.java | 4 +- .../main/java/jme3test/audio/TestReverb.java | 4 +- .../jme3test/bullet/PhysicsTestHelper.java | 6 +-- .../java/jme3test/bullet/TestIssue1120.java | 4 +- .../bullet/shape/TestGimpactShape.java | 6 +-- .../jme3test/collision/TestRayCasting.java | 4 +- .../collision/TestTriangleCollision.java | 4 +- .../java/jme3test/games/WorldOfInception.java | 6 +-- .../java/jme3test/light/TestObbVsBounds.java | 2 +- .../java/jme3test/light/TestTangentGen.java | 12 ++--- .../light/pbr/TestIssue1903Compat.java | 4 +- .../jme3test/material/TestGeometryShader.java | 6 +-- .../material/TestTessellationShader.java | 4 +- .../java/jme3test/math/TestRandomPoints.java | 4 +- .../jme3test/model/anim/TestArmature.java | 2 +- .../model/anim/TestBaseAnimSerialization.java | 2 +- .../jme3test/model/shape/TestCustomMesh.java | 8 ++-- .../jme3test/model/shape/TestDebugShapes.java | 4 +- .../renderer/TestBackgroundImage.java | 4 +- .../java/jme3test/renderer/TestIssue37.java | 4 +- .../java/jme3test/renderer/TestLineWidth.java | 4 +- .../scene/instancing/TestInstanceNode.java | 10 ++--- ...ancedNodeAttachDetachWithShadowFilter.java | 6 +-- .../java/jme3test/stress/TestLeakingGL.java | 4 +- .../jme3test/stress/TestLodGeneration.java | 4 +- .../jme3test/texture/TestSkyRotation.java | 4 +- .../jme3test/texture/TestTextureArray.java | 4 +- .../texture/TestTextureArrayCompressed.java | 4 +- .../jme3test/vulkan/VulkanHelperTest.java | 21 ++++++--- .../com/jme3/bullet/animation/DacLinks.java | 8 ++-- .../com/jme3/bullet/animation/RagUtils.java | 42 +++++++++--------- .../shapes/GImpactCollisionShape.java | 8 ++-- .../shapes/HeightfieldCollisionShape.java | 4 +- .../collision/shapes/HullCollisionShape.java | 8 ++-- .../collision/shapes/MeshCollisionShape.java | 10 ++--- .../control/KinematicRagdollControl.java | 4 +- .../jme3/bullet/control/RigidBodyControl.java | 4 +- .../bullet/control/ragdoll/RagdollUtils.java | 18 ++++---- .../bullet/util/CollisionShapeFactory.java | 6 +-- .../java/com/jme3/bullet/util/Converter.java | 10 ++--- .../jme3/bullet/util/DebugShapeFactory.java | 10 ++--- .../test/PreventBulletIssueRegressions.java | 4 +- .../jme3/niftygui/JmeBatchRenderBackend.java | 4 +- .../jme3/scene/plugins/fbx/mesh/FbxMesh.java | 10 ++--- .../jme3/scene/plugins/fbx/node/FbxNode.java | 8 ++-- .../scene/plugins/fbx/objects/FbxMesh.java | 8 ++-- .../scene/plugins/fbx/objects/FbxSkin.java | 8 ++-- .../jme3/scene/plugins/gltf/GltfLoader.java | 2 +- .../jme3/scene/plugins/gltf/GltfUtils.java | 26 +++++------ .../gltf/TextureTransformExtensionLoader.java | 8 ++-- .../java/com/jme3/scene/plugins/IrUtils.java | 8 ++-- .../jme3/scene/plugins/ogre/MeshLoader.java | 18 ++++---- .../animation/TestIssue2076.java | 6 +-- .../main/java/com/jme3/terrain/GeoMap.java | 6 +-- .../com/jme3/terrain/geomipmap/LODGeomap.java | 10 ++--- .../jme3/terrain/geomipmap/TerrainPatch.java | 14 +++--- .../lodcalc/util/EntropyComputeUtil.java | 4 +- .../input/vr/openvr/OpenVRViewManager.java | 6 +-- .../main/java/com/jme3/scene/CenterQuad.java | 4 +- 158 files changed, 614 insertions(+), 550 deletions(-) rename jme3-core/src/main/java/com/jme3/scene/{Mesh.java => GLMesh.java} (98%) rename jme3-core/src/main/java/com/jme3/{vulkan => util/natives}/AbstractNative.java (86%) diff --git a/jme3-core/src/main/java/com/jme3/anim/Joint.java b/jme3-core/src/main/java/com/jme3/anim/Joint.java index 8f2275b202..ad01d0b4bf 100644 --- a/jme3-core/src/main/java/com/jme3/anim/Joint.java +++ b/jme3-core/src/main/java/com/jme3/anim/Joint.java @@ -366,7 +366,7 @@ protected Node getAttachmentsNode(int jointIndex, SafeArrayList target * Search for a geometry animated by this particular bone. */ for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); if (mesh != null && mesh.isAnimatedByJoint(jointIndex)) { targetGeometry = geometry; break; diff --git a/jme3-core/src/main/java/com/jme3/anim/MorphControl.java b/jme3-core/src/main/java/com/jme3/anim/MorphControl.java index 4c2f0a6c75..4914b691d3 100644 --- a/jme3-core/src/main/java/com/jme3/anim/MorphControl.java +++ b/jme3-core/src/main/java/com/jme3/anim/MorphControl.java @@ -107,7 +107,7 @@ protected void controlUpdate(float tpf) { @Override protected void controlRender(RenderManager rm, ViewPort vp) { for (Geometry geom : targets.getArray()) { - Mesh mesh = geom.getMesh(); + GLMesh mesh = geom.getMesh(); if (!geom.isDirtyMorph()) { continue; } @@ -236,7 +236,7 @@ private int getMaxGPUTargets(RenderManager rm, Geometry geom, Material mat, int return maxGPUTargets; } - private int bindMorphTargetBuffer(Mesh mesh, int targetNumBuffers, int boundBufferIdx, MorphTarget t) { + private int bindMorphTargetBuffer(GLMesh mesh, int targetNumBuffers, int boundBufferIdx, MorphTarget t) { int start = VertexBuffer.Type.MorphTarget0.ordinal(); if (targetNumBuffers >= 1) { activateBuffer(mesh, boundBufferIdx, start, t.getBuffer(VertexBuffer.Type.Position)); @@ -305,7 +305,7 @@ private void mergeTargetBuffer(float[] array, float weight, FloatBuffer src, boo } } - private void activateBuffer(Mesh mesh, int idx, int start, FloatBuffer b) { + private void activateBuffer(GLMesh mesh, int idx, int start, FloatBuffer b) { VertexBuffer.Type t = bufferTypes[start + idx]; VertexBuffer vb = mesh.getBuffer(t); // only set the buffer if it's different @@ -364,7 +364,7 @@ private int getTargetNumBuffers(MorphTarget morphTarget) { * @param renderer * @return */ - private int getRemainingBuffers(Mesh mesh, Renderer renderer) { + private int getRemainingBuffers(GLMesh mesh, Renderer renderer) { int nbUsedBuffers = 0; for (VertexBuffer vb : mesh.getBufferList().getArray()) { boolean isMorphBuffer = vb.getBufferType().ordinal() >= VertexBuffer.Type.MorphTarget0.ordinal() && vb.getBufferType().ordinal() <= VertexBuffer.Type.MorphTarget9.ordinal(); @@ -471,7 +471,7 @@ public void visit(Geometry geom) { if (p == null) { return; } - Mesh mesh = geom.getMesh(); + GLMesh mesh = geom.getMesh(); if (mesh != null && mesh.hasMorphTargets()) { targets.add(geom); // If the mesh is in a subgraph of a node with a SkinningControl it might have hardware skinning activated through mat param override even if it's not skinned. diff --git a/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java b/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java index 7cc5f3c58b..10b2d52b64 100644 --- a/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java +++ b/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java @@ -143,7 +143,7 @@ private void switchToHardware() { numberOfJointsParam.setValue(numBones); for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); if (mesh != null && mesh.isAnimated()) { mesh.prepareForAnim(false); } @@ -155,7 +155,7 @@ private void switchToSoftware() { jointMatricesParam.setEnabled(false); for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); if (mesh != null && mesh.isAnimated()) { mesh.prepareForAnim(true); } @@ -215,7 +215,7 @@ public boolean isHardwareSkinningUsed() { * to the lists of animation targets. */ private void findTargets(Geometry geometry) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); if (mesh != null && mesh.isAnimated()) { targets.add(geometry); } @@ -257,7 +257,7 @@ private void controlRenderSoftware() { offsetMatrices = armature.computeSkinningMatrices(); for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); // NOTE: This assumes code higher up has // already ensured this mesh is animated. // Otherwise a crash will happen in skin update. @@ -317,7 +317,7 @@ protected void controlUpdate(float tpf) { //only do this for software updates void resetToBind() { for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); if (mesh != null && mesh.isAnimated()) { Buffer bwBuff = mesh.getBuffer(Type.BoneWeight).getData(); Buffer biBuff = mesh.getBuffer(Type.BoneIndex).getData(); @@ -424,11 +424,11 @@ public Armature getArmature() { * * @return a new array */ - public Mesh[] getTargets() { - Mesh[] result = new Mesh[targets.size()]; + public GLMesh[] getTargets() { + GLMesh[] result = new GLMesh[targets.size()]; int i = 0; for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); result[i] = mesh; i++; } @@ -442,7 +442,7 @@ public Mesh[] getTargets() { * @param mesh then mesh * @param offsetMatrices the transformation matrices to apply */ - private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) { + private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) { VertexBuffer tb = mesh.getBuffer(Type.Tangent); if (tb == null) { @@ -462,7 +462,7 @@ private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) { * @param mesh the mesh * @param offsetMatrices the offset matrices to apply */ - private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) { + private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) { int maxWeightsPerVert = mesh.getMaxNumWeights(); if (maxWeightsPerVert <= 0) { throw new IllegalStateException("Max weights per vert is incorrectly set!"); @@ -569,7 +569,7 @@ private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) { * @param offsetMatrices the offsetMatrices to apply * @param tb the tangent vertexBuffer */ - private void applySkinningTangents(Mesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) { + private void applySkinningTangents(GLMesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) { int maxWeightsPerVert = mesh.getMaxNumWeights(); if (maxWeightsPerVert <= 0) { diff --git a/jme3-core/src/main/java/com/jme3/animation/Bone.java b/jme3-core/src/main/java/com/jme3/animation/Bone.java index 2d4211b90a..dddaea8ad6 100644 --- a/jme3-core/src/main/java/com/jme3/animation/Bone.java +++ b/jme3-core/src/main/java/com/jme3/animation/Bone.java @@ -722,7 +722,7 @@ Node getAttachmentsNode(int boneIndex, SafeArrayList targets) { * Search for a geometry animated by this particular bone. */ for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); if (mesh != null && mesh.isAnimatedByBone(boneIndex)) { targetGeometry = geometry; break; diff --git a/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java b/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java index 2428919c5e..a2e24714c6 100644 --- a/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java +++ b/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java @@ -124,7 +124,7 @@ private void switchToHardware() { numberOfBonesParam.setValue(numBones); for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); if (mesh != null && mesh.isAnimated()) { mesh.prepareForAnim(false); } @@ -136,7 +136,7 @@ private void switchToSoftware() { boneMatricesParam.setEnabled(false); for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); if (mesh != null && mesh.isAnimated()) { mesh.prepareForAnim(true); } @@ -211,7 +211,7 @@ public SkeletonControl(Skeleton skeleton) { * to the lists of animation targets. */ private void findTargets(Geometry geometry) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); if (mesh != null && mesh.isAnimated()) { targets.add(geometry); } @@ -252,7 +252,7 @@ private void controlRenderSoftware() { offsetMatrices = skeleton.computeSkinningMatrices(); for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); // NOTE: This assumes code higher up has // already ensured this mesh is animated. // Otherwise a crash will happen in skin update. @@ -311,7 +311,7 @@ protected void controlUpdate(float tpf) { //only do this for software updates void resetToBind() { for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); if (mesh != null && mesh.isAnimated()) { Buffer bwBuff = mesh.getBuffer(Type.BoneWeight).getData(); Buffer biBuff = mesh.getBuffer(Type.BoneIndex).getData(); @@ -418,11 +418,11 @@ public Skeleton getSkeleton() { * * @return a new array */ - public Mesh[] getTargets() { - Mesh[] result = new Mesh[targets.size()]; + public GLMesh[] getTargets() { + GLMesh[] result = new GLMesh[targets.size()]; int i = 0; for (Geometry geometry : targets) { - Mesh mesh = geometry.getMesh(); + GLMesh mesh = geometry.getMesh(); result[i] = mesh; i++; } @@ -436,7 +436,7 @@ public Mesh[] getTargets() { * @param mesh then mesh * @param offsetMatrices the transformation matrices to apply */ - private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) { + private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) { VertexBuffer tb = mesh.getBuffer(Type.Tangent); if (tb == null) { @@ -454,7 +454,7 @@ private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) { * @param mesh the mesh * @param offsetMatrices the offset matrices to apply */ - private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) { + private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) { int maxWeightsPerVert = mesh.getMaxNumWeights(); if (maxWeightsPerVert <= 0) { throw new IllegalStateException("Max weights per vert is incorrectly set!"); @@ -561,7 +561,7 @@ private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) { * @param offsetMatrices the offset matrices to apply * @param tb the tangent vertexBuffer */ - private void applySkinningTangents(Mesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) { + private void applySkinningTangents(GLMesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) { int maxWeightsPerVert = mesh.getMaxNumWeights(); if (maxWeightsPerVert <= 0) { diff --git a/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java b/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java index 1c95730bbc..974d6df77f 100644 --- a/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java +++ b/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java @@ -39,7 +39,7 @@ import com.jme3.profile.VpStep; import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue.Bucket; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import java.nio.FloatBuffer; @@ -73,7 +73,7 @@ public class BasicProfiler implements AppProfiler { private long updateInterval = 1000000L; // once a millisecond private long lastUpdate = 0; - private Mesh mesh; + private GLMesh mesh; public BasicProfiler() { this(1280); @@ -128,14 +128,14 @@ public long getUpdateInterval() { * * @return the pre-existing Mesh */ - public Mesh getMesh() { + public GLMesh getMesh() { return mesh; } protected final void createMesh() { if (mesh == null) { - mesh = new Mesh(); - mesh.setMode(Mesh.Mode.Lines); + mesh = new GLMesh(); + mesh.setMode(GLMesh.Mode.Lines); } mesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(size * 4 * 3)); diff --git a/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java b/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java index 68ee1483fb..8dfb70d835 100644 --- a/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java +++ b/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java @@ -40,7 +40,7 @@ import com.jme3.material.Material; import com.jme3.material.RenderState.BlendMode; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.Node; import com.jme3.scene.VertexBuffer.Type; @@ -116,7 +116,7 @@ public int getFrameCount() { } protected void refreshBackground() { - Mesh mesh = background.getMesh(); + GLMesh mesh = background.getMesh(); int size = profiler.getFrameCount(); float frameTime = 1000f / 60; @@ -180,7 +180,7 @@ protected void initialize(Application app) { graph.setLocalTranslation(0, 300, 0); graph.setLocalScale(1, scale, 1); - Mesh mesh = new Mesh(); + GLMesh mesh = new GLMesh(); background = new Geometry("profiler.background", mesh); mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); mat.setBoolean("VertexColor", true); diff --git a/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java b/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java index 6b0e023b34..e405b28650 100644 --- a/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java +++ b/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java @@ -40,7 +40,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.*; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.Spatial; import com.jme3.util.TempVars; import java.io.IOException; @@ -172,7 +172,7 @@ public void computeFromTris(Triangle[] tris, int start, int end) { vars.release(); } - public void computeFromTris(int[] indices, Mesh mesh, int start, int end) { + public void computeFromTris(int[] indices, GLMesh mesh, int start, int end) { if (end - start <= 0) { return; } diff --git a/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java b/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java index 95739f5a1c..a5fd5ff42d 100644 --- a/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java +++ b/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java @@ -34,7 +34,7 @@ import com.jme3.math.Triangle; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; /** * A CollisionResult represents a single collision instance @@ -90,7 +90,7 @@ public Triangle getTriangle(Triangle store) { if (store == null) store = new Triangle(); - Mesh m = geometry.getMesh(); + GLMesh m = geometry.getMesh(); m.getTriangle(triangleIndex, store); store.calculateCenter(); store.calculateNormal(); diff --git a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java index fca434f750..749e90bfb0 100644 --- a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java +++ b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java @@ -46,8 +46,8 @@ import com.jme3.math.Ray; import com.jme3.math.Vector3f; import com.jme3.scene.CollisionData; -import com.jme3.scene.Mesh; -import com.jme3.scene.Mesh.Mode; +import com.jme3.scene.GLMesh; +import com.jme3.scene.GLMesh.Mode; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.mesh.IndexBuffer; @@ -62,7 +62,7 @@ public class BIHTree implements CollisionData { public static final int MAX_TREE_DEPTH = 100; public static final int MAX_TRIS_PER_NODE = 21; - private Mesh mesh; + private GLMesh mesh; private BIHNode root; private int maxTrisPerNode; private int numTris; @@ -98,7 +98,7 @@ private void initTriList(FloatBuffer vb, IndexBuffer ib) { } } - public BIHTree(Mesh mesh, int maxTrisPerNode) { + public BIHTree(GLMesh mesh, int maxTrisPerNode) { this.mesh = mesh; this.maxTrisPerNode = maxTrisPerNode; @@ -128,7 +128,7 @@ public BIHTree(Mesh mesh, int maxTrisPerNode) { initTriList(vb, ib); } - public BIHTree(Mesh mesh) { + public BIHTree(GLMesh mesh) { this(mesh, MAX_TRIS_PER_NODE); } @@ -484,7 +484,7 @@ public void write(JmeExporter ex) throws IOException { @Override public void read(JmeImporter im) throws IOException { InputCapsule ic = im.getCapsule(this); - mesh = (Mesh) ic.readSavable("mesh", null); + mesh = (GLMesh) ic.readSavable("mesh", null); root = (BIHNode) ic.readSavable("root", null); maxTrisPerNode = ic.readInt("tris_per_node", 0); pointData = ic.readFloatArray("points", null); diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java index b4333ae9f8..1c9f43b9a8 100644 --- a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java +++ b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java @@ -33,7 +33,7 @@ import com.jme3.math.Matrix3f; import com.jme3.renderer.Camera; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; /** * The ParticleMesh is the underlying visual implementation of a @@ -41,7 +41,7 @@ * * @author Kirill Vainer */ -public abstract class ParticleMesh extends Mesh { +public abstract class ParticleMesh extends GLMesh { /** * Type of particle mesh diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java index e7ccd18f33..ea42e95ca4 100644 --- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java +++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java @@ -33,7 +33,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import java.util.List; /** @@ -55,7 +55,7 @@ public EmitterMeshConvexHullShape() { * @param meshes * a list of meshes that will form the emitter's shape */ - public EmitterMeshConvexHullShape(List meshes) { + public EmitterMeshConvexHullShape(List meshes) { super(meshes); } diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java index cda0c911eb..8ee9d60e2e 100644 --- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java +++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java @@ -33,7 +33,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import java.util.ArrayList; @@ -56,15 +56,15 @@ public EmitterMeshFaceShape() { * @param meshes * a list of meshes that will form the emitter's shape */ - public EmitterMeshFaceShape(List meshes) { + public EmitterMeshFaceShape(List meshes) { super(meshes); } @Override - public void setMeshes(List meshes) { + public void setMeshes(List meshes) { this.vertices = new ArrayList>(meshes.size()); this.normals = new ArrayList>(meshes.size()); - for (Mesh mesh : meshes) { + for (GLMesh mesh : meshes) { Vector3f[] vertexTable = BufferUtils.getVector3Array(mesh.getFloatBuffer(Type.Position)); int[] indices = new int[3]; List vertices = new ArrayList<>(mesh.getTriangleCount() * 3); diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java index cadb07ca48..3939304586 100644 --- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java +++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java @@ -37,7 +37,7 @@ import com.jme3.export.OutputCapsule; import com.jme3.math.FastMath; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import com.jme3.util.clone.Cloner; @@ -68,7 +68,7 @@ public EmitterMeshVertexShape() { * @param meshes * a list of meshes that will form the emitter's shape */ - public EmitterMeshVertexShape(List meshes) { + public EmitterMeshVertexShape(List meshes) { this.setMeshes(meshes); } @@ -77,12 +77,12 @@ public EmitterMeshVertexShape(List meshes) { * @param meshes * a list of meshes that will form the emitter's shape */ - public void setMeshes(List meshes) { + public void setMeshes(List meshes) { Map vertToNormalMap = new HashMap<>(); this.vertices = new ArrayList>(meshes.size()); this.normals = new ArrayList>(meshes.size()); - for (Mesh mesh : meshes) { + for (GLMesh mesh : meshes) { // fetching the data float[] vertexTable = BufferUtils.getFloatArray(mesh.getFloatBuffer(Type.Position)); float[] normalTable = BufferUtils.getFloatArray(mesh.getFloatBuffer(Type.Normal)); diff --git a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java index 622164e4a1..f8ac7f94e2 100644 --- a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java +++ b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java @@ -36,7 +36,7 @@ import com.jme3.math.ColorRGBA; import com.jme3.math.FastMath; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import java.nio.FloatBuffer; @@ -49,7 +49,7 @@ * * @author nehon */ -public class BoundingSphereDebug extends Mesh { +public class BoundingSphereDebug extends GLMesh { protected int vertCount; protected int triCount; diff --git a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java index c4ac9b26f0..b7059ceaaa 100644 --- a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java +++ b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java @@ -33,7 +33,7 @@ import com.jme3.material.Material; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.texture.Texture2D; @@ -59,7 +59,7 @@ class BitmapTextPage extends Geometry { private final LinkedList pageQuads = new LinkedList<>(); BitmapTextPage(BitmapFont font, boolean arrayBased, int page) { - super("BitmapFont", new Mesh()); + super("BitmapFont", new GLMesh()); setRequiresUpdates(false); setBatchHint(BatchHint.Never); if (font == null) { @@ -77,7 +77,7 @@ class BitmapTextPage extends Geometry { this.texture = (Texture2D) mat.getTextureParam("ColorMap").getTextureValue(); // initialize buffers - Mesh m = getMesh(); + GLMesh m = getMesh(); m.setBuffer(Type.Position, 3, new float[0]); m.setBuffer(Type.TexCoord, 2, new float[0]); m.setBuffer(Type.Color, 4, new byte[0]); @@ -130,7 +130,7 @@ public BitmapTextPage clone() { @Override public void cloneFields(Cloner cloner, Object original) { - Mesh originalMesh = this.mesh; + GLMesh originalMesh = this.mesh; super.cloneFields(cloner, original); @@ -162,7 +162,7 @@ void assemble(Letters quads) { } } - Mesh m = getMesh(); + GLMesh m = getMesh(); int vertCount = pageQuads.size() * 4; int triCount = pageQuads.size() * 2; diff --git a/jme3-core/src/main/java/com/jme3/material/RenderState.java b/jme3-core/src/main/java/com/jme3/material/RenderState.java index 7f21e8abfa..1002b350c3 100644 --- a/jme3-core/src/main/java/com/jme3/material/RenderState.java +++ b/jme3-core/src/main/java/com/jme3/material/RenderState.java @@ -32,7 +32,7 @@ package com.jme3.material; import com.jme3.export.*; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import java.io.IOException; /** @@ -880,7 +880,7 @@ public void setDepthWrite(boolean depthWrite) { /** * Enables wireframe rendering mode. * - *

When in wireframe mode, {@link Mesh meshes} rendered in triangle mode + *

When in wireframe mode, {@link GLMesh meshes} rendered in triangle mode * will not be solid, but instead, only the edges of the triangles * will be rendered. * @@ -982,7 +982,7 @@ public void setDepthFunc(TestFunction depthFunc) { /** * Sets the mesh line width. * Use this in conjunction with {@link #setWireframe(boolean)} or with a mesh in - * {@link com.jme3.scene.Mesh.Mode#Lines} mode. + * {@link GLMesh.Mode#Lines} mode. * Note: this does not work in OpenGL core profile. It only works in * compatibility profile. * diff --git a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java index ca8f7d1efa..b295c7588b 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java @@ -40,7 +40,7 @@ import com.jme3.renderer.RenderManager; import com.jme3.renderer.Renderer; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.instancing.InstancedGeometry; import com.jme3.shader.DefineList; import com.jme3.shader.Shader; @@ -61,7 +61,7 @@ public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager } public static void renderMeshFromGeometry(Renderer renderer, Geometry geom) { - Mesh mesh = geom.getMesh(); + GLMesh mesh = geom.getMesh(); int lodLevel = geom.getLodLevel(); if (geom instanceof InstancedGeometry) { InstancedGeometry instGeom = (InstancedGeometry) geom; diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java index ea6088afb9..0d153674a6 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java @@ -33,6 +33,7 @@ import com.jme3.material.RenderState; import com.jme3.math.ColorRGBA; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.shader.Shader; import com.jme3.texture.FrameBuffer; @@ -226,21 +227,21 @@ public class RenderContext { /** * Currently bound element array vertex buffer. * - * @see Renderer#renderMesh(com.jme3.scene.Mesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundElementArrayVBO; /** * ID of the bound vertex array. * - * @see Renderer#renderMesh(com.jme3.scene.Mesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundVertexArray; /** * Currently bound array vertex buffer. * - * @see Renderer#renderMesh(com.jme3.scene.Mesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundArrayVBO; diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java index c59ffd9084..6d6a1afeac 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java @@ -54,7 +54,7 @@ import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.renderer.queue.RenderQueue.ShadowMode; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.scene.VertexBuffer; @@ -890,7 +890,7 @@ public void preloadScene(Spatial scene) { } gm.getMaterial().preload(this, gm); - Mesh mesh = gm.getMesh(); + GLMesh mesh = gm.getMesh(); if (mesh != null && mesh.getVertexCount() != 0 && mesh.getTriangleCount() != 0) { diff --git a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java index acd0d599e1..e8a517c2b6 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java @@ -33,7 +33,7 @@ import com.jme3.material.RenderState; import com.jme3.math.ColorRGBA; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.shader.bufferobject.BufferObject; import com.jme3.shader.Shader; @@ -351,12 +351,12 @@ public void setTexture(int unit, Texture tex) * per-instance vertex attribute to the shader. * * @param mesh The mesh to render - * @param lod The LOD level to use, see {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. + * @param lod The LOD level to use, see {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. * @param count Number of mesh instances to render * @param instanceData When count is greater than 1, these buffers provide * the per-instance attributes. */ - public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData); + public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData); /** * Resets all previously used {@link NativeObject Native Objects} on this Renderer. diff --git a/jme3-core/src/main/java/com/jme3/renderer/Statistics.java b/jme3-core/src/main/java/com/jme3/renderer/Statistics.java index b2766df154..8cf89bb171 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Statistics.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Statistics.java @@ -31,7 +31,7 @@ */ package com.jme3.renderer; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.shader.Shader; import com.jme3.texture.FrameBuffer; import com.jme3.texture.Image; @@ -172,7 +172,7 @@ public void getData(int[] data) { * @param lod which level of detail * @param count multiplier for triangles and vertices */ - public void onMeshDrawn(Mesh mesh, int lod, int count) { + public void onMeshDrawn(GLMesh mesh, int lod, int count) { if (!enabled) { return; } @@ -188,7 +188,7 @@ public void onMeshDrawn(Mesh mesh, int lod, int count) { * @param mesh the Mesh that was drawn (not null) * @param lod which level of detail */ - public void onMeshDrawn(Mesh mesh, int lod) { + public void onMeshDrawn(GLMesh mesh, int lod) { onMeshDrawn(mesh, lod, 1); } diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index 09a560d4a6..b65d402ca2 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -39,8 +39,8 @@ import com.jme3.math.*; import com.jme3.opencl.OpenCLObjectManager; import com.jme3.renderer.*; -import com.jme3.scene.Mesh; -import com.jme3.scene.Mesh.Mode; +import com.jme3.scene.GLMesh; +import com.jme3.scene.GLMesh.Mode; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -3227,7 +3227,7 @@ public void setVertexAttrib(VertexBuffer vb) { setVertexAttrib(vb, null); } - public void drawTriangleArray(Mesh.Mode mode, int count, int vertCount) { + public void drawTriangleArray(GLMesh.Mode mode, int count, int vertCount) { boolean useInstancing = count > 1 && caps.contains(Caps.MeshInstancing); if (useInstancing) { glext.glDrawArraysInstancedARB(convertElementMode(mode), 0, @@ -3237,7 +3237,7 @@ public void drawTriangleArray(Mesh.Mode mode, int count, int vertCount) { } } - public void drawTriangleList(VertexBuffer indexBuf, Mesh mesh, int count) { + public void drawTriangleList(VertexBuffer indexBuf, GLMesh mesh, int count) { if (indexBuf.getBufferType() != VertexBuffer.Type.Index) { throw new IllegalArgumentException("Only index buffers are allowed as triangle lists."); } @@ -3340,7 +3340,7 @@ public void drawTriangleList(VertexBuffer indexBuf, Mesh mesh, int count) { * @param mode input enum value (not null) * @return the corresponding GL value */ - public int convertElementMode(Mesh.Mode mode) { + public int convertElementMode(GLMesh.Mode mode) { switch (mode) { case Points: return GL.GL_POINTS; @@ -3363,7 +3363,7 @@ public int convertElementMode(Mesh.Mode mode) { } } - public void updateVertexArray(Mesh mesh, VertexBuffer instanceData) { + public void updateVertexArray(GLMesh mesh, VertexBuffer instanceData) { int id = mesh.getId(); if (id == -1) { IntBuffer temp = intBuf1; @@ -3403,7 +3403,7 @@ public void updateVertexArray(Mesh mesh, VertexBuffer instanceData) { } } - private void renderMeshDefault(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { + private void renderMeshDefault(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) { // Here while count is still passed in. Can be removed when/if // the method is collapsed again. -pspeed @@ -3453,7 +3453,7 @@ private void renderMeshDefault(Mesh mesh, int lod, int count, VertexBuffer[] ins } @Override - public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { + public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) { if (mesh.getVertexCount() == 0 || mesh.getTriangleCount() == 0 || count == 0) { return; } diff --git a/jme3-core/src/main/java/com/jme3/scene/BatchNode.java b/jme3-core/src/main/java/com/jme3/scene/BatchNode.java index aa5d62a02a..3308422d66 100644 --- a/jme3-core/src/main/java/com/jme3/scene/BatchNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/BatchNode.java @@ -128,8 +128,8 @@ protected Matrix4f getTransformMatrix(Geometry g) { protected void updateSubBatch(Geometry bg) { Batch batch = batchesByGeom.get(bg); if (batch != null) { - Mesh mesh = batch.geometry.getMesh(); - Mesh origMesh = bg.getMesh(); + GLMesh mesh = batch.geometry.getMesh(); + GLMesh origMesh = bg.getMesh(); VertexBuffer pvb = mesh.getBuffer(VertexBuffer.Type.Position); VertexBuffer nvb = mesh.getBuffer(VertexBuffer.Type.Normal); @@ -202,7 +202,7 @@ protected void doBatch() { } for (Map.Entry> entry : matMap.entrySet()) { - Mesh m = new Mesh(); + GLMesh m = new GLMesh(); Material material = entry.getKey(); List list = entry.getValue(); nbGeoms += list.size(); @@ -377,7 +377,7 @@ public Material getMaterial() { * @param geometries * @param outMesh */ - private void mergeGeometries(Mesh outMesh, List geometries) { + private void mergeGeometries(GLMesh outMesh, List geometries) { int[] compsForBuf = new int[VertexBuffer.Type.values().length]; VertexBuffer.Format[] formatForBuf = new VertexBuffer.Format[compsForBuf.length]; boolean[] normForBuf = new boolean[VertexBuffer.Type.values().length]; @@ -387,30 +387,30 @@ private void mergeGeometries(Mesh outMesh, List geometries) { int totalLodLevels = 0; int maxWeights = -1; - Mesh.Mode mode = null; + GLMesh.Mode mode = null; for (Geometry geom : geometries) { totalVerts += geom.getVertexCount(); totalTris += geom.getTriangleCount(); totalLodLevels = Math.min(totalLodLevels, geom.getMesh().getNumLodLevels()); - Mesh.Mode listMode; + GLMesh.Mode listMode; int components; switch (geom.getMesh().getMode()) { case Points: - listMode = Mesh.Mode.Points; + listMode = GLMesh.Mode.Points; components = 1; break; case LineLoop: case LineStrip: case Lines: - listMode = Mesh.Mode.Lines; + listMode = GLMesh.Mode.Lines; //listLineWidth = geom.getMesh().getLineWidth(); components = 2; break; case TriangleFan: case TriangleStrip: case Triangles: - listMode = Mesh.Mode.Triangles; + listMode = GLMesh.Mode.Triangles; components = 3; break; default: @@ -472,7 +472,7 @@ private void mergeGeometries(Mesh outMesh, List geometries) { int globalTriIndex = 0; for (Geometry geom : geometries) { - Mesh inMesh = geom.getMesh(); + GLMesh inMesh = geom.getMesh(); if (!isBatch(geom)) { geom.associateWithGroupNode(this, globalVertIndex); } diff --git a/jme3-core/src/main/java/com/jme3/scene/Mesh.java b/jme3-core/src/main/java/com/jme3/scene/GLMesh.java similarity index 98% rename from jme3-core/src/main/java/com/jme3/scene/Mesh.java rename to jme3-core/src/main/java/com/jme3/scene/GLMesh.java index 2819c2838f..b9e19d2a52 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Mesh.java +++ b/jme3-core/src/main/java/com/jme3/scene/GLMesh.java @@ -64,7 +64,7 @@ * * @author Kirill Vainer */ -public class Mesh implements Savable, Cloneable, JmeCloneable { +public class GLMesh implements Savable, Cloneable, JmeCloneable { /** * The mode of the Mesh specifies both the type of primitive represented @@ -119,8 +119,8 @@ public enum Mode { /** * A combination of various triangle modes. It is best to avoid * using this mode as it may not be supported by all renderers. - * The {@link Mesh#setModeStart(int[]) mode start points} and - * {@link Mesh#setElementLengths(int[]) element lengths} must + * The {@link GLMesh#setModeStart(int[]) mode start points} and + * {@link GLMesh#setElementLengths(int[]) element lengths} must * be specified for this mode. */ Hybrid(false), @@ -198,7 +198,7 @@ public boolean isListMode() { /** * Creates a new mesh with no {@link VertexBuffer vertex buffers}. */ - public Mesh() { + public GLMesh() { } /** @@ -209,9 +209,9 @@ public Mesh() { * @return A shallow clone of the mesh */ @Override - public Mesh clone() { + public GLMesh clone() { try { - Mesh clone = (Mesh) super.clone(); + GLMesh clone = (GLMesh) super.clone(); clone.meshBound = meshBound.clone(); clone.collisionTree = collisionTree != null ? collisionTree : null; clone.buffers = buffers.clone(); @@ -236,9 +236,9 @@ public Mesh clone() { * * @return a deep clone of this mesh. */ - public Mesh deepClone() { + public GLMesh deepClone() { try { - Mesh clone = (Mesh) super.clone(); + GLMesh clone = (GLMesh) super.clone(); clone.meshBound = meshBound != null ? meshBound.clone() : null; // TODO: Collision tree cloning @@ -279,8 +279,8 @@ public Mesh deepClone() { * * @return A clone of the mesh for animation use. */ - public Mesh cloneForAnim() { - Mesh clone = clone(); + public GLMesh cloneForAnim() { + GLMesh clone = clone(); if (getBuffer(Type.BindPosePosition) != null) { VertexBuffer oldPos = getBuffer(Type.Position); @@ -310,9 +310,9 @@ public Mesh cloneForAnim() { * Called internally by com.jme3.util.clone.Cloner. Do not call directly. */ @Override - public Mesh jmeClone() { + public GLMesh jmeClone() { try { - Mesh clone = (Mesh) super.clone(); + GLMesh clone = (GLMesh) super.clone(); clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID; return clone; } catch (CloneNotSupportedException ex) { @@ -585,7 +585,7 @@ public void setModeStart(int[] modeStart) { * * @return the mesh mode * - * @see #setMode(com.jme3.scene.Mesh.Mode) + * @see #setMode(GLMesh.Mode) */ public Mode getMode() { return mode; @@ -1254,7 +1254,7 @@ public IndexBuffer getIndexBuffer() { * * @param other The mesh to extract the vertex data from */ - public void extractVertexData(Mesh other) { + public void extractVertexData(GLMesh other) { // Determine the number of unique vertices need to // be created. Also determine the mappings // between old indices to new indices (since we avoid duplicating diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java index 008e987f1d..435f061fa1 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java +++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java @@ -56,7 +56,7 @@ * Geometry defines a leaf node of the scene graph. The leaf node * contains the geometric data for rendering objects. It manages all rendering * information such as a {@link Material} object to define how the surface - * should be shaded and the {@link Mesh} data to contain the actual geometry. + * should be shaded and the {@link GLMesh} data to contain the actual geometry. * * @author Kirill Vainer */ @@ -65,7 +65,7 @@ public class Geometry extends Spatial { // models loaded with shared mesh will be automatically fixed. public static final int SAVABLE_VERSION = 1; private static final Logger logger = Logger.getLogger(Geometry.class.getName()); - protected Mesh mesh; + protected GLMesh mesh; protected transient int lodLevel = 0; protected Material material; /** @@ -126,7 +126,7 @@ public Geometry(String name) { * @param name The name of this geometry * @param mesh The mesh data for this geometry */ - public Geometry(String name, Mesh mesh) { + public Geometry(String name, GLMesh mesh) { this(name); if (mesh == null) { @@ -143,7 +143,7 @@ public Geometry(String name, Mesh mesh) { * @param mesh The mesh data for this geometry * @param material The material for this geometry */ - public Geometry(String name, Mesh mesh, Material material) { + public Geometry(String name, GLMesh mesh, Material material) { this(name, mesh); setMaterial(material); } @@ -177,7 +177,7 @@ public void setIgnoreTransform(boolean ignoreTransform) { * Sets the LOD level to use when rendering the mesh of this geometry. * Level 0 indicates that the default index buffer should be used, * levels [1, LodLevels + 1] represent the levels set on the mesh - * with {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. + * with {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. * * @param lod The lod level to set */ @@ -212,7 +212,7 @@ public int getLodLevel() { * * @return this geometry's mesh vertex count. * - * @see Mesh#getVertexCount() + * @see GLMesh#getVertexCount() */ @Override public int getVertexCount() { @@ -224,7 +224,7 @@ public int getVertexCount() { * * @return this geometry's mesh triangle count. * - * @see Mesh#getTriangleCount() + * @see GLMesh#getTriangleCount() */ @Override public int getTriangleCount() { @@ -238,7 +238,7 @@ public int getTriangleCount() { * * @throws IllegalArgumentException If mesh is null */ - public void setMesh(Mesh mesh) { + public void setMesh(GLMesh mesh) { if (mesh == null) { throw new IllegalArgumentException(); } @@ -256,9 +256,9 @@ public void setMesh(Mesh mesh) { * * @return the mesh to use for this geometry * - * @see #setMesh(com.jme3.scene.Mesh) + * @see #setMesh(GLMesh) */ - public Mesh getMesh() { + public GLMesh getMesh() { return mesh; } @@ -450,7 +450,7 @@ public Matrix4f getWorldMatrix() { /** * Sets the model bound to use for this geometry. * This alters the bound used on the mesh as well via - * {@link Mesh#setBound(com.jme3.bounding.BoundingVolume) } and + * {@link GLMesh#setBound(com.jme3.bounding.BoundingVolume) } and * forces the world bounding volume to be recomputed. * * @param modelBound The model bound to set @@ -585,7 +585,7 @@ public void cloneFields(Cloner cloner, Object original) { this.cachedWorldMat = cloner.clone(cachedWorldMat); // See if we are doing a shallow clone or a deep mesh clone - boolean shallowClone = (cloner.getCloneFunction(Mesh.class) instanceof IdentityCloneFunction); + boolean shallowClone = (cloner.getCloneFunction(GLMesh.class) instanceof IdentityCloneFunction); // See if we clone the mesh using the special animation // semi-deep cloning @@ -731,7 +731,7 @@ public void write(JmeExporter ex) throws IOException { public void read(JmeImporter im) throws IOException { super.read(im); InputCapsule ic = im.getCapsule(this); - mesh = (Mesh) ic.readSavable("mesh", null); + mesh = (GLMesh) ic.readSavable("mesh", null); material = null; String matName = ic.readString("materialName", null); @@ -756,7 +756,7 @@ public void read(JmeImporter im) throws IOException { if (ic.getSavableVersion(Geometry.class) == 0) { // Fix shared mesh (if set) - Mesh sharedMesh = getUserData(UserData.JME_SHAREDMESH); + GLMesh sharedMesh = getUserData(UserData.JME_SHAREDMESH); if (sharedMesh != null) { getMesh().extractVertexData(sharedMesh); setUserData(UserData.JME_SHAREDMESH, null); diff --git a/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java b/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java index db245392ca..6b934ba5e0 100644 --- a/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java @@ -57,7 +57,7 @@ public GeometryGroupNode(String name) { /** * Called by {@link Geometry geom} to specify that its - * {@link Geometry#setMesh(com.jme3.scene.Mesh) mesh} + * {@link Geometry#setMesh(GLMesh) mesh} * has been changed. * * This is also called when the geometry's diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java index 2fe1775d3e..ce2d962e97 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java +++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java @@ -1403,7 +1403,7 @@ public void setLodLevel(int lod) { * are shared if static, or specially cloned if animated. * * @param cloneMaterial true to clone materials, false to share them - * @see Mesh#cloneForAnim() + * @see GLMesh#cloneForAnim() */ public Spatial clone(boolean cloneMaterial) { // Set up the cloner for the type of cloning we want to do. @@ -1421,7 +1421,7 @@ public Spatial clone(boolean cloneMaterial) { // By default, the meshes are not cloned. The geometry // may choose to selectively force them to be cloned, but // normally they will be shared. - cloner.setCloneFunction(Mesh.class, new IdentityCloneFunction()); + cloner.setCloneFunction(GLMesh.class, new IdentityCloneFunction()); // Clone it! Spatial clone = cloner.clone(this); @@ -1453,7 +1453,7 @@ public Spatial oldClone(boolean cloneMaterial) { * Note that meshes of geometries are not cloned explicitly, they * are shared if static, or specially cloned if animated. * - * @see Mesh#cloneForAnim() + * @see GLMesh#cloneForAnim() */ @Override public Spatial clone() { diff --git a/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java index 8c0a388bb7..591ab4d07f 100644 --- a/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java @@ -41,7 +41,7 @@ /** * A VertexBuffer contains a particular type of geometry - * data used by {@link Mesh}es. Every VertexBuffer set on a Mesh + * data used by {@link GLMesh}es. Every VertexBuffer set on a Mesh * is sent as an attribute to the vertex shader to be processed. *

* Several terms are used throughout the javadoc for this class, explanation: diff --git a/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java b/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java index fc03a584c8..f2b01ed732 100644 --- a/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java +++ b/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java @@ -41,7 +41,7 @@ import com.jme3.renderer.RenderManager; import com.jme3.renderer.ViewPort; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.Spatial; import com.jme3.util.clone.JmeCloneable; import java.io.IOException; @@ -128,7 +128,7 @@ public void setSpatial(Spatial spatial) { if(spatial != null) { Geometry geom = (Geometry) spatial; - Mesh mesh = geom.getMesh(); + GLMesh mesh = geom.getMesh(); numLevels = mesh.getNumLodLevels(); numTris = new int[numLevels]; for (int i = numLevels - 1; i >= 0; i--) { diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java index 8f46298693..4eab348759 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java @@ -33,7 +33,7 @@ import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import java.nio.FloatBuffer; @@ -45,7 +45,7 @@ * * @author Kirill Vainer */ -public class Arrow extends Mesh { +public class Arrow extends GLMesh { private final Quaternion tempQuat = new Quaternion(); private final Vector3f tempVec = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java index d2947e52a9..bc801b4475 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java @@ -31,7 +31,7 @@ */ package com.jme3.scene.debug; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; @@ -43,7 +43,7 @@ * * @author Kirill Vainer */ -public class Grid extends Mesh { +public class Grid extends GLMesh { public Grid() { } diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java index f8f450ab47..e7ec73e33c 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java @@ -35,7 +35,7 @@ import com.jme3.export.JmeImporter; import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.Node; import com.jme3.util.clone.Cloner; @@ -151,7 +151,7 @@ public void read(JmeImporter importer) throws IOException { } @SuppressWarnings("unchecked") - private T getMesh(String suffix) { + private T getMesh(String suffix) { Geometry child = (Geometry)getChild(getGeometryName(suffix)); if(child != null) { return (T) child.getMesh(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java index 6db686bed8..14b165ff15 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java @@ -41,7 +41,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -55,7 +55,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class SkeletonInterBoneWire extends Mesh { +public class SkeletonInterBoneWire extends GLMesh { private static final int POINT_AMOUNT = 10; /** The amount of connections between bones. */ private int connectionsAmount; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java index 878b611673..3771f469a9 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java @@ -38,7 +38,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -53,7 +53,7 @@ /** * The class that displays either heads of the bones if no length data is supplied or both heads and tails otherwise. */ -public class SkeletonPoints extends Mesh { +public class SkeletonPoints extends GLMesh { /** The skeleton to be displayed. */ private Skeleton skeleton; /** The map between the bone index and its length. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java index afcecce778..8ad463b3e1 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java @@ -42,7 +42,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -55,7 +55,7 @@ * The class that displays either wires between the bones' heads if no length data is supplied and * full bones' shapes otherwise. */ -public class SkeletonWire extends Mesh { +public class SkeletonWire extends GLMesh { /** The number of bones' connections. Used in non-length mode. */ private int numConnections; /** The skeleton to be displayed. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java index 38593898c1..86827d3e2a 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java @@ -34,7 +34,7 @@ import com.jme3.bounding.BoundingBox; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -42,7 +42,7 @@ import com.jme3.util.BufferUtils; import java.nio.FloatBuffer; -public class WireBox extends Mesh { +public class WireBox extends GLMesh { public WireBox() { this(1,1,1); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java index 9a2de74927..7426d7eeb5 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java @@ -34,7 +34,7 @@ import com.jme3.math.Vector3f; import com.jme3.renderer.Camera; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; @@ -52,7 +52,7 @@ * and four for the far plane. These points are connected by lines * to form a wireframe cube-like structure. */ -public class WireFrustum extends Mesh { +public class WireFrustum extends GLMesh { /** * For Serialization only. Do not use. @@ -161,7 +161,7 @@ public void update(Vector3f[] points) { * @param points An array of 8 `Vector3f` objects representing the frustum's corners. * @return A new `WireFrustum` instance. */ - public static Mesh makeFrustum(Vector3f[] points) { + public static GLMesh makeFrustum(Vector3f[] points) { return new WireFrustum(points); } diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java index 72ee624bb0..5793c2af63 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java @@ -35,7 +35,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -45,7 +45,7 @@ import java.nio.FloatBuffer; import java.nio.ShortBuffer; -public class WireSphere extends Mesh { +public class WireSphere extends GLMesh { private static final int samples = 30; private static final int zSamples = 10; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java index 1fe8bdcdc6..53ccbb7ebe 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java @@ -34,7 +34,7 @@ import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; @@ -45,7 +45,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class ArmatureInterJointsWire extends Mesh { +public class ArmatureInterJointsWire extends GLMesh { private final Vector3f tmp = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java index c46466f181..adc11bd17d 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java @@ -117,8 +117,8 @@ protected final void createSkeletonGeoms(Joint joint, Node joints, Node wires, N if (ends == null) { geomToJoint.put(jGeom, joint); } else { - Mesh m = null; - Mesh mO = null; + GLMesh m = null; + GLMesh mO = null; Node wireAttach = wires; Node outlinesAttach = outlines; if (ends.length == 1) { diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java index 989667eb23..c8a541be97 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java @@ -32,10 +32,10 @@ package com.jme3.scene.debug.custom; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Type; -public class JointShape extends Mesh { +public class JointShape extends GLMesh { /** * Serialization only. Do not use. diff --git a/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java b/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java index 821264f9a6..ef277e7d40 100644 --- a/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java @@ -59,11 +59,11 @@ static void setGeometryStartIndex2(Geometry geom, int startIndex) { private static final class InstanceTypeKey implements Cloneable, JmeCloneable { - Mesh mesh; + GLMesh mesh; Material material; int lodLevel; - public InstanceTypeKey(Mesh mesh, Material material, int lodLevel) { + public InstanceTypeKey(GLMesh mesh, Material material, int lodLevel) { this.mesh = mesh; this.material = material; this.lodLevel = lodLevel; diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java index 29ff8050c7..66fd775c04 100644 --- a/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java @@ -36,6 +36,7 @@ import java.nio.IntBuffer; import java.nio.ShortBuffer; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Format; import com.jme3.util.BufferUtils; @@ -170,7 +171,7 @@ public int remaining() { * Returns the format of the data stored in this buffer. * *

This method can be used to set an {@link IndexBuffer} to a - * {@link com.jme3.scene.Mesh Mesh}:

+ * {@link GLMesh Mesh}:

*
      * mesh.setBuffer(Type.Index, 3, 
      *     indexBuffer.getFormat(), indexBuffer);
diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
index c3144e6b97..114ba5f77a 100644
--- a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
@@ -31,7 +31,7 @@
  */
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer.Format;
 
 import java.nio.Buffer;
diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
index f6c9d4bfea..1b318c0ef5 100644
--- a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
@@ -31,8 +31,8 @@
  */
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.Mesh;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import java.nio.Buffer;
 
@@ -50,7 +50,7 @@ public class WrappedIndexBuffer extends VirtualIndexBuffer {
 
     private final IndexBuffer ib;
 
-    public WrappedIndexBuffer(Mesh mesh){
+    public WrappedIndexBuffer(GLMesh mesh){
         super(mesh.getVertexCount(), mesh.getMode());
         this.ib = mesh.getIndexBuffer();
         switch (meshMode){
@@ -83,7 +83,7 @@ public Buffer getBuffer() {
         return ib.getBuffer();
     }
     
-    public static void convertToList(Mesh mesh){
+    public static void convertToList(GLMesh mesh){
         IndexBuffer inBuf = mesh.getIndicesAsList();
         IndexBuffer outBuf = IndexBuffer.createIndexBuffer(mesh.getVertexCount(),
                                                            inBuf.size());
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
index e096a91a4c..ac7fdd7d60 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
@@ -33,7 +33,7 @@
 
 import com.jme3.export.*;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 
 import java.io.IOException;
 
@@ -50,7 +50,7 @@
  * @author Ian Phillips
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public abstract class AbstractBox extends Mesh {
+public abstract class AbstractBox extends GLMesh {
 
     public final Vector3f center = new Vector3f(0f, 0f, 0f);
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
index cfe51dbaff..c20d7d8301 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
@@ -35,7 +35,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 
@@ -51,7 +51,7 @@
  *
  * @author Kirill Vainer
  */
-public class CenterQuad extends Mesh {
+public class CenterQuad extends GLMesh {
 
     private float width;
     private float height;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
index e1b7dd994f..b2b04fbf33 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Spline;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import java.util.Iterator;
 import java.util.List;
@@ -47,7 +47,7 @@
  *
  * @author Nehon
  */
-public class Curve extends Mesh {
+public class Curve extends GLMesh {
 
     private Spline spline;
     private Vector3f temp = new Vector3f();
@@ -132,7 +132,7 @@ private void createCatmullRomMesh(int nbSubSegments) {
             i++;
         }
 
-        this.setMode(Mesh.Mode.Lines);
+        this.setMode(GLMesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);//(spline.getControlPoints().size() - 1) * nbSubSegments * 2
         this.updateBound();
@@ -184,7 +184,7 @@ private void createBezierMesh(int nbSubSegments) {
             indices[i++] = (short) k;
         }
 
-        this.setMode(Mesh.Mode.Lines);
+        this.setMode(GLMesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);
         this.updateBound();
@@ -228,7 +228,7 @@ private void createNurbMesh(int nbSubSegments) {
                 indices[i++] = (short) (j + 1);
             }
 
-            this.setMode(Mesh.Mode.Lines);
+            this.setMode(GLMesh.Mode.Lines);
             this.setBuffer(VertexBuffer.Type.Position, 3, array);
             this.setBuffer(VertexBuffer.Type.Index, 2, indices);
             this.updateBound();
@@ -262,7 +262,7 @@ private void createLinearMesh() {
             }
         }
 
-        this.setMode(Mesh.Mode.Lines);
+        this.setMode(GLMesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);
         this.updateBound();
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
index 36df9d9892..4ac7cfb950 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -50,7 +50,7 @@
  * @author Mark Powell
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Cylinder extends Mesh {
+public class Cylinder extends GLMesh {
 
     private int axisSamples;
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
index 5cfd312f82..99a2b96619 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.TempVars;
@@ -53,7 +53,7 @@
  * @author Joshua Slack (Original sphere code that was adapted)
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Dome extends Mesh {
+public class Dome extends GLMesh {
 
     private int planes;
     private int radialSamples;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
index c9c5f3c197..18173646a2 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
@@ -36,7 +36,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
@@ -47,7 +47,7 @@
  * 
  * @author Brent Owens
  */
-public class Line extends Mesh {
+public class Line extends GLMesh {
 
     private Vector3f start = new Vector3f();
     private Vector3f end = new Vector3f();
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
index d301a98675..0509df9878 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import static com.jme3.util.BufferUtils.*;
 import java.io.IOException;
@@ -51,7 +51,7 @@
  * @author Joshua Slack, Eric Woroshow
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class PQTorus extends Mesh {
+public class PQTorus extends GLMesh {
 
     private float p, q;
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
index 07c161c301..646009501e 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
@@ -36,7 +36,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 
@@ -48,7 +48,7 @@
  *
  * @author Kirill Vainer
  */
-public class Quad extends Mesh {
+public class Quad extends GLMesh {
 
     private float width;
     private float height;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
index 6f16847390..71e9724db2 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Rectangle;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.clone.Cloner;
@@ -71,7 +71,7 @@
  *
  * @author Francivan Bezerra
  */
-public class RectangleMesh extends Mesh {
+public class RectangleMesh extends GLMesh {
 
     /**
      * Used to locate the vertices and calculate a default normal.
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
index f4b2ba34c6..6d0deff9f1 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.TempVars;
@@ -53,7 +53,7 @@
  * @author Joshua Slack
  * @version $Revision: 4163 $, $Date: 2009-03-24 21:14:55 -0400 (Tue, 24 Mar 2009) $
  */
-public class Sphere extends Mesh {
+public class Sphere extends GLMesh {
 
     public enum TextureMode {
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
index 9beef259e4..f881031a7a 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Spline.SplineType;
 import com.jme3.math.Vector3f;
 import com.jme3.math.Vector4f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -56,7 +56,7 @@
  * a) NURBS
  * @author Marcin Roguski (Kealthas)
  */
-public class Surface extends Mesh {
+public class Surface extends GLMesh {
     private SplineType           type;                // the type of the surface
     private List> controlPoints;       // space control points and their weights
     private List[]        knots;               // knots of the surface
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
index d3e75d6faf..7d49cc9eb1 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
@@ -37,7 +37,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -52,7 +52,7 @@
  * @author Mark Powell
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Torus extends Mesh {
+public class Torus extends GLMesh {
 
     private int circleSamples;
 
diff --git a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
index 28eb6b5231..4534d9a872 100644
--- a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
+++ b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
@@ -40,7 +40,7 @@
 import com.jme3.renderer.Renderer;
 import com.jme3.renderer.Statistics;
 import com.jme3.renderer.TextureUnitException;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.shader.Shader;
 import com.jme3.shader.Shader.ShaderSource;
@@ -195,7 +195,7 @@ public void deleteBuffer(BufferObject bo) {
     }
 
     @Override
-    public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) {
+    public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) {
     }
 
     @Override
diff --git a/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java b/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
index f19aacd914..6961d1a382 100644
--- a/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
+++ b/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
@@ -135,7 +135,7 @@ private static List initVertexData(int size) {
         return vertices;
     }
 
-    public static void generate(Mesh mesh) {
+    public static void generate(GLMesh mesh) {
         generate(mesh, true, false);
     }
 
@@ -147,7 +147,7 @@ public static void generate(Spatial scene, boolean splitMirrored) {
             }
         } else {
             Geometry geom = (Geometry) scene;
-            Mesh mesh = geom.getMesh();
+            GLMesh mesh = geom.getMesh();
 
             // Check to ensure mesh has texcoords and normals before generating
             if (mesh.getBuffer(Type.TexCoord) != null
@@ -162,13 +162,13 @@ public static void generate(Spatial scene) {
     }
 
     public static void generateParallel(Spatial scene, ExecutorService executor) {
-        final Set meshes = new HashSet<>();
+        final Set meshes = new HashSet<>();
         scene.breadthFirstTraversal(new SceneGraphVisitor() {
             @Override
             public void visit(Spatial spatial) {
                 if (spatial instanceof Geometry) {
                     Geometry geom = (Geometry) spatial;
-                    Mesh mesh = geom.getMesh();
+                    GLMesh mesh = geom.getMesh();
 
                     // Check to ensure mesh has texcoords and normals before generating
                     if (mesh.getBuffer(Type.TexCoord) != null
@@ -179,7 +179,7 @@ public void visit(Spatial spatial) {
             }
         });
         List> futures = new ArrayList<>();
-        for (final Mesh m : meshes) {
+        for (final GLMesh m : meshes) {
             futures.add(executor.submit(new Runnable() {
                 @Override
                 public void run() {
@@ -196,7 +196,7 @@ public void run() {
         }
     }
 
-    public static void generate(Mesh mesh, boolean approxTangents, boolean splitMirrored) {
+    public static void generate(GLMesh mesh, boolean approxTangents, boolean splitMirrored) {
         int[] index = new int[3];
         Vector3f[] v = new Vector3f[3];
         Vector2f[] t = new Vector2f[3];
@@ -233,12 +233,12 @@ public static void generate(Mesh mesh, boolean approxTangents, boolean splitMirr
         TangentUtils.generateBindPoseTangentsIfNecessary(mesh);
     }
 
-    public static void generate(Mesh mesh, boolean approxTangents) {
+    public static void generate(GLMesh mesh, boolean approxTangents) {
         generate(mesh, approxTangents, false);
     }
 
-    private static List processTriangles(Mesh mesh,
-            int[] index, Vector3f[] v, Vector2f[] t, boolean splitMirrored) {
+    private static List processTriangles(GLMesh mesh,
+                                                     int[] index, Vector3f[] v, Vector2f[] t, boolean splitMirrored) {
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         if (mesh.getBuffer(Type.TexCoord) == null) {
@@ -273,7 +273,7 @@ private static List processTriangles(Mesh mesh,
     // Don't remove the split mirrored boolean. It's not used right now, but I intend to
     // make this method also split vertices with rotated tangent space, and I'll
     // add another splitRotated boolean.
-    private static List splitVertices(Mesh mesh, List vertexData, boolean splitMirrored) {
+    private static List splitVertices(GLMesh mesh, List vertexData, boolean splitMirrored) {
         
         int nbVertices = mesh.getBuffer(Type.Position).getNumElements();
         List newVertices = new ArrayList<>();
@@ -446,8 +446,8 @@ private static void putValue(VertexBuffer.Format format, Buffer buf1, Buffer buf
         }
     }
 
-    private static List processTriangleStrip(Mesh mesh,
-            int[] index, Vector3f[] v, Vector2f[] t) {
+    private static List processTriangleStrip(GLMesh mesh,
+                                                         int[] index, Vector3f[] v, Vector2f[] t) {
         
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
@@ -495,8 +495,8 @@ private static List processTriangleStrip(Mesh mesh,
         return vertices;
     }
 
-    private static List processTriangleFan(Mesh mesh,
-            int[] index, Vector3f[] v, Vector2f[] t) {
+    private static List processTriangleFan(GLMesh mesh,
+                                                       int[] index, Vector3f[] v, Vector2f[] t) {
         
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
@@ -627,7 +627,7 @@ private static boolean approxEqual(Vector2f u, Vector2f v) {
                 && (FastMath.abs(u.y - v.y) < tolerance);
     }
 
-    private static ArrayList linkVertices(Mesh mesh, boolean splitMirrored) {
+    private static ArrayList linkVertices(GLMesh mesh, boolean splitMirrored) {
         ArrayList vertexMap = new ArrayList<>();
 
         FloatBuffer vertexBuffer = mesh.getFloatBuffer(Type.Position);
@@ -672,8 +672,8 @@ && approxEqual(vertexInfo.texCoord, texCoord)) {
         return vertexMap;
     }
 
-    private static void processTriangleData(Mesh mesh, List vertices,
-            boolean approxTangent, boolean splitMirrored) {
+    private static void processTriangleData(GLMesh mesh, List vertices,
+                                            boolean approxTangent, boolean splitMirrored) {
         ArrayList vertexMap = linkVertices(mesh, splitMirrored);
 
         FloatBuffer tangents = BufferUtils.createFloatBuffer(vertices.size() * 4);
@@ -841,7 +841,7 @@ private static void processTriangleData(Mesh mesh, List vertices,
         mesh.updateCounts();
     }
 
-    private static void writeColorBuffer(List vertices, ColorRGBA[] cols, Mesh mesh) {
+    private static void writeColorBuffer(List vertices, ColorRGBA[] cols, GLMesh mesh) {
         FloatBuffer colors = BufferUtils.createFloatBuffer(vertices.size() * 4);
         colors.rewind();
         for (ColorRGBA color : cols) {
@@ -863,18 +863,18 @@ private static int parity(Vector3f n1, Vector3f n) {
     }
 
     /**
-     * @deprecated Use {@link TangentUtils#genTbnLines(com.jme3.scene.Mesh, float) } instead.
+     * @deprecated Use {@link TangentUtils#genTbnLines(GLMesh, float) } instead.
      */
     @Deprecated
-    public static Mesh genTbnLines(Mesh mesh, float scale) {
+    public static GLMesh genTbnLines(GLMesh mesh, float scale) {
         return TangentUtils.genTbnLines(mesh, scale);
     }
 
     /**
-     * @deprecated Use {@link TangentUtils#genNormalLines(com.jme3.scene.Mesh, float) } instead.
+     * @deprecated Use {@link TangentUtils#genNormalLines(GLMesh, float) } instead.
      */
     @Deprecated
-    public static Mesh genNormalLines(Mesh mesh, float scale) {
+    public static GLMesh genNormalLines(GLMesh mesh, float scale) {
         return TangentUtils.genNormalLines(mesh, scale);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/util/TangentUtils.java b/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
index 2014eaf003..145a332787 100644
--- a/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
+++ b/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
@@ -53,7 +53,7 @@ public class TangentUtils {
     private TangentUtils() {
     }
 
-    public static void generateBindPoseTangentsIfNecessary(Mesh mesh){
+    public static void generateBindPoseTangentsIfNecessary(GLMesh mesh){
         if (mesh.getBuffer(VertexBuffer.Type.BindPosePosition) != null) {
 
             VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
@@ -73,7 +73,7 @@ public static void generateBindPoseTangentsIfNecessary(Mesh mesh){
         }
     }
 
-    public static Mesh genTbnLines(Mesh mesh, float scale) {
+    public static GLMesh genTbnLines(GLMesh mesh, float scale) {
         if (mesh.getBuffer(Type.Tangent) == null) {
             return genNormalLines(mesh, scale);
         } else {
@@ -81,15 +81,15 @@ public static Mesh genTbnLines(Mesh mesh, float scale) {
         }
     }
 
-    public static Mesh genNormalLines(Mesh mesh, float scale) {
+    public static GLMesh genNormalLines(GLMesh mesh, float scale) {
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         FloatBuffer normalBuffer = (FloatBuffer) mesh.getBuffer(Type.Normal).getData();
 
         ColorRGBA originColor = ColorRGBA.White;
         ColorRGBA normalColor = ColorRGBA.Blue;
 
-        Mesh lineMesh = new Mesh();
-        lineMesh.setMode(Mesh.Mode.Lines);
+        GLMesh lineMesh = new GLMesh();
+        lineMesh.setMode(GLMesh.Mode.Lines);
 
         Vector3f origin = new Vector3f();
         Vector3f point = new Vector3f();
@@ -120,7 +120,7 @@ public static Mesh genNormalLines(Mesh mesh, float scale) {
         return lineMesh;
     }
 
-    public static Mesh genTangentLines(Mesh mesh, float scale) {
+    public static GLMesh genTangentLines(GLMesh mesh, float scale) {
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         FloatBuffer normalBuffer = (FloatBuffer) mesh.getBuffer(Type.Normal).getData();
         FloatBuffer tangentBuffer = (FloatBuffer) mesh.getBuffer(Type.Tangent).getData();
@@ -135,8 +135,8 @@ public static Mesh genTangentLines(Mesh mesh, float scale) {
         ColorRGBA binormalColor = ColorRGBA.Green;
         ColorRGBA normalColor = ColorRGBA.Blue;
 
-        Mesh lineMesh = new Mesh();
-        lineMesh.setMode(Mesh.Mode.Lines);
+        GLMesh lineMesh = new GLMesh();
+        lineMesh.setMode(GLMesh.Mode.Lines);
 
         Vector3f origin = new Vector3f();
         Vector3f point = new Vector3f();
diff --git a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
index 18417b6b4c..ac9197acc1 100644
--- a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
+++ b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
@@ -31,7 +31,7 @@
  */
 package com.jme3.util.mikktspace;
 
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.util.BufferUtils;
@@ -43,10 +43,10 @@
  */
 public class MikkTSpaceImpl implements MikkTSpaceContext {
 
-    Mesh mesh;
+    GLMesh mesh;
     final private IndexBuffer index;
 
-    public MikkTSpaceImpl(Mesh mesh) {
+    public MikkTSpaceImpl(GLMesh mesh) {
         this.mesh = mesh;
 
         // If the mesh lacks indices, generate a virtual index buffer.
diff --git a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
index 0f272bd080..5fec028ecc 100644
--- a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
+++ b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
@@ -112,7 +112,7 @@ public static void generate(Spatial s){
 
         } else if (s instanceof Geometry) {
             Geometry g = (Geometry) s;
-            Mesh mesh = g.getMesh();
+            GLMesh mesh = g.getMesh();
             boolean success = generateTangents(mesh);
             if (!success) {
                 logger.log(Level.SEVERE, "Failed to generate tangents for geometry {0}", g.getName());
@@ -120,15 +120,15 @@ public static void generate(Spatial s){
         }
     }
 
-    public static void generate(Mesh mesh) {
+    public static void generate(GLMesh mesh) {
         boolean success = generateTangents(mesh);
         if (!success) {
             logger.log(Level.SEVERE, "Failed to generate tangents for mesh {0}", mesh);
         }
     }
 
-    private static boolean generateTangents(Mesh mesh) {
-        Mesh.Mode mode = mesh.getMode();
+    private static boolean generateTangents(GLMesh mesh) {
+        GLMesh.Mode mode = mesh.getMode();
         boolean hasTriangles;
         
         if (mesh.getBuffer(Type.TexCoord) == null || mesh.getBuffer(Type.Normal) == null) {
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java b/jme3-core/src/main/java/com/jme3/util/natives/AbstractNative.java
similarity index 86%
rename from jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java
rename to jme3-core/src/main/java/com/jme3/util/natives/AbstractNative.java
index e364df5a5d..c5b1e60190 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java
+++ b/jme3-core/src/main/java/com/jme3/util/natives/AbstractNative.java
@@ -1,7 +1,5 @@
-package com.jme3.vulkan;
+package com.jme3.util.natives;
 
-import com.jme3.util.natives.Native;
-import com.jme3.util.natives.NativeReference;
 import org.lwjgl.system.MemoryStack;
 
 public abstract class AbstractNative implements Native {
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java b/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java
index b03e28f4e7..86f6c5602e 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java
@@ -1,6 +1,7 @@
 package com.jme3.vulkan;
 
 import com.jme3.system.JmeVersion;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.util.natives.Native;
 import org.lwjgl.PointerBuffer;
 import org.lwjgl.glfw.GLFWVulkan;
@@ -11,6 +12,7 @@
 import org.lwjgl.vulkan.VkInstanceCreateInfo;
 
 import java.util.*;
+import java.util.logging.Level;
 
 import static com.jme3.renderer.vulkan.VulkanUtils.*;
 import static org.lwjgl.vulkan.VK10.*;
@@ -25,6 +27,7 @@ public class VulkanInstance extends AbstractNative {
     private String appName = "Unnamed App";
     private int appVersion = VK_MAKE_VERSION(0, 0, 0);
     private int apiVersion;
+    private VulkanLogger logger;
 
     public VulkanInstance() {
         this(VK_API_VERSION_1_0);
@@ -39,6 +42,14 @@ public Runnable createNativeDestroyer() {
         return () -> vkDestroyInstance(object, null);
     }
 
+    public VulkanLogger createLogger(Level exceptionThreshold) {
+        return logger = new VulkanLogger(this, exceptionThreshold);
+    }
+
+    public VulkanLogger getLogger() {
+        return logger;
+    }
+
     public Set getExtensions() {
         return extensions;
     }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java
index 01878c12e0..4c72abcb85 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java
@@ -2,7 +2,7 @@
 
 import com.jme3.renderer.vulkan.VulkanUtils;
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.memory.MemoryProp;
 import com.jme3.vulkan.memory.MemoryRegion;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java
index ff41f587a6..11c8f8cced 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.descriptors;
 
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import org.lwjgl.system.MemoryStack;
 import org.lwjgl.vulkan.VkWriteDescriptorSet;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java
index fa453884fe..af92f359a0 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java
@@ -2,7 +2,7 @@
 
 import com.jme3.util.natives.Native;
 import com.jme3.vulkan.VulkanInstance;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.commands.CommandPool;
 import com.jme3.vulkan.commands.Queue;
 import com.jme3.vulkan.util.Flag;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java
index c913b1588d..c23314215d 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java
@@ -1,6 +1,7 @@
 package com.jme3.vulkan.frames;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.function.IntFunction;
 
@@ -42,4 +43,9 @@ public int getNumResources() {
         return resources.size();
     }
 
+    @Override
+    public Iterator iterator() {
+        return resources.iterator();
+    }
+
 }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java
index e3207111cd..4e3e6972cc 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java
@@ -1,5 +1,7 @@
 package com.jme3.vulkan.frames;
 
+import java.util.Iterator;
+
 public class SingleResource  implements VersionedResource {
 
     private T resource;
@@ -35,4 +37,31 @@ public int getNumResources() {
         return 1;
     }
 
+    @Override
+    public Iterator iterator() {
+        return new IteratorImpl<>(resource);
+    }
+
+    private static class IteratorImpl  implements Iterator {
+
+        private T value;
+
+        public IteratorImpl(T value) {
+            this.value = value;
+        }
+
+        @Override
+        public boolean hasNext() {
+            return value != null;
+        }
+
+        @Override
+        public T next() {
+            T v = value;
+            value = null;
+            return v;
+        }
+
+    }
+
 }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java
index ea14b3d4b3..f18b1c0f36 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java
@@ -5,7 +5,7 @@
  *
  * @param  resource type
  */
-public interface VersionedResource {
+public interface VersionedResource extends Iterable {
 
     /**
      * Sets the resource for the current frame.
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java
index 046a6b7144..509bb5fd86 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java
@@ -2,7 +2,7 @@
 
 import com.jme3.util.natives.Native;
 import com.jme3.util.natives.NativeReference;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.Format;
 import com.jme3.vulkan.SharingMode;
 import com.jme3.vulkan.commands.CommandBuffer;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java b/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java
index 74d3ebb750..62d558a4e6 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.images;
 
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.Swizzle;
 import com.jme3.vulkan.util.Flag;
 import com.jme3.vulkan.util.IntEnum;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java
index 1f011a9960..43be80e270 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.images;
 
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pipelines.CompareOp;
 import com.jme3.vulkan.util.IntEnum;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
index 1821e4009f..0d8bb0f4b1 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
@@ -23,8 +23,9 @@ protected enum VertexMode {
 
     protected final MeshDescription description;
     private final List vertexBuffers = new ArrayList<>();
-    protected VersionedResource indexBuffer;
-    private BoundingVolume bound;
+    protected final List> indexBuffers = new ArrayList<>();
+    private GpuBuffer boundIndexBuffer;
+    private BoundingVolume volume;
     private int vertices;
 
     public AdaptiveMesh(MeshDescription description) {
@@ -44,15 +45,18 @@ public void bind(CommandBuffer cmd) {
             offsets.flip();
             vkCmdBindVertexBuffers(cmd.getBuffer(), 0, verts, offsets);
         }
-        if (indexBuffer != null) {
-            vkCmdBindIndexBuffer(cmd.getBuffer(), indexBuffer.get().getId(), 0, IndexType.of(indexBuffer.get()).getEnum());
+        if (!indexBuffers.isEmpty()) {
+            boundIndexBuffer = indexBuffers.get(0).get();
+            vkCmdBindIndexBuffer(cmd.getBuffer(), boundIndexBuffer.getId(), 0, IndexType.of(boundIndexBuffer).getEnum());
+        } else {
+            boundIndexBuffer = null;
         }
     }
 
     @Override
     public void draw(CommandBuffer cmd) {
-        if (indexBuffer != null) {
-            vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.get().size().getElements(), 1, 0, 0, 0);
+        if (boundIndexBuffer != null) {
+            vkCmdDrawIndexed(cmd.getBuffer(), boundIndexBuffer.size().getElements(), 1, 0, 0, 0);
         } else {
             vkCmdDraw(cmd.getBuffer(), vertices, 1, 0, 0);
         }
@@ -65,7 +69,7 @@ public int getVertexCount() {
 
     @Override
     public int getTriangleCount() {
-        return indexBuffer != null ? indexBuffer.get().size().getElements() / 3 : 0;
+        return !indexBuffers.isEmpty() ? indexBuffers.get(0).get().size().getElements() / 3 : 0;
     }
 
     protected void updateBound(AttributeModifier attribute) {
@@ -107,7 +111,7 @@ protected AttributeModifier modifyAttribute(BuiltInAttribute name) {
 
     protected abstract VersionedResource createStaticBuffer(MemorySize size);
 
-    protected Builder build(int vertices) {
+    protected Builder buildVertexBuffers(int vertices) {
         return new Builder(vertices);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
index cc0ce22a7d..8d12bf3843 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
@@ -27,13 +27,15 @@ public MyCustomMesh(LogicalDevice device,
         this.device = device;
         this.frames = frames;
         this.updateStaticBuffers = updateSharedBuffers;
-        StaticBuffer indices = new StaticBuffer(device, MemorySize.shorts(6), BufferUsage.Index, MemoryProp.DeviceLocal, false);
-        ShortBuffer iBuf = indices.mapShorts();
-        iBuf.put((short)0).put((short)2).put((short)3)
-            .put((short)0).put((short)1).put((short)2);
-        indices.unmap();
-        indexBuffer = updateSharedBuffers.add(new SingleCommand<>(indices));
-        try (Builder m = build(4)) {
+        VersionedResource indices = createStaticBuffer(MemorySize.shorts(6));
+        indexBuffers.add(indices);
+        for (GpuBuffer buf : indices) {
+            ShortBuffer iBuf = buf.mapShorts();
+            iBuf.put((short)0).put((short)2).put((short)3)
+                .put((short)0).put((short)1).put((short)2);
+            buf.unmap();
+        }
+        try (Builder m = buildVertexBuffers(4)) {
             m.setMode(BuiltInAttribute.Position, VertexMode.Static);
             m.setMode(BuiltInAttribute.TexCoord, VertexMode.Static);
             m.setMode(BuiltInAttribute.Normal, VertexMode.Static);
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java b/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java
index 8d8c46ade5..5788f3c21e 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java
@@ -3,7 +3,7 @@
 import com.jme3.util.natives.Native;
 import com.jme3.vulkan.Format;
 import com.jme3.vulkan.commands.CommandBuffer;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pipelines.FrameBuffer;
 import com.jme3.vulkan.pipelines.PipelineBindPoint;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java
index 79858502ba..aec10648fc 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.pipelines;
 
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.*;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pass.RenderPass;
 import com.jme3.vulkan.pipelines.states.*;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java
index 0b03611ffe..10037d5286 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.pipelines;
 
 import com.jme3.vulkan.commands.CommandBuffer;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 
 import static org.lwjgl.vulkan.VK10.*;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java
index c71be87f88..952a73c000 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java
@@ -1,5 +1,6 @@
 package com.jme3.vulkan.surface;
 
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.util.natives.Native;
 import com.jme3.util.natives.NativeReference;
 import com.jme3.vulkan.*;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java b/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java
index b14c7d19e9..a8bc0c3572 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.sync;
 
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pipelines.PipelineStage;
 import com.jme3.vulkan.util.Flag;
diff --git a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
index cd2b4a29e8..d1f198ad12 100644
--- a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
+++ b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
@@ -38,7 +38,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.scene.*;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.scene.mesh.IndexIntBuffer;
@@ -417,7 +417,7 @@ protected Geometry createGeometry(ArrayList faceList, String matName) thro
             throw new IOException("No geometry data to generate mesh");
 
         // Create mesh from the faces
-        Mesh mesh = constructMesh(faceList);
+        GLMesh mesh = constructMesh(faceList);
         
         Geometry geom = new Geometry(objName + "-geom-" + (geomIndex++), mesh);
         
@@ -446,8 +446,8 @@ protected Geometry createGeometry(ArrayList faceList, String matName) thro
         return geom;
     }
 
-    protected Mesh constructMesh(ArrayList faceList){
-        Mesh m = new Mesh();
+    protected GLMesh constructMesh(ArrayList faceList){
+        GLMesh m = new GLMesh();
         m.setMode(Mode.Triangles);
 
         boolean hasTexCoord = false;
diff --git a/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java b/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
index 0a4a04249d..d4ec411e41 100644
--- a/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
+++ b/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.shape.Quad;
 import com.jme3.system.JmeSystem;
@@ -77,7 +77,7 @@ void castRay(Ray ray, int expectedNumResults) {
      * 0). It is composed of 2 triangles.
      */
     void createRedSquare() {
-        Mesh quadMesh = new Quad(1f, 1f);
+        GLMesh quadMesh = new Quad(1f, 1f);
         Geometry redSquare = new Geometry("red square", quadMesh);
         Material red = assetManager.loadMaterial("Common/Materials/RedColor.j3m");
         redSquare.setMaterial(red);
diff --git a/jme3-core/src/test/java/com/jme3/light/LightSortTest.java b/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
index 1be8305bc8..5a53a81504 100644
--- a/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
+++ b/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import org.junit.Test;
 
@@ -46,7 +46,7 @@ public class LightSortTest {
     
     @Test
     public void testSimpleSort() {
-        Geometry g = new Geometry("test", new Mesh());
+        Geometry g = new Geometry("test", new GLMesh());
         LightList list = new LightList(g);
         
         list.add(new SpotLight(Vector3f.ZERO, Vector3f.UNIT_X));
@@ -65,7 +65,7 @@ public void testSimpleSort() {
     @Test
     public void testSceneGraphSort() {
         Node n = new Node("node");
-        Geometry g = new Geometry("geom", new Mesh());
+        Geometry g = new Geometry("geom", new GLMesh());
         SpotLight spot = new SpotLight(Vector3f.ZERO, Vector3f.UNIT_X);
         PointLight point = new PointLight(Vector3f.UNIT_X);
         DirectionalLight directional = new DirectionalLight(Vector3f.UNIT_X);
diff --git a/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java b/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
index 929281819e..6595f43d68 100644
--- a/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
+++ b/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
@@ -38,7 +38,7 @@
 import com.jme3.renderer.queue.GeometryList;
 import com.jme3.renderer.queue.OpaqueComparator;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.shape.Box;
 import com.jme3.system.TestUtil;
 import com.jme3.texture.Image;
@@ -55,7 +55,7 @@
 
 public class OpaqueComparatorTest {
     
-    private final Mesh mesh = new Box(1,1,1);
+    private final GLMesh mesh = new Box(1,1,1);
     final private Camera cam = new Camera(1, 1);
     private RenderManager renderManager;
     private AssetManager assetManager;
diff --git a/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java b/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
index e7f1013f62..abc6e52246 100644
--- a/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
@@ -84,7 +84,7 @@ void castRay() {
      * 0). It is composed of 2 triangles.
      */
     void createRedSquare() {
-        Mesh quadMesh = new Quad(1f, 1f);
+        GLMesh quadMesh = new Quad(1f, 1f);
         Geometry redSquare = new Geometry("red square", quadMesh);
         Material red = assetManager.loadMaterial("Common/Materials/RedColor.j3m");
         redSquare.setMaterial(red);
@@ -95,8 +95,8 @@ void createRedSquare() {
      * Attach a pair of parallel white lines in the z=1 plane.
      */
     void createWhiteLines() {
-        Mesh lineMesh = new Mesh();
-        lineMesh.setMode(Mesh.Mode.Lines);
+        GLMesh lineMesh = new GLMesh();
+        lineMesh.setMode(GLMesh.Mode.Lines);
         float[] corners = new float[]{
             -1f, -1f, 0f,
             -1f, 1f, 0f,
diff --git a/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java b/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
index 27f0cda591..f40e42a90c 100644
--- a/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
@@ -36,7 +36,7 @@
 
 import org.junit.Test;
 
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 
 /**
  * Tests selected methods of the Mesh class.
@@ -50,7 +50,7 @@ public class MeshTest {
      */
     @Test
     public void testVertexCountOfEmptyMesh() {
-        final Mesh mesh = new Mesh();
+        final GLMesh mesh = new GLMesh();
 
         assertEquals(-1, mesh.getVertexCount());
     }
diff --git a/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java b/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
index a81ed9f5aa..ea6cc2d3dc 100644
--- a/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
@@ -1,6 +1,6 @@
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh.Mode;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
diff --git a/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java b/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
index cdf1e9fad5..72dfddbaf5 100644
--- a/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
+++ b/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
@@ -38,7 +38,7 @@
 
 import com.jme3.asset.AssetManager;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -113,8 +113,8 @@ public void testSphereReductionCollapsCost() {
     /**
      * Returns the mesh of a node.
      */
-    private Mesh getMesh(Node node) {
-        Mesh m = null;
+    private GLMesh getMesh(Node node) {
+        GLMesh m = null;
         for (Spatial spatial : node.getChildren()) {
             if (spatial instanceof Geometry) {
                 m = ((Geometry) spatial).getMesh();
@@ -131,7 +131,7 @@ private Mesh getMesh(Node node) {
      * Returns the Monkey mesh used in the TestLodGeneration stresstest. Note: Doesn't work durring gradle
      * build.
      */
-    private Mesh monkey() {
+    private GLMesh monkey() {
         Node model = (Node) assetManager.loadModel("Models/Jaime/Jaime.j3o");
         return getMesh(model);
     }
@@ -139,7 +139,7 @@ private Mesh monkey() {
     /**
      * Returns a 12x12 Sphere mesh.
      */
-    private Mesh sphere() {
+    private GLMesh sphere() {
         return new Sphere(12, 12, 1, false, false);
     }
 
diff --git a/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java b/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
index 3cc91ef6f6..1fa3ff9bee 100644
--- a/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
+++ b/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
@@ -32,7 +32,7 @@
 package com.jme3.util;
 
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.mikktspace.MikktspaceTangentGenerator;
 import java.nio.FloatBuffer;
@@ -81,7 +81,7 @@ public void testIssue1909() {
                 +posRadius, 0f, -posRadius,
                 -posRadius, 0f, -posRadius
         );
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         int numAxes = 3;
         mesh.setBuffer(VertexBuffer.Type.Normal, numAxes, normals);
         mesh.setBuffer(VertexBuffer.Type.Position, numAxes, positions);
diff --git a/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java b/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
index 87283c1c9a..b662f28419 100644
--- a/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
+++ b/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
@@ -32,7 +32,7 @@
 package com.jme3.util;
 
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.mikktspace.MikktspaceTangentGenerator;
 import java.nio.FloatBuffer;
@@ -56,7 +56,7 @@ public class TestIssue1919 {
      */
     @Test(expected = UnsupportedOperationException.class)
     public void testHybrid() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.Hybrid);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.Hybrid);
         MikktspaceTangentGenerator.generate(testGeometry);
     }
 
@@ -65,10 +65,10 @@ public void testHybrid() {
      */
     @Test
     public void testLineLoop() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.LineLoop);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.LineLoop);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        Mesh mesh = testGeometry.getMesh();
+        GLMesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); /// skipped this mesh
     }
@@ -78,10 +78,10 @@ public void testLineLoop() {
      */
     @Test
     public void testLineStrip() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.LineStrip);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.LineStrip);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        Mesh mesh = testGeometry.getMesh();
+        GLMesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); /// skipped this mesh
     }
@@ -91,10 +91,10 @@ public void testLineStrip() {
      */
     @Test
     public void testLines() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.Lines);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.Lines);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        Mesh mesh = testGeometry.getMesh();
+        GLMesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); // skipped this mesh
     }
@@ -104,7 +104,7 @@ public void testLines() {
      */
     @Test(expected = UnsupportedOperationException.class)
     public void testPatch() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.Patch);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.Patch);
         MikktspaceTangentGenerator.generate(testGeometry);
     }
 
@@ -113,10 +113,10 @@ public void testPatch() {
      */
     @Test
     public void testPoints() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.Points);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.Points);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        Mesh mesh = testGeometry.getMesh();
+        GLMesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); // skipped this mesh
     }
@@ -126,10 +126,10 @@ public void testPoints() {
      */
     @Test
     public void testTriangles() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.Triangles);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.Triangles);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        Mesh mesh = testGeometry.getMesh();
+        GLMesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNotNull(tangents); // generated tangents
     }
@@ -140,7 +140,7 @@ public void testTriangles() {
      * @param mode the desired mode (not null)
      * @return a new geometry
      */
-    private Geometry createGeometry(Mesh.Mode mode) {
+    private Geometry createGeometry(GLMesh.Mode mode) {
         FloatBuffer normals = BufferUtils.createFloatBuffer(
                 0f, 1f, 0f,
                 0f, 1f, 0f,
@@ -167,7 +167,7 @@ private Geometry createGeometry(Mesh.Mode mode) {
                 +posRadius, 0f, -posRadius,
                 -posRadius, 0f, -posRadius
         );
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         mesh.setMode(mode);
         mesh.setBuffer(VertexBuffer.Type.Normal, numAxes, normals);
         mesh.setBuffer(VertexBuffer.Type.Position, numAxes, positions);
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
index 98ccf9c35b..fc8261591f 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
@@ -5,7 +5,7 @@
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.*;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer.Format;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -94,7 +94,7 @@ private static void doTransformTangents(FloatBuffer inBuf, int offset, int compo
      * @param geometries the geometries to merge
      * @param outMesh a Mesh to receive the geometries
      */
-    public static void mergeGeometries(Collection geometries, Mesh outMesh) {
+    public static void mergeGeometries(Collection geometries, GLMesh outMesh) {
         int[] compsForBuf = new int[VertexBuffer.Type.values().length];
         Format[] formatForBuf = new Format[compsForBuf.length];
          boolean[] normForBuf = new boolean[VertexBuffer.Type.values().length];
@@ -188,7 +188,7 @@ public static void mergeGeometries(Collection geometries, Mesh outMesh
         int globalTriIndex = 0;
 
         for (Geometry geom : geometries) {
-            Mesh inMesh = geom.getMesh();
+            GLMesh inMesh = geom.getMesh();
             geom.computeWorldMatrix();
             Matrix4f worldMatrix = geom.getWorldMatrix();
 
@@ -238,7 +238,7 @@ public static void mergeGeometries(Collection geometries, Mesh outMesh
         }
     }
 
-    public static void makeLods(Collection geometries, Mesh outMesh) {
+    public static void makeLods(Collection geometries, GLMesh outMesh) {
         // Determine number of LOD levels required.
         int lodLevels = Integer.MAX_VALUE;
         for (Geometry g : geometries) {
@@ -338,7 +338,7 @@ public static List makeBatches(Collection geometries, boolea
         for (Map.Entry> entry : matToGeom.entrySet()) {
             Material mat = entry.getKey();
             List geomsForMat = entry.getValue();
-            Mesh mesh = new Mesh();
+            GLMesh mesh = new GLMesh();
             mergeGeometries(geomsForMat, mesh);
             // lods
             if (useLods) {
@@ -406,7 +406,7 @@ public static Node optimize(Node scene, boolean useLods) {
         return scene;
     }
 
-    public static void printMesh(Mesh mesh) {
+    public static void printMesh(GLMesh mesh) {
         for (int bufType = 0; bufType < Type.values().length; bufType++) {
             VertexBuffer outBuf = mesh.getBuffer(Type.values()[bufType]);
             if (outBuf == null) {
@@ -433,7 +433,7 @@ public static void printMesh(Mesh mesh) {
     }
 
     public static void main(String[] args) {
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         mesh.setBuffer(Type.Position, 3, new float[]{
                     0, 0, 0,
                     1, 0, 0,
@@ -452,7 +452,7 @@ public static void main(String[] args) {
         ArrayList geoms = new ArrayList<>();
         geoms.add(g1);
 
-        Mesh outMesh = new Mesh();
+        GLMesh outMesh = new GLMesh();
         mergeGeometries(geoms, outMesh);
         printMesh(outMesh);
     }
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java b/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
index 648f85f070..af22aa7432 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
@@ -50,7 +50,7 @@
 import com.jme3.bounding.BoundingSphere;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.BufferUtils;
 import java.nio.Buffer;
@@ -108,7 +108,7 @@ public class LodGenerator {
     private List triangleList;
     private List vertexList = new ArrayList<>();
     private float meshBoundingSphereRadius;
-    private final Mesh mesh;
+    private final GLMesh mesh;
 
     /**
      * Enumerate criteria for removing triangles.
@@ -253,7 +253,7 @@ public int compare(Vertex o1, Vertex o2) {
      *
      * @param mesh the mesh for which to generate LODs.
      */
-    public LodGenerator(Mesh mesh) {
+    public LodGenerator(GLMesh mesh) {
         this.mesh = mesh;
         build();
     }
@@ -282,7 +282,7 @@ private void build() {
         
     }
     
-    private void gatherVertexData(Mesh mesh, List vertexLookup) {
+    private void gatherVertexData(GLMesh mesh, List vertexLookup) {
 
         //in case the model is currently animating with software animation
         //attempting to retrieve the bind position instead of the position.
@@ -321,7 +321,7 @@ private Vertex findSimilar(Vertex v) {
         return null;
     }
     
-    private void gatherIndexData(Mesh mesh, List vertexLookup) {
+    private void gatherIndexData(GLMesh mesh, List vertexLookup) {
         VertexBuffer indexBuffer = mesh.getBuffer(VertexBuffer.Type.Index);
         indexCount = indexBuffer.getNumElements() * 3;
         Buffer b = indexBuffer.getDataReadOnly();
@@ -611,7 +611,7 @@ public void bakeLods(TriangleReductionMethod reductionMethod, float... reduction
         mesh.setLodLevels(computeLods(reductionMethod, reductionValues));
     }
     
-    private VertexBuffer makeLod(Mesh mesh) {
+    private VertexBuffer makeLod(GLMesh mesh) {
         VertexBuffer indexBuffer = mesh.getBuffer(VertexBuffer.Type.Index);
         
         boolean isShortBuffer = indexBuffer.getFormat() == VertexBuffer.Format.UnsignedShort;
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java b/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
index 9447b2d956..60d31a2faa 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
@@ -37,7 +37,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector2f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
@@ -433,8 +433,8 @@ public boolean applyCoords(Geometry geom) {
      * @param outMesh The mesh to set the coords in (can be same as input).
      * @return true if texture has been found and coords have been changed, false otherwise.
      */
-    public boolean applyCoords(Geometry geom, int offset, Mesh outMesh) {
-        Mesh inMesh = geom.getMesh();
+    public boolean applyCoords(Geometry geom, int offset, GLMesh outMesh) {
+        GLMesh inMesh = geom.getMesh();
         geom.computeWorldMatrix();
 
         VertexBuffer inBuf = inMesh.getBuffer(Type.TexCoord);
@@ -499,7 +499,7 @@ public static Geometry makeAtlasBatch(Spatial spat, AssetManager mgr, int atlasS
             return null;
         }
         Geometry geom = new Geometry();
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         GeometryBatchFactory.mergeGeometries(geometries, mesh);
         applyAtlasCoords(geometries, mesh, atlas);
         mesh.updateCounts();
@@ -525,11 +525,11 @@ public static Geometry makeAtlasBatch(Spatial spat, AssetManager mgr, int atlasS
         return geom;
     }
 
-    private static void applyAtlasCoords(List geometries, Mesh outMesh, TextureAtlas atlas) {
+    private static void applyAtlasCoords(List geometries, GLMesh outMesh, TextureAtlas atlas) {
         int globalVertIndex = 0;
 
         for (Geometry geom : geometries) {
-            Mesh inMesh = geom.getMesh();
+            GLMesh inMesh = geom.getMesh();
             geom.computeWorldMatrix();
 
             int geomVertCount = inMesh.getVertexCount();
diff --git a/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java b/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
index 80fcac11b6..d7e2457107 100644
--- a/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
+++ b/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
@@ -38,7 +38,7 @@
 import com.jme3.light.AmbientLight;
 import com.jme3.math.ColorRGBA;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 
@@ -101,7 +101,7 @@ private void testOldAnimationSystem(String assetPath) {
 
         // remove its vertex normals:
         Geometry oldGeometry = (Geometry) oldJaime.getChild(0);
-        Mesh oldMesh = oldGeometry.getMesh();
+        GLMesh oldMesh = oldGeometry.getMesh();
         oldMesh.clearBuffer(VertexBuffer.Type.Normal);
         oldMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
     }
@@ -125,7 +125,7 @@ private void testNewAnimationSystem(String assetPath) {
 
         // remove its vertex normals:
         Geometry newGeometry = (Geometry) newJaime.getChild(0);
-        Mesh newMesh = newGeometry.getMesh();
+        GLMesh newMesh = newGeometry.getMesh();
         newMesh.clearBuffer(VertexBuffer.Type.Normal);
         newMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
     }
diff --git a/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java b/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
index 55ffe02788..f0a3464be1 100644
--- a/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
+++ b/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
@@ -1,6 +1,6 @@
 package jme3test.app;
 
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.system.AppSettings;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -26,7 +26,7 @@ private static void testPreferenceSettings() {
         settings.putInteger("TestInt", 123);
         settings.putString("TestStr", "HelloWorld");
         settings.putFloat("TestFloat", 123.567f);
-        settings.put("TestObj", new Mesh()); // Objects not supported by preferences
+        settings.put("TestObj", new GLMesh()); // Objects not supported by preferences
         
         try {
             settings.save(APPSETTINGS_KEY);
@@ -58,7 +58,7 @@ private static void testFileSettings() {
         settings.putInteger("TestInt", 123);
         settings.putString("TestStr", "HelloWorld");
         settings.putFloat("TestFloat", 123.567f);
-        settings.put("TestObj", new Mesh()); // Objects not supported by file settings
+        settings.put("TestObj", new GLMesh()); // Objects not supported by file settings
         
         try {
             settings.save(baos);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java b/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
index 2c5590ce63..046fe5606c 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
@@ -39,7 +39,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -98,7 +98,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java b/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
index a996431655..de6156428e 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
@@ -13,7 +13,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.debug.Arrow;
@@ -116,7 +116,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java b/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
index 1e1731d2b8..677172b356 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
@@ -40,7 +40,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -111,7 +111,7 @@ private BitmapText createLabelText(int x, int y, String text) {
         return bmp;
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestOgg.java b/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
index 55cd7bf452..4d49d1d1c0 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
@@ -47,7 +47,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -196,7 +196,7 @@ private BitmapText createLabelText(int x, int y, String text) {
         return bmp;
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestReverb.java b/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
index e21a870993..592dd87625 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
@@ -45,7 +45,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -116,7 +116,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java b/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
index 59d02d64c8..d5a5d5d665 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
@@ -49,7 +49,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Box;
@@ -301,7 +301,7 @@ private static Geometry createTestFloor(AssetManager assetManager, float floorDi
         return floor;
     }
 
-    private static Mesh createFloorMesh(int meshDetail, float floorDimensions) {
+    private static GLMesh createFloorMesh(int meshDetail, float floorDimensions) {
         if (meshDetail < 10) {
             meshDetail = 10;
         }
@@ -351,7 +351,7 @@ private static Mesh createFloorMesh(int meshDetail, float floorDimensions) {
             }
         }
 
-        Mesh m = new Mesh();
+        GLMesh m = new GLMesh();
         m.setBuffer(VertexBuffer.Type.Index, 1, BufferUtils.createIntBuffer(indexBuf));
         m.setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(vertBuf));
         m.updateBound();
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java b/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
index d374ae5645..a8743f5327 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
@@ -50,7 +50,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Cylinder;
 import com.jme3.system.AppSettings;
@@ -184,7 +184,7 @@ private void dropTest() {
         attachTestObject(new Cylinder(2, 16, 0.2f, 2f, true), new Vector3f(-3f, 2f, -5f), 2);
     }
 
-    private void attachTestObject(Mesh mesh, Vector3f position, float mass) {
+    private void attachTestObject(GLMesh mesh, Vector3f position, float mass) {
         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         Geometry g = new Geometry("mesh", mesh);
         g.setLocalTranslation(position);
diff --git a/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java b/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
index f564790411..66522d7518 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
@@ -48,7 +48,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.PQTorus;
@@ -290,7 +290,7 @@ private RigidBodyControl drop(Vector3f offset, String model, float scale, float
         Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
         tp.setMaterial(mat);
 
-        Mesh mesh = tp.getMesh();
+        GLMesh mesh = tp.getMesh();
         GImpactCollisionShape shape = new GImpactCollisionShape(mesh);
         shape.setScale(new Vector3f(scale, scale, scale));
 
@@ -300,7 +300,7 @@ private RigidBodyControl drop(Vector3f offset, String model, float scale, float
         return control;
     }
 
-    private void attachTestObject(Mesh mesh, Vector3f position, float mass) {
+    private void attachTestObject(GLMesh mesh, Vector3f position, float mass) {
         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         material.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg"));
         Geometry g = new Geometry("mesh", mesh);
diff --git a/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java b/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
index e3c1ba136b..f148327212 100644
--- a/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
+++ b/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
@@ -36,7 +36,7 @@
 import com.jme3.bounding.BoundingSphere;
 import com.jme3.material.Material;
 import com.jme3.math.FastMath;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
 
@@ -58,7 +58,7 @@ public void simpleInitApp() {
         // load material
         Material mat = assetManager.loadMaterial("Interface/Logo/Logo.j3m");
 
-        Mesh q = new Mesh();
+        GLMesh q = new GLMesh();
         q.setBuffer(Type.Position, 3, new float[]
         {
             1, 0, 0,
diff --git a/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java b/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
index 6d20ea1fc2..2327846adf 100644
--- a/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
+++ b/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
@@ -43,7 +43,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Box;
 
@@ -61,7 +61,7 @@ public static void main(String[] args) {
     @Override
     public void simpleInitApp() {
         // Create two boxes
-        Mesh mesh1 = new Box(0.5f, 0.5f, 0.5f);
+        GLMesh mesh1 = new Box(0.5f, 0.5f, 0.5f);
         geom1 = new Geometry("Box", mesh1);
         geom1.move(2, 2, -.5f);
         Material m1 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
diff --git a/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java b/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
index 04aca57e8f..01a7d54503 100644
--- a/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
+++ b/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
@@ -53,7 +53,7 @@
 import com.jme3.post.FilterPostProcessor;
 import com.jme3.post.filters.FogFilter;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Sphere;
@@ -75,9 +75,9 @@ public class WorldOfInception extends SimpleApplication implements AnalogListene
     private static final float poiRadius = 100;
     private static final int poiCount = 30;
     private static Material poiMaterial;
-    private static Mesh poiMesh;
+    private static GLMesh poiMesh;
     private static Material ballMaterial;
-    private static Mesh ballMesh;
+    private static GLMesh ballMesh;
     private static CollisionShape poiHorizonCollisionShape;
     private static CollisionShape poiCollisionShape;
     private static CollisionShape ballCollisionShape;
diff --git a/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java b/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
index d98619a2b2..53586dda51 100644
--- a/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
+++ b/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
@@ -225,7 +225,7 @@ public void makeAreaGeom() {
         points[6].set(1, 1, -1);
         points[7].set(1, -1, -1);
 
-        Mesh box = WireFrustum.makeFrustum(points);
+        GLMesh box = WireFrustum.makeFrustum(points);
         areaGeom = new Geometry("light", box);
         areaGeom.setMaterial(new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"));
         areaGeom.getMaterial().setColor("Color", ColorRGBA.White);
diff --git a/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java b/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
index 2337c0bca9..33e281b501 100644
--- a/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
+++ b/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
@@ -38,8 +38,8 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.shape.Quad;
@@ -71,7 +71,7 @@ public void simpleInitApp() {
         quadMesh.updateGeometry(1, 1);
         addMesh("Quad", quadMesh, new Vector3f(1, 0, 0));
 
-        Mesh strip = createTriangleStripMesh();
+        GLMesh strip = createTriangleStripMesh();
         addMesh("strip", strip, new Vector3f(0, -3, 0));
         
         DirectionalLight dl = new DirectionalLight();
@@ -80,7 +80,7 @@ public void simpleInitApp() {
         rootNode.addLight(dl);
     }
 
-    private void addMesh(String name, Mesh mesh, Vector3f translation) {
+    private void addMesh(String name, GLMesh mesh, Vector3f translation) {
         MikktspaceTangentGenerator.generate(mesh);
 
         Geometry testGeom = new Geometry(name, mesh);
@@ -104,8 +104,8 @@ private void addMesh(String name, Mesh mesh, Vector3f translation) {
     public void simpleUpdate(float tpf){
     }
 
-    private Mesh createTriangleStripMesh() {
-        Mesh strip = new Mesh();
+    private GLMesh createTriangleStripMesh() {
+        GLMesh strip = new GLMesh();
         strip.setMode(Mode.TriangleStrip);
         FloatBuffer vb = BufferUtils.createFloatBuffer(3*3*3); // 3 rows * 3 columns * 3 floats
         vb.rewind();
diff --git a/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java b/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
index e169d27850..24fbe6bbf2 100644
--- a/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
+++ b/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
@@ -35,7 +35,7 @@
 import com.jme3.light.LightProbe;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.shape.CenterQuad;
 import com.jme3.system.AppSettings;
 
@@ -74,7 +74,7 @@ public void simpleInitApp() {
         flyCam.setEnabled(false);
 
         // Attach a 9x9 quad at the origin.
-        Mesh mesh = new CenterQuad(9f, 9f);
+        GLMesh mesh = new CenterQuad(9f, 9f);
         Geometry quad = new Geometry("quad", mesh);
         rootNode.attachChild(quad);
 
diff --git a/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java b/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
index 0199d70cc2..7e1fd9ffdf 100644
--- a/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
+++ b/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
@@ -5,7 +5,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Sphere;
 import com.jme3.system.AppSettings;
@@ -17,10 +17,10 @@
 public class TestGeometryShader extends SimpleApplication {
     @Override
     public void simpleInitApp() {
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         mesh.setBuffer(VertexBuffer.Type.Index, 1, BufferUtils.createIntBuffer(new int[]{1}));
         mesh.setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(new float[]{0, 0, 0}));
-        mesh.setMode(Mesh.Mode.Points);
+        mesh.setMode(GLMesh.Mode.Points);
         mesh.setBound(new BoundingBox(new Vector3f(0, 0, 0), 10, 10, 10));
         mesh.updateCounts();
         Geometry geometry = new Geometry("Test", mesh);
diff --git a/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java b/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
index a5af58bfc5..acae970f2d 100644
--- a/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
+++ b/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
@@ -6,7 +6,7 @@
 import com.jme3.input.controls.KeyTrigger;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Quad;
 import com.jme3.system.AppSettings;
@@ -28,7 +28,7 @@ public void simpleInitApp() {
         Quad quad = new Quad(10, 10);
         quad.clearBuffer(VertexBuffer.Type.Index);
         quad.setBuffer(VertexBuffer.Type.Index, 4, BufferUtils.createIntBuffer(0, 1, 2, 3));
-        quad.setMode(Mesh.Mode.Patch);
+        quad.setMode(GLMesh.Mode.Patch);
         quad.setPatchVertexCount(4);
         Geometry geometry = new Geometry("tessTest", quad);
         geometry.setMaterial(tessellationMaterial);
diff --git a/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java b/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
index ef264b95d1..8b2f2cfd5b 100644
--- a/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
+++ b/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
@@ -7,7 +7,7 @@
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Arrow;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.debug.WireSphere;
@@ -73,7 +73,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java b/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
index 6c71144286..52361613ab 100644
--- a/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
+++ b/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
@@ -167,7 +167,7 @@ public void onAction(String name, boolean isPressed, float tpf) {
         }, "bind");
     }
 
-    private Mesh createMesh() {
+    private GLMesh createMesh() {
         Cylinder c = new Cylinder(30, 16, 0.1f, 1, true);
 
         ShortBuffer jointIndex = (ShortBuffer) VertexBuffer.createBuffer(VertexBuffer.Format.UnsignedShort, 4, c.getVertexCount());
diff --git a/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java b/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
index 5a5934142c..7f2ce7e611 100644
--- a/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
+++ b/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
@@ -191,7 +191,7 @@ public void onAction(String name, boolean isPressed, float tpf) {
         }, "bind");
     }
 
-    private Mesh createMesh() {
+    private GLMesh createMesh() {
         Cylinder c = new Cylinder(30, 16, 0.1f, 1, true);
 
         ShortBuffer jointIndex = (ShortBuffer) VertexBuffer.createBuffer(VertexBuffer.Format.UnsignedShort, 4, c.getVertexCount());
diff --git a/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java b/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
index 5f205def3b..524377c226 100644
--- a/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
+++ b/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
@@ -38,7 +38,7 @@
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 
@@ -58,7 +58,7 @@ public static void main(String[] args){
     @Override
     public void simpleInitApp() {
       
-        Mesh m = new Mesh();
+        GLMesh m = new GLMesh();
 
         // Vertex positions in space
         Vector3f [] vertices = new Vector3f[4];
@@ -99,7 +99,7 @@ public void simpleInitApp() {
         // *************************************************************************
         // Second mesh uses vertex colors to color each vertex
         // *************************************************************************
-        Mesh cMesh = m.clone();
+        GLMesh cMesh = m.clone();
         Geometry coloredMesh = new Geometry ("ColoredMesh", cMesh);
         Material matVC = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         matVC.setBoolean("VertexColor", true);
@@ -140,7 +140,7 @@ public void simpleInitApp() {
         // *************************************************************************
         // Third mesh will use a wireframe shader to show wireframe
         // *************************************************************************
-        Mesh wfMesh = m.clone();
+        GLMesh wfMesh = m.clone();
         Geometry wfGeom = new Geometry("wireframeGeometry", wfMesh);
         Material matWireframe = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         matWireframe.setColor("Color", ColorRGBA.Green);
diff --git a/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java b/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
index 25bde0a797..ad5c615d47 100644
--- a/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
+++ b/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
@@ -37,7 +37,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Arrow;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.debug.WireBox;
@@ -50,7 +50,7 @@ public static void main(String[] args){
         app.start();
     }
 
-    private Geometry putShape(Mesh shape, ColorRGBA color) {
+    private Geometry putShape(GLMesh shape, ColorRGBA color) {
         Geometry g = new Geometry("shape", shape);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.getAdditionalRenderState().setWireframe(true);
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java b/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
index c8c004a9c3..b284485d7b 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
@@ -43,7 +43,7 @@
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Quad;
@@ -95,7 +95,7 @@ public void simpleInitApp() {
 
         float quadHeight = backgroundCamera.getHeight();
         float quadWidth = backgroundCamera.getWidth();
-        Mesh quadMesh = new Quad(quadWidth, quadHeight);
+        GLMesh quadMesh = new Quad(quadWidth, quadHeight);
 
         Spatial quadGeometry = new Geometry("quad geometry", quadMesh);
         quadGeometry.setMaterial(quadMaterial);
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java b/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
index ce276e81d9..237568ce03 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
@@ -36,7 +36,7 @@
 import com.jme3.material.MatParamOverride;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.shape.Box;
 import com.jme3.shader.VarType;
 import com.jme3.texture.Texture;
@@ -71,7 +71,7 @@ public void simpleInitApp() {
         /*
          * Attach a test geometry to the scene.
          */
-        Mesh cubeMesh = new Box(1f, 1f, 1f);
+        GLMesh cubeMesh = new Box(1f, 1f, 1f);
         Geometry cubeGeometry = new Geometry("Box", cubeMesh);
         rootNode.attachChild(cubeGeometry);
         /*
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java b/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
index e73132d314..6cb20609fa 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
@@ -39,7 +39,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.shape.Line;
 import com.jme3.system.AppSettings;
 
@@ -95,7 +95,7 @@ private void drawVerticalLine(float lineWidth, float x, ColorRGBA color) {
         float viewportHeight = cam.getHeight();
         Vector3f startLocation = new Vector3f(x, 0.1f * viewportHeight, 0f);
         Vector3f endLocation = new Vector3f(x, 0.9f * viewportHeight, 0f);
-        Mesh wireMesh = new Line(startLocation, endLocation);
+        GLMesh wireMesh = new Line(startLocation, endLocation);
         Geometry wire = new Geometry("wire", wireMesh);
         wire.setMaterial(material);
         guiNode.attachChild(wire);
diff --git a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
index 8a3da3abdd..3da3545b43 100644
--- a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
+++ b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Node;
 import com.jme3.scene.instancing.InstancedGeometry;
@@ -50,8 +50,8 @@
 
 public class TestInstanceNode extends SimpleApplication  {
 
-    private Mesh mesh1;
-    private Mesh mesh2;
+    private GLMesh mesh1;
+    private GLMesh mesh2;
     private final Material[] materials = new Material[6];
     private Node instancedNode;
     private float time = 0;
@@ -66,7 +66,7 @@ public static void main(String[] args){
     }
 
     private Geometry createInstance(float x, float z) {
-        Mesh mesh; 
+        GLMesh mesh;
         if (FastMath.nextRandomInt(0, 1) == 1) mesh = mesh2;
         else mesh = mesh1;
         Geometry geometry = new Geometry("randomGeom", mesh);
@@ -156,7 +156,7 @@ public void simpleUpdate(float tpf) {
                     Geometry geom = (Geometry) instance;
                     geom.setMaterial(materials[FastMath.nextRandomInt(0, materials.length - 1)]);
 
-                    Mesh mesh; 
+                    GLMesh mesh;
                     if (FastMath.nextRandomInt(0, 1) == 1) mesh = mesh2;
                     else mesh = mesh1;
                     geom.setMesh(mesh);
diff --git a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
index 6d5b76da83..c212013d0b 100644
--- a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
+++ b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
@@ -41,7 +41,7 @@
 import com.jme3.post.FilterPostProcessor;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.instancing.InstancedNode;
 import com.jme3.scene.shape.Box;
 import com.jme3.scene.shape.Sphere;
@@ -87,8 +87,8 @@ public void simpleInitApp() {
         rootNode.attachChild(instancedNode);
 
         // create 10 spheres & boxes, along the z-axis, successively further from the camera
-        Mesh sphereMesh = new Sphere(32, 32, 1f);
-        Mesh boxMesh = new Box(0.7f, 0.7f, 0.7f);
+        GLMesh sphereMesh = new Sphere(32, 32, 1f);
+        GLMesh boxMesh = new Box(0.7f, 0.7f, 0.7f);
         for (int z = 0; z < 10; z++) {
             Vector3f location = new Vector3f(0, -3, -(z * 4));
             locations[z] = location;
diff --git a/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java b/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
index 24861464ad..2e8c3bf0db 100644
--- a/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
+++ b/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
@@ -36,7 +36,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial.CullHint;
 import com.jme3.scene.shape.Sphere;
@@ -80,7 +80,7 @@ public void simpleUpdate(float tpf){
         rootNode.detachAllChildren();
         for (int y = -15; y < 15; y++){
             for (int x = -15; x < 15; x++){
-                Mesh sphMesh = original.deepClone();
+                GLMesh sphMesh = original.deepClone();
                 Geometry sphere = new Geometry("sphere", sphMesh);
 
                 sphere.setMaterial(solidColor);
diff --git a/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java b/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
index 6c7e3d965d..ef8c99eb64 100644
--- a/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
+++ b/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
@@ -51,7 +51,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -189,7 +189,7 @@ private void updateLod() {
     private int computeNbTri() {
         int nbTri = 0;
         for (Geometry geom : listGeoms) {
-            Mesh mesh = geom.getMesh();
+            GLMesh mesh = geom.getMesh();
             // Check if the mesh has LOD levels
             if (mesh.getNumLodLevels() > 0) {
                 nbTri += mesh.getLodLevel(lodLevel).getNumElements();
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java b/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
index 89c0718733..93947e7d5c 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Box;
 import com.jme3.util.SkyFactory;
@@ -94,7 +94,7 @@ public void simpleInitApp() {
         /*
          * Attach a "floor" geometry to the scene graph.
          */
-        Mesh floorMesh = new Box(10f, 0.1f, 10f);
+        GLMesh floorMesh = new Box(10f, 0.1f, 10f);
         floor = new Geometry("floor", floorMesh);
         Material floorMaterial = new Material(assetManager,
                 "Common/MatDefs/Misc/Unshaded.j3md");
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java b/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
index ba56b3ff2a..fb00c03e6b 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
@@ -6,7 +6,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.Caps;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Image;
 import com.jme3.texture.Texture;
@@ -40,7 +40,7 @@ public void simpleInitApp()
        tex3.setMinFilter(Texture.MinFilter.Trilinear);
        mat.setTexture("ColorMap", tex3);
 
-       Mesh m = new Mesh();
+       GLMesh m = new GLMesh();
        Vector3f[] vertices = new Vector3f[8];
        vertices[0] = new Vector3f(0, 0, 0);
        vertices[1] = new Vector3f(3, 0, 0);
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java b/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
index 0af064f557..e64d94ea97 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
@@ -6,7 +6,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.Caps;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Image;
 import com.jme3.texture.Texture;
@@ -40,7 +40,7 @@ public void simpleInitApp()
        tex3.setMinFilter(Texture.MinFilter.Trilinear);
        mat.setTexture("ColorMap", tex3);
 
-       Mesh m = new Mesh();
+       GLMesh m = new GLMesh();
        Vector3f[] vertices = new Vector3f[8];
        vertices[0] = new Vector3f(0, 0, 0);
        vertices[1] = new Vector3f(3, 0, 0);
diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
index f0bd3ae172..d4b767b1f7 100644
--- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
+++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
@@ -12,17 +12,32 @@
 import com.jme3.system.vulkan.LwjglVulkanContext;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.natives.Native;
+import com.jme3.vulkan.Format;
+import com.jme3.vulkan.VulkanInstance;
+import com.jme3.vulkan.VulkanLogger;
+import com.jme3.vulkan.buffers.BufferUsage;
+import com.jme3.vulkan.buffers.GpuBuffer;
+import com.jme3.vulkan.buffers.PersistentBuffer;
+import com.jme3.vulkan.buffers.StageableBuffer;
 import com.jme3.vulkan.commands.CommandBuffer;
 import com.jme3.vulkan.commands.CommandPool;
+import com.jme3.vulkan.descriptors.*;
+import com.jme3.vulkan.devices.DeviceFeature;
+import com.jme3.vulkan.devices.DeviceFilter;
+import com.jme3.vulkan.devices.GeneralPhysicalDevice;
+import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.frames.SingleResource;
 import com.jme3.vulkan.frames.UpdateFrame;
 import com.jme3.vulkan.frames.UpdateFrameManager;
+import com.jme3.vulkan.images.*;
 import com.jme3.vulkan.material.TestMaterial;
 import com.jme3.vulkan.memory.MemoryProp;
 import com.jme3.vulkan.memory.MemorySize;
+import com.jme3.vulkan.mesh.*;
 import com.jme3.vulkan.pass.Attachment;
 import com.jme3.vulkan.pass.Subpass;
 import com.jme3.vulkan.pass.RenderPass;
+import com.jme3.vulkan.pipelines.*;
 import com.jme3.vulkan.pipelines.states.ColorBlendAttachment;
 import com.jme3.vulkan.pipelines.states.DynamicState;
 import com.jme3.vulkan.shader.ShaderModule;
@@ -63,8 +78,6 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda
     private boolean swapchainResizeFlag = false;
     private boolean applicationStopped = false;
 
-    private VulkanLogger logger;
-
     // mesh
     private Mesh mesh;
     private final FloatBuffer vertexData = BufferUtils.createFloatBuffer(
@@ -133,9 +146,7 @@ public void simpleInitApp() {
             i.setApplicationName(VulkanHelperTest.class.getSimpleName());
             i.setApplicationVersion(1, 0, 0);
         }
-
-        // debug callbacks
-        logger = new VulkanLogger(instance, Level.SEVERE);
+        instance.createLogger(Level.SEVERE);
 
         // surface
         surface = new Surface(instance, window);
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
index 6e1a44a606..1545905ef2 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
@@ -49,7 +49,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.util.clone.Cloner;
@@ -538,8 +538,8 @@ protected void createSpatialData(Spatial spatial) {
         /*
          * Find the target meshes and choose the transform spatial.
          */
-        List targetList = RagUtils.listAnimatedMeshes(spatial, null);
-        Mesh[] targets = new Mesh[targetList.size()];
+        List targetList = RagUtils.listAnimatedMeshes(spatial, null);
+        GLMesh[] targets = new GLMesh[targetList.size()];
         targetList.toArray(targets);
         transformer = RagUtils.findAnimatedGeometry(spatial);
         if (transformer == null) {
@@ -1017,7 +1017,7 @@ private CollisionShape createShape(Transform vertexToShape, Vector3f center,
      * @param vertexLocations the set of vertex locations (not null, not empty)
      * @param meshes array of animated meshes to use (not null, unaffected)
      */
-    private void createTorsoLink(VectorSet vertexLocations, Mesh[] meshes) {
+    private void createTorsoLink(VectorSet vertexLocations, GLMesh[] meshes) {
         if (vertexLocations == null || vertexLocations.numVectors() == 0) {
             throw new IllegalArgumentException(
                     "No mesh vertices for the torso."
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
index 0a51b894e8..fa037f2239 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -97,13 +97,13 @@ private RagUtils() {
      * null, unaffected)
      * @return a new map from bone/torso names to sets of vertex coordinates
      */
-    static Map coordsMap(Mesh[] meshes,
-            String[] managerMap) {
+    static Map coordsMap(GLMesh[] meshes,
+                                            String[] managerMap) {
         float[] wArray = new float[4];
         int[] iArray = new int[4];
         Vector3f bindPosition = new Vector3f();
         Map coordsMap = new HashMap<>(32);
-        for (Mesh mesh : meshes) {
+        for (GLMesh mesh : meshes) {
             int numVertices = mesh.getVertexCount();
             for (int vertexI = 0; vertexI < numVertices; ++vertexI) {
                 String managerName = findManager(mesh, vertexI, iArray, wArray,
@@ -133,7 +133,7 @@ static Geometry findAnimatedGeometry(Spatial subtree) {
         Geometry result = null;
         if (subtree instanceof Geometry) {
             Geometry geometry = (Geometry) subtree;
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             VertexBuffer indices = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             boolean hasIndices = indices != null;
             VertexBuffer weights = mesh.getBuffer(VertexBuffer.Type.BoneWeight);
@@ -186,7 +186,7 @@ static int findIndex(Spatial spatial, Control sgc) {
      * (not null)
      * @return a root bone, or null if none found
      */
-    static Joint findMainBone(Armature skeleton, Mesh[] targetMeshes) {
+    static Joint findMainBone(Armature skeleton, GLMesh[] targetMeshes) {
         Joint[] rootBones = skeleton.getRoots();
 
         Joint result;
@@ -217,15 +217,15 @@ static Joint findMainBone(Armature skeleton, Mesh[] targetMeshes) {
      * @param storeResult (added to if not null)
      * @return an expanded list (either storeResult or a new instance)
      */
-    static List listAnimatedMeshes(Spatial subtree,
-            List storeResult) {
+    static List listAnimatedMeshes(Spatial subtree,
+                                           List storeResult) {
         if (storeResult == null) {
             storeResult = new ArrayList<>(10);
         }
 
         if (subtree instanceof Geometry) {
             Geometry geometry = (Geometry) subtree;
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             VertexBuffer indices = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             boolean hasIndices = indices != null;
             VertexBuffer weights = mesh.getBuffer(VertexBuffer.Type.BoneWeight);
@@ -394,7 +394,7 @@ private static void addPreOrderJoints(Joint bone, List addResult) {
      * @param mesh animated mesh to analyze (not null, unaffected)
      * @param totalWeights (not null, modified)
      */
-    private static void addWeights(Mesh mesh, float[] totalWeights) {
+    private static void addWeights(GLMesh mesh, float[] totalWeights) {
         assert totalWeights != null;
 
         int maxWeightsPerVert = mesh.getMaxNumWeights();
@@ -439,8 +439,8 @@ private static void addWeights(Mesh mesh, float[] totalWeights) {
      * unaffected)
      * @return a bone/torso name
      */
-    private static String findManager(Mesh mesh, int vertexIndex, int[] iArray,
-            float[] wArray, String[] managerMap) {
+    private static String findManager(GLMesh mesh, int vertexIndex, int[] iArray,
+                                      float[] wArray, String[] managerMap) {
         vertexBoneIndices(mesh, vertexIndex, iArray);
         vertexBoneWeights(mesh, vertexIndex, wArray);
         Map weightMap = weightMap(iArray, wArray, managerMap);
@@ -539,10 +539,10 @@ private static int readIndex(Buffer buffer) {
      * @param skeleton (not null, unaffected)
      * @return a map from bone indices to total bone weight
      */
-    private static float[] totalWeights(Mesh[] meshes, Armature skeleton) {
+    private static float[] totalWeights(GLMesh[] meshes, Armature skeleton) {
         int numBones = skeleton.getJointCount();
         float[] result = new float[numBones];
-        for (Mesh mesh : meshes) {
+        for (GLMesh mesh : meshes) {
             RagUtils.addWeights(mesh, result);
         }
 
@@ -568,8 +568,8 @@ private static float[] totalWeights(Mesh[] meshes, Armature skeleton) {
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static int[] vertexBoneIndices(Mesh mesh,
-            int vertexIndex, int[] storeResult) {
+    private static int[] vertexBoneIndices(GLMesh mesh,
+                                           int vertexIndex, int[] storeResult) {
         if (storeResult == null) {
             storeResult = new int[4];
         } else {
@@ -607,8 +607,8 @@ private static int[] vertexBoneIndices(Mesh mesh,
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static float[] vertexBoneWeights(Mesh mesh,
-            int vertexIndex, float[] storeResult) {
+    private static float[] vertexBoneWeights(GLMesh mesh,
+                                             int vertexIndex, float[] storeResult) {
         if (storeResult == null) {
             storeResult = new float[4];
         } else {
@@ -650,9 +650,9 @@ private static float[] vertexBoneWeights(Mesh mesh,
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static Vector3f vertexVector3f(Mesh mesh,
-            VertexBuffer.Type bufferType, int vertexIndex,
-            Vector3f storeResult) {
+    private static Vector3f vertexVector3f(GLMesh mesh,
+                                           VertexBuffer.Type bufferType, int vertexIndex,
+                                           Vector3f storeResult) {
         assert bufferType == VertexBuffer.Type.BindPoseNormal
                 || bufferType == VertexBuffer.Type.BindPosePosition
                 || bufferType == VertexBuffer.Type.Binormal
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
index 7dadd68835..abb8d10b96 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
@@ -62,12 +62,12 @@ protected GImpactCollisionShape() {
      * creates a collision shape from the given Mesh
      * @param mesh the Mesh to use
      */
-    public GImpactCollisionShape(Mesh mesh) {
+    public GImpactCollisionShape(GLMesh mesh) {
         createCollisionMesh(mesh, new Vector3f(1,1,1));
     }
 
 
-    private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
+    private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
         this.worldScale = worldScale;
         bulletMesh = Converter.convert(mesh);
         this.numVertices = bulletMesh.numVertices;
@@ -84,7 +84,7 @@ private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
      *
      * @return a new Mesh
      */
-    public Mesh createJmeMesh(){
+    public GLMesh createJmeMesh(){
         return Converter.convert(bulletMesh);
     }
 
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
index d6102d660f..0d420f717d 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
@@ -39,7 +39,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import java.io.IOException;
 
 /**
@@ -124,7 +124,7 @@ protected void createShape() {
                 cShape.setMargin(margin);
     }
 
-    public Mesh createJmeMesh(){
+    public GLMesh createJmeMesh(){
         //TODO return Converter.convert(bulletMesh);
         return null;
     }
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
index 24746934a5..3564936fd1 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
@@ -38,7 +38,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 import java.nio.FloatBuffer;
@@ -51,7 +51,7 @@ public class HullCollisionShape extends CollisionShape {
     protected HullCollisionShape() {
     }
 
-    public HullCollisionShape(Mesh mesh) {
+    public HullCollisionShape(GLMesh mesh) {
         this.points = getPoints(mesh);
         createShape(this.points);
     }
@@ -75,7 +75,7 @@ public void read(JmeImporter im) throws IOException {
         InputCapsule capsule = im.getCapsule(this);
 
         // for backwards compatability
-        Mesh mesh = (Mesh) capsule.readSavable("hullMesh", null);
+        GLMesh mesh = (GLMesh) capsule.readSavable("hullMesh", null);
         if (mesh != null) {
             this.points = getPoints(mesh);
         } else {
@@ -95,7 +95,7 @@ protected void createShape(float[] points) {
         cShape.setMargin(margin);
     }
 
-    protected float[] getPoints(Mesh mesh) {
+    protected float[] getPoints(GLMesh mesh) {
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         vertices.rewind();
         int components = mesh.getVertexCount() * 3;
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
index acb93ee043..9f780f5321 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
@@ -63,7 +63,7 @@ protected MeshCollisionShape() {
      * @param mesh
      *            the TriMesh to use
      */
-    public MeshCollisionShape(Mesh mesh) {
+    public MeshCollisionShape(GLMesh mesh) {
         this(mesh, false);
     }
  
@@ -73,11 +73,11 @@ public MeshCollisionShape(Mesh mesh) {
      * @param mesh the TriMesh to use
      * @param dummy Unused
      */
-    public MeshCollisionShape(Mesh mesh, boolean dummy) {
+    public MeshCollisionShape(GLMesh mesh, boolean dummy) {
         createCollisionMesh(mesh, new Vector3f(1, 1, 1));
     }
     
-    private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
+    private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
         this.scale = worldScale;
         bulletMesh = Converter.convert(mesh);
         this.numVertices = bulletMesh.numVertices;
@@ -94,7 +94,7 @@ private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
      *
      * @return a new Mesh
      */
-    public Mesh createJmeMesh(){
+    public GLMesh createJmeMesh(){
         return Converter.convert(bulletMesh);
     }
 
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
index 19f054be32..62c240078b 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
@@ -43,7 +43,7 @@
 import com.jme3.math.*;
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.ViewPort;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.util.TempVars;
@@ -603,7 +603,7 @@ protected void createSpatialData(Spatial model) {
      * shape will contain at least 1 vertex.
      */
     private void filterBoneList(SkeletonControl skeletonControl) {
-        Mesh[] targets = skeletonControl.getTargets();
+        GLMesh[] targets = skeletonControl.getTargets();
         Skeleton skel = skeletonControl.getSkeleton();
         for (int boneI = 0; boneI < skel.getBoneCount(); boneI++) {
             String boneName = skel.getBone(boneI).getName();
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
index 6377ee413b..d54e642062 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
@@ -46,7 +46,7 @@
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.ViewPort;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.control.Control;
 import com.jme3.scene.shape.Box;
@@ -225,7 +225,7 @@ protected void createCollisionShape() {
         }
         if (spatial instanceof Geometry) {
             Geometry geom = (Geometry) spatial;
-            Mesh mesh = geom.getMesh();
+            GLMesh mesh = geom.getMesh();
             if (mesh instanceof Sphere) {
                 collisionShape = new SphereCollisionShape(((Sphere) mesh).getRadius());
                 return;
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
index f24ccf5f72..93a290baca 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
@@ -95,15 +95,15 @@ public static Map> buildPointMap(Spatial model) {
         Map> map = new HashMap<>();
 
         SkeletonControl skeletonCtrl = model.getControl(SkeletonControl.class);
-        Mesh[] targetMeshes = skeletonCtrl.getTargets();
-        for (Mesh mesh : targetMeshes) {
+        GLMesh[] targetMeshes = skeletonCtrl.getTargets();
+        for (GLMesh mesh : targetMeshes) {
             buildPointMapForMesh(mesh, map);
         }
 
         return map;
     }
 
-    private static Map> buildPointMapForMesh(Mesh mesh, Map> map) {
+    private static Map> buildPointMapForMesh(GLMesh mesh, Map> map) {
 
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         ByteBuffer boneIndices = (ByteBuffer) mesh.getBuffer(Type.BoneIndex).getData();
@@ -222,8 +222,8 @@ public static HullCollisionShape makeShapeFromVerticeWeights(Spatial model,
         List points = new ArrayList<>(100);
 
         SkeletonControl skeletonCtrl = model.getControl(SkeletonControl.class);
-        Mesh[] targetMeshes = skeletonCtrl.getTargets();
-        for (Mesh mesh : targetMeshes) {
+        GLMesh[] targetMeshes = skeletonCtrl.getTargets();
+        for (GLMesh mesh : targetMeshes) {
             for (Integer index : boneIndices) {
                 List bonePoints = getPoints(mesh, index, initialScale,
                         initialPosition, weightThreshold);
@@ -254,7 +254,7 @@ public static HullCollisionShape makeShapeFromVerticeWeights(Spatial model,
      * @return a new list of vertex coordinates (not null, length a multiple of
      * 3)
      */
-    private static List getPoints(Mesh mesh, int boneIndex, Vector3f initialScale, Vector3f offset, float weightThreshold) {
+    private static List getPoints(GLMesh mesh, int boneIndex, Vector3f initialScale, Vector3f offset, float weightThreshold) {
 
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         VertexBuffer biBuf = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
@@ -351,9 +351,9 @@ public static void setUserControl(Bone bone, boolean bool) {
      * @param weightThreshold the threshold (≥0, ≤1)
      * @return true if at least 1 vertex found, otherwise false
      */
-    public static boolean hasVertices(int boneIndex, Mesh[] targets,
+    public static boolean hasVertices(int boneIndex, GLMesh[] targets,
             float weightThreshold) {
-        for (Mesh mesh : targets) {
+        for (GLMesh mesh : targets) {
             VertexBuffer biBuf = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             Buffer boneIndices = biBuf.getDataReadOnly();
             FloatBuffer boneWeight
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
index 80d71c53ce..b7f66189ab 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
@@ -251,9 +251,9 @@ public static CollisionShape createBoxShape(Spatial spatial) {
      * other.
      */
     private static MeshCollisionShape createSingleMeshShape(Geometry geom, Spatial parent) {
-        Mesh mesh = geom.getMesh();
+        GLMesh mesh = geom.getMesh();
         Transform trans = getTransform(geom, parent);
-        if (mesh != null && mesh.getMode() == Mesh.Mode.Triangles) {
+        if (mesh != null && mesh.getMode() == GLMesh.Mode.Triangles) {
             MeshCollisionShape mColl = new MeshCollisionShape(mesh);
             mColl.setScale(trans.getScale());
             return mColl;
@@ -285,7 +285,7 @@ private static BoxCollisionShape createSingleBoxShape(Spatial spatial, Spatial p
      * @param parent
      */
     private static HullCollisionShape createSingleDynamicMeshShape(Geometry geom, Spatial parent) {
-        Mesh mesh = geom.getMesh();
+        GLMesh mesh = geom.getMesh();
         Transform trans = getTransform(geom, parent);
         if (mesh != null) {
             HullCollisionShape dynamicShape = new HullCollisionShape(mesh);
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
index 096c926e8d..87f31048f7 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
@@ -34,7 +34,7 @@
 import com.bulletphysics.collision.shapes.IndexedMesh;
 import com.bulletphysics.dom.HeightfieldTerrainShape;
 import com.jme3.math.FastMath;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.util.BufferUtils;
@@ -223,7 +223,7 @@ public static com.jme3.math.Transform convert(com.bulletphysics.linearmath.Trans
         return out;
     }
 
-    public static synchronized IndexedMesh convert(Mesh mesh) {
+    public static synchronized IndexedMesh convert(GLMesh mesh) {
         IndexedMesh jBulletIndexedMesh = new IndexedMesh();
         jBulletIndexedMesh.triangleIndexBase = ByteBuffer.allocate(mesh.getTriangleCount() * 3 * 4);
         jBulletIndexedMesh.vertexBase = ByteBuffer.allocate(mesh.getVertexCount() * 3 * 4);
@@ -253,8 +253,8 @@ public static synchronized IndexedMesh convert(Mesh mesh) {
         return jBulletIndexedMesh;
     }
 
-    public static Mesh convert(IndexedMesh mesh) {
-        Mesh jmeMesh = new Mesh();
+    public static GLMesh convert(IndexedMesh mesh) {
+        GLMesh jmeMesh = new GLMesh();
 
         jmeMesh.setBuffer(Type.Index, 3, BufferUtils.createShortBuffer(mesh.numTriangles * 3));
         jmeMesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(mesh.numVertices * 3));
@@ -276,7 +276,7 @@ public static Mesh convert(IndexedMesh mesh) {
         return jmeMesh;
     }
 
-    public static Mesh convert(HeightfieldTerrainShape heightfieldShape) {
+    public static GLMesh convert(HeightfieldTerrainShape heightfieldShape) {
         return null; //TODO!!
     }
 }
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
index 3e74f1ab3c..ab043694b8 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
@@ -41,7 +41,7 @@
 import com.jme3.bullet.collision.shapes.infos.ChildCollisionShape;
 import com.jme3.math.Matrix3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
@@ -126,14 +126,14 @@ private static Geometry createDebugShape(CollisionShape shape) {
         return geom;
     }
 
-    public static Mesh getDebugMesh(CollisionShape shape) {
-        Mesh mesh = null;
+    public static GLMesh getDebugMesh(CollisionShape shape) {
+        GLMesh mesh = null;
         if (shape.getCShape() instanceof ConvexShape) {
-            mesh = new Mesh();
+            mesh = new GLMesh();
             mesh.setBuffer(Type.Position, 3, getVertices((ConvexShape) shape.getCShape()));
             mesh.getFloatBuffer(Type.Position).clear();
         } else if (shape.getCShape() instanceof ConcaveShape) {
-            mesh = new Mesh();
+            mesh = new GLMesh();
             mesh.setBuffer(Type.Position, 3, getVertices((ConcaveShape) shape.getCShape()));
             mesh.getFloatBuffer(Type.Position).clear();
         }
diff --git a/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java b/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
index bb704578e9..5675da237d 100644
--- a/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
+++ b/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
@@ -50,7 +50,7 @@
 import com.jme3.export.binary.BinaryImporter;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -179,7 +179,7 @@ public void testIssue1004() {
         Node sinbad = (Node)new DesktopAssetManager(true).loadModel("Models/Sinbad/SinbadOldAnim.j3o");
 
         Geometry geometry = (Geometry) sinbad.getChild(0);
-        Mesh mesh = geometry.getMesh();
+        GLMesh mesh = geometry.getMesh();
         VertexBuffer.Type bufferType = VertexBuffer.Type.BoneIndex;
         VertexBuffer vertexBuffer = mesh.getBuffer(bufferType);
 
diff --git a/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java b/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
index 4d08588759..d2ee71ae22 100644
--- a/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
+++ b/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
@@ -40,7 +40,7 @@
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.Renderer;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -495,7 +495,7 @@ private class Batch {
         private final VertexBuffer vertexColor = new VertexBuffer(Type.Color);
         private final VertexBuffer indexBuffer = new VertexBuffer(Type.Index);
 
-        private final Mesh mesh = new Mesh();
+        private final GLMesh mesh = new GLMesh();
         private final Geometry meshGeometry = new Geometry("nifty-quad", mesh);
         private final RenderState renderState = new RenderState();
 
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
index 7f48d3e201..564da94cdf 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
@@ -37,7 +37,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.plugins.IrUtils;
 import com.jme3.scene.plugins.IrBoneWeightIndex;
 import com.jme3.scene.plugins.IrMesh;
@@ -55,7 +55,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-public final class FbxMesh extends FbxNodeAttribute> {
+public final class FbxMesh extends FbxNodeAttribute> {
 
     private static final Logger logger = Logger.getLogger(FbxMesh.class.getName());
     
@@ -205,7 +205,7 @@ private static IrBoneWeightIndex[] toBoneWeightIndices(List boneIndices
     }
     
     @Override
-    protected IntMap toJmeObject() {
+    protected IntMap toJmeObject() {
         // Load clusters from SkinDeformer
         if (skinDeformer != null) {
             for (FbxCluster cluster : skinDeformer.getJmeObject()) {
@@ -228,9 +228,9 @@ protected IntMap toJmeObject() {
         IntMap irMeshes = IrUtils.splitByMaterial(irMesh);
         
         // Create a jME3 Mesh for each material index.
-        IntMap jmeMeshes = new IntMap<>();
+        IntMap jmeMeshes = new IntMap<>();
         for (IntMap.Entry irMeshEntry : irMeshes) {
-            Mesh jmeMesh = IrUtils.convertIrMeshToJmeMesh(irMeshEntry.getValue());
+            GLMesh jmeMesh = IrUtils.convertIrMeshToJmeMesh(irMeshEntry.getValue());
             jmeMeshes.put(irMeshEntry.getKey(), jmeMesh);
         }
        
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
index 678e88eae9..f01a50eaad 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
@@ -45,7 +45,7 @@
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Spatial.CullHint;
@@ -318,7 +318,7 @@ public void fromElement(FbxElement element) {
         }
     }
     
-    private Spatial tryCreateGeometry(int materialIndex, Mesh jmeMesh, boolean single) {
+    private Spatial tryCreateGeometry(int materialIndex, GLMesh jmeMesh, boolean single) {
         // Map meshes without material indices to material 0.
         if (materialIndex == -1) {
             materialIndex = 0;
@@ -396,7 +396,7 @@ public Spatial toJmeObject() {
         
         if (nodeAttribute instanceof FbxMesh) {
             FbxMesh fbxMesh = (FbxMesh) nodeAttribute;
-            IntMap jmeMeshes = fbxMesh.getJmeObject();
+            IntMap jmeMeshes = fbxMesh.getJmeObject();
             
             if (jmeMeshes == null || jmeMeshes.size() == 0) {
                 // No meshes found on FBXMesh (??)
@@ -412,7 +412,7 @@ public Spatial toJmeObject() {
                 }
                 Node node = new Node(nodeName);
                 boolean singleMesh = jmeMeshes.size() == 1;
-                for (IntMap.Entry meshInfo : jmeMeshes) {
+                for (IntMap.Entry meshInfo : jmeMeshes) {
                     node.attachChild(tryCreateGeometry(meshInfo.getKey(), meshInfo.getValue(), singleMesh));
                 }
                 spatial = node;
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
index 9cc40fe5b9..d4dcb081f9 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
@@ -8,11 +8,11 @@
 
 import com.jme3.asset.AssetLoadException;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.plugins.fbx.SceneLoader;
 import com.jme3.scene.plugins.fbx.file.FbxElement;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.Node;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.IntMap;
@@ -257,7 +257,7 @@ public void link(FbxObject otherObject) {
     }
 
     private List createGeometries() throws IOException {
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         mesh.setMode(Mode.Triangles);
         // Since each vertex should contain unique texcoord and normal we should unroll vertex indexing
         // So we don't use VertexBuffer.Type.Index for elements drawing
@@ -507,7 +507,7 @@ else if(binormalsMapping.equals("ByPolygonVertex"))
                 Entry> e = iterator.next();
                 int materialId = e.getKey();
                 List indexes = e.getValue();
-                Mesh newMesh = mesh.clone();
+                GLMesh newMesh = mesh.clone();
                 newMesh.setBuffer(VertexBuffer.Type.Index, 3, toArray(indexes.toArray(new Integer[indexes.size()])));
                 newMesh.setStatic();
                 newMesh.updateBound();
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
index 8cb1a2e8a8..954c05c782 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
@@ -6,7 +6,7 @@
 import java.util.List;
 
 import com.jme3.asset.AssetLoadException;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -43,10 +43,10 @@ public void generateSkinning() {
         for(FbxMesh fbxMesh : toSkin) {
             if(fbxMesh.geometries == null)
                 continue;
-            Mesh firstMesh = fbxMesh.geometries.get(0).getMesh();
+            GLMesh firstMesh = fbxMesh.geometries.get(0).getMesh();
             int maxWeightsPerVert = generateBoneData(firstMesh, fbxMesh);
             for(int i = 0; i < fbxMesh.geometries.size(); ++i) {
-                Mesh mesh = fbxMesh.geometries.get(i).getMesh();
+                GLMesh mesh = fbxMesh.geometries.get(i).getMesh();
                 if(mesh != firstMesh) {
                     mesh.setBuffer(firstMesh.getBuffer(VertexBuffer.Type.BoneWeight));
                     mesh.setBuffer(firstMesh.getBuffer(VertexBuffer.Type.BoneIndex));
@@ -59,7 +59,7 @@ public void generateSkinning() {
         }
     }
     
-    private int generateBoneData(Mesh mesh, FbxMesh fbxMesh) {
+    private int generateBoneData(GLMesh mesh, FbxMesh fbxMesh) {
         // Create bone buffers
         FloatBuffer boneWeightData = BufferUtils.createFloatBuffer(fbxMesh.vCount * 4);
         ByteBuffer boneIndicesData = BufferUtils.createByteBuffer(fbxMesh.vCount * 4);
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
index 3002515633..2f199d8872 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
@@ -374,7 +374,7 @@ public Geometry[] readMeshPrimitives(int meshIndex) throws IOException {
             int index = 0;
             for (JsonElement primitive : primitives) {
                 JsonObject meshObject = primitive.getAsJsonObject();
-                Mesh mesh = new Mesh();
+                GLMesh mesh = new GLMesh();
                 addToCache("mesh", 0, mesh, 1);
                 Integer mode = getAsInteger(meshObject, "mode");
                 mesh.setMode(getMeshMode(mode));
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
index 8f015f28db..054c9ba80f 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
@@ -71,29 +71,29 @@ public static JsonObject parse(InputStream stream) {
         return parser.parse(stream);
     }
 
-    public static Mesh.Mode getMeshMode(Integer mode) {
+    public static GLMesh.Mode getMeshMode(Integer mode) {
         if (mode == null) {
-            return Mesh.Mode.Triangles;
+            return GLMesh.Mode.Triangles;
         }
         //too bad, we could have returned the enum value from the ordinal
         //but LineLoop and LineStrip are inverted in the Mesh.Mode Enum declaration.
         switch (mode) {
             case 0:
-                return Mesh.Mode.Points;
+                return GLMesh.Mode.Points;
             case 1:
-                return Mesh.Mode.Lines;
+                return GLMesh.Mode.Lines;
             case 2:
-                return Mesh.Mode.LineLoop;
+                return GLMesh.Mode.LineLoop;
             case 3:
-                return Mesh.Mode.LineStrip;
+                return GLMesh.Mode.LineStrip;
             case 4:
-                return Mesh.Mode.Triangles;
+                return GLMesh.Mode.Triangles;
             case 5:
-                return Mesh.Mode.TriangleStrip;
+                return GLMesh.Mode.TriangleStrip;
             case 6:
-                return Mesh.Mode.TriangleFan;
+                return GLMesh.Mode.TriangleFan;
         }
-        return Mesh.Mode.Triangles;
+        return GLMesh.Mode.Triangles;
     }
 
     public static VertexBuffer.Format getVertexBufferFormat(int componentType) {
@@ -488,7 +488,7 @@ public static byte[] toByteArray(short[] shortArray) {
     }
 
 
-    public static void handleSkinningBuffers(Mesh mesh, IntMap skinBuffers) {
+    public static void handleSkinningBuffers(GLMesh mesh, IntMap skinBuffers) {
         if (skinBuffers.size() > 0) {
             int length = skinBuffers.get(0).joints.length;
             short[] jointsArray = new short[length];
@@ -546,7 +546,7 @@ public int compare(GltfLoader.WeightData o1, GltfLoader.WeightData o2) {
     }
 
 
-    public static void setSkinBuffers(Mesh mesh, short[] jointsArray, float[] weightsArray, int componentSize) {
+    public static void setSkinBuffers(GLMesh mesh, short[] jointsArray, float[] weightsArray, int componentSize) {
         if (componentSize == 1) {
             mesh.setBuffer(VertexBuffer.Type.BoneIndex, 4, BufferUtils.createByteBuffer(toByteArray(jointsArray)));
         } else {
@@ -858,7 +858,7 @@ public static Spatial findCommonAncestor(List spatials) {
 
     }
 
-    public static void dumpMesh(Mesh m) {
+    public static void dumpMesh(GLMesh m) {
         for (VertexBuffer vertexBuffer : m.getBufferList().getArray()) {
             System.err.println(vertexBuffer.getBufferType());
             System.err.println(vertexBuffer.getFormat());
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
index aff6fbdcf1..d66bfee532 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
@@ -37,7 +37,7 @@
 import com.jme3.asset.AssetLoadException;
 import com.jme3.math.Matrix3f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import static com.jme3.scene.plugins.gltf.GltfUtils.getAsInteger;
 import static com.jme3.scene.plugins.gltf.GltfUtils.getVertexBufferType;
@@ -69,7 +69,7 @@ public class TextureTransformExtensionLoader implements ExtensionLoader {
      * @param transform The matrix containing the scale/rotate/translate transformations
      * @param verType The vertex buffer type from which to retrieve the UV coordinates
      */    
-    private void uvTransform(Mesh mesh, Matrix3f transform, VertexBuffer.Type verType) {
+    private void uvTransform(GLMesh mesh, Matrix3f transform, VertexBuffer.Type verType) {
         if (!transform.isIdentity()) { // if transform is the identity matrix, there's nothing to do
             VertexBuffer tc = mesh.getBuffer(verType);
             if (tc == null) {
@@ -102,7 +102,7 @@ public Object handleExtension(GltfLoader loader, String parentName, JsonElement
         if (!(input instanceof Texture2D)) {
             logger.log(Level.WARNING, "KHR_texture_transform extension added on an unsupported element, the loaded scene result will be unexpected.");
         }
-        Mesh mesh = loader.fetchFromCache("mesh", 0, Mesh.class);
+        GLMesh mesh = loader.fetchFromCache("mesh", 0, GLMesh.class);
         if (mesh != null) {
             Matrix3f translation = new Matrix3f();
             Matrix3f rotation = new Matrix3f();
@@ -131,7 +131,7 @@ public Object handleExtension(GltfLoader loader, String parentName, JsonElement
                 texCoord = jsonObject.get("texCoord").getAsInt(); // it overrides the parent's texCoord value
             }                 
             Matrix3f transform = translation.mult(rotation).mult(scale);
-            Mesh meshLast = loader.fetchFromCache("textureTransformData", 0, Mesh.class);
+            GLMesh meshLast = loader.fetchFromCache("textureTransformData", 0, GLMesh.class);
             Map transformMap = loader.fetchFromCache("textureTransformData", 1, HashMap.class);
             if (mesh != meshLast || (transformMap != null && transformMap.get(texCoord) == null)) {
                 // at this point, we're processing a new mesh or the same mesh as before but for a different UV set
diff --git a/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java b/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
index 30338d27fd..3aaf573b39 100644
--- a/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
+++ b/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
@@ -32,7 +32,7 @@
 package com.jme3.scene.plugins;
 
 import com.jme3.math.Vector4f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.scene.mesh.IndexIntBuffer;
@@ -258,7 +258,7 @@ public static IntMap splitByMaterial(IrMesh mesh) {
      * @param mesh the input IrMesh (not null)
      * @return a new Mesh
      */
-    public static Mesh convertIrMeshToJmeMesh(IrMesh mesh) {
+    public static GLMesh convertIrMeshToJmeMesh(IrMesh mesh) {
         Map vertexToVertexIndex = new HashMap<>();
         List vertices = new ArrayList<>();
         List indexes = new ArrayList<>();
@@ -284,8 +284,8 @@ public static Mesh convertIrMeshToJmeMesh(IrMesh mesh) {
             }
         }
         
-        Mesh jmeMesh = new Mesh();
-        jmeMesh.setMode(Mesh.Mode.Triangles);
+        GLMesh jmeMesh = new GLMesh();
+        jmeMesh.setMode(GLMesh.Mode.Triangles);
         
         FloatBuffer posBuf = null;
         FloatBuffer normBuf = null;
diff --git a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
index 4cb7967d94..21a4e9acd2 100644
--- a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
+++ b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
@@ -84,7 +84,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
     private IntBuffer ib;
     private FloatBuffer fb;
     private VertexBuffer vb;
-    private Mesh mesh;
+    private GLMesh mesh;
     private Geometry geom;
     private ByteBuffer indicesData;
     private FloatBuffer weightsFloatData;
@@ -94,7 +94,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
     private boolean usesBigIndices;
     private boolean submeshNamesHack;
     // Global data
-    private Mesh sharedMesh;
+    private GLMesh sharedMesh;
     private int meshIndex = 0;
     private int texCoordIndex = 0;
     private String ignoreUntilEnd = null;
@@ -241,15 +241,15 @@ private void applyMaterial(Geometry geom, String matName) {
     }
 
     private void startSubMesh(String matName, String usesharedvertices, String use32bitIndices, String opType) throws SAXException {
-        mesh = new Mesh();
+        mesh = new GLMesh();
         if (opType == null || opType.equals("triangle_list")) {
-            mesh.setMode(Mesh.Mode.Triangles);
+            mesh.setMode(GLMesh.Mode.Triangles);
             //} else if (opType.equals("triangle_strip")) {
             //    mesh.setMode(Mesh.Mode.TriangleStrip);
             //} else if (opType.equals("triangle_fan")) {
             //    mesh.setMode(Mesh.Mode.TriangleFan);
         } else if (opType.equals("line_list")) {
-            mesh.setMode(Mesh.Mode.Lines);
+            mesh.setMode(GLMesh.Mode.Lines);
         } else {
             throw new SAXException("Unsupported operation type: " + opType);
         }
@@ -286,7 +286,7 @@ private void startSubMesh(String matName, String usesharedvertices, String use32
     }
 
     private void startSharedGeom(String vertexCount) throws SAXException {
-        sharedMesh = new Mesh();
+        sharedMesh = new GLMesh();
         vertCount = parseInt(vertexCount);
         usesSharedVerts = false;
 
@@ -556,7 +556,7 @@ private void startLevelOfDetail(String numLevels) {
     private void endLevelOfDetail() {
         // set the lod data for each mesh
         for (Entry> entry : lodLevels) {
-            Mesh m = geoms.get(entry.getKey()).getMesh();
+            GLMesh m = geoms.get(entry.getKey()).getMesh();
             List levels = entry.getValue();
             VertexBuffer[] levelArray = new VertexBuffer[levels.size()];
             levels.toArray(levelArray);
@@ -772,7 +772,7 @@ private Node compileModel() {
 
         for (int i = 0; i < geoms.size(); i++) {
             Geometry g = geoms.get(i);
-            Mesh m = g.getMesh();
+            GLMesh m = g.getMesh();
 
             // New code for buffer extract
             if (sharedMesh != null && usesSharedMesh.get(i)) {
@@ -789,7 +789,7 @@ private Node compileModel() {
 
             for (int i = 0; i < geoms.size(); i++) {
                 Geometry g = geoms.get(i);
-                Mesh m = geoms.get(i).getMesh();
+                GLMesh m = geoms.get(i).getMesh();
                 m.generateBindPose();
             }
 
diff --git a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
index 50435b1218..f2a83e9e6c 100644
--- a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
+++ b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
@@ -42,7 +42,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 import org.jmonkeyengine.screenshottests.testframework.ScreenshotTestBase;
@@ -98,7 +98,7 @@ protected void initialize(Application app) {
 
                 // Remove its vertex normals
                 Geometry oldGeometry = (Geometry) oldJaime.getChild(0);
-                Mesh oldMesh = oldGeometry.getMesh();
+                GLMesh oldMesh = oldGeometry.getMesh();
                 oldMesh.clearBuffer(VertexBuffer.Type.Normal);
                 oldMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
 
@@ -114,7 +114,7 @@ protected void initialize(Application app) {
 
                 // Remove its vertex normals
                 Geometry newGeometry = (Geometry) newJaime.getChild(0);
-                Mesh newMesh = newGeometry.getMesh();
+                GLMesh newMesh = newGeometry.getMesh();
                 newMesh.clearBuffer(VertexBuffer.Type.Normal);
                 newMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
 
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java b/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
index 4a68a9cc18..3cf6d5cf53 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
@@ -34,7 +34,7 @@
 import com.jme3.export.*;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -308,12 +308,12 @@ public IntBuffer writeIndexArray(IntBuffer store){
         return store;
     }
     
-    public Mesh createMesh(Vector3f scale, Vector2f tcScale, boolean center){
+    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, boolean center){
         FloatBuffer pb = writeVertexArray(null, scale, center);
         FloatBuffer tb = writeTexCoordArray(null, Vector2f.ZERO, tcScale);
         FloatBuffer nb = writeNormalArray(null, scale);
         IntBuffer ib = writeIndexArray(null);
-        Mesh m = new Mesh();
+        GLMesh m = new GLMesh();
         m.setBuffer(Type.Position, 3, pb);
         m.setBuffer(Type.Normal, 3, nb);
         m.setBuffer(Type.TexCoord, 2, tb);
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
index 2dae19b458..23feed4f97 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
@@ -37,8 +37,8 @@
 import com.jme3.math.Triangle;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.terrain.GeoMap;
@@ -73,11 +73,11 @@ public LODGeomap(int size, float[] heightMap) {
         super(heightMap, size, size, 1);
     }
 
-    public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center) {
+    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center) {
         return this.createMesh(scale, tcScale, tcOffset, offsetAmount, totalSize, center, 1, false, false, false, false);
     }
 
-    public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center, int lod, boolean rightLod, boolean topLod, boolean leftLod, boolean bottomLod) {
+    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center, int lod, boolean rightLod, boolean topLod, boolean leftLod, boolean bottomLod) {
         FloatBuffer pb = writeVertexArray(null, scale, center);
         FloatBuffer texb = writeTexCoordArray(null, tcOffset, tcScale, offsetAmount, totalSize);
         FloatBuffer nb = writeNormalArray(null, scale);
@@ -85,7 +85,7 @@ public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, floa
         FloatBuffer bb = BufferUtils.createFloatBuffer(getWidth() * getHeight() * 3);
         FloatBuffer tanb = BufferUtils.createFloatBuffer(getWidth() * getHeight() * 3);
         writeTangentArray(nb, tanb, bb, texb, scale);
-        Mesh m = new Mesh();
+        GLMesh m = new GLMesh();
         m.setMode(Mode.TriangleStrip);
         m.setBuffer(Type.Position, 3, pb);
         m.setBuffer(Type.Normal, 3, nb);
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
index b4ffc5a12d..4cdb3184a1 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
@@ -43,7 +43,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.*;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
@@ -189,7 +189,7 @@ public TerrainPatch(String name, int size, Vector3f stepScale,
         setLocalTranslation(origin);
 
         geomap = new LODGeomap(size, heightMap);
-        Mesh m = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
+        GLMesh m = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
         setMesh(m);
 
     }
@@ -337,7 +337,7 @@ protected void updateNormals() {
         getMesh().getBuffer(Type.Binormal).updateData(newBinormalBuffer);
     }
 
-    private void setInBuffer(Mesh mesh, int index, Vector3f normal, Vector3f tangent, Vector3f binormal) {
+    private void setInBuffer(GLMesh mesh, int index, Vector3f normal, Vector3f tangent, Vector3f binormal) {
         VertexBuffer NB = mesh.getBuffer(Type.Normal);
         VertexBuffer TB = mesh.getBuffer(Type.Tangent);
         VertexBuffer BB = mesh.getBuffer(Type.Binormal);
@@ -893,7 +893,7 @@ private int collideWithBoundingBox(BoundingBox bbox, CollisionResults results) {
     public void write(JmeExporter ex) throws IOException {
         // the mesh is removed, and reloaded when read() is called
         // this reduces the save size to 10% by not saving the mesh
-        Mesh temp = getMesh();
+        GLMesh temp = getMesh();
         mesh = null;
 
         super.write(ex);
@@ -928,7 +928,7 @@ public void read(JmeImporter im) throws IOException {
         lodEntropy = ic.readFloatArray("lodEntropy", null);
         geomap = (LODGeomap) ic.readSavable("geomap", null);
 
-        Mesh regen = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
+        GLMesh regen = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
         setMesh(regen);
         //TangentBinormalGenerator.generate(this); // note that this will be removed
         ensurePositiveVolumeBBox();
@@ -952,7 +952,7 @@ public TerrainPatch clone() {
         //clone.setLodCalculator(lodCalculatorFactory.clone());
         clone.geomap = new LODGeomap(size, geomap.getHeightArray());
         clone.setLocalTranslation(getLocalTranslation().clone());
-        Mesh m = clone.geomap.createMesh(clone.stepScale, Vector2f.UNIT_XY, clone.offset, clone.offsetAmount, clone.totalSize, false);
+        GLMesh m = clone.geomap.createMesh(clone.stepScale, Vector2f.UNIT_XY, clone.offset, clone.offsetAmount, clone.totalSize, false);
         clone.setMesh(m);
         clone.setMaterial(material == null ? null : material.clone());
         return clone;
@@ -976,7 +976,7 @@ public void cloneFields( Cloner cloner, Object original ) {
         // Don't feel like making geomap cloneable tonight,
         // so I'll copy the old logic.
         this.geomap = new LODGeomap(size, geomap.getHeightArray());
-        Mesh m = geomap.createMesh(stepScale, Vector2f.UNIT_XY, offset, offsetAmount, totalSize, false);
+        GLMesh m = geomap.createMesh(stepScale, Vector2f.UNIT_XY, offset, offsetAmount, totalSize, false);
         this.setMesh(m);
 
         // In this case, we always clone material even if the cloner is set up
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
index 9057664d12..0bc8ab95ff 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
@@ -36,7 +36,7 @@
 import com.jme3.math.Matrix4f;
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
@@ -61,7 +61,7 @@ public class EntropyComputeUtil {
     private EntropyComputeUtil() {
     }
 
-    public static float computeLodEntropy(Mesh terrainBlock, Buffer lodIndices){
+    public static float computeLodEntropy(GLMesh terrainBlock, Buffer lodIndices){
         // Bounding box for the terrain block
         BoundingBox bbox = (BoundingBox) terrainBlock.getBound();
 
diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java b/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
index c6d0237321..e65f68edc1 100644
--- a/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
+++ b/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
@@ -12,7 +12,7 @@
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -644,8 +644,8 @@ private ViewPort setupViewBuffers(Camera cam, String viewName){
      * @param api the underlying VR api
      * @return the distorted mesh.
      */
-    public static Mesh setupDistortionMesh(int eye, VRAPI api) {
-        Mesh distortionMesh = new Mesh();
+    public static GLMesh setupDistortionMesh(int eye, VRAPI api) {
+        GLMesh distortionMesh = new GLMesh();
         float m_iLensGridSegmentCountH = 43, m_iLensGridSegmentCountV = 43;
 
         float w = 1f / (m_iLensGridSegmentCountH - 1f);
diff --git a/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java b/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
index e2911eba6f..9339fc2b8a 100644
--- a/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
+++ b/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
@@ -52,10 +52,10 @@
  * @deprecated use com.jme3.scene.shape.CenterQuad
  */
 @Deprecated
-public class CenterQuad extends Mesh {
+public class CenterQuad extends GLMesh {
 
     public static CenterQuad UnitQuad = new CenterQuad(0.5f, 0.5f);
-    public static Mesh CenterSplitQuad;
+    public static GLMesh CenterSplitQuad;
     
     private float width;
     private float height;

From 1718bbf9393764d583d7e54ee09f71312b78d05e Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Fri, 12 Sep 2025 15:21:14 -0400
Subject: [PATCH 58/80] Revert "temporarily renamed Mesh to GLMesh to not
 conflict with the new Mesh interface"

This reverts commit 29c1818510f57f4ef1187ae263da406672c04d0c.
---
 .../src/main/java/com/jme3/anim/Joint.java    |  2 +-
 .../main/java/com/jme3/anim/MorphControl.java | 10 ++---
 .../java/com/jme3/anim/SkinningControl.java   | 22 +++++-----
 .../main/java/com/jme3/animation/Bone.java    |  2 +-
 .../com/jme3/animation/SkeletonControl.java   | 22 +++++-----
 .../main/java/com/jme3/app/BasicProfiler.java | 10 ++---
 .../java/com/jme3/app/BasicProfilerState.java |  6 +--
 .../java/com/jme3/bounding/BoundingBox.java   |  4 +-
 .../com/jme3/collision/CollisionResult.java   |  4 +-
 .../java/com/jme3/collision/bih/BIHTree.java  | 12 ++---
 .../java/com/jme3/effect/ParticleMesh.java    |  4 +-
 .../shapes/EmitterMeshConvexHullShape.java    |  4 +-
 .../effect/shapes/EmitterMeshFaceShape.java   |  8 ++--
 .../effect/shapes/EmitterMeshVertexShape.java |  8 ++--
 .../environment/util/BoundingSphereDebug.java |  4 +-
 .../java/com/jme3/font/BitmapTextPage.java    | 10 ++---
 .../java/com/jme3/material/RenderState.java   |  6 +--
 .../logic/DefaultTechniqueDefLogic.java       |  4 +-
 .../java/com/jme3/renderer/RenderContext.java |  7 ++-
 .../java/com/jme3/renderer/RenderManager.java |  4 +-
 .../main/java/com/jme3/renderer/Renderer.java |  6 +--
 .../java/com/jme3/renderer/Statistics.java    |  6 +--
 .../com/jme3/renderer/opengl/GLRenderer.java  | 16 +++----
 .../main/java/com/jme3/scene/BatchNode.java   | 20 ++++-----
 .../main/java/com/jme3/scene/Geometry.java    | 28 ++++++------
 .../com/jme3/scene/GeometryGroupNode.java     |  2 +-
 .../com/jme3/scene/{GLMesh.java => Mesh.java} | 28 ++++++------
 .../src/main/java/com/jme3/scene/Spatial.java |  6 +--
 .../java/com/jme3/scene/VertexBuffer.java     |  2 +-
 .../com/jme3/scene/control/LodControl.java    |  4 +-
 .../main/java/com/jme3/scene/debug/Arrow.java |  4 +-
 .../main/java/com/jme3/scene/debug/Grid.java  |  4 +-
 .../jme3/scene/debug/SkeletonDebugger.java    |  4 +-
 .../scene/debug/SkeletonInterBoneWire.java    |  4 +-
 .../com/jme3/scene/debug/SkeletonPoints.java  |  4 +-
 .../com/jme3/scene/debug/SkeletonWire.java    |  4 +-
 .../java/com/jme3/scene/debug/WireBox.java    |  4 +-
 .../com/jme3/scene/debug/WireFrustum.java     |  6 +--
 .../java/com/jme3/scene/debug/WireSphere.java |  4 +-
 .../debug/custom/ArmatureInterJointsWire.java |  4 +-
 .../jme3/scene/debug/custom/ArmatureNode.java |  4 +-
 .../jme3/scene/debug/custom/JointShape.java   |  4 +-
 .../jme3/scene/instancing/InstancedNode.java  |  4 +-
 .../java/com/jme3/scene/mesh/IndexBuffer.java |  3 +-
 .../jme3/scene/mesh/VirtualIndexBuffer.java   |  2 +-
 .../jme3/scene/mesh/WrappedIndexBuffer.java   |  8 ++--
 .../com/jme3/scene/shape/AbstractBox.java     |  4 +-
 .../java/com/jme3/scene/shape/CenterQuad.java |  4 +-
 .../main/java/com/jme3/scene/shape/Curve.java | 12 ++---
 .../java/com/jme3/scene/shape/Cylinder.java   |  4 +-
 .../main/java/com/jme3/scene/shape/Dome.java  |  4 +-
 .../main/java/com/jme3/scene/shape/Line.java  |  4 +-
 .../java/com/jme3/scene/shape/PQTorus.java    |  4 +-
 .../main/java/com/jme3/scene/shape/Quad.java  |  4 +-
 .../com/jme3/scene/shape/RectangleMesh.java   |  4 +-
 .../java/com/jme3/scene/shape/Sphere.java     |  4 +-
 .../java/com/jme3/scene/shape/Surface.java    |  4 +-
 .../main/java/com/jme3/scene/shape/Torus.java |  4 +-
 .../java/com/jme3/system/NullRenderer.java    |  4 +-
 .../jme3/util/TangentBinormalGenerator.java   | 44 +++++++++----------
 .../main/java/com/jme3/util/TangentUtils.java | 16 +++----
 .../jme3/util/mikktspace/MikkTSpaceImpl.java  |  6 +--
 .../MikktspaceTangentGenerator.java           |  8 ++--
 .../natives => vulkan}/AbstractNative.java    |  4 +-
 .../java/com/jme3/vulkan/VulkanInstance.java  | 11 -----
 .../vulkan/buffers/BasicVulkanBuffer.java     |  2 +-
 .../vulkan/descriptors/DescriptorSet.java     |  2 +-
 .../jme3/vulkan/devices/LogicalDevice.java    |  2 +-
 .../jme3/vulkan/frames/PerFrameResource.java  |  6 ---
 .../jme3/vulkan/frames/SingleResource.java    | 29 ------------
 .../jme3/vulkan/frames/VersionedResource.java |  2 +-
 .../java/com/jme3/vulkan/images/GpuImage.java |  2 +-
 .../com/jme3/vulkan/images/ImageView.java     |  2 +-
 .../java/com/jme3/vulkan/images/Sampler.java  |  2 +-
 .../com/jme3/vulkan/mesh/AdaptiveMesh.java    | 20 ++++-----
 .../com/jme3/vulkan/mesh/MyCustomMesh.java    | 16 +++----
 .../java/com/jme3/vulkan/pass/RenderPass.java |  2 +-
 .../vulkan/pipelines/GraphicsPipeline.java    |  2 +-
 .../com/jme3/vulkan/pipelines/Pipeline.java   |  2 +-
 .../com/jme3/vulkan/surface/Swapchain.java    |  1 -
 .../java/com/jme3/vulkan/sync/Semaphore.java  |  2 +-
 .../com/jme3/scene/plugins/OBJLoader.java     |  8 ++--
 .../collision/CollideIgnoreTransformTest.java |  4 +-
 .../java/com/jme3/light/LightSortTest.java    |  6 +--
 .../jme3/renderer/OpaqueComparatorTest.java   |  4 +-
 .../com/jme3/scene/PhantomTrianglesTest.java  |  6 +--
 .../java/com/jme3/scene/mesh/MeshTest.java    |  4 +-
 .../scene/mesh/VirtualIndexBufferTest.java    |  2 +-
 .../java/com/jme3/tools/LodGeneratorTest.java | 10 ++---
 .../java/com/jme3/util/TestIssue1909.java     |  4 +-
 .../java/com/jme3/util/TestIssue1919.java     | 30 ++++++-------
 .../optimize/GeometryBatchFactory.java        | 16 +++----
 .../java/jme3tools/optimize/LodGenerator.java | 12 ++---
 .../java/jme3tools/optimize/TextureAtlas.java | 12 ++---
 .../jme3test/animation/TestIssue2076.java     |  6 +--
 .../jme3test/app/TestCustomAppSettings.java   |  6 +--
 .../main/java/jme3test/audio/TestAmbient.java |  4 +-
 .../jme3test/audio/TestAudioDirectional.java  |  4 +-
 .../main/java/jme3test/audio/TestDoppler.java |  4 +-
 .../src/main/java/jme3test/audio/TestOgg.java |  4 +-
 .../main/java/jme3test/audio/TestReverb.java  |  4 +-
 .../jme3test/bullet/PhysicsTestHelper.java    |  6 +--
 .../java/jme3test/bullet/TestIssue1120.java   |  4 +-
 .../bullet/shape/TestGimpactShape.java        |  6 +--
 .../jme3test/collision/TestRayCasting.java    |  4 +-
 .../collision/TestTriangleCollision.java      |  4 +-
 .../java/jme3test/games/WorldOfInception.java |  6 +--
 .../java/jme3test/light/TestObbVsBounds.java  |  2 +-
 .../java/jme3test/light/TestTangentGen.java   | 12 ++---
 .../light/pbr/TestIssue1903Compat.java        |  4 +-
 .../jme3test/material/TestGeometryShader.java |  6 +--
 .../material/TestTessellationShader.java      |  4 +-
 .../java/jme3test/math/TestRandomPoints.java  |  4 +-
 .../jme3test/model/anim/TestArmature.java     |  2 +-
 .../model/anim/TestBaseAnimSerialization.java |  2 +-
 .../jme3test/model/shape/TestCustomMesh.java  |  8 ++--
 .../jme3test/model/shape/TestDebugShapes.java |  4 +-
 .../renderer/TestBackgroundImage.java         |  4 +-
 .../java/jme3test/renderer/TestIssue37.java   |  4 +-
 .../java/jme3test/renderer/TestLineWidth.java |  4 +-
 .../scene/instancing/TestInstanceNode.java    | 10 ++---
 ...ancedNodeAttachDetachWithShadowFilter.java |  6 +--
 .../java/jme3test/stress/TestLeakingGL.java   |  4 +-
 .../jme3test/stress/TestLodGeneration.java    |  4 +-
 .../jme3test/texture/TestSkyRotation.java     |  4 +-
 .../jme3test/texture/TestTextureArray.java    |  4 +-
 .../texture/TestTextureArrayCompressed.java   |  4 +-
 .../jme3test/vulkan/VulkanHelperTest.java     | 21 +++------
 .../com/jme3/bullet/animation/DacLinks.java   |  8 ++--
 .../com/jme3/bullet/animation/RagUtils.java   | 42 +++++++++---------
 .../shapes/GImpactCollisionShape.java         |  8 ++--
 .../shapes/HeightfieldCollisionShape.java     |  4 +-
 .../collision/shapes/HullCollisionShape.java  |  8 ++--
 .../collision/shapes/MeshCollisionShape.java  | 10 ++---
 .../control/KinematicRagdollControl.java      |  4 +-
 .../jme3/bullet/control/RigidBodyControl.java |  4 +-
 .../bullet/control/ragdoll/RagdollUtils.java  | 18 ++++----
 .../bullet/util/CollisionShapeFactory.java    |  6 +--
 .../java/com/jme3/bullet/util/Converter.java  | 10 ++---
 .../jme3/bullet/util/DebugShapeFactory.java   | 10 ++---
 .../test/PreventBulletIssueRegressions.java   |  4 +-
 .../jme3/niftygui/JmeBatchRenderBackend.java  |  4 +-
 .../jme3/scene/plugins/fbx/mesh/FbxMesh.java  | 10 ++---
 .../jme3/scene/plugins/fbx/node/FbxNode.java  |  8 ++--
 .../scene/plugins/fbx/objects/FbxMesh.java    |  8 ++--
 .../scene/plugins/fbx/objects/FbxSkin.java    |  8 ++--
 .../jme3/scene/plugins/gltf/GltfLoader.java   |  2 +-
 .../jme3/scene/plugins/gltf/GltfUtils.java    | 26 +++++------
 .../gltf/TextureTransformExtensionLoader.java |  8 ++--
 .../java/com/jme3/scene/plugins/IrUtils.java  |  8 ++--
 .../jme3/scene/plugins/ogre/MeshLoader.java   | 18 ++++----
 .../animation/TestIssue2076.java              |  6 +--
 .../main/java/com/jme3/terrain/GeoMap.java    |  6 +--
 .../com/jme3/terrain/geomipmap/LODGeomap.java | 10 ++---
 .../jme3/terrain/geomipmap/TerrainPatch.java  | 14 +++---
 .../lodcalc/util/EntropyComputeUtil.java      |  4 +-
 .../input/vr/openvr/OpenVRViewManager.java    |  6 +--
 .../main/java/com/jme3/scene/CenterQuad.java  |  4 +-
 158 files changed, 550 insertions(+), 614 deletions(-)
 rename jme3-core/src/main/java/com/jme3/scene/{GLMesh.java => Mesh.java} (98%)
 rename jme3-core/src/main/java/com/jme3/{util/natives => vulkan}/AbstractNative.java (86%)

diff --git a/jme3-core/src/main/java/com/jme3/anim/Joint.java b/jme3-core/src/main/java/com/jme3/anim/Joint.java
index ad01d0b4bf..8f2275b202 100644
--- a/jme3-core/src/main/java/com/jme3/anim/Joint.java
+++ b/jme3-core/src/main/java/com/jme3/anim/Joint.java
@@ -366,7 +366,7 @@ protected Node getAttachmentsNode(int jointIndex, SafeArrayList target
          * Search for a geometry animated by this particular bone.
          */
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimatedByJoint(jointIndex)) {
                 targetGeometry = geometry;
                 break;
diff --git a/jme3-core/src/main/java/com/jme3/anim/MorphControl.java b/jme3-core/src/main/java/com/jme3/anim/MorphControl.java
index 4914b691d3..4c2f0a6c75 100644
--- a/jme3-core/src/main/java/com/jme3/anim/MorphControl.java
+++ b/jme3-core/src/main/java/com/jme3/anim/MorphControl.java
@@ -107,7 +107,7 @@ protected void controlUpdate(float tpf) {
     @Override
     protected void controlRender(RenderManager rm, ViewPort vp) {
         for (Geometry geom : targets.getArray()) {
-            GLMesh mesh = geom.getMesh();
+            Mesh mesh = geom.getMesh();
             if (!geom.isDirtyMorph()) {
                 continue;
             }
@@ -236,7 +236,7 @@ private int getMaxGPUTargets(RenderManager rm, Geometry geom, Material mat, int
         return maxGPUTargets;
     }
 
-    private int bindMorphTargetBuffer(GLMesh mesh, int targetNumBuffers, int boundBufferIdx, MorphTarget t) {
+    private int bindMorphTargetBuffer(Mesh mesh, int targetNumBuffers, int boundBufferIdx, MorphTarget t) {
         int start = VertexBuffer.Type.MorphTarget0.ordinal();
         if (targetNumBuffers >= 1) {
             activateBuffer(mesh, boundBufferIdx, start, t.getBuffer(VertexBuffer.Type.Position));
@@ -305,7 +305,7 @@ private void mergeTargetBuffer(float[] array, float weight, FloatBuffer src, boo
         }
     }
 
-    private void activateBuffer(GLMesh mesh, int idx, int start, FloatBuffer b) {
+    private void activateBuffer(Mesh mesh, int idx, int start, FloatBuffer b) {
         VertexBuffer.Type t = bufferTypes[start + idx];
         VertexBuffer vb = mesh.getBuffer(t);
         // only set the buffer if it's different
@@ -364,7 +364,7 @@ private int getTargetNumBuffers(MorphTarget morphTarget) {
      * @param renderer
      * @return
      */
-    private int getRemainingBuffers(GLMesh mesh, Renderer renderer) {
+    private int getRemainingBuffers(Mesh mesh, Renderer renderer) {
         int nbUsedBuffers = 0;
         for (VertexBuffer vb : mesh.getBufferList().getArray()) {
             boolean isMorphBuffer = vb.getBufferType().ordinal() >= VertexBuffer.Type.MorphTarget0.ordinal() && vb.getBufferType().ordinal() <= VertexBuffer.Type.MorphTarget9.ordinal();
@@ -471,7 +471,7 @@ public void visit(Geometry geom) {
             if (p == null) {
                 return;
             }
-            GLMesh mesh = geom.getMesh();
+            Mesh mesh = geom.getMesh();
             if (mesh != null && mesh.hasMorphTargets()) {
                 targets.add(geom);
                 // If the mesh is in a subgraph of a node with a SkinningControl it might have hardware skinning activated through mat param override even if it's not skinned.
diff --git a/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java b/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
index 10b2d52b64..7cc5f3c58b 100644
--- a/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
+++ b/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
@@ -143,7 +143,7 @@ private void switchToHardware() {
         numberOfJointsParam.setValue(numBones);
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(false);
             }
@@ -155,7 +155,7 @@ private void switchToSoftware() {
         jointMatricesParam.setEnabled(false);
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(true);
             }
@@ -215,7 +215,7 @@ public boolean isHardwareSkinningUsed() {
      * to the lists of animation targets.
      */
     private void findTargets(Geometry geometry) {
-        GLMesh mesh = geometry.getMesh();
+        Mesh mesh = geometry.getMesh();
         if (mesh != null && mesh.isAnimated()) {
             targets.add(geometry);
         }
@@ -257,7 +257,7 @@ private void controlRenderSoftware() {
         offsetMatrices = armature.computeSkinningMatrices();
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             // NOTE: This assumes code higher up has
             // already ensured this mesh is animated.
             // Otherwise a crash will happen in skin update.
@@ -317,7 +317,7 @@ protected void controlUpdate(float tpf) {
     //only do this for software updates
     void resetToBind() {
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 Buffer bwBuff = mesh.getBuffer(Type.BoneWeight).getData();
                 Buffer biBuff = mesh.getBuffer(Type.BoneIndex).getData();
@@ -424,11 +424,11 @@ public Armature getArmature() {
      *
      * @return a new array
      */
-    public GLMesh[] getTargets() {
-        GLMesh[] result = new GLMesh[targets.size()];
+    public Mesh[] getTargets() {
+        Mesh[] result = new Mesh[targets.size()];
         int i = 0;
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             result[i] = mesh;
             i++;
         }
@@ -442,7 +442,7 @@ public GLMesh[] getTargets() {
      * @param mesh           then mesh
      * @param offsetMatrices the transformation matrices to apply
      */
-    private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) {
+    private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) {
 
         VertexBuffer tb = mesh.getBuffer(Type.Tangent);
         if (tb == null) {
@@ -462,7 +462,7 @@ private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) {
      * @param mesh           the mesh
      * @param offsetMatrices the offset matrices to apply
      */
-    private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) {
+    private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
         if (maxWeightsPerVert <= 0) {
             throw new IllegalStateException("Max weights per vert is incorrectly set!");
@@ -569,7 +569,7 @@ private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) {
      * @param offsetMatrices the offsetMatrices to apply
      * @param tb             the tangent vertexBuffer
      */
-    private void applySkinningTangents(GLMesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
+    private void applySkinningTangents(Mesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
 
         if (maxWeightsPerVert <= 0) {
diff --git a/jme3-core/src/main/java/com/jme3/animation/Bone.java b/jme3-core/src/main/java/com/jme3/animation/Bone.java
index dddaea8ad6..2d4211b90a 100644
--- a/jme3-core/src/main/java/com/jme3/animation/Bone.java
+++ b/jme3-core/src/main/java/com/jme3/animation/Bone.java
@@ -722,7 +722,7 @@ Node getAttachmentsNode(int boneIndex, SafeArrayList targets) {
          * Search for a geometry animated by this particular bone.
          */
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimatedByBone(boneIndex)) {
                 targetGeometry = geometry;
                 break;
diff --git a/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java b/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
index a2e24714c6..2428919c5e 100644
--- a/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
+++ b/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
@@ -124,7 +124,7 @@ private void switchToHardware() {
         numberOfBonesParam.setValue(numBones);
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(false);
             }
@@ -136,7 +136,7 @@ private void switchToSoftware() {
         boneMatricesParam.setEnabled(false);
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(true);
             }
@@ -211,7 +211,7 @@ public SkeletonControl(Skeleton skeleton) {
      * to the lists of animation targets.
      */
     private void findTargets(Geometry geometry) {
-        GLMesh mesh = geometry.getMesh();
+        Mesh mesh = geometry.getMesh();
         if (mesh != null && mesh.isAnimated()) {
             targets.add(geometry);
         }
@@ -252,7 +252,7 @@ private void controlRenderSoftware() {
         offsetMatrices = skeleton.computeSkinningMatrices();
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             // NOTE: This assumes code higher up has
             // already ensured this mesh is animated.
             // Otherwise a crash will happen in skin update.
@@ -311,7 +311,7 @@ protected void controlUpdate(float tpf) {
     //only do this for software updates
     void resetToBind() {
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 Buffer bwBuff = mesh.getBuffer(Type.BoneWeight).getData();
                 Buffer biBuff = mesh.getBuffer(Type.BoneIndex).getData();
@@ -418,11 +418,11 @@ public Skeleton getSkeleton() {
      *
      * @return a new array
      */
-    public GLMesh[] getTargets() {
-        GLMesh[] result = new GLMesh[targets.size()];
+    public Mesh[] getTargets() {
+        Mesh[] result = new Mesh[targets.size()];
         int i = 0;
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             result[i] = mesh;
             i++;
         }
@@ -436,7 +436,7 @@ public GLMesh[] getTargets() {
      * @param mesh then mesh
      * @param offsetMatrices the transformation matrices to apply
      */
-    private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) {
+    private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) {
 
         VertexBuffer tb = mesh.getBuffer(Type.Tangent);
         if (tb == null) {
@@ -454,7 +454,7 @@ private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) {
      * @param mesh the mesh
      * @param offsetMatrices the offset matrices to apply
      */
-    private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) {
+    private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
         if (maxWeightsPerVert <= 0) {
             throw new IllegalStateException("Max weights per vert is incorrectly set!");
@@ -561,7 +561,7 @@ private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) {
      * @param offsetMatrices the offset matrices to apply
      * @param tb the tangent vertexBuffer
      */
-    private void applySkinningTangents(GLMesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
+    private void applySkinningTangents(Mesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
 
         if (maxWeightsPerVert <= 0) {
diff --git a/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java b/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java
index 974d6df77f..1c95730bbc 100644
--- a/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java
+++ b/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java
@@ -39,7 +39,7 @@
 import com.jme3.profile.VpStep;
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.nio.FloatBuffer;
@@ -73,7 +73,7 @@ public class BasicProfiler implements AppProfiler {
     private long updateInterval = 1000000L; // once a millisecond
     private long lastUpdate = 0;
 
-    private GLMesh mesh;
+    private Mesh mesh;
 
     public BasicProfiler() {
         this(1280);
@@ -128,14 +128,14 @@ public long getUpdateInterval() {
      *
      * @return the pre-existing Mesh
      */
-    public GLMesh getMesh() {
+    public Mesh getMesh() {
         return mesh;
     }
 
     protected final void createMesh() {
         if (mesh == null) {
-            mesh = new GLMesh();
-            mesh.setMode(GLMesh.Mode.Lines);
+            mesh = new Mesh();
+            mesh.setMode(Mesh.Mode.Lines);
         }
 
         mesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(size * 4 * 3));
diff --git a/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java b/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java
index 8dfb70d835..68ee1483fb 100644
--- a/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java
+++ b/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java
@@ -40,7 +40,7 @@
 import com.jme3.material.Material;
 import com.jme3.material.RenderState.BlendMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer.Type;
 
@@ -116,7 +116,7 @@ public int getFrameCount() {
     }
 
     protected void refreshBackground() {
-        GLMesh mesh = background.getMesh();
+        Mesh mesh = background.getMesh();
 
         int size = profiler.getFrameCount();
         float frameTime = 1000f / 60;
@@ -180,7 +180,7 @@ protected void initialize(Application app) {
         graph.setLocalTranslation(0, 300, 0);
         graph.setLocalScale(1, scale, 1);
 
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         background = new Geometry("profiler.background", mesh);
         mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setBoolean("VertexColor", true);
diff --git a/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java b/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
index e405b28650..6b0e023b34 100644
--- a/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
+++ b/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.*;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.util.TempVars;
 import java.io.IOException;
@@ -172,7 +172,7 @@ public void computeFromTris(Triangle[] tris, int start, int end) {
         vars.release();
     }
 
-    public void computeFromTris(int[] indices, GLMesh mesh, int start, int end) {
+    public void computeFromTris(int[] indices, Mesh mesh, int start, int end) {
         if (end - start <= 0) {
             return;
         }
diff --git a/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java b/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java
index a5fd5ff42d..95739f5a1c 100644
--- a/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java
+++ b/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java
@@ -34,7 +34,7 @@
 import com.jme3.math.Triangle;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 
 /**
  * A CollisionResult represents a single collision instance
@@ -90,7 +90,7 @@ public Triangle getTriangle(Triangle store) {
         if (store == null)
             store = new Triangle();
 
-        GLMesh m = geometry.getMesh();
+        Mesh m = geometry.getMesh();
         m.getTriangle(triangleIndex, store);
         store.calculateCenter();
         store.calculateNormal();
diff --git a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
index 749e90bfb0..fca434f750 100644
--- a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
+++ b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
@@ -46,8 +46,8 @@
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.CollisionData;
-import com.jme3.scene.GLMesh;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
@@ -62,7 +62,7 @@ public class BIHTree implements CollisionData {
 
     public static final int MAX_TREE_DEPTH = 100;
     public static final int MAX_TRIS_PER_NODE = 21;
-    private GLMesh mesh;
+    private Mesh mesh;
     private BIHNode root;
     private int maxTrisPerNode;
     private int numTris;
@@ -98,7 +98,7 @@ private void initTriList(FloatBuffer vb, IndexBuffer ib) {
         }
     }
 
-    public BIHTree(GLMesh mesh, int maxTrisPerNode) {
+    public BIHTree(Mesh mesh, int maxTrisPerNode) {
         this.mesh = mesh;
         this.maxTrisPerNode = maxTrisPerNode;
 
@@ -128,7 +128,7 @@ public BIHTree(GLMesh mesh, int maxTrisPerNode) {
         initTriList(vb, ib);
     }
 
-    public BIHTree(GLMesh mesh) {
+    public BIHTree(Mesh mesh) {
         this(mesh, MAX_TRIS_PER_NODE);
     }
 
@@ -484,7 +484,7 @@ public void write(JmeExporter ex) throws IOException {
     @Override
     public void read(JmeImporter im) throws IOException {
         InputCapsule ic = im.getCapsule(this);
-        mesh = (GLMesh) ic.readSavable("mesh", null);
+        mesh = (Mesh) ic.readSavable("mesh", null);
         root = (BIHNode) ic.readSavable("root", null);
         maxTrisPerNode = ic.readInt("tris_per_node", 0);
         pointData = ic.readFloatArray("points", null);
diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java
index 1c9f43b9a8..b4333ae9f8 100644
--- a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java
+++ b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Matrix3f;
 import com.jme3.renderer.Camera;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 
 /**
  * The ParticleMesh is the underlying visual implementation of a 
@@ -41,7 +41,7 @@
  * 
  * @author Kirill Vainer
  */
-public abstract class ParticleMesh extends GLMesh {
+public abstract class ParticleMesh extends Mesh {
 
     /**
      * Type of particle mesh
diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java
index ea42e95ca4..e7ccd18f33 100644
--- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java
+++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import java.util.List;
 
 /**
@@ -55,7 +55,7 @@ public EmitterMeshConvexHullShape() {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public EmitterMeshConvexHullShape(List meshes) {
+    public EmitterMeshConvexHullShape(List meshes) {
         super(meshes);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java
index 8ee9d60e2e..cda0c911eb 100644
--- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java
+++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.util.ArrayList;
@@ -56,15 +56,15 @@ public EmitterMeshFaceShape() {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public EmitterMeshFaceShape(List meshes) {
+    public EmitterMeshFaceShape(List meshes) {
         super(meshes);
     }
 
     @Override
-    public void setMeshes(List meshes) {
+    public void setMeshes(List meshes) {
         this.vertices = new ArrayList>(meshes.size());
         this.normals = new ArrayList>(meshes.size());
-        for (GLMesh mesh : meshes) {
+        for (Mesh mesh : meshes) {
             Vector3f[] vertexTable = BufferUtils.getVector3Array(mesh.getFloatBuffer(Type.Position));
             int[] indices = new int[3];
             List vertices = new ArrayList<>(mesh.getTriangleCount() * 3);
diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java
index 3939304586..cadb07ca48 100644
--- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java
+++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java
@@ -37,7 +37,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.clone.Cloner;
@@ -68,7 +68,7 @@ public EmitterMeshVertexShape() {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public EmitterMeshVertexShape(List meshes) {
+    public EmitterMeshVertexShape(List meshes) {
         this.setMeshes(meshes);
     }
 
@@ -77,12 +77,12 @@ public EmitterMeshVertexShape(List meshes) {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public void setMeshes(List meshes) {
+    public void setMeshes(List meshes) {
         Map vertToNormalMap = new HashMap<>();
 
         this.vertices = new ArrayList>(meshes.size());
         this.normals = new ArrayList>(meshes.size());
-        for (GLMesh mesh : meshes) {
+        for (Mesh mesh : meshes) {
             // fetching the data
             float[] vertexTable = BufferUtils.getFloatArray(mesh.getFloatBuffer(Type.Position));
             float[] normalTable = BufferUtils.getFloatArray(mesh.getFloatBuffer(Type.Normal));
diff --git a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java
index f8ac7f94e2..622164e4a1 100644
--- a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java
+++ b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java
@@ -36,7 +36,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.FastMath;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.nio.FloatBuffer;
@@ -49,7 +49,7 @@
  * 
  * @author nehon
  */
-public class BoundingSphereDebug extends GLMesh {
+public class BoundingSphereDebug extends Mesh {
 
     protected int vertCount;
     protected int triCount;
diff --git a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java
index b7059ceaaa..c4ac9b26f0 100644
--- a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java
+++ b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java
@@ -33,7 +33,7 @@
 
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Texture2D;
@@ -59,7 +59,7 @@ class BitmapTextPage extends Geometry {
     private final LinkedList pageQuads = new LinkedList<>();
 
     BitmapTextPage(BitmapFont font, boolean arrayBased, int page) {
-        super("BitmapFont", new GLMesh());
+        super("BitmapFont", new Mesh());
         setRequiresUpdates(false);
         setBatchHint(BatchHint.Never);
         if (font == null) {
@@ -77,7 +77,7 @@ class BitmapTextPage extends Geometry {
         this.texture = (Texture2D) mat.getTextureParam("ColorMap").getTextureValue();
 
         // initialize buffers
-        GLMesh m = getMesh();
+        Mesh m = getMesh();
         m.setBuffer(Type.Position, 3, new float[0]);
         m.setBuffer(Type.TexCoord, 2, new float[0]);
         m.setBuffer(Type.Color, 4, new byte[0]);
@@ -130,7 +130,7 @@ public BitmapTextPage clone() {
     @Override
     public void cloneFields(Cloner cloner, Object original) {
         
-        GLMesh originalMesh = this.mesh;
+        Mesh originalMesh = this.mesh;
     
         super.cloneFields(cloner, original);
         
@@ -162,7 +162,7 @@ void assemble(Letters quads) {
             }
         }
 
-        GLMesh m = getMesh();
+        Mesh m = getMesh();
         int vertCount = pageQuads.size() * 4;
         int triCount = pageQuads.size() * 2;
 
diff --git a/jme3-core/src/main/java/com/jme3/material/RenderState.java b/jme3-core/src/main/java/com/jme3/material/RenderState.java
index 1002b350c3..7f21e8abfa 100644
--- a/jme3-core/src/main/java/com/jme3/material/RenderState.java
+++ b/jme3-core/src/main/java/com/jme3/material/RenderState.java
@@ -32,7 +32,7 @@
 package com.jme3.material;
 
 import com.jme3.export.*;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import java.io.IOException;
 
 /**
@@ -880,7 +880,7 @@ public void setDepthWrite(boolean depthWrite) {
     /**
      * Enables wireframe rendering mode.
      *
-     * 

When in wireframe mode, {@link GLMesh meshes} rendered in triangle mode + *

When in wireframe mode, {@link Mesh meshes} rendered in triangle mode * will not be solid, but instead, only the edges of the triangles * will be rendered. * @@ -982,7 +982,7 @@ public void setDepthFunc(TestFunction depthFunc) { /** * Sets the mesh line width. * Use this in conjunction with {@link #setWireframe(boolean)} or with a mesh in - * {@link GLMesh.Mode#Lines} mode. + * {@link com.jme3.scene.Mesh.Mode#Lines} mode. * Note: this does not work in OpenGL core profile. It only works in * compatibility profile. * diff --git a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java index b295c7588b..ca8f7d1efa 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java @@ -40,7 +40,7 @@ import com.jme3.renderer.RenderManager; import com.jme3.renderer.Renderer; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.instancing.InstancedGeometry; import com.jme3.shader.DefineList; import com.jme3.shader.Shader; @@ -61,7 +61,7 @@ public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager } public static void renderMeshFromGeometry(Renderer renderer, Geometry geom) { - GLMesh mesh = geom.getMesh(); + Mesh mesh = geom.getMesh(); int lodLevel = geom.getLodLevel(); if (geom instanceof InstancedGeometry) { InstancedGeometry instGeom = (InstancedGeometry) geom; diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java index 0d153674a6..ea6088afb9 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java @@ -33,7 +33,6 @@ import com.jme3.material.RenderState; import com.jme3.math.ColorRGBA; -import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.shader.Shader; import com.jme3.texture.FrameBuffer; @@ -227,21 +226,21 @@ public class RenderContext { /** * Currently bound element array vertex buffer. * - * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(com.jme3.scene.Mesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundElementArrayVBO; /** * ID of the bound vertex array. * - * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(com.jme3.scene.Mesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundVertexArray; /** * Currently bound array vertex buffer. * - * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(com.jme3.scene.Mesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundArrayVBO; diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java index 6d6a1afeac..c59ffd9084 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java @@ -54,7 +54,7 @@ import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.renderer.queue.RenderQueue.ShadowMode; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.scene.VertexBuffer; @@ -890,7 +890,7 @@ public void preloadScene(Spatial scene) { } gm.getMaterial().preload(this, gm); - GLMesh mesh = gm.getMesh(); + Mesh mesh = gm.getMesh(); if (mesh != null && mesh.getVertexCount() != 0 && mesh.getTriangleCount() != 0) { diff --git a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java index e8a517c2b6..acd0d599e1 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java @@ -33,7 +33,7 @@ import com.jme3.material.RenderState; import com.jme3.math.ColorRGBA; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.shader.bufferobject.BufferObject; import com.jme3.shader.Shader; @@ -351,12 +351,12 @@ public void setTexture(int unit, Texture tex) * per-instance vertex attribute to the shader. * * @param mesh The mesh to render - * @param lod The LOD level to use, see {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. + * @param lod The LOD level to use, see {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. * @param count Number of mesh instances to render * @param instanceData When count is greater than 1, these buffers provide * the per-instance attributes. */ - public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData); + public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData); /** * Resets all previously used {@link NativeObject Native Objects} on this Renderer. diff --git a/jme3-core/src/main/java/com/jme3/renderer/Statistics.java b/jme3-core/src/main/java/com/jme3/renderer/Statistics.java index 8cf89bb171..b2766df154 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Statistics.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Statistics.java @@ -31,7 +31,7 @@ */ package com.jme3.renderer; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.shader.Shader; import com.jme3.texture.FrameBuffer; import com.jme3.texture.Image; @@ -172,7 +172,7 @@ public void getData(int[] data) { * @param lod which level of detail * @param count multiplier for triangles and vertices */ - public void onMeshDrawn(GLMesh mesh, int lod, int count) { + public void onMeshDrawn(Mesh mesh, int lod, int count) { if (!enabled) { return; } @@ -188,7 +188,7 @@ public void onMeshDrawn(GLMesh mesh, int lod, int count) { * @param mesh the Mesh that was drawn (not null) * @param lod which level of detail */ - public void onMeshDrawn(GLMesh mesh, int lod) { + public void onMeshDrawn(Mesh mesh, int lod) { onMeshDrawn(mesh, lod, 1); } diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index b65d402ca2..09a560d4a6 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -39,8 +39,8 @@ import com.jme3.math.*; import com.jme3.opencl.OpenCLObjectManager; import com.jme3.renderer.*; -import com.jme3.scene.GLMesh; -import com.jme3.scene.GLMesh.Mode; +import com.jme3.scene.Mesh; +import com.jme3.scene.Mesh.Mode; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -3227,7 +3227,7 @@ public void setVertexAttrib(VertexBuffer vb) { setVertexAttrib(vb, null); } - public void drawTriangleArray(GLMesh.Mode mode, int count, int vertCount) { + public void drawTriangleArray(Mesh.Mode mode, int count, int vertCount) { boolean useInstancing = count > 1 && caps.contains(Caps.MeshInstancing); if (useInstancing) { glext.glDrawArraysInstancedARB(convertElementMode(mode), 0, @@ -3237,7 +3237,7 @@ public void drawTriangleArray(GLMesh.Mode mode, int count, int vertCount) { } } - public void drawTriangleList(VertexBuffer indexBuf, GLMesh mesh, int count) { + public void drawTriangleList(VertexBuffer indexBuf, Mesh mesh, int count) { if (indexBuf.getBufferType() != VertexBuffer.Type.Index) { throw new IllegalArgumentException("Only index buffers are allowed as triangle lists."); } @@ -3340,7 +3340,7 @@ public void drawTriangleList(VertexBuffer indexBuf, GLMesh mesh, int count) { * @param mode input enum value (not null) * @return the corresponding GL value */ - public int convertElementMode(GLMesh.Mode mode) { + public int convertElementMode(Mesh.Mode mode) { switch (mode) { case Points: return GL.GL_POINTS; @@ -3363,7 +3363,7 @@ public int convertElementMode(GLMesh.Mode mode) { } } - public void updateVertexArray(GLMesh mesh, VertexBuffer instanceData) { + public void updateVertexArray(Mesh mesh, VertexBuffer instanceData) { int id = mesh.getId(); if (id == -1) { IntBuffer temp = intBuf1; @@ -3403,7 +3403,7 @@ public void updateVertexArray(GLMesh mesh, VertexBuffer instanceData) { } } - private void renderMeshDefault(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) { + private void renderMeshDefault(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { // Here while count is still passed in. Can be removed when/if // the method is collapsed again. -pspeed @@ -3453,7 +3453,7 @@ private void renderMeshDefault(GLMesh mesh, int lod, int count, VertexBuffer[] i } @Override - public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) { + public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { if (mesh.getVertexCount() == 0 || mesh.getTriangleCount() == 0 || count == 0) { return; } diff --git a/jme3-core/src/main/java/com/jme3/scene/BatchNode.java b/jme3-core/src/main/java/com/jme3/scene/BatchNode.java index 3308422d66..aa5d62a02a 100644 --- a/jme3-core/src/main/java/com/jme3/scene/BatchNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/BatchNode.java @@ -128,8 +128,8 @@ protected Matrix4f getTransformMatrix(Geometry g) { protected void updateSubBatch(Geometry bg) { Batch batch = batchesByGeom.get(bg); if (batch != null) { - GLMesh mesh = batch.geometry.getMesh(); - GLMesh origMesh = bg.getMesh(); + Mesh mesh = batch.geometry.getMesh(); + Mesh origMesh = bg.getMesh(); VertexBuffer pvb = mesh.getBuffer(VertexBuffer.Type.Position); VertexBuffer nvb = mesh.getBuffer(VertexBuffer.Type.Normal); @@ -202,7 +202,7 @@ protected void doBatch() { } for (Map.Entry> entry : matMap.entrySet()) { - GLMesh m = new GLMesh(); + Mesh m = new Mesh(); Material material = entry.getKey(); List list = entry.getValue(); nbGeoms += list.size(); @@ -377,7 +377,7 @@ public Material getMaterial() { * @param geometries * @param outMesh */ - private void mergeGeometries(GLMesh outMesh, List geometries) { + private void mergeGeometries(Mesh outMesh, List geometries) { int[] compsForBuf = new int[VertexBuffer.Type.values().length]; VertexBuffer.Format[] formatForBuf = new VertexBuffer.Format[compsForBuf.length]; boolean[] normForBuf = new boolean[VertexBuffer.Type.values().length]; @@ -387,30 +387,30 @@ private void mergeGeometries(GLMesh outMesh, List geometries) { int totalLodLevels = 0; int maxWeights = -1; - GLMesh.Mode mode = null; + Mesh.Mode mode = null; for (Geometry geom : geometries) { totalVerts += geom.getVertexCount(); totalTris += geom.getTriangleCount(); totalLodLevels = Math.min(totalLodLevels, geom.getMesh().getNumLodLevels()); - GLMesh.Mode listMode; + Mesh.Mode listMode; int components; switch (geom.getMesh().getMode()) { case Points: - listMode = GLMesh.Mode.Points; + listMode = Mesh.Mode.Points; components = 1; break; case LineLoop: case LineStrip: case Lines: - listMode = GLMesh.Mode.Lines; + listMode = Mesh.Mode.Lines; //listLineWidth = geom.getMesh().getLineWidth(); components = 2; break; case TriangleFan: case TriangleStrip: case Triangles: - listMode = GLMesh.Mode.Triangles; + listMode = Mesh.Mode.Triangles; components = 3; break; default: @@ -472,7 +472,7 @@ private void mergeGeometries(GLMesh outMesh, List geometries) { int globalTriIndex = 0; for (Geometry geom : geometries) { - GLMesh inMesh = geom.getMesh(); + Mesh inMesh = geom.getMesh(); if (!isBatch(geom)) { geom.associateWithGroupNode(this, globalVertIndex); } diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java index 435f061fa1..008e987f1d 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java +++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java @@ -56,7 +56,7 @@ * Geometry defines a leaf node of the scene graph. The leaf node * contains the geometric data for rendering objects. It manages all rendering * information such as a {@link Material} object to define how the surface - * should be shaded and the {@link GLMesh} data to contain the actual geometry. + * should be shaded and the {@link Mesh} data to contain the actual geometry. * * @author Kirill Vainer */ @@ -65,7 +65,7 @@ public class Geometry extends Spatial { // models loaded with shared mesh will be automatically fixed. public static final int SAVABLE_VERSION = 1; private static final Logger logger = Logger.getLogger(Geometry.class.getName()); - protected GLMesh mesh; + protected Mesh mesh; protected transient int lodLevel = 0; protected Material material; /** @@ -126,7 +126,7 @@ public Geometry(String name) { * @param name The name of this geometry * @param mesh The mesh data for this geometry */ - public Geometry(String name, GLMesh mesh) { + public Geometry(String name, Mesh mesh) { this(name); if (mesh == null) { @@ -143,7 +143,7 @@ public Geometry(String name, GLMesh mesh) { * @param mesh The mesh data for this geometry * @param material The material for this geometry */ - public Geometry(String name, GLMesh mesh, Material material) { + public Geometry(String name, Mesh mesh, Material material) { this(name, mesh); setMaterial(material); } @@ -177,7 +177,7 @@ public void setIgnoreTransform(boolean ignoreTransform) { * Sets the LOD level to use when rendering the mesh of this geometry. * Level 0 indicates that the default index buffer should be used, * levels [1, LodLevels + 1] represent the levels set on the mesh - * with {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. + * with {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. * * @param lod The lod level to set */ @@ -212,7 +212,7 @@ public int getLodLevel() { * * @return this geometry's mesh vertex count. * - * @see GLMesh#getVertexCount() + * @see Mesh#getVertexCount() */ @Override public int getVertexCount() { @@ -224,7 +224,7 @@ public int getVertexCount() { * * @return this geometry's mesh triangle count. * - * @see GLMesh#getTriangleCount() + * @see Mesh#getTriangleCount() */ @Override public int getTriangleCount() { @@ -238,7 +238,7 @@ public int getTriangleCount() { * * @throws IllegalArgumentException If mesh is null */ - public void setMesh(GLMesh mesh) { + public void setMesh(Mesh mesh) { if (mesh == null) { throw new IllegalArgumentException(); } @@ -256,9 +256,9 @@ public void setMesh(GLMesh mesh) { * * @return the mesh to use for this geometry * - * @see #setMesh(GLMesh) + * @see #setMesh(com.jme3.scene.Mesh) */ - public GLMesh getMesh() { + public Mesh getMesh() { return mesh; } @@ -450,7 +450,7 @@ public Matrix4f getWorldMatrix() { /** * Sets the model bound to use for this geometry. * This alters the bound used on the mesh as well via - * {@link GLMesh#setBound(com.jme3.bounding.BoundingVolume) } and + * {@link Mesh#setBound(com.jme3.bounding.BoundingVolume) } and * forces the world bounding volume to be recomputed. * * @param modelBound The model bound to set @@ -585,7 +585,7 @@ public void cloneFields(Cloner cloner, Object original) { this.cachedWorldMat = cloner.clone(cachedWorldMat); // See if we are doing a shallow clone or a deep mesh clone - boolean shallowClone = (cloner.getCloneFunction(GLMesh.class) instanceof IdentityCloneFunction); + boolean shallowClone = (cloner.getCloneFunction(Mesh.class) instanceof IdentityCloneFunction); // See if we clone the mesh using the special animation // semi-deep cloning @@ -731,7 +731,7 @@ public void write(JmeExporter ex) throws IOException { public void read(JmeImporter im) throws IOException { super.read(im); InputCapsule ic = im.getCapsule(this); - mesh = (GLMesh) ic.readSavable("mesh", null); + mesh = (Mesh) ic.readSavable("mesh", null); material = null; String matName = ic.readString("materialName", null); @@ -756,7 +756,7 @@ public void read(JmeImporter im) throws IOException { if (ic.getSavableVersion(Geometry.class) == 0) { // Fix shared mesh (if set) - GLMesh sharedMesh = getUserData(UserData.JME_SHAREDMESH); + Mesh sharedMesh = getUserData(UserData.JME_SHAREDMESH); if (sharedMesh != null) { getMesh().extractVertexData(sharedMesh); setUserData(UserData.JME_SHAREDMESH, null); diff --git a/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java b/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java index 6b934ba5e0..db245392ca 100644 --- a/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java @@ -57,7 +57,7 @@ public GeometryGroupNode(String name) { /** * Called by {@link Geometry geom} to specify that its - * {@link Geometry#setMesh(GLMesh) mesh} + * {@link Geometry#setMesh(com.jme3.scene.Mesh) mesh} * has been changed. * * This is also called when the geometry's diff --git a/jme3-core/src/main/java/com/jme3/scene/GLMesh.java b/jme3-core/src/main/java/com/jme3/scene/Mesh.java similarity index 98% rename from jme3-core/src/main/java/com/jme3/scene/GLMesh.java rename to jme3-core/src/main/java/com/jme3/scene/Mesh.java index b9e19d2a52..2819c2838f 100644 --- a/jme3-core/src/main/java/com/jme3/scene/GLMesh.java +++ b/jme3-core/src/main/java/com/jme3/scene/Mesh.java @@ -64,7 +64,7 @@ * * @author Kirill Vainer */ -public class GLMesh implements Savable, Cloneable, JmeCloneable { +public class Mesh implements Savable, Cloneable, JmeCloneable { /** * The mode of the Mesh specifies both the type of primitive represented @@ -119,8 +119,8 @@ public enum Mode { /** * A combination of various triangle modes. It is best to avoid * using this mode as it may not be supported by all renderers. - * The {@link GLMesh#setModeStart(int[]) mode start points} and - * {@link GLMesh#setElementLengths(int[]) element lengths} must + * The {@link Mesh#setModeStart(int[]) mode start points} and + * {@link Mesh#setElementLengths(int[]) element lengths} must * be specified for this mode. */ Hybrid(false), @@ -198,7 +198,7 @@ public boolean isListMode() { /** * Creates a new mesh with no {@link VertexBuffer vertex buffers}. */ - public GLMesh() { + public Mesh() { } /** @@ -209,9 +209,9 @@ public GLMesh() { * @return A shallow clone of the mesh */ @Override - public GLMesh clone() { + public Mesh clone() { try { - GLMesh clone = (GLMesh) super.clone(); + Mesh clone = (Mesh) super.clone(); clone.meshBound = meshBound.clone(); clone.collisionTree = collisionTree != null ? collisionTree : null; clone.buffers = buffers.clone(); @@ -236,9 +236,9 @@ public GLMesh clone() { * * @return a deep clone of this mesh. */ - public GLMesh deepClone() { + public Mesh deepClone() { try { - GLMesh clone = (GLMesh) super.clone(); + Mesh clone = (Mesh) super.clone(); clone.meshBound = meshBound != null ? meshBound.clone() : null; // TODO: Collision tree cloning @@ -279,8 +279,8 @@ public GLMesh deepClone() { * * @return A clone of the mesh for animation use. */ - public GLMesh cloneForAnim() { - GLMesh clone = clone(); + public Mesh cloneForAnim() { + Mesh clone = clone(); if (getBuffer(Type.BindPosePosition) != null) { VertexBuffer oldPos = getBuffer(Type.Position); @@ -310,9 +310,9 @@ public GLMesh cloneForAnim() { * Called internally by com.jme3.util.clone.Cloner. Do not call directly. */ @Override - public GLMesh jmeClone() { + public Mesh jmeClone() { try { - GLMesh clone = (GLMesh) super.clone(); + Mesh clone = (Mesh) super.clone(); clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID; return clone; } catch (CloneNotSupportedException ex) { @@ -585,7 +585,7 @@ public void setModeStart(int[] modeStart) { * * @return the mesh mode * - * @see #setMode(GLMesh.Mode) + * @see #setMode(com.jme3.scene.Mesh.Mode) */ public Mode getMode() { return mode; @@ -1254,7 +1254,7 @@ public IndexBuffer getIndexBuffer() { * * @param other The mesh to extract the vertex data from */ - public void extractVertexData(GLMesh other) { + public void extractVertexData(Mesh other) { // Determine the number of unique vertices need to // be created. Also determine the mappings // between old indices to new indices (since we avoid duplicating diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java index ce2d962e97..2fe1775d3e 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java +++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java @@ -1403,7 +1403,7 @@ public void setLodLevel(int lod) { * are shared if static, or specially cloned if animated. * * @param cloneMaterial true to clone materials, false to share them - * @see GLMesh#cloneForAnim() + * @see Mesh#cloneForAnim() */ public Spatial clone(boolean cloneMaterial) { // Set up the cloner for the type of cloning we want to do. @@ -1421,7 +1421,7 @@ public Spatial clone(boolean cloneMaterial) { // By default, the meshes are not cloned. The geometry // may choose to selectively force them to be cloned, but // normally they will be shared. - cloner.setCloneFunction(GLMesh.class, new IdentityCloneFunction()); + cloner.setCloneFunction(Mesh.class, new IdentityCloneFunction()); // Clone it! Spatial clone = cloner.clone(this); @@ -1453,7 +1453,7 @@ public Spatial oldClone(boolean cloneMaterial) { * Note that meshes of geometries are not cloned explicitly, they * are shared if static, or specially cloned if animated. * - * @see GLMesh#cloneForAnim() + * @see Mesh#cloneForAnim() */ @Override public Spatial clone() { diff --git a/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java index 591ab4d07f..8c0a388bb7 100644 --- a/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java @@ -41,7 +41,7 @@ /** * A VertexBuffer contains a particular type of geometry - * data used by {@link GLMesh}es. Every VertexBuffer set on a Mesh + * data used by {@link Mesh}es. Every VertexBuffer set on a Mesh * is sent as an attribute to the vertex shader to be processed. *

* Several terms are used throughout the javadoc for this class, explanation: diff --git a/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java b/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java index f2b01ed732..fc03a584c8 100644 --- a/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java +++ b/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java @@ -41,7 +41,7 @@ import com.jme3.renderer.RenderManager; import com.jme3.renderer.ViewPort; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.Spatial; import com.jme3.util.clone.JmeCloneable; import java.io.IOException; @@ -128,7 +128,7 @@ public void setSpatial(Spatial spatial) { if(spatial != null) { Geometry geom = (Geometry) spatial; - GLMesh mesh = geom.getMesh(); + Mesh mesh = geom.getMesh(); numLevels = mesh.getNumLodLevels(); numTris = new int[numLevels]; for (int i = numLevels - 1; i >= 0; i--) { diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java index 4eab348759..8f46298693 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java @@ -33,7 +33,7 @@ import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import java.nio.FloatBuffer; @@ -45,7 +45,7 @@ * * @author Kirill Vainer */ -public class Arrow extends GLMesh { +public class Arrow extends Mesh { private final Quaternion tempQuat = new Quaternion(); private final Vector3f tempVec = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java index bc801b4475..d2947e52a9 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java @@ -31,7 +31,7 @@ */ package com.jme3.scene.debug; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; @@ -43,7 +43,7 @@ * * @author Kirill Vainer */ -public class Grid extends GLMesh { +public class Grid extends Mesh { public Grid() { } diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java index e7ec73e33c..f8f450ab47 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java @@ -35,7 +35,7 @@ import com.jme3.export.JmeImporter; import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.Node; import com.jme3.util.clone.Cloner; @@ -151,7 +151,7 @@ public void read(JmeImporter importer) throws IOException { } @SuppressWarnings("unchecked") - private T getMesh(String suffix) { + private T getMesh(String suffix) { Geometry child = (Geometry)getChild(getGeometryName(suffix)); if(child != null) { return (T) child.getMesh(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java index 14b165ff15..6db686bed8 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java @@ -41,7 +41,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -55,7 +55,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class SkeletonInterBoneWire extends GLMesh { +public class SkeletonInterBoneWire extends Mesh { private static final int POINT_AMOUNT = 10; /** The amount of connections between bones. */ private int connectionsAmount; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java index 3771f469a9..878b611673 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java @@ -38,7 +38,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -53,7 +53,7 @@ /** * The class that displays either heads of the bones if no length data is supplied or both heads and tails otherwise. */ -public class SkeletonPoints extends GLMesh { +public class SkeletonPoints extends Mesh { /** The skeleton to be displayed. */ private Skeleton skeleton; /** The map between the bone index and its length. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java index 8ad463b3e1..afcecce778 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java @@ -42,7 +42,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -55,7 +55,7 @@ * The class that displays either wires between the bones' heads if no length data is supplied and * full bones' shapes otherwise. */ -public class SkeletonWire extends GLMesh { +public class SkeletonWire extends Mesh { /** The number of bones' connections. Used in non-length mode. */ private int numConnections; /** The skeleton to be displayed. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java index 86827d3e2a..38593898c1 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java @@ -34,7 +34,7 @@ import com.jme3.bounding.BoundingBox; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -42,7 +42,7 @@ import com.jme3.util.BufferUtils; import java.nio.FloatBuffer; -public class WireBox extends GLMesh { +public class WireBox extends Mesh { public WireBox() { this(1,1,1); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java index 7426d7eeb5..9a2de74927 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java @@ -34,7 +34,7 @@ import com.jme3.math.Vector3f; import com.jme3.renderer.Camera; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; @@ -52,7 +52,7 @@ * and four for the far plane. These points are connected by lines * to form a wireframe cube-like structure. */ -public class WireFrustum extends GLMesh { +public class WireFrustum extends Mesh { /** * For Serialization only. Do not use. @@ -161,7 +161,7 @@ public void update(Vector3f[] points) { * @param points An array of 8 `Vector3f` objects representing the frustum's corners. * @return A new `WireFrustum` instance. */ - public static GLMesh makeFrustum(Vector3f[] points) { + public static Mesh makeFrustum(Vector3f[] points) { return new WireFrustum(points); } diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java index 5793c2af63..72ee624bb0 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java @@ -35,7 +35,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -45,7 +45,7 @@ import java.nio.FloatBuffer; import java.nio.ShortBuffer; -public class WireSphere extends GLMesh { +public class WireSphere extends Mesh { private static final int samples = 30; private static final int zSamples = 10; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java index 53ccbb7ebe..1fe8bdcdc6 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java @@ -34,7 +34,7 @@ import com.jme3.math.Vector3f; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; @@ -45,7 +45,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class ArmatureInterJointsWire extends GLMesh { +public class ArmatureInterJointsWire extends Mesh { private final Vector3f tmp = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java index adc11bd17d..c46466f181 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java @@ -117,8 +117,8 @@ protected final void createSkeletonGeoms(Joint joint, Node joints, Node wires, N if (ends == null) { geomToJoint.put(jGeom, joint); } else { - GLMesh m = null; - GLMesh mO = null; + Mesh m = null; + Mesh mO = null; Node wireAttach = wires; Node outlinesAttach = outlines; if (ends.length == 1) { diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java index c8a541be97..989667eb23 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java @@ -32,10 +32,10 @@ package com.jme3.scene.debug.custom; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer.Type; -public class JointShape extends GLMesh { +public class JointShape extends Mesh { /** * Serialization only. Do not use. diff --git a/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java b/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java index ef277e7d40..821264f9a6 100644 --- a/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java @@ -59,11 +59,11 @@ static void setGeometryStartIndex2(Geometry geom, int startIndex) { private static final class InstanceTypeKey implements Cloneable, JmeCloneable { - GLMesh mesh; + Mesh mesh; Material material; int lodLevel; - public InstanceTypeKey(GLMesh mesh, Material material, int lodLevel) { + public InstanceTypeKey(Mesh mesh, Material material, int lodLevel) { this.mesh = mesh; this.material = material; this.lodLevel = lodLevel; diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java index 66fd775c04..29ff8050c7 100644 --- a/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java @@ -36,7 +36,6 @@ import java.nio.IntBuffer; import java.nio.ShortBuffer; -import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Format; import com.jme3.util.BufferUtils; @@ -171,7 +170,7 @@ public int remaining() { * Returns the format of the data stored in this buffer. * *

This method can be used to set an {@link IndexBuffer} to a - * {@link GLMesh Mesh}:

+ * {@link com.jme3.scene.Mesh Mesh}:

*
      * mesh.setBuffer(Type.Index, 3, 
      *     indexBuffer.getFormat(), indexBuffer);
diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
index 114ba5f77a..c3144e6b97 100644
--- a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
@@ -31,7 +31,7 @@
  */
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer.Format;
 
 import java.nio.Buffer;
diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
index 1b318c0ef5..f6c9d4bfea 100644
--- a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
@@ -31,8 +31,8 @@
  */
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.GLMesh;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import java.nio.Buffer;
 
@@ -50,7 +50,7 @@ public class WrappedIndexBuffer extends VirtualIndexBuffer {
 
     private final IndexBuffer ib;
 
-    public WrappedIndexBuffer(GLMesh mesh){
+    public WrappedIndexBuffer(Mesh mesh){
         super(mesh.getVertexCount(), mesh.getMode());
         this.ib = mesh.getIndexBuffer();
         switch (meshMode){
@@ -83,7 +83,7 @@ public Buffer getBuffer() {
         return ib.getBuffer();
     }
     
-    public static void convertToList(GLMesh mesh){
+    public static void convertToList(Mesh mesh){
         IndexBuffer inBuf = mesh.getIndicesAsList();
         IndexBuffer outBuf = IndexBuffer.createIndexBuffer(mesh.getVertexCount(),
                                                            inBuf.size());
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
index ac7fdd7d60..e096a91a4c 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
@@ -33,7 +33,7 @@
 
 import com.jme3.export.*;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 
 import java.io.IOException;
 
@@ -50,7 +50,7 @@
  * @author Ian Phillips
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public abstract class AbstractBox extends GLMesh {
+public abstract class AbstractBox extends Mesh {
 
     public final Vector3f center = new Vector3f(0f, 0f, 0f);
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
index c20d7d8301..cfe51dbaff 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
@@ -35,7 +35,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 
@@ -51,7 +51,7 @@
  *
  * @author Kirill Vainer
  */
-public class CenterQuad extends GLMesh {
+public class CenterQuad extends Mesh {
 
     private float width;
     private float height;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
index b2b04fbf33..e1b7dd994f 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Spline;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import java.util.Iterator;
 import java.util.List;
@@ -47,7 +47,7 @@
  *
  * @author Nehon
  */
-public class Curve extends GLMesh {
+public class Curve extends Mesh {
 
     private Spline spline;
     private Vector3f temp = new Vector3f();
@@ -132,7 +132,7 @@ private void createCatmullRomMesh(int nbSubSegments) {
             i++;
         }
 
-        this.setMode(GLMesh.Mode.Lines);
+        this.setMode(Mesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);//(spline.getControlPoints().size() - 1) * nbSubSegments * 2
         this.updateBound();
@@ -184,7 +184,7 @@ private void createBezierMesh(int nbSubSegments) {
             indices[i++] = (short) k;
         }
 
-        this.setMode(GLMesh.Mode.Lines);
+        this.setMode(Mesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);
         this.updateBound();
@@ -228,7 +228,7 @@ private void createNurbMesh(int nbSubSegments) {
                 indices[i++] = (short) (j + 1);
             }
 
-            this.setMode(GLMesh.Mode.Lines);
+            this.setMode(Mesh.Mode.Lines);
             this.setBuffer(VertexBuffer.Type.Position, 3, array);
             this.setBuffer(VertexBuffer.Type.Index, 2, indices);
             this.updateBound();
@@ -262,7 +262,7 @@ private void createLinearMesh() {
             }
         }
 
-        this.setMode(GLMesh.Mode.Lines);
+        this.setMode(Mesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);
         this.updateBound();
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
index 4ac7cfb950..36df9d9892 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -50,7 +50,7 @@
  * @author Mark Powell
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Cylinder extends GLMesh {
+public class Cylinder extends Mesh {
 
     private int axisSamples;
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
index 99a2b96619..5cfd312f82 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.TempVars;
@@ -53,7 +53,7 @@
  * @author Joshua Slack (Original sphere code that was adapted)
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Dome extends GLMesh {
+public class Dome extends Mesh {
 
     private int planes;
     private int radialSamples;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
index 18173646a2..c9c5f3c197 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
@@ -36,7 +36,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
@@ -47,7 +47,7 @@
  * 
  * @author Brent Owens
  */
-public class Line extends GLMesh {
+public class Line extends Mesh {
 
     private Vector3f start = new Vector3f();
     private Vector3f end = new Vector3f();
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
index 0509df9878..d301a98675 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import static com.jme3.util.BufferUtils.*;
 import java.io.IOException;
@@ -51,7 +51,7 @@
  * @author Joshua Slack, Eric Woroshow
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class PQTorus extends GLMesh {
+public class PQTorus extends Mesh {
 
     private float p, q;
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
index 646009501e..07c161c301 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
@@ -36,7 +36,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 
@@ -48,7 +48,7 @@
  *
  * @author Kirill Vainer
  */
-public class Quad extends GLMesh {
+public class Quad extends Mesh {
 
     private float width;
     private float height;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
index 71e9724db2..6f16847390 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Rectangle;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.clone.Cloner;
@@ -71,7 +71,7 @@
  *
  * @author Francivan Bezerra
  */
-public class RectangleMesh extends GLMesh {
+public class RectangleMesh extends Mesh {
 
     /**
      * Used to locate the vertices and calculate a default normal.
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
index 6d0deff9f1..f4b2ba34c6 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.TempVars;
@@ -53,7 +53,7 @@
  * @author Joshua Slack
  * @version $Revision: 4163 $, $Date: 2009-03-24 21:14:55 -0400 (Tue, 24 Mar 2009) $
  */
-public class Sphere extends GLMesh {
+public class Sphere extends Mesh {
 
     public enum TextureMode {
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
index f881031a7a..9beef259e4 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Spline.SplineType;
 import com.jme3.math.Vector3f;
 import com.jme3.math.Vector4f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -56,7 +56,7 @@
  * a) NURBS
  * @author Marcin Roguski (Kealthas)
  */
-public class Surface extends GLMesh {
+public class Surface extends Mesh {
     private SplineType           type;                // the type of the surface
     private List> controlPoints;       // space control points and their weights
     private List[]        knots;               // knots of the surface
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
index 7d49cc9eb1..d3e75d6faf 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
@@ -37,7 +37,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -52,7 +52,7 @@
  * @author Mark Powell
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Torus extends GLMesh {
+public class Torus extends Mesh {
 
     private int circleSamples;
 
diff --git a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
index 4534d9a872..28eb6b5231 100644
--- a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
+++ b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
@@ -40,7 +40,7 @@
 import com.jme3.renderer.Renderer;
 import com.jme3.renderer.Statistics;
 import com.jme3.renderer.TextureUnitException;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.shader.Shader;
 import com.jme3.shader.Shader.ShaderSource;
@@ -195,7 +195,7 @@ public void deleteBuffer(BufferObject bo) {
     }
 
     @Override
-    public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) {
+    public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) {
     }
 
     @Override
diff --git a/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java b/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
index 6961d1a382..f19aacd914 100644
--- a/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
+++ b/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
@@ -135,7 +135,7 @@ private static List initVertexData(int size) {
         return vertices;
     }
 
-    public static void generate(GLMesh mesh) {
+    public static void generate(Mesh mesh) {
         generate(mesh, true, false);
     }
 
@@ -147,7 +147,7 @@ public static void generate(Spatial scene, boolean splitMirrored) {
             }
         } else {
             Geometry geom = (Geometry) scene;
-            GLMesh mesh = geom.getMesh();
+            Mesh mesh = geom.getMesh();
 
             // Check to ensure mesh has texcoords and normals before generating
             if (mesh.getBuffer(Type.TexCoord) != null
@@ -162,13 +162,13 @@ public static void generate(Spatial scene) {
     }
 
     public static void generateParallel(Spatial scene, ExecutorService executor) {
-        final Set meshes = new HashSet<>();
+        final Set meshes = new HashSet<>();
         scene.breadthFirstTraversal(new SceneGraphVisitor() {
             @Override
             public void visit(Spatial spatial) {
                 if (spatial instanceof Geometry) {
                     Geometry geom = (Geometry) spatial;
-                    GLMesh mesh = geom.getMesh();
+                    Mesh mesh = geom.getMesh();
 
                     // Check to ensure mesh has texcoords and normals before generating
                     if (mesh.getBuffer(Type.TexCoord) != null
@@ -179,7 +179,7 @@ public void visit(Spatial spatial) {
             }
         });
         List> futures = new ArrayList<>();
-        for (final GLMesh m : meshes) {
+        for (final Mesh m : meshes) {
             futures.add(executor.submit(new Runnable() {
                 @Override
                 public void run() {
@@ -196,7 +196,7 @@ public void run() {
         }
     }
 
-    public static void generate(GLMesh mesh, boolean approxTangents, boolean splitMirrored) {
+    public static void generate(Mesh mesh, boolean approxTangents, boolean splitMirrored) {
         int[] index = new int[3];
         Vector3f[] v = new Vector3f[3];
         Vector2f[] t = new Vector2f[3];
@@ -233,12 +233,12 @@ public static void generate(GLMesh mesh, boolean approxTangents, boolean splitMi
         TangentUtils.generateBindPoseTangentsIfNecessary(mesh);
     }
 
-    public static void generate(GLMesh mesh, boolean approxTangents) {
+    public static void generate(Mesh mesh, boolean approxTangents) {
         generate(mesh, approxTangents, false);
     }
 
-    private static List processTriangles(GLMesh mesh,
-                                                     int[] index, Vector3f[] v, Vector2f[] t, boolean splitMirrored) {
+    private static List processTriangles(Mesh mesh,
+            int[] index, Vector3f[] v, Vector2f[] t, boolean splitMirrored) {
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         if (mesh.getBuffer(Type.TexCoord) == null) {
@@ -273,7 +273,7 @@ private static List processTriangles(GLMesh mesh,
     // Don't remove the split mirrored boolean. It's not used right now, but I intend to
     // make this method also split vertices with rotated tangent space, and I'll
     // add another splitRotated boolean.
-    private static List splitVertices(GLMesh mesh, List vertexData, boolean splitMirrored) {
+    private static List splitVertices(Mesh mesh, List vertexData, boolean splitMirrored) {
         
         int nbVertices = mesh.getBuffer(Type.Position).getNumElements();
         List newVertices = new ArrayList<>();
@@ -446,8 +446,8 @@ private static void putValue(VertexBuffer.Format format, Buffer buf1, Buffer buf
         }
     }
 
-    private static List processTriangleStrip(GLMesh mesh,
-                                                         int[] index, Vector3f[] v, Vector2f[] t) {
+    private static List processTriangleStrip(Mesh mesh,
+            int[] index, Vector3f[] v, Vector2f[] t) {
         
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
@@ -495,8 +495,8 @@ private static List processTriangleStrip(GLMesh mesh,
         return vertices;
     }
 
-    private static List processTriangleFan(GLMesh mesh,
-                                                       int[] index, Vector3f[] v, Vector2f[] t) {
+    private static List processTriangleFan(Mesh mesh,
+            int[] index, Vector3f[] v, Vector2f[] t) {
         
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
@@ -627,7 +627,7 @@ private static boolean approxEqual(Vector2f u, Vector2f v) {
                 && (FastMath.abs(u.y - v.y) < tolerance);
     }
 
-    private static ArrayList linkVertices(GLMesh mesh, boolean splitMirrored) {
+    private static ArrayList linkVertices(Mesh mesh, boolean splitMirrored) {
         ArrayList vertexMap = new ArrayList<>();
 
         FloatBuffer vertexBuffer = mesh.getFloatBuffer(Type.Position);
@@ -672,8 +672,8 @@ && approxEqual(vertexInfo.texCoord, texCoord)) {
         return vertexMap;
     }
 
-    private static void processTriangleData(GLMesh mesh, List vertices,
-                                            boolean approxTangent, boolean splitMirrored) {
+    private static void processTriangleData(Mesh mesh, List vertices,
+            boolean approxTangent, boolean splitMirrored) {
         ArrayList vertexMap = linkVertices(mesh, splitMirrored);
 
         FloatBuffer tangents = BufferUtils.createFloatBuffer(vertices.size() * 4);
@@ -841,7 +841,7 @@ private static void processTriangleData(GLMesh mesh, List vertices,
         mesh.updateCounts();
     }
 
-    private static void writeColorBuffer(List vertices, ColorRGBA[] cols, GLMesh mesh) {
+    private static void writeColorBuffer(List vertices, ColorRGBA[] cols, Mesh mesh) {
         FloatBuffer colors = BufferUtils.createFloatBuffer(vertices.size() * 4);
         colors.rewind();
         for (ColorRGBA color : cols) {
@@ -863,18 +863,18 @@ private static int parity(Vector3f n1, Vector3f n) {
     }
 
     /**
-     * @deprecated Use {@link TangentUtils#genTbnLines(GLMesh, float) } instead.
+     * @deprecated Use {@link TangentUtils#genTbnLines(com.jme3.scene.Mesh, float) } instead.
      */
     @Deprecated
-    public static GLMesh genTbnLines(GLMesh mesh, float scale) {
+    public static Mesh genTbnLines(Mesh mesh, float scale) {
         return TangentUtils.genTbnLines(mesh, scale);
     }
 
     /**
-     * @deprecated Use {@link TangentUtils#genNormalLines(GLMesh, float) } instead.
+     * @deprecated Use {@link TangentUtils#genNormalLines(com.jme3.scene.Mesh, float) } instead.
      */
     @Deprecated
-    public static GLMesh genNormalLines(GLMesh mesh, float scale) {
+    public static Mesh genNormalLines(Mesh mesh, float scale) {
         return TangentUtils.genNormalLines(mesh, scale);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/util/TangentUtils.java b/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
index 145a332787..2014eaf003 100644
--- a/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
+++ b/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
@@ -53,7 +53,7 @@ public class TangentUtils {
     private TangentUtils() {
     }
 
-    public static void generateBindPoseTangentsIfNecessary(GLMesh mesh){
+    public static void generateBindPoseTangentsIfNecessary(Mesh mesh){
         if (mesh.getBuffer(VertexBuffer.Type.BindPosePosition) != null) {
 
             VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
@@ -73,7 +73,7 @@ public static void generateBindPoseTangentsIfNecessary(GLMesh mesh){
         }
     }
 
-    public static GLMesh genTbnLines(GLMesh mesh, float scale) {
+    public static Mesh genTbnLines(Mesh mesh, float scale) {
         if (mesh.getBuffer(Type.Tangent) == null) {
             return genNormalLines(mesh, scale);
         } else {
@@ -81,15 +81,15 @@ public static GLMesh genTbnLines(GLMesh mesh, float scale) {
         }
     }
 
-    public static GLMesh genNormalLines(GLMesh mesh, float scale) {
+    public static Mesh genNormalLines(Mesh mesh, float scale) {
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         FloatBuffer normalBuffer = (FloatBuffer) mesh.getBuffer(Type.Normal).getData();
 
         ColorRGBA originColor = ColorRGBA.White;
         ColorRGBA normalColor = ColorRGBA.Blue;
 
-        GLMesh lineMesh = new GLMesh();
-        lineMesh.setMode(GLMesh.Mode.Lines);
+        Mesh lineMesh = new Mesh();
+        lineMesh.setMode(Mesh.Mode.Lines);
 
         Vector3f origin = new Vector3f();
         Vector3f point = new Vector3f();
@@ -120,7 +120,7 @@ public static GLMesh genNormalLines(GLMesh mesh, float scale) {
         return lineMesh;
     }
 
-    public static GLMesh genTangentLines(GLMesh mesh, float scale) {
+    public static Mesh genTangentLines(Mesh mesh, float scale) {
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         FloatBuffer normalBuffer = (FloatBuffer) mesh.getBuffer(Type.Normal).getData();
         FloatBuffer tangentBuffer = (FloatBuffer) mesh.getBuffer(Type.Tangent).getData();
@@ -135,8 +135,8 @@ public static GLMesh genTangentLines(GLMesh mesh, float scale) {
         ColorRGBA binormalColor = ColorRGBA.Green;
         ColorRGBA normalColor = ColorRGBA.Blue;
 
-        GLMesh lineMesh = new GLMesh();
-        lineMesh.setMode(GLMesh.Mode.Lines);
+        Mesh lineMesh = new Mesh();
+        lineMesh.setMode(Mesh.Mode.Lines);
 
         Vector3f origin = new Vector3f();
         Vector3f point = new Vector3f();
diff --git a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
index ac9197acc1..18417b6b4c 100644
--- a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
+++ b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
@@ -31,7 +31,7 @@
  */
 package com.jme3.util.mikktspace;
 
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.util.BufferUtils;
@@ -43,10 +43,10 @@
  */
 public class MikkTSpaceImpl implements MikkTSpaceContext {
 
-    GLMesh mesh;
+    Mesh mesh;
     final private IndexBuffer index;
 
-    public MikkTSpaceImpl(GLMesh mesh) {
+    public MikkTSpaceImpl(Mesh mesh) {
         this.mesh = mesh;
 
         // If the mesh lacks indices, generate a virtual index buffer.
diff --git a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
index 5fec028ecc..0f272bd080 100644
--- a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
+++ b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
@@ -112,7 +112,7 @@ public static void generate(Spatial s){
 
         } else if (s instanceof Geometry) {
             Geometry g = (Geometry) s;
-            GLMesh mesh = g.getMesh();
+            Mesh mesh = g.getMesh();
             boolean success = generateTangents(mesh);
             if (!success) {
                 logger.log(Level.SEVERE, "Failed to generate tangents for geometry {0}", g.getName());
@@ -120,15 +120,15 @@ public static void generate(Spatial s){
         }
     }
 
-    public static void generate(GLMesh mesh) {
+    public static void generate(Mesh mesh) {
         boolean success = generateTangents(mesh);
         if (!success) {
             logger.log(Level.SEVERE, "Failed to generate tangents for mesh {0}", mesh);
         }
     }
 
-    private static boolean generateTangents(GLMesh mesh) {
-        GLMesh.Mode mode = mesh.getMode();
+    private static boolean generateTangents(Mesh mesh) {
+        Mesh.Mode mode = mesh.getMode();
         boolean hasTriangles;
         
         if (mesh.getBuffer(Type.TexCoord) == null || mesh.getBuffer(Type.Normal) == null) {
diff --git a/jme3-core/src/main/java/com/jme3/util/natives/AbstractNative.java b/jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java
similarity index 86%
rename from jme3-core/src/main/java/com/jme3/util/natives/AbstractNative.java
rename to jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java
index c5b1e60190..e364df5a5d 100644
--- a/jme3-core/src/main/java/com/jme3/util/natives/AbstractNative.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java
@@ -1,5 +1,7 @@
-package com.jme3.util.natives;
+package com.jme3.vulkan;
 
+import com.jme3.util.natives.Native;
+import com.jme3.util.natives.NativeReference;
 import org.lwjgl.system.MemoryStack;
 
 public abstract class AbstractNative implements Native {
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java b/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java
index 86f6c5602e..b03e28f4e7 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java
@@ -1,7 +1,6 @@
 package com.jme3.vulkan;
 
 import com.jme3.system.JmeVersion;
-import com.jme3.util.natives.AbstractNative;
 import com.jme3.util.natives.Native;
 import org.lwjgl.PointerBuffer;
 import org.lwjgl.glfw.GLFWVulkan;
@@ -12,7 +11,6 @@
 import org.lwjgl.vulkan.VkInstanceCreateInfo;
 
 import java.util.*;
-import java.util.logging.Level;
 
 import static com.jme3.renderer.vulkan.VulkanUtils.*;
 import static org.lwjgl.vulkan.VK10.*;
@@ -27,7 +25,6 @@ public class VulkanInstance extends AbstractNative {
     private String appName = "Unnamed App";
     private int appVersion = VK_MAKE_VERSION(0, 0, 0);
     private int apiVersion;
-    private VulkanLogger logger;
 
     public VulkanInstance() {
         this(VK_API_VERSION_1_0);
@@ -42,14 +39,6 @@ public Runnable createNativeDestroyer() {
         return () -> vkDestroyInstance(object, null);
     }
 
-    public VulkanLogger createLogger(Level exceptionThreshold) {
-        return logger = new VulkanLogger(this, exceptionThreshold);
-    }
-
-    public VulkanLogger getLogger() {
-        return logger;
-    }
-
     public Set getExtensions() {
         return extensions;
     }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java
index 4c72abcb85..01878c12e0 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java
@@ -2,7 +2,7 @@
 
 import com.jme3.renderer.vulkan.VulkanUtils;
 import com.jme3.util.natives.Native;
-import com.jme3.util.natives.AbstractNative;
+import com.jme3.vulkan.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.memory.MemoryProp;
 import com.jme3.vulkan.memory.MemoryRegion;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java
index 11c8f8cced..ff41f587a6 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.descriptors;
 
 import com.jme3.util.natives.Native;
-import com.jme3.util.natives.AbstractNative;
+import com.jme3.vulkan.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import org.lwjgl.system.MemoryStack;
 import org.lwjgl.vulkan.VkWriteDescriptorSet;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java
index af92f359a0..fa453884fe 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java
@@ -2,7 +2,7 @@
 
 import com.jme3.util.natives.Native;
 import com.jme3.vulkan.VulkanInstance;
-import com.jme3.util.natives.AbstractNative;
+import com.jme3.vulkan.AbstractNative;
 import com.jme3.vulkan.commands.CommandPool;
 import com.jme3.vulkan.commands.Queue;
 import com.jme3.vulkan.util.Flag;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java
index c23314215d..c913b1588d 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java
@@ -1,7 +1,6 @@
 package com.jme3.vulkan.frames;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.function.IntFunction;
 
@@ -43,9 +42,4 @@ public int getNumResources() {
         return resources.size();
     }
 
-    @Override
-    public Iterator iterator() {
-        return resources.iterator();
-    }
-
 }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java
index 4e3e6972cc..e3207111cd 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java
@@ -1,7 +1,5 @@
 package com.jme3.vulkan.frames;
 
-import java.util.Iterator;
-
 public class SingleResource  implements VersionedResource {
 
     private T resource;
@@ -37,31 +35,4 @@ public int getNumResources() {
         return 1;
     }
 
-    @Override
-    public Iterator iterator() {
-        return new IteratorImpl<>(resource);
-    }
-
-    private static class IteratorImpl  implements Iterator {
-
-        private T value;
-
-        public IteratorImpl(T value) {
-            this.value = value;
-        }
-
-        @Override
-        public boolean hasNext() {
-            return value != null;
-        }
-
-        @Override
-        public T next() {
-            T v = value;
-            value = null;
-            return v;
-        }
-
-    }
-
 }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java
index f18b1c0f36..ea14b3d4b3 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java
@@ -5,7 +5,7 @@
  *
  * @param  resource type
  */
-public interface VersionedResource extends Iterable {
+public interface VersionedResource {
 
     /**
      * Sets the resource for the current frame.
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java
index 509bb5fd86..046a6b7144 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java
@@ -2,7 +2,7 @@
 
 import com.jme3.util.natives.Native;
 import com.jme3.util.natives.NativeReference;
-import com.jme3.util.natives.AbstractNative;
+import com.jme3.vulkan.AbstractNative;
 import com.jme3.vulkan.Format;
 import com.jme3.vulkan.SharingMode;
 import com.jme3.vulkan.commands.CommandBuffer;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java b/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java
index 62d558a4e6..74d3ebb750 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.images;
 
 import com.jme3.util.natives.Native;
-import com.jme3.util.natives.AbstractNative;
+import com.jme3.vulkan.AbstractNative;
 import com.jme3.vulkan.Swizzle;
 import com.jme3.vulkan.util.Flag;
 import com.jme3.vulkan.util.IntEnum;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java
index 43be80e270..1f011a9960 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.images;
 
 import com.jme3.util.natives.Native;
-import com.jme3.util.natives.AbstractNative;
+import com.jme3.vulkan.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pipelines.CompareOp;
 import com.jme3.vulkan.util.IntEnum;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
index 0d8bb0f4b1..1821e4009f 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
@@ -23,9 +23,8 @@ protected enum VertexMode {
 
     protected final MeshDescription description;
     private final List vertexBuffers = new ArrayList<>();
-    protected final List> indexBuffers = new ArrayList<>();
-    private GpuBuffer boundIndexBuffer;
-    private BoundingVolume volume;
+    protected VersionedResource indexBuffer;
+    private BoundingVolume bound;
     private int vertices;
 
     public AdaptiveMesh(MeshDescription description) {
@@ -45,18 +44,15 @@ public void bind(CommandBuffer cmd) {
             offsets.flip();
             vkCmdBindVertexBuffers(cmd.getBuffer(), 0, verts, offsets);
         }
-        if (!indexBuffers.isEmpty()) {
-            boundIndexBuffer = indexBuffers.get(0).get();
-            vkCmdBindIndexBuffer(cmd.getBuffer(), boundIndexBuffer.getId(), 0, IndexType.of(boundIndexBuffer).getEnum());
-        } else {
-            boundIndexBuffer = null;
+        if (indexBuffer != null) {
+            vkCmdBindIndexBuffer(cmd.getBuffer(), indexBuffer.get().getId(), 0, IndexType.of(indexBuffer.get()).getEnum());
         }
     }
 
     @Override
     public void draw(CommandBuffer cmd) {
-        if (boundIndexBuffer != null) {
-            vkCmdDrawIndexed(cmd.getBuffer(), boundIndexBuffer.size().getElements(), 1, 0, 0, 0);
+        if (indexBuffer != null) {
+            vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.get().size().getElements(), 1, 0, 0, 0);
         } else {
             vkCmdDraw(cmd.getBuffer(), vertices, 1, 0, 0);
         }
@@ -69,7 +65,7 @@ public int getVertexCount() {
 
     @Override
     public int getTriangleCount() {
-        return !indexBuffers.isEmpty() ? indexBuffers.get(0).get().size().getElements() / 3 : 0;
+        return indexBuffer != null ? indexBuffer.get().size().getElements() / 3 : 0;
     }
 
     protected void updateBound(AttributeModifier attribute) {
@@ -111,7 +107,7 @@ protected AttributeModifier modifyAttribute(BuiltInAttribute name) {
 
     protected abstract VersionedResource createStaticBuffer(MemorySize size);
 
-    protected Builder buildVertexBuffers(int vertices) {
+    protected Builder build(int vertices) {
         return new Builder(vertices);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
index 8d12bf3843..cc0ce22a7d 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
@@ -27,15 +27,13 @@ public MyCustomMesh(LogicalDevice device,
         this.device = device;
         this.frames = frames;
         this.updateStaticBuffers = updateSharedBuffers;
-        VersionedResource indices = createStaticBuffer(MemorySize.shorts(6));
-        indexBuffers.add(indices);
-        for (GpuBuffer buf : indices) {
-            ShortBuffer iBuf = buf.mapShorts();
-            iBuf.put((short)0).put((short)2).put((short)3)
-                .put((short)0).put((short)1).put((short)2);
-            buf.unmap();
-        }
-        try (Builder m = buildVertexBuffers(4)) {
+        StaticBuffer indices = new StaticBuffer(device, MemorySize.shorts(6), BufferUsage.Index, MemoryProp.DeviceLocal, false);
+        ShortBuffer iBuf = indices.mapShorts();
+        iBuf.put((short)0).put((short)2).put((short)3)
+            .put((short)0).put((short)1).put((short)2);
+        indices.unmap();
+        indexBuffer = updateSharedBuffers.add(new SingleCommand<>(indices));
+        try (Builder m = build(4)) {
             m.setMode(BuiltInAttribute.Position, VertexMode.Static);
             m.setMode(BuiltInAttribute.TexCoord, VertexMode.Static);
             m.setMode(BuiltInAttribute.Normal, VertexMode.Static);
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java b/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java
index 5788f3c21e..8d8c46ade5 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java
@@ -3,7 +3,7 @@
 import com.jme3.util.natives.Native;
 import com.jme3.vulkan.Format;
 import com.jme3.vulkan.commands.CommandBuffer;
-import com.jme3.util.natives.AbstractNative;
+import com.jme3.vulkan.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pipelines.FrameBuffer;
 import com.jme3.vulkan.pipelines.PipelineBindPoint;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java
index aec10648fc..79858502ba 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.pipelines;
 
-import com.jme3.util.natives.AbstractNative;
 import com.jme3.util.natives.Native;
+import com.jme3.vulkan.*;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pass.RenderPass;
 import com.jme3.vulkan.pipelines.states.*;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java
index 10037d5286..0b03611ffe 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.pipelines;
 
 import com.jme3.vulkan.commands.CommandBuffer;
-import com.jme3.util.natives.AbstractNative;
+import com.jme3.vulkan.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 
 import static org.lwjgl.vulkan.VK10.*;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java
index 952a73c000..c71be87f88 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java
@@ -1,6 +1,5 @@
 package com.jme3.vulkan.surface;
 
-import com.jme3.util.natives.AbstractNative;
 import com.jme3.util.natives.Native;
 import com.jme3.util.natives.NativeReference;
 import com.jme3.vulkan.*;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java b/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java
index a8bc0c3572..b14c7d19e9 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.sync;
 
 import com.jme3.util.natives.Native;
-import com.jme3.util.natives.AbstractNative;
+import com.jme3.vulkan.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pipelines.PipelineStage;
 import com.jme3.vulkan.util.Flag;
diff --git a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
index d1f198ad12..cd2b4a29e8 100644
--- a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
+++ b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
@@ -38,7 +38,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.scene.*;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.scene.mesh.IndexIntBuffer;
@@ -417,7 +417,7 @@ protected Geometry createGeometry(ArrayList faceList, String matName) thro
             throw new IOException("No geometry data to generate mesh");
 
         // Create mesh from the faces
-        GLMesh mesh = constructMesh(faceList);
+        Mesh mesh = constructMesh(faceList);
         
         Geometry geom = new Geometry(objName + "-geom-" + (geomIndex++), mesh);
         
@@ -446,8 +446,8 @@ protected Geometry createGeometry(ArrayList faceList, String matName) thro
         return geom;
     }
 
-    protected GLMesh constructMesh(ArrayList faceList){
-        GLMesh m = new GLMesh();
+    protected Mesh constructMesh(ArrayList faceList){
+        Mesh m = new Mesh();
         m.setMode(Mode.Triangles);
 
         boolean hasTexCoord = false;
diff --git a/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java b/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
index d4ec411e41..0a4a04249d 100644
--- a/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
+++ b/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.shape.Quad;
 import com.jme3.system.JmeSystem;
@@ -77,7 +77,7 @@ void castRay(Ray ray, int expectedNumResults) {
      * 0). It is composed of 2 triangles.
      */
     void createRedSquare() {
-        GLMesh quadMesh = new Quad(1f, 1f);
+        Mesh quadMesh = new Quad(1f, 1f);
         Geometry redSquare = new Geometry("red square", quadMesh);
         Material red = assetManager.loadMaterial("Common/Materials/RedColor.j3m");
         redSquare.setMaterial(red);
diff --git a/jme3-core/src/test/java/com/jme3/light/LightSortTest.java b/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
index 5a53a81504..1be8305bc8 100644
--- a/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
+++ b/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import org.junit.Test;
 
@@ -46,7 +46,7 @@ public class LightSortTest {
     
     @Test
     public void testSimpleSort() {
-        Geometry g = new Geometry("test", new GLMesh());
+        Geometry g = new Geometry("test", new Mesh());
         LightList list = new LightList(g);
         
         list.add(new SpotLight(Vector3f.ZERO, Vector3f.UNIT_X));
@@ -65,7 +65,7 @@ public void testSimpleSort() {
     @Test
     public void testSceneGraphSort() {
         Node n = new Node("node");
-        Geometry g = new Geometry("geom", new GLMesh());
+        Geometry g = new Geometry("geom", new Mesh());
         SpotLight spot = new SpotLight(Vector3f.ZERO, Vector3f.UNIT_X);
         PointLight point = new PointLight(Vector3f.UNIT_X);
         DirectionalLight directional = new DirectionalLight(Vector3f.UNIT_X);
diff --git a/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java b/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
index 6595f43d68..929281819e 100644
--- a/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
+++ b/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
@@ -38,7 +38,7 @@
 import com.jme3.renderer.queue.GeometryList;
 import com.jme3.renderer.queue.OpaqueComparator;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.shape.Box;
 import com.jme3.system.TestUtil;
 import com.jme3.texture.Image;
@@ -55,7 +55,7 @@
 
 public class OpaqueComparatorTest {
     
-    private final GLMesh mesh = new Box(1,1,1);
+    private final Mesh mesh = new Box(1,1,1);
     final private Camera cam = new Camera(1, 1);
     private RenderManager renderManager;
     private AssetManager assetManager;
diff --git a/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java b/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
index abc6e52246..e7f1013f62 100644
--- a/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
@@ -84,7 +84,7 @@ void castRay() {
      * 0). It is composed of 2 triangles.
      */
     void createRedSquare() {
-        GLMesh quadMesh = new Quad(1f, 1f);
+        Mesh quadMesh = new Quad(1f, 1f);
         Geometry redSquare = new Geometry("red square", quadMesh);
         Material red = assetManager.loadMaterial("Common/Materials/RedColor.j3m");
         redSquare.setMaterial(red);
@@ -95,8 +95,8 @@ void createRedSquare() {
      * Attach a pair of parallel white lines in the z=1 plane.
      */
     void createWhiteLines() {
-        GLMesh lineMesh = new GLMesh();
-        lineMesh.setMode(GLMesh.Mode.Lines);
+        Mesh lineMesh = new Mesh();
+        lineMesh.setMode(Mesh.Mode.Lines);
         float[] corners = new float[]{
             -1f, -1f, 0f,
             -1f, 1f, 0f,
diff --git a/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java b/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
index f40e42a90c..27f0cda591 100644
--- a/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
@@ -36,7 +36,7 @@
 
 import org.junit.Test;
 
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 
 /**
  * Tests selected methods of the Mesh class.
@@ -50,7 +50,7 @@ public class MeshTest {
      */
     @Test
     public void testVertexCountOfEmptyMesh() {
-        final GLMesh mesh = new GLMesh();
+        final Mesh mesh = new Mesh();
 
         assertEquals(-1, mesh.getVertexCount());
     }
diff --git a/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java b/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
index ea6cc2d3dc..a81ed9f5aa 100644
--- a/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
@@ -1,6 +1,6 @@
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh.Mode;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
diff --git a/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java b/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
index 72dfddbaf5..cdf1e9fad5 100644
--- a/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
+++ b/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
@@ -38,7 +38,7 @@
 
 import com.jme3.asset.AssetManager;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -113,8 +113,8 @@ public void testSphereReductionCollapsCost() {
     /**
      * Returns the mesh of a node.
      */
-    private GLMesh getMesh(Node node) {
-        GLMesh m = null;
+    private Mesh getMesh(Node node) {
+        Mesh m = null;
         for (Spatial spatial : node.getChildren()) {
             if (spatial instanceof Geometry) {
                 m = ((Geometry) spatial).getMesh();
@@ -131,7 +131,7 @@ private GLMesh getMesh(Node node) {
      * Returns the Monkey mesh used in the TestLodGeneration stresstest. Note: Doesn't work durring gradle
      * build.
      */
-    private GLMesh monkey() {
+    private Mesh monkey() {
         Node model = (Node) assetManager.loadModel("Models/Jaime/Jaime.j3o");
         return getMesh(model);
     }
@@ -139,7 +139,7 @@ private GLMesh monkey() {
     /**
      * Returns a 12x12 Sphere mesh.
      */
-    private GLMesh sphere() {
+    private Mesh sphere() {
         return new Sphere(12, 12, 1, false, false);
     }
 
diff --git a/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java b/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
index 1fa3ff9bee..3cc91ef6f6 100644
--- a/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
+++ b/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
@@ -32,7 +32,7 @@
 package com.jme3.util;
 
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.mikktspace.MikktspaceTangentGenerator;
 import java.nio.FloatBuffer;
@@ -81,7 +81,7 @@ public void testIssue1909() {
                 +posRadius, 0f, -posRadius,
                 -posRadius, 0f, -posRadius
         );
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         int numAxes = 3;
         mesh.setBuffer(VertexBuffer.Type.Normal, numAxes, normals);
         mesh.setBuffer(VertexBuffer.Type.Position, numAxes, positions);
diff --git a/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java b/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
index b662f28419..87283c1c9a 100644
--- a/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
+++ b/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
@@ -32,7 +32,7 @@
 package com.jme3.util;
 
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.mikktspace.MikktspaceTangentGenerator;
 import java.nio.FloatBuffer;
@@ -56,7 +56,7 @@ public class TestIssue1919 {
      */
     @Test(expected = UnsupportedOperationException.class)
     public void testHybrid() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.Hybrid);
+        Geometry testGeometry = createGeometry(Mesh.Mode.Hybrid);
         MikktspaceTangentGenerator.generate(testGeometry);
     }
 
@@ -65,10 +65,10 @@ public void testHybrid() {
      */
     @Test
     public void testLineLoop() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.LineLoop);
+        Geometry testGeometry = createGeometry(Mesh.Mode.LineLoop);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        GLMesh mesh = testGeometry.getMesh();
+        Mesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); /// skipped this mesh
     }
@@ -78,10 +78,10 @@ public void testLineLoop() {
      */
     @Test
     public void testLineStrip() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.LineStrip);
+        Geometry testGeometry = createGeometry(Mesh.Mode.LineStrip);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        GLMesh mesh = testGeometry.getMesh();
+        Mesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); /// skipped this mesh
     }
@@ -91,10 +91,10 @@ public void testLineStrip() {
      */
     @Test
     public void testLines() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.Lines);
+        Geometry testGeometry = createGeometry(Mesh.Mode.Lines);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        GLMesh mesh = testGeometry.getMesh();
+        Mesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); // skipped this mesh
     }
@@ -104,7 +104,7 @@ public void testLines() {
      */
     @Test(expected = UnsupportedOperationException.class)
     public void testPatch() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.Patch);
+        Geometry testGeometry = createGeometry(Mesh.Mode.Patch);
         MikktspaceTangentGenerator.generate(testGeometry);
     }
 
@@ -113,10 +113,10 @@ public void testPatch() {
      */
     @Test
     public void testPoints() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.Points);
+        Geometry testGeometry = createGeometry(Mesh.Mode.Points);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        GLMesh mesh = testGeometry.getMesh();
+        Mesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); // skipped this mesh
     }
@@ -126,10 +126,10 @@ public void testPoints() {
      */
     @Test
     public void testTriangles() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.Triangles);
+        Geometry testGeometry = createGeometry(Mesh.Mode.Triangles);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        GLMesh mesh = testGeometry.getMesh();
+        Mesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNotNull(tangents); // generated tangents
     }
@@ -140,7 +140,7 @@ public void testTriangles() {
      * @param mode the desired mode (not null)
      * @return a new geometry
      */
-    private Geometry createGeometry(GLMesh.Mode mode) {
+    private Geometry createGeometry(Mesh.Mode mode) {
         FloatBuffer normals = BufferUtils.createFloatBuffer(
                 0f, 1f, 0f,
                 0f, 1f, 0f,
@@ -167,7 +167,7 @@ private Geometry createGeometry(GLMesh.Mode mode) {
                 +posRadius, 0f, -posRadius,
                 -posRadius, 0f, -posRadius
         );
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         mesh.setMode(mode);
         mesh.setBuffer(VertexBuffer.Type.Normal, numAxes, normals);
         mesh.setBuffer(VertexBuffer.Type.Position, numAxes, positions);
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
index fc8261591f..98ccf9c35b 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
@@ -5,7 +5,7 @@
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.*;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer.Format;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -94,7 +94,7 @@ private static void doTransformTangents(FloatBuffer inBuf, int offset, int compo
      * @param geometries the geometries to merge
      * @param outMesh a Mesh to receive the geometries
      */
-    public static void mergeGeometries(Collection geometries, GLMesh outMesh) {
+    public static void mergeGeometries(Collection geometries, Mesh outMesh) {
         int[] compsForBuf = new int[VertexBuffer.Type.values().length];
         Format[] formatForBuf = new Format[compsForBuf.length];
          boolean[] normForBuf = new boolean[VertexBuffer.Type.values().length];
@@ -188,7 +188,7 @@ public static void mergeGeometries(Collection geometries, GLMesh outMe
         int globalTriIndex = 0;
 
         for (Geometry geom : geometries) {
-            GLMesh inMesh = geom.getMesh();
+            Mesh inMesh = geom.getMesh();
             geom.computeWorldMatrix();
             Matrix4f worldMatrix = geom.getWorldMatrix();
 
@@ -238,7 +238,7 @@ public static void mergeGeometries(Collection geometries, GLMesh outMe
         }
     }
 
-    public static void makeLods(Collection geometries, GLMesh outMesh) {
+    public static void makeLods(Collection geometries, Mesh outMesh) {
         // Determine number of LOD levels required.
         int lodLevels = Integer.MAX_VALUE;
         for (Geometry g : geometries) {
@@ -338,7 +338,7 @@ public static List makeBatches(Collection geometries, boolea
         for (Map.Entry> entry : matToGeom.entrySet()) {
             Material mat = entry.getKey();
             List geomsForMat = entry.getValue();
-            GLMesh mesh = new GLMesh();
+            Mesh mesh = new Mesh();
             mergeGeometries(geomsForMat, mesh);
             // lods
             if (useLods) {
@@ -406,7 +406,7 @@ public static Node optimize(Node scene, boolean useLods) {
         return scene;
     }
 
-    public static void printMesh(GLMesh mesh) {
+    public static void printMesh(Mesh mesh) {
         for (int bufType = 0; bufType < Type.values().length; bufType++) {
             VertexBuffer outBuf = mesh.getBuffer(Type.values()[bufType]);
             if (outBuf == null) {
@@ -433,7 +433,7 @@ public static void printMesh(GLMesh mesh) {
     }
 
     public static void main(String[] args) {
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         mesh.setBuffer(Type.Position, 3, new float[]{
                     0, 0, 0,
                     1, 0, 0,
@@ -452,7 +452,7 @@ public static void main(String[] args) {
         ArrayList geoms = new ArrayList<>();
         geoms.add(g1);
 
-        GLMesh outMesh = new GLMesh();
+        Mesh outMesh = new Mesh();
         mergeGeometries(geoms, outMesh);
         printMesh(outMesh);
     }
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java b/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
index af22aa7432..648f85f070 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
@@ -50,7 +50,7 @@
 import com.jme3.bounding.BoundingSphere;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.BufferUtils;
 import java.nio.Buffer;
@@ -108,7 +108,7 @@ public class LodGenerator {
     private List triangleList;
     private List vertexList = new ArrayList<>();
     private float meshBoundingSphereRadius;
-    private final GLMesh mesh;
+    private final Mesh mesh;
 
     /**
      * Enumerate criteria for removing triangles.
@@ -253,7 +253,7 @@ public int compare(Vertex o1, Vertex o2) {
      *
      * @param mesh the mesh for which to generate LODs.
      */
-    public LodGenerator(GLMesh mesh) {
+    public LodGenerator(Mesh mesh) {
         this.mesh = mesh;
         build();
     }
@@ -282,7 +282,7 @@ private void build() {
         
     }
     
-    private void gatherVertexData(GLMesh mesh, List vertexLookup) {
+    private void gatherVertexData(Mesh mesh, List vertexLookup) {
 
         //in case the model is currently animating with software animation
         //attempting to retrieve the bind position instead of the position.
@@ -321,7 +321,7 @@ private Vertex findSimilar(Vertex v) {
         return null;
     }
     
-    private void gatherIndexData(GLMesh mesh, List vertexLookup) {
+    private void gatherIndexData(Mesh mesh, List vertexLookup) {
         VertexBuffer indexBuffer = mesh.getBuffer(VertexBuffer.Type.Index);
         indexCount = indexBuffer.getNumElements() * 3;
         Buffer b = indexBuffer.getDataReadOnly();
@@ -611,7 +611,7 @@ public void bakeLods(TriangleReductionMethod reductionMethod, float... reduction
         mesh.setLodLevels(computeLods(reductionMethod, reductionValues));
     }
     
-    private VertexBuffer makeLod(GLMesh mesh) {
+    private VertexBuffer makeLod(Mesh mesh) {
         VertexBuffer indexBuffer = mesh.getBuffer(VertexBuffer.Type.Index);
         
         boolean isShortBuffer = indexBuffer.getFormat() == VertexBuffer.Format.UnsignedShort;
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java b/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
index 60d31a2faa..9447b2d956 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
@@ -37,7 +37,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector2f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
@@ -433,8 +433,8 @@ public boolean applyCoords(Geometry geom) {
      * @param outMesh The mesh to set the coords in (can be same as input).
      * @return true if texture has been found and coords have been changed, false otherwise.
      */
-    public boolean applyCoords(Geometry geom, int offset, GLMesh outMesh) {
-        GLMesh inMesh = geom.getMesh();
+    public boolean applyCoords(Geometry geom, int offset, Mesh outMesh) {
+        Mesh inMesh = geom.getMesh();
         geom.computeWorldMatrix();
 
         VertexBuffer inBuf = inMesh.getBuffer(Type.TexCoord);
@@ -499,7 +499,7 @@ public static Geometry makeAtlasBatch(Spatial spat, AssetManager mgr, int atlasS
             return null;
         }
         Geometry geom = new Geometry();
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         GeometryBatchFactory.mergeGeometries(geometries, mesh);
         applyAtlasCoords(geometries, mesh, atlas);
         mesh.updateCounts();
@@ -525,11 +525,11 @@ public static Geometry makeAtlasBatch(Spatial spat, AssetManager mgr, int atlasS
         return geom;
     }
 
-    private static void applyAtlasCoords(List geometries, GLMesh outMesh, TextureAtlas atlas) {
+    private static void applyAtlasCoords(List geometries, Mesh outMesh, TextureAtlas atlas) {
         int globalVertIndex = 0;
 
         for (Geometry geom : geometries) {
-            GLMesh inMesh = geom.getMesh();
+            Mesh inMesh = geom.getMesh();
             geom.computeWorldMatrix();
 
             int geomVertCount = inMesh.getVertexCount();
diff --git a/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java b/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
index d7e2457107..80fcac11b6 100644
--- a/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
+++ b/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
@@ -38,7 +38,7 @@
 import com.jme3.light.AmbientLight;
 import com.jme3.math.ColorRGBA;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 
@@ -101,7 +101,7 @@ private void testOldAnimationSystem(String assetPath) {
 
         // remove its vertex normals:
         Geometry oldGeometry = (Geometry) oldJaime.getChild(0);
-        GLMesh oldMesh = oldGeometry.getMesh();
+        Mesh oldMesh = oldGeometry.getMesh();
         oldMesh.clearBuffer(VertexBuffer.Type.Normal);
         oldMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
     }
@@ -125,7 +125,7 @@ private void testNewAnimationSystem(String assetPath) {
 
         // remove its vertex normals:
         Geometry newGeometry = (Geometry) newJaime.getChild(0);
-        GLMesh newMesh = newGeometry.getMesh();
+        Mesh newMesh = newGeometry.getMesh();
         newMesh.clearBuffer(VertexBuffer.Type.Normal);
         newMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
     }
diff --git a/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java b/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
index f0a3464be1..55ffe02788 100644
--- a/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
+++ b/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
@@ -1,6 +1,6 @@
 package jme3test.app;
 
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.system.AppSettings;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -26,7 +26,7 @@ private static void testPreferenceSettings() {
         settings.putInteger("TestInt", 123);
         settings.putString("TestStr", "HelloWorld");
         settings.putFloat("TestFloat", 123.567f);
-        settings.put("TestObj", new GLMesh()); // Objects not supported by preferences
+        settings.put("TestObj", new Mesh()); // Objects not supported by preferences
         
         try {
             settings.save(APPSETTINGS_KEY);
@@ -58,7 +58,7 @@ private static void testFileSettings() {
         settings.putInteger("TestInt", 123);
         settings.putString("TestStr", "HelloWorld");
         settings.putFloat("TestFloat", 123.567f);
-        settings.put("TestObj", new GLMesh()); // Objects not supported by file settings
+        settings.put("TestObj", new Mesh()); // Objects not supported by file settings
         
         try {
             settings.save(baos);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java b/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
index 046fe5606c..2c5590ce63 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
@@ -39,7 +39,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -98,7 +98,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java b/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
index de6156428e..a996431655 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
@@ -13,7 +13,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.debug.Arrow;
@@ -116,7 +116,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java b/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
index 677172b356..1e1731d2b8 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
@@ -40,7 +40,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -111,7 +111,7 @@ private BitmapText createLabelText(int x, int y, String text) {
         return bmp;
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestOgg.java b/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
index 4d49d1d1c0..55cd7bf452 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
@@ -47,7 +47,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -196,7 +196,7 @@ private BitmapText createLabelText(int x, int y, String text) {
         return bmp;
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestReverb.java b/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
index 592dd87625..e21a870993 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
@@ -45,7 +45,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -116,7 +116,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java b/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
index d5a5d5d665..59d02d64c8 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
@@ -49,7 +49,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Box;
@@ -301,7 +301,7 @@ private static Geometry createTestFloor(AssetManager assetManager, float floorDi
         return floor;
     }
 
-    private static GLMesh createFloorMesh(int meshDetail, float floorDimensions) {
+    private static Mesh createFloorMesh(int meshDetail, float floorDimensions) {
         if (meshDetail < 10) {
             meshDetail = 10;
         }
@@ -351,7 +351,7 @@ private static GLMesh createFloorMesh(int meshDetail, float floorDimensions) {
             }
         }
 
-        GLMesh m = new GLMesh();
+        Mesh m = new Mesh();
         m.setBuffer(VertexBuffer.Type.Index, 1, BufferUtils.createIntBuffer(indexBuf));
         m.setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(vertBuf));
         m.updateBound();
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java b/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
index a8743f5327..d374ae5645 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
@@ -50,7 +50,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Cylinder;
 import com.jme3.system.AppSettings;
@@ -184,7 +184,7 @@ private void dropTest() {
         attachTestObject(new Cylinder(2, 16, 0.2f, 2f, true), new Vector3f(-3f, 2f, -5f), 2);
     }
 
-    private void attachTestObject(GLMesh mesh, Vector3f position, float mass) {
+    private void attachTestObject(Mesh mesh, Vector3f position, float mass) {
         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         Geometry g = new Geometry("mesh", mesh);
         g.setLocalTranslation(position);
diff --git a/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java b/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
index 66522d7518..f564790411 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
@@ -48,7 +48,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.PQTorus;
@@ -290,7 +290,7 @@ private RigidBodyControl drop(Vector3f offset, String model, float scale, float
         Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
         tp.setMaterial(mat);
 
-        GLMesh mesh = tp.getMesh();
+        Mesh mesh = tp.getMesh();
         GImpactCollisionShape shape = new GImpactCollisionShape(mesh);
         shape.setScale(new Vector3f(scale, scale, scale));
 
@@ -300,7 +300,7 @@ private RigidBodyControl drop(Vector3f offset, String model, float scale, float
         return control;
     }
 
-    private void attachTestObject(GLMesh mesh, Vector3f position, float mass) {
+    private void attachTestObject(Mesh mesh, Vector3f position, float mass) {
         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         material.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg"));
         Geometry g = new Geometry("mesh", mesh);
diff --git a/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java b/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
index f148327212..e3c1ba136b 100644
--- a/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
+++ b/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
@@ -36,7 +36,7 @@
 import com.jme3.bounding.BoundingSphere;
 import com.jme3.material.Material;
 import com.jme3.math.FastMath;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
 
@@ -58,7 +58,7 @@ public void simpleInitApp() {
         // load material
         Material mat = assetManager.loadMaterial("Interface/Logo/Logo.j3m");
 
-        GLMesh q = new GLMesh();
+        Mesh q = new Mesh();
         q.setBuffer(Type.Position, 3, new float[]
         {
             1, 0, 0,
diff --git a/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java b/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
index 2327846adf..6d20ea1fc2 100644
--- a/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
+++ b/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
@@ -43,7 +43,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Box;
 
@@ -61,7 +61,7 @@ public static void main(String[] args) {
     @Override
     public void simpleInitApp() {
         // Create two boxes
-        GLMesh mesh1 = new Box(0.5f, 0.5f, 0.5f);
+        Mesh mesh1 = new Box(0.5f, 0.5f, 0.5f);
         geom1 = new Geometry("Box", mesh1);
         geom1.move(2, 2, -.5f);
         Material m1 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
diff --git a/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java b/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
index 01a7d54503..04aca57e8f 100644
--- a/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
+++ b/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
@@ -53,7 +53,7 @@
 import com.jme3.post.FilterPostProcessor;
 import com.jme3.post.filters.FogFilter;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Sphere;
@@ -75,9 +75,9 @@ public class WorldOfInception extends SimpleApplication implements AnalogListene
     private static final float poiRadius = 100;
     private static final int poiCount = 30;
     private static Material poiMaterial;
-    private static GLMesh poiMesh;
+    private static Mesh poiMesh;
     private static Material ballMaterial;
-    private static GLMesh ballMesh;
+    private static Mesh ballMesh;
     private static CollisionShape poiHorizonCollisionShape;
     private static CollisionShape poiCollisionShape;
     private static CollisionShape ballCollisionShape;
diff --git a/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java b/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
index 53586dda51..d98619a2b2 100644
--- a/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
+++ b/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
@@ -225,7 +225,7 @@ public void makeAreaGeom() {
         points[6].set(1, 1, -1);
         points[7].set(1, -1, -1);
 
-        GLMesh box = WireFrustum.makeFrustum(points);
+        Mesh box = WireFrustum.makeFrustum(points);
         areaGeom = new Geometry("light", box);
         areaGeom.setMaterial(new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"));
         areaGeom.getMaterial().setColor("Color", ColorRGBA.White);
diff --git a/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java b/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
index 33e281b501..2337c0bca9 100644
--- a/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
+++ b/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
@@ -38,8 +38,8 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.shape.Quad;
@@ -71,7 +71,7 @@ public void simpleInitApp() {
         quadMesh.updateGeometry(1, 1);
         addMesh("Quad", quadMesh, new Vector3f(1, 0, 0));
 
-        GLMesh strip = createTriangleStripMesh();
+        Mesh strip = createTriangleStripMesh();
         addMesh("strip", strip, new Vector3f(0, -3, 0));
         
         DirectionalLight dl = new DirectionalLight();
@@ -80,7 +80,7 @@ public void simpleInitApp() {
         rootNode.addLight(dl);
     }
 
-    private void addMesh(String name, GLMesh mesh, Vector3f translation) {
+    private void addMesh(String name, Mesh mesh, Vector3f translation) {
         MikktspaceTangentGenerator.generate(mesh);
 
         Geometry testGeom = new Geometry(name, mesh);
@@ -104,8 +104,8 @@ private void addMesh(String name, GLMesh mesh, Vector3f translation) {
     public void simpleUpdate(float tpf){
     }
 
-    private GLMesh createTriangleStripMesh() {
-        GLMesh strip = new GLMesh();
+    private Mesh createTriangleStripMesh() {
+        Mesh strip = new Mesh();
         strip.setMode(Mode.TriangleStrip);
         FloatBuffer vb = BufferUtils.createFloatBuffer(3*3*3); // 3 rows * 3 columns * 3 floats
         vb.rewind();
diff --git a/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java b/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
index 24fbe6bbf2..e169d27850 100644
--- a/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
+++ b/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
@@ -35,7 +35,7 @@
 import com.jme3.light.LightProbe;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.shape.CenterQuad;
 import com.jme3.system.AppSettings;
 
@@ -74,7 +74,7 @@ public void simpleInitApp() {
         flyCam.setEnabled(false);
 
         // Attach a 9x9 quad at the origin.
-        GLMesh mesh = new CenterQuad(9f, 9f);
+        Mesh mesh = new CenterQuad(9f, 9f);
         Geometry quad = new Geometry("quad", mesh);
         rootNode.attachChild(quad);
 
diff --git a/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java b/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
index 7e1fd9ffdf..0199d70cc2 100644
--- a/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
+++ b/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
@@ -5,7 +5,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Sphere;
 import com.jme3.system.AppSettings;
@@ -17,10 +17,10 @@
 public class TestGeometryShader extends SimpleApplication {
     @Override
     public void simpleInitApp() {
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         mesh.setBuffer(VertexBuffer.Type.Index, 1, BufferUtils.createIntBuffer(new int[]{1}));
         mesh.setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(new float[]{0, 0, 0}));
-        mesh.setMode(GLMesh.Mode.Points);
+        mesh.setMode(Mesh.Mode.Points);
         mesh.setBound(new BoundingBox(new Vector3f(0, 0, 0), 10, 10, 10));
         mesh.updateCounts();
         Geometry geometry = new Geometry("Test", mesh);
diff --git a/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java b/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
index acae970f2d..a5af58bfc5 100644
--- a/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
+++ b/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
@@ -6,7 +6,7 @@
 import com.jme3.input.controls.KeyTrigger;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Quad;
 import com.jme3.system.AppSettings;
@@ -28,7 +28,7 @@ public void simpleInitApp() {
         Quad quad = new Quad(10, 10);
         quad.clearBuffer(VertexBuffer.Type.Index);
         quad.setBuffer(VertexBuffer.Type.Index, 4, BufferUtils.createIntBuffer(0, 1, 2, 3));
-        quad.setMode(GLMesh.Mode.Patch);
+        quad.setMode(Mesh.Mode.Patch);
         quad.setPatchVertexCount(4);
         Geometry geometry = new Geometry("tessTest", quad);
         geometry.setMaterial(tessellationMaterial);
diff --git a/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java b/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
index 8b2f2cfd5b..ef264b95d1 100644
--- a/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
+++ b/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
@@ -7,7 +7,7 @@
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Arrow;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.debug.WireSphere;
@@ -73,7 +73,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java b/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
index 52361613ab..6c71144286 100644
--- a/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
+++ b/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
@@ -167,7 +167,7 @@ public void onAction(String name, boolean isPressed, float tpf) {
         }, "bind");
     }
 
-    private GLMesh createMesh() {
+    private Mesh createMesh() {
         Cylinder c = new Cylinder(30, 16, 0.1f, 1, true);
 
         ShortBuffer jointIndex = (ShortBuffer) VertexBuffer.createBuffer(VertexBuffer.Format.UnsignedShort, 4, c.getVertexCount());
diff --git a/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java b/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
index 7f2ce7e611..5a5934142c 100644
--- a/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
+++ b/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
@@ -191,7 +191,7 @@ public void onAction(String name, boolean isPressed, float tpf) {
         }, "bind");
     }
 
-    private GLMesh createMesh() {
+    private Mesh createMesh() {
         Cylinder c = new Cylinder(30, 16, 0.1f, 1, true);
 
         ShortBuffer jointIndex = (ShortBuffer) VertexBuffer.createBuffer(VertexBuffer.Format.UnsignedShort, 4, c.getVertexCount());
diff --git a/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java b/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
index 524377c226..5f205def3b 100644
--- a/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
+++ b/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
@@ -38,7 +38,7 @@
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 
@@ -58,7 +58,7 @@ public static void main(String[] args){
     @Override
     public void simpleInitApp() {
       
-        GLMesh m = new GLMesh();
+        Mesh m = new Mesh();
 
         // Vertex positions in space
         Vector3f [] vertices = new Vector3f[4];
@@ -99,7 +99,7 @@ public void simpleInitApp() {
         // *************************************************************************
         // Second mesh uses vertex colors to color each vertex
         // *************************************************************************
-        GLMesh cMesh = m.clone();
+        Mesh cMesh = m.clone();
         Geometry coloredMesh = new Geometry ("ColoredMesh", cMesh);
         Material matVC = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         matVC.setBoolean("VertexColor", true);
@@ -140,7 +140,7 @@ public void simpleInitApp() {
         // *************************************************************************
         // Third mesh will use a wireframe shader to show wireframe
         // *************************************************************************
-        GLMesh wfMesh = m.clone();
+        Mesh wfMesh = m.clone();
         Geometry wfGeom = new Geometry("wireframeGeometry", wfMesh);
         Material matWireframe = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         matWireframe.setColor("Color", ColorRGBA.Green);
diff --git a/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java b/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
index ad5c615d47..25bde0a797 100644
--- a/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
+++ b/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
@@ -37,7 +37,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Arrow;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.debug.WireBox;
@@ -50,7 +50,7 @@ public static void main(String[] args){
         app.start();
     }
 
-    private Geometry putShape(GLMesh shape, ColorRGBA color) {
+    private Geometry putShape(Mesh shape, ColorRGBA color) {
         Geometry g = new Geometry("shape", shape);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.getAdditionalRenderState().setWireframe(true);
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java b/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
index b284485d7b..c8c004a9c3 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
@@ -43,7 +43,7 @@
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Quad;
@@ -95,7 +95,7 @@ public void simpleInitApp() {
 
         float quadHeight = backgroundCamera.getHeight();
         float quadWidth = backgroundCamera.getWidth();
-        GLMesh quadMesh = new Quad(quadWidth, quadHeight);
+        Mesh quadMesh = new Quad(quadWidth, quadHeight);
 
         Spatial quadGeometry = new Geometry("quad geometry", quadMesh);
         quadGeometry.setMaterial(quadMaterial);
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java b/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
index 237568ce03..ce276e81d9 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
@@ -36,7 +36,7 @@
 import com.jme3.material.MatParamOverride;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.shape.Box;
 import com.jme3.shader.VarType;
 import com.jme3.texture.Texture;
@@ -71,7 +71,7 @@ public void simpleInitApp() {
         /*
          * Attach a test geometry to the scene.
          */
-        GLMesh cubeMesh = new Box(1f, 1f, 1f);
+        Mesh cubeMesh = new Box(1f, 1f, 1f);
         Geometry cubeGeometry = new Geometry("Box", cubeMesh);
         rootNode.attachChild(cubeGeometry);
         /*
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java b/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
index 6cb20609fa..e73132d314 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
@@ -39,7 +39,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.shape.Line;
 import com.jme3.system.AppSettings;
 
@@ -95,7 +95,7 @@ private void drawVerticalLine(float lineWidth, float x, ColorRGBA color) {
         float viewportHeight = cam.getHeight();
         Vector3f startLocation = new Vector3f(x, 0.1f * viewportHeight, 0f);
         Vector3f endLocation = new Vector3f(x, 0.9f * viewportHeight, 0f);
-        GLMesh wireMesh = new Line(startLocation, endLocation);
+        Mesh wireMesh = new Line(startLocation, endLocation);
         Geometry wire = new Geometry("wire", wireMesh);
         wire.setMaterial(material);
         guiNode.attachChild(wire);
diff --git a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
index 3da3545b43..8a3da3abdd 100644
--- a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
+++ b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Node;
 import com.jme3.scene.instancing.InstancedGeometry;
@@ -50,8 +50,8 @@
 
 public class TestInstanceNode extends SimpleApplication  {
 
-    private GLMesh mesh1;
-    private GLMesh mesh2;
+    private Mesh mesh1;
+    private Mesh mesh2;
     private final Material[] materials = new Material[6];
     private Node instancedNode;
     private float time = 0;
@@ -66,7 +66,7 @@ public static void main(String[] args){
     }
 
     private Geometry createInstance(float x, float z) {
-        GLMesh mesh;
+        Mesh mesh; 
         if (FastMath.nextRandomInt(0, 1) == 1) mesh = mesh2;
         else mesh = mesh1;
         Geometry geometry = new Geometry("randomGeom", mesh);
@@ -156,7 +156,7 @@ public void simpleUpdate(float tpf) {
                     Geometry geom = (Geometry) instance;
                     geom.setMaterial(materials[FastMath.nextRandomInt(0, materials.length - 1)]);
 
-                    GLMesh mesh;
+                    Mesh mesh; 
                     if (FastMath.nextRandomInt(0, 1) == 1) mesh = mesh2;
                     else mesh = mesh1;
                     geom.setMesh(mesh);
diff --git a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
index c212013d0b..6d5b76da83 100644
--- a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
+++ b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
@@ -41,7 +41,7 @@
 import com.jme3.post.FilterPostProcessor;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.instancing.InstancedNode;
 import com.jme3.scene.shape.Box;
 import com.jme3.scene.shape.Sphere;
@@ -87,8 +87,8 @@ public void simpleInitApp() {
         rootNode.attachChild(instancedNode);
 
         // create 10 spheres & boxes, along the z-axis, successively further from the camera
-        GLMesh sphereMesh = new Sphere(32, 32, 1f);
-        GLMesh boxMesh = new Box(0.7f, 0.7f, 0.7f);
+        Mesh sphereMesh = new Sphere(32, 32, 1f);
+        Mesh boxMesh = new Box(0.7f, 0.7f, 0.7f);
         for (int z = 0; z < 10; z++) {
             Vector3f location = new Vector3f(0, -3, -(z * 4));
             locations[z] = location;
diff --git a/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java b/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
index 2e8c3bf0db..24861464ad 100644
--- a/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
+++ b/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
@@ -36,7 +36,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial.CullHint;
 import com.jme3.scene.shape.Sphere;
@@ -80,7 +80,7 @@ public void simpleUpdate(float tpf){
         rootNode.detachAllChildren();
         for (int y = -15; y < 15; y++){
             for (int x = -15; x < 15; x++){
-                GLMesh sphMesh = original.deepClone();
+                Mesh sphMesh = original.deepClone();
                 Geometry sphere = new Geometry("sphere", sphMesh);
 
                 sphere.setMaterial(solidColor);
diff --git a/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java b/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
index ef8c99eb64..6c7e3d965d 100644
--- a/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
+++ b/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
@@ -51,7 +51,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -189,7 +189,7 @@ private void updateLod() {
     private int computeNbTri() {
         int nbTri = 0;
         for (Geometry geom : listGeoms) {
-            GLMesh mesh = geom.getMesh();
+            Mesh mesh = geom.getMesh();
             // Check if the mesh has LOD levels
             if (mesh.getNumLodLevels() > 0) {
                 nbTri += mesh.getLodLevel(lodLevel).getNumElements();
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java b/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
index 93947e7d5c..89c0718733 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Box;
 import com.jme3.util.SkyFactory;
@@ -94,7 +94,7 @@ public void simpleInitApp() {
         /*
          * Attach a "floor" geometry to the scene graph.
          */
-        GLMesh floorMesh = new Box(10f, 0.1f, 10f);
+        Mesh floorMesh = new Box(10f, 0.1f, 10f);
         floor = new Geometry("floor", floorMesh);
         Material floorMaterial = new Material(assetManager,
                 "Common/MatDefs/Misc/Unshaded.j3md");
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java b/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
index fb00c03e6b..ba56b3ff2a 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
@@ -6,7 +6,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.Caps;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Image;
 import com.jme3.texture.Texture;
@@ -40,7 +40,7 @@ public void simpleInitApp()
        tex3.setMinFilter(Texture.MinFilter.Trilinear);
        mat.setTexture("ColorMap", tex3);
 
-       GLMesh m = new GLMesh();
+       Mesh m = new Mesh();
        Vector3f[] vertices = new Vector3f[8];
        vertices[0] = new Vector3f(0, 0, 0);
        vertices[1] = new Vector3f(3, 0, 0);
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java b/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
index e64d94ea97..0af064f557 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
@@ -6,7 +6,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.Caps;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Image;
 import com.jme3.texture.Texture;
@@ -40,7 +40,7 @@ public void simpleInitApp()
        tex3.setMinFilter(Texture.MinFilter.Trilinear);
        mat.setTexture("ColorMap", tex3);
 
-       GLMesh m = new GLMesh();
+       Mesh m = new Mesh();
        Vector3f[] vertices = new Vector3f[8];
        vertices[0] = new Vector3f(0, 0, 0);
        vertices[1] = new Vector3f(3, 0, 0);
diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
index d4b767b1f7..f0bd3ae172 100644
--- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
+++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
@@ -12,32 +12,17 @@
 import com.jme3.system.vulkan.LwjglVulkanContext;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.Format;
-import com.jme3.vulkan.VulkanInstance;
-import com.jme3.vulkan.VulkanLogger;
-import com.jme3.vulkan.buffers.BufferUsage;
-import com.jme3.vulkan.buffers.GpuBuffer;
-import com.jme3.vulkan.buffers.PersistentBuffer;
-import com.jme3.vulkan.buffers.StageableBuffer;
 import com.jme3.vulkan.commands.CommandBuffer;
 import com.jme3.vulkan.commands.CommandPool;
-import com.jme3.vulkan.descriptors.*;
-import com.jme3.vulkan.devices.DeviceFeature;
-import com.jme3.vulkan.devices.DeviceFilter;
-import com.jme3.vulkan.devices.GeneralPhysicalDevice;
-import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.frames.SingleResource;
 import com.jme3.vulkan.frames.UpdateFrame;
 import com.jme3.vulkan.frames.UpdateFrameManager;
-import com.jme3.vulkan.images.*;
 import com.jme3.vulkan.material.TestMaterial;
 import com.jme3.vulkan.memory.MemoryProp;
 import com.jme3.vulkan.memory.MemorySize;
-import com.jme3.vulkan.mesh.*;
 import com.jme3.vulkan.pass.Attachment;
 import com.jme3.vulkan.pass.Subpass;
 import com.jme3.vulkan.pass.RenderPass;
-import com.jme3.vulkan.pipelines.*;
 import com.jme3.vulkan.pipelines.states.ColorBlendAttachment;
 import com.jme3.vulkan.pipelines.states.DynamicState;
 import com.jme3.vulkan.shader.ShaderModule;
@@ -78,6 +63,8 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda
     private boolean swapchainResizeFlag = false;
     private boolean applicationStopped = false;
 
+    private VulkanLogger logger;
+
     // mesh
     private Mesh mesh;
     private final FloatBuffer vertexData = BufferUtils.createFloatBuffer(
@@ -146,7 +133,9 @@ public void simpleInitApp() {
             i.setApplicationName(VulkanHelperTest.class.getSimpleName());
             i.setApplicationVersion(1, 0, 0);
         }
-        instance.createLogger(Level.SEVERE);
+
+        // debug callbacks
+        logger = new VulkanLogger(instance, Level.SEVERE);
 
         // surface
         surface = new Surface(instance, window);
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
index 1545905ef2..6e1a44a606 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
@@ -49,7 +49,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.util.clone.Cloner;
@@ -538,8 +538,8 @@ protected void createSpatialData(Spatial spatial) {
         /*
          * Find the target meshes and choose the transform spatial.
          */
-        List targetList = RagUtils.listAnimatedMeshes(spatial, null);
-        GLMesh[] targets = new GLMesh[targetList.size()];
+        List targetList = RagUtils.listAnimatedMeshes(spatial, null);
+        Mesh[] targets = new Mesh[targetList.size()];
         targetList.toArray(targets);
         transformer = RagUtils.findAnimatedGeometry(spatial);
         if (transformer == null) {
@@ -1017,7 +1017,7 @@ private CollisionShape createShape(Transform vertexToShape, Vector3f center,
      * @param vertexLocations the set of vertex locations (not null, not empty)
      * @param meshes array of animated meshes to use (not null, unaffected)
      */
-    private void createTorsoLink(VectorSet vertexLocations, GLMesh[] meshes) {
+    private void createTorsoLink(VectorSet vertexLocations, Mesh[] meshes) {
         if (vertexLocations == null || vertexLocations.numVectors() == 0) {
             throw new IllegalArgumentException(
                     "No mesh vertices for the torso."
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
index fa037f2239..0a51b894e8 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -97,13 +97,13 @@ private RagUtils() {
      * null, unaffected)
      * @return a new map from bone/torso names to sets of vertex coordinates
      */
-    static Map coordsMap(GLMesh[] meshes,
-                                            String[] managerMap) {
+    static Map coordsMap(Mesh[] meshes,
+            String[] managerMap) {
         float[] wArray = new float[4];
         int[] iArray = new int[4];
         Vector3f bindPosition = new Vector3f();
         Map coordsMap = new HashMap<>(32);
-        for (GLMesh mesh : meshes) {
+        for (Mesh mesh : meshes) {
             int numVertices = mesh.getVertexCount();
             for (int vertexI = 0; vertexI < numVertices; ++vertexI) {
                 String managerName = findManager(mesh, vertexI, iArray, wArray,
@@ -133,7 +133,7 @@ static Geometry findAnimatedGeometry(Spatial subtree) {
         Geometry result = null;
         if (subtree instanceof Geometry) {
             Geometry geometry = (Geometry) subtree;
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             VertexBuffer indices = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             boolean hasIndices = indices != null;
             VertexBuffer weights = mesh.getBuffer(VertexBuffer.Type.BoneWeight);
@@ -186,7 +186,7 @@ static int findIndex(Spatial spatial, Control sgc) {
      * (not null)
      * @return a root bone, or null if none found
      */
-    static Joint findMainBone(Armature skeleton, GLMesh[] targetMeshes) {
+    static Joint findMainBone(Armature skeleton, Mesh[] targetMeshes) {
         Joint[] rootBones = skeleton.getRoots();
 
         Joint result;
@@ -217,15 +217,15 @@ static Joint findMainBone(Armature skeleton, GLMesh[] targetMeshes) {
      * @param storeResult (added to if not null)
      * @return an expanded list (either storeResult or a new instance)
      */
-    static List listAnimatedMeshes(Spatial subtree,
-                                           List storeResult) {
+    static List listAnimatedMeshes(Spatial subtree,
+            List storeResult) {
         if (storeResult == null) {
             storeResult = new ArrayList<>(10);
         }
 
         if (subtree instanceof Geometry) {
             Geometry geometry = (Geometry) subtree;
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             VertexBuffer indices = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             boolean hasIndices = indices != null;
             VertexBuffer weights = mesh.getBuffer(VertexBuffer.Type.BoneWeight);
@@ -394,7 +394,7 @@ private static void addPreOrderJoints(Joint bone, List addResult) {
      * @param mesh animated mesh to analyze (not null, unaffected)
      * @param totalWeights (not null, modified)
      */
-    private static void addWeights(GLMesh mesh, float[] totalWeights) {
+    private static void addWeights(Mesh mesh, float[] totalWeights) {
         assert totalWeights != null;
 
         int maxWeightsPerVert = mesh.getMaxNumWeights();
@@ -439,8 +439,8 @@ private static void addWeights(GLMesh mesh, float[] totalWeights) {
      * unaffected)
      * @return a bone/torso name
      */
-    private static String findManager(GLMesh mesh, int vertexIndex, int[] iArray,
-                                      float[] wArray, String[] managerMap) {
+    private static String findManager(Mesh mesh, int vertexIndex, int[] iArray,
+            float[] wArray, String[] managerMap) {
         vertexBoneIndices(mesh, vertexIndex, iArray);
         vertexBoneWeights(mesh, vertexIndex, wArray);
         Map weightMap = weightMap(iArray, wArray, managerMap);
@@ -539,10 +539,10 @@ private static int readIndex(Buffer buffer) {
      * @param skeleton (not null, unaffected)
      * @return a map from bone indices to total bone weight
      */
-    private static float[] totalWeights(GLMesh[] meshes, Armature skeleton) {
+    private static float[] totalWeights(Mesh[] meshes, Armature skeleton) {
         int numBones = skeleton.getJointCount();
         float[] result = new float[numBones];
-        for (GLMesh mesh : meshes) {
+        for (Mesh mesh : meshes) {
             RagUtils.addWeights(mesh, result);
         }
 
@@ -568,8 +568,8 @@ private static float[] totalWeights(GLMesh[] meshes, Armature skeleton) {
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static int[] vertexBoneIndices(GLMesh mesh,
-                                           int vertexIndex, int[] storeResult) {
+    private static int[] vertexBoneIndices(Mesh mesh,
+            int vertexIndex, int[] storeResult) {
         if (storeResult == null) {
             storeResult = new int[4];
         } else {
@@ -607,8 +607,8 @@ private static int[] vertexBoneIndices(GLMesh mesh,
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static float[] vertexBoneWeights(GLMesh mesh,
-                                             int vertexIndex, float[] storeResult) {
+    private static float[] vertexBoneWeights(Mesh mesh,
+            int vertexIndex, float[] storeResult) {
         if (storeResult == null) {
             storeResult = new float[4];
         } else {
@@ -650,9 +650,9 @@ private static float[] vertexBoneWeights(GLMesh mesh,
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static Vector3f vertexVector3f(GLMesh mesh,
-                                           VertexBuffer.Type bufferType, int vertexIndex,
-                                           Vector3f storeResult) {
+    private static Vector3f vertexVector3f(Mesh mesh,
+            VertexBuffer.Type bufferType, int vertexIndex,
+            Vector3f storeResult) {
         assert bufferType == VertexBuffer.Type.BindPoseNormal
                 || bufferType == VertexBuffer.Type.BindPosePosition
                 || bufferType == VertexBuffer.Type.Binormal
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
index abb8d10b96..7dadd68835 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
@@ -62,12 +62,12 @@ protected GImpactCollisionShape() {
      * creates a collision shape from the given Mesh
      * @param mesh the Mesh to use
      */
-    public GImpactCollisionShape(GLMesh mesh) {
+    public GImpactCollisionShape(Mesh mesh) {
         createCollisionMesh(mesh, new Vector3f(1,1,1));
     }
 
 
-    private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
+    private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
         this.worldScale = worldScale;
         bulletMesh = Converter.convert(mesh);
         this.numVertices = bulletMesh.numVertices;
@@ -84,7 +84,7 @@ private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
      *
      * @return a new Mesh
      */
-    public GLMesh createJmeMesh(){
+    public Mesh createJmeMesh(){
         return Converter.convert(bulletMesh);
     }
 
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
index 0d420f717d..d6102d660f 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
@@ -39,7 +39,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import java.io.IOException;
 
 /**
@@ -124,7 +124,7 @@ protected void createShape() {
                 cShape.setMargin(margin);
     }
 
-    public GLMesh createJmeMesh(){
+    public Mesh createJmeMesh(){
         //TODO return Converter.convert(bulletMesh);
         return null;
     }
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
index 3564936fd1..24746934a5 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
@@ -38,7 +38,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 import java.nio.FloatBuffer;
@@ -51,7 +51,7 @@ public class HullCollisionShape extends CollisionShape {
     protected HullCollisionShape() {
     }
 
-    public HullCollisionShape(GLMesh mesh) {
+    public HullCollisionShape(Mesh mesh) {
         this.points = getPoints(mesh);
         createShape(this.points);
     }
@@ -75,7 +75,7 @@ public void read(JmeImporter im) throws IOException {
         InputCapsule capsule = im.getCapsule(this);
 
         // for backwards compatability
-        GLMesh mesh = (GLMesh) capsule.readSavable("hullMesh", null);
+        Mesh mesh = (Mesh) capsule.readSavable("hullMesh", null);
         if (mesh != null) {
             this.points = getPoints(mesh);
         } else {
@@ -95,7 +95,7 @@ protected void createShape(float[] points) {
         cShape.setMargin(margin);
     }
 
-    protected float[] getPoints(GLMesh mesh) {
+    protected float[] getPoints(Mesh mesh) {
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         vertices.rewind();
         int components = mesh.getVertexCount() * 3;
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
index 9f780f5321..acb93ee043 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
@@ -63,7 +63,7 @@ protected MeshCollisionShape() {
      * @param mesh
      *            the TriMesh to use
      */
-    public MeshCollisionShape(GLMesh mesh) {
+    public MeshCollisionShape(Mesh mesh) {
         this(mesh, false);
     }
  
@@ -73,11 +73,11 @@ public MeshCollisionShape(GLMesh mesh) {
      * @param mesh the TriMesh to use
      * @param dummy Unused
      */
-    public MeshCollisionShape(GLMesh mesh, boolean dummy) {
+    public MeshCollisionShape(Mesh mesh, boolean dummy) {
         createCollisionMesh(mesh, new Vector3f(1, 1, 1));
     }
     
-    private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
+    private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
         this.scale = worldScale;
         bulletMesh = Converter.convert(mesh);
         this.numVertices = bulletMesh.numVertices;
@@ -94,7 +94,7 @@ private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
      *
      * @return a new Mesh
      */
-    public GLMesh createJmeMesh(){
+    public Mesh createJmeMesh(){
         return Converter.convert(bulletMesh);
     }
 
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
index 62c240078b..19f054be32 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
@@ -43,7 +43,7 @@
 import com.jme3.math.*;
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.ViewPort;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.util.TempVars;
@@ -603,7 +603,7 @@ protected void createSpatialData(Spatial model) {
      * shape will contain at least 1 vertex.
      */
     private void filterBoneList(SkeletonControl skeletonControl) {
-        GLMesh[] targets = skeletonControl.getTargets();
+        Mesh[] targets = skeletonControl.getTargets();
         Skeleton skel = skeletonControl.getSkeleton();
         for (int boneI = 0; boneI < skel.getBoneCount(); boneI++) {
             String boneName = skel.getBone(boneI).getName();
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
index d54e642062..6377ee413b 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
@@ -46,7 +46,7 @@
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.ViewPort;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.control.Control;
 import com.jme3.scene.shape.Box;
@@ -225,7 +225,7 @@ protected void createCollisionShape() {
         }
         if (spatial instanceof Geometry) {
             Geometry geom = (Geometry) spatial;
-            GLMesh mesh = geom.getMesh();
+            Mesh mesh = geom.getMesh();
             if (mesh instanceof Sphere) {
                 collisionShape = new SphereCollisionShape(((Sphere) mesh).getRadius());
                 return;
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
index 93a290baca..f24ccf5f72 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
@@ -95,15 +95,15 @@ public static Map> buildPointMap(Spatial model) {
         Map> map = new HashMap<>();
 
         SkeletonControl skeletonCtrl = model.getControl(SkeletonControl.class);
-        GLMesh[] targetMeshes = skeletonCtrl.getTargets();
-        for (GLMesh mesh : targetMeshes) {
+        Mesh[] targetMeshes = skeletonCtrl.getTargets();
+        for (Mesh mesh : targetMeshes) {
             buildPointMapForMesh(mesh, map);
         }
 
         return map;
     }
 
-    private static Map> buildPointMapForMesh(GLMesh mesh, Map> map) {
+    private static Map> buildPointMapForMesh(Mesh mesh, Map> map) {
 
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         ByteBuffer boneIndices = (ByteBuffer) mesh.getBuffer(Type.BoneIndex).getData();
@@ -222,8 +222,8 @@ public static HullCollisionShape makeShapeFromVerticeWeights(Spatial model,
         List points = new ArrayList<>(100);
 
         SkeletonControl skeletonCtrl = model.getControl(SkeletonControl.class);
-        GLMesh[] targetMeshes = skeletonCtrl.getTargets();
-        for (GLMesh mesh : targetMeshes) {
+        Mesh[] targetMeshes = skeletonCtrl.getTargets();
+        for (Mesh mesh : targetMeshes) {
             for (Integer index : boneIndices) {
                 List bonePoints = getPoints(mesh, index, initialScale,
                         initialPosition, weightThreshold);
@@ -254,7 +254,7 @@ public static HullCollisionShape makeShapeFromVerticeWeights(Spatial model,
      * @return a new list of vertex coordinates (not null, length a multiple of
      * 3)
      */
-    private static List getPoints(GLMesh mesh, int boneIndex, Vector3f initialScale, Vector3f offset, float weightThreshold) {
+    private static List getPoints(Mesh mesh, int boneIndex, Vector3f initialScale, Vector3f offset, float weightThreshold) {
 
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         VertexBuffer biBuf = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
@@ -351,9 +351,9 @@ public static void setUserControl(Bone bone, boolean bool) {
      * @param weightThreshold the threshold (≥0, ≤1)
      * @return true if at least 1 vertex found, otherwise false
      */
-    public static boolean hasVertices(int boneIndex, GLMesh[] targets,
+    public static boolean hasVertices(int boneIndex, Mesh[] targets,
             float weightThreshold) {
-        for (GLMesh mesh : targets) {
+        for (Mesh mesh : targets) {
             VertexBuffer biBuf = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             Buffer boneIndices = biBuf.getDataReadOnly();
             FloatBuffer boneWeight
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
index b7f66189ab..80d71c53ce 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
@@ -251,9 +251,9 @@ public static CollisionShape createBoxShape(Spatial spatial) {
      * other.
      */
     private static MeshCollisionShape createSingleMeshShape(Geometry geom, Spatial parent) {
-        GLMesh mesh = geom.getMesh();
+        Mesh mesh = geom.getMesh();
         Transform trans = getTransform(geom, parent);
-        if (mesh != null && mesh.getMode() == GLMesh.Mode.Triangles) {
+        if (mesh != null && mesh.getMode() == Mesh.Mode.Triangles) {
             MeshCollisionShape mColl = new MeshCollisionShape(mesh);
             mColl.setScale(trans.getScale());
             return mColl;
@@ -285,7 +285,7 @@ private static BoxCollisionShape createSingleBoxShape(Spatial spatial, Spatial p
      * @param parent
      */
     private static HullCollisionShape createSingleDynamicMeshShape(Geometry geom, Spatial parent) {
-        GLMesh mesh = geom.getMesh();
+        Mesh mesh = geom.getMesh();
         Transform trans = getTransform(geom, parent);
         if (mesh != null) {
             HullCollisionShape dynamicShape = new HullCollisionShape(mesh);
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
index 87f31048f7..096c926e8d 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
@@ -34,7 +34,7 @@
 import com.bulletphysics.collision.shapes.IndexedMesh;
 import com.bulletphysics.dom.HeightfieldTerrainShape;
 import com.jme3.math.FastMath;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.util.BufferUtils;
@@ -223,7 +223,7 @@ public static com.jme3.math.Transform convert(com.bulletphysics.linearmath.Trans
         return out;
     }
 
-    public static synchronized IndexedMesh convert(GLMesh mesh) {
+    public static synchronized IndexedMesh convert(Mesh mesh) {
         IndexedMesh jBulletIndexedMesh = new IndexedMesh();
         jBulletIndexedMesh.triangleIndexBase = ByteBuffer.allocate(mesh.getTriangleCount() * 3 * 4);
         jBulletIndexedMesh.vertexBase = ByteBuffer.allocate(mesh.getVertexCount() * 3 * 4);
@@ -253,8 +253,8 @@ public static synchronized IndexedMesh convert(GLMesh mesh) {
         return jBulletIndexedMesh;
     }
 
-    public static GLMesh convert(IndexedMesh mesh) {
-        GLMesh jmeMesh = new GLMesh();
+    public static Mesh convert(IndexedMesh mesh) {
+        Mesh jmeMesh = new Mesh();
 
         jmeMesh.setBuffer(Type.Index, 3, BufferUtils.createShortBuffer(mesh.numTriangles * 3));
         jmeMesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(mesh.numVertices * 3));
@@ -276,7 +276,7 @@ public static GLMesh convert(IndexedMesh mesh) {
         return jmeMesh;
     }
 
-    public static GLMesh convert(HeightfieldTerrainShape heightfieldShape) {
+    public static Mesh convert(HeightfieldTerrainShape heightfieldShape) {
         return null; //TODO!!
     }
 }
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
index ab043694b8..3e74f1ab3c 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
@@ -41,7 +41,7 @@
 import com.jme3.bullet.collision.shapes.infos.ChildCollisionShape;
 import com.jme3.math.Matrix3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
@@ -126,14 +126,14 @@ private static Geometry createDebugShape(CollisionShape shape) {
         return geom;
     }
 
-    public static GLMesh getDebugMesh(CollisionShape shape) {
-        GLMesh mesh = null;
+    public static Mesh getDebugMesh(CollisionShape shape) {
+        Mesh mesh = null;
         if (shape.getCShape() instanceof ConvexShape) {
-            mesh = new GLMesh();
+            mesh = new Mesh();
             mesh.setBuffer(Type.Position, 3, getVertices((ConvexShape) shape.getCShape()));
             mesh.getFloatBuffer(Type.Position).clear();
         } else if (shape.getCShape() instanceof ConcaveShape) {
-            mesh = new GLMesh();
+            mesh = new Mesh();
             mesh.setBuffer(Type.Position, 3, getVertices((ConcaveShape) shape.getCShape()));
             mesh.getFloatBuffer(Type.Position).clear();
         }
diff --git a/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java b/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
index 5675da237d..bb704578e9 100644
--- a/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
+++ b/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
@@ -50,7 +50,7 @@
 import com.jme3.export.binary.BinaryImporter;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -179,7 +179,7 @@ public void testIssue1004() {
         Node sinbad = (Node)new DesktopAssetManager(true).loadModel("Models/Sinbad/SinbadOldAnim.j3o");
 
         Geometry geometry = (Geometry) sinbad.getChild(0);
-        GLMesh mesh = geometry.getMesh();
+        Mesh mesh = geometry.getMesh();
         VertexBuffer.Type bufferType = VertexBuffer.Type.BoneIndex;
         VertexBuffer vertexBuffer = mesh.getBuffer(bufferType);
 
diff --git a/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java b/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
index d2ee71ae22..4d08588759 100644
--- a/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
+++ b/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
@@ -40,7 +40,7 @@
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.Renderer;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -495,7 +495,7 @@ private class Batch {
         private final VertexBuffer vertexColor = new VertexBuffer(Type.Color);
         private final VertexBuffer indexBuffer = new VertexBuffer(Type.Index);
 
-        private final GLMesh mesh = new GLMesh();
+        private final Mesh mesh = new Mesh();
         private final Geometry meshGeometry = new Geometry("nifty-quad", mesh);
         private final RenderState renderState = new RenderState();
 
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
index 564da94cdf..7f48d3e201 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
@@ -37,7 +37,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.plugins.IrUtils;
 import com.jme3.scene.plugins.IrBoneWeightIndex;
 import com.jme3.scene.plugins.IrMesh;
@@ -55,7 +55,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-public final class FbxMesh extends FbxNodeAttribute> {
+public final class FbxMesh extends FbxNodeAttribute> {
 
     private static final Logger logger = Logger.getLogger(FbxMesh.class.getName());
     
@@ -205,7 +205,7 @@ private static IrBoneWeightIndex[] toBoneWeightIndices(List boneIndices
     }
     
     @Override
-    protected IntMap toJmeObject() {
+    protected IntMap toJmeObject() {
         // Load clusters from SkinDeformer
         if (skinDeformer != null) {
             for (FbxCluster cluster : skinDeformer.getJmeObject()) {
@@ -228,9 +228,9 @@ protected IntMap toJmeObject() {
         IntMap irMeshes = IrUtils.splitByMaterial(irMesh);
         
         // Create a jME3 Mesh for each material index.
-        IntMap jmeMeshes = new IntMap<>();
+        IntMap jmeMeshes = new IntMap<>();
         for (IntMap.Entry irMeshEntry : irMeshes) {
-            GLMesh jmeMesh = IrUtils.convertIrMeshToJmeMesh(irMeshEntry.getValue());
+            Mesh jmeMesh = IrUtils.convertIrMeshToJmeMesh(irMeshEntry.getValue());
             jmeMeshes.put(irMeshEntry.getKey(), jmeMesh);
         }
        
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
index f01a50eaad..678e88eae9 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
@@ -45,7 +45,7 @@
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Spatial.CullHint;
@@ -318,7 +318,7 @@ public void fromElement(FbxElement element) {
         }
     }
     
-    private Spatial tryCreateGeometry(int materialIndex, GLMesh jmeMesh, boolean single) {
+    private Spatial tryCreateGeometry(int materialIndex, Mesh jmeMesh, boolean single) {
         // Map meshes without material indices to material 0.
         if (materialIndex == -1) {
             materialIndex = 0;
@@ -396,7 +396,7 @@ public Spatial toJmeObject() {
         
         if (nodeAttribute instanceof FbxMesh) {
             FbxMesh fbxMesh = (FbxMesh) nodeAttribute;
-            IntMap jmeMeshes = fbxMesh.getJmeObject();
+            IntMap jmeMeshes = fbxMesh.getJmeObject();
             
             if (jmeMeshes == null || jmeMeshes.size() == 0) {
                 // No meshes found on FBXMesh (??)
@@ -412,7 +412,7 @@ public Spatial toJmeObject() {
                 }
                 Node node = new Node(nodeName);
                 boolean singleMesh = jmeMeshes.size() == 1;
-                for (IntMap.Entry meshInfo : jmeMeshes) {
+                for (IntMap.Entry meshInfo : jmeMeshes) {
                     node.attachChild(tryCreateGeometry(meshInfo.getKey(), meshInfo.getValue(), singleMesh));
                 }
                 spatial = node;
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
index d4dcb081f9..9cc40fe5b9 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
@@ -8,11 +8,11 @@
 
 import com.jme3.asset.AssetLoadException;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.plugins.fbx.SceneLoader;
 import com.jme3.scene.plugins.fbx.file.FbxElement;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.Node;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.IntMap;
@@ -257,7 +257,7 @@ public void link(FbxObject otherObject) {
     }
 
     private List createGeometries() throws IOException {
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         mesh.setMode(Mode.Triangles);
         // Since each vertex should contain unique texcoord and normal we should unroll vertex indexing
         // So we don't use VertexBuffer.Type.Index for elements drawing
@@ -507,7 +507,7 @@ else if(binormalsMapping.equals("ByPolygonVertex"))
                 Entry> e = iterator.next();
                 int materialId = e.getKey();
                 List indexes = e.getValue();
-                GLMesh newMesh = mesh.clone();
+                Mesh newMesh = mesh.clone();
                 newMesh.setBuffer(VertexBuffer.Type.Index, 3, toArray(indexes.toArray(new Integer[indexes.size()])));
                 newMesh.setStatic();
                 newMesh.updateBound();
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
index 954c05c782..8cb1a2e8a8 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
@@ -6,7 +6,7 @@
 import java.util.List;
 
 import com.jme3.asset.AssetLoadException;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -43,10 +43,10 @@ public void generateSkinning() {
         for(FbxMesh fbxMesh : toSkin) {
             if(fbxMesh.geometries == null)
                 continue;
-            GLMesh firstMesh = fbxMesh.geometries.get(0).getMesh();
+            Mesh firstMesh = fbxMesh.geometries.get(0).getMesh();
             int maxWeightsPerVert = generateBoneData(firstMesh, fbxMesh);
             for(int i = 0; i < fbxMesh.geometries.size(); ++i) {
-                GLMesh mesh = fbxMesh.geometries.get(i).getMesh();
+                Mesh mesh = fbxMesh.geometries.get(i).getMesh();
                 if(mesh != firstMesh) {
                     mesh.setBuffer(firstMesh.getBuffer(VertexBuffer.Type.BoneWeight));
                     mesh.setBuffer(firstMesh.getBuffer(VertexBuffer.Type.BoneIndex));
@@ -59,7 +59,7 @@ public void generateSkinning() {
         }
     }
     
-    private int generateBoneData(GLMesh mesh, FbxMesh fbxMesh) {
+    private int generateBoneData(Mesh mesh, FbxMesh fbxMesh) {
         // Create bone buffers
         FloatBuffer boneWeightData = BufferUtils.createFloatBuffer(fbxMesh.vCount * 4);
         ByteBuffer boneIndicesData = BufferUtils.createByteBuffer(fbxMesh.vCount * 4);
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
index 2f199d8872..3002515633 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
@@ -374,7 +374,7 @@ public Geometry[] readMeshPrimitives(int meshIndex) throws IOException {
             int index = 0;
             for (JsonElement primitive : primitives) {
                 JsonObject meshObject = primitive.getAsJsonObject();
-                GLMesh mesh = new GLMesh();
+                Mesh mesh = new Mesh();
                 addToCache("mesh", 0, mesh, 1);
                 Integer mode = getAsInteger(meshObject, "mode");
                 mesh.setMode(getMeshMode(mode));
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
index 054c9ba80f..8f015f28db 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
@@ -71,29 +71,29 @@ public static JsonObject parse(InputStream stream) {
         return parser.parse(stream);
     }
 
-    public static GLMesh.Mode getMeshMode(Integer mode) {
+    public static Mesh.Mode getMeshMode(Integer mode) {
         if (mode == null) {
-            return GLMesh.Mode.Triangles;
+            return Mesh.Mode.Triangles;
         }
         //too bad, we could have returned the enum value from the ordinal
         //but LineLoop and LineStrip are inverted in the Mesh.Mode Enum declaration.
         switch (mode) {
             case 0:
-                return GLMesh.Mode.Points;
+                return Mesh.Mode.Points;
             case 1:
-                return GLMesh.Mode.Lines;
+                return Mesh.Mode.Lines;
             case 2:
-                return GLMesh.Mode.LineLoop;
+                return Mesh.Mode.LineLoop;
             case 3:
-                return GLMesh.Mode.LineStrip;
+                return Mesh.Mode.LineStrip;
             case 4:
-                return GLMesh.Mode.Triangles;
+                return Mesh.Mode.Triangles;
             case 5:
-                return GLMesh.Mode.TriangleStrip;
+                return Mesh.Mode.TriangleStrip;
             case 6:
-                return GLMesh.Mode.TriangleFan;
+                return Mesh.Mode.TriangleFan;
         }
-        return GLMesh.Mode.Triangles;
+        return Mesh.Mode.Triangles;
     }
 
     public static VertexBuffer.Format getVertexBufferFormat(int componentType) {
@@ -488,7 +488,7 @@ public static byte[] toByteArray(short[] shortArray) {
     }
 
 
-    public static void handleSkinningBuffers(GLMesh mesh, IntMap skinBuffers) {
+    public static void handleSkinningBuffers(Mesh mesh, IntMap skinBuffers) {
         if (skinBuffers.size() > 0) {
             int length = skinBuffers.get(0).joints.length;
             short[] jointsArray = new short[length];
@@ -546,7 +546,7 @@ public int compare(GltfLoader.WeightData o1, GltfLoader.WeightData o2) {
     }
 
 
-    public static void setSkinBuffers(GLMesh mesh, short[] jointsArray, float[] weightsArray, int componentSize) {
+    public static void setSkinBuffers(Mesh mesh, short[] jointsArray, float[] weightsArray, int componentSize) {
         if (componentSize == 1) {
             mesh.setBuffer(VertexBuffer.Type.BoneIndex, 4, BufferUtils.createByteBuffer(toByteArray(jointsArray)));
         } else {
@@ -858,7 +858,7 @@ public static Spatial findCommonAncestor(List spatials) {
 
     }
 
-    public static void dumpMesh(GLMesh m) {
+    public static void dumpMesh(Mesh m) {
         for (VertexBuffer vertexBuffer : m.getBufferList().getArray()) {
             System.err.println(vertexBuffer.getBufferType());
             System.err.println(vertexBuffer.getFormat());
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
index d66bfee532..aff6fbdcf1 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
@@ -37,7 +37,7 @@
 import com.jme3.asset.AssetLoadException;
 import com.jme3.math.Matrix3f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import static com.jme3.scene.plugins.gltf.GltfUtils.getAsInteger;
 import static com.jme3.scene.plugins.gltf.GltfUtils.getVertexBufferType;
@@ -69,7 +69,7 @@ public class TextureTransformExtensionLoader implements ExtensionLoader {
      * @param transform The matrix containing the scale/rotate/translate transformations
      * @param verType The vertex buffer type from which to retrieve the UV coordinates
      */    
-    private void uvTransform(GLMesh mesh, Matrix3f transform, VertexBuffer.Type verType) {
+    private void uvTransform(Mesh mesh, Matrix3f transform, VertexBuffer.Type verType) {
         if (!transform.isIdentity()) { // if transform is the identity matrix, there's nothing to do
             VertexBuffer tc = mesh.getBuffer(verType);
             if (tc == null) {
@@ -102,7 +102,7 @@ public Object handleExtension(GltfLoader loader, String parentName, JsonElement
         if (!(input instanceof Texture2D)) {
             logger.log(Level.WARNING, "KHR_texture_transform extension added on an unsupported element, the loaded scene result will be unexpected.");
         }
-        GLMesh mesh = loader.fetchFromCache("mesh", 0, GLMesh.class);
+        Mesh mesh = loader.fetchFromCache("mesh", 0, Mesh.class);
         if (mesh != null) {
             Matrix3f translation = new Matrix3f();
             Matrix3f rotation = new Matrix3f();
@@ -131,7 +131,7 @@ public Object handleExtension(GltfLoader loader, String parentName, JsonElement
                 texCoord = jsonObject.get("texCoord").getAsInt(); // it overrides the parent's texCoord value
             }                 
             Matrix3f transform = translation.mult(rotation).mult(scale);
-            GLMesh meshLast = loader.fetchFromCache("textureTransformData", 0, GLMesh.class);
+            Mesh meshLast = loader.fetchFromCache("textureTransformData", 0, Mesh.class);
             Map transformMap = loader.fetchFromCache("textureTransformData", 1, HashMap.class);
             if (mesh != meshLast || (transformMap != null && transformMap.get(texCoord) == null)) {
                 // at this point, we're processing a new mesh or the same mesh as before but for a different UV set
diff --git a/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java b/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
index 3aaf573b39..30338d27fd 100644
--- a/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
+++ b/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
@@ -32,7 +32,7 @@
 package com.jme3.scene.plugins;
 
 import com.jme3.math.Vector4f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.scene.mesh.IndexIntBuffer;
@@ -258,7 +258,7 @@ public static IntMap splitByMaterial(IrMesh mesh) {
      * @param mesh the input IrMesh (not null)
      * @return a new Mesh
      */
-    public static GLMesh convertIrMeshToJmeMesh(IrMesh mesh) {
+    public static Mesh convertIrMeshToJmeMesh(IrMesh mesh) {
         Map vertexToVertexIndex = new HashMap<>();
         List vertices = new ArrayList<>();
         List indexes = new ArrayList<>();
@@ -284,8 +284,8 @@ public static GLMesh convertIrMeshToJmeMesh(IrMesh mesh) {
             }
         }
         
-        GLMesh jmeMesh = new GLMesh();
-        jmeMesh.setMode(GLMesh.Mode.Triangles);
+        Mesh jmeMesh = new Mesh();
+        jmeMesh.setMode(Mesh.Mode.Triangles);
         
         FloatBuffer posBuf = null;
         FloatBuffer normBuf = null;
diff --git a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
index 21a4e9acd2..4cb7967d94 100644
--- a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
+++ b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
@@ -84,7 +84,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
     private IntBuffer ib;
     private FloatBuffer fb;
     private VertexBuffer vb;
-    private GLMesh mesh;
+    private Mesh mesh;
     private Geometry geom;
     private ByteBuffer indicesData;
     private FloatBuffer weightsFloatData;
@@ -94,7 +94,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
     private boolean usesBigIndices;
     private boolean submeshNamesHack;
     // Global data
-    private GLMesh sharedMesh;
+    private Mesh sharedMesh;
     private int meshIndex = 0;
     private int texCoordIndex = 0;
     private String ignoreUntilEnd = null;
@@ -241,15 +241,15 @@ private void applyMaterial(Geometry geom, String matName) {
     }
 
     private void startSubMesh(String matName, String usesharedvertices, String use32bitIndices, String opType) throws SAXException {
-        mesh = new GLMesh();
+        mesh = new Mesh();
         if (opType == null || opType.equals("triangle_list")) {
-            mesh.setMode(GLMesh.Mode.Triangles);
+            mesh.setMode(Mesh.Mode.Triangles);
             //} else if (opType.equals("triangle_strip")) {
             //    mesh.setMode(Mesh.Mode.TriangleStrip);
             //} else if (opType.equals("triangle_fan")) {
             //    mesh.setMode(Mesh.Mode.TriangleFan);
         } else if (opType.equals("line_list")) {
-            mesh.setMode(GLMesh.Mode.Lines);
+            mesh.setMode(Mesh.Mode.Lines);
         } else {
             throw new SAXException("Unsupported operation type: " + opType);
         }
@@ -286,7 +286,7 @@ private void startSubMesh(String matName, String usesharedvertices, String use32
     }
 
     private void startSharedGeom(String vertexCount) throws SAXException {
-        sharedMesh = new GLMesh();
+        sharedMesh = new Mesh();
         vertCount = parseInt(vertexCount);
         usesSharedVerts = false;
 
@@ -556,7 +556,7 @@ private void startLevelOfDetail(String numLevels) {
     private void endLevelOfDetail() {
         // set the lod data for each mesh
         for (Entry> entry : lodLevels) {
-            GLMesh m = geoms.get(entry.getKey()).getMesh();
+            Mesh m = geoms.get(entry.getKey()).getMesh();
             List levels = entry.getValue();
             VertexBuffer[] levelArray = new VertexBuffer[levels.size()];
             levels.toArray(levelArray);
@@ -772,7 +772,7 @@ private Node compileModel() {
 
         for (int i = 0; i < geoms.size(); i++) {
             Geometry g = geoms.get(i);
-            GLMesh m = g.getMesh();
+            Mesh m = g.getMesh();
 
             // New code for buffer extract
             if (sharedMesh != null && usesSharedMesh.get(i)) {
@@ -789,7 +789,7 @@ private Node compileModel() {
 
             for (int i = 0; i < geoms.size(); i++) {
                 Geometry g = geoms.get(i);
-                GLMesh m = geoms.get(i).getMesh();
+                Mesh m = geoms.get(i).getMesh();
                 m.generateBindPose();
             }
 
diff --git a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
index f2a83e9e6c..50435b1218 100644
--- a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
+++ b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
@@ -42,7 +42,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 import org.jmonkeyengine.screenshottests.testframework.ScreenshotTestBase;
@@ -98,7 +98,7 @@ protected void initialize(Application app) {
 
                 // Remove its vertex normals
                 Geometry oldGeometry = (Geometry) oldJaime.getChild(0);
-                GLMesh oldMesh = oldGeometry.getMesh();
+                Mesh oldMesh = oldGeometry.getMesh();
                 oldMesh.clearBuffer(VertexBuffer.Type.Normal);
                 oldMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
 
@@ -114,7 +114,7 @@ protected void initialize(Application app) {
 
                 // Remove its vertex normals
                 Geometry newGeometry = (Geometry) newJaime.getChild(0);
-                GLMesh newMesh = newGeometry.getMesh();
+                Mesh newMesh = newGeometry.getMesh();
                 newMesh.clearBuffer(VertexBuffer.Type.Normal);
                 newMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
 
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java b/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
index 3cf6d5cf53..4a68a9cc18 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
@@ -34,7 +34,7 @@
 import com.jme3.export.*;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -308,12 +308,12 @@ public IntBuffer writeIndexArray(IntBuffer store){
         return store;
     }
     
-    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, boolean center){
+    public Mesh createMesh(Vector3f scale, Vector2f tcScale, boolean center){
         FloatBuffer pb = writeVertexArray(null, scale, center);
         FloatBuffer tb = writeTexCoordArray(null, Vector2f.ZERO, tcScale);
         FloatBuffer nb = writeNormalArray(null, scale);
         IntBuffer ib = writeIndexArray(null);
-        GLMesh m = new GLMesh();
+        Mesh m = new Mesh();
         m.setBuffer(Type.Position, 3, pb);
         m.setBuffer(Type.Normal, 3, nb);
         m.setBuffer(Type.TexCoord, 2, tb);
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
index 23feed4f97..2dae19b458 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
@@ -37,8 +37,8 @@
 import com.jme3.math.Triangle;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.terrain.GeoMap;
@@ -73,11 +73,11 @@ public LODGeomap(int size, float[] heightMap) {
         super(heightMap, size, size, 1);
     }
 
-    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center) {
+    public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center) {
         return this.createMesh(scale, tcScale, tcOffset, offsetAmount, totalSize, center, 1, false, false, false, false);
     }
 
-    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center, int lod, boolean rightLod, boolean topLod, boolean leftLod, boolean bottomLod) {
+    public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center, int lod, boolean rightLod, boolean topLod, boolean leftLod, boolean bottomLod) {
         FloatBuffer pb = writeVertexArray(null, scale, center);
         FloatBuffer texb = writeTexCoordArray(null, tcOffset, tcScale, offsetAmount, totalSize);
         FloatBuffer nb = writeNormalArray(null, scale);
@@ -85,7 +85,7 @@ public GLMesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, fl
         FloatBuffer bb = BufferUtils.createFloatBuffer(getWidth() * getHeight() * 3);
         FloatBuffer tanb = BufferUtils.createFloatBuffer(getWidth() * getHeight() * 3);
         writeTangentArray(nb, tanb, bb, texb, scale);
-        GLMesh m = new GLMesh();
+        Mesh m = new Mesh();
         m.setMode(Mode.TriangleStrip);
         m.setBuffer(Type.Position, 3, pb);
         m.setBuffer(Type.Normal, 3, nb);
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
index 4cdb3184a1..b4ffc5a12d 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
@@ -43,7 +43,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.*;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
@@ -189,7 +189,7 @@ public TerrainPatch(String name, int size, Vector3f stepScale,
         setLocalTranslation(origin);
 
         geomap = new LODGeomap(size, heightMap);
-        GLMesh m = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
+        Mesh m = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
         setMesh(m);
 
     }
@@ -337,7 +337,7 @@ protected void updateNormals() {
         getMesh().getBuffer(Type.Binormal).updateData(newBinormalBuffer);
     }
 
-    private void setInBuffer(GLMesh mesh, int index, Vector3f normal, Vector3f tangent, Vector3f binormal) {
+    private void setInBuffer(Mesh mesh, int index, Vector3f normal, Vector3f tangent, Vector3f binormal) {
         VertexBuffer NB = mesh.getBuffer(Type.Normal);
         VertexBuffer TB = mesh.getBuffer(Type.Tangent);
         VertexBuffer BB = mesh.getBuffer(Type.Binormal);
@@ -893,7 +893,7 @@ private int collideWithBoundingBox(BoundingBox bbox, CollisionResults results) {
     public void write(JmeExporter ex) throws IOException {
         // the mesh is removed, and reloaded when read() is called
         // this reduces the save size to 10% by not saving the mesh
-        GLMesh temp = getMesh();
+        Mesh temp = getMesh();
         mesh = null;
 
         super.write(ex);
@@ -928,7 +928,7 @@ public void read(JmeImporter im) throws IOException {
         lodEntropy = ic.readFloatArray("lodEntropy", null);
         geomap = (LODGeomap) ic.readSavable("geomap", null);
 
-        GLMesh regen = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
+        Mesh regen = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
         setMesh(regen);
         //TangentBinormalGenerator.generate(this); // note that this will be removed
         ensurePositiveVolumeBBox();
@@ -952,7 +952,7 @@ public TerrainPatch clone() {
         //clone.setLodCalculator(lodCalculatorFactory.clone());
         clone.geomap = new LODGeomap(size, geomap.getHeightArray());
         clone.setLocalTranslation(getLocalTranslation().clone());
-        GLMesh m = clone.geomap.createMesh(clone.stepScale, Vector2f.UNIT_XY, clone.offset, clone.offsetAmount, clone.totalSize, false);
+        Mesh m = clone.geomap.createMesh(clone.stepScale, Vector2f.UNIT_XY, clone.offset, clone.offsetAmount, clone.totalSize, false);
         clone.setMesh(m);
         clone.setMaterial(material == null ? null : material.clone());
         return clone;
@@ -976,7 +976,7 @@ public void cloneFields( Cloner cloner, Object original ) {
         // Don't feel like making geomap cloneable tonight,
         // so I'll copy the old logic.
         this.geomap = new LODGeomap(size, geomap.getHeightArray());
-        GLMesh m = geomap.createMesh(stepScale, Vector2f.UNIT_XY, offset, offsetAmount, totalSize, false);
+        Mesh m = geomap.createMesh(stepScale, Vector2f.UNIT_XY, offset, offsetAmount, totalSize, false);
         this.setMesh(m);
 
         // In this case, we always clone material even if the cloner is set up
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
index 0bc8ab95ff..9057664d12 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
@@ -36,7 +36,7 @@
 import com.jme3.math.Matrix4f;
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
@@ -61,7 +61,7 @@ public class EntropyComputeUtil {
     private EntropyComputeUtil() {
     }
 
-    public static float computeLodEntropy(GLMesh terrainBlock, Buffer lodIndices){
+    public static float computeLodEntropy(Mesh terrainBlock, Buffer lodIndices){
         // Bounding box for the terrain block
         BoundingBox bbox = (BoundingBox) terrainBlock.getBound();
 
diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java b/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
index e65f68edc1..c6d0237321 100644
--- a/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
+++ b/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
@@ -12,7 +12,7 @@
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -644,8 +644,8 @@ private ViewPort setupViewBuffers(Camera cam, String viewName){
      * @param api the underlying VR api
      * @return the distorted mesh.
      */
-    public static GLMesh setupDistortionMesh(int eye, VRAPI api) {
-        GLMesh distortionMesh = new GLMesh();
+    public static Mesh setupDistortionMesh(int eye, VRAPI api) {
+        Mesh distortionMesh = new Mesh();
         float m_iLensGridSegmentCountH = 43, m_iLensGridSegmentCountV = 43;
 
         float w = 1f / (m_iLensGridSegmentCountH - 1f);
diff --git a/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java b/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
index 9339fc2b8a..e2911eba6f 100644
--- a/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
+++ b/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
@@ -52,10 +52,10 @@
  * @deprecated use com.jme3.scene.shape.CenterQuad
  */
 @Deprecated
-public class CenterQuad extends GLMesh {
+public class CenterQuad extends Mesh {
 
     public static CenterQuad UnitQuad = new CenterQuad(0.5f, 0.5f);
-    public static GLMesh CenterSplitQuad;
+    public static Mesh CenterSplitQuad;
     
     private float width;
     private float height;

From 7fee9d263e6d9ec6836e898209f561f9b9790ea3 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Fri, 12 Sep 2025 15:22:02 -0400
Subject: [PATCH 59/80] temporarily renamed Mesh to GLMesh to not conflict with
 the new Mesh interface

---
 .../main/java/com/jme3/scene/Geometry.java    | 26 +++++++++----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index 008e987f1d..7e5e3d518d 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -56,7 +56,7 @@
  * Geometry defines a leaf node of the scene graph. The leaf node
  * contains the geometric data for rendering objects. It manages all rendering
  * information such as a {@link Material} object to define how the surface
- * should be shaded and the {@link Mesh} data to contain the actual geometry.
+ * should be shaded and the {@link GLMesh} data to contain the actual geometry.
  *
  * @author Kirill Vainer
  */
@@ -126,7 +126,7 @@ public Geometry(String name) {
      * @param name The name of this geometry
      * @param mesh The mesh data for this geometry
      */
-    public Geometry(String name, Mesh mesh) {
+    public Geometry(String name, GLMesh mesh) {
         this(name);
 
         if (mesh == null) {
@@ -143,7 +143,7 @@ public Geometry(String name, Mesh mesh) {
      * @param mesh The mesh data for this geometry
      * @param material The material for this geometry
      */
-    public Geometry(String name, Mesh mesh, Material material) {
+    public Geometry(String name, GLMesh mesh, Material material) {
         this(name, mesh);
         setMaterial(material);
     }
@@ -177,7 +177,7 @@ public void setIgnoreTransform(boolean ignoreTransform) {
      * Sets the LOD level to use when rendering the mesh of this geometry.
      * Level 0 indicates that the default index buffer should be used,
      * levels [1, LodLevels + 1] represent the levels set on the mesh
-     * with {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }.
+     * with {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }.
      *
      * @param lod The lod level to set
      */
@@ -212,7 +212,7 @@ public int getLodLevel() {
      *
      * @return this geometry's mesh vertex count.
      *
-     * @see Mesh#getVertexCount()
+     * @see GLMesh#getVertexCount()
      */
     @Override
     public int getVertexCount() {
@@ -224,7 +224,7 @@ public int getVertexCount() {
      *
      * @return this geometry's mesh triangle count.
      *
-     * @see Mesh#getTriangleCount()
+     * @see GLMesh#getTriangleCount()
      */
     @Override
     public int getTriangleCount() {
@@ -238,7 +238,7 @@ public int getTriangleCount() {
      *
      * @throws IllegalArgumentException If mesh is null
      */
-    public void setMesh(Mesh mesh) {
+    public void setMesh(GLMesh mesh) {
         if (mesh == null) {
             throw new IllegalArgumentException();
         }
@@ -256,9 +256,9 @@ public void setMesh(Mesh mesh) {
      *
      * @return the mesh to use for this geometry
      *
-     * @see #setMesh(com.jme3.scene.Mesh)
+     * @see #setMesh(GLMesh)
      */
-    public Mesh getMesh() {
+    public GLMesh getMesh() {
         return mesh;
     }
 
@@ -450,7 +450,7 @@ public Matrix4f getWorldMatrix() {
     /**
      * Sets the model bound to use for this geometry.
      * This alters the bound used on the mesh as well via
-     * {@link Mesh#setBound(com.jme3.bounding.BoundingVolume) } and
+     * {@link GLMesh#setBound(com.jme3.bounding.BoundingVolume) } and
      * forces the world bounding volume to be recomputed.
      *
      * @param modelBound The model bound to set
@@ -585,7 +585,7 @@ public void cloneFields(Cloner cloner, Object original) {
         this.cachedWorldMat = cloner.clone(cachedWorldMat);
 
         // See if we are doing a shallow clone or a deep mesh clone
-        boolean shallowClone = (cloner.getCloneFunction(Mesh.class) instanceof IdentityCloneFunction);
+        boolean shallowClone = (cloner.getCloneFunction(GLMesh.class) instanceof IdentityCloneFunction);
 
         // See if we clone the mesh using the special animation
         // semi-deep cloning
@@ -731,7 +731,7 @@ public void write(JmeExporter ex) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         InputCapsule ic = im.getCapsule(this);
-        mesh = (Mesh) ic.readSavable("mesh", null);
+        mesh = (GLMesh) ic.readSavable("mesh", null);
 
         material = null;
         String matName = ic.readString("materialName", null);
@@ -756,7 +756,7 @@ public void read(JmeImporter im) throws IOException {
 
         if (ic.getSavableVersion(Geometry.class) == 0) {
             // Fix shared mesh (if set)
-            Mesh sharedMesh = getUserData(UserData.JME_SHAREDMESH);
+            GLMesh sharedMesh = getUserData(UserData.JME_SHAREDMESH);
             if (sharedMesh != null) {
                 getMesh().extractVertexData(sharedMesh);
                 setUserData(UserData.JME_SHAREDMESH, null);

From 301b6bc4fd4c2e025738640aed542c41beac9c65 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Fri, 12 Sep 2025 15:22:07 -0400
Subject: [PATCH 60/80] Revert "temporarily renamed Mesh to GLMesh to not
 conflict with the new Mesh interface"

This reverts commit 7fee9d263e6d9ec6836e898209f561f9b9790ea3.
---
 .../main/java/com/jme3/scene/Geometry.java    | 26 +++++++++----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index 7e5e3d518d..008e987f1d 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -56,7 +56,7 @@
  * Geometry defines a leaf node of the scene graph. The leaf node
  * contains the geometric data for rendering objects. It manages all rendering
  * information such as a {@link Material} object to define how the surface
- * should be shaded and the {@link GLMesh} data to contain the actual geometry.
+ * should be shaded and the {@link Mesh} data to contain the actual geometry.
  *
  * @author Kirill Vainer
  */
@@ -126,7 +126,7 @@ public Geometry(String name) {
      * @param name The name of this geometry
      * @param mesh The mesh data for this geometry
      */
-    public Geometry(String name, GLMesh mesh) {
+    public Geometry(String name, Mesh mesh) {
         this(name);
 
         if (mesh == null) {
@@ -143,7 +143,7 @@ public Geometry(String name, GLMesh mesh) {
      * @param mesh The mesh data for this geometry
      * @param material The material for this geometry
      */
-    public Geometry(String name, GLMesh mesh, Material material) {
+    public Geometry(String name, Mesh mesh, Material material) {
         this(name, mesh);
         setMaterial(material);
     }
@@ -177,7 +177,7 @@ public void setIgnoreTransform(boolean ignoreTransform) {
      * Sets the LOD level to use when rendering the mesh of this geometry.
      * Level 0 indicates that the default index buffer should be used,
      * levels [1, LodLevels + 1] represent the levels set on the mesh
-     * with {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }.
+     * with {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }.
      *
      * @param lod The lod level to set
      */
@@ -212,7 +212,7 @@ public int getLodLevel() {
      *
      * @return this geometry's mesh vertex count.
      *
-     * @see GLMesh#getVertexCount()
+     * @see Mesh#getVertexCount()
      */
     @Override
     public int getVertexCount() {
@@ -224,7 +224,7 @@ public int getVertexCount() {
      *
      * @return this geometry's mesh triangle count.
      *
-     * @see GLMesh#getTriangleCount()
+     * @see Mesh#getTriangleCount()
      */
     @Override
     public int getTriangleCount() {
@@ -238,7 +238,7 @@ public int getTriangleCount() {
      *
      * @throws IllegalArgumentException If mesh is null
      */
-    public void setMesh(GLMesh mesh) {
+    public void setMesh(Mesh mesh) {
         if (mesh == null) {
             throw new IllegalArgumentException();
         }
@@ -256,9 +256,9 @@ public void setMesh(GLMesh mesh) {
      *
      * @return the mesh to use for this geometry
      *
-     * @see #setMesh(GLMesh)
+     * @see #setMesh(com.jme3.scene.Mesh)
      */
-    public GLMesh getMesh() {
+    public Mesh getMesh() {
         return mesh;
     }
 
@@ -450,7 +450,7 @@ public Matrix4f getWorldMatrix() {
     /**
      * Sets the model bound to use for this geometry.
      * This alters the bound used on the mesh as well via
-     * {@link GLMesh#setBound(com.jme3.bounding.BoundingVolume) } and
+     * {@link Mesh#setBound(com.jme3.bounding.BoundingVolume) } and
      * forces the world bounding volume to be recomputed.
      *
      * @param modelBound The model bound to set
@@ -585,7 +585,7 @@ public void cloneFields(Cloner cloner, Object original) {
         this.cachedWorldMat = cloner.clone(cachedWorldMat);
 
         // See if we are doing a shallow clone or a deep mesh clone
-        boolean shallowClone = (cloner.getCloneFunction(GLMesh.class) instanceof IdentityCloneFunction);
+        boolean shallowClone = (cloner.getCloneFunction(Mesh.class) instanceof IdentityCloneFunction);
 
         // See if we clone the mesh using the special animation
         // semi-deep cloning
@@ -731,7 +731,7 @@ public void write(JmeExporter ex) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         InputCapsule ic = im.getCapsule(this);
-        mesh = (GLMesh) ic.readSavable("mesh", null);
+        mesh = (Mesh) ic.readSavable("mesh", null);
 
         material = null;
         String matName = ic.readString("materialName", null);
@@ -756,7 +756,7 @@ public void read(JmeImporter im) throws IOException {
 
         if (ic.getSavableVersion(Geometry.class) == 0) {
             // Fix shared mesh (if set)
-            GLMesh sharedMesh = getUserData(UserData.JME_SHAREDMESH);
+            Mesh sharedMesh = getUserData(UserData.JME_SHAREDMESH);
             if (sharedMesh != null) {
                 getMesh().extractVertexData(sharedMesh);
                 setUserData(UserData.JME_SHAREDMESH, null);

From e28d4dfa4563ff601146585b84759dd21cdfde92 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Fri, 12 Sep 2025 15:22:14 -0400
Subject: [PATCH 61/80] Revert "Revert "temporarily renamed Mesh to GLMesh to
 not conflict with the new Mesh interface""

This reverts commit 301b6bc4fd4c2e025738640aed542c41beac9c65.
---
 .../main/java/com/jme3/scene/Geometry.java    | 26 +++++++++----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index 008e987f1d..7e5e3d518d 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -56,7 +56,7 @@
  * Geometry defines a leaf node of the scene graph. The leaf node
  * contains the geometric data for rendering objects. It manages all rendering
  * information such as a {@link Material} object to define how the surface
- * should be shaded and the {@link Mesh} data to contain the actual geometry.
+ * should be shaded and the {@link GLMesh} data to contain the actual geometry.
  *
  * @author Kirill Vainer
  */
@@ -126,7 +126,7 @@ public Geometry(String name) {
      * @param name The name of this geometry
      * @param mesh The mesh data for this geometry
      */
-    public Geometry(String name, Mesh mesh) {
+    public Geometry(String name, GLMesh mesh) {
         this(name);
 
         if (mesh == null) {
@@ -143,7 +143,7 @@ public Geometry(String name, Mesh mesh) {
      * @param mesh The mesh data for this geometry
      * @param material The material for this geometry
      */
-    public Geometry(String name, Mesh mesh, Material material) {
+    public Geometry(String name, GLMesh mesh, Material material) {
         this(name, mesh);
         setMaterial(material);
     }
@@ -177,7 +177,7 @@ public void setIgnoreTransform(boolean ignoreTransform) {
      * Sets the LOD level to use when rendering the mesh of this geometry.
      * Level 0 indicates that the default index buffer should be used,
      * levels [1, LodLevels + 1] represent the levels set on the mesh
-     * with {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }.
+     * with {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }.
      *
      * @param lod The lod level to set
      */
@@ -212,7 +212,7 @@ public int getLodLevel() {
      *
      * @return this geometry's mesh vertex count.
      *
-     * @see Mesh#getVertexCount()
+     * @see GLMesh#getVertexCount()
      */
     @Override
     public int getVertexCount() {
@@ -224,7 +224,7 @@ public int getVertexCount() {
      *
      * @return this geometry's mesh triangle count.
      *
-     * @see Mesh#getTriangleCount()
+     * @see GLMesh#getTriangleCount()
      */
     @Override
     public int getTriangleCount() {
@@ -238,7 +238,7 @@ public int getTriangleCount() {
      *
      * @throws IllegalArgumentException If mesh is null
      */
-    public void setMesh(Mesh mesh) {
+    public void setMesh(GLMesh mesh) {
         if (mesh == null) {
             throw new IllegalArgumentException();
         }
@@ -256,9 +256,9 @@ public void setMesh(Mesh mesh) {
      *
      * @return the mesh to use for this geometry
      *
-     * @see #setMesh(com.jme3.scene.Mesh)
+     * @see #setMesh(GLMesh)
      */
-    public Mesh getMesh() {
+    public GLMesh getMesh() {
         return mesh;
     }
 
@@ -450,7 +450,7 @@ public Matrix4f getWorldMatrix() {
     /**
      * Sets the model bound to use for this geometry.
      * This alters the bound used on the mesh as well via
-     * {@link Mesh#setBound(com.jme3.bounding.BoundingVolume) } and
+     * {@link GLMesh#setBound(com.jme3.bounding.BoundingVolume) } and
      * forces the world bounding volume to be recomputed.
      *
      * @param modelBound The model bound to set
@@ -585,7 +585,7 @@ public void cloneFields(Cloner cloner, Object original) {
         this.cachedWorldMat = cloner.clone(cachedWorldMat);
 
         // See if we are doing a shallow clone or a deep mesh clone
-        boolean shallowClone = (cloner.getCloneFunction(Mesh.class) instanceof IdentityCloneFunction);
+        boolean shallowClone = (cloner.getCloneFunction(GLMesh.class) instanceof IdentityCloneFunction);
 
         // See if we clone the mesh using the special animation
         // semi-deep cloning
@@ -731,7 +731,7 @@ public void write(JmeExporter ex) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         InputCapsule ic = im.getCapsule(this);
-        mesh = (Mesh) ic.readSavable("mesh", null);
+        mesh = (GLMesh) ic.readSavable("mesh", null);
 
         material = null;
         String matName = ic.readString("materialName", null);
@@ -756,7 +756,7 @@ public void read(JmeImporter im) throws IOException {
 
         if (ic.getSavableVersion(Geometry.class) == 0) {
             // Fix shared mesh (if set)
-            Mesh sharedMesh = getUserData(UserData.JME_SHAREDMESH);
+            GLMesh sharedMesh = getUserData(UserData.JME_SHAREDMESH);
             if (sharedMesh != null) {
                 getMesh().extractVertexData(sharedMesh);
                 setUserData(UserData.JME_SHAREDMESH, null);

From d463d9c28662407c8abccaddb1a8bb1246a047c5 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Fri, 12 Sep 2025 15:22:28 -0400
Subject: [PATCH 62/80] Revert "temporarily renamed Mesh to GLMesh to not
 conflict with the new Mesh interface"

This reverts commit 29c1818510f57f4ef1187ae263da406672c04d0c.
---
 .../main/java/com/jme3/scene/Geometry.java    | 26 +++++++++----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index 7e5e3d518d..008e987f1d 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -56,7 +56,7 @@
  * Geometry defines a leaf node of the scene graph. The leaf node
  * contains the geometric data for rendering objects. It manages all rendering
  * information such as a {@link Material} object to define how the surface
- * should be shaded and the {@link GLMesh} data to contain the actual geometry.
+ * should be shaded and the {@link Mesh} data to contain the actual geometry.
  *
  * @author Kirill Vainer
  */
@@ -126,7 +126,7 @@ public Geometry(String name) {
      * @param name The name of this geometry
      * @param mesh The mesh data for this geometry
      */
-    public Geometry(String name, GLMesh mesh) {
+    public Geometry(String name, Mesh mesh) {
         this(name);
 
         if (mesh == null) {
@@ -143,7 +143,7 @@ public Geometry(String name, GLMesh mesh) {
      * @param mesh The mesh data for this geometry
      * @param material The material for this geometry
      */
-    public Geometry(String name, GLMesh mesh, Material material) {
+    public Geometry(String name, Mesh mesh, Material material) {
         this(name, mesh);
         setMaterial(material);
     }
@@ -177,7 +177,7 @@ public void setIgnoreTransform(boolean ignoreTransform) {
      * Sets the LOD level to use when rendering the mesh of this geometry.
      * Level 0 indicates that the default index buffer should be used,
      * levels [1, LodLevels + 1] represent the levels set on the mesh
-     * with {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }.
+     * with {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }.
      *
      * @param lod The lod level to set
      */
@@ -212,7 +212,7 @@ public int getLodLevel() {
      *
      * @return this geometry's mesh vertex count.
      *
-     * @see GLMesh#getVertexCount()
+     * @see Mesh#getVertexCount()
      */
     @Override
     public int getVertexCount() {
@@ -224,7 +224,7 @@ public int getVertexCount() {
      *
      * @return this geometry's mesh triangle count.
      *
-     * @see GLMesh#getTriangleCount()
+     * @see Mesh#getTriangleCount()
      */
     @Override
     public int getTriangleCount() {
@@ -238,7 +238,7 @@ public int getTriangleCount() {
      *
      * @throws IllegalArgumentException If mesh is null
      */
-    public void setMesh(GLMesh mesh) {
+    public void setMesh(Mesh mesh) {
         if (mesh == null) {
             throw new IllegalArgumentException();
         }
@@ -256,9 +256,9 @@ public void setMesh(GLMesh mesh) {
      *
      * @return the mesh to use for this geometry
      *
-     * @see #setMesh(GLMesh)
+     * @see #setMesh(com.jme3.scene.Mesh)
      */
-    public GLMesh getMesh() {
+    public Mesh getMesh() {
         return mesh;
     }
 
@@ -450,7 +450,7 @@ public Matrix4f getWorldMatrix() {
     /**
      * Sets the model bound to use for this geometry.
      * This alters the bound used on the mesh as well via
-     * {@link GLMesh#setBound(com.jme3.bounding.BoundingVolume) } and
+     * {@link Mesh#setBound(com.jme3.bounding.BoundingVolume) } and
      * forces the world bounding volume to be recomputed.
      *
      * @param modelBound The model bound to set
@@ -585,7 +585,7 @@ public void cloneFields(Cloner cloner, Object original) {
         this.cachedWorldMat = cloner.clone(cachedWorldMat);
 
         // See if we are doing a shallow clone or a deep mesh clone
-        boolean shallowClone = (cloner.getCloneFunction(GLMesh.class) instanceof IdentityCloneFunction);
+        boolean shallowClone = (cloner.getCloneFunction(Mesh.class) instanceof IdentityCloneFunction);
 
         // See if we clone the mesh using the special animation
         // semi-deep cloning
@@ -731,7 +731,7 @@ public void write(JmeExporter ex) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         InputCapsule ic = im.getCapsule(this);
-        mesh = (GLMesh) ic.readSavable("mesh", null);
+        mesh = (Mesh) ic.readSavable("mesh", null);
 
         material = null;
         String matName = ic.readString("materialName", null);
@@ -756,7 +756,7 @@ public void read(JmeImporter im) throws IOException {
 
         if (ic.getSavableVersion(Geometry.class) == 0) {
             // Fix shared mesh (if set)
-            GLMesh sharedMesh = getUserData(UserData.JME_SHAREDMESH);
+            Mesh sharedMesh = getUserData(UserData.JME_SHAREDMESH);
             if (sharedMesh != null) {
                 getMesh().extractVertexData(sharedMesh);
                 setUserData(UserData.JME_SHAREDMESH, null);

From e3ee8bea85a09d8a7b652bcf589083b34970784c Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Fri, 12 Sep 2025 15:22:53 -0400
Subject: [PATCH 63/80] Revert "Revert "temporarily renamed Mesh to GLMesh to
 not conflict with the new Mesh interface""

This reverts commit 1718bbf9393764d583d7e54ee09f71312b78d05e.
---
 .../src/main/java/com/jme3/anim/Joint.java    |  2 +-
 .../main/java/com/jme3/anim/MorphControl.java | 10 ++---
 .../java/com/jme3/anim/SkinningControl.java   | 22 +++++-----
 .../main/java/com/jme3/animation/Bone.java    |  2 +-
 .../com/jme3/animation/SkeletonControl.java   | 22 +++++-----
 .../main/java/com/jme3/app/BasicProfiler.java | 10 ++---
 .../java/com/jme3/app/BasicProfilerState.java |  6 +--
 .../java/com/jme3/bounding/BoundingBox.java   |  4 +-
 .../com/jme3/collision/CollisionResult.java   |  4 +-
 .../java/com/jme3/collision/bih/BIHTree.java  | 12 ++---
 .../java/com/jme3/effect/ParticleMesh.java    |  4 +-
 .../shapes/EmitterMeshConvexHullShape.java    |  4 +-
 .../effect/shapes/EmitterMeshFaceShape.java   |  8 ++--
 .../effect/shapes/EmitterMeshVertexShape.java |  8 ++--
 .../environment/util/BoundingSphereDebug.java |  4 +-
 .../java/com/jme3/font/BitmapTextPage.java    | 10 ++---
 .../java/com/jme3/material/RenderState.java   |  6 +--
 .../logic/DefaultTechniqueDefLogic.java       |  4 +-
 .../java/com/jme3/renderer/RenderContext.java |  7 +--
 .../java/com/jme3/renderer/RenderManager.java |  4 +-
 .../main/java/com/jme3/renderer/Renderer.java |  6 +--
 .../java/com/jme3/renderer/Statistics.java    |  6 +--
 .../com/jme3/renderer/opengl/GLRenderer.java  | 16 +++----
 .../main/java/com/jme3/scene/BatchNode.java   | 20 ++++-----
 .../com/jme3/scene/{Mesh.java => GLMesh.java} | 28 ++++++------
 .../main/java/com/jme3/scene/Geometry.java    | 28 ++++++------
 .../com/jme3/scene/GeometryGroupNode.java     |  2 +-
 .../src/main/java/com/jme3/scene/Spatial.java |  6 +--
 .../java/com/jme3/scene/VertexBuffer.java     |  2 +-
 .../com/jme3/scene/control/LodControl.java    |  4 +-
 .../main/java/com/jme3/scene/debug/Arrow.java |  4 +-
 .../main/java/com/jme3/scene/debug/Grid.java  |  4 +-
 .../jme3/scene/debug/SkeletonDebugger.java    |  4 +-
 .../scene/debug/SkeletonInterBoneWire.java    |  4 +-
 .../com/jme3/scene/debug/SkeletonPoints.java  |  4 +-
 .../com/jme3/scene/debug/SkeletonWire.java    |  4 +-
 .../java/com/jme3/scene/debug/WireBox.java    |  4 +-
 .../com/jme3/scene/debug/WireFrustum.java     |  6 +--
 .../java/com/jme3/scene/debug/WireSphere.java |  4 +-
 .../debug/custom/ArmatureInterJointsWire.java |  4 +-
 .../jme3/scene/debug/custom/ArmatureNode.java |  4 +-
 .../jme3/scene/debug/custom/JointShape.java   |  4 +-
 .../jme3/scene/instancing/InstancedNode.java  |  4 +-
 .../java/com/jme3/scene/mesh/IndexBuffer.java |  3 +-
 .../jme3/scene/mesh/VirtualIndexBuffer.java   |  2 +-
 .../jme3/scene/mesh/WrappedIndexBuffer.java   |  8 ++--
 .../com/jme3/scene/shape/AbstractBox.java     |  4 +-
 .../java/com/jme3/scene/shape/CenterQuad.java |  4 +-
 .../main/java/com/jme3/scene/shape/Curve.java | 12 ++---
 .../java/com/jme3/scene/shape/Cylinder.java   |  4 +-
 .../main/java/com/jme3/scene/shape/Dome.java  |  4 +-
 .../main/java/com/jme3/scene/shape/Line.java  |  4 +-
 .../java/com/jme3/scene/shape/PQTorus.java    |  4 +-
 .../main/java/com/jme3/scene/shape/Quad.java  |  4 +-
 .../com/jme3/scene/shape/RectangleMesh.java   |  4 +-
 .../java/com/jme3/scene/shape/Sphere.java     |  4 +-
 .../java/com/jme3/scene/shape/Surface.java    |  4 +-
 .../main/java/com/jme3/scene/shape/Torus.java |  4 +-
 .../java/com/jme3/system/NullRenderer.java    |  4 +-
 .../jme3/util/TangentBinormalGenerator.java   | 44 +++++++++----------
 .../main/java/com/jme3/util/TangentUtils.java | 16 +++----
 .../jme3/util/mikktspace/MikkTSpaceImpl.java  |  6 +--
 .../MikktspaceTangentGenerator.java           |  8 ++--
 .../natives}/AbstractNative.java              |  4 +-
 .../java/com/jme3/vulkan/VulkanInstance.java  | 11 +++++
 .../vulkan/buffers/BasicVulkanBuffer.java     |  2 +-
 .../vulkan/descriptors/DescriptorSet.java     |  2 +-
 .../jme3/vulkan/devices/LogicalDevice.java    |  2 +-
 .../jme3/vulkan/frames/PerFrameResource.java  |  6 +++
 .../jme3/vulkan/frames/SingleResource.java    | 29 ++++++++++++
 .../jme3/vulkan/frames/VersionedResource.java |  2 +-
 .../java/com/jme3/vulkan/images/GpuImage.java |  2 +-
 .../com/jme3/vulkan/images/ImageView.java     |  2 +-
 .../java/com/jme3/vulkan/images/Sampler.java  |  2 +-
 .../com/jme3/vulkan/mesh/AdaptiveMesh.java    | 20 +++++----
 .../com/jme3/vulkan/mesh/MyCustomMesh.java    | 16 ++++---
 .../java/com/jme3/vulkan/pass/RenderPass.java |  2 +-
 .../vulkan/pipelines/GraphicsPipeline.java    |  2 +-
 .../com/jme3/vulkan/pipelines/Pipeline.java   |  2 +-
 .../com/jme3/vulkan/surface/Swapchain.java    |  1 +
 .../java/com/jme3/vulkan/sync/Semaphore.java  |  2 +-
 .../com/jme3/scene/plugins/OBJLoader.java     |  8 ++--
 .../collision/CollideIgnoreTransformTest.java |  4 +-
 .../java/com/jme3/light/LightSortTest.java    |  6 +--
 .../jme3/renderer/OpaqueComparatorTest.java   |  4 +-
 .../com/jme3/scene/PhantomTrianglesTest.java  |  6 +--
 .../java/com/jme3/scene/mesh/MeshTest.java    |  4 +-
 .../scene/mesh/VirtualIndexBufferTest.java    |  2 +-
 .../java/com/jme3/tools/LodGeneratorTest.java | 10 ++---
 .../java/com/jme3/util/TestIssue1909.java     |  4 +-
 .../java/com/jme3/util/TestIssue1919.java     | 30 ++++++-------
 .../optimize/GeometryBatchFactory.java        | 16 +++----
 .../java/jme3tools/optimize/LodGenerator.java | 12 ++---
 .../java/jme3tools/optimize/TextureAtlas.java | 12 ++---
 .../jme3test/animation/TestIssue2076.java     |  6 +--
 .../jme3test/app/TestCustomAppSettings.java   |  6 +--
 .../main/java/jme3test/audio/TestAmbient.java |  4 +-
 .../jme3test/audio/TestAudioDirectional.java  |  4 +-
 .../main/java/jme3test/audio/TestDoppler.java |  4 +-
 .../src/main/java/jme3test/audio/TestOgg.java |  4 +-
 .../main/java/jme3test/audio/TestReverb.java  |  4 +-
 .../jme3test/bullet/PhysicsTestHelper.java    |  6 +--
 .../java/jme3test/bullet/TestIssue1120.java   |  4 +-
 .../bullet/shape/TestGimpactShape.java        |  6 +--
 .../jme3test/collision/TestRayCasting.java    |  4 +-
 .../collision/TestTriangleCollision.java      |  4 +-
 .../java/jme3test/games/WorldOfInception.java |  6 +--
 .../java/jme3test/light/TestObbVsBounds.java  |  2 +-
 .../java/jme3test/light/TestTangentGen.java   | 12 ++---
 .../light/pbr/TestIssue1903Compat.java        |  4 +-
 .../jme3test/material/TestGeometryShader.java |  6 +--
 .../material/TestTessellationShader.java      |  4 +-
 .../java/jme3test/math/TestRandomPoints.java  |  4 +-
 .../jme3test/model/anim/TestArmature.java     |  2 +-
 .../model/anim/TestBaseAnimSerialization.java |  2 +-
 .../jme3test/model/shape/TestCustomMesh.java  |  8 ++--
 .../jme3test/model/shape/TestDebugShapes.java |  4 +-
 .../renderer/TestBackgroundImage.java         |  4 +-
 .../java/jme3test/renderer/TestIssue37.java   |  4 +-
 .../java/jme3test/renderer/TestLineWidth.java |  4 +-
 .../scene/instancing/TestInstanceNode.java    | 10 ++---
 ...ancedNodeAttachDetachWithShadowFilter.java |  6 +--
 .../java/jme3test/stress/TestLeakingGL.java   |  4 +-
 .../jme3test/stress/TestLodGeneration.java    |  4 +-
 .../jme3test/texture/TestSkyRotation.java     |  4 +-
 .../jme3test/texture/TestTextureArray.java    |  4 +-
 .../texture/TestTextureArrayCompressed.java   |  4 +-
 .../jme3test/vulkan/VulkanHelperTest.java     | 21 ++++++---
 .../com/jme3/bullet/animation/DacLinks.java   |  8 ++--
 .../com/jme3/bullet/animation/RagUtils.java   | 42 +++++++++---------
 .../shapes/GImpactCollisionShape.java         |  8 ++--
 .../shapes/HeightfieldCollisionShape.java     |  4 +-
 .../collision/shapes/HullCollisionShape.java  |  8 ++--
 .../collision/shapes/MeshCollisionShape.java  | 10 ++---
 .../control/KinematicRagdollControl.java      |  4 +-
 .../jme3/bullet/control/RigidBodyControl.java |  4 +-
 .../bullet/control/ragdoll/RagdollUtils.java  | 18 ++++----
 .../bullet/util/CollisionShapeFactory.java    |  6 +--
 .../java/com/jme3/bullet/util/Converter.java  | 10 ++---
 .../jme3/bullet/util/DebugShapeFactory.java   | 10 ++---
 .../test/PreventBulletIssueRegressions.java   |  4 +-
 .../jme3/niftygui/JmeBatchRenderBackend.java  |  4 +-
 .../jme3/scene/plugins/fbx/mesh/FbxMesh.java  | 10 ++---
 .../jme3/scene/plugins/fbx/node/FbxNode.java  |  8 ++--
 .../scene/plugins/fbx/objects/FbxMesh.java    |  8 ++--
 .../scene/plugins/fbx/objects/FbxSkin.java    |  8 ++--
 .../jme3/scene/plugins/gltf/GltfLoader.java   |  2 +-
 .../jme3/scene/plugins/gltf/GltfUtils.java    | 26 +++++------
 .../gltf/TextureTransformExtensionLoader.java |  8 ++--
 .../java/com/jme3/scene/plugins/IrUtils.java  |  8 ++--
 .../jme3/scene/plugins/ogre/MeshLoader.java   | 18 ++++----
 .../animation/TestIssue2076.java              |  6 +--
 .../main/java/com/jme3/terrain/GeoMap.java    |  6 +--
 .../com/jme3/terrain/geomipmap/LODGeomap.java | 10 ++---
 .../jme3/terrain/geomipmap/TerrainPatch.java  | 14 +++---
 .../lodcalc/util/EntropyComputeUtil.java      |  4 +-
 .../input/vr/openvr/OpenVRViewManager.java    |  6 +--
 .../main/java/com/jme3/scene/CenterQuad.java  |  4 +-
 158 files changed, 614 insertions(+), 550 deletions(-)
 rename jme3-core/src/main/java/com/jme3/scene/{Mesh.java => GLMesh.java} (98%)
 rename jme3-core/src/main/java/com/jme3/{vulkan => util/natives}/AbstractNative.java (86%)

diff --git a/jme3-core/src/main/java/com/jme3/anim/Joint.java b/jme3-core/src/main/java/com/jme3/anim/Joint.java
index 8f2275b202..ad01d0b4bf 100644
--- a/jme3-core/src/main/java/com/jme3/anim/Joint.java
+++ b/jme3-core/src/main/java/com/jme3/anim/Joint.java
@@ -366,7 +366,7 @@ protected Node getAttachmentsNode(int jointIndex, SafeArrayList target
          * Search for a geometry animated by this particular bone.
          */
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimatedByJoint(jointIndex)) {
                 targetGeometry = geometry;
                 break;
diff --git a/jme3-core/src/main/java/com/jme3/anim/MorphControl.java b/jme3-core/src/main/java/com/jme3/anim/MorphControl.java
index 4c2f0a6c75..4914b691d3 100644
--- a/jme3-core/src/main/java/com/jme3/anim/MorphControl.java
+++ b/jme3-core/src/main/java/com/jme3/anim/MorphControl.java
@@ -107,7 +107,7 @@ protected void controlUpdate(float tpf) {
     @Override
     protected void controlRender(RenderManager rm, ViewPort vp) {
         for (Geometry geom : targets.getArray()) {
-            Mesh mesh = geom.getMesh();
+            GLMesh mesh = geom.getMesh();
             if (!geom.isDirtyMorph()) {
                 continue;
             }
@@ -236,7 +236,7 @@ private int getMaxGPUTargets(RenderManager rm, Geometry geom, Material mat, int
         return maxGPUTargets;
     }
 
-    private int bindMorphTargetBuffer(Mesh mesh, int targetNumBuffers, int boundBufferIdx, MorphTarget t) {
+    private int bindMorphTargetBuffer(GLMesh mesh, int targetNumBuffers, int boundBufferIdx, MorphTarget t) {
         int start = VertexBuffer.Type.MorphTarget0.ordinal();
         if (targetNumBuffers >= 1) {
             activateBuffer(mesh, boundBufferIdx, start, t.getBuffer(VertexBuffer.Type.Position));
@@ -305,7 +305,7 @@ private void mergeTargetBuffer(float[] array, float weight, FloatBuffer src, boo
         }
     }
 
-    private void activateBuffer(Mesh mesh, int idx, int start, FloatBuffer b) {
+    private void activateBuffer(GLMesh mesh, int idx, int start, FloatBuffer b) {
         VertexBuffer.Type t = bufferTypes[start + idx];
         VertexBuffer vb = mesh.getBuffer(t);
         // only set the buffer if it's different
@@ -364,7 +364,7 @@ private int getTargetNumBuffers(MorphTarget morphTarget) {
      * @param renderer
      * @return
      */
-    private int getRemainingBuffers(Mesh mesh, Renderer renderer) {
+    private int getRemainingBuffers(GLMesh mesh, Renderer renderer) {
         int nbUsedBuffers = 0;
         for (VertexBuffer vb : mesh.getBufferList().getArray()) {
             boolean isMorphBuffer = vb.getBufferType().ordinal() >= VertexBuffer.Type.MorphTarget0.ordinal() && vb.getBufferType().ordinal() <= VertexBuffer.Type.MorphTarget9.ordinal();
@@ -471,7 +471,7 @@ public void visit(Geometry geom) {
             if (p == null) {
                 return;
             }
-            Mesh mesh = geom.getMesh();
+            GLMesh mesh = geom.getMesh();
             if (mesh != null && mesh.hasMorphTargets()) {
                 targets.add(geom);
                 // If the mesh is in a subgraph of a node with a SkinningControl it might have hardware skinning activated through mat param override even if it's not skinned.
diff --git a/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java b/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
index 7cc5f3c58b..10b2d52b64 100644
--- a/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
+++ b/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
@@ -143,7 +143,7 @@ private void switchToHardware() {
         numberOfJointsParam.setValue(numBones);
 
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(false);
             }
@@ -155,7 +155,7 @@ private void switchToSoftware() {
         jointMatricesParam.setEnabled(false);
 
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(true);
             }
@@ -215,7 +215,7 @@ public boolean isHardwareSkinningUsed() {
      * to the lists of animation targets.
      */
     private void findTargets(Geometry geometry) {
-        Mesh mesh = geometry.getMesh();
+        GLMesh mesh = geometry.getMesh();
         if (mesh != null && mesh.isAnimated()) {
             targets.add(geometry);
         }
@@ -257,7 +257,7 @@ private void controlRenderSoftware() {
         offsetMatrices = armature.computeSkinningMatrices();
 
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             // NOTE: This assumes code higher up has
             // already ensured this mesh is animated.
             // Otherwise a crash will happen in skin update.
@@ -317,7 +317,7 @@ protected void controlUpdate(float tpf) {
     //only do this for software updates
     void resetToBind() {
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 Buffer bwBuff = mesh.getBuffer(Type.BoneWeight).getData();
                 Buffer biBuff = mesh.getBuffer(Type.BoneIndex).getData();
@@ -424,11 +424,11 @@ public Armature getArmature() {
      *
      * @return a new array
      */
-    public Mesh[] getTargets() {
-        Mesh[] result = new Mesh[targets.size()];
+    public GLMesh[] getTargets() {
+        GLMesh[] result = new GLMesh[targets.size()];
         int i = 0;
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             result[i] = mesh;
             i++;
         }
@@ -442,7 +442,7 @@ public Mesh[] getTargets() {
      * @param mesh           then mesh
      * @param offsetMatrices the transformation matrices to apply
      */
-    private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) {
+    private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) {
 
         VertexBuffer tb = mesh.getBuffer(Type.Tangent);
         if (tb == null) {
@@ -462,7 +462,7 @@ private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) {
      * @param mesh           the mesh
      * @param offsetMatrices the offset matrices to apply
      */
-    private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) {
+    private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
         if (maxWeightsPerVert <= 0) {
             throw new IllegalStateException("Max weights per vert is incorrectly set!");
@@ -569,7 +569,7 @@ private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) {
      * @param offsetMatrices the offsetMatrices to apply
      * @param tb             the tangent vertexBuffer
      */
-    private void applySkinningTangents(Mesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
+    private void applySkinningTangents(GLMesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
 
         if (maxWeightsPerVert <= 0) {
diff --git a/jme3-core/src/main/java/com/jme3/animation/Bone.java b/jme3-core/src/main/java/com/jme3/animation/Bone.java
index 2d4211b90a..dddaea8ad6 100644
--- a/jme3-core/src/main/java/com/jme3/animation/Bone.java
+++ b/jme3-core/src/main/java/com/jme3/animation/Bone.java
@@ -722,7 +722,7 @@ Node getAttachmentsNode(int boneIndex, SafeArrayList targets) {
          * Search for a geometry animated by this particular bone.
          */
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimatedByBone(boneIndex)) {
                 targetGeometry = geometry;
                 break;
diff --git a/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java b/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
index 2428919c5e..a2e24714c6 100644
--- a/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
+++ b/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
@@ -124,7 +124,7 @@ private void switchToHardware() {
         numberOfBonesParam.setValue(numBones);
 
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(false);
             }
@@ -136,7 +136,7 @@ private void switchToSoftware() {
         boneMatricesParam.setEnabled(false);
 
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(true);
             }
@@ -211,7 +211,7 @@ public SkeletonControl(Skeleton skeleton) {
      * to the lists of animation targets.
      */
     private void findTargets(Geometry geometry) {
-        Mesh mesh = geometry.getMesh();
+        GLMesh mesh = geometry.getMesh();
         if (mesh != null && mesh.isAnimated()) {
             targets.add(geometry);
         }
@@ -252,7 +252,7 @@ private void controlRenderSoftware() {
         offsetMatrices = skeleton.computeSkinningMatrices();
 
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             // NOTE: This assumes code higher up has
             // already ensured this mesh is animated.
             // Otherwise a crash will happen in skin update.
@@ -311,7 +311,7 @@ protected void controlUpdate(float tpf) {
     //only do this for software updates
     void resetToBind() {
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 Buffer bwBuff = mesh.getBuffer(Type.BoneWeight).getData();
                 Buffer biBuff = mesh.getBuffer(Type.BoneIndex).getData();
@@ -418,11 +418,11 @@ public Skeleton getSkeleton() {
      *
      * @return a new array
      */
-    public Mesh[] getTargets() {
-        Mesh[] result = new Mesh[targets.size()];
+    public GLMesh[] getTargets() {
+        GLMesh[] result = new GLMesh[targets.size()];
         int i = 0;
         for (Geometry geometry : targets) {
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             result[i] = mesh;
             i++;
         }
@@ -436,7 +436,7 @@ public Mesh[] getTargets() {
      * @param mesh then mesh
      * @param offsetMatrices the transformation matrices to apply
      */
-    private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) {
+    private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) {
 
         VertexBuffer tb = mesh.getBuffer(Type.Tangent);
         if (tb == null) {
@@ -454,7 +454,7 @@ private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) {
      * @param mesh the mesh
      * @param offsetMatrices the offset matrices to apply
      */
-    private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) {
+    private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
         if (maxWeightsPerVert <= 0) {
             throw new IllegalStateException("Max weights per vert is incorrectly set!");
@@ -561,7 +561,7 @@ private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) {
      * @param offsetMatrices the offset matrices to apply
      * @param tb the tangent vertexBuffer
      */
-    private void applySkinningTangents(Mesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
+    private void applySkinningTangents(GLMesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
 
         if (maxWeightsPerVert <= 0) {
diff --git a/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java b/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java
index 1c95730bbc..974d6df77f 100644
--- a/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java
+++ b/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java
@@ -39,7 +39,7 @@
 import com.jme3.profile.VpStep;
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.nio.FloatBuffer;
@@ -73,7 +73,7 @@ public class BasicProfiler implements AppProfiler {
     private long updateInterval = 1000000L; // once a millisecond
     private long lastUpdate = 0;
 
-    private Mesh mesh;
+    private GLMesh mesh;
 
     public BasicProfiler() {
         this(1280);
@@ -128,14 +128,14 @@ public long getUpdateInterval() {
      *
      * @return the pre-existing Mesh
      */
-    public Mesh getMesh() {
+    public GLMesh getMesh() {
         return mesh;
     }
 
     protected final void createMesh() {
         if (mesh == null) {
-            mesh = new Mesh();
-            mesh.setMode(Mesh.Mode.Lines);
+            mesh = new GLMesh();
+            mesh.setMode(GLMesh.Mode.Lines);
         }
 
         mesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(size * 4 * 3));
diff --git a/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java b/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java
index 68ee1483fb..8dfb70d835 100644
--- a/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java
+++ b/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java
@@ -40,7 +40,7 @@
 import com.jme3.material.Material;
 import com.jme3.material.RenderState.BlendMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer.Type;
 
@@ -116,7 +116,7 @@ public int getFrameCount() {
     }
 
     protected void refreshBackground() {
-        Mesh mesh = background.getMesh();
+        GLMesh mesh = background.getMesh();
 
         int size = profiler.getFrameCount();
         float frameTime = 1000f / 60;
@@ -180,7 +180,7 @@ protected void initialize(Application app) {
         graph.setLocalTranslation(0, 300, 0);
         graph.setLocalScale(1, scale, 1);
 
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         background = new Geometry("profiler.background", mesh);
         mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setBoolean("VertexColor", true);
diff --git a/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java b/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
index 6b0e023b34..e405b28650 100644
--- a/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
+++ b/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.*;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.util.TempVars;
 import java.io.IOException;
@@ -172,7 +172,7 @@ public void computeFromTris(Triangle[] tris, int start, int end) {
         vars.release();
     }
 
-    public void computeFromTris(int[] indices, Mesh mesh, int start, int end) {
+    public void computeFromTris(int[] indices, GLMesh mesh, int start, int end) {
         if (end - start <= 0) {
             return;
         }
diff --git a/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java b/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java
index 95739f5a1c..a5fd5ff42d 100644
--- a/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java
+++ b/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java
@@ -34,7 +34,7 @@
 import com.jme3.math.Triangle;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 
 /**
  * A CollisionResult represents a single collision instance
@@ -90,7 +90,7 @@ public Triangle getTriangle(Triangle store) {
         if (store == null)
             store = new Triangle();
 
-        Mesh m = geometry.getMesh();
+        GLMesh m = geometry.getMesh();
         m.getTriangle(triangleIndex, store);
         store.calculateCenter();
         store.calculateNormal();
diff --git a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
index fca434f750..749e90bfb0 100644
--- a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
+++ b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
@@ -46,8 +46,8 @@
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.CollisionData;
-import com.jme3.scene.Mesh;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
@@ -62,7 +62,7 @@ public class BIHTree implements CollisionData {
 
     public static final int MAX_TREE_DEPTH = 100;
     public static final int MAX_TRIS_PER_NODE = 21;
-    private Mesh mesh;
+    private GLMesh mesh;
     private BIHNode root;
     private int maxTrisPerNode;
     private int numTris;
@@ -98,7 +98,7 @@ private void initTriList(FloatBuffer vb, IndexBuffer ib) {
         }
     }
 
-    public BIHTree(Mesh mesh, int maxTrisPerNode) {
+    public BIHTree(GLMesh mesh, int maxTrisPerNode) {
         this.mesh = mesh;
         this.maxTrisPerNode = maxTrisPerNode;
 
@@ -128,7 +128,7 @@ public BIHTree(Mesh mesh, int maxTrisPerNode) {
         initTriList(vb, ib);
     }
 
-    public BIHTree(Mesh mesh) {
+    public BIHTree(GLMesh mesh) {
         this(mesh, MAX_TRIS_PER_NODE);
     }
 
@@ -484,7 +484,7 @@ public void write(JmeExporter ex) throws IOException {
     @Override
     public void read(JmeImporter im) throws IOException {
         InputCapsule ic = im.getCapsule(this);
-        mesh = (Mesh) ic.readSavable("mesh", null);
+        mesh = (GLMesh) ic.readSavable("mesh", null);
         root = (BIHNode) ic.readSavable("root", null);
         maxTrisPerNode = ic.readInt("tris_per_node", 0);
         pointData = ic.readFloatArray("points", null);
diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java
index b4333ae9f8..1c9f43b9a8 100644
--- a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java
+++ b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Matrix3f;
 import com.jme3.renderer.Camera;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 
 /**
  * The ParticleMesh is the underlying visual implementation of a 
@@ -41,7 +41,7 @@
  * 
  * @author Kirill Vainer
  */
-public abstract class ParticleMesh extends Mesh {
+public abstract class ParticleMesh extends GLMesh {
 
     /**
      * Type of particle mesh
diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java
index e7ccd18f33..ea42e95ca4 100644
--- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java
+++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import java.util.List;
 
 /**
@@ -55,7 +55,7 @@ public EmitterMeshConvexHullShape() {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public EmitterMeshConvexHullShape(List meshes) {
+    public EmitterMeshConvexHullShape(List meshes) {
         super(meshes);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java
index cda0c911eb..8ee9d60e2e 100644
--- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java
+++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.util.ArrayList;
@@ -56,15 +56,15 @@ public EmitterMeshFaceShape() {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public EmitterMeshFaceShape(List meshes) {
+    public EmitterMeshFaceShape(List meshes) {
         super(meshes);
     }
 
     @Override
-    public void setMeshes(List meshes) {
+    public void setMeshes(List meshes) {
         this.vertices = new ArrayList>(meshes.size());
         this.normals = new ArrayList>(meshes.size());
-        for (Mesh mesh : meshes) {
+        for (GLMesh mesh : meshes) {
             Vector3f[] vertexTable = BufferUtils.getVector3Array(mesh.getFloatBuffer(Type.Position));
             int[] indices = new int[3];
             List vertices = new ArrayList<>(mesh.getTriangleCount() * 3);
diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java
index cadb07ca48..3939304586 100644
--- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java
+++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java
@@ -37,7 +37,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.clone.Cloner;
@@ -68,7 +68,7 @@ public EmitterMeshVertexShape() {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public EmitterMeshVertexShape(List meshes) {
+    public EmitterMeshVertexShape(List meshes) {
         this.setMeshes(meshes);
     }
 
@@ -77,12 +77,12 @@ public EmitterMeshVertexShape(List meshes) {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public void setMeshes(List meshes) {
+    public void setMeshes(List meshes) {
         Map vertToNormalMap = new HashMap<>();
 
         this.vertices = new ArrayList>(meshes.size());
         this.normals = new ArrayList>(meshes.size());
-        for (Mesh mesh : meshes) {
+        for (GLMesh mesh : meshes) {
             // fetching the data
             float[] vertexTable = BufferUtils.getFloatArray(mesh.getFloatBuffer(Type.Position));
             float[] normalTable = BufferUtils.getFloatArray(mesh.getFloatBuffer(Type.Normal));
diff --git a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java
index 622164e4a1..f8ac7f94e2 100644
--- a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java
+++ b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java
@@ -36,7 +36,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.FastMath;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.nio.FloatBuffer;
@@ -49,7 +49,7 @@
  * 
  * @author nehon
  */
-public class BoundingSphereDebug extends Mesh {
+public class BoundingSphereDebug extends GLMesh {
 
     protected int vertCount;
     protected int triCount;
diff --git a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java
index c4ac9b26f0..b7059ceaaa 100644
--- a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java
+++ b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java
@@ -33,7 +33,7 @@
 
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Texture2D;
@@ -59,7 +59,7 @@ class BitmapTextPage extends Geometry {
     private final LinkedList pageQuads = new LinkedList<>();
 
     BitmapTextPage(BitmapFont font, boolean arrayBased, int page) {
-        super("BitmapFont", new Mesh());
+        super("BitmapFont", new GLMesh());
         setRequiresUpdates(false);
         setBatchHint(BatchHint.Never);
         if (font == null) {
@@ -77,7 +77,7 @@ class BitmapTextPage extends Geometry {
         this.texture = (Texture2D) mat.getTextureParam("ColorMap").getTextureValue();
 
         // initialize buffers
-        Mesh m = getMesh();
+        GLMesh m = getMesh();
         m.setBuffer(Type.Position, 3, new float[0]);
         m.setBuffer(Type.TexCoord, 2, new float[0]);
         m.setBuffer(Type.Color, 4, new byte[0]);
@@ -130,7 +130,7 @@ public BitmapTextPage clone() {
     @Override
     public void cloneFields(Cloner cloner, Object original) {
         
-        Mesh originalMesh = this.mesh;
+        GLMesh originalMesh = this.mesh;
     
         super.cloneFields(cloner, original);
         
@@ -162,7 +162,7 @@ void assemble(Letters quads) {
             }
         }
 
-        Mesh m = getMesh();
+        GLMesh m = getMesh();
         int vertCount = pageQuads.size() * 4;
         int triCount = pageQuads.size() * 2;
 
diff --git a/jme3-core/src/main/java/com/jme3/material/RenderState.java b/jme3-core/src/main/java/com/jme3/material/RenderState.java
index 7f21e8abfa..1002b350c3 100644
--- a/jme3-core/src/main/java/com/jme3/material/RenderState.java
+++ b/jme3-core/src/main/java/com/jme3/material/RenderState.java
@@ -32,7 +32,7 @@
 package com.jme3.material;
 
 import com.jme3.export.*;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import java.io.IOException;
 
 /**
@@ -880,7 +880,7 @@ public void setDepthWrite(boolean depthWrite) {
     /**
      * Enables wireframe rendering mode.
      *
-     * 

When in wireframe mode, {@link Mesh meshes} rendered in triangle mode + *

When in wireframe mode, {@link GLMesh meshes} rendered in triangle mode * will not be solid, but instead, only the edges of the triangles * will be rendered. * @@ -982,7 +982,7 @@ public void setDepthFunc(TestFunction depthFunc) { /** * Sets the mesh line width. * Use this in conjunction with {@link #setWireframe(boolean)} or with a mesh in - * {@link com.jme3.scene.Mesh.Mode#Lines} mode. + * {@link GLMesh.Mode#Lines} mode. * Note: this does not work in OpenGL core profile. It only works in * compatibility profile. * diff --git a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java index ca8f7d1efa..b295c7588b 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java @@ -40,7 +40,7 @@ import com.jme3.renderer.RenderManager; import com.jme3.renderer.Renderer; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.instancing.InstancedGeometry; import com.jme3.shader.DefineList; import com.jme3.shader.Shader; @@ -61,7 +61,7 @@ public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager } public static void renderMeshFromGeometry(Renderer renderer, Geometry geom) { - Mesh mesh = geom.getMesh(); + GLMesh mesh = geom.getMesh(); int lodLevel = geom.getLodLevel(); if (geom instanceof InstancedGeometry) { InstancedGeometry instGeom = (InstancedGeometry) geom; diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java index ea6088afb9..0d153674a6 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java @@ -33,6 +33,7 @@ import com.jme3.material.RenderState; import com.jme3.math.ColorRGBA; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.shader.Shader; import com.jme3.texture.FrameBuffer; @@ -226,21 +227,21 @@ public class RenderContext { /** * Currently bound element array vertex buffer. * - * @see Renderer#renderMesh(com.jme3.scene.Mesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundElementArrayVBO; /** * ID of the bound vertex array. * - * @see Renderer#renderMesh(com.jme3.scene.Mesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundVertexArray; /** * Currently bound array vertex buffer. * - * @see Renderer#renderMesh(com.jme3.scene.Mesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundArrayVBO; diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java index c59ffd9084..6d6a1afeac 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java @@ -54,7 +54,7 @@ import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.renderer.queue.RenderQueue.ShadowMode; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.scene.VertexBuffer; @@ -890,7 +890,7 @@ public void preloadScene(Spatial scene) { } gm.getMaterial().preload(this, gm); - Mesh mesh = gm.getMesh(); + GLMesh mesh = gm.getMesh(); if (mesh != null && mesh.getVertexCount() != 0 && mesh.getTriangleCount() != 0) { diff --git a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java index acd0d599e1..e8a517c2b6 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java @@ -33,7 +33,7 @@ import com.jme3.material.RenderState; import com.jme3.math.ColorRGBA; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.shader.bufferobject.BufferObject; import com.jme3.shader.Shader; @@ -351,12 +351,12 @@ public void setTexture(int unit, Texture tex) * per-instance vertex attribute to the shader. * * @param mesh The mesh to render - * @param lod The LOD level to use, see {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. + * @param lod The LOD level to use, see {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. * @param count Number of mesh instances to render * @param instanceData When count is greater than 1, these buffers provide * the per-instance attributes. */ - public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData); + public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData); /** * Resets all previously used {@link NativeObject Native Objects} on this Renderer. diff --git a/jme3-core/src/main/java/com/jme3/renderer/Statistics.java b/jme3-core/src/main/java/com/jme3/renderer/Statistics.java index b2766df154..8cf89bb171 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Statistics.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Statistics.java @@ -31,7 +31,7 @@ */ package com.jme3.renderer; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.shader.Shader; import com.jme3.texture.FrameBuffer; import com.jme3.texture.Image; @@ -172,7 +172,7 @@ public void getData(int[] data) { * @param lod which level of detail * @param count multiplier for triangles and vertices */ - public void onMeshDrawn(Mesh mesh, int lod, int count) { + public void onMeshDrawn(GLMesh mesh, int lod, int count) { if (!enabled) { return; } @@ -188,7 +188,7 @@ public void onMeshDrawn(Mesh mesh, int lod, int count) { * @param mesh the Mesh that was drawn (not null) * @param lod which level of detail */ - public void onMeshDrawn(Mesh mesh, int lod) { + public void onMeshDrawn(GLMesh mesh, int lod) { onMeshDrawn(mesh, lod, 1); } diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index 09a560d4a6..b65d402ca2 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -39,8 +39,8 @@ import com.jme3.math.*; import com.jme3.opencl.OpenCLObjectManager; import com.jme3.renderer.*; -import com.jme3.scene.Mesh; -import com.jme3.scene.Mesh.Mode; +import com.jme3.scene.GLMesh; +import com.jme3.scene.GLMesh.Mode; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -3227,7 +3227,7 @@ public void setVertexAttrib(VertexBuffer vb) { setVertexAttrib(vb, null); } - public void drawTriangleArray(Mesh.Mode mode, int count, int vertCount) { + public void drawTriangleArray(GLMesh.Mode mode, int count, int vertCount) { boolean useInstancing = count > 1 && caps.contains(Caps.MeshInstancing); if (useInstancing) { glext.glDrawArraysInstancedARB(convertElementMode(mode), 0, @@ -3237,7 +3237,7 @@ public void drawTriangleArray(Mesh.Mode mode, int count, int vertCount) { } } - public void drawTriangleList(VertexBuffer indexBuf, Mesh mesh, int count) { + public void drawTriangleList(VertexBuffer indexBuf, GLMesh mesh, int count) { if (indexBuf.getBufferType() != VertexBuffer.Type.Index) { throw new IllegalArgumentException("Only index buffers are allowed as triangle lists."); } @@ -3340,7 +3340,7 @@ public void drawTriangleList(VertexBuffer indexBuf, Mesh mesh, int count) { * @param mode input enum value (not null) * @return the corresponding GL value */ - public int convertElementMode(Mesh.Mode mode) { + public int convertElementMode(GLMesh.Mode mode) { switch (mode) { case Points: return GL.GL_POINTS; @@ -3363,7 +3363,7 @@ public int convertElementMode(Mesh.Mode mode) { } } - public void updateVertexArray(Mesh mesh, VertexBuffer instanceData) { + public void updateVertexArray(GLMesh mesh, VertexBuffer instanceData) { int id = mesh.getId(); if (id == -1) { IntBuffer temp = intBuf1; @@ -3403,7 +3403,7 @@ public void updateVertexArray(Mesh mesh, VertexBuffer instanceData) { } } - private void renderMeshDefault(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { + private void renderMeshDefault(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) { // Here while count is still passed in. Can be removed when/if // the method is collapsed again. -pspeed @@ -3453,7 +3453,7 @@ private void renderMeshDefault(Mesh mesh, int lod, int count, VertexBuffer[] ins } @Override - public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { + public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) { if (mesh.getVertexCount() == 0 || mesh.getTriangleCount() == 0 || count == 0) { return; } diff --git a/jme3-core/src/main/java/com/jme3/scene/BatchNode.java b/jme3-core/src/main/java/com/jme3/scene/BatchNode.java index aa5d62a02a..3308422d66 100644 --- a/jme3-core/src/main/java/com/jme3/scene/BatchNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/BatchNode.java @@ -128,8 +128,8 @@ protected Matrix4f getTransformMatrix(Geometry g) { protected void updateSubBatch(Geometry bg) { Batch batch = batchesByGeom.get(bg); if (batch != null) { - Mesh mesh = batch.geometry.getMesh(); - Mesh origMesh = bg.getMesh(); + GLMesh mesh = batch.geometry.getMesh(); + GLMesh origMesh = bg.getMesh(); VertexBuffer pvb = mesh.getBuffer(VertexBuffer.Type.Position); VertexBuffer nvb = mesh.getBuffer(VertexBuffer.Type.Normal); @@ -202,7 +202,7 @@ protected void doBatch() { } for (Map.Entry> entry : matMap.entrySet()) { - Mesh m = new Mesh(); + GLMesh m = new GLMesh(); Material material = entry.getKey(); List list = entry.getValue(); nbGeoms += list.size(); @@ -377,7 +377,7 @@ public Material getMaterial() { * @param geometries * @param outMesh */ - private void mergeGeometries(Mesh outMesh, List geometries) { + private void mergeGeometries(GLMesh outMesh, List geometries) { int[] compsForBuf = new int[VertexBuffer.Type.values().length]; VertexBuffer.Format[] formatForBuf = new VertexBuffer.Format[compsForBuf.length]; boolean[] normForBuf = new boolean[VertexBuffer.Type.values().length]; @@ -387,30 +387,30 @@ private void mergeGeometries(Mesh outMesh, List geometries) { int totalLodLevels = 0; int maxWeights = -1; - Mesh.Mode mode = null; + GLMesh.Mode mode = null; for (Geometry geom : geometries) { totalVerts += geom.getVertexCount(); totalTris += geom.getTriangleCount(); totalLodLevels = Math.min(totalLodLevels, geom.getMesh().getNumLodLevels()); - Mesh.Mode listMode; + GLMesh.Mode listMode; int components; switch (geom.getMesh().getMode()) { case Points: - listMode = Mesh.Mode.Points; + listMode = GLMesh.Mode.Points; components = 1; break; case LineLoop: case LineStrip: case Lines: - listMode = Mesh.Mode.Lines; + listMode = GLMesh.Mode.Lines; //listLineWidth = geom.getMesh().getLineWidth(); components = 2; break; case TriangleFan: case TriangleStrip: case Triangles: - listMode = Mesh.Mode.Triangles; + listMode = GLMesh.Mode.Triangles; components = 3; break; default: @@ -472,7 +472,7 @@ private void mergeGeometries(Mesh outMesh, List geometries) { int globalTriIndex = 0; for (Geometry geom : geometries) { - Mesh inMesh = geom.getMesh(); + GLMesh inMesh = geom.getMesh(); if (!isBatch(geom)) { geom.associateWithGroupNode(this, globalVertIndex); } diff --git a/jme3-core/src/main/java/com/jme3/scene/Mesh.java b/jme3-core/src/main/java/com/jme3/scene/GLMesh.java similarity index 98% rename from jme3-core/src/main/java/com/jme3/scene/Mesh.java rename to jme3-core/src/main/java/com/jme3/scene/GLMesh.java index 2819c2838f..b9e19d2a52 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Mesh.java +++ b/jme3-core/src/main/java/com/jme3/scene/GLMesh.java @@ -64,7 +64,7 @@ * * @author Kirill Vainer */ -public class Mesh implements Savable, Cloneable, JmeCloneable { +public class GLMesh implements Savable, Cloneable, JmeCloneable { /** * The mode of the Mesh specifies both the type of primitive represented @@ -119,8 +119,8 @@ public enum Mode { /** * A combination of various triangle modes. It is best to avoid * using this mode as it may not be supported by all renderers. - * The {@link Mesh#setModeStart(int[]) mode start points} and - * {@link Mesh#setElementLengths(int[]) element lengths} must + * The {@link GLMesh#setModeStart(int[]) mode start points} and + * {@link GLMesh#setElementLengths(int[]) element lengths} must * be specified for this mode. */ Hybrid(false), @@ -198,7 +198,7 @@ public boolean isListMode() { /** * Creates a new mesh with no {@link VertexBuffer vertex buffers}. */ - public Mesh() { + public GLMesh() { } /** @@ -209,9 +209,9 @@ public Mesh() { * @return A shallow clone of the mesh */ @Override - public Mesh clone() { + public GLMesh clone() { try { - Mesh clone = (Mesh) super.clone(); + GLMesh clone = (GLMesh) super.clone(); clone.meshBound = meshBound.clone(); clone.collisionTree = collisionTree != null ? collisionTree : null; clone.buffers = buffers.clone(); @@ -236,9 +236,9 @@ public Mesh clone() { * * @return a deep clone of this mesh. */ - public Mesh deepClone() { + public GLMesh deepClone() { try { - Mesh clone = (Mesh) super.clone(); + GLMesh clone = (GLMesh) super.clone(); clone.meshBound = meshBound != null ? meshBound.clone() : null; // TODO: Collision tree cloning @@ -279,8 +279,8 @@ public Mesh deepClone() { * * @return A clone of the mesh for animation use. */ - public Mesh cloneForAnim() { - Mesh clone = clone(); + public GLMesh cloneForAnim() { + GLMesh clone = clone(); if (getBuffer(Type.BindPosePosition) != null) { VertexBuffer oldPos = getBuffer(Type.Position); @@ -310,9 +310,9 @@ public Mesh cloneForAnim() { * Called internally by com.jme3.util.clone.Cloner. Do not call directly. */ @Override - public Mesh jmeClone() { + public GLMesh jmeClone() { try { - Mesh clone = (Mesh) super.clone(); + GLMesh clone = (GLMesh) super.clone(); clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID; return clone; } catch (CloneNotSupportedException ex) { @@ -585,7 +585,7 @@ public void setModeStart(int[] modeStart) { * * @return the mesh mode * - * @see #setMode(com.jme3.scene.Mesh.Mode) + * @see #setMode(GLMesh.Mode) */ public Mode getMode() { return mode; @@ -1254,7 +1254,7 @@ public IndexBuffer getIndexBuffer() { * * @param other The mesh to extract the vertex data from */ - public void extractVertexData(Mesh other) { + public void extractVertexData(GLMesh other) { // Determine the number of unique vertices need to // be created. Also determine the mappings // between old indices to new indices (since we avoid duplicating diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java index 008e987f1d..435f061fa1 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java +++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java @@ -56,7 +56,7 @@ * Geometry defines a leaf node of the scene graph. The leaf node * contains the geometric data for rendering objects. It manages all rendering * information such as a {@link Material} object to define how the surface - * should be shaded and the {@link Mesh} data to contain the actual geometry. + * should be shaded and the {@link GLMesh} data to contain the actual geometry. * * @author Kirill Vainer */ @@ -65,7 +65,7 @@ public class Geometry extends Spatial { // models loaded with shared mesh will be automatically fixed. public static final int SAVABLE_VERSION = 1; private static final Logger logger = Logger.getLogger(Geometry.class.getName()); - protected Mesh mesh; + protected GLMesh mesh; protected transient int lodLevel = 0; protected Material material; /** @@ -126,7 +126,7 @@ public Geometry(String name) { * @param name The name of this geometry * @param mesh The mesh data for this geometry */ - public Geometry(String name, Mesh mesh) { + public Geometry(String name, GLMesh mesh) { this(name); if (mesh == null) { @@ -143,7 +143,7 @@ public Geometry(String name, Mesh mesh) { * @param mesh The mesh data for this geometry * @param material The material for this geometry */ - public Geometry(String name, Mesh mesh, Material material) { + public Geometry(String name, GLMesh mesh, Material material) { this(name, mesh); setMaterial(material); } @@ -177,7 +177,7 @@ public void setIgnoreTransform(boolean ignoreTransform) { * Sets the LOD level to use when rendering the mesh of this geometry. * Level 0 indicates that the default index buffer should be used, * levels [1, LodLevels + 1] represent the levels set on the mesh - * with {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. + * with {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. * * @param lod The lod level to set */ @@ -212,7 +212,7 @@ public int getLodLevel() { * * @return this geometry's mesh vertex count. * - * @see Mesh#getVertexCount() + * @see GLMesh#getVertexCount() */ @Override public int getVertexCount() { @@ -224,7 +224,7 @@ public int getVertexCount() { * * @return this geometry's mesh triangle count. * - * @see Mesh#getTriangleCount() + * @see GLMesh#getTriangleCount() */ @Override public int getTriangleCount() { @@ -238,7 +238,7 @@ public int getTriangleCount() { * * @throws IllegalArgumentException If mesh is null */ - public void setMesh(Mesh mesh) { + public void setMesh(GLMesh mesh) { if (mesh == null) { throw new IllegalArgumentException(); } @@ -256,9 +256,9 @@ public void setMesh(Mesh mesh) { * * @return the mesh to use for this geometry * - * @see #setMesh(com.jme3.scene.Mesh) + * @see #setMesh(GLMesh) */ - public Mesh getMesh() { + public GLMesh getMesh() { return mesh; } @@ -450,7 +450,7 @@ public Matrix4f getWorldMatrix() { /** * Sets the model bound to use for this geometry. * This alters the bound used on the mesh as well via - * {@link Mesh#setBound(com.jme3.bounding.BoundingVolume) } and + * {@link GLMesh#setBound(com.jme3.bounding.BoundingVolume) } and * forces the world bounding volume to be recomputed. * * @param modelBound The model bound to set @@ -585,7 +585,7 @@ public void cloneFields(Cloner cloner, Object original) { this.cachedWorldMat = cloner.clone(cachedWorldMat); // See if we are doing a shallow clone or a deep mesh clone - boolean shallowClone = (cloner.getCloneFunction(Mesh.class) instanceof IdentityCloneFunction); + boolean shallowClone = (cloner.getCloneFunction(GLMesh.class) instanceof IdentityCloneFunction); // See if we clone the mesh using the special animation // semi-deep cloning @@ -731,7 +731,7 @@ public void write(JmeExporter ex) throws IOException { public void read(JmeImporter im) throws IOException { super.read(im); InputCapsule ic = im.getCapsule(this); - mesh = (Mesh) ic.readSavable("mesh", null); + mesh = (GLMesh) ic.readSavable("mesh", null); material = null; String matName = ic.readString("materialName", null); @@ -756,7 +756,7 @@ public void read(JmeImporter im) throws IOException { if (ic.getSavableVersion(Geometry.class) == 0) { // Fix shared mesh (if set) - Mesh sharedMesh = getUserData(UserData.JME_SHAREDMESH); + GLMesh sharedMesh = getUserData(UserData.JME_SHAREDMESH); if (sharedMesh != null) { getMesh().extractVertexData(sharedMesh); setUserData(UserData.JME_SHAREDMESH, null); diff --git a/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java b/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java index db245392ca..6b934ba5e0 100644 --- a/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java @@ -57,7 +57,7 @@ public GeometryGroupNode(String name) { /** * Called by {@link Geometry geom} to specify that its - * {@link Geometry#setMesh(com.jme3.scene.Mesh) mesh} + * {@link Geometry#setMesh(GLMesh) mesh} * has been changed. * * This is also called when the geometry's diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java index 2fe1775d3e..ce2d962e97 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java +++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java @@ -1403,7 +1403,7 @@ public void setLodLevel(int lod) { * are shared if static, or specially cloned if animated. * * @param cloneMaterial true to clone materials, false to share them - * @see Mesh#cloneForAnim() + * @see GLMesh#cloneForAnim() */ public Spatial clone(boolean cloneMaterial) { // Set up the cloner for the type of cloning we want to do. @@ -1421,7 +1421,7 @@ public Spatial clone(boolean cloneMaterial) { // By default, the meshes are not cloned. The geometry // may choose to selectively force them to be cloned, but // normally they will be shared. - cloner.setCloneFunction(Mesh.class, new IdentityCloneFunction()); + cloner.setCloneFunction(GLMesh.class, new IdentityCloneFunction()); // Clone it! Spatial clone = cloner.clone(this); @@ -1453,7 +1453,7 @@ public Spatial oldClone(boolean cloneMaterial) { * Note that meshes of geometries are not cloned explicitly, they * are shared if static, or specially cloned if animated. * - * @see Mesh#cloneForAnim() + * @see GLMesh#cloneForAnim() */ @Override public Spatial clone() { diff --git a/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java index 8c0a388bb7..591ab4d07f 100644 --- a/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java @@ -41,7 +41,7 @@ /** * A VertexBuffer contains a particular type of geometry - * data used by {@link Mesh}es. Every VertexBuffer set on a Mesh + * data used by {@link GLMesh}es. Every VertexBuffer set on a Mesh * is sent as an attribute to the vertex shader to be processed. *

* Several terms are used throughout the javadoc for this class, explanation: diff --git a/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java b/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java index fc03a584c8..f2b01ed732 100644 --- a/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java +++ b/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java @@ -41,7 +41,7 @@ import com.jme3.renderer.RenderManager; import com.jme3.renderer.ViewPort; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.Spatial; import com.jme3.util.clone.JmeCloneable; import java.io.IOException; @@ -128,7 +128,7 @@ public void setSpatial(Spatial spatial) { if(spatial != null) { Geometry geom = (Geometry) spatial; - Mesh mesh = geom.getMesh(); + GLMesh mesh = geom.getMesh(); numLevels = mesh.getNumLodLevels(); numTris = new int[numLevels]; for (int i = numLevels - 1; i >= 0; i--) { diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java index 8f46298693..4eab348759 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java @@ -33,7 +33,7 @@ import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import java.nio.FloatBuffer; @@ -45,7 +45,7 @@ * * @author Kirill Vainer */ -public class Arrow extends Mesh { +public class Arrow extends GLMesh { private final Quaternion tempQuat = new Quaternion(); private final Vector3f tempVec = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java index d2947e52a9..bc801b4475 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java @@ -31,7 +31,7 @@ */ package com.jme3.scene.debug; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; @@ -43,7 +43,7 @@ * * @author Kirill Vainer */ -public class Grid extends Mesh { +public class Grid extends GLMesh { public Grid() { } diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java index f8f450ab47..e7ec73e33c 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java @@ -35,7 +35,7 @@ import com.jme3.export.JmeImporter; import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.Node; import com.jme3.util.clone.Cloner; @@ -151,7 +151,7 @@ public void read(JmeImporter importer) throws IOException { } @SuppressWarnings("unchecked") - private T getMesh(String suffix) { + private T getMesh(String suffix) { Geometry child = (Geometry)getChild(getGeometryName(suffix)); if(child != null) { return (T) child.getMesh(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java index 6db686bed8..14b165ff15 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java @@ -41,7 +41,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -55,7 +55,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class SkeletonInterBoneWire extends Mesh { +public class SkeletonInterBoneWire extends GLMesh { private static final int POINT_AMOUNT = 10; /** The amount of connections between bones. */ private int connectionsAmount; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java index 878b611673..3771f469a9 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java @@ -38,7 +38,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -53,7 +53,7 @@ /** * The class that displays either heads of the bones if no length data is supplied or both heads and tails otherwise. */ -public class SkeletonPoints extends Mesh { +public class SkeletonPoints extends GLMesh { /** The skeleton to be displayed. */ private Skeleton skeleton; /** The map between the bone index and its length. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java index afcecce778..8ad463b3e1 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java @@ -42,7 +42,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -55,7 +55,7 @@ * The class that displays either wires between the bones' heads if no length data is supplied and * full bones' shapes otherwise. */ -public class SkeletonWire extends Mesh { +public class SkeletonWire extends GLMesh { /** The number of bones' connections. Used in non-length mode. */ private int numConnections; /** The skeleton to be displayed. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java index 38593898c1..86827d3e2a 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java @@ -34,7 +34,7 @@ import com.jme3.bounding.BoundingBox; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -42,7 +42,7 @@ import com.jme3.util.BufferUtils; import java.nio.FloatBuffer; -public class WireBox extends Mesh { +public class WireBox extends GLMesh { public WireBox() { this(1,1,1); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java index 9a2de74927..7426d7eeb5 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java @@ -34,7 +34,7 @@ import com.jme3.math.Vector3f; import com.jme3.renderer.Camera; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; @@ -52,7 +52,7 @@ * and four for the far plane. These points are connected by lines * to form a wireframe cube-like structure. */ -public class WireFrustum extends Mesh { +public class WireFrustum extends GLMesh { /** * For Serialization only. Do not use. @@ -161,7 +161,7 @@ public void update(Vector3f[] points) { * @param points An array of 8 `Vector3f` objects representing the frustum's corners. * @return A new `WireFrustum` instance. */ - public static Mesh makeFrustum(Vector3f[] points) { + public static GLMesh makeFrustum(Vector3f[] points) { return new WireFrustum(points); } diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java index 72ee624bb0..5793c2af63 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java @@ -35,7 +35,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -45,7 +45,7 @@ import java.nio.FloatBuffer; import java.nio.ShortBuffer; -public class WireSphere extends Mesh { +public class WireSphere extends GLMesh { private static final int samples = 30; private static final int zSamples = 10; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java index 1fe8bdcdc6..53ccbb7ebe 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java @@ -34,7 +34,7 @@ import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; @@ -45,7 +45,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class ArmatureInterJointsWire extends Mesh { +public class ArmatureInterJointsWire extends GLMesh { private final Vector3f tmp = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java index c46466f181..adc11bd17d 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java @@ -117,8 +117,8 @@ protected final void createSkeletonGeoms(Joint joint, Node joints, Node wires, N if (ends == null) { geomToJoint.put(jGeom, joint); } else { - Mesh m = null; - Mesh mO = null; + GLMesh m = null; + GLMesh mO = null; Node wireAttach = wires; Node outlinesAttach = outlines; if (ends.length == 1) { diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java index 989667eb23..c8a541be97 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java @@ -32,10 +32,10 @@ package com.jme3.scene.debug.custom; -import com.jme3.scene.Mesh; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Type; -public class JointShape extends Mesh { +public class JointShape extends GLMesh { /** * Serialization only. Do not use. diff --git a/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java b/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java index 821264f9a6..ef277e7d40 100644 --- a/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java @@ -59,11 +59,11 @@ static void setGeometryStartIndex2(Geometry geom, int startIndex) { private static final class InstanceTypeKey implements Cloneable, JmeCloneable { - Mesh mesh; + GLMesh mesh; Material material; int lodLevel; - public InstanceTypeKey(Mesh mesh, Material material, int lodLevel) { + public InstanceTypeKey(GLMesh mesh, Material material, int lodLevel) { this.mesh = mesh; this.material = material; this.lodLevel = lodLevel; diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java index 29ff8050c7..66fd775c04 100644 --- a/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java @@ -36,6 +36,7 @@ import java.nio.IntBuffer; import java.nio.ShortBuffer; +import com.jme3.scene.GLMesh; import com.jme3.scene.VertexBuffer.Format; import com.jme3.util.BufferUtils; @@ -170,7 +171,7 @@ public int remaining() { * Returns the format of the data stored in this buffer. * *

This method can be used to set an {@link IndexBuffer} to a - * {@link com.jme3.scene.Mesh Mesh}:

+ * {@link GLMesh Mesh}:

*
      * mesh.setBuffer(Type.Index, 3, 
      *     indexBuffer.getFormat(), indexBuffer);
diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
index c3144e6b97..114ba5f77a 100644
--- a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
@@ -31,7 +31,7 @@
  */
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer.Format;
 
 import java.nio.Buffer;
diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
index f6c9d4bfea..1b318c0ef5 100644
--- a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
@@ -31,8 +31,8 @@
  */
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.Mesh;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import java.nio.Buffer;
 
@@ -50,7 +50,7 @@ public class WrappedIndexBuffer extends VirtualIndexBuffer {
 
     private final IndexBuffer ib;
 
-    public WrappedIndexBuffer(Mesh mesh){
+    public WrappedIndexBuffer(GLMesh mesh){
         super(mesh.getVertexCount(), mesh.getMode());
         this.ib = mesh.getIndexBuffer();
         switch (meshMode){
@@ -83,7 +83,7 @@ public Buffer getBuffer() {
         return ib.getBuffer();
     }
     
-    public static void convertToList(Mesh mesh){
+    public static void convertToList(GLMesh mesh){
         IndexBuffer inBuf = mesh.getIndicesAsList();
         IndexBuffer outBuf = IndexBuffer.createIndexBuffer(mesh.getVertexCount(),
                                                            inBuf.size());
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
index e096a91a4c..ac7fdd7d60 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
@@ -33,7 +33,7 @@
 
 import com.jme3.export.*;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 
 import java.io.IOException;
 
@@ -50,7 +50,7 @@
  * @author Ian Phillips
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public abstract class AbstractBox extends Mesh {
+public abstract class AbstractBox extends GLMesh {
 
     public final Vector3f center = new Vector3f(0f, 0f, 0f);
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
index cfe51dbaff..c20d7d8301 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
@@ -35,7 +35,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 
@@ -51,7 +51,7 @@
  *
  * @author Kirill Vainer
  */
-public class CenterQuad extends Mesh {
+public class CenterQuad extends GLMesh {
 
     private float width;
     private float height;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
index e1b7dd994f..b2b04fbf33 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Spline;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import java.util.Iterator;
 import java.util.List;
@@ -47,7 +47,7 @@
  *
  * @author Nehon
  */
-public class Curve extends Mesh {
+public class Curve extends GLMesh {
 
     private Spline spline;
     private Vector3f temp = new Vector3f();
@@ -132,7 +132,7 @@ private void createCatmullRomMesh(int nbSubSegments) {
             i++;
         }
 
-        this.setMode(Mesh.Mode.Lines);
+        this.setMode(GLMesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);//(spline.getControlPoints().size() - 1) * nbSubSegments * 2
         this.updateBound();
@@ -184,7 +184,7 @@ private void createBezierMesh(int nbSubSegments) {
             indices[i++] = (short) k;
         }
 
-        this.setMode(Mesh.Mode.Lines);
+        this.setMode(GLMesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);
         this.updateBound();
@@ -228,7 +228,7 @@ private void createNurbMesh(int nbSubSegments) {
                 indices[i++] = (short) (j + 1);
             }
 
-            this.setMode(Mesh.Mode.Lines);
+            this.setMode(GLMesh.Mode.Lines);
             this.setBuffer(VertexBuffer.Type.Position, 3, array);
             this.setBuffer(VertexBuffer.Type.Index, 2, indices);
             this.updateBound();
@@ -262,7 +262,7 @@ private void createLinearMesh() {
             }
         }
 
-        this.setMode(Mesh.Mode.Lines);
+        this.setMode(GLMesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);
         this.updateBound();
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
index 36df9d9892..4ac7cfb950 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -50,7 +50,7 @@
  * @author Mark Powell
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Cylinder extends Mesh {
+public class Cylinder extends GLMesh {
 
     private int axisSamples;
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
index 5cfd312f82..99a2b96619 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.TempVars;
@@ -53,7 +53,7 @@
  * @author Joshua Slack (Original sphere code that was adapted)
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Dome extends Mesh {
+public class Dome extends GLMesh {
 
     private int planes;
     private int radialSamples;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
index c9c5f3c197..18173646a2 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
@@ -36,7 +36,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
@@ -47,7 +47,7 @@
  * 
  * @author Brent Owens
  */
-public class Line extends Mesh {
+public class Line extends GLMesh {
 
     private Vector3f start = new Vector3f();
     private Vector3f end = new Vector3f();
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
index d301a98675..0509df9878 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import static com.jme3.util.BufferUtils.*;
 import java.io.IOException;
@@ -51,7 +51,7 @@
  * @author Joshua Slack, Eric Woroshow
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class PQTorus extends Mesh {
+public class PQTorus extends GLMesh {
 
     private float p, q;
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
index 07c161c301..646009501e 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
@@ -36,7 +36,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 
@@ -48,7 +48,7 @@
  *
  * @author Kirill Vainer
  */
-public class Quad extends Mesh {
+public class Quad extends GLMesh {
 
     private float width;
     private float height;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
index 6f16847390..71e9724db2 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Rectangle;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.clone.Cloner;
@@ -71,7 +71,7 @@
  *
  * @author Francivan Bezerra
  */
-public class RectangleMesh extends Mesh {
+public class RectangleMesh extends GLMesh {
 
     /**
      * Used to locate the vertices and calculate a default normal.
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
index f4b2ba34c6..6d0deff9f1 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.TempVars;
@@ -53,7 +53,7 @@
  * @author Joshua Slack
  * @version $Revision: 4163 $, $Date: 2009-03-24 21:14:55 -0400 (Tue, 24 Mar 2009) $
  */
-public class Sphere extends Mesh {
+public class Sphere extends GLMesh {
 
     public enum TextureMode {
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
index 9beef259e4..f881031a7a 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Spline.SplineType;
 import com.jme3.math.Vector3f;
 import com.jme3.math.Vector4f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -56,7 +56,7 @@
  * a) NURBS
  * @author Marcin Roguski (Kealthas)
  */
-public class Surface extends Mesh {
+public class Surface extends GLMesh {
     private SplineType           type;                // the type of the surface
     private List> controlPoints;       // space control points and their weights
     private List[]        knots;               // knots of the surface
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
index d3e75d6faf..7d49cc9eb1 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
@@ -37,7 +37,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -52,7 +52,7 @@
  * @author Mark Powell
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Torus extends Mesh {
+public class Torus extends GLMesh {
 
     private int circleSamples;
 
diff --git a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
index 28eb6b5231..4534d9a872 100644
--- a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
+++ b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
@@ -40,7 +40,7 @@
 import com.jme3.renderer.Renderer;
 import com.jme3.renderer.Statistics;
 import com.jme3.renderer.TextureUnitException;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.shader.Shader;
 import com.jme3.shader.Shader.ShaderSource;
@@ -195,7 +195,7 @@ public void deleteBuffer(BufferObject bo) {
     }
 
     @Override
-    public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) {
+    public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) {
     }
 
     @Override
diff --git a/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java b/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
index f19aacd914..6961d1a382 100644
--- a/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
+++ b/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
@@ -135,7 +135,7 @@ private static List initVertexData(int size) {
         return vertices;
     }
 
-    public static void generate(Mesh mesh) {
+    public static void generate(GLMesh mesh) {
         generate(mesh, true, false);
     }
 
@@ -147,7 +147,7 @@ public static void generate(Spatial scene, boolean splitMirrored) {
             }
         } else {
             Geometry geom = (Geometry) scene;
-            Mesh mesh = geom.getMesh();
+            GLMesh mesh = geom.getMesh();
 
             // Check to ensure mesh has texcoords and normals before generating
             if (mesh.getBuffer(Type.TexCoord) != null
@@ -162,13 +162,13 @@ public static void generate(Spatial scene) {
     }
 
     public static void generateParallel(Spatial scene, ExecutorService executor) {
-        final Set meshes = new HashSet<>();
+        final Set meshes = new HashSet<>();
         scene.breadthFirstTraversal(new SceneGraphVisitor() {
             @Override
             public void visit(Spatial spatial) {
                 if (spatial instanceof Geometry) {
                     Geometry geom = (Geometry) spatial;
-                    Mesh mesh = geom.getMesh();
+                    GLMesh mesh = geom.getMesh();
 
                     // Check to ensure mesh has texcoords and normals before generating
                     if (mesh.getBuffer(Type.TexCoord) != null
@@ -179,7 +179,7 @@ public void visit(Spatial spatial) {
             }
         });
         List> futures = new ArrayList<>();
-        for (final Mesh m : meshes) {
+        for (final GLMesh m : meshes) {
             futures.add(executor.submit(new Runnable() {
                 @Override
                 public void run() {
@@ -196,7 +196,7 @@ public void run() {
         }
     }
 
-    public static void generate(Mesh mesh, boolean approxTangents, boolean splitMirrored) {
+    public static void generate(GLMesh mesh, boolean approxTangents, boolean splitMirrored) {
         int[] index = new int[3];
         Vector3f[] v = new Vector3f[3];
         Vector2f[] t = new Vector2f[3];
@@ -233,12 +233,12 @@ public static void generate(Mesh mesh, boolean approxTangents, boolean splitMirr
         TangentUtils.generateBindPoseTangentsIfNecessary(mesh);
     }
 
-    public static void generate(Mesh mesh, boolean approxTangents) {
+    public static void generate(GLMesh mesh, boolean approxTangents) {
         generate(mesh, approxTangents, false);
     }
 
-    private static List processTriangles(Mesh mesh,
-            int[] index, Vector3f[] v, Vector2f[] t, boolean splitMirrored) {
+    private static List processTriangles(GLMesh mesh,
+                                                     int[] index, Vector3f[] v, Vector2f[] t, boolean splitMirrored) {
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         if (mesh.getBuffer(Type.TexCoord) == null) {
@@ -273,7 +273,7 @@ private static List processTriangles(Mesh mesh,
     // Don't remove the split mirrored boolean. It's not used right now, but I intend to
     // make this method also split vertices with rotated tangent space, and I'll
     // add another splitRotated boolean.
-    private static List splitVertices(Mesh mesh, List vertexData, boolean splitMirrored) {
+    private static List splitVertices(GLMesh mesh, List vertexData, boolean splitMirrored) {
         
         int nbVertices = mesh.getBuffer(Type.Position).getNumElements();
         List newVertices = new ArrayList<>();
@@ -446,8 +446,8 @@ private static void putValue(VertexBuffer.Format format, Buffer buf1, Buffer buf
         }
     }
 
-    private static List processTriangleStrip(Mesh mesh,
-            int[] index, Vector3f[] v, Vector2f[] t) {
+    private static List processTriangleStrip(GLMesh mesh,
+                                                         int[] index, Vector3f[] v, Vector2f[] t) {
         
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
@@ -495,8 +495,8 @@ private static List processTriangleStrip(Mesh mesh,
         return vertices;
     }
 
-    private static List processTriangleFan(Mesh mesh,
-            int[] index, Vector3f[] v, Vector2f[] t) {
+    private static List processTriangleFan(GLMesh mesh,
+                                                       int[] index, Vector3f[] v, Vector2f[] t) {
         
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
@@ -627,7 +627,7 @@ private static boolean approxEqual(Vector2f u, Vector2f v) {
                 && (FastMath.abs(u.y - v.y) < tolerance);
     }
 
-    private static ArrayList linkVertices(Mesh mesh, boolean splitMirrored) {
+    private static ArrayList linkVertices(GLMesh mesh, boolean splitMirrored) {
         ArrayList vertexMap = new ArrayList<>();
 
         FloatBuffer vertexBuffer = mesh.getFloatBuffer(Type.Position);
@@ -672,8 +672,8 @@ && approxEqual(vertexInfo.texCoord, texCoord)) {
         return vertexMap;
     }
 
-    private static void processTriangleData(Mesh mesh, List vertices,
-            boolean approxTangent, boolean splitMirrored) {
+    private static void processTriangleData(GLMesh mesh, List vertices,
+                                            boolean approxTangent, boolean splitMirrored) {
         ArrayList vertexMap = linkVertices(mesh, splitMirrored);
 
         FloatBuffer tangents = BufferUtils.createFloatBuffer(vertices.size() * 4);
@@ -841,7 +841,7 @@ private static void processTriangleData(Mesh mesh, List vertices,
         mesh.updateCounts();
     }
 
-    private static void writeColorBuffer(List vertices, ColorRGBA[] cols, Mesh mesh) {
+    private static void writeColorBuffer(List vertices, ColorRGBA[] cols, GLMesh mesh) {
         FloatBuffer colors = BufferUtils.createFloatBuffer(vertices.size() * 4);
         colors.rewind();
         for (ColorRGBA color : cols) {
@@ -863,18 +863,18 @@ private static int parity(Vector3f n1, Vector3f n) {
     }
 
     /**
-     * @deprecated Use {@link TangentUtils#genTbnLines(com.jme3.scene.Mesh, float) } instead.
+     * @deprecated Use {@link TangentUtils#genTbnLines(GLMesh, float) } instead.
      */
     @Deprecated
-    public static Mesh genTbnLines(Mesh mesh, float scale) {
+    public static GLMesh genTbnLines(GLMesh mesh, float scale) {
         return TangentUtils.genTbnLines(mesh, scale);
     }
 
     /**
-     * @deprecated Use {@link TangentUtils#genNormalLines(com.jme3.scene.Mesh, float) } instead.
+     * @deprecated Use {@link TangentUtils#genNormalLines(GLMesh, float) } instead.
      */
     @Deprecated
-    public static Mesh genNormalLines(Mesh mesh, float scale) {
+    public static GLMesh genNormalLines(GLMesh mesh, float scale) {
         return TangentUtils.genNormalLines(mesh, scale);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/util/TangentUtils.java b/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
index 2014eaf003..145a332787 100644
--- a/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
+++ b/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
@@ -53,7 +53,7 @@ public class TangentUtils {
     private TangentUtils() {
     }
 
-    public static void generateBindPoseTangentsIfNecessary(Mesh mesh){
+    public static void generateBindPoseTangentsIfNecessary(GLMesh mesh){
         if (mesh.getBuffer(VertexBuffer.Type.BindPosePosition) != null) {
 
             VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
@@ -73,7 +73,7 @@ public static void generateBindPoseTangentsIfNecessary(Mesh mesh){
         }
     }
 
-    public static Mesh genTbnLines(Mesh mesh, float scale) {
+    public static GLMesh genTbnLines(GLMesh mesh, float scale) {
         if (mesh.getBuffer(Type.Tangent) == null) {
             return genNormalLines(mesh, scale);
         } else {
@@ -81,15 +81,15 @@ public static Mesh genTbnLines(Mesh mesh, float scale) {
         }
     }
 
-    public static Mesh genNormalLines(Mesh mesh, float scale) {
+    public static GLMesh genNormalLines(GLMesh mesh, float scale) {
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         FloatBuffer normalBuffer = (FloatBuffer) mesh.getBuffer(Type.Normal).getData();
 
         ColorRGBA originColor = ColorRGBA.White;
         ColorRGBA normalColor = ColorRGBA.Blue;
 
-        Mesh lineMesh = new Mesh();
-        lineMesh.setMode(Mesh.Mode.Lines);
+        GLMesh lineMesh = new GLMesh();
+        lineMesh.setMode(GLMesh.Mode.Lines);
 
         Vector3f origin = new Vector3f();
         Vector3f point = new Vector3f();
@@ -120,7 +120,7 @@ public static Mesh genNormalLines(Mesh mesh, float scale) {
         return lineMesh;
     }
 
-    public static Mesh genTangentLines(Mesh mesh, float scale) {
+    public static GLMesh genTangentLines(GLMesh mesh, float scale) {
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         FloatBuffer normalBuffer = (FloatBuffer) mesh.getBuffer(Type.Normal).getData();
         FloatBuffer tangentBuffer = (FloatBuffer) mesh.getBuffer(Type.Tangent).getData();
@@ -135,8 +135,8 @@ public static Mesh genTangentLines(Mesh mesh, float scale) {
         ColorRGBA binormalColor = ColorRGBA.Green;
         ColorRGBA normalColor = ColorRGBA.Blue;
 
-        Mesh lineMesh = new Mesh();
-        lineMesh.setMode(Mesh.Mode.Lines);
+        GLMesh lineMesh = new GLMesh();
+        lineMesh.setMode(GLMesh.Mode.Lines);
 
         Vector3f origin = new Vector3f();
         Vector3f point = new Vector3f();
diff --git a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
index 18417b6b4c..ac9197acc1 100644
--- a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
+++ b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
@@ -31,7 +31,7 @@
  */
 package com.jme3.util.mikktspace;
 
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.util.BufferUtils;
@@ -43,10 +43,10 @@
  */
 public class MikkTSpaceImpl implements MikkTSpaceContext {
 
-    Mesh mesh;
+    GLMesh mesh;
     final private IndexBuffer index;
 
-    public MikkTSpaceImpl(Mesh mesh) {
+    public MikkTSpaceImpl(GLMesh mesh) {
         this.mesh = mesh;
 
         // If the mesh lacks indices, generate a virtual index buffer.
diff --git a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
index 0f272bd080..5fec028ecc 100644
--- a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
+++ b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
@@ -112,7 +112,7 @@ public static void generate(Spatial s){
 
         } else if (s instanceof Geometry) {
             Geometry g = (Geometry) s;
-            Mesh mesh = g.getMesh();
+            GLMesh mesh = g.getMesh();
             boolean success = generateTangents(mesh);
             if (!success) {
                 logger.log(Level.SEVERE, "Failed to generate tangents for geometry {0}", g.getName());
@@ -120,15 +120,15 @@ public static void generate(Spatial s){
         }
     }
 
-    public static void generate(Mesh mesh) {
+    public static void generate(GLMesh mesh) {
         boolean success = generateTangents(mesh);
         if (!success) {
             logger.log(Level.SEVERE, "Failed to generate tangents for mesh {0}", mesh);
         }
     }
 
-    private static boolean generateTangents(Mesh mesh) {
-        Mesh.Mode mode = mesh.getMode();
+    private static boolean generateTangents(GLMesh mesh) {
+        GLMesh.Mode mode = mesh.getMode();
         boolean hasTriangles;
         
         if (mesh.getBuffer(Type.TexCoord) == null || mesh.getBuffer(Type.Normal) == null) {
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java b/jme3-core/src/main/java/com/jme3/util/natives/AbstractNative.java
similarity index 86%
rename from jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java
rename to jme3-core/src/main/java/com/jme3/util/natives/AbstractNative.java
index e364df5a5d..c5b1e60190 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/AbstractNative.java
+++ b/jme3-core/src/main/java/com/jme3/util/natives/AbstractNative.java
@@ -1,7 +1,5 @@
-package com.jme3.vulkan;
+package com.jme3.util.natives;
 
-import com.jme3.util.natives.Native;
-import com.jme3.util.natives.NativeReference;
 import org.lwjgl.system.MemoryStack;
 
 public abstract class AbstractNative implements Native {
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java b/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java
index b03e28f4e7..86f6c5602e 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/VulkanInstance.java
@@ -1,6 +1,7 @@
 package com.jme3.vulkan;
 
 import com.jme3.system.JmeVersion;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.util.natives.Native;
 import org.lwjgl.PointerBuffer;
 import org.lwjgl.glfw.GLFWVulkan;
@@ -11,6 +12,7 @@
 import org.lwjgl.vulkan.VkInstanceCreateInfo;
 
 import java.util.*;
+import java.util.logging.Level;
 
 import static com.jme3.renderer.vulkan.VulkanUtils.*;
 import static org.lwjgl.vulkan.VK10.*;
@@ -25,6 +27,7 @@ public class VulkanInstance extends AbstractNative {
     private String appName = "Unnamed App";
     private int appVersion = VK_MAKE_VERSION(0, 0, 0);
     private int apiVersion;
+    private VulkanLogger logger;
 
     public VulkanInstance() {
         this(VK_API_VERSION_1_0);
@@ -39,6 +42,14 @@ public Runnable createNativeDestroyer() {
         return () -> vkDestroyInstance(object, null);
     }
 
+    public VulkanLogger createLogger(Level exceptionThreshold) {
+        return logger = new VulkanLogger(this, exceptionThreshold);
+    }
+
+    public VulkanLogger getLogger() {
+        return logger;
+    }
+
     public Set getExtensions() {
         return extensions;
     }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java
index 01878c12e0..4c72abcb85 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BasicVulkanBuffer.java
@@ -2,7 +2,7 @@
 
 import com.jme3.renderer.vulkan.VulkanUtils;
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.memory.MemoryProp;
 import com.jme3.vulkan.memory.MemoryRegion;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java
index ff41f587a6..11c8f8cced 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/DescriptorSet.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.descriptors;
 
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import org.lwjgl.system.MemoryStack;
 import org.lwjgl.vulkan.VkWriteDescriptorSet;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java b/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java
index fa453884fe..af92f359a0 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/devices/LogicalDevice.java
@@ -2,7 +2,7 @@
 
 import com.jme3.util.natives.Native;
 import com.jme3.vulkan.VulkanInstance;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.commands.CommandPool;
 import com.jme3.vulkan.commands.Queue;
 import com.jme3.vulkan.util.Flag;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java
index c913b1588d..c23314215d 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/frames/PerFrameResource.java
@@ -1,6 +1,7 @@
 package com.jme3.vulkan.frames;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.function.IntFunction;
 
@@ -42,4 +43,9 @@ public int getNumResources() {
         return resources.size();
     }
 
+    @Override
+    public Iterator iterator() {
+        return resources.iterator();
+    }
+
 }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java
index e3207111cd..4e3e6972cc 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/frames/SingleResource.java
@@ -1,5 +1,7 @@
 package com.jme3.vulkan.frames;
 
+import java.util.Iterator;
+
 public class SingleResource  implements VersionedResource {
 
     private T resource;
@@ -35,4 +37,31 @@ public int getNumResources() {
         return 1;
     }
 
+    @Override
+    public Iterator iterator() {
+        return new IteratorImpl<>(resource);
+    }
+
+    private static class IteratorImpl  implements Iterator {
+
+        private T value;
+
+        public IteratorImpl(T value) {
+            this.value = value;
+        }
+
+        @Override
+        public boolean hasNext() {
+            return value != null;
+        }
+
+        @Override
+        public T next() {
+            T v = value;
+            value = null;
+            return v;
+        }
+
+    }
+
 }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java b/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java
index ea14b3d4b3..f18b1c0f36 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/frames/VersionedResource.java
@@ -5,7 +5,7 @@
  *
  * @param  resource type
  */
-public interface VersionedResource {
+public interface VersionedResource extends Iterable {
 
     /**
      * Sets the resource for the current frame.
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java
index 046a6b7144..509bb5fd86 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java
@@ -2,7 +2,7 @@
 
 import com.jme3.util.natives.Native;
 import com.jme3.util.natives.NativeReference;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.Format;
 import com.jme3.vulkan.SharingMode;
 import com.jme3.vulkan.commands.CommandBuffer;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java b/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java
index 74d3ebb750..62d558a4e6 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.images;
 
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.Swizzle;
 import com.jme3.vulkan.util.Flag;
 import com.jme3.vulkan.util.IntEnum;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java
index 1f011a9960..43be80e270 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.images;
 
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pipelines.CompareOp;
 import com.jme3.vulkan.util.IntEnum;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
index 1821e4009f..0d8bb0f4b1 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
@@ -23,8 +23,9 @@ protected enum VertexMode {
 
     protected final MeshDescription description;
     private final List vertexBuffers = new ArrayList<>();
-    protected VersionedResource indexBuffer;
-    private BoundingVolume bound;
+    protected final List> indexBuffers = new ArrayList<>();
+    private GpuBuffer boundIndexBuffer;
+    private BoundingVolume volume;
     private int vertices;
 
     public AdaptiveMesh(MeshDescription description) {
@@ -44,15 +45,18 @@ public void bind(CommandBuffer cmd) {
             offsets.flip();
             vkCmdBindVertexBuffers(cmd.getBuffer(), 0, verts, offsets);
         }
-        if (indexBuffer != null) {
-            vkCmdBindIndexBuffer(cmd.getBuffer(), indexBuffer.get().getId(), 0, IndexType.of(indexBuffer.get()).getEnum());
+        if (!indexBuffers.isEmpty()) {
+            boundIndexBuffer = indexBuffers.get(0).get();
+            vkCmdBindIndexBuffer(cmd.getBuffer(), boundIndexBuffer.getId(), 0, IndexType.of(boundIndexBuffer).getEnum());
+        } else {
+            boundIndexBuffer = null;
         }
     }
 
     @Override
     public void draw(CommandBuffer cmd) {
-        if (indexBuffer != null) {
-            vkCmdDrawIndexed(cmd.getBuffer(), indexBuffer.get().size().getElements(), 1, 0, 0, 0);
+        if (boundIndexBuffer != null) {
+            vkCmdDrawIndexed(cmd.getBuffer(), boundIndexBuffer.size().getElements(), 1, 0, 0, 0);
         } else {
             vkCmdDraw(cmd.getBuffer(), vertices, 1, 0, 0);
         }
@@ -65,7 +69,7 @@ public int getVertexCount() {
 
     @Override
     public int getTriangleCount() {
-        return indexBuffer != null ? indexBuffer.get().size().getElements() / 3 : 0;
+        return !indexBuffers.isEmpty() ? indexBuffers.get(0).get().size().getElements() / 3 : 0;
     }
 
     protected void updateBound(AttributeModifier attribute) {
@@ -107,7 +111,7 @@ protected AttributeModifier modifyAttribute(BuiltInAttribute name) {
 
     protected abstract VersionedResource createStaticBuffer(MemorySize size);
 
-    protected Builder build(int vertices) {
+    protected Builder buildVertexBuffers(int vertices) {
         return new Builder(vertices);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
index cc0ce22a7d..8d12bf3843 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
@@ -27,13 +27,15 @@ public MyCustomMesh(LogicalDevice device,
         this.device = device;
         this.frames = frames;
         this.updateStaticBuffers = updateSharedBuffers;
-        StaticBuffer indices = new StaticBuffer(device, MemorySize.shorts(6), BufferUsage.Index, MemoryProp.DeviceLocal, false);
-        ShortBuffer iBuf = indices.mapShorts();
-        iBuf.put((short)0).put((short)2).put((short)3)
-            .put((short)0).put((short)1).put((short)2);
-        indices.unmap();
-        indexBuffer = updateSharedBuffers.add(new SingleCommand<>(indices));
-        try (Builder m = build(4)) {
+        VersionedResource indices = createStaticBuffer(MemorySize.shorts(6));
+        indexBuffers.add(indices);
+        for (GpuBuffer buf : indices) {
+            ShortBuffer iBuf = buf.mapShorts();
+            iBuf.put((short)0).put((short)2).put((short)3)
+                .put((short)0).put((short)1).put((short)2);
+            buf.unmap();
+        }
+        try (Builder m = buildVertexBuffers(4)) {
             m.setMode(BuiltInAttribute.Position, VertexMode.Static);
             m.setMode(BuiltInAttribute.TexCoord, VertexMode.Static);
             m.setMode(BuiltInAttribute.Normal, VertexMode.Static);
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java b/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java
index 8d8c46ade5..5788f3c21e 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/pass/RenderPass.java
@@ -3,7 +3,7 @@
 import com.jme3.util.natives.Native;
 import com.jme3.vulkan.Format;
 import com.jme3.vulkan.commands.CommandBuffer;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pipelines.FrameBuffer;
 import com.jme3.vulkan.pipelines.PipelineBindPoint;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java
index 79858502ba..aec10648fc 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/GraphicsPipeline.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.pipelines;
 
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.*;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pass.RenderPass;
 import com.jme3.vulkan.pipelines.states.*;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java
index 0b03611ffe..10037d5286 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/Pipeline.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.pipelines;
 
 import com.jme3.vulkan.commands.CommandBuffer;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 
 import static org.lwjgl.vulkan.VK10.*;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java
index c71be87f88..952a73c000 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java
@@ -1,5 +1,6 @@
 package com.jme3.vulkan.surface;
 
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.util.natives.Native;
 import com.jme3.util.natives.NativeReference;
 import com.jme3.vulkan.*;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java b/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java
index b14c7d19e9..a8bc0c3572 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/sync/Semaphore.java
@@ -1,7 +1,7 @@
 package com.jme3.vulkan.sync;
 
 import com.jme3.util.natives.Native;
-import com.jme3.vulkan.AbstractNative;
+import com.jme3.util.natives.AbstractNative;
 import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.pipelines.PipelineStage;
 import com.jme3.vulkan.util.Flag;
diff --git a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
index cd2b4a29e8..d1f198ad12 100644
--- a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
+++ b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
@@ -38,7 +38,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.scene.*;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.scene.mesh.IndexIntBuffer;
@@ -417,7 +417,7 @@ protected Geometry createGeometry(ArrayList faceList, String matName) thro
             throw new IOException("No geometry data to generate mesh");
 
         // Create mesh from the faces
-        Mesh mesh = constructMesh(faceList);
+        GLMesh mesh = constructMesh(faceList);
         
         Geometry geom = new Geometry(objName + "-geom-" + (geomIndex++), mesh);
         
@@ -446,8 +446,8 @@ protected Geometry createGeometry(ArrayList faceList, String matName) thro
         return geom;
     }
 
-    protected Mesh constructMesh(ArrayList faceList){
-        Mesh m = new Mesh();
+    protected GLMesh constructMesh(ArrayList faceList){
+        GLMesh m = new GLMesh();
         m.setMode(Mode.Triangles);
 
         boolean hasTexCoord = false;
diff --git a/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java b/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
index 0a4a04249d..d4ec411e41 100644
--- a/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
+++ b/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.shape.Quad;
 import com.jme3.system.JmeSystem;
@@ -77,7 +77,7 @@ void castRay(Ray ray, int expectedNumResults) {
      * 0). It is composed of 2 triangles.
      */
     void createRedSquare() {
-        Mesh quadMesh = new Quad(1f, 1f);
+        GLMesh quadMesh = new Quad(1f, 1f);
         Geometry redSquare = new Geometry("red square", quadMesh);
         Material red = assetManager.loadMaterial("Common/Materials/RedColor.j3m");
         redSquare.setMaterial(red);
diff --git a/jme3-core/src/test/java/com/jme3/light/LightSortTest.java b/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
index 1be8305bc8..5a53a81504 100644
--- a/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
+++ b/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import org.junit.Test;
 
@@ -46,7 +46,7 @@ public class LightSortTest {
     
     @Test
     public void testSimpleSort() {
-        Geometry g = new Geometry("test", new Mesh());
+        Geometry g = new Geometry("test", new GLMesh());
         LightList list = new LightList(g);
         
         list.add(new SpotLight(Vector3f.ZERO, Vector3f.UNIT_X));
@@ -65,7 +65,7 @@ public void testSimpleSort() {
     @Test
     public void testSceneGraphSort() {
         Node n = new Node("node");
-        Geometry g = new Geometry("geom", new Mesh());
+        Geometry g = new Geometry("geom", new GLMesh());
         SpotLight spot = new SpotLight(Vector3f.ZERO, Vector3f.UNIT_X);
         PointLight point = new PointLight(Vector3f.UNIT_X);
         DirectionalLight directional = new DirectionalLight(Vector3f.UNIT_X);
diff --git a/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java b/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
index 929281819e..6595f43d68 100644
--- a/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
+++ b/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
@@ -38,7 +38,7 @@
 import com.jme3.renderer.queue.GeometryList;
 import com.jme3.renderer.queue.OpaqueComparator;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.shape.Box;
 import com.jme3.system.TestUtil;
 import com.jme3.texture.Image;
@@ -55,7 +55,7 @@
 
 public class OpaqueComparatorTest {
     
-    private final Mesh mesh = new Box(1,1,1);
+    private final GLMesh mesh = new Box(1,1,1);
     final private Camera cam = new Camera(1, 1);
     private RenderManager renderManager;
     private AssetManager assetManager;
diff --git a/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java b/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
index e7f1013f62..abc6e52246 100644
--- a/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
@@ -84,7 +84,7 @@ void castRay() {
      * 0). It is composed of 2 triangles.
      */
     void createRedSquare() {
-        Mesh quadMesh = new Quad(1f, 1f);
+        GLMesh quadMesh = new Quad(1f, 1f);
         Geometry redSquare = new Geometry("red square", quadMesh);
         Material red = assetManager.loadMaterial("Common/Materials/RedColor.j3m");
         redSquare.setMaterial(red);
@@ -95,8 +95,8 @@ void createRedSquare() {
      * Attach a pair of parallel white lines in the z=1 plane.
      */
     void createWhiteLines() {
-        Mesh lineMesh = new Mesh();
-        lineMesh.setMode(Mesh.Mode.Lines);
+        GLMesh lineMesh = new GLMesh();
+        lineMesh.setMode(GLMesh.Mode.Lines);
         float[] corners = new float[]{
             -1f, -1f, 0f,
             -1f, 1f, 0f,
diff --git a/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java b/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
index 27f0cda591..f40e42a90c 100644
--- a/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
@@ -36,7 +36,7 @@
 
 import org.junit.Test;
 
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 
 /**
  * Tests selected methods of the Mesh class.
@@ -50,7 +50,7 @@ public class MeshTest {
      */
     @Test
     public void testVertexCountOfEmptyMesh() {
-        final Mesh mesh = new Mesh();
+        final GLMesh mesh = new GLMesh();
 
         assertEquals(-1, mesh.getVertexCount());
     }
diff --git a/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java b/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
index a81ed9f5aa..ea6cc2d3dc 100644
--- a/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
@@ -1,6 +1,6 @@
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh.Mode;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
diff --git a/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java b/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
index cdf1e9fad5..72dfddbaf5 100644
--- a/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
+++ b/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
@@ -38,7 +38,7 @@
 
 import com.jme3.asset.AssetManager;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -113,8 +113,8 @@ public void testSphereReductionCollapsCost() {
     /**
      * Returns the mesh of a node.
      */
-    private Mesh getMesh(Node node) {
-        Mesh m = null;
+    private GLMesh getMesh(Node node) {
+        GLMesh m = null;
         for (Spatial spatial : node.getChildren()) {
             if (spatial instanceof Geometry) {
                 m = ((Geometry) spatial).getMesh();
@@ -131,7 +131,7 @@ private Mesh getMesh(Node node) {
      * Returns the Monkey mesh used in the TestLodGeneration stresstest. Note: Doesn't work durring gradle
      * build.
      */
-    private Mesh monkey() {
+    private GLMesh monkey() {
         Node model = (Node) assetManager.loadModel("Models/Jaime/Jaime.j3o");
         return getMesh(model);
     }
@@ -139,7 +139,7 @@ private Mesh monkey() {
     /**
      * Returns a 12x12 Sphere mesh.
      */
-    private Mesh sphere() {
+    private GLMesh sphere() {
         return new Sphere(12, 12, 1, false, false);
     }
 
diff --git a/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java b/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
index 3cc91ef6f6..1fa3ff9bee 100644
--- a/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
+++ b/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
@@ -32,7 +32,7 @@
 package com.jme3.util;
 
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.mikktspace.MikktspaceTangentGenerator;
 import java.nio.FloatBuffer;
@@ -81,7 +81,7 @@ public void testIssue1909() {
                 +posRadius, 0f, -posRadius,
                 -posRadius, 0f, -posRadius
         );
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         int numAxes = 3;
         mesh.setBuffer(VertexBuffer.Type.Normal, numAxes, normals);
         mesh.setBuffer(VertexBuffer.Type.Position, numAxes, positions);
diff --git a/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java b/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
index 87283c1c9a..b662f28419 100644
--- a/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
+++ b/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
@@ -32,7 +32,7 @@
 package com.jme3.util;
 
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.mikktspace.MikktspaceTangentGenerator;
 import java.nio.FloatBuffer;
@@ -56,7 +56,7 @@ public class TestIssue1919 {
      */
     @Test(expected = UnsupportedOperationException.class)
     public void testHybrid() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.Hybrid);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.Hybrid);
         MikktspaceTangentGenerator.generate(testGeometry);
     }
 
@@ -65,10 +65,10 @@ public void testHybrid() {
      */
     @Test
     public void testLineLoop() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.LineLoop);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.LineLoop);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        Mesh mesh = testGeometry.getMesh();
+        GLMesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); /// skipped this mesh
     }
@@ -78,10 +78,10 @@ public void testLineLoop() {
      */
     @Test
     public void testLineStrip() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.LineStrip);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.LineStrip);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        Mesh mesh = testGeometry.getMesh();
+        GLMesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); /// skipped this mesh
     }
@@ -91,10 +91,10 @@ public void testLineStrip() {
      */
     @Test
     public void testLines() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.Lines);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.Lines);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        Mesh mesh = testGeometry.getMesh();
+        GLMesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); // skipped this mesh
     }
@@ -104,7 +104,7 @@ public void testLines() {
      */
     @Test(expected = UnsupportedOperationException.class)
     public void testPatch() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.Patch);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.Patch);
         MikktspaceTangentGenerator.generate(testGeometry);
     }
 
@@ -113,10 +113,10 @@ public void testPatch() {
      */
     @Test
     public void testPoints() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.Points);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.Points);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        Mesh mesh = testGeometry.getMesh();
+        GLMesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); // skipped this mesh
     }
@@ -126,10 +126,10 @@ public void testPoints() {
      */
     @Test
     public void testTriangles() {
-        Geometry testGeometry = createGeometry(Mesh.Mode.Triangles);
+        Geometry testGeometry = createGeometry(GLMesh.Mode.Triangles);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        Mesh mesh = testGeometry.getMesh();
+        GLMesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNotNull(tangents); // generated tangents
     }
@@ -140,7 +140,7 @@ public void testTriangles() {
      * @param mode the desired mode (not null)
      * @return a new geometry
      */
-    private Geometry createGeometry(Mesh.Mode mode) {
+    private Geometry createGeometry(GLMesh.Mode mode) {
         FloatBuffer normals = BufferUtils.createFloatBuffer(
                 0f, 1f, 0f,
                 0f, 1f, 0f,
@@ -167,7 +167,7 @@ private Geometry createGeometry(Mesh.Mode mode) {
                 +posRadius, 0f, -posRadius,
                 -posRadius, 0f, -posRadius
         );
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         mesh.setMode(mode);
         mesh.setBuffer(VertexBuffer.Type.Normal, numAxes, normals);
         mesh.setBuffer(VertexBuffer.Type.Position, numAxes, positions);
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
index 98ccf9c35b..fc8261591f 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
@@ -5,7 +5,7 @@
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.*;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer.Format;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -94,7 +94,7 @@ private static void doTransformTangents(FloatBuffer inBuf, int offset, int compo
      * @param geometries the geometries to merge
      * @param outMesh a Mesh to receive the geometries
      */
-    public static void mergeGeometries(Collection geometries, Mesh outMesh) {
+    public static void mergeGeometries(Collection geometries, GLMesh outMesh) {
         int[] compsForBuf = new int[VertexBuffer.Type.values().length];
         Format[] formatForBuf = new Format[compsForBuf.length];
          boolean[] normForBuf = new boolean[VertexBuffer.Type.values().length];
@@ -188,7 +188,7 @@ public static void mergeGeometries(Collection geometries, Mesh outMesh
         int globalTriIndex = 0;
 
         for (Geometry geom : geometries) {
-            Mesh inMesh = geom.getMesh();
+            GLMesh inMesh = geom.getMesh();
             geom.computeWorldMatrix();
             Matrix4f worldMatrix = geom.getWorldMatrix();
 
@@ -238,7 +238,7 @@ public static void mergeGeometries(Collection geometries, Mesh outMesh
         }
     }
 
-    public static void makeLods(Collection geometries, Mesh outMesh) {
+    public static void makeLods(Collection geometries, GLMesh outMesh) {
         // Determine number of LOD levels required.
         int lodLevels = Integer.MAX_VALUE;
         for (Geometry g : geometries) {
@@ -338,7 +338,7 @@ public static List makeBatches(Collection geometries, boolea
         for (Map.Entry> entry : matToGeom.entrySet()) {
             Material mat = entry.getKey();
             List geomsForMat = entry.getValue();
-            Mesh mesh = new Mesh();
+            GLMesh mesh = new GLMesh();
             mergeGeometries(geomsForMat, mesh);
             // lods
             if (useLods) {
@@ -406,7 +406,7 @@ public static Node optimize(Node scene, boolean useLods) {
         return scene;
     }
 
-    public static void printMesh(Mesh mesh) {
+    public static void printMesh(GLMesh mesh) {
         for (int bufType = 0; bufType < Type.values().length; bufType++) {
             VertexBuffer outBuf = mesh.getBuffer(Type.values()[bufType]);
             if (outBuf == null) {
@@ -433,7 +433,7 @@ public static void printMesh(Mesh mesh) {
     }
 
     public static void main(String[] args) {
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         mesh.setBuffer(Type.Position, 3, new float[]{
                     0, 0, 0,
                     1, 0, 0,
@@ -452,7 +452,7 @@ public static void main(String[] args) {
         ArrayList geoms = new ArrayList<>();
         geoms.add(g1);
 
-        Mesh outMesh = new Mesh();
+        GLMesh outMesh = new GLMesh();
         mergeGeometries(geoms, outMesh);
         printMesh(outMesh);
     }
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java b/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
index 648f85f070..af22aa7432 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
@@ -50,7 +50,7 @@
 import com.jme3.bounding.BoundingSphere;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.BufferUtils;
 import java.nio.Buffer;
@@ -108,7 +108,7 @@ public class LodGenerator {
     private List triangleList;
     private List vertexList = new ArrayList<>();
     private float meshBoundingSphereRadius;
-    private final Mesh mesh;
+    private final GLMesh mesh;
 
     /**
      * Enumerate criteria for removing triangles.
@@ -253,7 +253,7 @@ public int compare(Vertex o1, Vertex o2) {
      *
      * @param mesh the mesh for which to generate LODs.
      */
-    public LodGenerator(Mesh mesh) {
+    public LodGenerator(GLMesh mesh) {
         this.mesh = mesh;
         build();
     }
@@ -282,7 +282,7 @@ private void build() {
         
     }
     
-    private void gatherVertexData(Mesh mesh, List vertexLookup) {
+    private void gatherVertexData(GLMesh mesh, List vertexLookup) {
 
         //in case the model is currently animating with software animation
         //attempting to retrieve the bind position instead of the position.
@@ -321,7 +321,7 @@ private Vertex findSimilar(Vertex v) {
         return null;
     }
     
-    private void gatherIndexData(Mesh mesh, List vertexLookup) {
+    private void gatherIndexData(GLMesh mesh, List vertexLookup) {
         VertexBuffer indexBuffer = mesh.getBuffer(VertexBuffer.Type.Index);
         indexCount = indexBuffer.getNumElements() * 3;
         Buffer b = indexBuffer.getDataReadOnly();
@@ -611,7 +611,7 @@ public void bakeLods(TriangleReductionMethod reductionMethod, float... reduction
         mesh.setLodLevels(computeLods(reductionMethod, reductionValues));
     }
     
-    private VertexBuffer makeLod(Mesh mesh) {
+    private VertexBuffer makeLod(GLMesh mesh) {
         VertexBuffer indexBuffer = mesh.getBuffer(VertexBuffer.Type.Index);
         
         boolean isShortBuffer = indexBuffer.getFormat() == VertexBuffer.Format.UnsignedShort;
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java b/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
index 9447b2d956..60d31a2faa 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
@@ -37,7 +37,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector2f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
@@ -433,8 +433,8 @@ public boolean applyCoords(Geometry geom) {
      * @param outMesh The mesh to set the coords in (can be same as input).
      * @return true if texture has been found and coords have been changed, false otherwise.
      */
-    public boolean applyCoords(Geometry geom, int offset, Mesh outMesh) {
-        Mesh inMesh = geom.getMesh();
+    public boolean applyCoords(Geometry geom, int offset, GLMesh outMesh) {
+        GLMesh inMesh = geom.getMesh();
         geom.computeWorldMatrix();
 
         VertexBuffer inBuf = inMesh.getBuffer(Type.TexCoord);
@@ -499,7 +499,7 @@ public static Geometry makeAtlasBatch(Spatial spat, AssetManager mgr, int atlasS
             return null;
         }
         Geometry geom = new Geometry();
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         GeometryBatchFactory.mergeGeometries(geometries, mesh);
         applyAtlasCoords(geometries, mesh, atlas);
         mesh.updateCounts();
@@ -525,11 +525,11 @@ public static Geometry makeAtlasBatch(Spatial spat, AssetManager mgr, int atlasS
         return geom;
     }
 
-    private static void applyAtlasCoords(List geometries, Mesh outMesh, TextureAtlas atlas) {
+    private static void applyAtlasCoords(List geometries, GLMesh outMesh, TextureAtlas atlas) {
         int globalVertIndex = 0;
 
         for (Geometry geom : geometries) {
-            Mesh inMesh = geom.getMesh();
+            GLMesh inMesh = geom.getMesh();
             geom.computeWorldMatrix();
 
             int geomVertCount = inMesh.getVertexCount();
diff --git a/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java b/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
index 80fcac11b6..d7e2457107 100644
--- a/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
+++ b/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
@@ -38,7 +38,7 @@
 import com.jme3.light.AmbientLight;
 import com.jme3.math.ColorRGBA;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 
@@ -101,7 +101,7 @@ private void testOldAnimationSystem(String assetPath) {
 
         // remove its vertex normals:
         Geometry oldGeometry = (Geometry) oldJaime.getChild(0);
-        Mesh oldMesh = oldGeometry.getMesh();
+        GLMesh oldMesh = oldGeometry.getMesh();
         oldMesh.clearBuffer(VertexBuffer.Type.Normal);
         oldMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
     }
@@ -125,7 +125,7 @@ private void testNewAnimationSystem(String assetPath) {
 
         // remove its vertex normals:
         Geometry newGeometry = (Geometry) newJaime.getChild(0);
-        Mesh newMesh = newGeometry.getMesh();
+        GLMesh newMesh = newGeometry.getMesh();
         newMesh.clearBuffer(VertexBuffer.Type.Normal);
         newMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
     }
diff --git a/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java b/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
index 55ffe02788..f0a3464be1 100644
--- a/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
+++ b/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
@@ -1,6 +1,6 @@
 package jme3test.app;
 
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.system.AppSettings;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -26,7 +26,7 @@ private static void testPreferenceSettings() {
         settings.putInteger("TestInt", 123);
         settings.putString("TestStr", "HelloWorld");
         settings.putFloat("TestFloat", 123.567f);
-        settings.put("TestObj", new Mesh()); // Objects not supported by preferences
+        settings.put("TestObj", new GLMesh()); // Objects not supported by preferences
         
         try {
             settings.save(APPSETTINGS_KEY);
@@ -58,7 +58,7 @@ private static void testFileSettings() {
         settings.putInteger("TestInt", 123);
         settings.putString("TestStr", "HelloWorld");
         settings.putFloat("TestFloat", 123.567f);
-        settings.put("TestObj", new Mesh()); // Objects not supported by file settings
+        settings.put("TestObj", new GLMesh()); // Objects not supported by file settings
         
         try {
             settings.save(baos);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java b/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
index 2c5590ce63..046fe5606c 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
@@ -39,7 +39,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -98,7 +98,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java b/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
index a996431655..de6156428e 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
@@ -13,7 +13,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.debug.Arrow;
@@ -116,7 +116,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java b/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
index 1e1731d2b8..677172b356 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
@@ -40,7 +40,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -111,7 +111,7 @@ private BitmapText createLabelText(int x, int y, String text) {
         return bmp;
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestOgg.java b/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
index 55cd7bf452..4d49d1d1c0 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
@@ -47,7 +47,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -196,7 +196,7 @@ private BitmapText createLabelText(int x, int y, String text) {
         return bmp;
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestReverb.java b/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
index e21a870993..592dd87625 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
@@ -45,7 +45,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -116,7 +116,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java b/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
index 59d02d64c8..d5a5d5d665 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
@@ -49,7 +49,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Box;
@@ -301,7 +301,7 @@ private static Geometry createTestFloor(AssetManager assetManager, float floorDi
         return floor;
     }
 
-    private static Mesh createFloorMesh(int meshDetail, float floorDimensions) {
+    private static GLMesh createFloorMesh(int meshDetail, float floorDimensions) {
         if (meshDetail < 10) {
             meshDetail = 10;
         }
@@ -351,7 +351,7 @@ private static Mesh createFloorMesh(int meshDetail, float floorDimensions) {
             }
         }
 
-        Mesh m = new Mesh();
+        GLMesh m = new GLMesh();
         m.setBuffer(VertexBuffer.Type.Index, 1, BufferUtils.createIntBuffer(indexBuf));
         m.setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(vertBuf));
         m.updateBound();
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java b/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
index d374ae5645..a8743f5327 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
@@ -50,7 +50,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Cylinder;
 import com.jme3.system.AppSettings;
@@ -184,7 +184,7 @@ private void dropTest() {
         attachTestObject(new Cylinder(2, 16, 0.2f, 2f, true), new Vector3f(-3f, 2f, -5f), 2);
     }
 
-    private void attachTestObject(Mesh mesh, Vector3f position, float mass) {
+    private void attachTestObject(GLMesh mesh, Vector3f position, float mass) {
         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         Geometry g = new Geometry("mesh", mesh);
         g.setLocalTranslation(position);
diff --git a/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java b/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
index f564790411..66522d7518 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
@@ -48,7 +48,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.PQTorus;
@@ -290,7 +290,7 @@ private RigidBodyControl drop(Vector3f offset, String model, float scale, float
         Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
         tp.setMaterial(mat);
 
-        Mesh mesh = tp.getMesh();
+        GLMesh mesh = tp.getMesh();
         GImpactCollisionShape shape = new GImpactCollisionShape(mesh);
         shape.setScale(new Vector3f(scale, scale, scale));
 
@@ -300,7 +300,7 @@ private RigidBodyControl drop(Vector3f offset, String model, float scale, float
         return control;
     }
 
-    private void attachTestObject(Mesh mesh, Vector3f position, float mass) {
+    private void attachTestObject(GLMesh mesh, Vector3f position, float mass) {
         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         material.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg"));
         Geometry g = new Geometry("mesh", mesh);
diff --git a/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java b/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
index e3c1ba136b..f148327212 100644
--- a/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
+++ b/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
@@ -36,7 +36,7 @@
 import com.jme3.bounding.BoundingSphere;
 import com.jme3.material.Material;
 import com.jme3.math.FastMath;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
 
@@ -58,7 +58,7 @@ public void simpleInitApp() {
         // load material
         Material mat = assetManager.loadMaterial("Interface/Logo/Logo.j3m");
 
-        Mesh q = new Mesh();
+        GLMesh q = new GLMesh();
         q.setBuffer(Type.Position, 3, new float[]
         {
             1, 0, 0,
diff --git a/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java b/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
index 6d20ea1fc2..2327846adf 100644
--- a/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
+++ b/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
@@ -43,7 +43,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Box;
 
@@ -61,7 +61,7 @@ public static void main(String[] args) {
     @Override
     public void simpleInitApp() {
         // Create two boxes
-        Mesh mesh1 = new Box(0.5f, 0.5f, 0.5f);
+        GLMesh mesh1 = new Box(0.5f, 0.5f, 0.5f);
         geom1 = new Geometry("Box", mesh1);
         geom1.move(2, 2, -.5f);
         Material m1 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
diff --git a/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java b/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
index 04aca57e8f..01a7d54503 100644
--- a/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
+++ b/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
@@ -53,7 +53,7 @@
 import com.jme3.post.FilterPostProcessor;
 import com.jme3.post.filters.FogFilter;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Sphere;
@@ -75,9 +75,9 @@ public class WorldOfInception extends SimpleApplication implements AnalogListene
     private static final float poiRadius = 100;
     private static final int poiCount = 30;
     private static Material poiMaterial;
-    private static Mesh poiMesh;
+    private static GLMesh poiMesh;
     private static Material ballMaterial;
-    private static Mesh ballMesh;
+    private static GLMesh ballMesh;
     private static CollisionShape poiHorizonCollisionShape;
     private static CollisionShape poiCollisionShape;
     private static CollisionShape ballCollisionShape;
diff --git a/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java b/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
index d98619a2b2..53586dda51 100644
--- a/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
+++ b/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
@@ -225,7 +225,7 @@ public void makeAreaGeom() {
         points[6].set(1, 1, -1);
         points[7].set(1, -1, -1);
 
-        Mesh box = WireFrustum.makeFrustum(points);
+        GLMesh box = WireFrustum.makeFrustum(points);
         areaGeom = new Geometry("light", box);
         areaGeom.setMaterial(new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"));
         areaGeom.getMaterial().setColor("Color", ColorRGBA.White);
diff --git a/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java b/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
index 2337c0bca9..33e281b501 100644
--- a/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
+++ b/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
@@ -38,8 +38,8 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.shape.Quad;
@@ -71,7 +71,7 @@ public void simpleInitApp() {
         quadMesh.updateGeometry(1, 1);
         addMesh("Quad", quadMesh, new Vector3f(1, 0, 0));
 
-        Mesh strip = createTriangleStripMesh();
+        GLMesh strip = createTriangleStripMesh();
         addMesh("strip", strip, new Vector3f(0, -3, 0));
         
         DirectionalLight dl = new DirectionalLight();
@@ -80,7 +80,7 @@ public void simpleInitApp() {
         rootNode.addLight(dl);
     }
 
-    private void addMesh(String name, Mesh mesh, Vector3f translation) {
+    private void addMesh(String name, GLMesh mesh, Vector3f translation) {
         MikktspaceTangentGenerator.generate(mesh);
 
         Geometry testGeom = new Geometry(name, mesh);
@@ -104,8 +104,8 @@ private void addMesh(String name, Mesh mesh, Vector3f translation) {
     public void simpleUpdate(float tpf){
     }
 
-    private Mesh createTriangleStripMesh() {
-        Mesh strip = new Mesh();
+    private GLMesh createTriangleStripMesh() {
+        GLMesh strip = new GLMesh();
         strip.setMode(Mode.TriangleStrip);
         FloatBuffer vb = BufferUtils.createFloatBuffer(3*3*3); // 3 rows * 3 columns * 3 floats
         vb.rewind();
diff --git a/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java b/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
index e169d27850..24fbe6bbf2 100644
--- a/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
+++ b/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
@@ -35,7 +35,7 @@
 import com.jme3.light.LightProbe;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.shape.CenterQuad;
 import com.jme3.system.AppSettings;
 
@@ -74,7 +74,7 @@ public void simpleInitApp() {
         flyCam.setEnabled(false);
 
         // Attach a 9x9 quad at the origin.
-        Mesh mesh = new CenterQuad(9f, 9f);
+        GLMesh mesh = new CenterQuad(9f, 9f);
         Geometry quad = new Geometry("quad", mesh);
         rootNode.attachChild(quad);
 
diff --git a/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java b/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
index 0199d70cc2..7e1fd9ffdf 100644
--- a/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
+++ b/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
@@ -5,7 +5,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Sphere;
 import com.jme3.system.AppSettings;
@@ -17,10 +17,10 @@
 public class TestGeometryShader extends SimpleApplication {
     @Override
     public void simpleInitApp() {
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         mesh.setBuffer(VertexBuffer.Type.Index, 1, BufferUtils.createIntBuffer(new int[]{1}));
         mesh.setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(new float[]{0, 0, 0}));
-        mesh.setMode(Mesh.Mode.Points);
+        mesh.setMode(GLMesh.Mode.Points);
         mesh.setBound(new BoundingBox(new Vector3f(0, 0, 0), 10, 10, 10));
         mesh.updateCounts();
         Geometry geometry = new Geometry("Test", mesh);
diff --git a/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java b/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
index a5af58bfc5..acae970f2d 100644
--- a/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
+++ b/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
@@ -6,7 +6,7 @@
 import com.jme3.input.controls.KeyTrigger;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Quad;
 import com.jme3.system.AppSettings;
@@ -28,7 +28,7 @@ public void simpleInitApp() {
         Quad quad = new Quad(10, 10);
         quad.clearBuffer(VertexBuffer.Type.Index);
         quad.setBuffer(VertexBuffer.Type.Index, 4, BufferUtils.createIntBuffer(0, 1, 2, 3));
-        quad.setMode(Mesh.Mode.Patch);
+        quad.setMode(GLMesh.Mode.Patch);
         quad.setPatchVertexCount(4);
         Geometry geometry = new Geometry("tessTest", quad);
         geometry.setMaterial(tessellationMaterial);
diff --git a/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java b/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
index ef264b95d1..8b2f2cfd5b 100644
--- a/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
+++ b/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
@@ -7,7 +7,7 @@
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Arrow;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.debug.WireSphere;
@@ -73,7 +73,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java b/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
index 6c71144286..52361613ab 100644
--- a/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
+++ b/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
@@ -167,7 +167,7 @@ public void onAction(String name, boolean isPressed, float tpf) {
         }, "bind");
     }
 
-    private Mesh createMesh() {
+    private GLMesh createMesh() {
         Cylinder c = new Cylinder(30, 16, 0.1f, 1, true);
 
         ShortBuffer jointIndex = (ShortBuffer) VertexBuffer.createBuffer(VertexBuffer.Format.UnsignedShort, 4, c.getVertexCount());
diff --git a/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java b/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
index 5a5934142c..7f2ce7e611 100644
--- a/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
+++ b/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
@@ -191,7 +191,7 @@ public void onAction(String name, boolean isPressed, float tpf) {
         }, "bind");
     }
 
-    private Mesh createMesh() {
+    private GLMesh createMesh() {
         Cylinder c = new Cylinder(30, 16, 0.1f, 1, true);
 
         ShortBuffer jointIndex = (ShortBuffer) VertexBuffer.createBuffer(VertexBuffer.Format.UnsignedShort, 4, c.getVertexCount());
diff --git a/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java b/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
index 5f205def3b..524377c226 100644
--- a/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
+++ b/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
@@ -38,7 +38,7 @@
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 
@@ -58,7 +58,7 @@ public static void main(String[] args){
     @Override
     public void simpleInitApp() {
       
-        Mesh m = new Mesh();
+        GLMesh m = new GLMesh();
 
         // Vertex positions in space
         Vector3f [] vertices = new Vector3f[4];
@@ -99,7 +99,7 @@ public void simpleInitApp() {
         // *************************************************************************
         // Second mesh uses vertex colors to color each vertex
         // *************************************************************************
-        Mesh cMesh = m.clone();
+        GLMesh cMesh = m.clone();
         Geometry coloredMesh = new Geometry ("ColoredMesh", cMesh);
         Material matVC = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         matVC.setBoolean("VertexColor", true);
@@ -140,7 +140,7 @@ public void simpleInitApp() {
         // *************************************************************************
         // Third mesh will use a wireframe shader to show wireframe
         // *************************************************************************
-        Mesh wfMesh = m.clone();
+        GLMesh wfMesh = m.clone();
         Geometry wfGeom = new Geometry("wireframeGeometry", wfMesh);
         Material matWireframe = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         matWireframe.setColor("Color", ColorRGBA.Green);
diff --git a/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java b/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
index 25bde0a797..ad5c615d47 100644
--- a/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
+++ b/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
@@ -37,7 +37,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.debug.Arrow;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.debug.WireBox;
@@ -50,7 +50,7 @@ public static void main(String[] args){
         app.start();
     }
 
-    private Geometry putShape(Mesh shape, ColorRGBA color) {
+    private Geometry putShape(GLMesh shape, ColorRGBA color) {
         Geometry g = new Geometry("shape", shape);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.getAdditionalRenderState().setWireframe(true);
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java b/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
index c8c004a9c3..b284485d7b 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
@@ -43,7 +43,7 @@
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Quad;
@@ -95,7 +95,7 @@ public void simpleInitApp() {
 
         float quadHeight = backgroundCamera.getHeight();
         float quadWidth = backgroundCamera.getWidth();
-        Mesh quadMesh = new Quad(quadWidth, quadHeight);
+        GLMesh quadMesh = new Quad(quadWidth, quadHeight);
 
         Spatial quadGeometry = new Geometry("quad geometry", quadMesh);
         quadGeometry.setMaterial(quadMaterial);
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java b/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
index ce276e81d9..237568ce03 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
@@ -36,7 +36,7 @@
 import com.jme3.material.MatParamOverride;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.shape.Box;
 import com.jme3.shader.VarType;
 import com.jme3.texture.Texture;
@@ -71,7 +71,7 @@ public void simpleInitApp() {
         /*
          * Attach a test geometry to the scene.
          */
-        Mesh cubeMesh = new Box(1f, 1f, 1f);
+        GLMesh cubeMesh = new Box(1f, 1f, 1f);
         Geometry cubeGeometry = new Geometry("Box", cubeMesh);
         rootNode.attachChild(cubeGeometry);
         /*
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java b/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
index e73132d314..6cb20609fa 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
@@ -39,7 +39,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.shape.Line;
 import com.jme3.system.AppSettings;
 
@@ -95,7 +95,7 @@ private void drawVerticalLine(float lineWidth, float x, ColorRGBA color) {
         float viewportHeight = cam.getHeight();
         Vector3f startLocation = new Vector3f(x, 0.1f * viewportHeight, 0f);
         Vector3f endLocation = new Vector3f(x, 0.9f * viewportHeight, 0f);
-        Mesh wireMesh = new Line(startLocation, endLocation);
+        GLMesh wireMesh = new Line(startLocation, endLocation);
         Geometry wire = new Geometry("wire", wireMesh);
         wire.setMaterial(material);
         guiNode.attachChild(wire);
diff --git a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
index 8a3da3abdd..3da3545b43 100644
--- a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
+++ b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Node;
 import com.jme3.scene.instancing.InstancedGeometry;
@@ -50,8 +50,8 @@
 
 public class TestInstanceNode extends SimpleApplication  {
 
-    private Mesh mesh1;
-    private Mesh mesh2;
+    private GLMesh mesh1;
+    private GLMesh mesh2;
     private final Material[] materials = new Material[6];
     private Node instancedNode;
     private float time = 0;
@@ -66,7 +66,7 @@ public static void main(String[] args){
     }
 
     private Geometry createInstance(float x, float z) {
-        Mesh mesh; 
+        GLMesh mesh;
         if (FastMath.nextRandomInt(0, 1) == 1) mesh = mesh2;
         else mesh = mesh1;
         Geometry geometry = new Geometry("randomGeom", mesh);
@@ -156,7 +156,7 @@ public void simpleUpdate(float tpf) {
                     Geometry geom = (Geometry) instance;
                     geom.setMaterial(materials[FastMath.nextRandomInt(0, materials.length - 1)]);
 
-                    Mesh mesh; 
+                    GLMesh mesh;
                     if (FastMath.nextRandomInt(0, 1) == 1) mesh = mesh2;
                     else mesh = mesh1;
                     geom.setMesh(mesh);
diff --git a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
index 6d5b76da83..c212013d0b 100644
--- a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
+++ b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
@@ -41,7 +41,7 @@
 import com.jme3.post.FilterPostProcessor;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.instancing.InstancedNode;
 import com.jme3.scene.shape.Box;
 import com.jme3.scene.shape.Sphere;
@@ -87,8 +87,8 @@ public void simpleInitApp() {
         rootNode.attachChild(instancedNode);
 
         // create 10 spheres & boxes, along the z-axis, successively further from the camera
-        Mesh sphereMesh = new Sphere(32, 32, 1f);
-        Mesh boxMesh = new Box(0.7f, 0.7f, 0.7f);
+        GLMesh sphereMesh = new Sphere(32, 32, 1f);
+        GLMesh boxMesh = new Box(0.7f, 0.7f, 0.7f);
         for (int z = 0; z < 10; z++) {
             Vector3f location = new Vector3f(0, -3, -(z * 4));
             locations[z] = location;
diff --git a/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java b/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
index 24861464ad..2e8c3bf0db 100644
--- a/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
+++ b/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
@@ -36,7 +36,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial.CullHint;
 import com.jme3.scene.shape.Sphere;
@@ -80,7 +80,7 @@ public void simpleUpdate(float tpf){
         rootNode.detachAllChildren();
         for (int y = -15; y < 15; y++){
             for (int x = -15; x < 15; x++){
-                Mesh sphMesh = original.deepClone();
+                GLMesh sphMesh = original.deepClone();
                 Geometry sphere = new Geometry("sphere", sphMesh);
 
                 sphere.setMaterial(solidColor);
diff --git a/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java b/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
index 6c7e3d965d..ef8c99eb64 100644
--- a/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
+++ b/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
@@ -51,7 +51,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -189,7 +189,7 @@ private void updateLod() {
     private int computeNbTri() {
         int nbTri = 0;
         for (Geometry geom : listGeoms) {
-            Mesh mesh = geom.getMesh();
+            GLMesh mesh = geom.getMesh();
             // Check if the mesh has LOD levels
             if (mesh.getNumLodLevels() > 0) {
                 nbTri += mesh.getLodLevel(lodLevel).getNumElements();
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java b/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
index 89c0718733..93947e7d5c 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Box;
 import com.jme3.util.SkyFactory;
@@ -94,7 +94,7 @@ public void simpleInitApp() {
         /*
          * Attach a "floor" geometry to the scene graph.
          */
-        Mesh floorMesh = new Box(10f, 0.1f, 10f);
+        GLMesh floorMesh = new Box(10f, 0.1f, 10f);
         floor = new Geometry("floor", floorMesh);
         Material floorMaterial = new Material(assetManager,
                 "Common/MatDefs/Misc/Unshaded.j3md");
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java b/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
index ba56b3ff2a..fb00c03e6b 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
@@ -6,7 +6,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.Caps;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Image;
 import com.jme3.texture.Texture;
@@ -40,7 +40,7 @@ public void simpleInitApp()
        tex3.setMinFilter(Texture.MinFilter.Trilinear);
        mat.setTexture("ColorMap", tex3);
 
-       Mesh m = new Mesh();
+       GLMesh m = new GLMesh();
        Vector3f[] vertices = new Vector3f[8];
        vertices[0] = new Vector3f(0, 0, 0);
        vertices[1] = new Vector3f(3, 0, 0);
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java b/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
index 0af064f557..e64d94ea97 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
@@ -6,7 +6,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.Caps;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Image;
 import com.jme3.texture.Texture;
@@ -40,7 +40,7 @@ public void simpleInitApp()
        tex3.setMinFilter(Texture.MinFilter.Trilinear);
        mat.setTexture("ColorMap", tex3);
 
-       Mesh m = new Mesh();
+       GLMesh m = new GLMesh();
        Vector3f[] vertices = new Vector3f[8];
        vertices[0] = new Vector3f(0, 0, 0);
        vertices[1] = new Vector3f(3, 0, 0);
diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
index f0bd3ae172..d4b767b1f7 100644
--- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
+++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
@@ -12,17 +12,32 @@
 import com.jme3.system.vulkan.LwjglVulkanContext;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.natives.Native;
+import com.jme3.vulkan.Format;
+import com.jme3.vulkan.VulkanInstance;
+import com.jme3.vulkan.VulkanLogger;
+import com.jme3.vulkan.buffers.BufferUsage;
+import com.jme3.vulkan.buffers.GpuBuffer;
+import com.jme3.vulkan.buffers.PersistentBuffer;
+import com.jme3.vulkan.buffers.StageableBuffer;
 import com.jme3.vulkan.commands.CommandBuffer;
 import com.jme3.vulkan.commands.CommandPool;
+import com.jme3.vulkan.descriptors.*;
+import com.jme3.vulkan.devices.DeviceFeature;
+import com.jme3.vulkan.devices.DeviceFilter;
+import com.jme3.vulkan.devices.GeneralPhysicalDevice;
+import com.jme3.vulkan.devices.LogicalDevice;
 import com.jme3.vulkan.frames.SingleResource;
 import com.jme3.vulkan.frames.UpdateFrame;
 import com.jme3.vulkan.frames.UpdateFrameManager;
+import com.jme3.vulkan.images.*;
 import com.jme3.vulkan.material.TestMaterial;
 import com.jme3.vulkan.memory.MemoryProp;
 import com.jme3.vulkan.memory.MemorySize;
+import com.jme3.vulkan.mesh.*;
 import com.jme3.vulkan.pass.Attachment;
 import com.jme3.vulkan.pass.Subpass;
 import com.jme3.vulkan.pass.RenderPass;
+import com.jme3.vulkan.pipelines.*;
 import com.jme3.vulkan.pipelines.states.ColorBlendAttachment;
 import com.jme3.vulkan.pipelines.states.DynamicState;
 import com.jme3.vulkan.shader.ShaderModule;
@@ -63,8 +78,6 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda
     private boolean swapchainResizeFlag = false;
     private boolean applicationStopped = false;
 
-    private VulkanLogger logger;
-
     // mesh
     private Mesh mesh;
     private final FloatBuffer vertexData = BufferUtils.createFloatBuffer(
@@ -133,9 +146,7 @@ public void simpleInitApp() {
             i.setApplicationName(VulkanHelperTest.class.getSimpleName());
             i.setApplicationVersion(1, 0, 0);
         }
-
-        // debug callbacks
-        logger = new VulkanLogger(instance, Level.SEVERE);
+        instance.createLogger(Level.SEVERE);
 
         // surface
         surface = new Surface(instance, window);
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
index 6e1a44a606..1545905ef2 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
@@ -49,7 +49,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.util.clone.Cloner;
@@ -538,8 +538,8 @@ protected void createSpatialData(Spatial spatial) {
         /*
          * Find the target meshes and choose the transform spatial.
          */
-        List targetList = RagUtils.listAnimatedMeshes(spatial, null);
-        Mesh[] targets = new Mesh[targetList.size()];
+        List targetList = RagUtils.listAnimatedMeshes(spatial, null);
+        GLMesh[] targets = new GLMesh[targetList.size()];
         targetList.toArray(targets);
         transformer = RagUtils.findAnimatedGeometry(spatial);
         if (transformer == null) {
@@ -1017,7 +1017,7 @@ private CollisionShape createShape(Transform vertexToShape, Vector3f center,
      * @param vertexLocations the set of vertex locations (not null, not empty)
      * @param meshes array of animated meshes to use (not null, unaffected)
      */
-    private void createTorsoLink(VectorSet vertexLocations, Mesh[] meshes) {
+    private void createTorsoLink(VectorSet vertexLocations, GLMesh[] meshes) {
         if (vertexLocations == null || vertexLocations.numVectors() == 0) {
             throw new IllegalArgumentException(
                     "No mesh vertices for the torso."
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
index 0a51b894e8..fa037f2239 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -97,13 +97,13 @@ private RagUtils() {
      * null, unaffected)
      * @return a new map from bone/torso names to sets of vertex coordinates
      */
-    static Map coordsMap(Mesh[] meshes,
-            String[] managerMap) {
+    static Map coordsMap(GLMesh[] meshes,
+                                            String[] managerMap) {
         float[] wArray = new float[4];
         int[] iArray = new int[4];
         Vector3f bindPosition = new Vector3f();
         Map coordsMap = new HashMap<>(32);
-        for (Mesh mesh : meshes) {
+        for (GLMesh mesh : meshes) {
             int numVertices = mesh.getVertexCount();
             for (int vertexI = 0; vertexI < numVertices; ++vertexI) {
                 String managerName = findManager(mesh, vertexI, iArray, wArray,
@@ -133,7 +133,7 @@ static Geometry findAnimatedGeometry(Spatial subtree) {
         Geometry result = null;
         if (subtree instanceof Geometry) {
             Geometry geometry = (Geometry) subtree;
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             VertexBuffer indices = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             boolean hasIndices = indices != null;
             VertexBuffer weights = mesh.getBuffer(VertexBuffer.Type.BoneWeight);
@@ -186,7 +186,7 @@ static int findIndex(Spatial spatial, Control sgc) {
      * (not null)
      * @return a root bone, or null if none found
      */
-    static Joint findMainBone(Armature skeleton, Mesh[] targetMeshes) {
+    static Joint findMainBone(Armature skeleton, GLMesh[] targetMeshes) {
         Joint[] rootBones = skeleton.getRoots();
 
         Joint result;
@@ -217,15 +217,15 @@ static Joint findMainBone(Armature skeleton, Mesh[] targetMeshes) {
      * @param storeResult (added to if not null)
      * @return an expanded list (either storeResult or a new instance)
      */
-    static List listAnimatedMeshes(Spatial subtree,
-            List storeResult) {
+    static List listAnimatedMeshes(Spatial subtree,
+                                           List storeResult) {
         if (storeResult == null) {
             storeResult = new ArrayList<>(10);
         }
 
         if (subtree instanceof Geometry) {
             Geometry geometry = (Geometry) subtree;
-            Mesh mesh = geometry.getMesh();
+            GLMesh mesh = geometry.getMesh();
             VertexBuffer indices = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             boolean hasIndices = indices != null;
             VertexBuffer weights = mesh.getBuffer(VertexBuffer.Type.BoneWeight);
@@ -394,7 +394,7 @@ private static void addPreOrderJoints(Joint bone, List addResult) {
      * @param mesh animated mesh to analyze (not null, unaffected)
      * @param totalWeights (not null, modified)
      */
-    private static void addWeights(Mesh mesh, float[] totalWeights) {
+    private static void addWeights(GLMesh mesh, float[] totalWeights) {
         assert totalWeights != null;
 
         int maxWeightsPerVert = mesh.getMaxNumWeights();
@@ -439,8 +439,8 @@ private static void addWeights(Mesh mesh, float[] totalWeights) {
      * unaffected)
      * @return a bone/torso name
      */
-    private static String findManager(Mesh mesh, int vertexIndex, int[] iArray,
-            float[] wArray, String[] managerMap) {
+    private static String findManager(GLMesh mesh, int vertexIndex, int[] iArray,
+                                      float[] wArray, String[] managerMap) {
         vertexBoneIndices(mesh, vertexIndex, iArray);
         vertexBoneWeights(mesh, vertexIndex, wArray);
         Map weightMap = weightMap(iArray, wArray, managerMap);
@@ -539,10 +539,10 @@ private static int readIndex(Buffer buffer) {
      * @param skeleton (not null, unaffected)
      * @return a map from bone indices to total bone weight
      */
-    private static float[] totalWeights(Mesh[] meshes, Armature skeleton) {
+    private static float[] totalWeights(GLMesh[] meshes, Armature skeleton) {
         int numBones = skeleton.getJointCount();
         float[] result = new float[numBones];
-        for (Mesh mesh : meshes) {
+        for (GLMesh mesh : meshes) {
             RagUtils.addWeights(mesh, result);
         }
 
@@ -568,8 +568,8 @@ private static float[] totalWeights(Mesh[] meshes, Armature skeleton) {
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static int[] vertexBoneIndices(Mesh mesh,
-            int vertexIndex, int[] storeResult) {
+    private static int[] vertexBoneIndices(GLMesh mesh,
+                                           int vertexIndex, int[] storeResult) {
         if (storeResult == null) {
             storeResult = new int[4];
         } else {
@@ -607,8 +607,8 @@ private static int[] vertexBoneIndices(Mesh mesh,
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static float[] vertexBoneWeights(Mesh mesh,
-            int vertexIndex, float[] storeResult) {
+    private static float[] vertexBoneWeights(GLMesh mesh,
+                                             int vertexIndex, float[] storeResult) {
         if (storeResult == null) {
             storeResult = new float[4];
         } else {
@@ -650,9 +650,9 @@ private static float[] vertexBoneWeights(Mesh mesh,
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static Vector3f vertexVector3f(Mesh mesh,
-            VertexBuffer.Type bufferType, int vertexIndex,
-            Vector3f storeResult) {
+    private static Vector3f vertexVector3f(GLMesh mesh,
+                                           VertexBuffer.Type bufferType, int vertexIndex,
+                                           Vector3f storeResult) {
         assert bufferType == VertexBuffer.Type.BindPoseNormal
                 || bufferType == VertexBuffer.Type.BindPosePosition
                 || bufferType == VertexBuffer.Type.Binormal
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
index 7dadd68835..abb8d10b96 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
@@ -62,12 +62,12 @@ protected GImpactCollisionShape() {
      * creates a collision shape from the given Mesh
      * @param mesh the Mesh to use
      */
-    public GImpactCollisionShape(Mesh mesh) {
+    public GImpactCollisionShape(GLMesh mesh) {
         createCollisionMesh(mesh, new Vector3f(1,1,1));
     }
 
 
-    private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
+    private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
         this.worldScale = worldScale;
         bulletMesh = Converter.convert(mesh);
         this.numVertices = bulletMesh.numVertices;
@@ -84,7 +84,7 @@ private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
      *
      * @return a new Mesh
      */
-    public Mesh createJmeMesh(){
+    public GLMesh createJmeMesh(){
         return Converter.convert(bulletMesh);
     }
 
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
index d6102d660f..0d420f717d 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
@@ -39,7 +39,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import java.io.IOException;
 
 /**
@@ -124,7 +124,7 @@ protected void createShape() {
                 cShape.setMargin(margin);
     }
 
-    public Mesh createJmeMesh(){
+    public GLMesh createJmeMesh(){
         //TODO return Converter.convert(bulletMesh);
         return null;
     }
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
index 24746934a5..3564936fd1 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
@@ -38,7 +38,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 import java.nio.FloatBuffer;
@@ -51,7 +51,7 @@ public class HullCollisionShape extends CollisionShape {
     protected HullCollisionShape() {
     }
 
-    public HullCollisionShape(Mesh mesh) {
+    public HullCollisionShape(GLMesh mesh) {
         this.points = getPoints(mesh);
         createShape(this.points);
     }
@@ -75,7 +75,7 @@ public void read(JmeImporter im) throws IOException {
         InputCapsule capsule = im.getCapsule(this);
 
         // for backwards compatability
-        Mesh mesh = (Mesh) capsule.readSavable("hullMesh", null);
+        GLMesh mesh = (GLMesh) capsule.readSavable("hullMesh", null);
         if (mesh != null) {
             this.points = getPoints(mesh);
         } else {
@@ -95,7 +95,7 @@ protected void createShape(float[] points) {
         cShape.setMargin(margin);
     }
 
-    protected float[] getPoints(Mesh mesh) {
+    protected float[] getPoints(GLMesh mesh) {
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         vertices.rewind();
         int components = mesh.getVertexCount() * 3;
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
index acb93ee043..9f780f5321 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
@@ -63,7 +63,7 @@ protected MeshCollisionShape() {
      * @param mesh
      *            the TriMesh to use
      */
-    public MeshCollisionShape(Mesh mesh) {
+    public MeshCollisionShape(GLMesh mesh) {
         this(mesh, false);
     }
  
@@ -73,11 +73,11 @@ public MeshCollisionShape(Mesh mesh) {
      * @param mesh the TriMesh to use
      * @param dummy Unused
      */
-    public MeshCollisionShape(Mesh mesh, boolean dummy) {
+    public MeshCollisionShape(GLMesh mesh, boolean dummy) {
         createCollisionMesh(mesh, new Vector3f(1, 1, 1));
     }
     
-    private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
+    private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
         this.scale = worldScale;
         bulletMesh = Converter.convert(mesh);
         this.numVertices = bulletMesh.numVertices;
@@ -94,7 +94,7 @@ private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
      *
      * @return a new Mesh
      */
-    public Mesh createJmeMesh(){
+    public GLMesh createJmeMesh(){
         return Converter.convert(bulletMesh);
     }
 
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
index 19f054be32..62c240078b 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
@@ -43,7 +43,7 @@
 import com.jme3.math.*;
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.ViewPort;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.util.TempVars;
@@ -603,7 +603,7 @@ protected void createSpatialData(Spatial model) {
      * shape will contain at least 1 vertex.
      */
     private void filterBoneList(SkeletonControl skeletonControl) {
-        Mesh[] targets = skeletonControl.getTargets();
+        GLMesh[] targets = skeletonControl.getTargets();
         Skeleton skel = skeletonControl.getSkeleton();
         for (int boneI = 0; boneI < skel.getBoneCount(); boneI++) {
             String boneName = skel.getBone(boneI).getName();
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
index 6377ee413b..d54e642062 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
@@ -46,7 +46,7 @@
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.ViewPort;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.control.Control;
 import com.jme3.scene.shape.Box;
@@ -225,7 +225,7 @@ protected void createCollisionShape() {
         }
         if (spatial instanceof Geometry) {
             Geometry geom = (Geometry) spatial;
-            Mesh mesh = geom.getMesh();
+            GLMesh mesh = geom.getMesh();
             if (mesh instanceof Sphere) {
                 collisionShape = new SphereCollisionShape(((Sphere) mesh).getRadius());
                 return;
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
index f24ccf5f72..93a290baca 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
@@ -95,15 +95,15 @@ public static Map> buildPointMap(Spatial model) {
         Map> map = new HashMap<>();
 
         SkeletonControl skeletonCtrl = model.getControl(SkeletonControl.class);
-        Mesh[] targetMeshes = skeletonCtrl.getTargets();
-        for (Mesh mesh : targetMeshes) {
+        GLMesh[] targetMeshes = skeletonCtrl.getTargets();
+        for (GLMesh mesh : targetMeshes) {
             buildPointMapForMesh(mesh, map);
         }
 
         return map;
     }
 
-    private static Map> buildPointMapForMesh(Mesh mesh, Map> map) {
+    private static Map> buildPointMapForMesh(GLMesh mesh, Map> map) {
 
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         ByteBuffer boneIndices = (ByteBuffer) mesh.getBuffer(Type.BoneIndex).getData();
@@ -222,8 +222,8 @@ public static HullCollisionShape makeShapeFromVerticeWeights(Spatial model,
         List points = new ArrayList<>(100);
 
         SkeletonControl skeletonCtrl = model.getControl(SkeletonControl.class);
-        Mesh[] targetMeshes = skeletonCtrl.getTargets();
-        for (Mesh mesh : targetMeshes) {
+        GLMesh[] targetMeshes = skeletonCtrl.getTargets();
+        for (GLMesh mesh : targetMeshes) {
             for (Integer index : boneIndices) {
                 List bonePoints = getPoints(mesh, index, initialScale,
                         initialPosition, weightThreshold);
@@ -254,7 +254,7 @@ public static HullCollisionShape makeShapeFromVerticeWeights(Spatial model,
      * @return a new list of vertex coordinates (not null, length a multiple of
      * 3)
      */
-    private static List getPoints(Mesh mesh, int boneIndex, Vector3f initialScale, Vector3f offset, float weightThreshold) {
+    private static List getPoints(GLMesh mesh, int boneIndex, Vector3f initialScale, Vector3f offset, float weightThreshold) {
 
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         VertexBuffer biBuf = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
@@ -351,9 +351,9 @@ public static void setUserControl(Bone bone, boolean bool) {
      * @param weightThreshold the threshold (≥0, ≤1)
      * @return true if at least 1 vertex found, otherwise false
      */
-    public static boolean hasVertices(int boneIndex, Mesh[] targets,
+    public static boolean hasVertices(int boneIndex, GLMesh[] targets,
             float weightThreshold) {
-        for (Mesh mesh : targets) {
+        for (GLMesh mesh : targets) {
             VertexBuffer biBuf = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             Buffer boneIndices = biBuf.getDataReadOnly();
             FloatBuffer boneWeight
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
index 80d71c53ce..b7f66189ab 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
@@ -251,9 +251,9 @@ public static CollisionShape createBoxShape(Spatial spatial) {
      * other.
      */
     private static MeshCollisionShape createSingleMeshShape(Geometry geom, Spatial parent) {
-        Mesh mesh = geom.getMesh();
+        GLMesh mesh = geom.getMesh();
         Transform trans = getTransform(geom, parent);
-        if (mesh != null && mesh.getMode() == Mesh.Mode.Triangles) {
+        if (mesh != null && mesh.getMode() == GLMesh.Mode.Triangles) {
             MeshCollisionShape mColl = new MeshCollisionShape(mesh);
             mColl.setScale(trans.getScale());
             return mColl;
@@ -285,7 +285,7 @@ private static BoxCollisionShape createSingleBoxShape(Spatial spatial, Spatial p
      * @param parent
      */
     private static HullCollisionShape createSingleDynamicMeshShape(Geometry geom, Spatial parent) {
-        Mesh mesh = geom.getMesh();
+        GLMesh mesh = geom.getMesh();
         Transform trans = getTransform(geom, parent);
         if (mesh != null) {
             HullCollisionShape dynamicShape = new HullCollisionShape(mesh);
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
index 096c926e8d..87f31048f7 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
@@ -34,7 +34,7 @@
 import com.bulletphysics.collision.shapes.IndexedMesh;
 import com.bulletphysics.dom.HeightfieldTerrainShape;
 import com.jme3.math.FastMath;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.util.BufferUtils;
@@ -223,7 +223,7 @@ public static com.jme3.math.Transform convert(com.bulletphysics.linearmath.Trans
         return out;
     }
 
-    public static synchronized IndexedMesh convert(Mesh mesh) {
+    public static synchronized IndexedMesh convert(GLMesh mesh) {
         IndexedMesh jBulletIndexedMesh = new IndexedMesh();
         jBulletIndexedMesh.triangleIndexBase = ByteBuffer.allocate(mesh.getTriangleCount() * 3 * 4);
         jBulletIndexedMesh.vertexBase = ByteBuffer.allocate(mesh.getVertexCount() * 3 * 4);
@@ -253,8 +253,8 @@ public static synchronized IndexedMesh convert(Mesh mesh) {
         return jBulletIndexedMesh;
     }
 
-    public static Mesh convert(IndexedMesh mesh) {
-        Mesh jmeMesh = new Mesh();
+    public static GLMesh convert(IndexedMesh mesh) {
+        GLMesh jmeMesh = new GLMesh();
 
         jmeMesh.setBuffer(Type.Index, 3, BufferUtils.createShortBuffer(mesh.numTriangles * 3));
         jmeMesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(mesh.numVertices * 3));
@@ -276,7 +276,7 @@ public static Mesh convert(IndexedMesh mesh) {
         return jmeMesh;
     }
 
-    public static Mesh convert(HeightfieldTerrainShape heightfieldShape) {
+    public static GLMesh convert(HeightfieldTerrainShape heightfieldShape) {
         return null; //TODO!!
     }
 }
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
index 3e74f1ab3c..ab043694b8 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
@@ -41,7 +41,7 @@
 import com.jme3.bullet.collision.shapes.infos.ChildCollisionShape;
 import com.jme3.math.Matrix3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
@@ -126,14 +126,14 @@ private static Geometry createDebugShape(CollisionShape shape) {
         return geom;
     }
 
-    public static Mesh getDebugMesh(CollisionShape shape) {
-        Mesh mesh = null;
+    public static GLMesh getDebugMesh(CollisionShape shape) {
+        GLMesh mesh = null;
         if (shape.getCShape() instanceof ConvexShape) {
-            mesh = new Mesh();
+            mesh = new GLMesh();
             mesh.setBuffer(Type.Position, 3, getVertices((ConvexShape) shape.getCShape()));
             mesh.getFloatBuffer(Type.Position).clear();
         } else if (shape.getCShape() instanceof ConcaveShape) {
-            mesh = new Mesh();
+            mesh = new GLMesh();
             mesh.setBuffer(Type.Position, 3, getVertices((ConcaveShape) shape.getCShape()));
             mesh.getFloatBuffer(Type.Position).clear();
         }
diff --git a/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java b/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
index bb704578e9..5675da237d 100644
--- a/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
+++ b/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
@@ -50,7 +50,7 @@
 import com.jme3.export.binary.BinaryImporter;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -179,7 +179,7 @@ public void testIssue1004() {
         Node sinbad = (Node)new DesktopAssetManager(true).loadModel("Models/Sinbad/SinbadOldAnim.j3o");
 
         Geometry geometry = (Geometry) sinbad.getChild(0);
-        Mesh mesh = geometry.getMesh();
+        GLMesh mesh = geometry.getMesh();
         VertexBuffer.Type bufferType = VertexBuffer.Type.BoneIndex;
         VertexBuffer vertexBuffer = mesh.getBuffer(bufferType);
 
diff --git a/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java b/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
index 4d08588759..d2ee71ae22 100644
--- a/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
+++ b/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
@@ -40,7 +40,7 @@
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.Renderer;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -495,7 +495,7 @@ private class Batch {
         private final VertexBuffer vertexColor = new VertexBuffer(Type.Color);
         private final VertexBuffer indexBuffer = new VertexBuffer(Type.Index);
 
-        private final Mesh mesh = new Mesh();
+        private final GLMesh mesh = new GLMesh();
         private final Geometry meshGeometry = new Geometry("nifty-quad", mesh);
         private final RenderState renderState = new RenderState();
 
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
index 7f48d3e201..564da94cdf 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
@@ -37,7 +37,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.plugins.IrUtils;
 import com.jme3.scene.plugins.IrBoneWeightIndex;
 import com.jme3.scene.plugins.IrMesh;
@@ -55,7 +55,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-public final class FbxMesh extends FbxNodeAttribute> {
+public final class FbxMesh extends FbxNodeAttribute> {
 
     private static final Logger logger = Logger.getLogger(FbxMesh.class.getName());
     
@@ -205,7 +205,7 @@ private static IrBoneWeightIndex[] toBoneWeightIndices(List boneIndices
     }
     
     @Override
-    protected IntMap toJmeObject() {
+    protected IntMap toJmeObject() {
         // Load clusters from SkinDeformer
         if (skinDeformer != null) {
             for (FbxCluster cluster : skinDeformer.getJmeObject()) {
@@ -228,9 +228,9 @@ protected IntMap toJmeObject() {
         IntMap irMeshes = IrUtils.splitByMaterial(irMesh);
         
         // Create a jME3 Mesh for each material index.
-        IntMap jmeMeshes = new IntMap<>();
+        IntMap jmeMeshes = new IntMap<>();
         for (IntMap.Entry irMeshEntry : irMeshes) {
-            Mesh jmeMesh = IrUtils.convertIrMeshToJmeMesh(irMeshEntry.getValue());
+            GLMesh jmeMesh = IrUtils.convertIrMeshToJmeMesh(irMeshEntry.getValue());
             jmeMeshes.put(irMeshEntry.getKey(), jmeMesh);
         }
        
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
index 678e88eae9..f01a50eaad 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
@@ -45,7 +45,7 @@
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Spatial.CullHint;
@@ -318,7 +318,7 @@ public void fromElement(FbxElement element) {
         }
     }
     
-    private Spatial tryCreateGeometry(int materialIndex, Mesh jmeMesh, boolean single) {
+    private Spatial tryCreateGeometry(int materialIndex, GLMesh jmeMesh, boolean single) {
         // Map meshes without material indices to material 0.
         if (materialIndex == -1) {
             materialIndex = 0;
@@ -396,7 +396,7 @@ public Spatial toJmeObject() {
         
         if (nodeAttribute instanceof FbxMesh) {
             FbxMesh fbxMesh = (FbxMesh) nodeAttribute;
-            IntMap jmeMeshes = fbxMesh.getJmeObject();
+            IntMap jmeMeshes = fbxMesh.getJmeObject();
             
             if (jmeMeshes == null || jmeMeshes.size() == 0) {
                 // No meshes found on FBXMesh (??)
@@ -412,7 +412,7 @@ public Spatial toJmeObject() {
                 }
                 Node node = new Node(nodeName);
                 boolean singleMesh = jmeMeshes.size() == 1;
-                for (IntMap.Entry meshInfo : jmeMeshes) {
+                for (IntMap.Entry meshInfo : jmeMeshes) {
                     node.attachChild(tryCreateGeometry(meshInfo.getKey(), meshInfo.getValue(), singleMesh));
                 }
                 spatial = node;
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
index 9cc40fe5b9..d4dcb081f9 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
@@ -8,11 +8,11 @@
 
 import com.jme3.asset.AssetLoadException;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.plugins.fbx.SceneLoader;
 import com.jme3.scene.plugins.fbx.file.FbxElement;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.Node;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.IntMap;
@@ -257,7 +257,7 @@ public void link(FbxObject otherObject) {
     }
 
     private List createGeometries() throws IOException {
-        Mesh mesh = new Mesh();
+        GLMesh mesh = new GLMesh();
         mesh.setMode(Mode.Triangles);
         // Since each vertex should contain unique texcoord and normal we should unroll vertex indexing
         // So we don't use VertexBuffer.Type.Index for elements drawing
@@ -507,7 +507,7 @@ else if(binormalsMapping.equals("ByPolygonVertex"))
                 Entry> e = iterator.next();
                 int materialId = e.getKey();
                 List indexes = e.getValue();
-                Mesh newMesh = mesh.clone();
+                GLMesh newMesh = mesh.clone();
                 newMesh.setBuffer(VertexBuffer.Type.Index, 3, toArray(indexes.toArray(new Integer[indexes.size()])));
                 newMesh.setStatic();
                 newMesh.updateBound();
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
index 8cb1a2e8a8..954c05c782 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
@@ -6,7 +6,7 @@
 import java.util.List;
 
 import com.jme3.asset.AssetLoadException;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -43,10 +43,10 @@ public void generateSkinning() {
         for(FbxMesh fbxMesh : toSkin) {
             if(fbxMesh.geometries == null)
                 continue;
-            Mesh firstMesh = fbxMesh.geometries.get(0).getMesh();
+            GLMesh firstMesh = fbxMesh.geometries.get(0).getMesh();
             int maxWeightsPerVert = generateBoneData(firstMesh, fbxMesh);
             for(int i = 0; i < fbxMesh.geometries.size(); ++i) {
-                Mesh mesh = fbxMesh.geometries.get(i).getMesh();
+                GLMesh mesh = fbxMesh.geometries.get(i).getMesh();
                 if(mesh != firstMesh) {
                     mesh.setBuffer(firstMesh.getBuffer(VertexBuffer.Type.BoneWeight));
                     mesh.setBuffer(firstMesh.getBuffer(VertexBuffer.Type.BoneIndex));
@@ -59,7 +59,7 @@ public void generateSkinning() {
         }
     }
     
-    private int generateBoneData(Mesh mesh, FbxMesh fbxMesh) {
+    private int generateBoneData(GLMesh mesh, FbxMesh fbxMesh) {
         // Create bone buffers
         FloatBuffer boneWeightData = BufferUtils.createFloatBuffer(fbxMesh.vCount * 4);
         ByteBuffer boneIndicesData = BufferUtils.createByteBuffer(fbxMesh.vCount * 4);
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
index 3002515633..2f199d8872 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
@@ -374,7 +374,7 @@ public Geometry[] readMeshPrimitives(int meshIndex) throws IOException {
             int index = 0;
             for (JsonElement primitive : primitives) {
                 JsonObject meshObject = primitive.getAsJsonObject();
-                Mesh mesh = new Mesh();
+                GLMesh mesh = new GLMesh();
                 addToCache("mesh", 0, mesh, 1);
                 Integer mode = getAsInteger(meshObject, "mode");
                 mesh.setMode(getMeshMode(mode));
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
index 8f015f28db..054c9ba80f 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
@@ -71,29 +71,29 @@ public static JsonObject parse(InputStream stream) {
         return parser.parse(stream);
     }
 
-    public static Mesh.Mode getMeshMode(Integer mode) {
+    public static GLMesh.Mode getMeshMode(Integer mode) {
         if (mode == null) {
-            return Mesh.Mode.Triangles;
+            return GLMesh.Mode.Triangles;
         }
         //too bad, we could have returned the enum value from the ordinal
         //but LineLoop and LineStrip are inverted in the Mesh.Mode Enum declaration.
         switch (mode) {
             case 0:
-                return Mesh.Mode.Points;
+                return GLMesh.Mode.Points;
             case 1:
-                return Mesh.Mode.Lines;
+                return GLMesh.Mode.Lines;
             case 2:
-                return Mesh.Mode.LineLoop;
+                return GLMesh.Mode.LineLoop;
             case 3:
-                return Mesh.Mode.LineStrip;
+                return GLMesh.Mode.LineStrip;
             case 4:
-                return Mesh.Mode.Triangles;
+                return GLMesh.Mode.Triangles;
             case 5:
-                return Mesh.Mode.TriangleStrip;
+                return GLMesh.Mode.TriangleStrip;
             case 6:
-                return Mesh.Mode.TriangleFan;
+                return GLMesh.Mode.TriangleFan;
         }
-        return Mesh.Mode.Triangles;
+        return GLMesh.Mode.Triangles;
     }
 
     public static VertexBuffer.Format getVertexBufferFormat(int componentType) {
@@ -488,7 +488,7 @@ public static byte[] toByteArray(short[] shortArray) {
     }
 
 
-    public static void handleSkinningBuffers(Mesh mesh, IntMap skinBuffers) {
+    public static void handleSkinningBuffers(GLMesh mesh, IntMap skinBuffers) {
         if (skinBuffers.size() > 0) {
             int length = skinBuffers.get(0).joints.length;
             short[] jointsArray = new short[length];
@@ -546,7 +546,7 @@ public int compare(GltfLoader.WeightData o1, GltfLoader.WeightData o2) {
     }
 
 
-    public static void setSkinBuffers(Mesh mesh, short[] jointsArray, float[] weightsArray, int componentSize) {
+    public static void setSkinBuffers(GLMesh mesh, short[] jointsArray, float[] weightsArray, int componentSize) {
         if (componentSize == 1) {
             mesh.setBuffer(VertexBuffer.Type.BoneIndex, 4, BufferUtils.createByteBuffer(toByteArray(jointsArray)));
         } else {
@@ -858,7 +858,7 @@ public static Spatial findCommonAncestor(List spatials) {
 
     }
 
-    public static void dumpMesh(Mesh m) {
+    public static void dumpMesh(GLMesh m) {
         for (VertexBuffer vertexBuffer : m.getBufferList().getArray()) {
             System.err.println(vertexBuffer.getBufferType());
             System.err.println(vertexBuffer.getFormat());
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
index aff6fbdcf1..d66bfee532 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
@@ -37,7 +37,7 @@
 import com.jme3.asset.AssetLoadException;
 import com.jme3.math.Matrix3f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import static com.jme3.scene.plugins.gltf.GltfUtils.getAsInteger;
 import static com.jme3.scene.plugins.gltf.GltfUtils.getVertexBufferType;
@@ -69,7 +69,7 @@ public class TextureTransformExtensionLoader implements ExtensionLoader {
      * @param transform The matrix containing the scale/rotate/translate transformations
      * @param verType The vertex buffer type from which to retrieve the UV coordinates
      */    
-    private void uvTransform(Mesh mesh, Matrix3f transform, VertexBuffer.Type verType) {
+    private void uvTransform(GLMesh mesh, Matrix3f transform, VertexBuffer.Type verType) {
         if (!transform.isIdentity()) { // if transform is the identity matrix, there's nothing to do
             VertexBuffer tc = mesh.getBuffer(verType);
             if (tc == null) {
@@ -102,7 +102,7 @@ public Object handleExtension(GltfLoader loader, String parentName, JsonElement
         if (!(input instanceof Texture2D)) {
             logger.log(Level.WARNING, "KHR_texture_transform extension added on an unsupported element, the loaded scene result will be unexpected.");
         }
-        Mesh mesh = loader.fetchFromCache("mesh", 0, Mesh.class);
+        GLMesh mesh = loader.fetchFromCache("mesh", 0, GLMesh.class);
         if (mesh != null) {
             Matrix3f translation = new Matrix3f();
             Matrix3f rotation = new Matrix3f();
@@ -131,7 +131,7 @@ public Object handleExtension(GltfLoader loader, String parentName, JsonElement
                 texCoord = jsonObject.get("texCoord").getAsInt(); // it overrides the parent's texCoord value
             }                 
             Matrix3f transform = translation.mult(rotation).mult(scale);
-            Mesh meshLast = loader.fetchFromCache("textureTransformData", 0, Mesh.class);
+            GLMesh meshLast = loader.fetchFromCache("textureTransformData", 0, GLMesh.class);
             Map transformMap = loader.fetchFromCache("textureTransformData", 1, HashMap.class);
             if (mesh != meshLast || (transformMap != null && transformMap.get(texCoord) == null)) {
                 // at this point, we're processing a new mesh or the same mesh as before but for a different UV set
diff --git a/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java b/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
index 30338d27fd..3aaf573b39 100644
--- a/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
+++ b/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
@@ -32,7 +32,7 @@
 package com.jme3.scene.plugins;
 
 import com.jme3.math.Vector4f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.scene.mesh.IndexIntBuffer;
@@ -258,7 +258,7 @@ public static IntMap splitByMaterial(IrMesh mesh) {
      * @param mesh the input IrMesh (not null)
      * @return a new Mesh
      */
-    public static Mesh convertIrMeshToJmeMesh(IrMesh mesh) {
+    public static GLMesh convertIrMeshToJmeMesh(IrMesh mesh) {
         Map vertexToVertexIndex = new HashMap<>();
         List vertices = new ArrayList<>();
         List indexes = new ArrayList<>();
@@ -284,8 +284,8 @@ public static Mesh convertIrMeshToJmeMesh(IrMesh mesh) {
             }
         }
         
-        Mesh jmeMesh = new Mesh();
-        jmeMesh.setMode(Mesh.Mode.Triangles);
+        GLMesh jmeMesh = new GLMesh();
+        jmeMesh.setMode(GLMesh.Mode.Triangles);
         
         FloatBuffer posBuf = null;
         FloatBuffer normBuf = null;
diff --git a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
index 4cb7967d94..21a4e9acd2 100644
--- a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
+++ b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
@@ -84,7 +84,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
     private IntBuffer ib;
     private FloatBuffer fb;
     private VertexBuffer vb;
-    private Mesh mesh;
+    private GLMesh mesh;
     private Geometry geom;
     private ByteBuffer indicesData;
     private FloatBuffer weightsFloatData;
@@ -94,7 +94,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
     private boolean usesBigIndices;
     private boolean submeshNamesHack;
     // Global data
-    private Mesh sharedMesh;
+    private GLMesh sharedMesh;
     private int meshIndex = 0;
     private int texCoordIndex = 0;
     private String ignoreUntilEnd = null;
@@ -241,15 +241,15 @@ private void applyMaterial(Geometry geom, String matName) {
     }
 
     private void startSubMesh(String matName, String usesharedvertices, String use32bitIndices, String opType) throws SAXException {
-        mesh = new Mesh();
+        mesh = new GLMesh();
         if (opType == null || opType.equals("triangle_list")) {
-            mesh.setMode(Mesh.Mode.Triangles);
+            mesh.setMode(GLMesh.Mode.Triangles);
             //} else if (opType.equals("triangle_strip")) {
             //    mesh.setMode(Mesh.Mode.TriangleStrip);
             //} else if (opType.equals("triangle_fan")) {
             //    mesh.setMode(Mesh.Mode.TriangleFan);
         } else if (opType.equals("line_list")) {
-            mesh.setMode(Mesh.Mode.Lines);
+            mesh.setMode(GLMesh.Mode.Lines);
         } else {
             throw new SAXException("Unsupported operation type: " + opType);
         }
@@ -286,7 +286,7 @@ private void startSubMesh(String matName, String usesharedvertices, String use32
     }
 
     private void startSharedGeom(String vertexCount) throws SAXException {
-        sharedMesh = new Mesh();
+        sharedMesh = new GLMesh();
         vertCount = parseInt(vertexCount);
         usesSharedVerts = false;
 
@@ -556,7 +556,7 @@ private void startLevelOfDetail(String numLevels) {
     private void endLevelOfDetail() {
         // set the lod data for each mesh
         for (Entry> entry : lodLevels) {
-            Mesh m = geoms.get(entry.getKey()).getMesh();
+            GLMesh m = geoms.get(entry.getKey()).getMesh();
             List levels = entry.getValue();
             VertexBuffer[] levelArray = new VertexBuffer[levels.size()];
             levels.toArray(levelArray);
@@ -772,7 +772,7 @@ private Node compileModel() {
 
         for (int i = 0; i < geoms.size(); i++) {
             Geometry g = geoms.get(i);
-            Mesh m = g.getMesh();
+            GLMesh m = g.getMesh();
 
             // New code for buffer extract
             if (sharedMesh != null && usesSharedMesh.get(i)) {
@@ -789,7 +789,7 @@ private Node compileModel() {
 
             for (int i = 0; i < geoms.size(); i++) {
                 Geometry g = geoms.get(i);
-                Mesh m = geoms.get(i).getMesh();
+                GLMesh m = geoms.get(i).getMesh();
                 m.generateBindPose();
             }
 
diff --git a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
index 50435b1218..f2a83e9e6c 100644
--- a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
+++ b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
@@ -42,7 +42,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 import org.jmonkeyengine.screenshottests.testframework.ScreenshotTestBase;
@@ -98,7 +98,7 @@ protected void initialize(Application app) {
 
                 // Remove its vertex normals
                 Geometry oldGeometry = (Geometry) oldJaime.getChild(0);
-                Mesh oldMesh = oldGeometry.getMesh();
+                GLMesh oldMesh = oldGeometry.getMesh();
                 oldMesh.clearBuffer(VertexBuffer.Type.Normal);
                 oldMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
 
@@ -114,7 +114,7 @@ protected void initialize(Application app) {
 
                 // Remove its vertex normals
                 Geometry newGeometry = (Geometry) newJaime.getChild(0);
-                Mesh newMesh = newGeometry.getMesh();
+                GLMesh newMesh = newGeometry.getMesh();
                 newMesh.clearBuffer(VertexBuffer.Type.Normal);
                 newMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
 
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java b/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
index 4a68a9cc18..3cf6d5cf53 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
@@ -34,7 +34,7 @@
 import com.jme3.export.*;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -308,12 +308,12 @@ public IntBuffer writeIndexArray(IntBuffer store){
         return store;
     }
     
-    public Mesh createMesh(Vector3f scale, Vector2f tcScale, boolean center){
+    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, boolean center){
         FloatBuffer pb = writeVertexArray(null, scale, center);
         FloatBuffer tb = writeTexCoordArray(null, Vector2f.ZERO, tcScale);
         FloatBuffer nb = writeNormalArray(null, scale);
         IntBuffer ib = writeIndexArray(null);
-        Mesh m = new Mesh();
+        GLMesh m = new GLMesh();
         m.setBuffer(Type.Position, 3, pb);
         m.setBuffer(Type.Normal, 3, nb);
         m.setBuffer(Type.TexCoord, 2, tb);
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
index 2dae19b458..23feed4f97 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
@@ -37,8 +37,8 @@
 import com.jme3.math.Triangle;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
-import com.jme3.scene.Mesh.Mode;
+import com.jme3.scene.GLMesh;
+import com.jme3.scene.GLMesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.terrain.GeoMap;
@@ -73,11 +73,11 @@ public LODGeomap(int size, float[] heightMap) {
         super(heightMap, size, size, 1);
     }
 
-    public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center) {
+    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center) {
         return this.createMesh(scale, tcScale, tcOffset, offsetAmount, totalSize, center, 1, false, false, false, false);
     }
 
-    public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center, int lod, boolean rightLod, boolean topLod, boolean leftLod, boolean bottomLod) {
+    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center, int lod, boolean rightLod, boolean topLod, boolean leftLod, boolean bottomLod) {
         FloatBuffer pb = writeVertexArray(null, scale, center);
         FloatBuffer texb = writeTexCoordArray(null, tcOffset, tcScale, offsetAmount, totalSize);
         FloatBuffer nb = writeNormalArray(null, scale);
@@ -85,7 +85,7 @@ public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, floa
         FloatBuffer bb = BufferUtils.createFloatBuffer(getWidth() * getHeight() * 3);
         FloatBuffer tanb = BufferUtils.createFloatBuffer(getWidth() * getHeight() * 3);
         writeTangentArray(nb, tanb, bb, texb, scale);
-        Mesh m = new Mesh();
+        GLMesh m = new GLMesh();
         m.setMode(Mode.TriangleStrip);
         m.setBuffer(Type.Position, 3, pb);
         m.setBuffer(Type.Normal, 3, nb);
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
index b4ffc5a12d..4cdb3184a1 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
@@ -43,7 +43,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.*;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
@@ -189,7 +189,7 @@ public TerrainPatch(String name, int size, Vector3f stepScale,
         setLocalTranslation(origin);
 
         geomap = new LODGeomap(size, heightMap);
-        Mesh m = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
+        GLMesh m = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
         setMesh(m);
 
     }
@@ -337,7 +337,7 @@ protected void updateNormals() {
         getMesh().getBuffer(Type.Binormal).updateData(newBinormalBuffer);
     }
 
-    private void setInBuffer(Mesh mesh, int index, Vector3f normal, Vector3f tangent, Vector3f binormal) {
+    private void setInBuffer(GLMesh mesh, int index, Vector3f normal, Vector3f tangent, Vector3f binormal) {
         VertexBuffer NB = mesh.getBuffer(Type.Normal);
         VertexBuffer TB = mesh.getBuffer(Type.Tangent);
         VertexBuffer BB = mesh.getBuffer(Type.Binormal);
@@ -893,7 +893,7 @@ private int collideWithBoundingBox(BoundingBox bbox, CollisionResults results) {
     public void write(JmeExporter ex) throws IOException {
         // the mesh is removed, and reloaded when read() is called
         // this reduces the save size to 10% by not saving the mesh
-        Mesh temp = getMesh();
+        GLMesh temp = getMesh();
         mesh = null;
 
         super.write(ex);
@@ -928,7 +928,7 @@ public void read(JmeImporter im) throws IOException {
         lodEntropy = ic.readFloatArray("lodEntropy", null);
         geomap = (LODGeomap) ic.readSavable("geomap", null);
 
-        Mesh regen = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
+        GLMesh regen = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
         setMesh(regen);
         //TangentBinormalGenerator.generate(this); // note that this will be removed
         ensurePositiveVolumeBBox();
@@ -952,7 +952,7 @@ public TerrainPatch clone() {
         //clone.setLodCalculator(lodCalculatorFactory.clone());
         clone.geomap = new LODGeomap(size, geomap.getHeightArray());
         clone.setLocalTranslation(getLocalTranslation().clone());
-        Mesh m = clone.geomap.createMesh(clone.stepScale, Vector2f.UNIT_XY, clone.offset, clone.offsetAmount, clone.totalSize, false);
+        GLMesh m = clone.geomap.createMesh(clone.stepScale, Vector2f.UNIT_XY, clone.offset, clone.offsetAmount, clone.totalSize, false);
         clone.setMesh(m);
         clone.setMaterial(material == null ? null : material.clone());
         return clone;
@@ -976,7 +976,7 @@ public void cloneFields( Cloner cloner, Object original ) {
         // Don't feel like making geomap cloneable tonight,
         // so I'll copy the old logic.
         this.geomap = new LODGeomap(size, geomap.getHeightArray());
-        Mesh m = geomap.createMesh(stepScale, Vector2f.UNIT_XY, offset, offsetAmount, totalSize, false);
+        GLMesh m = geomap.createMesh(stepScale, Vector2f.UNIT_XY, offset, offsetAmount, totalSize, false);
         this.setMesh(m);
 
         // In this case, we always clone material even if the cloner is set up
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
index 9057664d12..0bc8ab95ff 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
@@ -36,7 +36,7 @@
 import com.jme3.math.Matrix4f;
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
@@ -61,7 +61,7 @@ public class EntropyComputeUtil {
     private EntropyComputeUtil() {
     }
 
-    public static float computeLodEntropy(Mesh terrainBlock, Buffer lodIndices){
+    public static float computeLodEntropy(GLMesh terrainBlock, Buffer lodIndices){
         // Bounding box for the terrain block
         BoundingBox bbox = (BoundingBox) terrainBlock.getBound();
 
diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java b/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
index c6d0237321..e65f68edc1 100644
--- a/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
+++ b/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
@@ -12,7 +12,7 @@
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Mesh;
+import com.jme3.scene.GLMesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -644,8 +644,8 @@ private ViewPort setupViewBuffers(Camera cam, String viewName){
      * @param api the underlying VR api
      * @return the distorted mesh.
      */
-    public static Mesh setupDistortionMesh(int eye, VRAPI api) {
-        Mesh distortionMesh = new Mesh();
+    public static GLMesh setupDistortionMesh(int eye, VRAPI api) {
+        GLMesh distortionMesh = new GLMesh();
         float m_iLensGridSegmentCountH = 43, m_iLensGridSegmentCountV = 43;
 
         float w = 1f / (m_iLensGridSegmentCountH - 1f);
diff --git a/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java b/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
index e2911eba6f..9339fc2b8a 100644
--- a/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
+++ b/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
@@ -52,10 +52,10 @@
  * @deprecated use com.jme3.scene.shape.CenterQuad
  */
 @Deprecated
-public class CenterQuad extends Mesh {
+public class CenterQuad extends GLMesh {
 
     public static CenterQuad UnitQuad = new CenterQuad(0.5f, 0.5f);
-    public static Mesh CenterSplitQuad;
+    public static GLMesh CenterSplitQuad;
     
     private float width;
     private float height;

From 65c076eb7a14e1d3e5fea29f09e1a9a77a29e895 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Fri, 12 Sep 2025 15:23:46 -0400
Subject: [PATCH 64/80] renamed new Mesh interface to NewMesh to not conflict
 with existing Mesh class

---
 jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java | 2 +-
 .../main/java/com/jme3/vulkan/mesh/{Mesh.java => NewMesh.java} | 2 +-
 .../src/main/java/jme3test/vulkan/VulkanHelperTest.java        | 3 +--
 3 files changed, 3 insertions(+), 4 deletions(-)
 rename jme3-core/src/main/java/com/jme3/vulkan/mesh/{Mesh.java => NewMesh.java} (88%)

diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
index 0d8bb0f4b1..043c40bba3 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
@@ -13,7 +13,7 @@
 
 import static org.lwjgl.vulkan.VK10.*;
 
-public abstract class AdaptiveMesh implements Mesh {
+public abstract class AdaptiveMesh implements NewMesh {
 
     protected enum VertexMode {
 
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/Mesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
similarity index 88%
rename from jme3-core/src/main/java/com/jme3/vulkan/mesh/Mesh.java
rename to jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
index 6951fa5ecf..2c020cd474 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/Mesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
@@ -2,7 +2,7 @@
 
 import com.jme3.vulkan.commands.CommandBuffer;
 
-public interface Mesh {
+public interface NewMesh {
 
     void bind(CommandBuffer cmd);
 
diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
index d4b767b1f7..e4ee925766 100644
--- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
+++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
@@ -14,7 +14,6 @@
 import com.jme3.util.natives.Native;
 import com.jme3.vulkan.Format;
 import com.jme3.vulkan.VulkanInstance;
-import com.jme3.vulkan.VulkanLogger;
 import com.jme3.vulkan.buffers.BufferUsage;
 import com.jme3.vulkan.buffers.GpuBuffer;
 import com.jme3.vulkan.buffers.PersistentBuffer;
@@ -79,7 +78,7 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda
     private boolean applicationStopped = false;
 
     // mesh
-    private Mesh mesh;
+    private NewMesh mesh;
     private final FloatBuffer vertexData = BufferUtils.createFloatBuffer(
             -0.5f, -0.5f, 0f,   1f, 0f, 0f,   1f, 0f,
              0.5f, -0.5f, 0f,   0f, 1f, 0f,   0f, 0f,

From 115a98507467ebb6dd0d32d80cb48c520ad3c815 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Fri, 12 Sep 2025 15:24:42 -0400
Subject: [PATCH 65/80] renamed GLMesh back to Mesh

---
 .../src/main/java/com/jme3/anim/Joint.java    |  2 +-
 .../main/java/com/jme3/anim/MorphControl.java | 10 +++---
 .../java/com/jme3/anim/SkinningControl.java   | 22 ++++++------
 .../main/java/com/jme3/animation/Bone.java    |  2 +-
 .../com/jme3/animation/SkeletonControl.java   | 22 ++++++------
 .../main/java/com/jme3/app/BasicProfiler.java | 10 +++---
 .../java/com/jme3/app/BasicProfilerState.java |  6 ++--
 .../java/com/jme3/bounding/BoundingBox.java   |  4 +--
 .../com/jme3/collision/CollisionResult.java   |  4 +--
 .../java/com/jme3/collision/bih/BIHTree.java  | 12 +++----
 .../java/com/jme3/effect/ParticleMesh.java    |  4 +--
 .../shapes/EmitterMeshConvexHullShape.java    |  4 +--
 .../effect/shapes/EmitterMeshFaceShape.java   |  8 ++---
 .../effect/shapes/EmitterMeshVertexShape.java |  8 ++---
 .../environment/util/BoundingSphereDebug.java |  4 +--
 .../java/com/jme3/font/BitmapTextPage.java    | 10 +++---
 .../java/com/jme3/material/RenderState.java   |  6 ++--
 .../logic/DefaultTechniqueDefLogic.java       |  4 +--
 .../java/com/jme3/renderer/RenderContext.java |  8 ++---
 .../java/com/jme3/renderer/RenderManager.java |  4 +--
 .../main/java/com/jme3/renderer/Renderer.java |  6 ++--
 .../java/com/jme3/renderer/Statistics.java    |  6 ++--
 .../com/jme3/renderer/opengl/GLRenderer.java  | 16 ++++-----
 .../main/java/com/jme3/scene/BatchNode.java   | 20 +++++------
 .../main/java/com/jme3/scene/Geometry.java    | 28 +++++++--------
 .../com/jme3/scene/GeometryGroupNode.java     |  2 +-
 .../com/jme3/scene/{GLMesh.java => Mesh.java} | 28 +++++++--------
 .../src/main/java/com/jme3/scene/Spatial.java |  6 ++--
 .../java/com/jme3/scene/VertexBuffer.java     |  2 +-
 .../com/jme3/scene/control/LodControl.java    |  4 +--
 .../main/java/com/jme3/scene/debug/Arrow.java |  4 +--
 .../main/java/com/jme3/scene/debug/Grid.java  |  4 +--
 .../jme3/scene/debug/SkeletonDebugger.java    |  4 +--
 .../scene/debug/SkeletonInterBoneWire.java    |  4 +--
 .../com/jme3/scene/debug/SkeletonPoints.java  |  4 +--
 .../com/jme3/scene/debug/SkeletonWire.java    |  4 +--
 .../java/com/jme3/scene/debug/WireBox.java    |  4 +--
 .../com/jme3/scene/debug/WireFrustum.java     |  6 ++--
 .../java/com/jme3/scene/debug/WireSphere.java |  4 +--
 .../debug/custom/ArmatureInterJointsWire.java |  4 +--
 .../jme3/scene/debug/custom/ArmatureNode.java |  4 +--
 .../jme3/scene/debug/custom/JointShape.java   |  4 +--
 .../jme3/scene/instancing/InstancedNode.java  |  4 +--
 .../java/com/jme3/scene/mesh/IndexBuffer.java |  4 +--
 .../jme3/scene/mesh/VirtualIndexBuffer.java   |  2 +-
 .../jme3/scene/mesh/WrappedIndexBuffer.java   |  8 ++---
 .../com/jme3/scene/shape/AbstractBox.java     |  4 +--
 .../java/com/jme3/scene/shape/CenterQuad.java |  4 +--
 .../main/java/com/jme3/scene/shape/Curve.java | 12 +++----
 .../java/com/jme3/scene/shape/Cylinder.java   |  4 +--
 .../main/java/com/jme3/scene/shape/Dome.java  |  4 +--
 .../main/java/com/jme3/scene/shape/Line.java  |  4 +--
 .../java/com/jme3/scene/shape/PQTorus.java    |  4 +--
 .../main/java/com/jme3/scene/shape/Quad.java  |  4 +--
 .../com/jme3/scene/shape/RectangleMesh.java   |  4 +--
 .../java/com/jme3/scene/shape/Sphere.java     |  4 +--
 .../java/com/jme3/scene/shape/Surface.java    |  4 +--
 .../main/java/com/jme3/scene/shape/Torus.java |  4 +--
 .../java/com/jme3/system/NullRenderer.java    |  4 +--
 .../jme3/util/TangentBinormalGenerator.java   | 36 +++++++++----------
 .../main/java/com/jme3/util/TangentUtils.java | 16 ++++-----
 .../jme3/util/mikktspace/MikkTSpaceImpl.java  |  6 ++--
 .../MikktspaceTangentGenerator.java           |  8 ++---
 .../com/jme3/scene/plugins/OBJLoader.java     |  8 ++---
 .../collision/CollideIgnoreTransformTest.java |  4 +--
 .../java/com/jme3/light/LightSortTest.java    |  6 ++--
 .../jme3/renderer/OpaqueComparatorTest.java   |  4 +--
 .../com/jme3/scene/PhantomTrianglesTest.java  |  6 ++--
 .../java/com/jme3/scene/mesh/MeshTest.java    |  4 +--
 .../scene/mesh/VirtualIndexBufferTest.java    |  2 +-
 .../java/com/jme3/tools/LodGeneratorTest.java | 10 +++---
 .../java/com/jme3/util/TestIssue1909.java     |  4 +--
 .../java/com/jme3/util/TestIssue1919.java     | 30 ++++++++--------
 .../optimize/GeometryBatchFactory.java        | 16 ++++-----
 .../java/jme3tools/optimize/LodGenerator.java | 12 +++----
 .../java/jme3tools/optimize/TextureAtlas.java | 12 +++----
 .../jme3test/animation/TestIssue2076.java     |  6 ++--
 .../jme3test/app/TestCustomAppSettings.java   |  6 ++--
 .../main/java/jme3test/audio/TestAmbient.java |  4 +--
 .../jme3test/audio/TestAudioDirectional.java  |  4 +--
 .../main/java/jme3test/audio/TestDoppler.java |  4 +--
 .../src/main/java/jme3test/audio/TestOgg.java |  4 +--
 .../main/java/jme3test/audio/TestReverb.java  |  4 +--
 .../jme3test/bullet/PhysicsTestHelper.java    |  6 ++--
 .../java/jme3test/bullet/TestIssue1120.java   |  4 +--
 .../bullet/shape/TestGimpactShape.java        |  6 ++--
 .../jme3test/collision/TestRayCasting.java    |  4 +--
 .../collision/TestTriangleCollision.java      |  4 +--
 .../java/jme3test/games/WorldOfInception.java |  6 ++--
 .../java/jme3test/light/TestObbVsBounds.java  |  2 +-
 .../java/jme3test/light/TestTangentGen.java   | 12 +++----
 .../light/pbr/TestIssue1903Compat.java        |  4 +--
 .../jme3test/material/TestGeometryShader.java |  6 ++--
 .../material/TestTessellationShader.java      |  4 +--
 .../java/jme3test/math/TestRandomPoints.java  |  4 +--
 .../jme3test/model/anim/TestArmature.java     |  2 +-
 .../model/anim/TestBaseAnimSerialization.java |  2 +-
 .../jme3test/model/shape/TestCustomMesh.java  |  8 ++---
 .../jme3test/model/shape/TestDebugShapes.java |  4 +--
 .../renderer/TestBackgroundImage.java         |  4 +--
 .../java/jme3test/renderer/TestIssue37.java   |  4 +--
 .../java/jme3test/renderer/TestLineWidth.java |  4 +--
 .../scene/instancing/TestInstanceNode.java    | 10 +++---
 ...ancedNodeAttachDetachWithShadowFilter.java |  6 ++--
 .../java/jme3test/stress/TestLeakingGL.java   |  4 +--
 .../jme3test/stress/TestLodGeneration.java    |  4 +--
 .../jme3test/texture/TestSkyRotation.java     |  4 +--
 .../jme3test/texture/TestTextureArray.java    |  4 +--
 .../texture/TestTextureArrayCompressed.java   |  4 +--
 .../com/jme3/bullet/animation/DacLinks.java   |  8 ++---
 .../com/jme3/bullet/animation/RagUtils.java   | 30 ++++++++--------
 .../shapes/GImpactCollisionShape.java         |  8 ++---
 .../shapes/HeightfieldCollisionShape.java     |  4 +--
 .../collision/shapes/HullCollisionShape.java  |  8 ++---
 .../collision/shapes/MeshCollisionShape.java  | 10 +++---
 .../control/KinematicRagdollControl.java      |  4 +--
 .../jme3/bullet/control/RigidBodyControl.java |  4 +--
 .../bullet/control/ragdoll/RagdollUtils.java  | 18 +++++-----
 .../bullet/util/CollisionShapeFactory.java    |  6 ++--
 .../java/com/jme3/bullet/util/Converter.java  | 10 +++---
 .../jme3/bullet/util/DebugShapeFactory.java   | 10 +++---
 .../test/PreventBulletIssueRegressions.java   |  4 +--
 .../jme3/niftygui/JmeBatchRenderBackend.java  |  4 +--
 .../jme3/scene/plugins/fbx/mesh/FbxMesh.java  | 10 +++---
 .../jme3/scene/plugins/fbx/node/FbxNode.java  |  8 ++---
 .../scene/plugins/fbx/objects/FbxMesh.java    |  8 ++---
 .../scene/plugins/fbx/objects/FbxSkin.java    |  8 ++---
 .../jme3/scene/plugins/gltf/GltfLoader.java   |  2 +-
 .../jme3/scene/plugins/gltf/GltfUtils.java    | 26 +++++++-------
 .../gltf/TextureTransformExtensionLoader.java |  8 ++---
 .../java/com/jme3/scene/plugins/IrUtils.java  |  8 ++---
 .../jme3/scene/plugins/ogre/MeshLoader.java   | 18 +++++-----
 .../animation/TestIssue2076.java              |  6 ++--
 .../main/java/com/jme3/terrain/GeoMap.java    |  6 ++--
 .../com/jme3/terrain/geomipmap/LODGeomap.java | 10 +++---
 .../jme3/terrain/geomipmap/TerrainPatch.java  | 14 ++++----
 .../lodcalc/util/EntropyComputeUtil.java      |  4 +--
 .../input/vr/openvr/OpenVRViewManager.java    |  6 ++--
 .../main/java/com/jme3/scene/CenterQuad.java  |  4 +--
 139 files changed, 508 insertions(+), 508 deletions(-)
 rename jme3-core/src/main/java/com/jme3/scene/{GLMesh.java => Mesh.java} (98%)

diff --git a/jme3-core/src/main/java/com/jme3/anim/Joint.java b/jme3-core/src/main/java/com/jme3/anim/Joint.java
index ad01d0b4bf..8f2275b202 100644
--- a/jme3-core/src/main/java/com/jme3/anim/Joint.java
+++ b/jme3-core/src/main/java/com/jme3/anim/Joint.java
@@ -366,7 +366,7 @@ protected Node getAttachmentsNode(int jointIndex, SafeArrayList target
          * Search for a geometry animated by this particular bone.
          */
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimatedByJoint(jointIndex)) {
                 targetGeometry = geometry;
                 break;
diff --git a/jme3-core/src/main/java/com/jme3/anim/MorphControl.java b/jme3-core/src/main/java/com/jme3/anim/MorphControl.java
index 4914b691d3..4c2f0a6c75 100644
--- a/jme3-core/src/main/java/com/jme3/anim/MorphControl.java
+++ b/jme3-core/src/main/java/com/jme3/anim/MorphControl.java
@@ -107,7 +107,7 @@ protected void controlUpdate(float tpf) {
     @Override
     protected void controlRender(RenderManager rm, ViewPort vp) {
         for (Geometry geom : targets.getArray()) {
-            GLMesh mesh = geom.getMesh();
+            Mesh mesh = geom.getMesh();
             if (!geom.isDirtyMorph()) {
                 continue;
             }
@@ -236,7 +236,7 @@ private int getMaxGPUTargets(RenderManager rm, Geometry geom, Material mat, int
         return maxGPUTargets;
     }
 
-    private int bindMorphTargetBuffer(GLMesh mesh, int targetNumBuffers, int boundBufferIdx, MorphTarget t) {
+    private int bindMorphTargetBuffer(Mesh mesh, int targetNumBuffers, int boundBufferIdx, MorphTarget t) {
         int start = VertexBuffer.Type.MorphTarget0.ordinal();
         if (targetNumBuffers >= 1) {
             activateBuffer(mesh, boundBufferIdx, start, t.getBuffer(VertexBuffer.Type.Position));
@@ -305,7 +305,7 @@ private void mergeTargetBuffer(float[] array, float weight, FloatBuffer src, boo
         }
     }
 
-    private void activateBuffer(GLMesh mesh, int idx, int start, FloatBuffer b) {
+    private void activateBuffer(Mesh mesh, int idx, int start, FloatBuffer b) {
         VertexBuffer.Type t = bufferTypes[start + idx];
         VertexBuffer vb = mesh.getBuffer(t);
         // only set the buffer if it's different
@@ -364,7 +364,7 @@ private int getTargetNumBuffers(MorphTarget morphTarget) {
      * @param renderer
      * @return
      */
-    private int getRemainingBuffers(GLMesh mesh, Renderer renderer) {
+    private int getRemainingBuffers(Mesh mesh, Renderer renderer) {
         int nbUsedBuffers = 0;
         for (VertexBuffer vb : mesh.getBufferList().getArray()) {
             boolean isMorphBuffer = vb.getBufferType().ordinal() >= VertexBuffer.Type.MorphTarget0.ordinal() && vb.getBufferType().ordinal() <= VertexBuffer.Type.MorphTarget9.ordinal();
@@ -471,7 +471,7 @@ public void visit(Geometry geom) {
             if (p == null) {
                 return;
             }
-            GLMesh mesh = geom.getMesh();
+            Mesh mesh = geom.getMesh();
             if (mesh != null && mesh.hasMorphTargets()) {
                 targets.add(geom);
                 // If the mesh is in a subgraph of a node with a SkinningControl it might have hardware skinning activated through mat param override even if it's not skinned.
diff --git a/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java b/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
index 10b2d52b64..7cc5f3c58b 100644
--- a/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
+++ b/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
@@ -143,7 +143,7 @@ private void switchToHardware() {
         numberOfJointsParam.setValue(numBones);
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(false);
             }
@@ -155,7 +155,7 @@ private void switchToSoftware() {
         jointMatricesParam.setEnabled(false);
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(true);
             }
@@ -215,7 +215,7 @@ public boolean isHardwareSkinningUsed() {
      * to the lists of animation targets.
      */
     private void findTargets(Geometry geometry) {
-        GLMesh mesh = geometry.getMesh();
+        Mesh mesh = geometry.getMesh();
         if (mesh != null && mesh.isAnimated()) {
             targets.add(geometry);
         }
@@ -257,7 +257,7 @@ private void controlRenderSoftware() {
         offsetMatrices = armature.computeSkinningMatrices();
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             // NOTE: This assumes code higher up has
             // already ensured this mesh is animated.
             // Otherwise a crash will happen in skin update.
@@ -317,7 +317,7 @@ protected void controlUpdate(float tpf) {
     //only do this for software updates
     void resetToBind() {
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 Buffer bwBuff = mesh.getBuffer(Type.BoneWeight).getData();
                 Buffer biBuff = mesh.getBuffer(Type.BoneIndex).getData();
@@ -424,11 +424,11 @@ public Armature getArmature() {
      *
      * @return a new array
      */
-    public GLMesh[] getTargets() {
-        GLMesh[] result = new GLMesh[targets.size()];
+    public Mesh[] getTargets() {
+        Mesh[] result = new Mesh[targets.size()];
         int i = 0;
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             result[i] = mesh;
             i++;
         }
@@ -442,7 +442,7 @@ public GLMesh[] getTargets() {
      * @param mesh           then mesh
      * @param offsetMatrices the transformation matrices to apply
      */
-    private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) {
+    private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) {
 
         VertexBuffer tb = mesh.getBuffer(Type.Tangent);
         if (tb == null) {
@@ -462,7 +462,7 @@ private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) {
      * @param mesh           the mesh
      * @param offsetMatrices the offset matrices to apply
      */
-    private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) {
+    private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
         if (maxWeightsPerVert <= 0) {
             throw new IllegalStateException("Max weights per vert is incorrectly set!");
@@ -569,7 +569,7 @@ private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) {
      * @param offsetMatrices the offsetMatrices to apply
      * @param tb             the tangent vertexBuffer
      */
-    private void applySkinningTangents(GLMesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
+    private void applySkinningTangents(Mesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
 
         if (maxWeightsPerVert <= 0) {
diff --git a/jme3-core/src/main/java/com/jme3/animation/Bone.java b/jme3-core/src/main/java/com/jme3/animation/Bone.java
index dddaea8ad6..2d4211b90a 100644
--- a/jme3-core/src/main/java/com/jme3/animation/Bone.java
+++ b/jme3-core/src/main/java/com/jme3/animation/Bone.java
@@ -722,7 +722,7 @@ Node getAttachmentsNode(int boneIndex, SafeArrayList targets) {
          * Search for a geometry animated by this particular bone.
          */
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimatedByBone(boneIndex)) {
                 targetGeometry = geometry;
                 break;
diff --git a/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java b/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
index a2e24714c6..2428919c5e 100644
--- a/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
+++ b/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
@@ -124,7 +124,7 @@ private void switchToHardware() {
         numberOfBonesParam.setValue(numBones);
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(false);
             }
@@ -136,7 +136,7 @@ private void switchToSoftware() {
         boneMatricesParam.setEnabled(false);
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 mesh.prepareForAnim(true);
             }
@@ -211,7 +211,7 @@ public SkeletonControl(Skeleton skeleton) {
      * to the lists of animation targets.
      */
     private void findTargets(Geometry geometry) {
-        GLMesh mesh = geometry.getMesh();
+        Mesh mesh = geometry.getMesh();
         if (mesh != null && mesh.isAnimated()) {
             targets.add(geometry);
         }
@@ -252,7 +252,7 @@ private void controlRenderSoftware() {
         offsetMatrices = skeleton.computeSkinningMatrices();
 
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             // NOTE: This assumes code higher up has
             // already ensured this mesh is animated.
             // Otherwise a crash will happen in skin update.
@@ -311,7 +311,7 @@ protected void controlUpdate(float tpf) {
     //only do this for software updates
     void resetToBind() {
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             if (mesh != null && mesh.isAnimated()) {
                 Buffer bwBuff = mesh.getBuffer(Type.BoneWeight).getData();
                 Buffer biBuff = mesh.getBuffer(Type.BoneIndex).getData();
@@ -418,11 +418,11 @@ public Skeleton getSkeleton() {
      *
      * @return a new array
      */
-    public GLMesh[] getTargets() {
-        GLMesh[] result = new GLMesh[targets.size()];
+    public Mesh[] getTargets() {
+        Mesh[] result = new Mesh[targets.size()];
         int i = 0;
         for (Geometry geometry : targets) {
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             result[i] = mesh;
             i++;
         }
@@ -436,7 +436,7 @@ public GLMesh[] getTargets() {
      * @param mesh then mesh
      * @param offsetMatrices the transformation matrices to apply
      */
-    private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) {
+    private void softwareSkinUpdate(Mesh mesh, Matrix4f[] offsetMatrices) {
 
         VertexBuffer tb = mesh.getBuffer(Type.Tangent);
         if (tb == null) {
@@ -454,7 +454,7 @@ private void softwareSkinUpdate(GLMesh mesh, Matrix4f[] offsetMatrices) {
      * @param mesh the mesh
      * @param offsetMatrices the offset matrices to apply
      */
-    private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) {
+    private void applySkinning(Mesh mesh, Matrix4f[] offsetMatrices) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
         if (maxWeightsPerVert <= 0) {
             throw new IllegalStateException("Max weights per vert is incorrectly set!");
@@ -561,7 +561,7 @@ private void applySkinning(GLMesh mesh, Matrix4f[] offsetMatrices) {
      * @param offsetMatrices the offset matrices to apply
      * @param tb the tangent vertexBuffer
      */
-    private void applySkinningTangents(GLMesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
+    private void applySkinningTangents(Mesh mesh, Matrix4f[] offsetMatrices, VertexBuffer tb) {
         int maxWeightsPerVert = mesh.getMaxNumWeights();
 
         if (maxWeightsPerVert <= 0) {
diff --git a/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java b/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java
index 974d6df77f..1c95730bbc 100644
--- a/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java
+++ b/jme3-core/src/main/java/com/jme3/app/BasicProfiler.java
@@ -39,7 +39,7 @@
 import com.jme3.profile.VpStep;
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.nio.FloatBuffer;
@@ -73,7 +73,7 @@ public class BasicProfiler implements AppProfiler {
     private long updateInterval = 1000000L; // once a millisecond
     private long lastUpdate = 0;
 
-    private GLMesh mesh;
+    private Mesh mesh;
 
     public BasicProfiler() {
         this(1280);
@@ -128,14 +128,14 @@ public long getUpdateInterval() {
      *
      * @return the pre-existing Mesh
      */
-    public GLMesh getMesh() {
+    public Mesh getMesh() {
         return mesh;
     }
 
     protected final void createMesh() {
         if (mesh == null) {
-            mesh = new GLMesh();
-            mesh.setMode(GLMesh.Mode.Lines);
+            mesh = new Mesh();
+            mesh.setMode(Mesh.Mode.Lines);
         }
 
         mesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(size * 4 * 3));
diff --git a/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java b/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java
index 8dfb70d835..68ee1483fb 100644
--- a/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java
+++ b/jme3-core/src/main/java/com/jme3/app/BasicProfilerState.java
@@ -40,7 +40,7 @@
 import com.jme3.material.Material;
 import com.jme3.material.RenderState.BlendMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer.Type;
 
@@ -116,7 +116,7 @@ public int getFrameCount() {
     }
 
     protected void refreshBackground() {
-        GLMesh mesh = background.getMesh();
+        Mesh mesh = background.getMesh();
 
         int size = profiler.getFrameCount();
         float frameTime = 1000f / 60;
@@ -180,7 +180,7 @@ protected void initialize(Application app) {
         graph.setLocalTranslation(0, 300, 0);
         graph.setLocalScale(1, scale, 1);
 
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         background = new Geometry("profiler.background", mesh);
         mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setBoolean("VertexColor", true);
diff --git a/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java b/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
index e405b28650..6b0e023b34 100644
--- a/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
+++ b/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.*;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.util.TempVars;
 import java.io.IOException;
@@ -172,7 +172,7 @@ public void computeFromTris(Triangle[] tris, int start, int end) {
         vars.release();
     }
 
-    public void computeFromTris(int[] indices, GLMesh mesh, int start, int end) {
+    public void computeFromTris(int[] indices, Mesh mesh, int start, int end) {
         if (end - start <= 0) {
             return;
         }
diff --git a/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java b/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java
index a5fd5ff42d..95739f5a1c 100644
--- a/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java
+++ b/jme3-core/src/main/java/com/jme3/collision/CollisionResult.java
@@ -34,7 +34,7 @@
 import com.jme3.math.Triangle;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 
 /**
  * A CollisionResult represents a single collision instance
@@ -90,7 +90,7 @@ public Triangle getTriangle(Triangle store) {
         if (store == null)
             store = new Triangle();
 
-        GLMesh m = geometry.getMesh();
+        Mesh m = geometry.getMesh();
         m.getTriangle(triangleIndex, store);
         store.calculateCenter();
         store.calculateNormal();
diff --git a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
index 749e90bfb0..fca434f750 100644
--- a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
+++ b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
@@ -46,8 +46,8 @@
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.CollisionData;
-import com.jme3.scene.GLMesh;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
@@ -62,7 +62,7 @@ public class BIHTree implements CollisionData {
 
     public static final int MAX_TREE_DEPTH = 100;
     public static final int MAX_TRIS_PER_NODE = 21;
-    private GLMesh mesh;
+    private Mesh mesh;
     private BIHNode root;
     private int maxTrisPerNode;
     private int numTris;
@@ -98,7 +98,7 @@ private void initTriList(FloatBuffer vb, IndexBuffer ib) {
         }
     }
 
-    public BIHTree(GLMesh mesh, int maxTrisPerNode) {
+    public BIHTree(Mesh mesh, int maxTrisPerNode) {
         this.mesh = mesh;
         this.maxTrisPerNode = maxTrisPerNode;
 
@@ -128,7 +128,7 @@ public BIHTree(GLMesh mesh, int maxTrisPerNode) {
         initTriList(vb, ib);
     }
 
-    public BIHTree(GLMesh mesh) {
+    public BIHTree(Mesh mesh) {
         this(mesh, MAX_TRIS_PER_NODE);
     }
 
@@ -484,7 +484,7 @@ public void write(JmeExporter ex) throws IOException {
     @Override
     public void read(JmeImporter im) throws IOException {
         InputCapsule ic = im.getCapsule(this);
-        mesh = (GLMesh) ic.readSavable("mesh", null);
+        mesh = (Mesh) ic.readSavable("mesh", null);
         root = (BIHNode) ic.readSavable("root", null);
         maxTrisPerNode = ic.readInt("tris_per_node", 0);
         pointData = ic.readFloatArray("points", null);
diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java
index 1c9f43b9a8..b4333ae9f8 100644
--- a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java
+++ b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Matrix3f;
 import com.jme3.renderer.Camera;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 
 /**
  * The ParticleMesh is the underlying visual implementation of a 
@@ -41,7 +41,7 @@
  * 
  * @author Kirill Vainer
  */
-public abstract class ParticleMesh extends GLMesh {
+public abstract class ParticleMesh extends Mesh {
 
     /**
      * Type of particle mesh
diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java
index ea42e95ca4..e7ccd18f33 100644
--- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java
+++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import java.util.List;
 
 /**
@@ -55,7 +55,7 @@ public EmitterMeshConvexHullShape() {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public EmitterMeshConvexHullShape(List meshes) {
+    public EmitterMeshConvexHullShape(List meshes) {
         super(meshes);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java
index 8ee9d60e2e..cda0c911eb 100644
--- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java
+++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshFaceShape.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.util.ArrayList;
@@ -56,15 +56,15 @@ public EmitterMeshFaceShape() {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public EmitterMeshFaceShape(List meshes) {
+    public EmitterMeshFaceShape(List meshes) {
         super(meshes);
     }
 
     @Override
-    public void setMeshes(List meshes) {
+    public void setMeshes(List meshes) {
         this.vertices = new ArrayList>(meshes.size());
         this.normals = new ArrayList>(meshes.size());
-        for (GLMesh mesh : meshes) {
+        for (Mesh mesh : meshes) {
             Vector3f[] vertexTable = BufferUtils.getVector3Array(mesh.getFloatBuffer(Type.Position));
             int[] indices = new int[3];
             List vertices = new ArrayList<>(mesh.getTriangleCount() * 3);
diff --git a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java
index 3939304586..cadb07ca48 100644
--- a/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java
+++ b/jme3-core/src/main/java/com/jme3/effect/shapes/EmitterMeshVertexShape.java
@@ -37,7 +37,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.clone.Cloner;
@@ -68,7 +68,7 @@ public EmitterMeshVertexShape() {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public EmitterMeshVertexShape(List meshes) {
+    public EmitterMeshVertexShape(List meshes) {
         this.setMeshes(meshes);
     }
 
@@ -77,12 +77,12 @@ public EmitterMeshVertexShape(List meshes) {
      * @param meshes
      *        a list of meshes that will form the emitter's shape
      */
-    public void setMeshes(List meshes) {
+    public void setMeshes(List meshes) {
         Map vertToNormalMap = new HashMap<>();
 
         this.vertices = new ArrayList>(meshes.size());
         this.normals = new ArrayList>(meshes.size());
-        for (GLMesh mesh : meshes) {
+        for (Mesh mesh : meshes) {
             // fetching the data
             float[] vertexTable = BufferUtils.getFloatArray(mesh.getFloatBuffer(Type.Position));
             float[] normalTable = BufferUtils.getFloatArray(mesh.getFloatBuffer(Type.Normal));
diff --git a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java
index f8ac7f94e2..622164e4a1 100644
--- a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java
+++ b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java
@@ -36,7 +36,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.FastMath;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.nio.FloatBuffer;
@@ -49,7 +49,7 @@
  * 
  * @author nehon
  */
-public class BoundingSphereDebug extends GLMesh {
+public class BoundingSphereDebug extends Mesh {
 
     protected int vertCount;
     protected int triCount;
diff --git a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java
index b7059ceaaa..c4ac9b26f0 100644
--- a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java
+++ b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java
@@ -33,7 +33,7 @@
 
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Texture2D;
@@ -59,7 +59,7 @@ class BitmapTextPage extends Geometry {
     private final LinkedList pageQuads = new LinkedList<>();
 
     BitmapTextPage(BitmapFont font, boolean arrayBased, int page) {
-        super("BitmapFont", new GLMesh());
+        super("BitmapFont", new Mesh());
         setRequiresUpdates(false);
         setBatchHint(BatchHint.Never);
         if (font == null) {
@@ -77,7 +77,7 @@ class BitmapTextPage extends Geometry {
         this.texture = (Texture2D) mat.getTextureParam("ColorMap").getTextureValue();
 
         // initialize buffers
-        GLMesh m = getMesh();
+        Mesh m = getMesh();
         m.setBuffer(Type.Position, 3, new float[0]);
         m.setBuffer(Type.TexCoord, 2, new float[0]);
         m.setBuffer(Type.Color, 4, new byte[0]);
@@ -130,7 +130,7 @@ public BitmapTextPage clone() {
     @Override
     public void cloneFields(Cloner cloner, Object original) {
         
-        GLMesh originalMesh = this.mesh;
+        Mesh originalMesh = this.mesh;
     
         super.cloneFields(cloner, original);
         
@@ -162,7 +162,7 @@ void assemble(Letters quads) {
             }
         }
 
-        GLMesh m = getMesh();
+        Mesh m = getMesh();
         int vertCount = pageQuads.size() * 4;
         int triCount = pageQuads.size() * 2;
 
diff --git a/jme3-core/src/main/java/com/jme3/material/RenderState.java b/jme3-core/src/main/java/com/jme3/material/RenderState.java
index 1002b350c3..be79559957 100644
--- a/jme3-core/src/main/java/com/jme3/material/RenderState.java
+++ b/jme3-core/src/main/java/com/jme3/material/RenderState.java
@@ -32,7 +32,7 @@
 package com.jme3.material;
 
 import com.jme3.export.*;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import java.io.IOException;
 
 /**
@@ -880,7 +880,7 @@ public void setDepthWrite(boolean depthWrite) {
     /**
      * Enables wireframe rendering mode.
      *
-     * 

When in wireframe mode, {@link GLMesh meshes} rendered in triangle mode + *

When in wireframe mode, {@link Mesh meshes} rendered in triangle mode * will not be solid, but instead, only the edges of the triangles * will be rendered. * @@ -982,7 +982,7 @@ public void setDepthFunc(TestFunction depthFunc) { /** * Sets the mesh line width. * Use this in conjunction with {@link #setWireframe(boolean)} or with a mesh in - * {@link GLMesh.Mode#Lines} mode. + * {@link Mesh.Mode#Lines} mode. * Note: this does not work in OpenGL core profile. It only works in * compatibility profile. * diff --git a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java index b295c7588b..ca8f7d1efa 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java @@ -40,7 +40,7 @@ import com.jme3.renderer.RenderManager; import com.jme3.renderer.Renderer; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.instancing.InstancedGeometry; import com.jme3.shader.DefineList; import com.jme3.shader.Shader; @@ -61,7 +61,7 @@ public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager } public static void renderMeshFromGeometry(Renderer renderer, Geometry geom) { - GLMesh mesh = geom.getMesh(); + Mesh mesh = geom.getMesh(); int lodLevel = geom.getLodLevel(); if (geom instanceof InstancedGeometry) { InstancedGeometry instGeom = (InstancedGeometry) geom; diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java index 0d153674a6..c6cdec02f1 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java @@ -33,7 +33,7 @@ import com.jme3.material.RenderState; import com.jme3.math.ColorRGBA; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.shader.Shader; import com.jme3.texture.FrameBuffer; @@ -227,21 +227,21 @@ public class RenderContext { /** * Currently bound element array vertex buffer. * - * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(Mesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundElementArrayVBO; /** * ID of the bound vertex array. * - * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(Mesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundVertexArray; /** * Currently bound array vertex buffer. * - * @see Renderer#renderMesh(GLMesh, int, int, com.jme3.scene.VertexBuffer[]) + * @see Renderer#renderMesh(Mesh, int, int, com.jme3.scene.VertexBuffer[]) */ public int boundArrayVBO; diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java index 6d6a1afeac..c59ffd9084 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java @@ -54,7 +54,7 @@ import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.renderer.queue.RenderQueue.ShadowMode; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.scene.VertexBuffer; @@ -890,7 +890,7 @@ public void preloadScene(Spatial scene) { } gm.getMaterial().preload(this, gm); - GLMesh mesh = gm.getMesh(); + Mesh mesh = gm.getMesh(); if (mesh != null && mesh.getVertexCount() != 0 && mesh.getTriangleCount() != 0) { diff --git a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java index e8a517c2b6..acd0d599e1 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java @@ -33,7 +33,7 @@ import com.jme3.material.RenderState; import com.jme3.math.ColorRGBA; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.shader.bufferobject.BufferObject; import com.jme3.shader.Shader; @@ -351,12 +351,12 @@ public void setTexture(int unit, Texture tex) * per-instance vertex attribute to the shader. * * @param mesh The mesh to render - * @param lod The LOD level to use, see {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. + * @param lod The LOD level to use, see {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. * @param count Number of mesh instances to render * @param instanceData When count is greater than 1, these buffers provide * the per-instance attributes. */ - public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData); + public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData); /** * Resets all previously used {@link NativeObject Native Objects} on this Renderer. diff --git a/jme3-core/src/main/java/com/jme3/renderer/Statistics.java b/jme3-core/src/main/java/com/jme3/renderer/Statistics.java index 8cf89bb171..b2766df154 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Statistics.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Statistics.java @@ -31,7 +31,7 @@ */ package com.jme3.renderer; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.shader.Shader; import com.jme3.texture.FrameBuffer; import com.jme3.texture.Image; @@ -172,7 +172,7 @@ public void getData(int[] data) { * @param lod which level of detail * @param count multiplier for triangles and vertices */ - public void onMeshDrawn(GLMesh mesh, int lod, int count) { + public void onMeshDrawn(Mesh mesh, int lod, int count) { if (!enabled) { return; } @@ -188,7 +188,7 @@ public void onMeshDrawn(GLMesh mesh, int lod, int count) { * @param mesh the Mesh that was drawn (not null) * @param lod which level of detail */ - public void onMeshDrawn(GLMesh mesh, int lod) { + public void onMeshDrawn(Mesh mesh, int lod) { onMeshDrawn(mesh, lod, 1); } diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index b65d402ca2..09a560d4a6 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -39,8 +39,8 @@ import com.jme3.math.*; import com.jme3.opencl.OpenCLObjectManager; import com.jme3.renderer.*; -import com.jme3.scene.GLMesh; -import com.jme3.scene.GLMesh.Mode; +import com.jme3.scene.Mesh; +import com.jme3.scene.Mesh.Mode; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -3227,7 +3227,7 @@ public void setVertexAttrib(VertexBuffer vb) { setVertexAttrib(vb, null); } - public void drawTriangleArray(GLMesh.Mode mode, int count, int vertCount) { + public void drawTriangleArray(Mesh.Mode mode, int count, int vertCount) { boolean useInstancing = count > 1 && caps.contains(Caps.MeshInstancing); if (useInstancing) { glext.glDrawArraysInstancedARB(convertElementMode(mode), 0, @@ -3237,7 +3237,7 @@ public void drawTriangleArray(GLMesh.Mode mode, int count, int vertCount) { } } - public void drawTriangleList(VertexBuffer indexBuf, GLMesh mesh, int count) { + public void drawTriangleList(VertexBuffer indexBuf, Mesh mesh, int count) { if (indexBuf.getBufferType() != VertexBuffer.Type.Index) { throw new IllegalArgumentException("Only index buffers are allowed as triangle lists."); } @@ -3340,7 +3340,7 @@ public void drawTriangleList(VertexBuffer indexBuf, GLMesh mesh, int count) { * @param mode input enum value (not null) * @return the corresponding GL value */ - public int convertElementMode(GLMesh.Mode mode) { + public int convertElementMode(Mesh.Mode mode) { switch (mode) { case Points: return GL.GL_POINTS; @@ -3363,7 +3363,7 @@ public int convertElementMode(GLMesh.Mode mode) { } } - public void updateVertexArray(GLMesh mesh, VertexBuffer instanceData) { + public void updateVertexArray(Mesh mesh, VertexBuffer instanceData) { int id = mesh.getId(); if (id == -1) { IntBuffer temp = intBuf1; @@ -3403,7 +3403,7 @@ public void updateVertexArray(GLMesh mesh, VertexBuffer instanceData) { } } - private void renderMeshDefault(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) { + private void renderMeshDefault(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { // Here while count is still passed in. Can be removed when/if // the method is collapsed again. -pspeed @@ -3453,7 +3453,7 @@ private void renderMeshDefault(GLMesh mesh, int lod, int count, VertexBuffer[] i } @Override - public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) { + public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { if (mesh.getVertexCount() == 0 || mesh.getTriangleCount() == 0 || count == 0) { return; } diff --git a/jme3-core/src/main/java/com/jme3/scene/BatchNode.java b/jme3-core/src/main/java/com/jme3/scene/BatchNode.java index 3308422d66..aa5d62a02a 100644 --- a/jme3-core/src/main/java/com/jme3/scene/BatchNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/BatchNode.java @@ -128,8 +128,8 @@ protected Matrix4f getTransformMatrix(Geometry g) { protected void updateSubBatch(Geometry bg) { Batch batch = batchesByGeom.get(bg); if (batch != null) { - GLMesh mesh = batch.geometry.getMesh(); - GLMesh origMesh = bg.getMesh(); + Mesh mesh = batch.geometry.getMesh(); + Mesh origMesh = bg.getMesh(); VertexBuffer pvb = mesh.getBuffer(VertexBuffer.Type.Position); VertexBuffer nvb = mesh.getBuffer(VertexBuffer.Type.Normal); @@ -202,7 +202,7 @@ protected void doBatch() { } for (Map.Entry> entry : matMap.entrySet()) { - GLMesh m = new GLMesh(); + Mesh m = new Mesh(); Material material = entry.getKey(); List list = entry.getValue(); nbGeoms += list.size(); @@ -377,7 +377,7 @@ public Material getMaterial() { * @param geometries * @param outMesh */ - private void mergeGeometries(GLMesh outMesh, List geometries) { + private void mergeGeometries(Mesh outMesh, List geometries) { int[] compsForBuf = new int[VertexBuffer.Type.values().length]; VertexBuffer.Format[] formatForBuf = new VertexBuffer.Format[compsForBuf.length]; boolean[] normForBuf = new boolean[VertexBuffer.Type.values().length]; @@ -387,30 +387,30 @@ private void mergeGeometries(GLMesh outMesh, List geometries) { int totalLodLevels = 0; int maxWeights = -1; - GLMesh.Mode mode = null; + Mesh.Mode mode = null; for (Geometry geom : geometries) { totalVerts += geom.getVertexCount(); totalTris += geom.getTriangleCount(); totalLodLevels = Math.min(totalLodLevels, geom.getMesh().getNumLodLevels()); - GLMesh.Mode listMode; + Mesh.Mode listMode; int components; switch (geom.getMesh().getMode()) { case Points: - listMode = GLMesh.Mode.Points; + listMode = Mesh.Mode.Points; components = 1; break; case LineLoop: case LineStrip: case Lines: - listMode = GLMesh.Mode.Lines; + listMode = Mesh.Mode.Lines; //listLineWidth = geom.getMesh().getLineWidth(); components = 2; break; case TriangleFan: case TriangleStrip: case Triangles: - listMode = GLMesh.Mode.Triangles; + listMode = Mesh.Mode.Triangles; components = 3; break; default: @@ -472,7 +472,7 @@ private void mergeGeometries(GLMesh outMesh, List geometries) { int globalTriIndex = 0; for (Geometry geom : geometries) { - GLMesh inMesh = geom.getMesh(); + Mesh inMesh = geom.getMesh(); if (!isBatch(geom)) { geom.associateWithGroupNode(this, globalVertIndex); } diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java index 435f061fa1..37de9d459e 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java +++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java @@ -56,7 +56,7 @@ * Geometry defines a leaf node of the scene graph. The leaf node * contains the geometric data for rendering objects. It manages all rendering * information such as a {@link Material} object to define how the surface - * should be shaded and the {@link GLMesh} data to contain the actual geometry. + * should be shaded and the {@link Mesh} data to contain the actual geometry. * * @author Kirill Vainer */ @@ -65,7 +65,7 @@ public class Geometry extends Spatial { // models loaded with shared mesh will be automatically fixed. public static final int SAVABLE_VERSION = 1; private static final Logger logger = Logger.getLogger(Geometry.class.getName()); - protected GLMesh mesh; + protected Mesh mesh; protected transient int lodLevel = 0; protected Material material; /** @@ -126,7 +126,7 @@ public Geometry(String name) { * @param name The name of this geometry * @param mesh The mesh data for this geometry */ - public Geometry(String name, GLMesh mesh) { + public Geometry(String name, Mesh mesh) { this(name); if (mesh == null) { @@ -143,7 +143,7 @@ public Geometry(String name, GLMesh mesh) { * @param mesh The mesh data for this geometry * @param material The material for this geometry */ - public Geometry(String name, GLMesh mesh, Material material) { + public Geometry(String name, Mesh mesh, Material material) { this(name, mesh); setMaterial(material); } @@ -177,7 +177,7 @@ public void setIgnoreTransform(boolean ignoreTransform) { * Sets the LOD level to use when rendering the mesh of this geometry. * Level 0 indicates that the default index buffer should be used, * levels [1, LodLevels + 1] represent the levels set on the mesh - * with {@link GLMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. + * with {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. * * @param lod The lod level to set */ @@ -212,7 +212,7 @@ public int getLodLevel() { * * @return this geometry's mesh vertex count. * - * @see GLMesh#getVertexCount() + * @see Mesh#getVertexCount() */ @Override public int getVertexCount() { @@ -224,7 +224,7 @@ public int getVertexCount() { * * @return this geometry's mesh triangle count. * - * @see GLMesh#getTriangleCount() + * @see Mesh#getTriangleCount() */ @Override public int getTriangleCount() { @@ -238,7 +238,7 @@ public int getTriangleCount() { * * @throws IllegalArgumentException If mesh is null */ - public void setMesh(GLMesh mesh) { + public void setMesh(Mesh mesh) { if (mesh == null) { throw new IllegalArgumentException(); } @@ -256,9 +256,9 @@ public void setMesh(GLMesh mesh) { * * @return the mesh to use for this geometry * - * @see #setMesh(GLMesh) + * @see #setMesh(Mesh) */ - public GLMesh getMesh() { + public Mesh getMesh() { return mesh; } @@ -450,7 +450,7 @@ public Matrix4f getWorldMatrix() { /** * Sets the model bound to use for this geometry. * This alters the bound used on the mesh as well via - * {@link GLMesh#setBound(com.jme3.bounding.BoundingVolume) } and + * {@link Mesh#setBound(com.jme3.bounding.BoundingVolume) } and * forces the world bounding volume to be recomputed. * * @param modelBound The model bound to set @@ -585,7 +585,7 @@ public void cloneFields(Cloner cloner, Object original) { this.cachedWorldMat = cloner.clone(cachedWorldMat); // See if we are doing a shallow clone or a deep mesh clone - boolean shallowClone = (cloner.getCloneFunction(GLMesh.class) instanceof IdentityCloneFunction); + boolean shallowClone = (cloner.getCloneFunction(Mesh.class) instanceof IdentityCloneFunction); // See if we clone the mesh using the special animation // semi-deep cloning @@ -731,7 +731,7 @@ public void write(JmeExporter ex) throws IOException { public void read(JmeImporter im) throws IOException { super.read(im); InputCapsule ic = im.getCapsule(this); - mesh = (GLMesh) ic.readSavable("mesh", null); + mesh = (Mesh) ic.readSavable("mesh", null); material = null; String matName = ic.readString("materialName", null); @@ -756,7 +756,7 @@ public void read(JmeImporter im) throws IOException { if (ic.getSavableVersion(Geometry.class) == 0) { // Fix shared mesh (if set) - GLMesh sharedMesh = getUserData(UserData.JME_SHAREDMESH); + Mesh sharedMesh = getUserData(UserData.JME_SHAREDMESH); if (sharedMesh != null) { getMesh().extractVertexData(sharedMesh); setUserData(UserData.JME_SHAREDMESH, null); diff --git a/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java b/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java index 6b934ba5e0..be5e0f0492 100644 --- a/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/GeometryGroupNode.java @@ -57,7 +57,7 @@ public GeometryGroupNode(String name) { /** * Called by {@link Geometry geom} to specify that its - * {@link Geometry#setMesh(GLMesh) mesh} + * {@link Geometry#setMesh(Mesh) mesh} * has been changed. * * This is also called when the geometry's diff --git a/jme3-core/src/main/java/com/jme3/scene/GLMesh.java b/jme3-core/src/main/java/com/jme3/scene/Mesh.java similarity index 98% rename from jme3-core/src/main/java/com/jme3/scene/GLMesh.java rename to jme3-core/src/main/java/com/jme3/scene/Mesh.java index b9e19d2a52..0a19d9fedc 100644 --- a/jme3-core/src/main/java/com/jme3/scene/GLMesh.java +++ b/jme3-core/src/main/java/com/jme3/scene/Mesh.java @@ -64,7 +64,7 @@ * * @author Kirill Vainer */ -public class GLMesh implements Savable, Cloneable, JmeCloneable { +public class Mesh implements Savable, Cloneable, JmeCloneable { /** * The mode of the Mesh specifies both the type of primitive represented @@ -119,8 +119,8 @@ public enum Mode { /** * A combination of various triangle modes. It is best to avoid * using this mode as it may not be supported by all renderers. - * The {@link GLMesh#setModeStart(int[]) mode start points} and - * {@link GLMesh#setElementLengths(int[]) element lengths} must + * The {@link Mesh#setModeStart(int[]) mode start points} and + * {@link Mesh#setElementLengths(int[]) element lengths} must * be specified for this mode. */ Hybrid(false), @@ -198,7 +198,7 @@ public boolean isListMode() { /** * Creates a new mesh with no {@link VertexBuffer vertex buffers}. */ - public GLMesh() { + public Mesh() { } /** @@ -209,9 +209,9 @@ public GLMesh() { * @return A shallow clone of the mesh */ @Override - public GLMesh clone() { + public Mesh clone() { try { - GLMesh clone = (GLMesh) super.clone(); + Mesh clone = (Mesh) super.clone(); clone.meshBound = meshBound.clone(); clone.collisionTree = collisionTree != null ? collisionTree : null; clone.buffers = buffers.clone(); @@ -236,9 +236,9 @@ public GLMesh clone() { * * @return a deep clone of this mesh. */ - public GLMesh deepClone() { + public Mesh deepClone() { try { - GLMesh clone = (GLMesh) super.clone(); + Mesh clone = (Mesh) super.clone(); clone.meshBound = meshBound != null ? meshBound.clone() : null; // TODO: Collision tree cloning @@ -279,8 +279,8 @@ public GLMesh deepClone() { * * @return A clone of the mesh for animation use. */ - public GLMesh cloneForAnim() { - GLMesh clone = clone(); + public Mesh cloneForAnim() { + Mesh clone = clone(); if (getBuffer(Type.BindPosePosition) != null) { VertexBuffer oldPos = getBuffer(Type.Position); @@ -310,9 +310,9 @@ public GLMesh cloneForAnim() { * Called internally by com.jme3.util.clone.Cloner. Do not call directly. */ @Override - public GLMesh jmeClone() { + public Mesh jmeClone() { try { - GLMesh clone = (GLMesh) super.clone(); + Mesh clone = (Mesh) super.clone(); clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID; return clone; } catch (CloneNotSupportedException ex) { @@ -585,7 +585,7 @@ public void setModeStart(int[] modeStart) { * * @return the mesh mode * - * @see #setMode(GLMesh.Mode) + * @see #setMode(Mesh.Mode) */ public Mode getMode() { return mode; @@ -1254,7 +1254,7 @@ public IndexBuffer getIndexBuffer() { * * @param other The mesh to extract the vertex data from */ - public void extractVertexData(GLMesh other) { + public void extractVertexData(Mesh other) { // Determine the number of unique vertices need to // be created. Also determine the mappings // between old indices to new indices (since we avoid duplicating diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java index ce2d962e97..2fe1775d3e 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java +++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java @@ -1403,7 +1403,7 @@ public void setLodLevel(int lod) { * are shared if static, or specially cloned if animated. * * @param cloneMaterial true to clone materials, false to share them - * @see GLMesh#cloneForAnim() + * @see Mesh#cloneForAnim() */ public Spatial clone(boolean cloneMaterial) { // Set up the cloner for the type of cloning we want to do. @@ -1421,7 +1421,7 @@ public Spatial clone(boolean cloneMaterial) { // By default, the meshes are not cloned. The geometry // may choose to selectively force them to be cloned, but // normally they will be shared. - cloner.setCloneFunction(GLMesh.class, new IdentityCloneFunction()); + cloner.setCloneFunction(Mesh.class, new IdentityCloneFunction()); // Clone it! Spatial clone = cloner.clone(this); @@ -1453,7 +1453,7 @@ public Spatial oldClone(boolean cloneMaterial) { * Note that meshes of geometries are not cloned explicitly, they * are shared if static, or specially cloned if animated. * - * @see GLMesh#cloneForAnim() + * @see Mesh#cloneForAnim() */ @Override public Spatial clone() { diff --git a/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java index 591ab4d07f..8c0a388bb7 100644 --- a/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/VertexBuffer.java @@ -41,7 +41,7 @@ /** * A VertexBuffer contains a particular type of geometry - * data used by {@link GLMesh}es. Every VertexBuffer set on a Mesh + * data used by {@link Mesh}es. Every VertexBuffer set on a Mesh * is sent as an attribute to the vertex shader to be processed. *

* Several terms are used throughout the javadoc for this class, explanation: diff --git a/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java b/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java index f2b01ed732..fc03a584c8 100644 --- a/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java +++ b/jme3-core/src/main/java/com/jme3/scene/control/LodControl.java @@ -41,7 +41,7 @@ import com.jme3.renderer.RenderManager; import com.jme3.renderer.ViewPort; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.Spatial; import com.jme3.util.clone.JmeCloneable; import java.io.IOException; @@ -128,7 +128,7 @@ public void setSpatial(Spatial spatial) { if(spatial != null) { Geometry geom = (Geometry) spatial; - GLMesh mesh = geom.getMesh(); + Mesh mesh = geom.getMesh(); numLevels = mesh.getNumLodLevels(); numTris = new int[numLevels]; for (int i = numLevels - 1; i >= 0; i--) { diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java index 4eab348759..8f46298693 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java @@ -33,7 +33,7 @@ import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import java.nio.FloatBuffer; @@ -45,7 +45,7 @@ * * @author Kirill Vainer */ -public class Arrow extends GLMesh { +public class Arrow extends Mesh { private final Quaternion tempQuat = new Quaternion(); private final Vector3f tempVec = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java index bc801b4475..d2947e52a9 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java @@ -31,7 +31,7 @@ */ package com.jme3.scene.debug; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; @@ -43,7 +43,7 @@ * * @author Kirill Vainer */ -public class Grid extends GLMesh { +public class Grid extends Mesh { public Grid() { } diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java index e7ec73e33c..f8f450ab47 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java @@ -35,7 +35,7 @@ import com.jme3.export.JmeImporter; import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.Node; import com.jme3.util.clone.Cloner; @@ -151,7 +151,7 @@ public void read(JmeImporter importer) throws IOException { } @SuppressWarnings("unchecked") - private T getMesh(String suffix) { + private T getMesh(String suffix) { Geometry child = (Geometry)getChild(getGeometryName(suffix)); if(child != null) { return (T) child.getMesh(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java index 14b165ff15..6db686bed8 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java @@ -41,7 +41,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -55,7 +55,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class SkeletonInterBoneWire extends GLMesh { +public class SkeletonInterBoneWire extends Mesh { private static final int POINT_AMOUNT = 10; /** The amount of connections between bones. */ private int connectionsAmount; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java index 3771f469a9..878b611673 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java @@ -38,7 +38,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -53,7 +53,7 @@ /** * The class that displays either heads of the bones if no length data is supplied or both heads and tails otherwise. */ -public class SkeletonPoints extends GLMesh { +public class SkeletonPoints extends Mesh { /** The skeleton to be displayed. */ private Skeleton skeleton; /** The map between the bone index and its length. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java index 8ad463b3e1..afcecce778 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java @@ -42,7 +42,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -55,7 +55,7 @@ * The class that displays either wires between the bones' heads if no length data is supplied and * full bones' shapes otherwise. */ -public class SkeletonWire extends GLMesh { +public class SkeletonWire extends Mesh { /** The number of bones' connections. Used in non-length mode. */ private int numConnections; /** The skeleton to be displayed. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java index 86827d3e2a..38593898c1 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java @@ -34,7 +34,7 @@ import com.jme3.bounding.BoundingBox; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -42,7 +42,7 @@ import com.jme3.util.BufferUtils; import java.nio.FloatBuffer; -public class WireBox extends GLMesh { +public class WireBox extends Mesh { public WireBox() { this(1,1,1); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java index 7426d7eeb5..9a2de74927 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java @@ -34,7 +34,7 @@ import com.jme3.math.Vector3f; import com.jme3.renderer.Camera; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; @@ -52,7 +52,7 @@ * and four for the far plane. These points are connected by lines * to form a wireframe cube-like structure. */ -public class WireFrustum extends GLMesh { +public class WireFrustum extends Mesh { /** * For Serialization only. Do not use. @@ -161,7 +161,7 @@ public void update(Vector3f[] points) { * @param points An array of 8 `Vector3f` objects representing the frustum's corners. * @return A new `WireFrustum` instance. */ - public static GLMesh makeFrustum(Vector3f[] points) { + public static Mesh makeFrustum(Vector3f[] points) { return new WireFrustum(points); } diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java index 5793c2af63..72ee624bb0 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java @@ -35,7 +35,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -45,7 +45,7 @@ import java.nio.FloatBuffer; import java.nio.ShortBuffer; -public class WireSphere extends GLMesh { +public class WireSphere extends Mesh { private static final int samples = 30; private static final int zSamples = 10; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java index 53ccbb7ebe..1fe8bdcdc6 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java @@ -34,7 +34,7 @@ import com.jme3.math.Vector3f; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; @@ -45,7 +45,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class ArmatureInterJointsWire extends GLMesh { +public class ArmatureInterJointsWire extends Mesh { private final Vector3f tmp = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java index adc11bd17d..c46466f181 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java @@ -117,8 +117,8 @@ protected final void createSkeletonGeoms(Joint joint, Node joints, Node wires, N if (ends == null) { geomToJoint.put(jGeom, joint); } else { - GLMesh m = null; - GLMesh mO = null; + Mesh m = null; + Mesh mO = null; Node wireAttach = wires; Node outlinesAttach = outlines; if (ends.length == 1) { diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java index c8a541be97..989667eb23 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java @@ -32,10 +32,10 @@ package com.jme3.scene.debug.custom; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer.Type; -public class JointShape extends GLMesh { +public class JointShape extends Mesh { /** * Serialization only. Do not use. diff --git a/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java b/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java index ef277e7d40..821264f9a6 100644 --- a/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java +++ b/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedNode.java @@ -59,11 +59,11 @@ static void setGeometryStartIndex2(Geometry geom, int startIndex) { private static final class InstanceTypeKey implements Cloneable, JmeCloneable { - GLMesh mesh; + Mesh mesh; Material material; int lodLevel; - public InstanceTypeKey(GLMesh mesh, Material material, int lodLevel) { + public InstanceTypeKey(Mesh mesh, Material material, int lodLevel) { this.mesh = mesh; this.material = material; this.lodLevel = lodLevel; diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java index 66fd775c04..6e5d401fd6 100644 --- a/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/mesh/IndexBuffer.java @@ -36,7 +36,7 @@ import java.nio.IntBuffer; import java.nio.ShortBuffer; -import com.jme3.scene.GLMesh; +import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer.Format; import com.jme3.util.BufferUtils; @@ -171,7 +171,7 @@ public int remaining() { * Returns the format of the data stored in this buffer. * *

This method can be used to set an {@link IndexBuffer} to a - * {@link GLMesh Mesh}:

+ * {@link Mesh Mesh}:

*
      * mesh.setBuffer(Type.Index, 3, 
      *     indexBuffer.getFormat(), indexBuffer);
diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
index 114ba5f77a..c3144e6b97 100644
--- a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java
@@ -31,7 +31,7 @@
  */
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer.Format;
 
 import java.nio.Buffer;
diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
index 1b318c0ef5..f6c9d4bfea 100644
--- a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java
@@ -31,8 +31,8 @@
  */
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.GLMesh;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import java.nio.Buffer;
 
@@ -50,7 +50,7 @@ public class WrappedIndexBuffer extends VirtualIndexBuffer {
 
     private final IndexBuffer ib;
 
-    public WrappedIndexBuffer(GLMesh mesh){
+    public WrappedIndexBuffer(Mesh mesh){
         super(mesh.getVertexCount(), mesh.getMode());
         this.ib = mesh.getIndexBuffer();
         switch (meshMode){
@@ -83,7 +83,7 @@ public Buffer getBuffer() {
         return ib.getBuffer();
     }
     
-    public static void convertToList(GLMesh mesh){
+    public static void convertToList(Mesh mesh){
         IndexBuffer inBuf = mesh.getIndicesAsList();
         IndexBuffer outBuf = IndexBuffer.createIndexBuffer(mesh.getVertexCount(),
                                                            inBuf.size());
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
index ac7fdd7d60..e096a91a4c 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java
@@ -33,7 +33,7 @@
 
 import com.jme3.export.*;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 
 import java.io.IOException;
 
@@ -50,7 +50,7 @@
  * @author Ian Phillips
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public abstract class AbstractBox extends GLMesh {
+public abstract class AbstractBox extends Mesh {
 
     public final Vector3f center = new Vector3f(0f, 0f, 0f);
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
index c20d7d8301..cfe51dbaff 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java
@@ -35,7 +35,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 
@@ -51,7 +51,7 @@
  *
  * @author Kirill Vainer
  */
-public class CenterQuad extends GLMesh {
+public class CenterQuad extends Mesh {
 
     private float width;
     private float height;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
index b2b04fbf33..e1b7dd994f 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Spline;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import java.util.Iterator;
 import java.util.List;
@@ -47,7 +47,7 @@
  *
  * @author Nehon
  */
-public class Curve extends GLMesh {
+public class Curve extends Mesh {
 
     private Spline spline;
     private Vector3f temp = new Vector3f();
@@ -132,7 +132,7 @@ private void createCatmullRomMesh(int nbSubSegments) {
             i++;
         }
 
-        this.setMode(GLMesh.Mode.Lines);
+        this.setMode(Mesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);//(spline.getControlPoints().size() - 1) * nbSubSegments * 2
         this.updateBound();
@@ -184,7 +184,7 @@ private void createBezierMesh(int nbSubSegments) {
             indices[i++] = (short) k;
         }
 
-        this.setMode(GLMesh.Mode.Lines);
+        this.setMode(Mesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);
         this.updateBound();
@@ -228,7 +228,7 @@ private void createNurbMesh(int nbSubSegments) {
                 indices[i++] = (short) (j + 1);
             }
 
-            this.setMode(GLMesh.Mode.Lines);
+            this.setMode(Mesh.Mode.Lines);
             this.setBuffer(VertexBuffer.Type.Position, 3, array);
             this.setBuffer(VertexBuffer.Type.Index, 2, indices);
             this.updateBound();
@@ -262,7 +262,7 @@ private void createLinearMesh() {
             }
         }
 
-        this.setMode(GLMesh.Mode.Lines);
+        this.setMode(Mesh.Mode.Lines);
         this.setBuffer(VertexBuffer.Type.Position, 3, array);
         this.setBuffer(VertexBuffer.Type.Index, 2, indices);
         this.updateBound();
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
index 4ac7cfb950..36df9d9892 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -50,7 +50,7 @@
  * @author Mark Powell
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Cylinder extends GLMesh {
+public class Cylinder extends Mesh {
 
     private int axisSamples;
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
index 99a2b96619..5cfd312f82 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.TempVars;
@@ -53,7 +53,7 @@
  * @author Joshua Slack (Original sphere code that was adapted)
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Dome extends GLMesh {
+public class Dome extends Mesh {
 
     private int planes;
     private int radialSamples;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
index 18173646a2..c9c5f3c197 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java
@@ -36,7 +36,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
@@ -47,7 +47,7 @@
  * 
  * @author Brent Owens
  */
-public class Line extends GLMesh {
+public class Line extends Mesh {
 
     private Vector3f start = new Vector3f();
     private Vector3f end = new Vector3f();
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
index 0509df9878..d301a98675 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import static com.jme3.util.BufferUtils.*;
 import java.io.IOException;
@@ -51,7 +51,7 @@
  * @author Joshua Slack, Eric Woroshow
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class PQTorus extends GLMesh {
+public class PQTorus extends Mesh {
 
     private float p, q;
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
index 646009501e..07c161c301 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java
@@ -36,7 +36,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 
@@ -48,7 +48,7 @@
  *
  * @author Kirill Vainer
  */
-public class Quad extends GLMesh {
+public class Quad extends Mesh {
 
     private float width;
     private float height;
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
index 71e9724db2..6f16847390 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Rectangle;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.clone.Cloner;
@@ -71,7 +71,7 @@
  *
  * @author Francivan Bezerra
  */
-public class RectangleMesh extends GLMesh {
+public class RectangleMesh extends Mesh {
 
     /**
      * Used to locate the vertices and calculate a default normal.
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
index 6d0deff9f1..f4b2ba34c6 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java
@@ -38,7 +38,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.TempVars;
@@ -53,7 +53,7 @@
  * @author Joshua Slack
  * @version $Revision: 4163 $, $Date: 2009-03-24 21:14:55 -0400 (Tue, 24 Mar 2009) $
  */
-public class Sphere extends GLMesh {
+public class Sphere extends Mesh {
 
     public enum TextureMode {
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
index f881031a7a..9beef259e4 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Spline.SplineType;
 import com.jme3.math.Vector3f;
 import com.jme3.math.Vector4f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -56,7 +56,7 @@
  * a) NURBS
  * @author Marcin Roguski (Kealthas)
  */
-public class Surface extends GLMesh {
+public class Surface extends Mesh {
     private SplineType           type;                // the type of the surface
     private List> controlPoints;       // space control points and their weights
     private List[]        knots;               // knots of the surface
diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
index 7d49cc9eb1..d3e75d6faf 100644
--- a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
+++ b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java
@@ -37,7 +37,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -52,7 +52,7 @@
  * @author Mark Powell
  * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $
  */
-public class Torus extends GLMesh {
+public class Torus extends Mesh {
 
     private int circleSamples;
 
diff --git a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
index 4534d9a872..28eb6b5231 100644
--- a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
+++ b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java
@@ -40,7 +40,7 @@
 import com.jme3.renderer.Renderer;
 import com.jme3.renderer.Statistics;
 import com.jme3.renderer.TextureUnitException;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.shader.Shader;
 import com.jme3.shader.Shader.ShaderSource;
@@ -195,7 +195,7 @@ public void deleteBuffer(BufferObject bo) {
     }
 
     @Override
-    public void renderMesh(GLMesh mesh, int lod, int count, VertexBuffer[] instanceData) {
+    public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) {
     }
 
     @Override
diff --git a/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java b/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
index 6961d1a382..a8209e7edc 100644
--- a/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
+++ b/jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java
@@ -135,7 +135,7 @@ private static List initVertexData(int size) {
         return vertices;
     }
 
-    public static void generate(GLMesh mesh) {
+    public static void generate(Mesh mesh) {
         generate(mesh, true, false);
     }
 
@@ -147,7 +147,7 @@ public static void generate(Spatial scene, boolean splitMirrored) {
             }
         } else {
             Geometry geom = (Geometry) scene;
-            GLMesh mesh = geom.getMesh();
+            Mesh mesh = geom.getMesh();
 
             // Check to ensure mesh has texcoords and normals before generating
             if (mesh.getBuffer(Type.TexCoord) != null
@@ -162,13 +162,13 @@ public static void generate(Spatial scene) {
     }
 
     public static void generateParallel(Spatial scene, ExecutorService executor) {
-        final Set meshes = new HashSet<>();
+        final Set meshes = new HashSet<>();
         scene.breadthFirstTraversal(new SceneGraphVisitor() {
             @Override
             public void visit(Spatial spatial) {
                 if (spatial instanceof Geometry) {
                     Geometry geom = (Geometry) spatial;
-                    GLMesh mesh = geom.getMesh();
+                    Mesh mesh = geom.getMesh();
 
                     // Check to ensure mesh has texcoords and normals before generating
                     if (mesh.getBuffer(Type.TexCoord) != null
@@ -179,7 +179,7 @@ public void visit(Spatial spatial) {
             }
         });
         List> futures = new ArrayList<>();
-        for (final GLMesh m : meshes) {
+        for (final Mesh m : meshes) {
             futures.add(executor.submit(new Runnable() {
                 @Override
                 public void run() {
@@ -196,7 +196,7 @@ public void run() {
         }
     }
 
-    public static void generate(GLMesh mesh, boolean approxTangents, boolean splitMirrored) {
+    public static void generate(Mesh mesh, boolean approxTangents, boolean splitMirrored) {
         int[] index = new int[3];
         Vector3f[] v = new Vector3f[3];
         Vector2f[] t = new Vector2f[3];
@@ -233,11 +233,11 @@ public static void generate(GLMesh mesh, boolean approxTangents, boolean splitMi
         TangentUtils.generateBindPoseTangentsIfNecessary(mesh);
     }
 
-    public static void generate(GLMesh mesh, boolean approxTangents) {
+    public static void generate(Mesh mesh, boolean approxTangents) {
         generate(mesh, approxTangents, false);
     }
 
-    private static List processTriangles(GLMesh mesh,
+    private static List processTriangles(Mesh mesh,
                                                      int[] index, Vector3f[] v, Vector2f[] t, boolean splitMirrored) {
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
@@ -273,7 +273,7 @@ private static List processTriangles(GLMesh mesh,
     // Don't remove the split mirrored boolean. It's not used right now, but I intend to
     // make this method also split vertices with rotated tangent space, and I'll
     // add another splitRotated boolean.
-    private static List splitVertices(GLMesh mesh, List vertexData, boolean splitMirrored) {
+    private static List splitVertices(Mesh mesh, List vertexData, boolean splitMirrored) {
         
         int nbVertices = mesh.getBuffer(Type.Position).getNumElements();
         List newVertices = new ArrayList<>();
@@ -446,7 +446,7 @@ private static void putValue(VertexBuffer.Format format, Buffer buf1, Buffer buf
         }
     }
 
-    private static List processTriangleStrip(GLMesh mesh,
+    private static List processTriangleStrip(Mesh mesh,
                                                          int[] index, Vector3f[] v, Vector2f[] t) {
         
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
@@ -495,7 +495,7 @@ private static List processTriangleStrip(GLMesh mesh,
         return vertices;
     }
 
-    private static List processTriangleFan(GLMesh mesh,
+    private static List processTriangleFan(Mesh mesh,
                                                        int[] index, Vector3f[] v, Vector2f[] t) {
         
         IndexBuffer indexBuffer = mesh.getIndexBuffer();
@@ -627,7 +627,7 @@ private static boolean approxEqual(Vector2f u, Vector2f v) {
                 && (FastMath.abs(u.y - v.y) < tolerance);
     }
 
-    private static ArrayList linkVertices(GLMesh mesh, boolean splitMirrored) {
+    private static ArrayList linkVertices(Mesh mesh, boolean splitMirrored) {
         ArrayList vertexMap = new ArrayList<>();
 
         FloatBuffer vertexBuffer = mesh.getFloatBuffer(Type.Position);
@@ -672,7 +672,7 @@ && approxEqual(vertexInfo.texCoord, texCoord)) {
         return vertexMap;
     }
 
-    private static void processTriangleData(GLMesh mesh, List vertices,
+    private static void processTriangleData(Mesh mesh, List vertices,
                                             boolean approxTangent, boolean splitMirrored) {
         ArrayList vertexMap = linkVertices(mesh, splitMirrored);
 
@@ -841,7 +841,7 @@ private static void processTriangleData(GLMesh mesh, List vertices,
         mesh.updateCounts();
     }
 
-    private static void writeColorBuffer(List vertices, ColorRGBA[] cols, GLMesh mesh) {
+    private static void writeColorBuffer(List vertices, ColorRGBA[] cols, Mesh mesh) {
         FloatBuffer colors = BufferUtils.createFloatBuffer(vertices.size() * 4);
         colors.rewind();
         for (ColorRGBA color : cols) {
@@ -863,18 +863,18 @@ private static int parity(Vector3f n1, Vector3f n) {
     }
 
     /**
-     * @deprecated Use {@link TangentUtils#genTbnLines(GLMesh, float) } instead.
+     * @deprecated Use {@link TangentUtils#genTbnLines(Mesh, float) } instead.
      */
     @Deprecated
-    public static GLMesh genTbnLines(GLMesh mesh, float scale) {
+    public static Mesh genTbnLines(Mesh mesh, float scale) {
         return TangentUtils.genTbnLines(mesh, scale);
     }
 
     /**
-     * @deprecated Use {@link TangentUtils#genNormalLines(GLMesh, float) } instead.
+     * @deprecated Use {@link TangentUtils#genNormalLines(Mesh, float) } instead.
      */
     @Deprecated
-    public static GLMesh genNormalLines(GLMesh mesh, float scale) {
+    public static Mesh genNormalLines(Mesh mesh, float scale) {
         return TangentUtils.genNormalLines(mesh, scale);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/util/TangentUtils.java b/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
index 145a332787..2014eaf003 100644
--- a/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
+++ b/jme3-core/src/main/java/com/jme3/util/TangentUtils.java
@@ -53,7 +53,7 @@ public class TangentUtils {
     private TangentUtils() {
     }
 
-    public static void generateBindPoseTangentsIfNecessary(GLMesh mesh){
+    public static void generateBindPoseTangentsIfNecessary(Mesh mesh){
         if (mesh.getBuffer(VertexBuffer.Type.BindPosePosition) != null) {
 
             VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
@@ -73,7 +73,7 @@ public static void generateBindPoseTangentsIfNecessary(GLMesh mesh){
         }
     }
 
-    public static GLMesh genTbnLines(GLMesh mesh, float scale) {
+    public static Mesh genTbnLines(Mesh mesh, float scale) {
         if (mesh.getBuffer(Type.Tangent) == null) {
             return genNormalLines(mesh, scale);
         } else {
@@ -81,15 +81,15 @@ public static GLMesh genTbnLines(GLMesh mesh, float scale) {
         }
     }
 
-    public static GLMesh genNormalLines(GLMesh mesh, float scale) {
+    public static Mesh genNormalLines(Mesh mesh, float scale) {
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         FloatBuffer normalBuffer = (FloatBuffer) mesh.getBuffer(Type.Normal).getData();
 
         ColorRGBA originColor = ColorRGBA.White;
         ColorRGBA normalColor = ColorRGBA.Blue;
 
-        GLMesh lineMesh = new GLMesh();
-        lineMesh.setMode(GLMesh.Mode.Lines);
+        Mesh lineMesh = new Mesh();
+        lineMesh.setMode(Mesh.Mode.Lines);
 
         Vector3f origin = new Vector3f();
         Vector3f point = new Vector3f();
@@ -120,7 +120,7 @@ public static GLMesh genNormalLines(GLMesh mesh, float scale) {
         return lineMesh;
     }
 
-    public static GLMesh genTangentLines(GLMesh mesh, float scale) {
+    public static Mesh genTangentLines(Mesh mesh, float scale) {
         FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
         FloatBuffer normalBuffer = (FloatBuffer) mesh.getBuffer(Type.Normal).getData();
         FloatBuffer tangentBuffer = (FloatBuffer) mesh.getBuffer(Type.Tangent).getData();
@@ -135,8 +135,8 @@ public static GLMesh genTangentLines(GLMesh mesh, float scale) {
         ColorRGBA binormalColor = ColorRGBA.Green;
         ColorRGBA normalColor = ColorRGBA.Blue;
 
-        GLMesh lineMesh = new GLMesh();
-        lineMesh.setMode(GLMesh.Mode.Lines);
+        Mesh lineMesh = new Mesh();
+        lineMesh.setMode(Mesh.Mode.Lines);
 
         Vector3f origin = new Vector3f();
         Vector3f point = new Vector3f();
diff --git a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
index ac9197acc1..18417b6b4c 100644
--- a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
+++ b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java
@@ -31,7 +31,7 @@
  */
 package com.jme3.util.mikktspace;
 
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.util.BufferUtils;
@@ -43,10 +43,10 @@
  */
 public class MikkTSpaceImpl implements MikkTSpaceContext {
 
-    GLMesh mesh;
+    Mesh mesh;
     final private IndexBuffer index;
 
-    public MikkTSpaceImpl(GLMesh mesh) {
+    public MikkTSpaceImpl(Mesh mesh) {
         this.mesh = mesh;
 
         // If the mesh lacks indices, generate a virtual index buffer.
diff --git a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
index 5fec028ecc..0f272bd080 100644
--- a/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
+++ b/jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java
@@ -112,7 +112,7 @@ public static void generate(Spatial s){
 
         } else if (s instanceof Geometry) {
             Geometry g = (Geometry) s;
-            GLMesh mesh = g.getMesh();
+            Mesh mesh = g.getMesh();
             boolean success = generateTangents(mesh);
             if (!success) {
                 logger.log(Level.SEVERE, "Failed to generate tangents for geometry {0}", g.getName());
@@ -120,15 +120,15 @@ public static void generate(Spatial s){
         }
     }
 
-    public static void generate(GLMesh mesh) {
+    public static void generate(Mesh mesh) {
         boolean success = generateTangents(mesh);
         if (!success) {
             logger.log(Level.SEVERE, "Failed to generate tangents for mesh {0}", mesh);
         }
     }
 
-    private static boolean generateTangents(GLMesh mesh) {
-        GLMesh.Mode mode = mesh.getMode();
+    private static boolean generateTangents(Mesh mesh) {
+        Mesh.Mode mode = mesh.getMode();
         boolean hasTriangles;
         
         if (mesh.getBuffer(Type.TexCoord) == null || mesh.getBuffer(Type.Normal) == null) {
diff --git a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
index d1f198ad12..cd2b4a29e8 100644
--- a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
+++ b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java
@@ -38,7 +38,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.scene.*;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.scene.mesh.IndexIntBuffer;
@@ -417,7 +417,7 @@ protected Geometry createGeometry(ArrayList faceList, String matName) thro
             throw new IOException("No geometry data to generate mesh");
 
         // Create mesh from the faces
-        GLMesh mesh = constructMesh(faceList);
+        Mesh mesh = constructMesh(faceList);
         
         Geometry geom = new Geometry(objName + "-geom-" + (geomIndex++), mesh);
         
@@ -446,8 +446,8 @@ protected Geometry createGeometry(ArrayList faceList, String matName) thro
         return geom;
     }
 
-    protected GLMesh constructMesh(ArrayList faceList){
-        GLMesh m = new GLMesh();
+    protected Mesh constructMesh(ArrayList faceList){
+        Mesh m = new Mesh();
         m.setMode(Mode.Triangles);
 
         boolean hasTexCoord = false;
diff --git a/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java b/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
index d4ec411e41..0a4a04249d 100644
--- a/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
+++ b/jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.shape.Quad;
 import com.jme3.system.JmeSystem;
@@ -77,7 +77,7 @@ void castRay(Ray ray, int expectedNumResults) {
      * 0). It is composed of 2 triangles.
      */
     void createRedSquare() {
-        GLMesh quadMesh = new Quad(1f, 1f);
+        Mesh quadMesh = new Quad(1f, 1f);
         Geometry redSquare = new Geometry("red square", quadMesh);
         Material red = assetManager.loadMaterial("Common/Materials/RedColor.j3m");
         redSquare.setMaterial(red);
diff --git a/jme3-core/src/test/java/com/jme3/light/LightSortTest.java b/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
index 5a53a81504..1be8305bc8 100644
--- a/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
+++ b/jme3-core/src/test/java/com/jme3/light/LightSortTest.java
@@ -33,7 +33,7 @@
 
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import org.junit.Test;
 
@@ -46,7 +46,7 @@ public class LightSortTest {
     
     @Test
     public void testSimpleSort() {
-        Geometry g = new Geometry("test", new GLMesh());
+        Geometry g = new Geometry("test", new Mesh());
         LightList list = new LightList(g);
         
         list.add(new SpotLight(Vector3f.ZERO, Vector3f.UNIT_X));
@@ -65,7 +65,7 @@ public void testSimpleSort() {
     @Test
     public void testSceneGraphSort() {
         Node n = new Node("node");
-        Geometry g = new Geometry("geom", new GLMesh());
+        Geometry g = new Geometry("geom", new Mesh());
         SpotLight spot = new SpotLight(Vector3f.ZERO, Vector3f.UNIT_X);
         PointLight point = new PointLight(Vector3f.UNIT_X);
         DirectionalLight directional = new DirectionalLight(Vector3f.UNIT_X);
diff --git a/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java b/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
index 6595f43d68..929281819e 100644
--- a/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
+++ b/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java
@@ -38,7 +38,7 @@
 import com.jme3.renderer.queue.GeometryList;
 import com.jme3.renderer.queue.OpaqueComparator;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.shape.Box;
 import com.jme3.system.TestUtil;
 import com.jme3.texture.Image;
@@ -55,7 +55,7 @@
 
 public class OpaqueComparatorTest {
     
-    private final GLMesh mesh = new Box(1,1,1);
+    private final Mesh mesh = new Box(1,1,1);
     final private Camera cam = new Camera(1, 1);
     private RenderManager renderManager;
     private AssetManager assetManager;
diff --git a/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java b/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
index abc6e52246..e7f1013f62 100644
--- a/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java
@@ -84,7 +84,7 @@ void castRay() {
      * 0). It is composed of 2 triangles.
      */
     void createRedSquare() {
-        GLMesh quadMesh = new Quad(1f, 1f);
+        Mesh quadMesh = new Quad(1f, 1f);
         Geometry redSquare = new Geometry("red square", quadMesh);
         Material red = assetManager.loadMaterial("Common/Materials/RedColor.j3m");
         redSquare.setMaterial(red);
@@ -95,8 +95,8 @@ void createRedSquare() {
      * Attach a pair of parallel white lines in the z=1 plane.
      */
     void createWhiteLines() {
-        GLMesh lineMesh = new GLMesh();
-        lineMesh.setMode(GLMesh.Mode.Lines);
+        Mesh lineMesh = new Mesh();
+        lineMesh.setMode(Mesh.Mode.Lines);
         float[] corners = new float[]{
             -1f, -1f, 0f,
             -1f, 1f, 0f,
diff --git a/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java b/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
index f40e42a90c..27f0cda591 100644
--- a/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java
@@ -36,7 +36,7 @@
 
 import org.junit.Test;
 
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 
 /**
  * Tests selected methods of the Mesh class.
@@ -50,7 +50,7 @@ public class MeshTest {
      */
     @Test
     public void testVertexCountOfEmptyMesh() {
-        final GLMesh mesh = new GLMesh();
+        final Mesh mesh = new Mesh();
 
         assertEquals(-1, mesh.getVertexCount());
     }
diff --git a/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java b/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
index ea6cc2d3dc..a81ed9f5aa 100644
--- a/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
+++ b/jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java
@@ -1,6 +1,6 @@
 package com.jme3.scene.mesh;
 
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh.Mode;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
diff --git a/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java b/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
index 72dfddbaf5..cdf1e9fad5 100644
--- a/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
+++ b/jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java
@@ -38,7 +38,7 @@
 
 import com.jme3.asset.AssetManager;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -113,8 +113,8 @@ public void testSphereReductionCollapsCost() {
     /**
      * Returns the mesh of a node.
      */
-    private GLMesh getMesh(Node node) {
-        GLMesh m = null;
+    private Mesh getMesh(Node node) {
+        Mesh m = null;
         for (Spatial spatial : node.getChildren()) {
             if (spatial instanceof Geometry) {
                 m = ((Geometry) spatial).getMesh();
@@ -131,7 +131,7 @@ private GLMesh getMesh(Node node) {
      * Returns the Monkey mesh used in the TestLodGeneration stresstest. Note: Doesn't work durring gradle
      * build.
      */
-    private GLMesh monkey() {
+    private Mesh monkey() {
         Node model = (Node) assetManager.loadModel("Models/Jaime/Jaime.j3o");
         return getMesh(model);
     }
@@ -139,7 +139,7 @@ private GLMesh monkey() {
     /**
      * Returns a 12x12 Sphere mesh.
      */
-    private GLMesh sphere() {
+    private Mesh sphere() {
         return new Sphere(12, 12, 1, false, false);
     }
 
diff --git a/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java b/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
index 1fa3ff9bee..3cc91ef6f6 100644
--- a/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
+++ b/jme3-core/src/test/java/com/jme3/util/TestIssue1909.java
@@ -32,7 +32,7 @@
 package com.jme3.util;
 
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.mikktspace.MikktspaceTangentGenerator;
 import java.nio.FloatBuffer;
@@ -81,7 +81,7 @@ public void testIssue1909() {
                 +posRadius, 0f, -posRadius,
                 -posRadius, 0f, -posRadius
         );
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         int numAxes = 3;
         mesh.setBuffer(VertexBuffer.Type.Normal, numAxes, normals);
         mesh.setBuffer(VertexBuffer.Type.Position, numAxes, positions);
diff --git a/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java b/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
index b662f28419..87283c1c9a 100644
--- a/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
+++ b/jme3-core/src/test/java/com/jme3/util/TestIssue1919.java
@@ -32,7 +32,7 @@
 package com.jme3.util;
 
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.mikktspace.MikktspaceTangentGenerator;
 import java.nio.FloatBuffer;
@@ -56,7 +56,7 @@ public class TestIssue1919 {
      */
     @Test(expected = UnsupportedOperationException.class)
     public void testHybrid() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.Hybrid);
+        Geometry testGeometry = createGeometry(Mesh.Mode.Hybrid);
         MikktspaceTangentGenerator.generate(testGeometry);
     }
 
@@ -65,10 +65,10 @@ public void testHybrid() {
      */
     @Test
     public void testLineLoop() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.LineLoop);
+        Geometry testGeometry = createGeometry(Mesh.Mode.LineLoop);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        GLMesh mesh = testGeometry.getMesh();
+        Mesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); /// skipped this mesh
     }
@@ -78,10 +78,10 @@ public void testLineLoop() {
      */
     @Test
     public void testLineStrip() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.LineStrip);
+        Geometry testGeometry = createGeometry(Mesh.Mode.LineStrip);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        GLMesh mesh = testGeometry.getMesh();
+        Mesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); /// skipped this mesh
     }
@@ -91,10 +91,10 @@ public void testLineStrip() {
      */
     @Test
     public void testLines() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.Lines);
+        Geometry testGeometry = createGeometry(Mesh.Mode.Lines);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        GLMesh mesh = testGeometry.getMesh();
+        Mesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); // skipped this mesh
     }
@@ -104,7 +104,7 @@ public void testLines() {
      */
     @Test(expected = UnsupportedOperationException.class)
     public void testPatch() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.Patch);
+        Geometry testGeometry = createGeometry(Mesh.Mode.Patch);
         MikktspaceTangentGenerator.generate(testGeometry);
     }
 
@@ -113,10 +113,10 @@ public void testPatch() {
      */
     @Test
     public void testPoints() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.Points);
+        Geometry testGeometry = createGeometry(Mesh.Mode.Points);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        GLMesh mesh = testGeometry.getMesh();
+        Mesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNull(tangents); // skipped this mesh
     }
@@ -126,10 +126,10 @@ public void testPoints() {
      */
     @Test
     public void testTriangles() {
-        Geometry testGeometry = createGeometry(GLMesh.Mode.Triangles);
+        Geometry testGeometry = createGeometry(Mesh.Mode.Triangles);
         MikktspaceTangentGenerator.generate(testGeometry);
 
-        GLMesh mesh = testGeometry.getMesh();
+        Mesh mesh = testGeometry.getMesh();
         VertexBuffer tangents = mesh.getBuffer(VertexBuffer.Type.Tangent);
         Assert.assertNotNull(tangents); // generated tangents
     }
@@ -140,7 +140,7 @@ public void testTriangles() {
      * @param mode the desired mode (not null)
      * @return a new geometry
      */
-    private Geometry createGeometry(GLMesh.Mode mode) {
+    private Geometry createGeometry(Mesh.Mode mode) {
         FloatBuffer normals = BufferUtils.createFloatBuffer(
                 0f, 1f, 0f,
                 0f, 1f, 0f,
@@ -167,7 +167,7 @@ private Geometry createGeometry(GLMesh.Mode mode) {
                 +posRadius, 0f, -posRadius,
                 -posRadius, 0f, -posRadius
         );
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         mesh.setMode(mode);
         mesh.setBuffer(VertexBuffer.Type.Normal, numAxes, normals);
         mesh.setBuffer(VertexBuffer.Type.Position, numAxes, positions);
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
index fc8261591f..98ccf9c35b 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java
@@ -5,7 +5,7 @@
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.*;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer.Format;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -94,7 +94,7 @@ private static void doTransformTangents(FloatBuffer inBuf, int offset, int compo
      * @param geometries the geometries to merge
      * @param outMesh a Mesh to receive the geometries
      */
-    public static void mergeGeometries(Collection geometries, GLMesh outMesh) {
+    public static void mergeGeometries(Collection geometries, Mesh outMesh) {
         int[] compsForBuf = new int[VertexBuffer.Type.values().length];
         Format[] formatForBuf = new Format[compsForBuf.length];
          boolean[] normForBuf = new boolean[VertexBuffer.Type.values().length];
@@ -188,7 +188,7 @@ public static void mergeGeometries(Collection geometries, GLMesh outMe
         int globalTriIndex = 0;
 
         for (Geometry geom : geometries) {
-            GLMesh inMesh = geom.getMesh();
+            Mesh inMesh = geom.getMesh();
             geom.computeWorldMatrix();
             Matrix4f worldMatrix = geom.getWorldMatrix();
 
@@ -238,7 +238,7 @@ public static void mergeGeometries(Collection geometries, GLMesh outMe
         }
     }
 
-    public static void makeLods(Collection geometries, GLMesh outMesh) {
+    public static void makeLods(Collection geometries, Mesh outMesh) {
         // Determine number of LOD levels required.
         int lodLevels = Integer.MAX_VALUE;
         for (Geometry g : geometries) {
@@ -338,7 +338,7 @@ public static List makeBatches(Collection geometries, boolea
         for (Map.Entry> entry : matToGeom.entrySet()) {
             Material mat = entry.getKey();
             List geomsForMat = entry.getValue();
-            GLMesh mesh = new GLMesh();
+            Mesh mesh = new Mesh();
             mergeGeometries(geomsForMat, mesh);
             // lods
             if (useLods) {
@@ -406,7 +406,7 @@ public static Node optimize(Node scene, boolean useLods) {
         return scene;
     }
 
-    public static void printMesh(GLMesh mesh) {
+    public static void printMesh(Mesh mesh) {
         for (int bufType = 0; bufType < Type.values().length; bufType++) {
             VertexBuffer outBuf = mesh.getBuffer(Type.values()[bufType]);
             if (outBuf == null) {
@@ -433,7 +433,7 @@ public static void printMesh(GLMesh mesh) {
     }
 
     public static void main(String[] args) {
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         mesh.setBuffer(Type.Position, 3, new float[]{
                     0, 0, 0,
                     1, 0, 0,
@@ -452,7 +452,7 @@ public static void main(String[] args) {
         ArrayList geoms = new ArrayList<>();
         geoms.add(g1);
 
-        GLMesh outMesh = new GLMesh();
+        Mesh outMesh = new Mesh();
         mergeGeometries(geoms, outMesh);
         printMesh(outMesh);
     }
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java b/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
index af22aa7432..648f85f070 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/LodGenerator.java
@@ -50,7 +50,7 @@
 import com.jme3.bounding.BoundingSphere;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.util.BufferUtils;
 import java.nio.Buffer;
@@ -108,7 +108,7 @@ public class LodGenerator {
     private List triangleList;
     private List vertexList = new ArrayList<>();
     private float meshBoundingSphereRadius;
-    private final GLMesh mesh;
+    private final Mesh mesh;
 
     /**
      * Enumerate criteria for removing triangles.
@@ -253,7 +253,7 @@ public int compare(Vertex o1, Vertex o2) {
      *
      * @param mesh the mesh for which to generate LODs.
      */
-    public LodGenerator(GLMesh mesh) {
+    public LodGenerator(Mesh mesh) {
         this.mesh = mesh;
         build();
     }
@@ -282,7 +282,7 @@ private void build() {
         
     }
     
-    private void gatherVertexData(GLMesh mesh, List vertexLookup) {
+    private void gatherVertexData(Mesh mesh, List vertexLookup) {
 
         //in case the model is currently animating with software animation
         //attempting to retrieve the bind position instead of the position.
@@ -321,7 +321,7 @@ private Vertex findSimilar(Vertex v) {
         return null;
     }
     
-    private void gatherIndexData(GLMesh mesh, List vertexLookup) {
+    private void gatherIndexData(Mesh mesh, List vertexLookup) {
         VertexBuffer indexBuffer = mesh.getBuffer(VertexBuffer.Type.Index);
         indexCount = indexBuffer.getNumElements() * 3;
         Buffer b = indexBuffer.getDataReadOnly();
@@ -611,7 +611,7 @@ public void bakeLods(TriangleReductionMethod reductionMethod, float... reduction
         mesh.setLodLevels(computeLods(reductionMethod, reductionValues));
     }
     
-    private VertexBuffer makeLod(GLMesh mesh) {
+    private VertexBuffer makeLod(Mesh mesh) {
         VertexBuffer indexBuffer = mesh.getBuffer(VertexBuffer.Type.Index);
         
         boolean isShortBuffer = indexBuffer.getFormat() == VertexBuffer.Format.UnsignedShort;
diff --git a/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java b/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
index 60d31a2faa..9447b2d956 100644
--- a/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
+++ b/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java
@@ -37,7 +37,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector2f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
@@ -433,8 +433,8 @@ public boolean applyCoords(Geometry geom) {
      * @param outMesh The mesh to set the coords in (can be same as input).
      * @return true if texture has been found and coords have been changed, false otherwise.
      */
-    public boolean applyCoords(Geometry geom, int offset, GLMesh outMesh) {
-        GLMesh inMesh = geom.getMesh();
+    public boolean applyCoords(Geometry geom, int offset, Mesh outMesh) {
+        Mesh inMesh = geom.getMesh();
         geom.computeWorldMatrix();
 
         VertexBuffer inBuf = inMesh.getBuffer(Type.TexCoord);
@@ -499,7 +499,7 @@ public static Geometry makeAtlasBatch(Spatial spat, AssetManager mgr, int atlasS
             return null;
         }
         Geometry geom = new Geometry();
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         GeometryBatchFactory.mergeGeometries(geometries, mesh);
         applyAtlasCoords(geometries, mesh, atlas);
         mesh.updateCounts();
@@ -525,11 +525,11 @@ public static Geometry makeAtlasBatch(Spatial spat, AssetManager mgr, int atlasS
         return geom;
     }
 
-    private static void applyAtlasCoords(List geometries, GLMesh outMesh, TextureAtlas atlas) {
+    private static void applyAtlasCoords(List geometries, Mesh outMesh, TextureAtlas atlas) {
         int globalVertIndex = 0;
 
         for (Geometry geom : geometries) {
-            GLMesh inMesh = geom.getMesh();
+            Mesh inMesh = geom.getMesh();
             geom.computeWorldMatrix();
 
             int geomVertCount = inMesh.getVertexCount();
diff --git a/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java b/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
index d7e2457107..80fcac11b6 100644
--- a/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
+++ b/jme3-examples/src/main/java/jme3test/animation/TestIssue2076.java
@@ -38,7 +38,7 @@
 import com.jme3.light.AmbientLight;
 import com.jme3.math.ColorRGBA;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 
@@ -101,7 +101,7 @@ private void testOldAnimationSystem(String assetPath) {
 
         // remove its vertex normals:
         Geometry oldGeometry = (Geometry) oldJaime.getChild(0);
-        GLMesh oldMesh = oldGeometry.getMesh();
+        Mesh oldMesh = oldGeometry.getMesh();
         oldMesh.clearBuffer(VertexBuffer.Type.Normal);
         oldMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
     }
@@ -125,7 +125,7 @@ private void testNewAnimationSystem(String assetPath) {
 
         // remove its vertex normals:
         Geometry newGeometry = (Geometry) newJaime.getChild(0);
-        GLMesh newMesh = newGeometry.getMesh();
+        Mesh newMesh = newGeometry.getMesh();
         newMesh.clearBuffer(VertexBuffer.Type.Normal);
         newMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
     }
diff --git a/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java b/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
index f0a3464be1..55ffe02788 100644
--- a/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
+++ b/jme3-examples/src/main/java/jme3test/app/TestCustomAppSettings.java
@@ -1,6 +1,6 @@
 package jme3test.app;
 
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.system.AppSettings;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -26,7 +26,7 @@ private static void testPreferenceSettings() {
         settings.putInteger("TestInt", 123);
         settings.putString("TestStr", "HelloWorld");
         settings.putFloat("TestFloat", 123.567f);
-        settings.put("TestObj", new GLMesh()); // Objects not supported by preferences
+        settings.put("TestObj", new Mesh()); // Objects not supported by preferences
         
         try {
             settings.save(APPSETTINGS_KEY);
@@ -58,7 +58,7 @@ private static void testFileSettings() {
         settings.putInteger("TestInt", 123);
         settings.putString("TestStr", "HelloWorld");
         settings.putFloat("TestFloat", 123.567f);
-        settings.put("TestObj", new GLMesh()); // Objects not supported by file settings
+        settings.put("TestObj", new Mesh()); // Objects not supported by file settings
         
         try {
             settings.save(baos);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java b/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
index 046fe5606c..2c5590ce63 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestAmbient.java
@@ -39,7 +39,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -98,7 +98,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java b/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
index de6156428e..a996431655 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestAudioDirectional.java
@@ -13,7 +13,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.debug.Arrow;
@@ -116,7 +116,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java b/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
index 677172b356..1e1731d2b8 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestDoppler.java
@@ -40,7 +40,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -111,7 +111,7 @@ private BitmapText createLabelText(int x, int y, String text) {
         return bmp;
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestOgg.java b/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
index 4d49d1d1c0..55cd7bf452 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestOgg.java
@@ -47,7 +47,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -196,7 +196,7 @@ private BitmapText createLabelText(int x, int y, String text) {
         return bmp;
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/audio/TestReverb.java b/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
index 592dd87625..e21a870993 100644
--- a/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
+++ b/jme3-examples/src/main/java/jme3test/audio/TestReverb.java
@@ -45,7 +45,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.shape.Sphere;
 
@@ -116,7 +116,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java b/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
index d5a5d5d665..59d02d64c8 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java
@@ -49,7 +49,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Box;
@@ -301,7 +301,7 @@ private static Geometry createTestFloor(AssetManager assetManager, float floorDi
         return floor;
     }
 
-    private static GLMesh createFloorMesh(int meshDetail, float floorDimensions) {
+    private static Mesh createFloorMesh(int meshDetail, float floorDimensions) {
         if (meshDetail < 10) {
             meshDetail = 10;
         }
@@ -351,7 +351,7 @@ private static GLMesh createFloorMesh(int meshDetail, float floorDimensions) {
             }
         }
 
-        GLMesh m = new GLMesh();
+        Mesh m = new Mesh();
         m.setBuffer(VertexBuffer.Type.Index, 1, BufferUtils.createIntBuffer(indexBuf));
         m.setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(vertBuf));
         m.updateBound();
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java b/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
index a8743f5327..d374ae5645 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestIssue1120.java
@@ -50,7 +50,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Cylinder;
 import com.jme3.system.AppSettings;
@@ -184,7 +184,7 @@ private void dropTest() {
         attachTestObject(new Cylinder(2, 16, 0.2f, 2f, true), new Vector3f(-3f, 2f, -5f), 2);
     }
 
-    private void attachTestObject(GLMesh mesh, Vector3f position, float mass) {
+    private void attachTestObject(Mesh mesh, Vector3f position, float mass) {
         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         Geometry g = new Geometry("mesh", mesh);
         g.setLocalTranslation(position);
diff --git a/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java b/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
index 66522d7518..f564790411 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/shape/TestGimpactShape.java
@@ -48,7 +48,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.PQTorus;
@@ -290,7 +290,7 @@ private RigidBodyControl drop(Vector3f offset, String model, float scale, float
         Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
         tp.setMaterial(mat);
 
-        GLMesh mesh = tp.getMesh();
+        Mesh mesh = tp.getMesh();
         GImpactCollisionShape shape = new GImpactCollisionShape(mesh);
         shape.setScale(new Vector3f(scale, scale, scale));
 
@@ -300,7 +300,7 @@ private RigidBodyControl drop(Vector3f offset, String model, float scale, float
         return control;
     }
 
-    private void attachTestObject(GLMesh mesh, Vector3f position, float mass) {
+    private void attachTestObject(Mesh mesh, Vector3f position, float mass) {
         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         material.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg"));
         Geometry g = new Geometry("mesh", mesh);
diff --git a/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java b/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
index f148327212..e3c1ba136b 100644
--- a/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
+++ b/jme3-examples/src/main/java/jme3test/collision/TestRayCasting.java
@@ -36,7 +36,7 @@
 import com.jme3.bounding.BoundingSphere;
 import com.jme3.material.Material;
 import com.jme3.math.FastMath;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
 
@@ -58,7 +58,7 @@ public void simpleInitApp() {
         // load material
         Material mat = assetManager.loadMaterial("Interface/Logo/Logo.j3m");
 
-        GLMesh q = new GLMesh();
+        Mesh q = new Mesh();
         q.setBuffer(Type.Position, 3, new float[]
         {
             1, 0, 0,
diff --git a/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java b/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
index 2327846adf..6d20ea1fc2 100644
--- a/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
+++ b/jme3-examples/src/main/java/jme3test/collision/TestTriangleCollision.java
@@ -43,7 +43,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Box;
 
@@ -61,7 +61,7 @@ public static void main(String[] args) {
     @Override
     public void simpleInitApp() {
         // Create two boxes
-        GLMesh mesh1 = new Box(0.5f, 0.5f, 0.5f);
+        Mesh mesh1 = new Box(0.5f, 0.5f, 0.5f);
         geom1 = new Geometry("Box", mesh1);
         geom1.move(2, 2, -.5f);
         Material m1 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
diff --git a/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java b/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
index 01a7d54503..04aca57e8f 100644
--- a/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
+++ b/jme3-examples/src/main/java/jme3test/games/WorldOfInception.java
@@ -53,7 +53,7 @@
 import com.jme3.post.FilterPostProcessor;
 import com.jme3.post.filters.FogFilter;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Sphere;
@@ -75,9 +75,9 @@ public class WorldOfInception extends SimpleApplication implements AnalogListene
     private static final float poiRadius = 100;
     private static final int poiCount = 30;
     private static Material poiMaterial;
-    private static GLMesh poiMesh;
+    private static Mesh poiMesh;
     private static Material ballMaterial;
-    private static GLMesh ballMesh;
+    private static Mesh ballMesh;
     private static CollisionShape poiHorizonCollisionShape;
     private static CollisionShape poiCollisionShape;
     private static CollisionShape ballCollisionShape;
diff --git a/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java b/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
index 53586dda51..d98619a2b2 100644
--- a/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
+++ b/jme3-examples/src/main/java/jme3test/light/TestObbVsBounds.java
@@ -225,7 +225,7 @@ public void makeAreaGeom() {
         points[6].set(1, 1, -1);
         points[7].set(1, -1, -1);
 
-        GLMesh box = WireFrustum.makeFrustum(points);
+        Mesh box = WireFrustum.makeFrustum(points);
         areaGeom = new Geometry("light", box);
         areaGeom.setMaterial(new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"));
         areaGeom.getMaterial().setColor("Color", ColorRGBA.White);
diff --git a/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java b/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
index 33e281b501..2337c0bca9 100644
--- a/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
+++ b/jme3-examples/src/main/java/jme3test/light/TestTangentGen.java
@@ -38,8 +38,8 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.shape.Quad;
@@ -71,7 +71,7 @@ public void simpleInitApp() {
         quadMesh.updateGeometry(1, 1);
         addMesh("Quad", quadMesh, new Vector3f(1, 0, 0));
 
-        GLMesh strip = createTriangleStripMesh();
+        Mesh strip = createTriangleStripMesh();
         addMesh("strip", strip, new Vector3f(0, -3, 0));
         
         DirectionalLight dl = new DirectionalLight();
@@ -80,7 +80,7 @@ public void simpleInitApp() {
         rootNode.addLight(dl);
     }
 
-    private void addMesh(String name, GLMesh mesh, Vector3f translation) {
+    private void addMesh(String name, Mesh mesh, Vector3f translation) {
         MikktspaceTangentGenerator.generate(mesh);
 
         Geometry testGeom = new Geometry(name, mesh);
@@ -104,8 +104,8 @@ private void addMesh(String name, GLMesh mesh, Vector3f translation) {
     public void simpleUpdate(float tpf){
     }
 
-    private GLMesh createTriangleStripMesh() {
-        GLMesh strip = new GLMesh();
+    private Mesh createTriangleStripMesh() {
+        Mesh strip = new Mesh();
         strip.setMode(Mode.TriangleStrip);
         FloatBuffer vb = BufferUtils.createFloatBuffer(3*3*3); // 3 rows * 3 columns * 3 floats
         vb.rewind();
diff --git a/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java b/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
index 24fbe6bbf2..e169d27850 100644
--- a/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
+++ b/jme3-examples/src/main/java/jme3test/light/pbr/TestIssue1903Compat.java
@@ -35,7 +35,7 @@
 import com.jme3.light.LightProbe;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.shape.CenterQuad;
 import com.jme3.system.AppSettings;
 
@@ -74,7 +74,7 @@ public void simpleInitApp() {
         flyCam.setEnabled(false);
 
         // Attach a 9x9 quad at the origin.
-        GLMesh mesh = new CenterQuad(9f, 9f);
+        Mesh mesh = new CenterQuad(9f, 9f);
         Geometry quad = new Geometry("quad", mesh);
         rootNode.attachChild(quad);
 
diff --git a/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java b/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
index 7e1fd9ffdf..0199d70cc2 100644
--- a/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
+++ b/jme3-examples/src/main/java/jme3test/material/TestGeometryShader.java
@@ -5,7 +5,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Sphere;
 import com.jme3.system.AppSettings;
@@ -17,10 +17,10 @@
 public class TestGeometryShader extends SimpleApplication {
     @Override
     public void simpleInitApp() {
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         mesh.setBuffer(VertexBuffer.Type.Index, 1, BufferUtils.createIntBuffer(new int[]{1}));
         mesh.setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(new float[]{0, 0, 0}));
-        mesh.setMode(GLMesh.Mode.Points);
+        mesh.setMode(Mesh.Mode.Points);
         mesh.setBound(new BoundingBox(new Vector3f(0, 0, 0), 10, 10, 10));
         mesh.updateCounts();
         Geometry geometry = new Geometry("Test", mesh);
diff --git a/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java b/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
index acae970f2d..a5af58bfc5 100644
--- a/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
+++ b/jme3-examples/src/main/java/jme3test/material/TestTessellationShader.java
@@ -6,7 +6,7 @@
 import com.jme3.input.controls.KeyTrigger;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.shape.Quad;
 import com.jme3.system.AppSettings;
@@ -28,7 +28,7 @@ public void simpleInitApp() {
         Quad quad = new Quad(10, 10);
         quad.clearBuffer(VertexBuffer.Type.Index);
         quad.setBuffer(VertexBuffer.Type.Index, 4, BufferUtils.createIntBuffer(0, 1, 2, 3));
-        quad.setMode(GLMesh.Mode.Patch);
+        quad.setMode(Mesh.Mode.Patch);
         quad.setPatchVertexCount(4);
         Geometry geometry = new Geometry("tessTest", quad);
         geometry.setMaterial(tessellationMaterial);
diff --git a/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java b/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
index 8b2f2cfd5b..ef264b95d1 100644
--- a/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
+++ b/jme3-examples/src/main/java/jme3test/math/TestRandomPoints.java
@@ -7,7 +7,7 @@
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Arrow;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.debug.WireSphere;
@@ -73,7 +73,7 @@ private void configureCamera() {
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
 
-    private Geometry makeShape(String name, GLMesh mesh, ColorRGBA color) {
+    private Geometry makeShape(String name, Mesh mesh, ColorRGBA color) {
         Geometry geo = new Geometry(name, mesh);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.setColor("Color", color);
diff --git a/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java b/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
index 52361613ab..6c71144286 100644
--- a/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
+++ b/jme3-examples/src/main/java/jme3test/model/anim/TestArmature.java
@@ -167,7 +167,7 @@ public void onAction(String name, boolean isPressed, float tpf) {
         }, "bind");
     }
 
-    private GLMesh createMesh() {
+    private Mesh createMesh() {
         Cylinder c = new Cylinder(30, 16, 0.1f, 1, true);
 
         ShortBuffer jointIndex = (ShortBuffer) VertexBuffer.createBuffer(VertexBuffer.Format.UnsignedShort, 4, c.getVertexCount());
diff --git a/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java b/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
index 7f2ce7e611..5a5934142c 100644
--- a/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
+++ b/jme3-examples/src/main/java/jme3test/model/anim/TestBaseAnimSerialization.java
@@ -191,7 +191,7 @@ public void onAction(String name, boolean isPressed, float tpf) {
         }, "bind");
     }
 
-    private GLMesh createMesh() {
+    private Mesh createMesh() {
         Cylinder c = new Cylinder(30, 16, 0.1f, 1, true);
 
         ShortBuffer jointIndex = (ShortBuffer) VertexBuffer.createBuffer(VertexBuffer.Format.UnsignedShort, 4, c.getVertexCount());
diff --git a/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java b/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
index 524377c226..5f205def3b 100644
--- a/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
+++ b/jme3-examples/src/main/java/jme3test/model/shape/TestCustomMesh.java
@@ -38,7 +38,7 @@
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 
@@ -58,7 +58,7 @@ public static void main(String[] args){
     @Override
     public void simpleInitApp() {
       
-        GLMesh m = new GLMesh();
+        Mesh m = new Mesh();
 
         // Vertex positions in space
         Vector3f [] vertices = new Vector3f[4];
@@ -99,7 +99,7 @@ public void simpleInitApp() {
         // *************************************************************************
         // Second mesh uses vertex colors to color each vertex
         // *************************************************************************
-        GLMesh cMesh = m.clone();
+        Mesh cMesh = m.clone();
         Geometry coloredMesh = new Geometry ("ColoredMesh", cMesh);
         Material matVC = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         matVC.setBoolean("VertexColor", true);
@@ -140,7 +140,7 @@ public void simpleInitApp() {
         // *************************************************************************
         // Third mesh will use a wireframe shader to show wireframe
         // *************************************************************************
-        GLMesh wfMesh = m.clone();
+        Mesh wfMesh = m.clone();
         Geometry wfGeom = new Geometry("wireframeGeometry", wfMesh);
         Material matWireframe = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         matWireframe.setColor("Color", ColorRGBA.Green);
diff --git a/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java b/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
index ad5c615d47..25bde0a797 100644
--- a/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
+++ b/jme3-examples/src/main/java/jme3test/model/shape/TestDebugShapes.java
@@ -37,7 +37,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.debug.Arrow;
 import com.jme3.scene.debug.Grid;
 import com.jme3.scene.debug.WireBox;
@@ -50,7 +50,7 @@ public static void main(String[] args){
         app.start();
     }
 
-    private Geometry putShape(GLMesh shape, ColorRGBA color) {
+    private Geometry putShape(Mesh shape, ColorRGBA color) {
         Geometry g = new Geometry("shape", shape);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.getAdditionalRenderState().setWireframe(true);
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java b/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
index b284485d7b..c8c004a9c3 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java
@@ -43,7 +43,7 @@
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Quad;
@@ -95,7 +95,7 @@ public void simpleInitApp() {
 
         float quadHeight = backgroundCamera.getHeight();
         float quadWidth = backgroundCamera.getWidth();
-        GLMesh quadMesh = new Quad(quadWidth, quadHeight);
+        Mesh quadMesh = new Quad(quadWidth, quadHeight);
 
         Spatial quadGeometry = new Geometry("quad geometry", quadMesh);
         quadGeometry.setMaterial(quadMaterial);
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java b/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
index 237568ce03..ce276e81d9 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java
@@ -36,7 +36,7 @@
 import com.jme3.material.MatParamOverride;
 import com.jme3.material.Material;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.shape.Box;
 import com.jme3.shader.VarType;
 import com.jme3.texture.Texture;
@@ -71,7 +71,7 @@ public void simpleInitApp() {
         /*
          * Attach a test geometry to the scene.
          */
-        GLMesh cubeMesh = new Box(1f, 1f, 1f);
+        Mesh cubeMesh = new Box(1f, 1f, 1f);
         Geometry cubeGeometry = new Geometry("Box", cubeMesh);
         rootNode.attachChild(cubeGeometry);
         /*
diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java b/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
index 6cb20609fa..e73132d314 100644
--- a/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
+++ b/jme3-examples/src/main/java/jme3test/renderer/TestLineWidth.java
@@ -39,7 +39,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.shape.Line;
 import com.jme3.system.AppSettings;
 
@@ -95,7 +95,7 @@ private void drawVerticalLine(float lineWidth, float x, ColorRGBA color) {
         float viewportHeight = cam.getHeight();
         Vector3f startLocation = new Vector3f(x, 0.1f * viewportHeight, 0f);
         Vector3f endLocation = new Vector3f(x, 0.9f * viewportHeight, 0f);
-        GLMesh wireMesh = new Line(startLocation, endLocation);
+        Mesh wireMesh = new Line(startLocation, endLocation);
         Geometry wire = new Geometry("wire", wireMesh);
         wire.setMaterial(material);
         guiNode.attachChild(wire);
diff --git a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
index 3da3545b43..be26b0a68a 100644
--- a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
+++ b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstanceNode.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Node;
 import com.jme3.scene.instancing.InstancedGeometry;
@@ -50,8 +50,8 @@
 
 public class TestInstanceNode extends SimpleApplication  {
 
-    private GLMesh mesh1;
-    private GLMesh mesh2;
+    private Mesh mesh1;
+    private Mesh mesh2;
     private final Material[] materials = new Material[6];
     private Node instancedNode;
     private float time = 0;
@@ -66,7 +66,7 @@ public static void main(String[] args){
     }
 
     private Geometry createInstance(float x, float z) {
-        GLMesh mesh;
+        Mesh mesh;
         if (FastMath.nextRandomInt(0, 1) == 1) mesh = mesh2;
         else mesh = mesh1;
         Geometry geometry = new Geometry("randomGeom", mesh);
@@ -156,7 +156,7 @@ public void simpleUpdate(float tpf) {
                     Geometry geom = (Geometry) instance;
                     geom.setMaterial(materials[FastMath.nextRandomInt(0, materials.length - 1)]);
 
-                    GLMesh mesh;
+                    Mesh mesh;
                     if (FastMath.nextRandomInt(0, 1) == 1) mesh = mesh2;
                     else mesh = mesh1;
                     geom.setMesh(mesh);
diff --git a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
index c212013d0b..6d5b76da83 100644
--- a/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
+++ b/jme3-examples/src/main/java/jme3test/scene/instancing/TestInstancedNodeAttachDetachWithShadowFilter.java
@@ -41,7 +41,7 @@
 import com.jme3.post.FilterPostProcessor;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.instancing.InstancedNode;
 import com.jme3.scene.shape.Box;
 import com.jme3.scene.shape.Sphere;
@@ -87,8 +87,8 @@ public void simpleInitApp() {
         rootNode.attachChild(instancedNode);
 
         // create 10 spheres & boxes, along the z-axis, successively further from the camera
-        GLMesh sphereMesh = new Sphere(32, 32, 1f);
-        GLMesh boxMesh = new Box(0.7f, 0.7f, 0.7f);
+        Mesh sphereMesh = new Sphere(32, 32, 1f);
+        Mesh boxMesh = new Box(0.7f, 0.7f, 0.7f);
         for (int z = 0; z < 10; z++) {
             Vector3f location = new Vector3f(0, -3, -(z * 4));
             locations[z] = location;
diff --git a/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java b/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
index 2e8c3bf0db..24861464ad 100644
--- a/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
+++ b/jme3-examples/src/main/java/jme3test/stress/TestLeakingGL.java
@@ -36,7 +36,7 @@
 import com.jme3.material.Material;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial.CullHint;
 import com.jme3.scene.shape.Sphere;
@@ -80,7 +80,7 @@ public void simpleUpdate(float tpf){
         rootNode.detachAllChildren();
         for (int y = -15; y < 15; y++){
             for (int x = -15; x < 15; x++){
-                GLMesh sphMesh = original.deepClone();
+                Mesh sphMesh = original.deepClone();
                 Geometry sphere = new Geometry("sphere", sphMesh);
 
                 sphere.setMaterial(solidColor);
diff --git a/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java b/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
index ef8c99eb64..6c7e3d965d 100644
--- a/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
+++ b/jme3-examples/src/main/java/jme3test/stress/TestLodGeneration.java
@@ -51,7 +51,7 @@
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -189,7 +189,7 @@ private void updateLod() {
     private int computeNbTri() {
         int nbTri = 0;
         for (Geometry geom : listGeoms) {
-            GLMesh mesh = geom.getMesh();
+            Mesh mesh = geom.getMesh();
             // Check if the mesh has LOD levels
             if (mesh.getNumLodLevels() > 0) {
                 nbTri += mesh.getLodLevel(lodLevel).getNumElements();
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java b/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
index 93947e7d5c..89c0718733 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestSkyRotation.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Box;
 import com.jme3.util.SkyFactory;
@@ -94,7 +94,7 @@ public void simpleInitApp() {
         /*
          * Attach a "floor" geometry to the scene graph.
          */
-        GLMesh floorMesh = new Box(10f, 0.1f, 10f);
+        Mesh floorMesh = new Box(10f, 0.1f, 10f);
         floor = new Geometry("floor", floorMesh);
         Material floorMaterial = new Material(assetManager,
                 "Common/MatDefs/Misc/Unshaded.j3md");
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java b/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
index fb00c03e6b..ba56b3ff2a 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java
@@ -6,7 +6,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.Caps;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Image;
 import com.jme3.texture.Texture;
@@ -40,7 +40,7 @@ public void simpleInitApp()
        tex3.setMinFilter(Texture.MinFilter.Trilinear);
        mat.setTexture("ColorMap", tex3);
 
-       GLMesh m = new GLMesh();
+       Mesh m = new Mesh();
        Vector3f[] vertices = new Vector3f[8];
        vertices[0] = new Vector3f(0, 0, 0);
        vertices[1] = new Vector3f(3, 0, 0);
diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java b/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
index e64d94ea97..0af064f557 100644
--- a/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
+++ b/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java
@@ -6,7 +6,7 @@
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.Caps;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.texture.Image;
 import com.jme3.texture.Texture;
@@ -40,7 +40,7 @@ public void simpleInitApp()
        tex3.setMinFilter(Texture.MinFilter.Trilinear);
        mat.setTexture("ColorMap", tex3);
 
-       GLMesh m = new GLMesh();
+       Mesh m = new Mesh();
        Vector3f[] vertices = new Vector3f[8];
        vertices[0] = new Vector3f(0, 0, 0);
        vertices[1] = new Vector3f(3, 0, 0);
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
index 1545905ef2..6e1a44a606 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/DacLinks.java
@@ -49,7 +49,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.util.clone.Cloner;
@@ -538,8 +538,8 @@ protected void createSpatialData(Spatial spatial) {
         /*
          * Find the target meshes and choose the transform spatial.
          */
-        List targetList = RagUtils.listAnimatedMeshes(spatial, null);
-        GLMesh[] targets = new GLMesh[targetList.size()];
+        List targetList = RagUtils.listAnimatedMeshes(spatial, null);
+        Mesh[] targets = new Mesh[targetList.size()];
         targetList.toArray(targets);
         transformer = RagUtils.findAnimatedGeometry(spatial);
         if (transformer == null) {
@@ -1017,7 +1017,7 @@ private CollisionShape createShape(Transform vertexToShape, Vector3f center,
      * @param vertexLocations the set of vertex locations (not null, not empty)
      * @param meshes array of animated meshes to use (not null, unaffected)
      */
-    private void createTorsoLink(VectorSet vertexLocations, GLMesh[] meshes) {
+    private void createTorsoLink(VectorSet vertexLocations, Mesh[] meshes) {
         if (vertexLocations == null || vertexLocations.numVectors() == 0) {
             throw new IllegalArgumentException(
                     "No mesh vertices for the torso."
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
index fa037f2239..d92217a14b 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java
@@ -40,7 +40,7 @@
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -97,13 +97,13 @@ private RagUtils() {
      * null, unaffected)
      * @return a new map from bone/torso names to sets of vertex coordinates
      */
-    static Map coordsMap(GLMesh[] meshes,
+    static Map coordsMap(Mesh[] meshes,
                                             String[] managerMap) {
         float[] wArray = new float[4];
         int[] iArray = new int[4];
         Vector3f bindPosition = new Vector3f();
         Map coordsMap = new HashMap<>(32);
-        for (GLMesh mesh : meshes) {
+        for (Mesh mesh : meshes) {
             int numVertices = mesh.getVertexCount();
             for (int vertexI = 0; vertexI < numVertices; ++vertexI) {
                 String managerName = findManager(mesh, vertexI, iArray, wArray,
@@ -133,7 +133,7 @@ static Geometry findAnimatedGeometry(Spatial subtree) {
         Geometry result = null;
         if (subtree instanceof Geometry) {
             Geometry geometry = (Geometry) subtree;
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             VertexBuffer indices = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             boolean hasIndices = indices != null;
             VertexBuffer weights = mesh.getBuffer(VertexBuffer.Type.BoneWeight);
@@ -186,7 +186,7 @@ static int findIndex(Spatial spatial, Control sgc) {
      * (not null)
      * @return a root bone, or null if none found
      */
-    static Joint findMainBone(Armature skeleton, GLMesh[] targetMeshes) {
+    static Joint findMainBone(Armature skeleton, Mesh[] targetMeshes) {
         Joint[] rootBones = skeleton.getRoots();
 
         Joint result;
@@ -217,15 +217,15 @@ static Joint findMainBone(Armature skeleton, GLMesh[] targetMeshes) {
      * @param storeResult (added to if not null)
      * @return an expanded list (either storeResult or a new instance)
      */
-    static List listAnimatedMeshes(Spatial subtree,
-                                           List storeResult) {
+    static List listAnimatedMeshes(Spatial subtree,
+                                         List storeResult) {
         if (storeResult == null) {
             storeResult = new ArrayList<>(10);
         }
 
         if (subtree instanceof Geometry) {
             Geometry geometry = (Geometry) subtree;
-            GLMesh mesh = geometry.getMesh();
+            Mesh mesh = geometry.getMesh();
             VertexBuffer indices = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             boolean hasIndices = indices != null;
             VertexBuffer weights = mesh.getBuffer(VertexBuffer.Type.BoneWeight);
@@ -394,7 +394,7 @@ private static void addPreOrderJoints(Joint bone, List addResult) {
      * @param mesh animated mesh to analyze (not null, unaffected)
      * @param totalWeights (not null, modified)
      */
-    private static void addWeights(GLMesh mesh, float[] totalWeights) {
+    private static void addWeights(Mesh mesh, float[] totalWeights) {
         assert totalWeights != null;
 
         int maxWeightsPerVert = mesh.getMaxNumWeights();
@@ -439,7 +439,7 @@ private static void addWeights(GLMesh mesh, float[] totalWeights) {
      * unaffected)
      * @return a bone/torso name
      */
-    private static String findManager(GLMesh mesh, int vertexIndex, int[] iArray,
+    private static String findManager(Mesh mesh, int vertexIndex, int[] iArray,
                                       float[] wArray, String[] managerMap) {
         vertexBoneIndices(mesh, vertexIndex, iArray);
         vertexBoneWeights(mesh, vertexIndex, wArray);
@@ -539,10 +539,10 @@ private static int readIndex(Buffer buffer) {
      * @param skeleton (not null, unaffected)
      * @return a map from bone indices to total bone weight
      */
-    private static float[] totalWeights(GLMesh[] meshes, Armature skeleton) {
+    private static float[] totalWeights(Mesh[] meshes, Armature skeleton) {
         int numBones = skeleton.getJointCount();
         float[] result = new float[numBones];
-        for (GLMesh mesh : meshes) {
+        for (Mesh mesh : meshes) {
             RagUtils.addWeights(mesh, result);
         }
 
@@ -568,7 +568,7 @@ private static float[] totalWeights(GLMesh[] meshes, Armature skeleton) {
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static int[] vertexBoneIndices(GLMesh mesh,
+    private static int[] vertexBoneIndices(Mesh mesh,
                                            int vertexIndex, int[] storeResult) {
         if (storeResult == null) {
             storeResult = new int[4];
@@ -607,7 +607,7 @@ private static int[] vertexBoneIndices(GLMesh mesh,
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static float[] vertexBoneWeights(GLMesh mesh,
+    private static float[] vertexBoneWeights(Mesh mesh,
                                              int vertexIndex, float[] storeResult) {
         if (storeResult == null) {
             storeResult = new float[4];
@@ -650,7 +650,7 @@ private static float[] vertexBoneWeights(GLMesh mesh,
      * @param storeResult (modified if not null)
      * @return the data vector (either storeResult or a new instance)
      */
-    private static Vector3f vertexVector3f(GLMesh mesh,
+    private static Vector3f vertexVector3f(Mesh mesh,
                                            VertexBuffer.Type bufferType, int vertexIndex,
                                            Vector3f storeResult) {
         assert bufferType == VertexBuffer.Type.BindPoseNormal
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
index abb8d10b96..7dadd68835 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
@@ -62,12 +62,12 @@ protected GImpactCollisionShape() {
      * creates a collision shape from the given Mesh
      * @param mesh the Mesh to use
      */
-    public GImpactCollisionShape(GLMesh mesh) {
+    public GImpactCollisionShape(Mesh mesh) {
         createCollisionMesh(mesh, new Vector3f(1,1,1));
     }
 
 
-    private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
+    private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
         this.worldScale = worldScale;
         bulletMesh = Converter.convert(mesh);
         this.numVertices = bulletMesh.numVertices;
@@ -84,7 +84,7 @@ private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
      *
      * @return a new Mesh
      */
-    public GLMesh createJmeMesh(){
+    public Mesh createJmeMesh(){
         return Converter.convert(bulletMesh);
     }
 
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
index 0d420f717d..d6102d660f 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
@@ -39,7 +39,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import java.io.IOException;
 
 /**
@@ -124,7 +124,7 @@ protected void createShape() {
                 cShape.setMargin(margin);
     }
 
-    public GLMesh createJmeMesh(){
+    public Mesh createJmeMesh(){
         //TODO return Converter.convert(bulletMesh);
         return null;
     }
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
index 3564936fd1..24746934a5 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
@@ -38,7 +38,7 @@
 import com.jme3.export.JmeExporter;
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import java.io.IOException;
 import java.nio.FloatBuffer;
@@ -51,7 +51,7 @@ public class HullCollisionShape extends CollisionShape {
     protected HullCollisionShape() {
     }
 
-    public HullCollisionShape(GLMesh mesh) {
+    public HullCollisionShape(Mesh mesh) {
         this.points = getPoints(mesh);
         createShape(this.points);
     }
@@ -75,7 +75,7 @@ public void read(JmeImporter im) throws IOException {
         InputCapsule capsule = im.getCapsule(this);
 
         // for backwards compatability
-        GLMesh mesh = (GLMesh) capsule.readSavable("hullMesh", null);
+        Mesh mesh = (Mesh) capsule.readSavable("hullMesh", null);
         if (mesh != null) {
             this.points = getPoints(mesh);
         } else {
@@ -95,7 +95,7 @@ protected void createShape(float[] points) {
         cShape.setMargin(margin);
     }
 
-    protected float[] getPoints(GLMesh mesh) {
+    protected float[] getPoints(Mesh mesh) {
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         vertices.rewind();
         int components = mesh.getVertexCount() * 3;
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
index 9f780f5321..acb93ee043 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
@@ -40,7 +40,7 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
@@ -63,7 +63,7 @@ protected MeshCollisionShape() {
      * @param mesh
      *            the TriMesh to use
      */
-    public MeshCollisionShape(GLMesh mesh) {
+    public MeshCollisionShape(Mesh mesh) {
         this(mesh, false);
     }
  
@@ -73,11 +73,11 @@ public MeshCollisionShape(GLMesh mesh) {
      * @param mesh the TriMesh to use
      * @param dummy Unused
      */
-    public MeshCollisionShape(GLMesh mesh, boolean dummy) {
+    public MeshCollisionShape(Mesh mesh, boolean dummy) {
         createCollisionMesh(mesh, new Vector3f(1, 1, 1));
     }
     
-    private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
+    private void createCollisionMesh(Mesh mesh, Vector3f worldScale) {
         this.scale = worldScale;
         bulletMesh = Converter.convert(mesh);
         this.numVertices = bulletMesh.numVertices;
@@ -94,7 +94,7 @@ private void createCollisionMesh(GLMesh mesh, Vector3f worldScale) {
      *
      * @return a new Mesh
      */
-    public GLMesh createJmeMesh(){
+    public Mesh createJmeMesh(){
         return Converter.convert(bulletMesh);
     }
 
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
index 62c240078b..19f054be32 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/KinematicRagdollControl.java
@@ -43,7 +43,7 @@
 import com.jme3.math.*;
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.ViewPort;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.util.TempVars;
@@ -603,7 +603,7 @@ protected void createSpatialData(Spatial model) {
      * shape will contain at least 1 vertex.
      */
     private void filterBoneList(SkeletonControl skeletonControl) {
-        GLMesh[] targets = skeletonControl.getTargets();
+        Mesh[] targets = skeletonControl.getTargets();
         Skeleton skel = skeletonControl.getSkeleton();
         for (int boneI = 0; boneI < skel.getBoneCount(); boneI++) {
             String boneName = skel.getBone(boneI).getName();
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
index d54e642062..6377ee413b 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/RigidBodyControl.java
@@ -46,7 +46,7 @@
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.ViewPort;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.control.Control;
 import com.jme3.scene.shape.Box;
@@ -225,7 +225,7 @@ protected void createCollisionShape() {
         }
         if (spatial instanceof Geometry) {
             Geometry geom = (Geometry) spatial;
-            GLMesh mesh = geom.getMesh();
+            Mesh mesh = geom.getMesh();
             if (mesh instanceof Sphere) {
                 collisionShape = new SphereCollisionShape(((Sphere) mesh).getRadius());
                 return;
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java b/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
index 93a290baca..f24ccf5f72 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/control/ragdoll/RagdollUtils.java
@@ -39,7 +39,7 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
@@ -95,15 +95,15 @@ public static Map> buildPointMap(Spatial model) {
         Map> map = new HashMap<>();
 
         SkeletonControl skeletonCtrl = model.getControl(SkeletonControl.class);
-        GLMesh[] targetMeshes = skeletonCtrl.getTargets();
-        for (GLMesh mesh : targetMeshes) {
+        Mesh[] targetMeshes = skeletonCtrl.getTargets();
+        for (Mesh mesh : targetMeshes) {
             buildPointMapForMesh(mesh, map);
         }
 
         return map;
     }
 
-    private static Map> buildPointMapForMesh(GLMesh mesh, Map> map) {
+    private static Map> buildPointMapForMesh(Mesh mesh, Map> map) {
 
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         ByteBuffer boneIndices = (ByteBuffer) mesh.getBuffer(Type.BoneIndex).getData();
@@ -222,8 +222,8 @@ public static HullCollisionShape makeShapeFromVerticeWeights(Spatial model,
         List points = new ArrayList<>(100);
 
         SkeletonControl skeletonCtrl = model.getControl(SkeletonControl.class);
-        GLMesh[] targetMeshes = skeletonCtrl.getTargets();
-        for (GLMesh mesh : targetMeshes) {
+        Mesh[] targetMeshes = skeletonCtrl.getTargets();
+        for (Mesh mesh : targetMeshes) {
             for (Integer index : boneIndices) {
                 List bonePoints = getPoints(mesh, index, initialScale,
                         initialPosition, weightThreshold);
@@ -254,7 +254,7 @@ public static HullCollisionShape makeShapeFromVerticeWeights(Spatial model,
      * @return a new list of vertex coordinates (not null, length a multiple of
      * 3)
      */
-    private static List getPoints(GLMesh mesh, int boneIndex, Vector3f initialScale, Vector3f offset, float weightThreshold) {
+    private static List getPoints(Mesh mesh, int boneIndex, Vector3f initialScale, Vector3f offset, float weightThreshold) {
 
         FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
         VertexBuffer biBuf = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
@@ -351,9 +351,9 @@ public static void setUserControl(Bone bone, boolean bool) {
      * @param weightThreshold the threshold (≥0, ≤1)
      * @return true if at least 1 vertex found, otherwise false
      */
-    public static boolean hasVertices(int boneIndex, GLMesh[] targets,
+    public static boolean hasVertices(int boneIndex, Mesh[] targets,
             float weightThreshold) {
-        for (GLMesh mesh : targets) {
+        for (Mesh mesh : targets) {
             VertexBuffer biBuf = mesh.getBuffer(VertexBuffer.Type.BoneIndex);
             Buffer boneIndices = biBuf.getDataReadOnly();
             FloatBuffer boneWeight
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
index b7f66189ab..80d71c53ce 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/CollisionShapeFactory.java
@@ -251,9 +251,9 @@ public static CollisionShape createBoxShape(Spatial spatial) {
      * other.
      */
     private static MeshCollisionShape createSingleMeshShape(Geometry geom, Spatial parent) {
-        GLMesh mesh = geom.getMesh();
+        Mesh mesh = geom.getMesh();
         Transform trans = getTransform(geom, parent);
-        if (mesh != null && mesh.getMode() == GLMesh.Mode.Triangles) {
+        if (mesh != null && mesh.getMode() == Mesh.Mode.Triangles) {
             MeshCollisionShape mColl = new MeshCollisionShape(mesh);
             mColl.setScale(trans.getScale());
             return mColl;
@@ -285,7 +285,7 @@ private static BoxCollisionShape createSingleBoxShape(Spatial spatial, Spatial p
      * @param parent
      */
     private static HullCollisionShape createSingleDynamicMeshShape(Geometry geom, Spatial parent) {
-        GLMesh mesh = geom.getMesh();
+        Mesh mesh = geom.getMesh();
         Transform trans = getTransform(geom, parent);
         if (mesh != null) {
             HullCollisionShape dynamicShape = new HullCollisionShape(mesh);
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
index 87f31048f7..096c926e8d 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/Converter.java
@@ -34,7 +34,7 @@
 import com.bulletphysics.collision.shapes.IndexedMesh;
 import com.bulletphysics.dom.HeightfieldTerrainShape;
 import com.jme3.math.FastMath;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.util.BufferUtils;
@@ -223,7 +223,7 @@ public static com.jme3.math.Transform convert(com.bulletphysics.linearmath.Trans
         return out;
     }
 
-    public static synchronized IndexedMesh convert(GLMesh mesh) {
+    public static synchronized IndexedMesh convert(Mesh mesh) {
         IndexedMesh jBulletIndexedMesh = new IndexedMesh();
         jBulletIndexedMesh.triangleIndexBase = ByteBuffer.allocate(mesh.getTriangleCount() * 3 * 4);
         jBulletIndexedMesh.vertexBase = ByteBuffer.allocate(mesh.getVertexCount() * 3 * 4);
@@ -253,8 +253,8 @@ public static synchronized IndexedMesh convert(GLMesh mesh) {
         return jBulletIndexedMesh;
     }
 
-    public static GLMesh convert(IndexedMesh mesh) {
-        GLMesh jmeMesh = new GLMesh();
+    public static Mesh convert(IndexedMesh mesh) {
+        Mesh jmeMesh = new Mesh();
 
         jmeMesh.setBuffer(Type.Index, 3, BufferUtils.createShortBuffer(mesh.numTriangles * 3));
         jmeMesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(mesh.numVertices * 3));
@@ -276,7 +276,7 @@ public static GLMesh convert(IndexedMesh mesh) {
         return jmeMesh;
     }
 
-    public static GLMesh convert(HeightfieldTerrainShape heightfieldShape) {
+    public static Mesh convert(HeightfieldTerrainShape heightfieldShape) {
         return null; //TODO!!
     }
 }
diff --git a/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java b/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
index ab043694b8..3e74f1ab3c 100644
--- a/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
+++ b/jme3-jbullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
@@ -41,7 +41,7 @@
 import com.jme3.bullet.collision.shapes.infos.ChildCollisionShape;
 import com.jme3.math.Matrix3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer.Type;
@@ -126,14 +126,14 @@ private static Geometry createDebugShape(CollisionShape shape) {
         return geom;
     }
 
-    public static GLMesh getDebugMesh(CollisionShape shape) {
-        GLMesh mesh = null;
+    public static Mesh getDebugMesh(CollisionShape shape) {
+        Mesh mesh = null;
         if (shape.getCShape() instanceof ConvexShape) {
-            mesh = new GLMesh();
+            mesh = new Mesh();
             mesh.setBuffer(Type.Position, 3, getVertices((ConvexShape) shape.getCShape()));
             mesh.getFloatBuffer(Type.Position).clear();
         } else if (shape.getCShape() instanceof ConcaveShape) {
-            mesh = new GLMesh();
+            mesh = new Mesh();
             mesh.setBuffer(Type.Position, 3, getVertices((ConcaveShape) shape.getCShape()));
             mesh.getFloatBuffer(Type.Position).clear();
         }
diff --git a/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java b/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
index 5675da237d..bb704578e9 100644
--- a/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
+++ b/jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java
@@ -50,7 +50,7 @@
 import com.jme3.export.binary.BinaryImporter;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -179,7 +179,7 @@ public void testIssue1004() {
         Node sinbad = (Node)new DesktopAssetManager(true).loadModel("Models/Sinbad/SinbadOldAnim.j3o");
 
         Geometry geometry = (Geometry) sinbad.getChild(0);
-        GLMesh mesh = geometry.getMesh();
+        Mesh mesh = geometry.getMesh();
         VertexBuffer.Type bufferType = VertexBuffer.Type.BoneIndex;
         VertexBuffer vertexBuffer = mesh.getBuffer(bufferType);
 
diff --git a/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java b/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
index d2ee71ae22..4d08588759 100644
--- a/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
+++ b/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java
@@ -40,7 +40,7 @@
 import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.Renderer;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -495,7 +495,7 @@ private class Batch {
         private final VertexBuffer vertexColor = new VertexBuffer(Type.Color);
         private final VertexBuffer indexBuffer = new VertexBuffer(Type.Index);
 
-        private final GLMesh mesh = new GLMesh();
+        private final Mesh mesh = new Mesh();
         private final Geometry meshGeometry = new Geometry("nifty-quad", mesh);
         private final RenderState renderState = new RenderState();
 
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
index 564da94cdf..7f48d3e201 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/mesh/FbxMesh.java
@@ -37,7 +37,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.plugins.IrUtils;
 import com.jme3.scene.plugins.IrBoneWeightIndex;
 import com.jme3.scene.plugins.IrMesh;
@@ -55,7 +55,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-public final class FbxMesh extends FbxNodeAttribute> {
+public final class FbxMesh extends FbxNodeAttribute> {
 
     private static final Logger logger = Logger.getLogger(FbxMesh.class.getName());
     
@@ -205,7 +205,7 @@ private static IrBoneWeightIndex[] toBoneWeightIndices(List boneIndices
     }
     
     @Override
-    protected IntMap toJmeObject() {
+    protected IntMap toJmeObject() {
         // Load clusters from SkinDeformer
         if (skinDeformer != null) {
             for (FbxCluster cluster : skinDeformer.getJmeObject()) {
@@ -228,9 +228,9 @@ protected IntMap toJmeObject() {
         IntMap irMeshes = IrUtils.splitByMaterial(irMesh);
         
         // Create a jME3 Mesh for each material index.
-        IntMap jmeMeshes = new IntMap<>();
+        IntMap jmeMeshes = new IntMap<>();
         for (IntMap.Entry irMeshEntry : irMeshes) {
-            GLMesh jmeMesh = IrUtils.convertIrMeshToJmeMesh(irMeshEntry.getValue());
+            Mesh jmeMesh = IrUtils.convertIrMeshToJmeMesh(irMeshEntry.getValue());
             jmeMeshes.put(irMeshEntry.getKey(), jmeMesh);
         }
        
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
index f01a50eaad..678e88eae9 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/node/FbxNode.java
@@ -45,7 +45,7 @@
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Spatial.CullHint;
@@ -318,7 +318,7 @@ public void fromElement(FbxElement element) {
         }
     }
     
-    private Spatial tryCreateGeometry(int materialIndex, GLMesh jmeMesh, boolean single) {
+    private Spatial tryCreateGeometry(int materialIndex, Mesh jmeMesh, boolean single) {
         // Map meshes without material indices to material 0.
         if (materialIndex == -1) {
             materialIndex = 0;
@@ -396,7 +396,7 @@ public Spatial toJmeObject() {
         
         if (nodeAttribute instanceof FbxMesh) {
             FbxMesh fbxMesh = (FbxMesh) nodeAttribute;
-            IntMap jmeMeshes = fbxMesh.getJmeObject();
+            IntMap jmeMeshes = fbxMesh.getJmeObject();
             
             if (jmeMeshes == null || jmeMeshes.size() == 0) {
                 // No meshes found on FBXMesh (??)
@@ -412,7 +412,7 @@ public Spatial toJmeObject() {
                 }
                 Node node = new Node(nodeName);
                 boolean singleMesh = jmeMeshes.size() == 1;
-                for (IntMap.Entry meshInfo : jmeMeshes) {
+                for (IntMap.Entry meshInfo : jmeMeshes) {
                     node.attachChild(tryCreateGeometry(meshInfo.getKey(), meshInfo.getValue(), singleMesh));
                 }
                 spatial = node;
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
index d4dcb081f9..9cc40fe5b9 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxMesh.java
@@ -8,11 +8,11 @@
 
 import com.jme3.asset.AssetLoadException;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.plugins.fbx.SceneLoader;
 import com.jme3.scene.plugins.fbx.file.FbxElement;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.Node;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.IntMap;
@@ -257,7 +257,7 @@ public void link(FbxObject otherObject) {
     }
 
     private List createGeometries() throws IOException {
-        GLMesh mesh = new GLMesh();
+        Mesh mesh = new Mesh();
         mesh.setMode(Mode.Triangles);
         // Since each vertex should contain unique texcoord and normal we should unroll vertex indexing
         // So we don't use VertexBuffer.Type.Index for elements drawing
@@ -507,7 +507,7 @@ else if(binormalsMapping.equals("ByPolygonVertex"))
                 Entry> e = iterator.next();
                 int materialId = e.getKey();
                 List indexes = e.getValue();
-                GLMesh newMesh = mesh.clone();
+                Mesh newMesh = mesh.clone();
                 newMesh.setBuffer(VertexBuffer.Type.Index, 3, toArray(indexes.toArray(new Integer[indexes.size()])));
                 newMesh.setStatic();
                 newMesh.updateBound();
diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
index 954c05c782..8cb1a2e8a8 100644
--- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
+++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxSkin.java
@@ -6,7 +6,7 @@
 import java.util.List;
 
 import com.jme3.asset.AssetLoadException;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.VertexBuffer.Usage;
@@ -43,10 +43,10 @@ public void generateSkinning() {
         for(FbxMesh fbxMesh : toSkin) {
             if(fbxMesh.geometries == null)
                 continue;
-            GLMesh firstMesh = fbxMesh.geometries.get(0).getMesh();
+            Mesh firstMesh = fbxMesh.geometries.get(0).getMesh();
             int maxWeightsPerVert = generateBoneData(firstMesh, fbxMesh);
             for(int i = 0; i < fbxMesh.geometries.size(); ++i) {
-                GLMesh mesh = fbxMesh.geometries.get(i).getMesh();
+                Mesh mesh = fbxMesh.geometries.get(i).getMesh();
                 if(mesh != firstMesh) {
                     mesh.setBuffer(firstMesh.getBuffer(VertexBuffer.Type.BoneWeight));
                     mesh.setBuffer(firstMesh.getBuffer(VertexBuffer.Type.BoneIndex));
@@ -59,7 +59,7 @@ public void generateSkinning() {
         }
     }
     
-    private int generateBoneData(GLMesh mesh, FbxMesh fbxMesh) {
+    private int generateBoneData(Mesh mesh, FbxMesh fbxMesh) {
         // Create bone buffers
         FloatBuffer boneWeightData = BufferUtils.createFloatBuffer(fbxMesh.vCount * 4);
         ByteBuffer boneIndicesData = BufferUtils.createByteBuffer(fbxMesh.vCount * 4);
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
index 2f199d8872..3002515633 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java
@@ -374,7 +374,7 @@ public Geometry[] readMeshPrimitives(int meshIndex) throws IOException {
             int index = 0;
             for (JsonElement primitive : primitives) {
                 JsonObject meshObject = primitive.getAsJsonObject();
-                GLMesh mesh = new GLMesh();
+                Mesh mesh = new Mesh();
                 addToCache("mesh", 0, mesh, 1);
                 Integer mode = getAsInteger(meshObject, "mode");
                 mesh.setMode(getMeshMode(mode));
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
index 054c9ba80f..8f015f28db 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java
@@ -71,29 +71,29 @@ public static JsonObject parse(InputStream stream) {
         return parser.parse(stream);
     }
 
-    public static GLMesh.Mode getMeshMode(Integer mode) {
+    public static Mesh.Mode getMeshMode(Integer mode) {
         if (mode == null) {
-            return GLMesh.Mode.Triangles;
+            return Mesh.Mode.Triangles;
         }
         //too bad, we could have returned the enum value from the ordinal
         //but LineLoop and LineStrip are inverted in the Mesh.Mode Enum declaration.
         switch (mode) {
             case 0:
-                return GLMesh.Mode.Points;
+                return Mesh.Mode.Points;
             case 1:
-                return GLMesh.Mode.Lines;
+                return Mesh.Mode.Lines;
             case 2:
-                return GLMesh.Mode.LineLoop;
+                return Mesh.Mode.LineLoop;
             case 3:
-                return GLMesh.Mode.LineStrip;
+                return Mesh.Mode.LineStrip;
             case 4:
-                return GLMesh.Mode.Triangles;
+                return Mesh.Mode.Triangles;
             case 5:
-                return GLMesh.Mode.TriangleStrip;
+                return Mesh.Mode.TriangleStrip;
             case 6:
-                return GLMesh.Mode.TriangleFan;
+                return Mesh.Mode.TriangleFan;
         }
-        return GLMesh.Mode.Triangles;
+        return Mesh.Mode.Triangles;
     }
 
     public static VertexBuffer.Format getVertexBufferFormat(int componentType) {
@@ -488,7 +488,7 @@ public static byte[] toByteArray(short[] shortArray) {
     }
 
 
-    public static void handleSkinningBuffers(GLMesh mesh, IntMap skinBuffers) {
+    public static void handleSkinningBuffers(Mesh mesh, IntMap skinBuffers) {
         if (skinBuffers.size() > 0) {
             int length = skinBuffers.get(0).joints.length;
             short[] jointsArray = new short[length];
@@ -546,7 +546,7 @@ public int compare(GltfLoader.WeightData o1, GltfLoader.WeightData o2) {
     }
 
 
-    public static void setSkinBuffers(GLMesh mesh, short[] jointsArray, float[] weightsArray, int componentSize) {
+    public static void setSkinBuffers(Mesh mesh, short[] jointsArray, float[] weightsArray, int componentSize) {
         if (componentSize == 1) {
             mesh.setBuffer(VertexBuffer.Type.BoneIndex, 4, BufferUtils.createByteBuffer(toByteArray(jointsArray)));
         } else {
@@ -858,7 +858,7 @@ public static Spatial findCommonAncestor(List spatials) {
 
     }
 
-    public static void dumpMesh(GLMesh m) {
+    public static void dumpMesh(Mesh m) {
         for (VertexBuffer vertexBuffer : m.getBufferList().getArray()) {
             System.err.println(vertexBuffer.getBufferType());
             System.err.println(vertexBuffer.getFormat());
diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
index d66bfee532..aff6fbdcf1 100644
--- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
+++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java
@@ -37,7 +37,7 @@
 import com.jme3.asset.AssetLoadException;
 import com.jme3.math.Matrix3f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import static com.jme3.scene.plugins.gltf.GltfUtils.getAsInteger;
 import static com.jme3.scene.plugins.gltf.GltfUtils.getVertexBufferType;
@@ -69,7 +69,7 @@ public class TextureTransformExtensionLoader implements ExtensionLoader {
      * @param transform The matrix containing the scale/rotate/translate transformations
      * @param verType The vertex buffer type from which to retrieve the UV coordinates
      */    
-    private void uvTransform(GLMesh mesh, Matrix3f transform, VertexBuffer.Type verType) {
+    private void uvTransform(Mesh mesh, Matrix3f transform, VertexBuffer.Type verType) {
         if (!transform.isIdentity()) { // if transform is the identity matrix, there's nothing to do
             VertexBuffer tc = mesh.getBuffer(verType);
             if (tc == null) {
@@ -102,7 +102,7 @@ public Object handleExtension(GltfLoader loader, String parentName, JsonElement
         if (!(input instanceof Texture2D)) {
             logger.log(Level.WARNING, "KHR_texture_transform extension added on an unsupported element, the loaded scene result will be unexpected.");
         }
-        GLMesh mesh = loader.fetchFromCache("mesh", 0, GLMesh.class);
+        Mesh mesh = loader.fetchFromCache("mesh", 0, Mesh.class);
         if (mesh != null) {
             Matrix3f translation = new Matrix3f();
             Matrix3f rotation = new Matrix3f();
@@ -131,7 +131,7 @@ public Object handleExtension(GltfLoader loader, String parentName, JsonElement
                 texCoord = jsonObject.get("texCoord").getAsInt(); // it overrides the parent's texCoord value
             }                 
             Matrix3f transform = translation.mult(rotation).mult(scale);
-            GLMesh meshLast = loader.fetchFromCache("textureTransformData", 0, GLMesh.class);
+            Mesh meshLast = loader.fetchFromCache("textureTransformData", 0, Mesh.class);
             Map transformMap = loader.fetchFromCache("textureTransformData", 1, HashMap.class);
             if (mesh != meshLast || (transformMap != null && transformMap.get(texCoord) == null)) {
                 // at this point, we're processing a new mesh or the same mesh as before but for a different UV set
diff --git a/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java b/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
index 3aaf573b39..30338d27fd 100644
--- a/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
+++ b/jme3-plugins/src/main/java/com/jme3/scene/plugins/IrUtils.java
@@ -32,7 +32,7 @@
 package com.jme3.scene.plugins;
 
 import com.jme3.math.Vector4f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.scene.mesh.IndexIntBuffer;
@@ -258,7 +258,7 @@ public static IntMap splitByMaterial(IrMesh mesh) {
      * @param mesh the input IrMesh (not null)
      * @return a new Mesh
      */
-    public static GLMesh convertIrMeshToJmeMesh(IrMesh mesh) {
+    public static Mesh convertIrMeshToJmeMesh(IrMesh mesh) {
         Map vertexToVertexIndex = new HashMap<>();
         List vertices = new ArrayList<>();
         List indexes = new ArrayList<>();
@@ -284,8 +284,8 @@ public static GLMesh convertIrMeshToJmeMesh(IrMesh mesh) {
             }
         }
         
-        GLMesh jmeMesh = new GLMesh();
-        jmeMesh.setMode(GLMesh.Mode.Triangles);
+        Mesh jmeMesh = new Mesh();
+        jmeMesh.setMode(Mesh.Mode.Triangles);
         
         FloatBuffer posBuf = null;
         FloatBuffer normBuf = null;
diff --git a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
index 21a4e9acd2..4cb7967d94 100644
--- a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
+++ b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MeshLoader.java
@@ -84,7 +84,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
     private IntBuffer ib;
     private FloatBuffer fb;
     private VertexBuffer vb;
-    private GLMesh mesh;
+    private Mesh mesh;
     private Geometry geom;
     private ByteBuffer indicesData;
     private FloatBuffer weightsFloatData;
@@ -94,7 +94,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
     private boolean usesBigIndices;
     private boolean submeshNamesHack;
     // Global data
-    private GLMesh sharedMesh;
+    private Mesh sharedMesh;
     private int meshIndex = 0;
     private int texCoordIndex = 0;
     private String ignoreUntilEnd = null;
@@ -241,15 +241,15 @@ private void applyMaterial(Geometry geom, String matName) {
     }
 
     private void startSubMesh(String matName, String usesharedvertices, String use32bitIndices, String opType) throws SAXException {
-        mesh = new GLMesh();
+        mesh = new Mesh();
         if (opType == null || opType.equals("triangle_list")) {
-            mesh.setMode(GLMesh.Mode.Triangles);
+            mesh.setMode(Mesh.Mode.Triangles);
             //} else if (opType.equals("triangle_strip")) {
             //    mesh.setMode(Mesh.Mode.TriangleStrip);
             //} else if (opType.equals("triangle_fan")) {
             //    mesh.setMode(Mesh.Mode.TriangleFan);
         } else if (opType.equals("line_list")) {
-            mesh.setMode(GLMesh.Mode.Lines);
+            mesh.setMode(Mesh.Mode.Lines);
         } else {
             throw new SAXException("Unsupported operation type: " + opType);
         }
@@ -286,7 +286,7 @@ private void startSubMesh(String matName, String usesharedvertices, String use32
     }
 
     private void startSharedGeom(String vertexCount) throws SAXException {
-        sharedMesh = new GLMesh();
+        sharedMesh = new Mesh();
         vertCount = parseInt(vertexCount);
         usesSharedVerts = false;
 
@@ -556,7 +556,7 @@ private void startLevelOfDetail(String numLevels) {
     private void endLevelOfDetail() {
         // set the lod data for each mesh
         for (Entry> entry : lodLevels) {
-            GLMesh m = geoms.get(entry.getKey()).getMesh();
+            Mesh m = geoms.get(entry.getKey()).getMesh();
             List levels = entry.getValue();
             VertexBuffer[] levelArray = new VertexBuffer[levels.size()];
             levels.toArray(levelArray);
@@ -772,7 +772,7 @@ private Node compileModel() {
 
         for (int i = 0; i < geoms.size(); i++) {
             Geometry g = geoms.get(i);
-            GLMesh m = g.getMesh();
+            Mesh m = g.getMesh();
 
             // New code for buffer extract
             if (sharedMesh != null && usesSharedMesh.get(i)) {
@@ -789,7 +789,7 @@ private Node compileModel() {
 
             for (int i = 0; i < geoms.size(); i++) {
                 Geometry g = geoms.get(i);
-                GLMesh m = geoms.get(i).getMesh();
+                Mesh m = geoms.get(i).getMesh();
                 m.generateBindPose();
             }
 
diff --git a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
index f2a83e9e6c..50435b1218 100644
--- a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
+++ b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/animation/TestIssue2076.java
@@ -42,7 +42,7 @@
 import com.jme3.math.ColorRGBA;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.VertexBuffer;
 import org.jmonkeyengine.screenshottests.testframework.ScreenshotTestBase;
@@ -98,7 +98,7 @@ protected void initialize(Application app) {
 
                 // Remove its vertex normals
                 Geometry oldGeometry = (Geometry) oldJaime.getChild(0);
-                GLMesh oldMesh = oldGeometry.getMesh();
+                Mesh oldMesh = oldGeometry.getMesh();
                 oldMesh.clearBuffer(VertexBuffer.Type.Normal);
                 oldMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
 
@@ -114,7 +114,7 @@ protected void initialize(Application app) {
 
                 // Remove its vertex normals
                 Geometry newGeometry = (Geometry) newJaime.getChild(0);
-                GLMesh newMesh = newGeometry.getMesh();
+                Mesh newMesh = newGeometry.getMesh();
                 newMesh.clearBuffer(VertexBuffer.Type.Normal);
                 newMesh.clearBuffer(VertexBuffer.Type.BindPoseNormal);
 
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java b/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
index 3cf6d5cf53..4a68a9cc18 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/GeoMap.java
@@ -34,7 +34,7 @@
 import com.jme3.export.*;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
 import java.io.IOException;
@@ -308,12 +308,12 @@ public IntBuffer writeIndexArray(IntBuffer store){
         return store;
     }
     
-    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, boolean center){
+    public Mesh createMesh(Vector3f scale, Vector2f tcScale, boolean center){
         FloatBuffer pb = writeVertexArray(null, scale, center);
         FloatBuffer tb = writeTexCoordArray(null, Vector2f.ZERO, tcScale);
         FloatBuffer nb = writeNormalArray(null, scale);
         IntBuffer ib = writeIndexArray(null);
-        GLMesh m = new GLMesh();
+        Mesh m = new Mesh();
         m.setBuffer(Type.Position, 3, pb);
         m.setBuffer(Type.Normal, 3, nb);
         m.setBuffer(Type.TexCoord, 2, tb);
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
index 23feed4f97..2dae19b458 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/LODGeomap.java
@@ -37,8 +37,8 @@
 import com.jme3.math.Triangle;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
-import com.jme3.scene.GLMesh.Mode;
+import com.jme3.scene.Mesh;
+import com.jme3.scene.Mesh.Mode;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
 import com.jme3.terrain.GeoMap;
@@ -73,11 +73,11 @@ public LODGeomap(int size, float[] heightMap) {
         super(heightMap, size, size, 1);
     }
 
-    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center) {
+    public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center) {
         return this.createMesh(scale, tcScale, tcOffset, offsetAmount, totalSize, center, 1, false, false, false, false);
     }
 
-    public GLMesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center, int lod, boolean rightLod, boolean topLod, boolean leftLod, boolean bottomLod) {
+    public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center, int lod, boolean rightLod, boolean topLod, boolean leftLod, boolean bottomLod) {
         FloatBuffer pb = writeVertexArray(null, scale, center);
         FloatBuffer texb = writeTexCoordArray(null, tcOffset, tcScale, offsetAmount, totalSize);
         FloatBuffer nb = writeNormalArray(null, scale);
@@ -85,7 +85,7 @@ public GLMesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, fl
         FloatBuffer bb = BufferUtils.createFloatBuffer(getWidth() * getHeight() * 3);
         FloatBuffer tanb = BufferUtils.createFloatBuffer(getWidth() * getHeight() * 3);
         writeTangentArray(nb, tanb, bb, texb, scale);
-        GLMesh m = new GLMesh();
+        Mesh m = new Mesh();
         m.setMode(Mode.TriangleStrip);
         m.setBuffer(Type.Position, 3, pb);
         m.setBuffer(Type.Normal, 3, nb);
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
index 4cdb3184a1..b4ffc5a12d 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
@@ -43,7 +43,7 @@
 import com.jme3.export.OutputCapsule;
 import com.jme3.math.*;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
@@ -189,7 +189,7 @@ public TerrainPatch(String name, int size, Vector3f stepScale,
         setLocalTranslation(origin);
 
         geomap = new LODGeomap(size, heightMap);
-        GLMesh m = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
+        Mesh m = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
         setMesh(m);
 
     }
@@ -337,7 +337,7 @@ protected void updateNormals() {
         getMesh().getBuffer(Type.Binormal).updateData(newBinormalBuffer);
     }
 
-    private void setInBuffer(GLMesh mesh, int index, Vector3f normal, Vector3f tangent, Vector3f binormal) {
+    private void setInBuffer(Mesh mesh, int index, Vector3f normal, Vector3f tangent, Vector3f binormal) {
         VertexBuffer NB = mesh.getBuffer(Type.Normal);
         VertexBuffer TB = mesh.getBuffer(Type.Tangent);
         VertexBuffer BB = mesh.getBuffer(Type.Binormal);
@@ -893,7 +893,7 @@ private int collideWithBoundingBox(BoundingBox bbox, CollisionResults results) {
     public void write(JmeExporter ex) throws IOException {
         // the mesh is removed, and reloaded when read() is called
         // this reduces the save size to 10% by not saving the mesh
-        GLMesh temp = getMesh();
+        Mesh temp = getMesh();
         mesh = null;
 
         super.write(ex);
@@ -928,7 +928,7 @@ public void read(JmeImporter im) throws IOException {
         lodEntropy = ic.readFloatArray("lodEntropy", null);
         geomap = (LODGeomap) ic.readSavable("geomap", null);
 
-        GLMesh regen = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
+        Mesh regen = geomap.createMesh(stepScale, new Vector2f(1,1), offset, offsetAmount, totalSize, false);
         setMesh(regen);
         //TangentBinormalGenerator.generate(this); // note that this will be removed
         ensurePositiveVolumeBBox();
@@ -952,7 +952,7 @@ public TerrainPatch clone() {
         //clone.setLodCalculator(lodCalculatorFactory.clone());
         clone.geomap = new LODGeomap(size, geomap.getHeightArray());
         clone.setLocalTranslation(getLocalTranslation().clone());
-        GLMesh m = clone.geomap.createMesh(clone.stepScale, Vector2f.UNIT_XY, clone.offset, clone.offsetAmount, clone.totalSize, false);
+        Mesh m = clone.geomap.createMesh(clone.stepScale, Vector2f.UNIT_XY, clone.offset, clone.offsetAmount, clone.totalSize, false);
         clone.setMesh(m);
         clone.setMaterial(material == null ? null : material.clone());
         return clone;
@@ -976,7 +976,7 @@ public void cloneFields( Cloner cloner, Object original ) {
         // Don't feel like making geomap cloneable tonight,
         // so I'll copy the old logic.
         this.geomap = new LODGeomap(size, geomap.getHeightArray());
-        GLMesh m = geomap.createMesh(stepScale, Vector2f.UNIT_XY, offset, offsetAmount, totalSize, false);
+        Mesh m = geomap.createMesh(stepScale, Vector2f.UNIT_XY, offset, offsetAmount, totalSize, false);
         this.setMesh(m);
 
         // In this case, we always clone material even if the cloner is set up
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
index 0bc8ab95ff..9057664d12 100644
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
+++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/util/EntropyComputeUtil.java
@@ -36,7 +36,7 @@
 import com.jme3.math.Matrix4f;
 import com.jme3.math.Ray;
 import com.jme3.math.Vector3f;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.VertexBuffer;
 import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.BufferUtils;
@@ -61,7 +61,7 @@ public class EntropyComputeUtil {
     private EntropyComputeUtil() {
     }
 
-    public static float computeLodEntropy(GLMesh terrainBlock, Buffer lodIndices){
+    public static float computeLodEntropy(Mesh terrainBlock, Buffer lodIndices){
         // Bounding box for the terrain block
         BoundingBox bbox = (BoundingBox) terrainBlock.getBound();
 
diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java b/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
index e65f68edc1..c6d0237321 100644
--- a/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
+++ b/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java
@@ -12,7 +12,7 @@
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue.Bucket;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.GLMesh;
+import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.VertexBuffer;
@@ -644,8 +644,8 @@ private ViewPort setupViewBuffers(Camera cam, String viewName){
      * @param api the underlying VR api
      * @return the distorted mesh.
      */
-    public static GLMesh setupDistortionMesh(int eye, VRAPI api) {
-        GLMesh distortionMesh = new GLMesh();
+    public static Mesh setupDistortionMesh(int eye, VRAPI api) {
+        Mesh distortionMesh = new Mesh();
         float m_iLensGridSegmentCountH = 43, m_iLensGridSegmentCountV = 43;
 
         float w = 1f / (m_iLensGridSegmentCountH - 1f);
diff --git a/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java b/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
index 9339fc2b8a..e2911eba6f 100644
--- a/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
+++ b/jme3-vr/src/main/java/com/jme3/scene/CenterQuad.java
@@ -52,10 +52,10 @@
  * @deprecated use com.jme3.scene.shape.CenterQuad
  */
 @Deprecated
-public class CenterQuad extends GLMesh {
+public class CenterQuad extends Mesh {
 
     public static CenterQuad UnitQuad = new CenterQuad(0.5f, 0.5f);
-    public static GLMesh CenterSplitQuad;
+    public static Mesh CenterSplitQuad;
     
     private float width;
     private float height;

From 268988b03d7d54ee2a375b98c0290bed976562a7 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Fri, 12 Sep 2025 17:48:22 -0400
Subject: [PATCH 66/80] add BackedStaticBuffer

---
 .../java/com/jme3/collision/bih/BIHTree.java  |  8 ++-
 .../main/java/com/jme3/scene/Geometry.java    | 10 ++--
 .../src/main/java/com/jme3/scene/Mesh.java    | 17 +++++-
 .../vulkan/buffers/BackedStaticBuffer.java    | 60 +++++++++++++++++++
 .../com/jme3/vulkan/mesh/AdaptiveMesh.java    | 30 ++++++++++
 .../java/com/jme3/vulkan/mesh/NewMesh.java    |  7 ++-
 .../vulkan/mesh/NullAttributeModifier.java    | 23 +++++--
 7 files changed, 142 insertions(+), 13 deletions(-)
 create mode 100644 jme3-core/src/main/java/com/jme3/vulkan/buffers/BackedStaticBuffer.java

diff --git a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
index fca434f750..b4083c0147 100644
--- a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
+++ b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
@@ -54,6 +54,8 @@
 import com.jme3.scene.mesh.VirtualIndexBuffer;
 import com.jme3.scene.mesh.WrappedIndexBuffer;
 import com.jme3.util.TempVars;
+import com.jme3.vulkan.mesh.NewMesh;
+
 import java.io.IOException;
 import static java.lang.Math.max;
 import java.nio.FloatBuffer;
@@ -62,7 +64,7 @@ public class BIHTree implements CollisionData {
 
     public static final int MAX_TREE_DEPTH = 100;
     public static final int MAX_TRIS_PER_NODE = 21;
-    private Mesh mesh;
+    private NewMesh mesh;
     private BIHNode root;
     private int maxTrisPerNode;
     private int numTris;
@@ -98,7 +100,7 @@ private void initTriList(FloatBuffer vb, IndexBuffer ib) {
         }
     }
 
-    public BIHTree(Mesh mesh, int maxTrisPerNode) {
+    public BIHTree(NewMesh mesh, int maxTrisPerNode) {
         this.mesh = mesh;
         this.maxTrisPerNode = maxTrisPerNode;
 
@@ -128,7 +130,7 @@ public BIHTree(Mesh mesh, int maxTrisPerNode) {
         initTriList(vb, ib);
     }
 
-    public BIHTree(Mesh mesh) {
+    public BIHTree(NewMesh mesh) {
         this(mesh, MAX_TRIS_PER_NODE);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index 37de9d459e..d130885e7b 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -47,6 +47,8 @@
 import com.jme3.util.TempVars;
 import com.jme3.util.clone.Cloner;
 import com.jme3.util.clone.IdentityCloneFunction;
+import com.jme3.vulkan.mesh.NewMesh;
+
 import java.io.IOException;
 import java.util.Queue;
 import java.util.logging.Level;
@@ -65,7 +67,7 @@ public class Geometry extends Spatial {
     // models loaded with shared mesh will be automatically fixed.
     public static final int SAVABLE_VERSION = 1;
     private static final Logger logger = Logger.getLogger(Geometry.class.getName());
-    protected Mesh mesh;
+    protected NewMesh mesh;
     protected transient int lodLevel = 0;
     protected Material material;
     /**
@@ -126,7 +128,7 @@ public Geometry(String name) {
      * @param name The name of this geometry
      * @param mesh The mesh data for this geometry
      */
-    public Geometry(String name, Mesh mesh) {
+    public Geometry(String name, NewMesh mesh) {
         this(name);
 
         if (mesh == null) {
@@ -258,7 +260,7 @@ public void setMesh(Mesh mesh) {
      *
      * @see #setMesh(Mesh)
      */
-    public Mesh getMesh() {
+    public NewMesh getMesh() {
         return mesh;
     }
 
@@ -480,7 +482,7 @@ public int collideWith(Collidable other, CollisionResults results) {
             // NOTE: BIHTree in mesh already checks collision with the
             // mesh's bound
             int prevSize = results.size();
-            int added = mesh.collideWith(other, cachedWorldMat, worldBound, results);
+            int added = mesh.collideWith(other, this, results);
             int newSize = results.size();
             for (int i = prevSize; i < newSize; i++) {
                 results.getCollisionDirect(i).setGeometry(this);
diff --git a/jme3-core/src/main/java/com/jme3/scene/Mesh.java b/jme3-core/src/main/java/com/jme3/scene/Mesh.java
index 0a19d9fedc..3f409511a3 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Mesh.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Mesh.java
@@ -46,6 +46,9 @@
 import com.jme3.util.IntMap.Entry;
 import com.jme3.util.clone.Cloner;
 import com.jme3.util.clone.JmeCloneable;
+import com.jme3.vulkan.commands.CommandBuffer;
+import com.jme3.vulkan.mesh.NewMesh;
+
 import java.io.IOException;
 import java.nio.*;
 import java.util.ArrayList;
@@ -64,7 +67,7 @@
  *
  * @author Kirill Vainer
  */
-public class Mesh implements Savable, Cloneable, JmeCloneable {
+public class Mesh implements NewMesh, Savable, Cloneable, JmeCloneable {
 
     /**
      * The mode of the Mesh specifies both the type of primitive represented
@@ -878,10 +881,21 @@ public int getTriangleCount(int lod) {
      *
      * @return how many triangles/elements are on this Mesh.
      */
+    @Override
     public int getTriangleCount() {
         return elementCount;
     }
 
+    @Override
+    public void bind(CommandBuffer cmd) {
+
+    }
+
+    @Override
+    public void draw(CommandBuffer cmd) {
+
+    }
+
     /**
      * Returns the number of vertices on this mesh.
      * The value is computed based on the position buffer, which
@@ -889,6 +903,7 @@ public int getTriangleCount() {
      *
      * @return Number of vertices on the mesh
      */
+    @Override
     public int getVertexCount() {
         return vertCount;
     }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/buffers/BackedStaticBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BackedStaticBuffer.java
new file mode 100644
index 0000000000..f5303f693b
--- /dev/null
+++ b/jme3-core/src/main/java/com/jme3/vulkan/buffers/BackedStaticBuffer.java
@@ -0,0 +1,60 @@
+package com.jme3.vulkan.buffers;
+
+import com.jme3.vulkan.devices.LogicalDevice;
+import com.jme3.vulkan.memory.MemoryProp;
+import com.jme3.vulkan.memory.MemorySize;
+import com.jme3.vulkan.util.Flag;
+import org.lwjgl.PointerBuffer;
+import org.lwjgl.system.MemoryUtil;
+
+import java.nio.ByteBuffer;
+
+public class BackedStaticBuffer extends StaticBuffer {
+
+    private final PointerBuffer location = MemoryUtil.memAllocPointer(1);
+    private final ByteBuffer backing;
+    private boolean backed = false;
+
+    public BackedStaticBuffer(LogicalDevice device, MemorySize size, Flag usage, Flag mem, boolean concurrent) {
+        super(device, size, usage, mem, concurrent);
+        backing = MemoryUtil.memCalloc(size.getBytes(), Byte.BYTES);
+        ref.refresh();
+    }
+
+    @Override
+    public PointerBuffer map(int offset, int size) {
+        if (backed) {
+            location.put(0, MemoryUtil.memAddress(backing, offset));
+            return location;
+        }
+        return super.map(offset, size);
+    }
+
+    @Override
+    public ByteBuffer mapBytes() {
+        if (backed) {
+            return backing;
+        }
+        return super.mapBytes();
+    }
+
+    @Override
+    public void unmap() {
+        super.unmap();
+        ByteBuffer data = super.mapBytes();
+        MemoryUtil.memCopy(data, backing);
+        super.unmap();
+        backed = true;
+    }
+
+    @Override
+    public Runnable createNativeDestroyer() {
+        Runnable sup = super.createNativeDestroyer();
+        return () -> {
+            sup.run();
+            MemoryUtil.memFree(location);
+            MemoryUtil.memFree(backing);
+        };
+    }
+
+}
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
index 043c40bba3..ae2e41932b 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
@@ -1,7 +1,13 @@
 package com.jme3.vulkan.mesh;
 
 import com.jme3.bounding.BoundingVolume;
+import com.jme3.collision.Collidable;
+import com.jme3.collision.CollisionResults;
+import com.jme3.collision.UnsupportedCollisionException;
+import com.jme3.collision.bih.BIHTree;
 import com.jme3.math.Vector3f;
+import com.jme3.scene.CollisionData;
+import com.jme3.scene.Geometry;
 import com.jme3.vulkan.buffers.*;
 import com.jme3.vulkan.commands.CommandBuffer;
 import com.jme3.vulkan.frames.VersionedResource;
@@ -27,6 +33,7 @@ protected enum VertexMode {
     private GpuBuffer boundIndexBuffer;
     private BoundingVolume volume;
     private int vertices;
+    private CollisionData collisionTree;
 
     public AdaptiveMesh(MeshDescription description) {
         this.description = description;
@@ -72,6 +79,25 @@ public int getTriangleCount() {
         return !indexBuffers.isEmpty() ? indexBuffers.get(0).get().size().getElements() / 3 : 0;
     }
 
+    @Override
+    public int collideWith(Collidable other, Geometry geometry, CollisionResults results) {
+        if (collisionTree == null) {
+            collisionTree = createCollisionTree();
+        }
+        return collisionTree.collideWith(other, geometry.getWorldMatrix(), geometry.getWorldBound(), results);
+    }
+
+    @Override
+    public int collideWith(Collidable other, CollisionResults results) throws UnsupportedCollisionException {
+        return 0;
+    }
+
+    private CollisionData createCollisionTree() {
+        BIHTree tree = new BIHTree(this);
+        tree.construct();
+        return tree;
+    }
+
     protected void updateBound(AttributeModifier attribute) {
         Vector3f pos = new Vector3f();
         Vector3f min = new Vector3f();
@@ -91,6 +117,10 @@ protected void updateBound(AttributeModifier attribute) {
         }
     }
 
+    public VertexReader readAttribute(String attribute) {
+        return modifyAttribute(attribute);
+    }
+
     @SuppressWarnings("resource")
     protected AttributeModifier modifyAttribute(String attribute) {
         VertexAttribute attr = description.getAttribute(attribute);
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
index 2c020cd474..9589e5cb80 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
@@ -1,8 +1,11 @@
 package com.jme3.vulkan.mesh;
 
+import com.jme3.collision.Collidable;
+import com.jme3.collision.CollisionResults;
+import com.jme3.scene.Geometry;
 import com.jme3.vulkan.commands.CommandBuffer;
 
-public interface NewMesh {
+public interface NewMesh extends Collidable {
 
     void bind(CommandBuffer cmd);
 
@@ -12,4 +15,6 @@ public interface NewMesh {
 
     int getTriangleCount();
 
+    int collideWith(Collidable other, Geometry geometry, CollisionResults results);
+
 }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java
index c97ff8766c..0dd0a12cb9 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NullAttributeModifier.java
@@ -21,6 +21,21 @@ protected AttributeModifier map() {
     @Override
     public void close() {}
 
+    @Override
+    public int capacity() {
+        return 0;
+    }
+
+    @Override
+    public int limit() {
+        return 0;
+    }
+
+    @Override
+    public AttributeModifier limit(int vertex) {
+        return this;
+    }
+
     @Override
     public AttributeModifier putByte(int vertex, int component, byte value) {
         return this;
@@ -181,7 +196,7 @@ public Vector2f getVector2(int vertex, int baseComponent, Vector2f store) {
         if (store == null) {
             store = new Vector2f();
         }
-        return store;
+        return store.set(0f, 0f);
     }
 
     @Override
@@ -189,7 +204,7 @@ public Vector3f getVector3(int vertex, int baseComponent, Vector3f store) {
         if (store == null) {
             store = new Vector3f();
         }
-        return store;
+        return store.set(0f, 0f, 0f);
     }
 
     @Override
@@ -197,7 +212,7 @@ public Vector4f getVector4(int vertex, int baseComponent, Vector4f store) {
         if (store == null) {
             store = new Vector4f();
         }
-        return store;
+        return store.set(0f, 0f, 0f, 0f);
     }
 
     @Override
@@ -205,7 +220,7 @@ public ColorRGBA getColor(int vertex, int baseComponent, ColorRGBA store) {
         if (store == null) {
             store = new ColorRGBA();
         }
-        return store;
+        return store.set(0f, 0f, 0f, 0f);
     }
 
 }

From f23c5c856058c05ecea8295bce9f1e94b98a1c30 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Fri, 12 Sep 2025 18:13:57 -0400
Subject: [PATCH 67/80] make BIHTree compatible with NewMesh

---
 .../java/com/jme3/collision/bih/BIHTree.java  | 59 +++++++++++--------
 .../main/java/com/jme3/scene/Geometry.java    |  1 +
 .../com/jme3/vulkan/buffers/GpuBuffer.java    | 14 +++++
 .../com/jme3/vulkan/mesh/AdaptiveMesh.java    | 12 ++--
 4 files changed, 56 insertions(+), 30 deletions(-)

diff --git a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
index b4083c0147..401be07137 100644
--- a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
+++ b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
@@ -54,7 +54,9 @@
 import com.jme3.scene.mesh.VirtualIndexBuffer;
 import com.jme3.scene.mesh.WrappedIndexBuffer;
 import com.jme3.util.TempVars;
+import com.jme3.vulkan.buffers.GpuBuffer;
 import com.jme3.vulkan.mesh.NewMesh;
+import com.jme3.vulkan.mesh.VertexReader;
 
 import java.io.IOException;
 import static java.lang.Math.max;
@@ -74,24 +76,25 @@ public class BIHTree implements CollisionData {
     // private transient CollisionResults boundResults = new CollisionResults();
     private transient float[] bihSwapTmp;
 
-    private void initTriList(FloatBuffer vb, IndexBuffer ib) {
+    private void initTriList(VertexReader vb, IndexBuffer ib) {
         pointData = new float[numTris * 3 * 3];
         int p = 0;
+
         for (int i = 0; i < numTris * 3; i += 3) {
             int vert = ib.get(i) * 3;
-            pointData[p++] = vb.get(vert++);
-            pointData[p++] = vb.get(vert++);
-            pointData[p++] = vb.get(vert);
+            pointData[p++] = vb.getFloat(vert, 0);
+            pointData[p++] = vb.getFloat(vert, 1);
+            pointData[p++] = vb.getFloat(vert, 2);
 
             vert = ib.get(i + 1) * 3;
-            pointData[p++] = vb.get(vert++);
-            pointData[p++] = vb.get(vert++);
-            pointData[p++] = vb.get(vert);
+            pointData[p++] = vb.getFloat(vert, 0);
+            pointData[p++] = vb.getFloat(vert, 1);
+            pointData[p++] = vb.getFloat(vert, 2);
 
             vert = ib.get(i + 2) * 3;
-            pointData[p++] = vb.get(vert++);
-            pointData[p++] = vb.get(vert++);
-            pointData[p++] = vb.get(vert);
+            pointData[p++] = vb.getFloat(vert, 0);
+            pointData[p++] = vb.getFloat(vert, 1);
+            pointData[p++] = vb.getFloat(vert, 2);
         }
 
         triIndices = new int[numTris];
@@ -100,6 +103,14 @@ private void initTriList(FloatBuffer vb, IndexBuffer ib) {
         }
     }
 
+    public BIHTree(VertexReader positions, IndexBuffer indices) {
+        maxTrisPerNode = MAX_TRIS_PER_NODE;
+        bihSwapTmp = new float[9];
+        numTris = indices.size() / 3;
+        initTriList(positions, indices);
+    }
+
+    @Deprecated
     public BIHTree(NewMesh mesh, int maxTrisPerNode) {
         this.mesh = mesh;
         this.maxTrisPerNode = maxTrisPerNode;
@@ -113,21 +124,23 @@ public BIHTree(NewMesh mesh, int maxTrisPerNode) {
 
         bihSwapTmp = new float[9];
 
-        VertexBuffer vBuffer = mesh.getBuffer(Type.Position);
-        if (vBuffer == null) {
-            throw new IllegalArgumentException("A mesh should at least contain a Position buffer");
-        }
-        IndexBuffer ib = mesh.getIndexBuffer();
-        FloatBuffer vb = (FloatBuffer) vBuffer.getData();
+        // Code incompatible with new Mesh interface
 
-        if (ib == null) {
-            ib = new VirtualIndexBuffer(mesh.getVertexCount(), mesh.getMode());
-        } else if (mesh.getMode() != Mode.Triangles) {
-            ib = new WrappedIndexBuffer(mesh);
-        }
+//        VertexBuffer vBuffer = mesh.getBuffer(Type.Position);
+//        if (vBuffer == null) {
+//            throw new IllegalArgumentException("A mesh should at least contain a Position buffer");
+//        }
+//        IndexBuffer ib = mesh.getIndexBuffer();
+//        FloatBuffer vb = (FloatBuffer) vBuffer.getData();
+
+//        if (ib == null) {
+//            ib = new VirtualIndexBuffer(mesh.getVertexCount(), mesh.getMode());
+//        } else if (mesh.getMode() != Mode.Triangles) {
+//            ib = new WrappedIndexBuffer(mesh);
+//        }
 
-        numTris = ib.size() / 3;
-        initTriList(vb, ib);
+        //numTris = ib.size() / 3;
+        //initTriList(vb, ib);
     }
 
     public BIHTree(NewMesh mesh) {
diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index d130885e7b..55cb4ac358 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -553,6 +553,7 @@ public Spatial deepClone() {
         return super.deepClone();
     }
 
+    @Deprecated
     public Spatial oldDeepClone() {
         Geometry geomClone = clone(true);
         geomClone.mesh = mesh.deepClone();
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java
index 5e7e401d33..70a9641f44 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java
@@ -1,5 +1,9 @@
 package com.jme3.vulkan.buffers;
 
+import com.jme3.scene.mesh.IndexBuffer;
+import com.jme3.scene.mesh.IndexByteBuffer;
+import com.jme3.scene.mesh.IndexIntBuffer;
+import com.jme3.scene.mesh.IndexShortBuffer;
 import com.jme3.vulkan.memory.MemorySize;
 import org.lwjgl.PointerBuffer;
 import org.lwjgl.system.MemoryUtil;
@@ -128,6 +132,16 @@ default LongBuffer mapLongs() {
         return mapLongs(0, size().getLongs());
     }
 
+    default IndexBuffer mapIndices() {
+        switch (size().getBytesPerElement()) {
+            case Byte.BYTES: return new IndexByteBuffer(mapBytes());
+            case Short.BYTES: return new IndexShortBuffer(mapShorts());
+            case Integer.BYTES: return new IndexIntBuffer(mapInts());
+            default: throw new UnsupportedOperationException("Cannot map to index buffer with "
+                    + size().getBytesPerElement() + " bytes per element.");
+        }
+    }
+
     default void copy(ByteBuffer buffer) {
         verifyBufferSize(buffer.limit(), Byte.BYTES);
         MemoryUtil.memCopy(buffer, mapBytes(0, buffer.limit()));
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
index ae2e41932b..f31c324a0d 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
@@ -93,9 +93,11 @@ public int collideWith(Collidable other, CollisionResults results) throws Unsupp
     }
 
     private CollisionData createCollisionTree() {
-        BIHTree tree = new BIHTree(this);
-        tree.construct();
-        return tree;
+        try (AttributeModifier positions = modifyAttribute(BuiltInAttribute.Position)) {
+            BIHTree tree = new BIHTree(positions, indexBuffers.get(0).get().mapIndices());
+            tree.construct();
+            return tree;
+        }
     }
 
     protected void updateBound(AttributeModifier attribute) {
@@ -117,10 +119,6 @@ protected void updateBound(AttributeModifier attribute) {
         }
     }
 
-    public VertexReader readAttribute(String attribute) {
-        return modifyAttribute(attribute);
-    }
-
     @SuppressWarnings("resource")
     protected AttributeModifier modifyAttribute(String attribute) {
         VertexAttribute attr = description.getAttribute(attribute);

From c388da84b85db683ee3684f915bde75aec9a5e08 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Sat, 13 Sep 2025 08:35:52 -0400
Subject: [PATCH 68/80] made BoundingVolume accept VertexReaders for
 computeFromPoints

---
 .../java/com/jme3/bounding/BoundingBox.java   |  58 +++----
 .../com/jme3/bounding/BoundingSphere.java     |  78 ++++++---
 .../com/jme3/bounding/BoundingVolume.java     |   4 +
 .../main/java/com/jme3/scene/Geometry.java    |  42 ++---
 .../com/jme3/vulkan/mesh/AdaptiveMesh.java    |   5 +
 .../jme3/vulkan/mesh/AttributeModifier.java   |   7 +-
 .../java/com/jme3/vulkan/mesh/NewMesh.java    |   3 +
 .../com/jme3/vulkan/mesh/VertexModifier.java  |   4 +
 .../com/jme3/vulkan/mesh/VertexReader.java    | 136 +++++++++++++++
 .../com/jme3/vulkan/mesh/VertexWriter.java    | 157 ++++++++++++++++--
 .../jme3/vulkan/util/FloatBufferModifier.java | 127 ++++++++++++++
 11 files changed, 523 insertions(+), 98 deletions(-)
 create mode 100644 jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexModifier.java
 create mode 100644 jme3-core/src/main/java/com/jme3/vulkan/util/FloatBufferModifier.java

diff --git a/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java b/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
index 6b0e023b34..dd879739a6 100644
--- a/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
+++ b/jme3-core/src/main/java/com/jme3/bounding/BoundingBox.java
@@ -43,6 +43,9 @@
 import com.jme3.scene.Mesh;
 import com.jme3.scene.Spatial;
 import com.jme3.util.TempVars;
+import com.jme3.vulkan.mesh.VertexReader;
+import com.jme3.vulkan.util.FloatBufferModifier;
+
 import java.io.IOException;
 import java.nio.FloatBuffer;
 //import com.jme.scene.TriMesh;
@@ -129,6 +132,11 @@ public Type getType() {
      */
     @Override
     public void computeFromPoints(FloatBuffer points) {
+        containAABB(new FloatBufferModifier(points, 3));
+    }
+
+    @Override
+    public void computeFromPoints(VertexReader points) {
         containAABB(points);
     }
 
@@ -236,21 +244,19 @@ public static void checkMinMax(Vector3f min, Vector3f max, Vector3f point) {
      * @param points
      *            the list of points.
      */
-    public void containAABB(FloatBuffer points) {
+    public void containAABB(VertexReader points) {
         if (points == null) {
             return;
         }
 
-        points.rewind();
-        if (points.remaining() <= 2) // we need at least a 3 float vector
+        //points.rewind();
+        if (points.limit() == 0) // we need at least a 3 float vector
         {
             return;
         }
 
         TempVars vars = TempVars.get();
 
-        float[] tmpArray = vars.skinPositions;
-
         float minX = Float.POSITIVE_INFINITY,
                 minY = Float.POSITIVE_INFINITY,
                 minZ = Float.POSITIVE_INFINITY;
@@ -258,37 +264,17 @@ public void containAABB(FloatBuffer points) {
                 maxY = Float.NEGATIVE_INFINITY,
                 maxZ = Float.NEGATIVE_INFINITY;
 
-        int iterations = (int) FastMath.ceil(points.limit() / ((float) tmpArray.length));
-        for (int i = iterations - 1; i >= 0; i--) {
-            int bufLength = Math.min(tmpArray.length, points.remaining());
-            points.get(tmpArray, 0, bufLength);
-
-            for (int j = 0; j < bufLength; j += 3) {
-                vars.vect1.x = tmpArray[j];
-                vars.vect1.y = tmpArray[j + 1];
-                vars.vect1.z = tmpArray[j + 2];
-
-                if (vars.vect1.x < minX) {
-                    minX = vars.vect1.x;
-                }
-                if (vars.vect1.x > maxX) {
-                    maxX = vars.vect1.x;
-                }
-
-                if (vars.vect1.y < minY) {
-                    minY = vars.vect1.y;
-                }
-                if (vars.vect1.y > maxY) {
-                    maxY = vars.vect1.y;
-                }
-
-                if (vars.vect1.z < minZ) {
-                    minZ = vars.vect1.z;
-                }
-                if (vars.vect1.z > maxZ) {
-                    maxZ = vars.vect1.z;
-                }
-            }
+        for (int i = 0, l = points.limit(); i < l; i++) {
+//                vars.vect1.x = tmpArray[j];
+//                vars.vect1.y = tmpArray[j + 1];
+//                vars.vect1.z = tmpArray[j + 2];
+            points.getVector3(i, 0, vars.vect1);
+            minX = Math.min(minX, vars.vect1.x);
+            minY = Math.min(minY, vars.vect1.y);
+            minZ = Math.min(minZ, vars.vect1.z);
+            maxX = Math.max(maxX, vars.vect1.x);
+            maxY = Math.max(maxY, vars.vect1.y);
+            maxZ = Math.max(maxZ, vars.vect1.z);
         }
 
         vars.release();
diff --git a/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java b/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java
index 67cf7263f8..3b8c488413 100644
--- a/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java
+++ b/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java
@@ -41,6 +41,12 @@
 import com.jme3.scene.Spatial;
 import com.jme3.util.BufferUtils;
 import com.jme3.util.TempVars;
+import com.jme3.vulkan.memory.MemorySize;
+import com.jme3.vulkan.mesh.VertexModifier;
+import com.jme3.vulkan.mesh.VertexReader;
+import com.jme3.vulkan.util.FloatBufferModifier;
+import org.lwjgl.system.MemoryStack;
+
 import java.io.IOException;
 import java.nio.FloatBuffer;
 import java.util.Objects;
@@ -120,6 +126,11 @@ public void setRadius(float radius) {
      */
     @Override
     public void computeFromPoints(FloatBuffer points) {
+        calcWelzl(new FloatBufferModifier(points, 3));
+    }
+
+    @Override
+    public void computeFromPoints(VertexReader points) {
         calcWelzl(points);
     }
 
@@ -184,15 +195,17 @@ public void computeFromTris(Triangle[] tris, int start, int end) {
      * @param points
      *            The points to calculate the minimum bounds from.
      */
-    public void calcWelzl(FloatBuffer points) {
+    public void calcWelzl(VertexReader points) {
         if (center == null) {
             center = new Vector3f();
         }
-        FloatBuffer buf = BufferUtils.createFloatBuffer(points.limit());
-        points.rewind();
-        buf.put(points);
-        buf.flip();
-        recurseMini(buf, buf.limit() / 3, 0, 0);
+        assert points.components() == 3;
+        try (MemoryStack stack = MemoryStack.stackPush()) {
+            FloatBuffer buf = stack.mallocFloat(points.limit() * 3);
+            points.getFloats(0, 0, buf);
+            FloatBufferModifier bufMod = new FloatBufferModifier(buf, 3);
+            recurseMini(bufMod, bufMod.limit(), 0, 0);
+        }
     }
 
     /**
@@ -210,7 +223,7 @@ public void calcWelzl(FloatBuffer points) {
      *            A variable simulating pointer arithmetic from C++, and offset
      *            in points.
      */
-    private void recurseMini(FloatBuffer points, int p, int b, int ap) {
+    private void recurseMini(VertexModifier points, int p, int b, int ap) {
         //TempVars vars = TempVars.get();
 
         Vector3f tempA = new Vector3f(); //vars.vect1;
@@ -225,36 +238,51 @@ private void recurseMini(FloatBuffer points, int p, int b, int ap) {
                 break;
             case 1:
                 this.radius = 1f - RADIUS_EPSILON;
-                BufferUtils.populateFromBuffer(center, points, ap - 1);
+                //BufferUtils.populateFromBuffer(center, points, ap - 1);
+                points.getVector3(ap - 1, 0, center);
                 break;
             case 2:
-                BufferUtils.populateFromBuffer(tempA, points, ap - 1);
-                BufferUtils.populateFromBuffer(tempB, points, ap - 2);
+                //BufferUtils.populateFromBuffer(tempA, points, ap - 1);
+                //BufferUtils.populateFromBuffer(tempB, points, ap - 2);
+                points.getVector3(ap - 1, 0, tempA);
+                points.getVector3(ap - 2, 0, tempB);
                 setSphere(tempA, tempB);
                 break;
             case 3:
-                BufferUtils.populateFromBuffer(tempA, points, ap - 1);
-                BufferUtils.populateFromBuffer(tempB, points, ap - 2);
-                BufferUtils.populateFromBuffer(tempC, points, ap - 3);
+//                BufferUtils.populateFromBuffer(tempA, points, ap - 1);
+//                BufferUtils.populateFromBuffer(tempB, points, ap - 2);
+//                BufferUtils.populateFromBuffer(tempC, points, ap - 3);
+                points.getVector3(ap - 1, 0, tempA);
+                points.getVector3(ap - 2, 0, tempB);
+                points.getVector3(ap - 3, 0, tempC);
                 setSphere(tempA, tempB, tempC);
                 break;
             case 4:
-                BufferUtils.populateFromBuffer(tempA, points, ap - 1);
-                BufferUtils.populateFromBuffer(tempB, points, ap - 2);
-                BufferUtils.populateFromBuffer(tempC, points, ap - 3);
-                BufferUtils.populateFromBuffer(tempD, points, ap - 4);
+//                BufferUtils.populateFromBuffer(tempA, points, ap - 1);
+//                BufferUtils.populateFromBuffer(tempB, points, ap - 2);
+//                BufferUtils.populateFromBuffer(tempC, points, ap - 3);
+//                BufferUtils.populateFromBuffer(tempD, points, ap - 4);
+                points.getVector3(ap - 1, 0, tempA);
+                points.getVector3(ap - 2, 0, tempB);
+                points.getVector3(ap - 3, 0, tempC);
+                points.getVector3(ap - 4, 0, tempD);
                 setSphere(tempA, tempB, tempC, tempD);
                 //vars.release();
                 return;
         }
         for (int i = 0; i < p; i++) {
-            BufferUtils.populateFromBuffer(tempA, points, i + ap);
+            //BufferUtils.populateFromBuffer(tempA, points, i + ap);
+            points.getVector3(i + ap, 0, tempA);
             if (tempA.distanceSquared(center) - (radius * radius) > RADIUS_EPSILON - 1f) {
                 for (int j = i; j > 0; j--) {
-                    BufferUtils.populateFromBuffer(tempB, points, j + ap);
-                    BufferUtils.populateFromBuffer(tempC, points, j - 1 + ap);
-                    BufferUtils.setInBuffer(tempC, points, j + ap);
-                    BufferUtils.setInBuffer(tempB, points, j - 1 + ap);
+//                    BufferUtils.populateFromBuffer(tempB, points, j + ap);
+//                    BufferUtils.populateFromBuffer(tempC, points, j - 1 + ap);
+                    points.getVector3(j + ap, 0, tempB);
+                    points.getVector3(j - 1 + ap, 0, tempC);
+//                    BufferUtils.setInBuffer(tempC, points, j + ap);
+//                    BufferUtils.setInBuffer(tempB, points, j - 1 + ap);
+                    points.putVector3(j + ap, 0, tempC);
+                    points.putVector3(j - 1 + ap, 0, tempB);
                 }
                 recurseMini(points, i, b + 1, ap + 1);
             }
@@ -274,7 +302,7 @@ private void recurseMini(FloatBuffer points, int p, int b, int ap) {
      *            The 3rd point inside the sphere.
      * @param C
      *            The 4th point inside the sphere.
-     * @see #calcWelzl(java.nio.FloatBuffer)
+     * @see #calcWelzl(VertexReader) 
      */
     private void setSphere(Vector3f O, Vector3f A, Vector3f B, Vector3f C) {
         Vector3f a = A.subtract(O);
@@ -307,7 +335,7 @@ private void setSphere(Vector3f O, Vector3f A, Vector3f B, Vector3f C) {
      *            The 2nd point inside the sphere.
      * @param B
      *            The 3rd point inside the sphere.
-     * @see #calcWelzl(java.nio.FloatBuffer)
+     * @see #calcWelzl(VertexReader) 
      */
     private void setSphere(Vector3f O, Vector3f A, Vector3f B) {
         Vector3f a = A.subtract(O);
@@ -335,7 +363,7 @@ private void setSphere(Vector3f O, Vector3f A, Vector3f B) {
      *            The 1st point inside the sphere.
      * @param A
      *            The 2nd point inside the sphere.
-     * @see #calcWelzl(java.nio.FloatBuffer)
+     * @see #calcWelzl(VertexReader) 
      */
     private void setSphere(Vector3f O, Vector3f A) {
         radius = FastMath.sqrt(((A.x - O.x) * (A.x - O.x) + (A.y - O.y)
diff --git a/jme3-core/src/main/java/com/jme3/bounding/BoundingVolume.java b/jme3-core/src/main/java/com/jme3/bounding/BoundingVolume.java
index 3a80764910..7992866a8c 100644
--- a/jme3-core/src/main/java/com/jme3/bounding/BoundingVolume.java
+++ b/jme3-core/src/main/java/com/jme3/bounding/BoundingVolume.java
@@ -38,6 +38,8 @@
 import com.jme3.export.Savable;
 import com.jme3.math.*;
 import com.jme3.util.TempVars;
+import com.jme3.vulkan.mesh.VertexReader;
+
 import java.io.IOException;
 import java.nio.FloatBuffer;
 import java.util.Objects;
@@ -149,6 +151,8 @@ public final BoundingVolume transform(Transform trans) {
      */
     public abstract void computeFromPoints(FloatBuffer points);
 
+    public abstract void computeFromPoints(VertexReader points);
+
     /**
      * merge combines two bounding volumes into a single bounding
      * volume that contains both this bounding volume and the parameter volume.
diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index 55cb4ac358..a67b2ae1c8 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -603,18 +603,20 @@ public void cloneFields(Cloner cloner, Object original) {
         this.material = cloner.clone(material);
     }
 
-    public void setMorphState(float[] state) {
-        if (mesh == null || mesh.getMorphTargets().length == 0) {
-            return;
-        }
+    // todo: fix morph animations
 
-        int nbMorphTargets = mesh.getMorphTargets().length;
-
-        if (morphState == null) {
-            morphState = new float[nbMorphTargets];
-        }
-        System.arraycopy(state, 0, morphState, 0, morphState.length);
-        this.dirtyMorph = true;
+    public void setMorphState(float[] state) {
+//        if (mesh == null || mesh.getMorphTargets().length == 0) {
+//            return;
+//        }
+//
+//        int nbMorphTargets = mesh.getMorphTargets().length;
+//
+//        if (morphState == null) {
+//            morphState = new float[nbMorphTargets];
+//        }
+//        System.arraycopy(state, 0, morphState, 0, morphState.length);
+//        this.dirtyMorph = true;
     }
 
     /**
@@ -626,11 +628,11 @@ public void setMorphState(float[] state) {
      * @param state The state to set the morph to
      */
     public void setMorphState(String morphTarget, float state) {
-        int index = mesh.getMorphIndex(morphTarget);
-        if (index >= 0) {
-            morphState[index] = state;
-            this.dirtyMorph = true;
-        }
+//        int index = mesh.getMorphIndex(morphTarget);
+//        if (index >= 0) {
+//            morphState[index] = state;
+//            this.dirtyMorph = true;
+//        }
     }
 
     /**
@@ -659,10 +661,10 @@ public void setDirtyMorph(boolean dirtyMorph) {
      * @return an array
      */
     public float[] getMorphState() {
-        if (morphState == null) {
-            morphState = new float[mesh.getMorphTargets().length];
-        }
-        return morphState;
+//        if (morphState == null) {
+//            morphState = new float[mesh.getMorphTargets().length];
+//        }
+//        return morphState;
     }
 
     /**
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
index f31c324a0d..9c642a5df0 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
@@ -92,6 +92,11 @@ public int collideWith(Collidable other, CollisionResults results) throws Unsupp
         return 0;
     }
 
+    @Override
+    public BoundingVolume getBound() {
+        return volume;
+    }
+
     private CollisionData createCollisionTree() {
         try (AttributeModifier positions = modifyAttribute(BuiltInAttribute.Position)) {
             BIHTree tree = new BIHTree(positions, indexBuffers.get(0).get().mapIndices());
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java
index 3e02f39719..efe80e8005 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java
@@ -4,7 +4,7 @@
 
 import java.nio.*;
 
-public class AttributeModifier implements AutoCloseable, VertexWriter, VertexReader {
+public class AttributeModifier implements AutoCloseable, VertexModifier {
     
     private final VertexBuffer vertex;
     private final VertexAttribute attribute;
@@ -43,6 +43,11 @@ public int limit() {
         return positionToVertex(buffer.limit());
     }
 
+    @Override
+    public int components() {
+        return attribute.getFormat().getNumComponents();
+    }
+
     @Override
     public AttributeModifier limit(int vertex) {
         buffer.limit(vertexToPosition(vertex));
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
index 9589e5cb80..2d30a7ac54 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
@@ -1,5 +1,6 @@
 package com.jme3.vulkan.mesh;
 
+import com.jme3.bounding.BoundingVolume;
 import com.jme3.collision.Collidable;
 import com.jme3.collision.CollisionResults;
 import com.jme3.scene.Geometry;
@@ -17,4 +18,6 @@ public interface NewMesh extends Collidable {
 
     int collideWith(Collidable other, Geometry geometry, CollisionResults results);
 
+    BoundingVolume getBound();
+
 }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexModifier.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexModifier.java
new file mode 100644
index 0000000000..737e820b99
--- /dev/null
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexModifier.java
@@ -0,0 +1,4 @@
+package com.jme3.vulkan.mesh;
+
+public interface VertexModifier extends VertexReader, VertexWriter {
+}
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexReader.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexReader.java
index 5688959e1d..98bb513efd 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexReader.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexReader.java
@@ -5,12 +5,16 @@
 import com.jme3.math.Vector3f;
 import com.jme3.math.Vector4f;
 
+import java.nio.*;
+
 public interface VertexReader {
 
     int capacity();
 
     int limit();
 
+    int components();
+
     byte getByte(int vertex, int component);
 
     short getShort(int vertex, int component);
@@ -64,4 +68,136 @@ default ColorRGBA getColor(int vertex, int baseComponent, ColorRGBA store) {
                 getFloat(vertex, baseComponent  ));
     }
 
+    default byte[] getBytes(int baseVertex, int baseComponent, byte[] store) {
+        for (int i = 0; i < store.length; i++) {
+            store[i] = getByte(baseVertex, baseComponent);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default ByteBuffer getBytes(int baseVertex, int baseComponent, ByteBuffer store) {
+        for (int i = 0; i < store.limit(); i++) {
+            store.put(i, getByte(baseVertex, baseComponent));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default short[] getShorts(int baseVertex, int baseComponent, short[] store) {
+        for (int i = 0; i < store.length; i++) {
+            store[i] = getShort(baseVertex, baseComponent);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default ShortBuffer getShorts(int baseVertex, int baseComponent, ShortBuffer store) {
+        for (int i = 0; i < store.limit(); i++) {
+            store.put(i, getShort(baseVertex, baseComponent));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default int[] getInts(int baseVertex, int baseComponent, int[] store) {
+        for (int i = 0; i < store.length; i++) {
+            store[i] = getInt(baseVertex, baseComponent);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default IntBuffer getInts(int baseVertex, int baseComponent, IntBuffer store) {
+        for (int i = 0; i < store.limit(); i++) {
+            store.put(i, getInt(baseVertex, baseComponent));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default float[] getFloats(int baseVertex, int baseComponent, float[] store) {
+        for (int i = 0; i < store.length; i++) {
+            store[i] = getFloat(baseVertex, baseComponent);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default FloatBuffer getFloats(int baseVertex, int baseComponent, FloatBuffer store) {
+        for (int i = 0; i < store.limit(); i++) {
+            store.put(i, getFloat(baseVertex, baseComponent));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default double[] getDoubles(int baseVertex, int baseComponent, double[] store) {
+        for (int i = 0; i < store.length; i++) {
+            store[i] = getDouble(baseVertex, baseComponent);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default DoubleBuffer getDoubles(int baseVertex, int baseComponent, DoubleBuffer store) {
+        for (int i = 0; i < store.limit(); i++) {
+            store.put(i, getDouble(baseVertex, baseComponent));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default long[] getLongs(int baseVertex, int baseComponent, long[] store) {
+        for (int i = 0; i < store.length; i++) {
+            store[i] = getLong(baseVertex, baseComponent);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
+    default LongBuffer getLongs(int baseVertex, int baseComponent, LongBuffer store) {
+        for (int i = 0; i < store.limit(); i++) {
+            store.put(i, getLong(baseVertex, baseComponent));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return store;
+    }
+
 }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java
index aa79c3eca9..d78de8b933 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java
@@ -13,6 +13,8 @@ public interface VertexWriter {
 
     int limit();
 
+    int components();
+
     VertexWriter limit(int vertex);
 
     VertexWriter putByte(int vertex, int component, byte value);
@@ -27,11 +29,26 @@ public interface VertexWriter {
 
     VertexWriter putLong(int vertex, int component, long value);
 
-    VertexWriter putVector2(int vertex, int baseComponent, float x, float y);
+    default VertexWriter putVector2(int vertex, int baseComponent, float x, float y) {
+        putFloat(vertex, baseComponent++, x);
+        putFloat(vertex, baseComponent  , y);
+        return this;
+    }
 
-    VertexWriter putVector3(int vertex, int baseComponent, float x, float y, float z);
+    default VertexWriter putVector3(int vertex, int baseComponent, float x, float y, float z) {
+        putFloat(vertex, baseComponent++, x);
+        putFloat(vertex, baseComponent++, y);
+        putFloat(vertex, baseComponent  , z);
+        return this;
+    }
 
-    VertexWriter putVector4(int vertex, int baseComponent, float x, float y, float z, float w);
+    default VertexWriter putVector4(int vertex, int baseComponent, float x, float y, float z, float w) {
+        putFloat(vertex, baseComponent++, x);
+        putFloat(vertex, baseComponent++, y);
+        putFloat(vertex, baseComponent++, z);
+        putFloat(vertex, baseComponent  , w);
+        return this;
+    }
 
     default VertexWriter putVector2(int vertex, int baseComponent, Vector2f value) {
         return putVector2(vertex, baseComponent, value.x, value.y);
@@ -48,29 +65,137 @@ default VertexWriter putVector4(int vertex, int baseComponent, Vector4f value) {
     default VertexWriter putColor(int vertex, int baseComponent, ColorRGBA value) {
         return putVector4(vertex, baseComponent, value.r, value.g, value.b, value.a);
     }
+    
+    default VertexWriter putBytes(int baseVertex, int baseComponent, byte... values) {
+        for (byte v : values) {
+            putByte(baseVertex, baseComponent, v);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putBytes(int baseVertex, int baseComponent, byte... values);
-
-    VertexWriter putBytes(int baseVertex, int baseComponent, ByteBuffer values);
+    default VertexWriter putBytes(int baseVertex, int baseComponent, ByteBuffer values) {
+        for (int i = 0; i < values.limit(); i++) {
+            putByte(baseVertex, baseComponent, values.get(i));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putShorts(int baseVertex, int baseComponent, short... values);
+    default VertexWriter putShorts(int baseVertex, int baseComponent, short... values) {
+        for (short v : values) {
+            putShort(baseVertex, baseComponent, v);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putShorts(int baseVertex, int baseComponent, ShortBuffer values);
+    default VertexWriter putShorts(int baseVertex, int baseComponent, ShortBuffer values) {
+        for (int i = 0; i < values.limit(); i++) {
+            putShort(baseVertex, baseComponent, values.get(i));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putInts(int baseVertex, int baseComponent, int... values);
+    default VertexWriter putInts(int baseVertex, int baseComponent, int... values) {
+        for (int v : values) {
+            putInt(baseVertex, baseComponent, v);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putInts(int baseVertex, int baseComponent, IntBuffer values);
+    default VertexWriter putInts(int baseVertex, int baseComponent, IntBuffer values) {
+        for (int i = 0; i < values.limit(); i++) {
+            putInt(baseVertex, baseComponent, values.get(i));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putFloats(int baseVertex, int baseComponent, float... values);
+    default VertexWriter putFloats(int baseVertex, int baseComponent, float... values) {
+        for (float v : values) {
+            putFloat(baseVertex, baseComponent, v);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putFloats(int baseVertex, int baseComponent, FloatBuffer values);
+    default VertexWriter putFloats(int baseVertex, int baseComponent, FloatBuffer values) {
+        for (int i = 0; i < values.limit(); i++) {
+            putFloat(baseVertex, baseComponent, values.get(i));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putDoubles(int baseVertex, int baseComponent, double... values);
+    default VertexWriter putDoubles(int baseVertex, int baseComponent, double... values) {
+        for (double v : values) {
+            putDouble(baseVertex, baseComponent, v);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putDoubles(int baseVertex, int baseComponent, DoubleBuffer values);
+    default VertexWriter putDoubles(int baseVertex, int baseComponent, DoubleBuffer values) {
+        for (int i = 0; i < values.limit(); i++) {
+            putDouble(baseVertex, baseComponent, values.get(i));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putLongs(int baseVertex, int baseComponent, long... values);
+    default VertexWriter putLongs(int baseVertex, int baseComponent, long... values) {
+        for (long v : values) {
+            putLong(baseVertex, baseComponent, v);
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
 
-    VertexWriter putLongs(int baseVertex, int baseComponent, LongBuffer values);
+    default VertexWriter putLongs(int baseVertex, int baseComponent, LongBuffer values) {
+        for (int i = 0; i < values.limit(); i++) {
+            putLong(baseVertex, baseComponent, values.get(i));
+            if (++baseComponent >= components()) {
+                baseComponent = 0;
+                baseVertex++;
+            }
+        }
+        return this;
+    }
     
 }
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/util/FloatBufferModifier.java b/jme3-core/src/main/java/com/jme3/vulkan/util/FloatBufferModifier.java
new file mode 100644
index 0000000000..c43e60c601
--- /dev/null
+++ b/jme3-core/src/main/java/com/jme3/vulkan/util/FloatBufferModifier.java
@@ -0,0 +1,127 @@
+package com.jme3.vulkan.util;
+
+import com.jme3.vulkan.mesh.VertexModifier;
+import com.jme3.vulkan.mesh.VertexWriter;
+
+import java.nio.FloatBuffer;
+
+public class FloatBufferModifier implements VertexModifier {
+
+    private final FloatBuffer buffer;
+    private final int components;
+
+    public FloatBufferModifier(FloatBuffer buffer, int components) {
+        this.buffer = buffer;
+        this.components = components;
+    }
+
+    public int vertexToPosition(int vertex, int component) {
+        return vertex * components + component;
+    }
+
+    @Override
+    public int capacity() {
+        return buffer.capacity() / components;
+    }
+
+    @Override
+    public int limit() {
+        return buffer.limit() / components;
+    }
+
+    @Override
+    public int components() {
+        return components;
+    }
+
+    @Override
+    public VertexWriter limit(int vertex) {
+        buffer.limit(vertexToPosition(vertex, 0));
+        return this;
+    }
+
+    @Override
+    public VertexWriter putByte(int vertex, int component, byte value) {
+        buffer.put(vertexToPosition(vertex, component), value);
+        return this;
+    }
+
+    @Override
+    public VertexWriter putShort(int vertex, int component, short value) {
+        buffer.put(vertexToPosition(vertex, component), value);
+        return this;
+    }
+
+    @Override
+    public VertexWriter putInt(int vertex, int component, int value) {
+        buffer.put(vertexToPosition(vertex, component), value);
+        return this;
+    }
+
+    @Override
+    public VertexWriter putFloat(int vertex, int component, float value) {
+        buffer.put(vertexToPosition(vertex, component), value);
+        return this;
+    }
+
+    @Override
+    public VertexWriter putDouble(int vertex, int component, double value) {
+        buffer.put(vertexToPosition(vertex, component), (float)value);
+        return this;
+    }
+
+    @Override
+    public VertexWriter putLong(int vertex, int component, long value) {
+        buffer.put(vertexToPosition(vertex, component), value);
+        return this;
+    }
+
+    @Override
+    public VertexWriter putFloats(int baseVertex, int baseComponent, float... values) {
+        int p = buffer.position();
+        buffer.position(vertexToPosition(baseVertex, baseComponent));
+        buffer.put(values);
+        buffer.position(p);
+        return this;
+    }
+
+    @Override
+    public VertexWriter putFloats(int baseVertex, int baseComponent, FloatBuffer values) {
+        int p = buffer.position();
+        buffer.position(vertexToPosition(baseVertex, baseComponent));
+        buffer.put(values);
+        buffer.position(p);
+        return this;
+    }
+
+    @Override
+    public byte getByte(int vertex, int component) {
+        return (byte)buffer.get(vertexToPosition(vertex, component));
+    }
+
+    @Override
+    public short getShort(int vertex, int component) {
+        return (short)buffer.get(vertexToPosition(vertex, component));
+    }
+
+    @Override
+    public int getInt(int vertex, int component) {
+        return (int)buffer.get(vertexToPosition(vertex, component));
+    }
+
+    @Override
+    public float getFloat(int vertex, int component) {
+        return buffer.get(vertexToPosition(vertex, component));
+    }
+
+    @Override
+    public double getDouble(int vertex, int component) {
+        return buffer.get(vertexToPosition(vertex, component));
+    }
+
+    @Override
+    public long getLong(int vertex, int component) {
+        return (long)buffer.get(vertexToPosition(vertex, component));
+    }
+
+}

From e871c0547d24b73d17decc9e6469e0b60ed19fe4 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Sat, 13 Sep 2025 09:50:34 -0400
Subject: [PATCH 69/80] Geometry accepts NewMesh without errors

---
 .../main/java/com/jme3/scene/Geometry.java    | 30 ++++---
 .../src/main/java/com/jme3/scene/Mesh.java    | 22 ++---
 .../com/jme3/vulkan/mesh/AdaptiveMesh.java    | 82 +++++++++++--------
 .../com/jme3/vulkan/mesh/MyCustomMesh.java    |  6 ++
 .../java/com/jme3/vulkan/mesh/NewMesh.java    | 15 +++-
 5 files changed, 96 insertions(+), 59 deletions(-)

diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index a67b2ae1c8..444f1aa709 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -556,8 +556,10 @@ public Spatial deepClone() {
     @Deprecated
     public Spatial oldDeepClone() {
         Geometry geomClone = clone(true);
-        geomClone.mesh = mesh.deepClone();
-        return geomClone;
+        // fixme
+        //geomClone.mesh = mesh.deepClone();
+        //return geomClone;
+        throw new UnsupportedOperationException("Mesh deep clone not yet supported.");
     }
 
     /**
@@ -592,9 +594,11 @@ public void cloneFields(Cloner cloner, Object original) {
 
         // See if we clone the mesh using the special animation
         // semi-deep cloning
-        if (shallowClone && mesh != null && mesh.getBuffer(Type.BindPosePosition) != null) {
+        // fixme
+        if (shallowClone && mesh != null && false /*mesh.getBuffer(Type.BindPosePosition) != null*/) {
             // Then we need to clone the mesh a little deeper
-            this.mesh = mesh.cloneForAnim();
+            //this.mesh = mesh.cloneForAnim();
+            throw new UnsupportedOperationException("Animation cloning not yet supported.");
         } else {
             // Do whatever the cloner wants to do about it
             this.mesh = cloner.clone(mesh);
@@ -661,10 +665,12 @@ public void setDirtyMorph(boolean dirtyMorph) {
      * @return an array
      */
     public float[] getMorphState() {
-//        if (morphState == null) {
-//            morphState = new float[mesh.getMorphTargets().length];
-//        }
-//        return morphState;
+        // fixme
+        if (morphState == null) {
+            //morphState = new float[mesh.getMorphTargets().length];
+            morphState = new float[0];
+        }
+        return morphState;
     }
 
     /**
@@ -674,7 +680,9 @@ public float[] getMorphState() {
      * @return the state of the morph, or -1 if the morph is not found
      */
     public float getMorphState(String morphTarget) {
-        int index = mesh.getMorphIndex(morphTarget);
+        // fixme
+        //int index = mesh.getMorphIndex(morphTarget);
+        int index = -1;
         if (index < 0) {
             return -1;
         } else {
@@ -763,8 +771,10 @@ public void read(JmeImporter im) throws IOException {
             // Fix shared mesh (if set)
             Mesh sharedMesh = getUserData(UserData.JME_SHAREDMESH);
             if (sharedMesh != null) {
-                getMesh().extractVertexData(sharedMesh);
+                // fixme
+                //getMesh().extractVertexData(sharedMesh);
                 setUserData(UserData.JME_SHAREDMESH, null);
+                throw new UnsupportedOperationException("Shared meshes not yet supported.");
             }
         }
     }
diff --git a/jme3-core/src/main/java/com/jme3/scene/Mesh.java b/jme3-core/src/main/java/com/jme3/scene/Mesh.java
index 3f409511a3..5142111d6f 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Mesh.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Mesh.java
@@ -67,7 +67,8 @@
  *
  * @author Kirill Vainer
  */
-public class Mesh implements NewMesh, Savable, Cloneable, JmeCloneable {
+@Deprecated
+public class Mesh implements Savable, Cloneable, JmeCloneable {
 
     /**
      * The mode of the Mesh specifies both the type of primitive represented
@@ -881,21 +882,10 @@ public int getTriangleCount(int lod) {
      *
      * @return how many triangles/elements are on this Mesh.
      */
-    @Override
     public int getTriangleCount() {
         return elementCount;
     }
 
-    @Override
-    public void bind(CommandBuffer cmd) {
-
-    }
-
-    @Override
-    public void draw(CommandBuffer cmd) {
-
-    }
-
     /**
      * Returns the number of vertices on this mesh.
      * The value is computed based on the position buffer, which
@@ -903,7 +893,6 @@ public void draw(CommandBuffer cmd) {
      *
      * @return Number of vertices on the mesh
      */
-    @Override
     public int getVertexCount() {
         return vertCount;
     }
@@ -1016,9 +1005,10 @@ public void setId(int id) {
      * com.jme3.collision.CollisionResults) }.
      */
     public void createCollisionData() {
-        BIHTree tree = new BIHTree(this);
-        tree.construct();
-        collisionTree = tree;
+        throw new UnsupportedOperationException("Collision tree not supported.");
+//        BIHTree tree = new BIHTree(this);
+//        tree.construct();
+//        collisionTree = tree;
     }
 
     /**
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
index 9c642a5df0..41fe5d19c0 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
@@ -1,11 +1,16 @@
 package com.jme3.vulkan.mesh;
 
+import com.jme3.bounding.BoundingBox;
 import com.jme3.bounding.BoundingVolume;
 import com.jme3.collision.Collidable;
 import com.jme3.collision.CollisionResults;
 import com.jme3.collision.UnsupportedCollisionException;
 import com.jme3.collision.bih.BIHTree;
-import com.jme3.math.Vector3f;
+import com.jme3.export.InputCapsule;
+import com.jme3.export.JmeExporter;
+import com.jme3.export.JmeImporter;
+import com.jme3.export.OutputCapsule;
+import com.jme3.math.Matrix4f;
 import com.jme3.scene.CollisionData;
 import com.jme3.scene.Geometry;
 import com.jme3.vulkan.buffers.*;
@@ -14,6 +19,7 @@
 import com.jme3.vulkan.memory.MemorySize;
 import org.lwjgl.system.MemoryStack;
 
+import java.io.IOException;
 import java.nio.LongBuffer;
 import java.util.*;
 
@@ -31,7 +37,7 @@ protected enum VertexMode {
     private final List vertexBuffers = new ArrayList<>();
     protected final List> indexBuffers = new ArrayList<>();
     private GpuBuffer boundIndexBuffer;
-    private BoundingVolume volume;
+    protected BoundingVolume volume;
     private int vertices;
     private CollisionData collisionTree;
 
@@ -88,44 +94,38 @@ public int collideWith(Collidable other, Geometry geometry, CollisionResults res
     }
 
     @Override
-    public int collideWith(Collidable other, CollisionResults results) throws UnsupportedCollisionException {
-        return 0;
+    public int collideWith(Collidable other, CollisionResults results) {
+        if (collisionTree == null) {
+            collisionTree = createCollisionTree();
+        }
+        return collisionTree.collideWith(other, Matrix4f.IDENTITY, volume, results);
     }
 
     @Override
-    public BoundingVolume getBound() {
-        return volume;
+    public void updateBound() {
+        try (AttributeModifier position = modifyPosition()) {
+            volume.computeFromPoints(position);
+        }
     }
 
-    private CollisionData createCollisionTree() {
-        try (AttributeModifier positions = modifyAttribute(BuiltInAttribute.Position)) {
-            BIHTree tree = new BIHTree(positions, indexBuffers.get(0).get().mapIndices());
-            tree.construct();
-            return tree;
-        }
+    @Override
+    public void setBound(BoundingVolume volume) {
+        this.volume = volume;
     }
 
-    protected void updateBound(AttributeModifier attribute) {
-        Vector3f pos = new Vector3f();
-        Vector3f min = new Vector3f();
-        Vector3f max = new Vector3f();
-        for (int i = 0; i < vertices; i++) {
-            pos = attribute.getVector3(i, 0, pos);
-            if (i == 0) {
-                min.set(max.set(pos));
-            } else {
-                min.x = Math.min(min.x, pos.x);
-                min.y = Math.min(min.y, pos.y);
-                min.z = Math.min(min.z, pos.z);
-                max.x = Math.max(max.x, pos.x);
-                max.y = Math.max(max.y, pos.y);
-                max.z = Math.max(max.z, pos.z);
-            }
-        }
+    @Override
+    public BoundingVolume getBound() {
+        return volume;
     }
 
+    @Override
+    public int getNumLodLevels() {
+        return indexBuffers.size();
+    }
+
+    @Override
     @SuppressWarnings("resource")
-    protected AttributeModifier modifyAttribute(String attribute) {
+    public AttributeModifier modifyAttribute(String attribute) {
         VertexAttribute attr = description.getAttribute(attribute);
         if (attr != null) {
             return new AttributeModifier(vertexBuffers.get(attr.getBinding().getBindingIndex()), attr).map();
@@ -134,10 +134,28 @@ protected AttributeModifier modifyAttribute(String attribute) {
         }
     }
 
-    protected AttributeModifier modifyAttribute(BuiltInAttribute name) {
-        return modifyAttribute(name.getName());
+    @Override
+    public void write(JmeExporter ex) throws IOException {
+        OutputCapsule out = ex.getCapsule(this);
+        throw new UnsupportedOperationException("Exporting not yet supported.");
+    }
+
+    @Override
+    public void read(JmeImporter im) throws IOException {
+        InputCapsule in = im.getCapsule(this);
+        throw new UnsupportedOperationException("Importing not yet supported.");
+    }
+
+    private CollisionData createCollisionTree() {
+        try (AttributeModifier positions = modifyPosition()) {
+            BIHTree tree = new BIHTree(positions, indexBuffers.get(0).get().mapIndices());
+            tree.construct();
+            return tree;
+        }
     }
 
+    protected abstract AttributeModifier modifyPosition();
+
     protected abstract VersionedResource createStreamingBuffer(MemorySize size);
 
     protected abstract VersionedResource createDynamicBuffer(MemorySize size);
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
index 8d12bf3843..64b1243cd3 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
@@ -60,6 +60,12 @@ public MyCustomMesh(LogicalDevice device,
             texCoord.putVector2(2, 0, 1f, 1f);
             texCoord.putVector2(3, 0, 0f, 1f);
         }
+        updateBound();
+    }
+
+    @Override
+    protected AttributeModifier modifyPosition() {
+        return modifyAttribute(BuiltInAttribute.Position);
     }
 
     @Override
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
index 2d30a7ac54..49e599c700 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java
@@ -3,21 +3,34 @@
 import com.jme3.bounding.BoundingVolume;
 import com.jme3.collision.Collidable;
 import com.jme3.collision.CollisionResults;
+import com.jme3.export.Savable;
 import com.jme3.scene.Geometry;
 import com.jme3.vulkan.commands.CommandBuffer;
 
-public interface NewMesh extends Collidable {
+public interface NewMesh extends Collidable, Savable {
 
     void bind(CommandBuffer cmd);
 
     void draw(CommandBuffer cmd);
 
+    AttributeModifier modifyAttribute(String name);
+
     int getVertexCount();
 
     int getTriangleCount();
 
     int collideWith(Collidable other, Geometry geometry, CollisionResults results);
 
+    void updateBound();
+
+    void setBound(BoundingVolume volume);
+
     BoundingVolume getBound();
 
+    int getNumLodLevels();
+
+    default AttributeModifier modifyAttribute(BuiltInAttribute name) {
+        return modifyAttribute(name.getName());
+    }
+
 }

From bc4ce975a79bd4b2b3a79e3fb78f8928743e1a3a Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Sat, 13 Sep 2025 09:51:20 -0400
Subject: [PATCH 70/80] Geometry accepts NewMesh without errors

---
 jme3-core/src/main/java/com/jme3/scene/Geometry.java | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index 444f1aa709..7ab767504d 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -145,7 +145,7 @@ public Geometry(String name, NewMesh mesh) {
      * @param mesh The mesh data for this geometry
      * @param material The material for this geometry
      */
-    public Geometry(String name, Mesh mesh, Material material) {
+    public Geometry(String name, NewMesh mesh, Material material) {
         this(name, mesh);
         setMaterial(material);
     }
@@ -240,7 +240,7 @@ public int getTriangleCount() {
      *
      * @throws IllegalArgumentException If mesh is null
      */
-    public void setMesh(Mesh mesh) {
+    public void setMesh(NewMesh mesh) {
         if (mesh == null) {
             throw new IllegalArgumentException();
         }
@@ -258,7 +258,7 @@ public void setMesh(Mesh mesh) {
      *
      * @return the mesh to use for this geometry
      *
-     * @see #setMesh(Mesh)
+     * @see #setMesh(NewMesh)
      */
     public NewMesh getMesh() {
         return mesh;
@@ -744,7 +744,7 @@ public void write(JmeExporter ex) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         InputCapsule ic = im.getCapsule(this);
-        mesh = (Mesh) ic.readSavable("mesh", null);
+        mesh = (NewMesh) ic.readSavable("mesh", null);
 
         material = null;
         String matName = ic.readString("materialName", null);

From d2e37e58314244c68f73414469440ab83786cfd8 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Sat, 13 Sep 2025 09:58:39 -0400
Subject: [PATCH 71/80] renamed vulkan material to NewMaterial

---
 .../jme3/vulkan/material/{Material.java => NewMaterial.java}  | 4 ++--
 .../src/main/java/com/jme3/vulkan/material/TestMaterial.java  | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)
 rename jme3-core/src/main/java/com/jme3/vulkan/material/{Material.java => NewMaterial.java} (97%)

diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/Material.java b/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java
similarity index 97%
rename from jme3-core/src/main/java/com/jme3/vulkan/material/Material.java
rename to jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java
index a1a68a9962..013ac895ed 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/material/Material.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java
@@ -15,13 +15,13 @@
 /**
  * Relates shader uniform values to sets and bindings.
  */
-public class Material {
+public class NewMaterial {
 
     private final DescriptorPool pool;
     private final List uniformSets = new ArrayList<>();
     private final HashMap> uniformLookup = new HashMap<>();
 
-    public Material(DescriptorPool pool) {
+    public NewMaterial(DescriptorPool pool) {
         this.pool = pool;
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/TestMaterial.java b/jme3-core/src/main/java/com/jme3/vulkan/material/TestMaterial.java
index d25650ba1e..173fbf9b29 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/material/TestMaterial.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/material/TestMaterial.java
@@ -7,7 +7,7 @@
 import com.jme3.vulkan.material.uniforms.TextureUniform;
 import com.jme3.vulkan.shader.ShaderStage;
 
-public class TestMaterial extends Material {
+public class TestMaterial extends NewMaterial {
 
     private final BufferUniform matrices = new BufferUniform(
             "Matrices", Descriptor.UniformBuffer, 0, ShaderStage.Vertex);

From ef41a347d5aa862e9d11177a82abeb49534518fd Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Sat, 13 Sep 2025 10:03:44 -0400
Subject: [PATCH 72/80] delete VertexModifier interface

---
 .../com/jme3/bounding/BoundingSphere.java     |  6 ++---
 .../java/com/jme3/collision/bih/BIHTree.java  |  2 +-
 .../main/java/com/jme3/scene/Geometry.java    | 27 ++++++++++---------
 .../src/main/java/com/jme3/scene/Spatial.java |  4 ++-
 .../jme3/vulkan/mesh/AttributeModifier.java   |  2 +-
 .../com/jme3/vulkan/mesh/VertexModifier.java  |  4 ---
 .../com/jme3/vulkan/mesh/VertexWriter.java    |  8 +-----
 .../jme3/vulkan/util/FloatBufferModifier.java |  4 +--
 8 files changed, 25 insertions(+), 32 deletions(-)
 delete mode 100644 jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexModifier.java

diff --git a/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java b/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java
index 3b8c488413..a0687efae9 100644
--- a/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java
+++ b/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java
@@ -39,11 +39,9 @@
 import com.jme3.export.JmeImporter;
 import com.jme3.math.*;
 import com.jme3.scene.Spatial;
-import com.jme3.util.BufferUtils;
 import com.jme3.util.TempVars;
-import com.jme3.vulkan.memory.MemorySize;
-import com.jme3.vulkan.mesh.VertexModifier;
 import com.jme3.vulkan.mesh.VertexReader;
+import com.jme3.vulkan.mesh.VertexWriter;
 import com.jme3.vulkan.util.FloatBufferModifier;
 import org.lwjgl.system.MemoryStack;
 
@@ -223,7 +221,7 @@ public void calcWelzl(VertexReader points) {
      *            A variable simulating pointer arithmetic from C++, and offset
      *            in points.
      */
-    private void recurseMini(VertexModifier points, int p, int b, int ap) {
+    private void recurseMini(VertexWriter points, int p, int b, int ap) {
         //TempVars vars = TempVars.get();
 
         Vector3f tempA = new Vector3f(); //vars.vect1;
diff --git a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
index 401be07137..6bdfbed6f2 100644
--- a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
+++ b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
@@ -499,7 +499,7 @@ public void write(JmeExporter ex) throws IOException {
     @Override
     public void read(JmeImporter im) throws IOException {
         InputCapsule ic = im.getCapsule(this);
-        mesh = (Mesh) ic.readSavable("mesh", null);
+        mesh = (NewMesh) ic.readSavable("mesh", null);
         root = (BIHNode) ic.readSavable("root", null);
         maxTrisPerNode = ic.readInt("tris_per_node", 0);
         pointData = ic.readFloatArray("points", null);
diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index 7ab767504d..b09a481cdb 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -47,6 +47,7 @@
 import com.jme3.util.TempVars;
 import com.jme3.util.clone.Cloner;
 import com.jme3.util.clone.IdentityCloneFunction;
+import com.jme3.vulkan.material.NewMaterial;
 import com.jme3.vulkan.mesh.NewMesh;
 
 import java.io.IOException;
@@ -69,7 +70,7 @@ public class Geometry extends Spatial {
     private static final Logger logger = Logger.getLogger(Geometry.class.getName());
     protected NewMesh mesh;
     protected transient int lodLevel = 0;
-    protected Material material;
+    protected NewMaterial material;
     /**
      * When true, the geometry's transform will not be applied.
      */
@@ -145,7 +146,7 @@ public Geometry(String name, NewMesh mesh) {
      * @param mesh The mesh data for this geometry
      * @param material The material for this geometry
      */
-    public Geometry(String name, NewMesh mesh, Material material) {
+    public Geometry(String name, NewMesh mesh, NewMaterial material) {
         this(name, mesh);
         setMaterial(material);
     }
@@ -270,7 +271,7 @@ public NewMesh getMesh() {
      * @param material the material to use for this geometry
      */
     @Override
-    public void setMaterial(Material material) {
+    public void setMaterial(NewMaterial material) {
         this.material = material;
         nbSimultaneousGPUMorph = -1;
         if (isGrouped()) {
@@ -283,9 +284,9 @@ public void setMaterial(Material material) {
      *
      * @return the material that is used for this geometry
      *
-     * @see #setMaterial(com.jme3.material.Material)
+     * @see #setMaterial(NewMaterial)
      */
-    public Material getMaterial() {
+    public NewMaterial getMaterial() {
         return material;
     }
 
@@ -733,10 +734,11 @@ public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule oc = ex.getCapsule(this);
         oc.write(mesh, "mesh", null);
-        if (material != null) {
-            oc.write(material.getAssetName(), "materialName", null);
-        }
-        oc.write(material, "material", null);
+        // fixme
+//        if (material != null) {
+//            oc.write(material.getAssetName(), "materialName", null);
+//        }
+//        oc.write(material, "material", null);
         oc.write(ignoreTransform, "ignoreTransform", false);
     }
 
@@ -745,14 +747,14 @@ public void read(JmeImporter im) throws IOException {
         super.read(im);
         InputCapsule ic = im.getCapsule(this);
         mesh = (NewMesh) ic.readSavable("mesh", null);
-
         material = null;
         String matName = ic.readString("materialName", null);
         if (matName != null) {
             // Material name is set,
             // Attempt to load material via J3M
             try {
-                material = im.getAssetManager().loadMaterial(matName);
+                // fixme
+                //material = im.getAssetManager().loadMaterial(matName);
             } catch (AssetNotFoundException ex) {
                 // Cannot find J3M file.
                 if (logger.isLoggable(Level.FINE)) {
@@ -763,7 +765,8 @@ public void read(JmeImporter im) throws IOException {
         }
         // If material is NULL, try to load it from the geometry
         if (material == null) {
-            material = (Material) ic.readSavable("material", null);
+            // fixme
+            material = (NewMaterial) ic.readSavable("material", null);
         }
         ignoreTransform = ic.readBoolean("ignoreTransform", false);
 
diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java
index 2fe1775d3e..0f10c7ef1f 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java
@@ -54,6 +54,8 @@
 import com.jme3.util.clone.Cloner;
 import com.jme3.util.clone.IdentityCloneFunction;
 import com.jme3.util.clone.JmeCloneable;
+import com.jme3.vulkan.material.NewMaterial;
+
 import java.io.IOException;
 import java.util.*;
 import java.util.logging.Logger;
@@ -1179,7 +1181,7 @@ public Transform getLocalTransform() {
      *
      * @param material The material to set.
      */
-    public void setMaterial(Material material) {
+    public void setMaterial(NewMaterial material) {
     }
 
     /**
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java
index efe80e8005..5c357526e1 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AttributeModifier.java
@@ -4,7 +4,7 @@
 
 import java.nio.*;
 
-public class AttributeModifier implements AutoCloseable, VertexModifier {
+public class AttributeModifier implements AutoCloseable, VertexReader, VertexWriter {
     
     private final VertexBuffer vertex;
     private final VertexAttribute attribute;
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexModifier.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexModifier.java
deleted file mode 100644
index 737e820b99..0000000000
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexModifier.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.jme3.vulkan.mesh;
-
-public interface VertexModifier extends VertexReader, VertexWriter {
-}
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java
index d78de8b933..acdc25295f 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/VertexWriter.java
@@ -7,13 +7,7 @@
 
 import java.nio.*;
 
-public interface VertexWriter {
-
-    int capacity();
-
-    int limit();
-
-    int components();
+public interface VertexWriter extends VertexReader {
 
     VertexWriter limit(int vertex);
 
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/util/FloatBufferModifier.java b/jme3-core/src/main/java/com/jme3/vulkan/util/FloatBufferModifier.java
index c43e60c601..4cae3cb808 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/util/FloatBufferModifier.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/util/FloatBufferModifier.java
@@ -1,11 +1,11 @@
 package com.jme3.vulkan.util;
 
-import com.jme3.vulkan.mesh.VertexModifier;
+import com.jme3.vulkan.mesh.VertexReader;
 import com.jme3.vulkan.mesh.VertexWriter;
 
 import java.nio.FloatBuffer;
 
-public class FloatBufferModifier implements VertexModifier {
+public class FloatBufferModifier implements VertexReader, VertexWriter {
 
     private final FloatBuffer buffer;
     private final int components;

From 1c45ac6ab857b8a15f7232aa42491ccee503ae0f Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Sat, 13 Sep 2025 10:07:53 -0400
Subject: [PATCH 73/80] made Spatial iterable

---
 .../main/java/com/jme3/scene/Geometry.java    |  7 ++
 .../src/main/java/com/jme3/scene/Node.java    | 15 +++-
 .../src/main/java/com/jme3/scene/Spatial.java | 87 ++++++++++++++++++-
 3 files changed, 107 insertions(+), 2 deletions(-)

diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index b09a481cdb..07a373bebd 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -49,6 +49,7 @@
 import com.jme3.util.clone.IdentityCloneFunction;
 import com.jme3.vulkan.material.NewMaterial;
 import com.jme3.vulkan.mesh.NewMesh;
+import com.jme3.vulkan.scene.NotSpatial;
 
 import java.io.IOException;
 import java.util.Queue;
@@ -781,4 +782,10 @@ public void read(JmeImporter im) throws IOException {
             }
         }
     }
+
+    @Override
+    protected void findNextIteration(GraphIterator iterator) {
+        iterator.moveUp();
+    }
+
 }
diff --git a/jme3-core/src/main/java/com/jme3/scene/Node.java b/jme3-core/src/main/java/com/jme3/scene/Node.java
index 0424cea053..aa0fecf498 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Node.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Node.java
@@ -40,6 +40,8 @@
 import com.jme3.material.Material;
 import com.jme3.util.SafeArrayList;
 import com.jme3.util.clone.Cloner;
+import com.jme3.vulkan.material.NewMaterial;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -561,7 +563,7 @@ public List getChildren() {
     }
 
     @Override
-    public void setMaterial(Material mat) {
+    public void setMaterial(NewMaterial mat) {
         for (int i = 0; i < children.size(); i++) {
             children.get(i).setMaterial(mat);
         }
@@ -813,4 +815,15 @@ public void depthFirstTraversal(SceneGraphVisitor visitor, DFSMode mode) {
     protected void breadthFirstTraversal(SceneGraphVisitor visitor, Queue queue) {
         queue.addAll(children);
     }
+
+    @Override
+    protected void findNextIteration(GraphIterator iterator) {
+        int i = iterator.advanceIndex();
+        if (i >= children.size()) {
+            iterator.moveUp();
+        } else {
+            iterator.moveDown(children.get(i));
+        }
+    }
+
 }
diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java
index 0f10c7ef1f..c9b5070706 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java
@@ -55,6 +55,7 @@
 import com.jme3.util.clone.IdentityCloneFunction;
 import com.jme3.util.clone.JmeCloneable;
 import com.jme3.vulkan.material.NewMaterial;
+import com.jme3.vulkan.scene.NotSpatial;
 
 import java.io.IOException;
 import java.util.*;
@@ -70,7 +71,7 @@
  * @author Joshua Slack
  * @version $Revision: 4075 $, $Data$
  */
-public abstract class Spatial implements Savable, Cloneable, Collidable,
+public abstract class Spatial implements Iterable, Savable, Cloneable, Collidable,
         CloneableSmartAsset, JmeCloneable, HasLocalTransform {
     private static final Logger logger = Logger.getLogger(Spatial.class.getName());
 
@@ -1876,4 +1877,88 @@ public void breadthFirstTraversal(SceneGraphVisitor visitor) {
     }
 
     protected abstract void breadthFirstTraversal(SceneGraphVisitor visitor, Queue queue);
+
+    protected abstract void findNextIteration(GraphIterator iterator);
+
+    @Override
+    public Iterator iterator() {
+        return new GraphIterator(this);
+    }
+
+    public static class GraphIterator implements Iterator {
+
+        private final Stack childIndices = new Stack<>();
+        private Spatial current;
+        private int currentIndex = 0;
+        private int iteration = -1;
+
+        public GraphIterator(Spatial start) {
+            current = Objects.requireNonNull(start);
+        }
+
+        @Override
+        public boolean hasNext() {
+            return current != null;
+        }
+
+        @Override
+        public Spatial next() {
+            if (++iteration > 0) {
+                current.findNextIteration(this);
+            }
+            return current;
+        }
+
+        @Override
+        public void remove() {
+            if (current.getParent() != null) {
+                current.removeFromParent();
+                moveUp();
+                currentIndex--;
+            }
+        }
+
+        protected void moveUp() {
+            if (!childIndices.isEmpty()) {
+                current = current.getParent();
+                currentIndex = childIndices.pop();
+                if (current != null) {
+                    current.findNextIteration(this);
+                }
+            } else {
+                current = null;
+            }
+        }
+
+        protected void moveDown(Spatial node) {
+            if (node.getParent() != current) {
+                throw new IllegalArgumentException("Next node must be a child of the current node.");
+            }
+            current = node;
+            childIndices.push(currentIndex);
+            currentIndex = 0;
+        }
+
+        protected int advanceIndex() {
+            return currentIndex++;
+        }
+
+        protected int getCurrentIndex() {
+            return currentIndex;
+        }
+
+        public void skipChildren() {
+            moveUp();
+        }
+
+        public int getDepth() {
+            return childIndices.size();
+        }
+
+        public int getIteration() {
+            return iteration;
+        }
+
+    }
+
 }

From 49cc7f24fb8322894908ac4b8e611e98ce26304c Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Sat, 13 Sep 2025 10:10:45 -0400
Subject: [PATCH 74/80] made Spatial iterable

---
 .../src/main/java/com/jme3/scene/Spatial.java |   2 +-
 .../java/com/jme3/vulkan/scene/NotNode.java   |  32 ------
 .../com/jme3/vulkan/scene/NotSpatial.java     | 104 ------------------
 .../jme3test/vulkan/VulkanHelperTest.java     |  18 ++-
 4 files changed, 15 insertions(+), 141 deletions(-)
 delete mode 100644 jme3-core/src/main/java/com/jme3/vulkan/scene/NotNode.java
 delete mode 100644 jme3-core/src/main/java/com/jme3/vulkan/scene/NotSpatial.java

diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java
index c9b5070706..dd56207777 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java
@@ -1881,7 +1881,7 @@ public void breadthFirstTraversal(SceneGraphVisitor visitor) {
     protected abstract void findNextIteration(GraphIterator iterator);
 
     @Override
-    public Iterator iterator() {
+    public GraphIterator iterator() {
         return new GraphIterator(this);
     }
 
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/scene/NotNode.java b/jme3-core/src/main/java/com/jme3/vulkan/scene/NotNode.java
deleted file mode 100644
index 63bf9fc362..0000000000
--- a/jme3-core/src/main/java/com/jme3/vulkan/scene/NotNode.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.jme3.vulkan.scene;
-
-import com.jme3.util.SafeArrayList;
-
-public class NotNode extends NotSpatial {
-
-    private SafeArrayList children = new SafeArrayList<>(NotSpatial.class);
-
-    public void attachChild(NotSpatial child) {
-        children.add(child);
-        child.setParent(this);
-    }
-
-    public boolean detachChild(NotSpatial child) {
-        if (children.remove(child)) {
-            child.setParent(null);
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    protected void findNextIteration(GraphIterator iterator) {
-        int i = iterator.advanceIndex();
-        if (i >= children.size()) {
-            iterator.moveUp();
-        } else {
-            iterator.moveDown(children.get(i));
-        }
-    }
-
-}
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/scene/NotSpatial.java b/jme3-core/src/main/java/com/jme3/vulkan/scene/NotSpatial.java
deleted file mode 100644
index 27e6292e96..0000000000
--- a/jme3-core/src/main/java/com/jme3/vulkan/scene/NotSpatial.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.jme3.vulkan.scene;
-
-import java.util.*;
-
-public abstract class NotSpatial implements Iterable {
-
-    private NotNode parent;
-
-    public void removeFromParent() {
-
-    }
-
-    public NotNode getParent() {
-        return parent;
-    }
-
-    protected void setParent(NotNode parent) {
-        this.parent = parent;
-    }
-
-    protected abstract void findNextIteration(GraphIterator iterator);
-
-    @Override
-    public Iterator iterator() {
-        return new GraphIterator(this);
-    }
-
-    public static class GraphIterator implements Iterator {
-
-        private final Stack childIndices = new Stack<>();
-        private NotSpatial current;
-        private int currentIndex = 0;
-        private int iteration = -1;
-
-        public GraphIterator(NotSpatial start) {
-            current = Objects.requireNonNull(start);
-        }
-
-        @Override
-        public boolean hasNext() {
-            return current != null;
-        }
-
-        @Override
-        public NotSpatial next() {
-            if (++iteration > 0) {
-                current.findNextIteration(this);
-            }
-            return current;
-        }
-
-        @Override
-        public void remove() {
-            if (current.getParent() != null) {
-                current.removeFromParent();
-                moveUp();
-                currentIndex--;
-            }
-        }
-
-        protected void moveUp() {
-            if (!childIndices.isEmpty()) {
-                current = current.getParent();
-                currentIndex = childIndices.pop();
-                if (current != null) {
-                    current.findNextIteration(this);
-                }
-            } else {
-                current = null;
-            }
-        }
-
-        protected void moveDown(NotSpatial node) {
-            if (node.getParent() != current) {
-                throw new IllegalArgumentException("Next node must be a child of the current node.");
-            }
-            current = node;
-            childIndices.push(currentIndex);
-            currentIndex = 0;
-        }
-
-        protected int advanceIndex() {
-            return currentIndex++;
-        }
-
-        protected int getCurrentIndex() {
-            return currentIndex;
-        }
-
-        public void skipChildren() {
-            moveUp();
-        }
-
-        public int getDepth() {
-            return childIndices.size();
-        }
-
-        public int getIteration() {
-            return iteration;
-        }
-
-    }
-
-}
diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
index e4ee925766..5198c7bc25 100644
--- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
+++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
@@ -6,6 +6,8 @@
 import com.jme3.math.Quaternion;
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
+import com.jme3.scene.Geometry;
+import com.jme3.scene.Spatial;
 import com.jme3.shaderc.ShaderType;
 import com.jme3.shaderc.ShadercLoader;
 import com.jme3.system.AppSettings;
@@ -434,10 +436,18 @@ public void update(UpdateFrameManager frames, float tpf) {
             // run graphics commands via CommandBatch
             graphics.run(graphicsCommands, frames.getCurrentFrame());
 
-            material.bind(graphicsCommands, pipeline);
-            mesh.bind(graphicsCommands);
-            for (int i = 0; i < 100; i++) {
-                mesh.draw(graphicsCommands);
+//            material.bind(graphicsCommands, pipeline);
+//            mesh.bind(graphicsCommands);
+//            mesh.draw(graphicsCommands);
+
+            // draw all geometries in the rootNode
+            for (Spatial s : rootNode) {
+                if (s instanceof Geometry) {
+                    Geometry g = (Geometry)s;
+                    g.getMaterial().bind(graphicsCommands, pipeline);
+                    g.getMesh().bind(graphicsCommands);
+                    g.getMesh().draw(graphicsCommands);
+                }
             }
 
             // material

From 1e2926d75ef0a1e8464fdd99a9f2b9c0cdc7d93f Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Sat, 13 Sep 2025 11:53:46 -0400
Subject: [PATCH 75/80] setup vulkan test for rendering from the scene graph

---
 .../main/java/com/jme3/scene/Geometry.java    | 27 ++++++-
 .../material/MatrixTransformMaterial.java     | 25 +++++++
 .../com/jme3/vulkan/material/NewMaterial.java |  7 +-
 .../jme3/vulkan/material/TestMaterial.java    | 10 +--
 .../com/jme3/vulkan/mesh/AdaptiveMesh.java    |  2 +-
 .../com/jme3/vulkan/mesh/MyCustomMesh.java    |  2 +-
 .../jme3test/vulkan/VulkanHelperTest.java     | 72 +++++--------------
 7 files changed, 76 insertions(+), 69 deletions(-)
 create mode 100644 jme3-core/src/main/java/com/jme3/vulkan/material/MatrixTransformMaterial.java

diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index 07a373bebd..f5f1c3b0fd 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -42,16 +42,19 @@
 import com.jme3.material.Material;
 import com.jme3.math.Matrix4f;
 import com.jme3.renderer.Camera;
-import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.MorphTarget;
 import com.jme3.util.TempVars;
 import com.jme3.util.clone.Cloner;
 import com.jme3.util.clone.IdentityCloneFunction;
+import com.jme3.vulkan.buffers.GpuBuffer;
+import com.jme3.vulkan.commands.CommandBuffer;
+import com.jme3.vulkan.material.MatrixTransformMaterial;
 import com.jme3.vulkan.material.NewMaterial;
 import com.jme3.vulkan.mesh.NewMesh;
-import com.jme3.vulkan.scene.NotSpatial;
+import com.jme3.vulkan.pipelines.Pipeline;
 
 import java.io.IOException;
+import java.nio.FloatBuffer;
 import java.util.Queue;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -72,6 +75,7 @@ public class Geometry extends Spatial {
     protected NewMesh mesh;
     protected transient int lodLevel = 0;
     protected NewMaterial material;
+    protected MatrixTransformMaterial transforms; // stores the matrices unique to this geometry
     /**
      * When true, the geometry's transform will not be applied.
      */
@@ -140,6 +144,11 @@ public Geometry(String name, NewMesh mesh) {
         this.mesh = mesh;
     }
 
+    public Geometry(String name, NewMesh mesh, MatrixTransformMaterial transforms) {
+        this(name, mesh);
+        this.transforms = transforms;
+    }
+
     /**
      * Create a geometry node with mesh data and material.
      *
@@ -152,6 +161,20 @@ public Geometry(String name, NewMesh mesh, NewMaterial material) {
         setMaterial(material);
     }
 
+    public void updateTransformMaterial(Camera cam) {
+        Matrix4f worldViewProjection = cam.getViewProjectionMatrix().mult(worldTransform.toTransformMatrix());
+        GpuBuffer matBuffer = transforms.getTransforms().getResource().get();
+        worldViewProjection.fillFloatBuffer(matBuffer.mapFloats(), true);
+        matBuffer.unmap();
+    }
+
+    public void draw(CommandBuffer cmd, Pipeline pipeline) {
+        int offset = transforms.bind(cmd, pipeline);
+        material.bind(cmd, pipeline, offset);
+        mesh.bind(cmd);
+        mesh.draw(cmd);
+    }
+
     @Override
     public boolean checkCulling(Camera cam) {
         if (isGrouped()) {
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/MatrixTransformMaterial.java b/jme3-core/src/main/java/com/jme3/vulkan/material/MatrixTransformMaterial.java
new file mode 100644
index 0000000000..bee4f2f3fc
--- /dev/null
+++ b/jme3-core/src/main/java/com/jme3/vulkan/material/MatrixTransformMaterial.java
@@ -0,0 +1,25 @@
+package com.jme3.vulkan.material;
+
+import com.jme3.vulkan.descriptors.Descriptor;
+import com.jme3.vulkan.descriptors.DescriptorPool;
+import com.jme3.vulkan.material.uniforms.BufferUniform;
+import com.jme3.vulkan.shader.ShaderStage;
+
+/**
+ * Material specifically for storing matrix transforms for a geometry.
+ */
+public class MatrixTransformMaterial extends NewMaterial {
+
+    private final BufferUniform transforms = new BufferUniform("Transforms",
+            Descriptor.UniformBuffer, 0, ShaderStage.Vertex);
+
+    public MatrixTransformMaterial(DescriptorPool pool) {
+        super(pool);
+        addSet(transforms);
+    }
+
+    public BufferUniform getTransforms() {
+        return transforms;
+    }
+
+}
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java b/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java
index 013ac895ed..dedf54266b 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java
@@ -31,11 +31,11 @@ public void update(CommandBuffer cmd) {
         }
     }
 
-    public void bind(CommandBuffer cmd, Pipeline pipeline) {
-        bind(cmd, pipeline, 0);
+    public int bind(CommandBuffer cmd, Pipeline pipeline) {
+        return bind(cmd, pipeline, 0);
     }
 
-    public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) {
+    public int bind(CommandBuffer cmd, Pipeline pipeline, int offset) {
         LinkedList availableLayouts = new LinkedList<>();
         Collections.addAll(availableLayouts, pipeline.getLayout().getDescriptorSetLayouts());
         try (MemoryStack stack = MemoryStack.stackPush()) {
@@ -47,6 +47,7 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) {
             vkCmdBindDescriptorSets(cmd.getBuffer(), pipeline.getBindPoint().getVkEnum(),
                     pipeline.getLayout().getNativeObject(), offset, setBuf, null);
         }
+        return uniformSets.size(); // number of descriptor slots filled
     }
 
     public DescriptorSetLayout[] createLayouts(LogicalDevice device) {
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/TestMaterial.java b/jme3-core/src/main/java/com/jme3/vulkan/material/TestMaterial.java
index 173fbf9b29..e5719c6a14 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/material/TestMaterial.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/material/TestMaterial.java
@@ -1,26 +1,18 @@
 package com.jme3.vulkan.material;
 
-import com.jme3.vulkan.descriptors.Descriptor;
 import com.jme3.vulkan.descriptors.DescriptorPool;
 import com.jme3.vulkan.images.VulkanImage;
-import com.jme3.vulkan.material.uniforms.BufferUniform;
 import com.jme3.vulkan.material.uniforms.TextureUniform;
 import com.jme3.vulkan.shader.ShaderStage;
 
 public class TestMaterial extends NewMaterial {
 
-    private final BufferUniform matrices = new BufferUniform(
-            "Matrices", Descriptor.UniformBuffer, 0, ShaderStage.Vertex);
     private final TextureUniform baseColorMap = new TextureUniform(
             "BaseColorMap", VulkanImage.Layout.ShaderReadOnlyOptimal, 1, ShaderStage.Fragment);
 
     public TestMaterial(DescriptorPool pool) {
         super(pool);
-        addSet(matrices, baseColorMap);
-    }
-
-    public BufferUniform getMatrices() {
-        return matrices;
+        addSet(baseColorMap);
     }
 
     public TextureUniform getBaseColorMap() {
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
index 41fe5d19c0..5fafe1838d 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java
@@ -37,7 +37,7 @@ protected enum VertexMode {
     private final List vertexBuffers = new ArrayList<>();
     protected final List> indexBuffers = new ArrayList<>();
     private GpuBuffer boundIndexBuffer;
-    protected BoundingVolume volume;
+    protected BoundingVolume volume = new BoundingBox();
     private int vertices;
     private CollisionData collisionTree;
 
diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
index 64b1243cd3..051677365c 100644
--- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
+++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/MyCustomMesh.java
@@ -80,7 +80,7 @@ protected VersionedResource createDynamicBuffer(MemorySize
 
     @Override
     protected VersionedResource createStaticBuffer(MemorySize size) {
-        return updateStaticBuffers.add(new SingleCommand<>(new StaticBuffer(
+        return updateStaticBuffers.add(new SingleCommand<>(new BackedStaticBuffer(
                 device, size, BufferUsage.Vertex, MemoryProp.DeviceLocal, false)));
     }
 
diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
index 5198c7bc25..bc93ded750 100644
--- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
+++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java
@@ -2,8 +2,6 @@
 
 import com.jme3.app.FlyCamAppState;
 import com.jme3.app.SimpleApplication;
-import com.jme3.math.Matrix4f;
-import com.jme3.math.Quaternion;
 import com.jme3.math.Transform;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Geometry;
@@ -17,7 +15,6 @@
 import com.jme3.vulkan.Format;
 import com.jme3.vulkan.VulkanInstance;
 import com.jme3.vulkan.buffers.BufferUsage;
-import com.jme3.vulkan.buffers.GpuBuffer;
 import com.jme3.vulkan.buffers.PersistentBuffer;
 import com.jme3.vulkan.buffers.StageableBuffer;
 import com.jme3.vulkan.commands.CommandBuffer;
@@ -31,6 +28,7 @@
 import com.jme3.vulkan.frames.UpdateFrame;
 import com.jme3.vulkan.frames.UpdateFrameManager;
 import com.jme3.vulkan.images.*;
+import com.jme3.vulkan.material.MatrixTransformMaterial;
 import com.jme3.vulkan.material.TestMaterial;
 import com.jme3.vulkan.memory.MemoryProp;
 import com.jme3.vulkan.memory.MemorySize;
@@ -79,32 +77,6 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda
     private boolean swapchainResizeFlag = false;
     private boolean applicationStopped = false;
 
-    // mesh
-    private NewMesh mesh;
-    private final FloatBuffer vertexData = BufferUtils.createFloatBuffer(
-            -0.5f, -0.5f, 0f,   1f, 0f, 0f,   1f, 0f,
-             0.5f, -0.5f, 0f,   0f, 1f, 0f,   0f, 0f,
-             0.5f,  0.5f, 0f,   0f, 0f, 1f,   0f, 1f,
-            -0.5f,  0.5f, 0f,   1f, 1f, 1f,   1f, 1f,
-
-            -0.5f, -0.5f, -0.5f,   1f, 0f, 0f,   1f, 0f,
-             0.5f, -0.5f, -0.5f,   0f, 1f, 0f,   0f, 0f,
-             0.5f,  0.5f, -0.5f,   0f, 0f, 1f,   0f, 1f,
-            -0.5f,  0.5f, -0.5f,   1f, 1f, 1f,   1f, 1f
-    );
-    private final IntBuffer indexData = BufferUtils.createIntBuffer(
-            0, 1, 2, 2, 3, 0,
-            4, 5, 6, 6, 7, 4);
-
-    // material
-    private TestMaterial material;
-
-    // geometry
-    private final Transform modelTransform = new Transform();
-
-    // material
-    private Texture texture;
-
     // framebuffer
     private ImageView depthView;
 
@@ -261,7 +233,8 @@ public void simpleInitApp() {
         try (ImageView.Builder i = imgView.build()) {
             i.setAspect(VulkanImage.Aspect.Color);
         }
-        texture = new Texture(device, imgView);
+        // material
+        Texture texture = new Texture(device, imgView);
         try (Sampler.Builder t = texture.build()) {
             t.setMinMagFilters(Filter.Linear, Filter.Linear);
             t.setEdgeModes(AddressMode.Repeat);
@@ -273,14 +246,17 @@ public void simpleInitApp() {
         sharedData = new BasicCommandBatch();
         sharedDataFence = new Fence(device, true);
 
-        // mesh
-        mesh = new MyCustomMesh(device, frames, meshDesc, sharedData,
-                Vector3f.UNIT_Z, Vector3f.UNIT_Y, 1f, 1f, 0.5f, 0.5f);
+        TestMaterial material = new TestMaterial(descriptorPool);
+        material.getBaseColorMap().setResource(new SingleResource<>(texture));
 
-        material = new TestMaterial(descriptorPool);
-        material.getMatrices().setResource(frames.perFrame(n ->
+        NewMesh m = new MyCustomMesh(device, frames, meshDesc, sharedData,
+                Vector3f.UNIT_Z, Vector3f.UNIT_Y, 1f, 1f, 0.5f, 0.5f);
+        MatrixTransformMaterial t = new MatrixTransformMaterial(descriptorPool);
+        t.getTransforms().setResource(frames.perFrame(n ->
                 new PersistentBuffer(device, MemorySize.floats(16), BufferUsage.Uniform, false)));
-        material.getBaseColorMap().setResource(new SingleResource<>(texture));
+        Geometry geometry = new Geometry("geometry", m, t);
+        geometry.setMaterial(material);
+        rootNode.attachChild(geometry);
 
     }
 
@@ -382,15 +358,10 @@ public void update(UpdateFrameManager frames, float tpf) {
             renderManager.setCamera(cam, false);
 
             // update matrix uniform (geometry)
-            {
-                // compute geometry states
-                modelTransform.getRotation().multLocal(new Quaternion().fromAngleAxis(tpf, Vector3f.UNIT_Y));
-                Matrix4f worldViewProjection = cam.getViewProjectionMatrix().mult(modelTransform.toTransformMatrix());
-
-                // update material uniform
-                GpuBuffer matrixBuffer = material.getMatrices().getResource().get();
-                worldViewProjection.fillFloatBuffer(matrixBuffer.mapFloats(), true);
-                matrixBuffer.unmap();
+            for (Spatial s : rootNode) {
+                if (s instanceof Geometry) {
+                    ((Geometry)s).updateTransformMaterial(cam);
+                }
             }
 
             // update shared data
@@ -436,17 +407,11 @@ public void update(UpdateFrameManager frames, float tpf) {
             // run graphics commands via CommandBatch
             graphics.run(graphicsCommands, frames.getCurrentFrame());
 
-//            material.bind(graphicsCommands, pipeline);
-//            mesh.bind(graphicsCommands);
-//            mesh.draw(graphicsCommands);
-
             // draw all geometries in the rootNode
             for (Spatial s : rootNode) {
                 if (s instanceof Geometry) {
                     Geometry g = (Geometry)s;
-                    g.getMaterial().bind(graphicsCommands, pipeline);
-                    g.getMesh().bind(graphicsCommands);
-                    g.getMesh().draw(graphicsCommands);
+                    g.draw(graphicsCommands, pipeline);
                 }
             }
 
@@ -454,7 +419,8 @@ public void update(UpdateFrameManager frames, float tpf) {
             renderPass.end(graphicsCommands);
 
             // render manager
-            graphicsCommands.endAndSubmit(new SyncGroup(new Semaphore[] {imageAvailable, perFrameDataFinished, sharedDataFinished}, renderFinished, inFlight));
+            graphicsCommands.endAndSubmit(new SyncGroup(new Semaphore[]
+                    {imageAvailable, perFrameDataFinished, sharedDataFinished}, renderFinished, inFlight));
             swapchain.present(device.getPhysicalDevice().getPresent(), image, renderFinished.toGroupWait());
 
         }

From a7c2f09f3643b88105c2a4ca87bc5eb728d7e459 Mon Sep 17 00:00:00 2001
From: codex <103840984+codex128@users.noreply.github.com>
Date: Sat, 13 Sep 2025 14:05:55 -0400
Subject: [PATCH 76/80] moved Mesh code to OldMesh; replaced NewMesh with Mesh,
 which has been changed to an interface

---
 .../java/com/jme3/collision/bih/BIHTree.java  |   16 +-
 .../com/jme3/post/FilterPostProcessor.java    |    3 +-
 .../java/com/jme3/renderer/RenderManager.java |   31 +-
 .../main/java/com/jme3/scene/Geometry.java    |   18 +-
 .../src/main/java/com/jme3/scene/Mesh.java    | 1673 +---------------
 .../src/main/java/com/jme3/scene/OldMesh.java | 1759 +++++++++++++++++
 .../src/main/java/com/jme3/scene/Spatial.java |    1 -
 .../jme3/scene/mesh/VirtualIndexBuffer.java   |   24 +-
 .../jme3/shadow/AbstractShadowRenderer.java   |   40 +-
 .../com/jme3/vulkan/mesh/AdaptiveMesh.java    |    3 +-
 .../java/com/jme3/vulkan/mesh/NewMesh.java    |   36 -
 .../jme3test/vulkan/VulkanHelperTest.java     |    3 +-
 12 files changed, 1843 insertions(+), 1764 deletions(-)
 create mode 100644 jme3-core/src/main/java/com/jme3/scene/OldMesh.java
 delete mode 100644 jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java

diff --git a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
index 6bdfbed6f2..62747b44ae 100644
--- a/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
+++ b/jme3-core/src/main/java/com/jme3/collision/bih/BIHTree.java
@@ -47,26 +47,18 @@
 import com.jme3.math.Vector3f;
 import com.jme3.scene.CollisionData;
 import com.jme3.scene.Mesh;
-import com.jme3.scene.Mesh.Mode;
-import com.jme3.scene.VertexBuffer;
-import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.scene.mesh.IndexBuffer;
-import com.jme3.scene.mesh.VirtualIndexBuffer;
-import com.jme3.scene.mesh.WrappedIndexBuffer;
 import com.jme3.util.TempVars;
-import com.jme3.vulkan.buffers.GpuBuffer;
-import com.jme3.vulkan.mesh.NewMesh;
 import com.jme3.vulkan.mesh.VertexReader;
 
 import java.io.IOException;
 import static java.lang.Math.max;
-import java.nio.FloatBuffer;
 
 public class BIHTree implements CollisionData {
 
     public static final int MAX_TREE_DEPTH = 100;
     public static final int MAX_TRIS_PER_NODE = 21;
-    private NewMesh mesh;
+    private Mesh mesh;
     private BIHNode root;
     private int maxTrisPerNode;
     private int numTris;
@@ -111,7 +103,7 @@ public BIHTree(VertexReader positions, IndexBuffer indices) {
     }
 
     @Deprecated
-    public BIHTree(NewMesh mesh, int maxTrisPerNode) {
+    public BIHTree(Mesh mesh, int maxTrisPerNode) {
         this.mesh = mesh;
         this.maxTrisPerNode = maxTrisPerNode;
 
@@ -143,7 +135,7 @@ public BIHTree(NewMesh mesh, int maxTrisPerNode) {
         //initTriList(vb, ib);
     }
 
-    public BIHTree(NewMesh mesh) {
+    public BIHTree(Mesh mesh) {
         this(mesh, MAX_TRIS_PER_NODE);
     }
 
@@ -499,7 +491,7 @@ public void write(JmeExporter ex) throws IOException {
     @Override
     public void read(JmeImporter im) throws IOException {
         InputCapsule ic = im.getCapsule(this);
-        mesh = (NewMesh) ic.readSavable("mesh", null);
+        mesh = (Mesh) ic.readSavable("mesh", null);
         root = (BIHNode) ic.readSavable("root", null);
         maxTrisPerNode = ic.readInt("tris_per_node", 0);
         pointData = ic.readFloatArray("points", null);
diff --git a/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java b/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java
index aa8896a951..685549d593 100644
--- a/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java
+++ b/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java
@@ -227,7 +227,8 @@ private void renderProcessing(Renderer r, FrameBuffer buff, Material mat) {
         }
 
 
-        fsQuad.setMaterial(mat);
+        // fixme
+        //fsQuad.setMaterial(mat);
         fsQuad.updateGeometricState();
 
         r.setFrameBuffer(buff);
diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java
index c59ffd9084..9558f30266 100644
--- a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java
+++ b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java
@@ -57,7 +57,6 @@
 import com.jme3.scene.Mesh;
 import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
-import com.jme3.scene.VertexBuffer;
 import com.jme3.shader.Shader;
 import com.jme3.shader.UniformBinding;
 import com.jme3.shader.UniformBindingManager;
@@ -66,6 +65,7 @@
 import com.jme3.system.Timer;
 import com.jme3.texture.FrameBuffer;
 import com.jme3.util.SafeArrayList;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -798,7 +798,9 @@ public void renderGeometry(Geometry geom, LightList lightList) {
             this.boundDrawBufferId.setValue(currentFb.getTargetIndex());
         }
 
-        Material material = geom.getMaterial();
+        // fixme
+        //Material material = geom.getMaterial();
+        Material material = null;
 
         // If forcedTechnique exists, we try to force it for the render.
         // If it does not exist in the mat def, we check for forcedMaterial and render the geom if not null.
@@ -813,14 +815,15 @@ public void renderGeometry(Geometry geom, LightList lightList) {
                         ? activeTechnique.getDef().getName()
                         : TechniqueDef.DEFAULT_TECHNIQUE_NAME;
 
-                geom.getMaterial().selectTechnique(forcedTechnique, this);
+                // fixme
+                //geom.getMaterial().selectTechnique(forcedTechnique, this);
                 //saving forcedRenderState for future calls
                 RenderState tmpRs = forcedRenderState;
-                if (geom.getMaterial().getActiveTechnique().getDef().getForcedRenderState() != null) {
+                //if (geom.getMaterial().getActiveTechnique().getDef().getForcedRenderState() != null) {
                     //forcing forced technique renderState
-                    forcedRenderState
-                            = geom.getMaterial().getActiveTechnique().getDef().getForcedRenderState();
-                }
+                //    forcedRenderState
+                //            = geom.getMaterial().getActiveTechnique().getDef().getForcedRenderState();
+                //}
                 // use geometry's material
                 material.render(geom, lightList, this);
                 material.selectTechnique(previousTechniqueName, this);
@@ -889,16 +892,18 @@ public void preloadScene(Spatial scene) {
                 throw new IllegalStateException("No material is set for Geometry: " + gm.getName());
             }
 
-            gm.getMaterial().preload(this, gm);
+            // fixme
+            //gm.getMaterial().preload(this, gm);
             Mesh mesh = gm.getMesh();
             if (mesh != null
                     && mesh.getVertexCount() != 0
                     && mesh.getTriangleCount() != 0) {
-                for (VertexBuffer vb : mesh.getBufferList().getArray()) {
-                    if (vb.getData() != null && vb.getUsage() != VertexBuffer.Usage.CpuOnly) {
-                        renderer.updateBufferData(vb);
-                    }
-                }
+                // fixme
+//                for (VertexBuffer vb : mesh.getBufferList().getArray()) {
+//                    if (vb.getData() != null && vb.getUsage() != VertexBuffer.Usage.CpuOnly) {
+//                        renderer.updateBufferData(vb);
+//                    }
+//                }
             }
         }
     }
diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
index f5f1c3b0fd..1a57d49993 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java
@@ -50,11 +50,9 @@
 import com.jme3.vulkan.commands.CommandBuffer;
 import com.jme3.vulkan.material.MatrixTransformMaterial;
 import com.jme3.vulkan.material.NewMaterial;
-import com.jme3.vulkan.mesh.NewMesh;
 import com.jme3.vulkan.pipelines.Pipeline;
 
 import java.io.IOException;
-import java.nio.FloatBuffer;
 import java.util.Queue;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -72,7 +70,7 @@ public class Geometry extends Spatial {
     // models loaded with shared mesh will be automatically fixed.
     public static final int SAVABLE_VERSION = 1;
     private static final Logger logger = Logger.getLogger(Geometry.class.getName());
-    protected NewMesh mesh;
+    protected Mesh mesh;
     protected transient int lodLevel = 0;
     protected NewMaterial material;
     protected MatrixTransformMaterial transforms; // stores the matrices unique to this geometry
@@ -134,7 +132,7 @@ public Geometry(String name) {
      * @param name The name of this geometry
      * @param mesh The mesh data for this geometry
      */
-    public Geometry(String name, NewMesh mesh) {
+    public Geometry(String name, Mesh mesh) {
         this(name);
 
         if (mesh == null) {
@@ -144,7 +142,7 @@ public Geometry(String name, NewMesh mesh) {
         this.mesh = mesh;
     }
 
-    public Geometry(String name, NewMesh mesh, MatrixTransformMaterial transforms) {
+    public Geometry(String name, Mesh mesh, MatrixTransformMaterial transforms) {
         this(name, mesh);
         this.transforms = transforms;
     }
@@ -156,7 +154,7 @@ public Geometry(String name, NewMesh mesh, MatrixTransformMaterial transforms) {
      * @param mesh The mesh data for this geometry
      * @param material The material for this geometry
      */
-    public Geometry(String name, NewMesh mesh, NewMaterial material) {
+    public Geometry(String name, Mesh mesh, NewMaterial material) {
         this(name, mesh);
         setMaterial(material);
     }
@@ -265,7 +263,7 @@ public int getTriangleCount() {
      *
      * @throws IllegalArgumentException If mesh is null
      */
-    public void setMesh(NewMesh mesh) {
+    public void setMesh(Mesh mesh) {
         if (mesh == null) {
             throw new IllegalArgumentException();
         }
@@ -283,9 +281,9 @@ public void setMesh(NewMesh mesh) {
      *
      * @return the mesh to use for this geometry
      *
-     * @see #setMesh(NewMesh)
+     * @see #setMesh(Mesh)
      */
-    public NewMesh getMesh() {
+    public Mesh getMesh() {
         return mesh;
     }
 
@@ -770,7 +768,7 @@ public void write(JmeExporter ex) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         InputCapsule ic = im.getCapsule(this);
-        mesh = (NewMesh) ic.readSavable("mesh", null);
+        mesh = (Mesh) ic.readSavable("mesh", null);
         material = null;
         String matName = ic.readString("materialName", null);
         if (matName != null) {
diff --git a/jme3-core/src/main/java/com/jme3/scene/Mesh.java b/jme3-core/src/main/java/com/jme3/scene/Mesh.java
index 5142111d6f..4b527abb01 100644
--- a/jme3-core/src/main/java/com/jme3/scene/Mesh.java
+++ b/jme3-core/src/main/java/com/jme3/scene/Mesh.java
@@ -31,27 +31,15 @@
  */
 package com.jme3.scene;
 
-import com.jme3.bounding.BoundingBox;
 import com.jme3.bounding.BoundingVolume;
 import com.jme3.collision.Collidable;
 import com.jme3.collision.CollisionResults;
-import com.jme3.collision.bih.BIHTree;
 import com.jme3.export.*;
 import com.jme3.material.Material;
 import com.jme3.material.RenderState;
-import com.jme3.math.*;
-import com.jme3.scene.VertexBuffer.*;
-import com.jme3.scene.mesh.*;
-import com.jme3.util.*;
-import com.jme3.util.IntMap.Entry;
-import com.jme3.util.clone.Cloner;
-import com.jme3.util.clone.JmeCloneable;
 import com.jme3.vulkan.commands.CommandBuffer;
-import com.jme3.vulkan.mesh.NewMesh;
-
-import java.io.IOException;
-import java.nio.*;
-import java.util.ArrayList;
+import com.jme3.vulkan.mesh.AttributeModifier;
+import com.jme3.vulkan.mesh.BuiltInAttribute;
 
 /**
  * Mesh is used to store rendering data.
@@ -67,1661 +55,30 @@
  *
  * @author Kirill Vainer
  */
-@Deprecated
-public class Mesh implements Savable, Cloneable, JmeCloneable {
-
-    /**
-     * The mode of the Mesh specifies both the type of primitive represented
-     * by the mesh and how the data should be interpreted.
-     */
-    public enum Mode {
-        /**
-         * A primitive is a single point in space. The size of {@link Mode#Points points} are
-         * determined via the vertex shader's gl_PointSize output.
-         */
-        Points(true),
-        /**
-         * A primitive is a line segment. Every two vertices specify
-         * a single line. {@link Material#getAdditionalRenderState()}
-         * and {@link RenderState#setLineWidth(float)} can be used
-         * to set the width of the lines.
-         */
-        Lines(true),
-        /**
-         * A primitive is a line segment. The first two vertices specify
-         * a single line, while subsequent vertices are combined with the
-         * previous vertex to make a line. {@link Material#getAdditionalRenderState()}
-         * and {@link RenderState#setLineWidth(float)} can
-         * be used to set the width of the lines.
-         */
-        LineStrip(false),
-        /**
-         * Identical to {@link #LineStrip} except that at the end
-         * the last vertex is connected with the first to form a line.
-         * {@link Material#getAdditionalRenderState()}
-         * and {@link RenderState#setLineWidth(float)} can be used
-         * to set the width of the lines.
-         */
-        LineLoop(false),
-        /**
-         * A primitive is a triangle. Each 3 vertices specify a single
-         * triangle.
-         */
-        Triangles(true),
-        /**
-         * Similar to {@link #Triangles}, the first 3 vertices
-         * specify a triangle, while subsequent vertices are combined with
-         * the previous two to form a triangle.
-         */
-        TriangleStrip(false),
-        /**
-         * Similar to {@link #Triangles}, the first 3 vertices
-         * specify a triangle, each 2 subsequent vertices are combined
-         * with the very first vertex to make a triangle.
-         */
-        TriangleFan(false),
-        /**
-         * A combination of various triangle modes. It is best to avoid
-         * using this mode as it may not be supported by all renderers.
-         * The {@link Mesh#setModeStart(int[]) mode start points} and
-         * {@link Mesh#setElementLengths(int[]) element lengths} must
-         * be specified for this mode.
-         */
-        Hybrid(false),
-        /**
-         * Used for Tessellation only. Requires to set the number of vertices
-         * for each patch (default is 3 for triangle tessellation)
-         */
-        Patch(true);
-
-        private boolean listMode = false;
-
-        private Mode(boolean listMode) {
-            this.listMode = listMode;
-        }
-
-        /**
-         * Returns true if the specified mode is a list mode (meaning
-         * ,it specifies the indices as a linear list and not some special
-         * format).
-         * Will return true for the types {@link #Points}, {@link #Lines} and
-         * {@link #Triangles}.
-         *
-         * @return true if the mode is a list type mode
-         */
-        public boolean isListMode() {
-            return listMode;
-        }
-    }
-    
-    /**
-     * Default Variables
-     */
-    private static final int DEFAULT_VERTEX_ARRAY_ID = -1;
-    private static final CollisionData DEFAULT_COLLISION_TREE = null;
-
-    private static final float DEFAULT_POINT_SIZE = 1.0f;
-    private static final float DEFAULT_LINE_WIDTH = 1.0f;
-
-    private static final int DEFAULT_VERT_COUNT = -1;
-    private static final int DEFAULT_ELEMENT_COUNT = -1;
-    private static final int DEFAULT_INSTANCE_COUNT = -1;
-    private static final int DEFAULT_PATCH_VERTEX_COUNT = 3;
-    private static final int DEFAULT_MAX_NUM_WEIGHTS = -1;
-    
-    /**
-     * The bounding volume that contains the mesh entirely.
-     * By default a BoundingBox (AABB).
-     */
-    private BoundingVolume meshBound = new BoundingBox();
-
-    private CollisionData collisionTree = DEFAULT_COLLISION_TREE;
-
-    private SafeArrayList buffersList = new SafeArrayList<>(VertexBuffer.class);
-    private IntMap buffers = new IntMap<>();
-    private VertexBuffer[] lodLevels;
-    
-    private float pointSize = DEFAULT_POINT_SIZE;
-    private float lineWidth = DEFAULT_LINE_WIDTH;
-
-    private transient int vertexArrayID = DEFAULT_VERTEX_ARRAY_ID;
-
-    private int vertCount = DEFAULT_VERT_COUNT;
-    private int elementCount = DEFAULT_ELEMENT_COUNT;
-    private int instanceCount = DEFAULT_INSTANCE_COUNT;
-    private int patchVertexCount = DEFAULT_PATCH_VERTEX_COUNT; //only used for tessellation
-    private int maxNumWeights = DEFAULT_MAX_NUM_WEIGHTS; // only if using skeletal animation
-
-    private int[] elementLengths;
-    private int[] modeStart;
-
-    private Mode mode = Mode.Triangles;
-
-    private SafeArrayList morphTargets;
-
-    /**
-     * Creates a new mesh with no {@link VertexBuffer vertex buffers}.
-     */
-    public Mesh() {
-    }
-
-    /**
-     * Create a shallow clone of this Mesh. The {@link VertexBuffer vertex
-     * buffers} are shared between this and the clone mesh, the rest
-     * of the data is cloned.
-     *
-     * @return A shallow clone of the mesh
-     */
-    @Override
-    public Mesh clone() {
-        try {
-            Mesh clone = (Mesh) super.clone();
-            clone.meshBound = meshBound.clone();
-            clone.collisionTree = collisionTree != null ? collisionTree : null;
-            clone.buffers = buffers.clone();
-            clone.buffersList = new SafeArrayList<>(VertexBuffer.class, buffersList);
-            clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID;
-            if (elementLengths != null) {
-                clone.elementLengths = elementLengths.clone();
-            }
-            if (modeStart != null) {
-                clone.modeStart = modeStart.clone();
-            }
-            return clone;
-        } catch (CloneNotSupportedException ex) {
-            throw new AssertionError();
-        }
-    }
-
-    /**
-     * Creates a deep clone of this mesh.
-     * The {@link VertexBuffer vertex buffers} and the data inside them
-     * is cloned.
-     *
-     * @return a deep clone of this mesh.
-     */
-    public Mesh deepClone() {
-        try {
-            Mesh clone = (Mesh) super.clone();
-            clone.meshBound = meshBound != null ? meshBound.clone() : null;
-
-            // TODO: Collision tree cloning
-            //clone.collisionTree = collisionTree != null ? collisionTree : null;
-            clone.collisionTree = DEFAULT_COLLISION_TREE; // it will get re-generated in any case
-
-            clone.buffers = new IntMap<>();
-            clone.buffersList = new SafeArrayList<>(VertexBuffer.class);
-            for (VertexBuffer vb : buffersList.getArray()) {
-                VertexBuffer bufClone = vb.clone();
-                clone.buffers.put(vb.getBufferType().ordinal(), bufClone);
-                clone.buffersList.add(bufClone);
-            }
-
-            clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID;
-            clone.vertCount = vertCount;
-            clone.elementCount = elementCount;
-            clone.instanceCount = instanceCount;
-
-            // although this could change
-            // if the bone weight/index buffers are modified
-            clone.maxNumWeights = maxNumWeights;
-
-            clone.elementLengths = elementLengths != null ? elementLengths.clone() : null;
-            clone.modeStart = modeStart != null ? modeStart.clone() : null;
-            return clone;
-        } catch (CloneNotSupportedException ex) {
-            throw new AssertionError();
-        }
-    }
-
-    /**
-     * Clone the mesh for animation use.
-     * This creates a shallow clone of the mesh, sharing most
-     * of the {@link VertexBuffer vertex buffer} data, however the
-     * {@link Type#Position}, {@link Type#Normal}, and {@link Type#Tangent} buffers
-     * are deeply cloned.
-     *
-     * @return A clone of the mesh for animation use.
-     */
-    public Mesh cloneForAnim() {
-        Mesh clone = clone();
-        if (getBuffer(Type.BindPosePosition) != null) {
-            VertexBuffer oldPos = getBuffer(Type.Position);
-
-            // NOTE: creates deep clone
-            VertexBuffer newPos = oldPos.clone();
-            clone.clearBuffer(Type.Position);
-            clone.setBuffer(newPos);
-
-            if (getBuffer(Type.BindPoseNormal) != null) {
-                VertexBuffer oldNorm = getBuffer(Type.Normal);
-                VertexBuffer newNorm = oldNorm.clone();
-                clone.clearBuffer(Type.Normal);
-                clone.setBuffer(newNorm);
-
-                if (getBuffer(Type.BindPoseTangent) != null) {
-                    VertexBuffer oldTang = getBuffer(Type.Tangent);
-                    VertexBuffer newTang = oldTang.clone();
-                    clone.clearBuffer(Type.Tangent);
-                    clone.setBuffer(newTang);
-                }
-            }
-        }
-        return clone;
-    }
-
-    /**
-     *  Called internally by com.jme3.util.clone.Cloner.  Do not call directly.
-     */
-    @Override
-    public Mesh jmeClone() {
-        try {
-            Mesh clone = (Mesh) super.clone();
-            clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID;
-            return clone;
-        } catch (CloneNotSupportedException ex) {
-            throw new AssertionError();
-        }
-    }
-
-    /**
-     *  Called internally by com.jme3.util.clone.Cloner.  Do not call directly.
-     */
-    @Override
-    public void cloneFields(Cloner cloner, Object original) {
-        // Probably could clone this now but it will get regenerated anyway.
-        this.collisionTree = DEFAULT_COLLISION_TREE;
-
-        this.meshBound = cloner.clone(meshBound);
-        this.buffersList = cloner.clone(buffersList);
-        this.buffers = cloner.clone(buffers);
-        this.lodLevels = cloner.clone(lodLevels);
-        this.elementLengths = cloner.clone(elementLengths);
-        this.modeStart = cloner.clone(modeStart);
-    }
-
-    /**
-     * @param forSoftwareAnim ignored
-     * @deprecated use generateBindPose();
-     */
-    @Deprecated
-    public void generateBindPose(boolean forSoftwareAnim) {
-        generateBindPose();
-    }
-
-    /**
-     * Generates the {@link Type#BindPosePosition}, {@link Type#BindPoseNormal},
-     * and {@link Type#BindPoseTangent}
-     * buffers for this mesh by duplicating them based on the position and normal
-     * buffers already set on the mesh.
-     * This method does nothing if the mesh has no bone weight or index
-     * buffers.
-     */
-    public void generateBindPose() {
-        VertexBuffer pos = getBuffer(Type.Position);
-        if (pos == null || getBuffer(Type.BoneIndex) == null) {
-            // ignore, this mesh doesn't have positional data
-            // or it doesn't have bone-vertex assignments, so it's not animated
-            return;
-        }
-
-        VertexBuffer bindPos = new VertexBuffer(Type.BindPosePosition);
-        bindPos.setupData(Usage.CpuOnly,
-                pos.getNumComponents(),
-                pos.getFormat(),
-                BufferUtils.clone(pos.getData()));
-        setBuffer(bindPos);
-
-        // XXX: note that this method also sets stream mode
-        // so that animation is faster. this is not needed for hardware skinning
-        pos.setUsage(Usage.Stream);
-
-        VertexBuffer norm = getBuffer(Type.Normal);
-        if (norm != null) {
-            VertexBuffer bindNorm = new VertexBuffer(Type.BindPoseNormal);
-            bindNorm.setupData(Usage.CpuOnly,
-                    norm.getNumComponents(),
-                    norm.getFormat(),
-                    BufferUtils.clone(norm.getData()));
-            setBuffer(bindNorm);
-            norm.setUsage(Usage.Stream);
-        }
-
-        VertexBuffer tangents = getBuffer(Type.Tangent);
-        if (tangents != null) {
-            VertexBuffer bindTangents = new VertexBuffer(Type.BindPoseTangent);
-            bindTangents.setupData(Usage.CpuOnly,
-                    tangents.getNumComponents(),
-                    tangents.getFormat(),
-                    BufferUtils.clone(tangents.getData()));
-            setBuffer(bindTangents);
-            tangents.setUsage(Usage.Stream);
-        }// else hardware setup does nothing, mesh already in bind pose
-
-    }
-
-    /**
-     * Prepares the mesh for software skinning by converting the bone index
-     * and weight buffers to heap buffers.
-     *
-     * @param forSoftwareAnim Should be true to enable the conversion.
-     */
-    public void prepareForAnim(boolean forSoftwareAnim) {
-        if (forSoftwareAnim) {
-            // convert indices to ubytes on the heap
-            VertexBuffer indices = getBuffer(Type.BoneIndex);
-            if (!indices.getData().hasArray()) {
-                if (indices.getFormat() == Format.UnsignedByte) {
-                    ByteBuffer originalIndex = (ByteBuffer) indices.getData();
-                    ByteBuffer arrayIndex = ByteBuffer.allocate(originalIndex.capacity());
-                    originalIndex.clear();
-                    arrayIndex.put(originalIndex);
-                    indices.updateData(arrayIndex);
-                } else {
-                    //bone indices can be stored in an UnsignedShort buffer
-                    ShortBuffer originalIndex = (ShortBuffer) indices.getData();
-                    ShortBuffer arrayIndex = ShortBuffer.allocate(originalIndex.capacity());
-                    originalIndex.clear();
-                    arrayIndex.put(originalIndex);
-                    indices.updateData(arrayIndex);
-                }
-            }
-            indices.setUsage(Usage.CpuOnly);
-
-            // convert weights on the heap
-            VertexBuffer weights = getBuffer(Type.BoneWeight);
-            if (!weights.getData().hasArray()) {
-                FloatBuffer originalWeight = (FloatBuffer) weights.getData();
-                FloatBuffer arrayWeight = FloatBuffer.allocate(originalWeight.capacity());
-                originalWeight.clear();
-                arrayWeight.put(originalWeight);
-                weights.updateData(arrayWeight);
-            }
-            weights.setUsage(Usage.CpuOnly);
-            // position, normal, and tangent buffers to be in "Stream" mode
-            VertexBuffer positions = getBuffer(Type.Position);
-            VertexBuffer normals = getBuffer(Type.Normal);
-            VertexBuffer tangents = getBuffer(Type.Tangent);
-            positions.setUsage(Usage.Stream);
-            if (normals != null) {
-                normals.setUsage(Usage.Stream);
-            }
-            if (tangents != null) {
-                tangents.setUsage(Usage.Stream);
-            }
-        } else {
-            //if HWBoneIndex and HWBoneWeight are empty, we setup them as direct
-            //buffers with software anim buffers data
-            VertexBuffer indicesHW = getBuffer(Type.HWBoneIndex);
-            Buffer result;
-            if (indicesHW.getData() == null) {
-                VertexBuffer indices = getBuffer(Type.BoneIndex);
-                if (indices.getFormat() == Format.UnsignedByte) {
-                    ByteBuffer originalIndex = (ByteBuffer) indices.getData();
-                    ByteBuffer directIndex
-                            = BufferUtils.createByteBuffer(originalIndex.capacity());
-                    originalIndex.clear();
-                    directIndex.put(originalIndex);
-                    result = directIndex;
-                } else {
-                    //bone indices can be stored in an UnsignedShort buffer
-                    ShortBuffer originalIndex = (ShortBuffer) indices.getData();
-                    ShortBuffer directIndex
-                            = BufferUtils.createShortBuffer(originalIndex.capacity());
-                    originalIndex.clear();
-                    directIndex.put(originalIndex);
-                    result = directIndex;
-                }
-                indicesHW.setupData(Usage.Static, indices.getNumComponents(),
-                        indices.getFormat(), result);
-            }
-
-            VertexBuffer weightsHW = getBuffer(Type.HWBoneWeight);
-            if (weightsHW.getData() == null) {
-                VertexBuffer weights = getBuffer(Type.BoneWeight);
-                FloatBuffer originalWeight = (FloatBuffer) weights.getData();
-                FloatBuffer directWeight
-                        = BufferUtils.createFloatBuffer(originalWeight.capacity());
-                originalWeight.clear();
-                directWeight.put(originalWeight);
-                weightsHW.setupData(Usage.Static, weights.getNumComponents(),
-                        weights.getFormat(), directWeight);
-            }
-
-            // position, normal, and tangent buffers to be in "Static" mode
-            VertexBuffer positions = getBuffer(Type.Position);
-            VertexBuffer normals = getBuffer(Type.Normal);
-            VertexBuffer tangents = getBuffer(Type.Tangent);
-
-            VertexBuffer positionsBP = getBuffer(Type.BindPosePosition);
-            VertexBuffer normalsBP = getBuffer(Type.BindPoseNormal);
-            VertexBuffer tangentsBP = getBuffer(Type.BindPoseTangent);
-
-            positions.setUsage(Usage.Static);
-            positionsBP.copyElements(0, positions, 0, positionsBP.getNumElements());
-            positions.setUpdateNeeded();
-
-            if (normals != null) {
-                normals.setUsage(Usage.Static);
-                normalsBP.copyElements(0, normals, 0, normalsBP.getNumElements());
-                normals.setUpdateNeeded();
-            }
-
-            if (tangents != null) {
-                tangents.setUsage(Usage.Static);
-                tangentsBP.copyElements(0, tangents, 0, tangentsBP.getNumElements());
-                tangents.setUpdateNeeded();
-            }
-        }
-    }
-
-    /**
-     * Set the LOD (level of detail) index buffers on this mesh.
-     *
-     * @param lodLevels The LOD levels to set
-     */
-    public void setLodLevels(VertexBuffer[] lodLevels) {
-        this.lodLevels = lodLevels;
-    }
-
-    /**
-     * @return The number of LOD levels set on this mesh, including the main
-     * index buffer, returns zero if there are no lod levels.
-     */
-    public int getNumLodLevels() {
-        return lodLevels != null ? lodLevels.length : 0;
-    }
-
-    /**
-     * Returns the lod level at the given index.
-     *
-     * @param lod The lod level index, this does not include
-     * the main index buffer.
-     * @return The LOD index buffer at the index
-     *
-     * @throws IndexOutOfBoundsException If the index is outside of the
-     * range [0, {@link #getNumLodLevels()}].
-     *
-     * @see #setLodLevels(com.jme3.scene.VertexBuffer[])
-     */
-    public VertexBuffer getLodLevel(int lod) {
-        return lodLevels[lod];
-    }
-
-    /**
-     * Get the element lengths for {@link Mode#Hybrid} mesh mode.
-     *
-     * @return element lengths
-     */
-    public int[] getElementLengths() {
-        return elementLengths;
-    }
-
-    /**
-     * Set the element lengths for {@link Mode#Hybrid} mesh mode.
-     *
-     * @param elementLengths The element lengths to set
-     */
-    public void setElementLengths(int[] elementLengths) {
-        this.elementLengths = elementLengths;
-    }
-
-    /**
-     * Set the mode start indices for {@link Mode#Hybrid} mesh mode.
-     *
-     * @return mode start indices
-     */
-    public int[] getModeStart() {
-        return modeStart;
-    }
-
-    /**
-     * Get the mode start indices for {@link Mode#Hybrid} mesh mode.
-     *
-     * @param modeStart the pre-existing array
-     */
-    public void setModeStart(int[] modeStart) {
-        this.modeStart = modeStart;
-    }
-
-    /**
-     * Returns the mesh mode
-     *
-     * @return the mesh mode
-     *
-     * @see #setMode(Mesh.Mode)
-     */
-    public Mode getMode() {
-        return mode;
-    }
-
-    /**
-     * Change the Mesh's mode. By default the mode is {@link Mode#Triangles}.
-     *
-     * @param mode The new mode to set
-     *
-     * @see Mode
-     */
-    public void setMode(Mode mode) {
-        this.mode = mode;
-        updateCounts();
-    }
-
-    /**
-     * Returns the maximum number of weights per vertex on this mesh.
-     *
-     * @return maximum number of weights per vertex
-     *
-     * @see #setMaxNumWeights(int)
-     */
-    public int getMaxNumWeights() {
-        return maxNumWeights;
-    }
-
-    /**
-     * Set the maximum number of weights per vertex on this mesh.
-     * Only relevant if this mesh has bone index/weight buffers.
-     * This value should be between 0 and 4.
-     *
-     * @param maxNumWeights the desired number (between 0 and 4, inclusive)
-     */
-    public void setMaxNumWeights(int maxNumWeights) {
-        this.maxNumWeights = maxNumWeights;
-    }
-
-    /**
-     * @deprecated Always returns 1.0 since point size is
-     * determined in the vertex shader.
-     *
-     * @return 1.0
-     */
-    @Deprecated
-    public float getPointSize() {
-        return DEFAULT_POINT_SIZE;
-    }
-
-    /**
-     * Returns the line width for line meshes.
-     *
-     * @return the line width
-     * @deprecated use {@link Material#getAdditionalRenderState()}
-     *             and {@link RenderState#getLineWidth()}
-     */
-    @Deprecated
-    public float getLineWidth() {
-        return lineWidth;
-    }
-
-    /**
-     * Specify the line width for meshes of the line modes, such
-     * as {@link Mode#Lines}. The line width is specified as on-screen pixels,
-     * the default value is 1.0.
-     *
-     * @param lineWidth The line width
-     * @deprecated use {@link Material#getAdditionalRenderState()}
-     *             and {@link RenderState#setLineWidth(float)}
-     */
-    @Deprecated
-    public void setLineWidth(float lineWidth) {
-        if (lineWidth < 1f) {
-            throw new IllegalArgumentException("lineWidth must be greater than or equal to 1.0");
-        }
-        this.lineWidth = lineWidth;
-    }
-
-    /**
-     * Indicates to the GPU that this mesh will not be modified (a hint).
-     * Sets the usage mode to {@link Usage#Static}
-     * for all {@link VertexBuffer vertex buffers} on this Mesh.
-     */
-    public void setStatic() {
-        for (VertexBuffer vb : buffersList.getArray()) {
-            vb.setUsage(Usage.Static);
-        }
-    }
-
-    /**
-     * Indicates to the GPU that this mesh will be modified occasionally (a hint).
-     * Sets the usage mode to {@link Usage#Dynamic}
-     * for all {@link VertexBuffer vertex buffers} on this Mesh.
-     */
-    public void setDynamic() {
-        for (VertexBuffer vb : buffersList.getArray()) {
-            vb.setUsage(Usage.Dynamic);
-        }
-    }
-
-    /**
-     * Indicates to the GPU that this mesh will be modified every frame (a hint).
-     * Sets the usage mode to {@link Usage#Stream}
-     * for all {@link VertexBuffer vertex buffers} on this Mesh.
-     */
-    public void setStreamed() {
-        for (VertexBuffer vb : buffersList.getArray()) {
-            vb.setUsage(Usage.Stream);
-        }
-    }
-
-    /**
-     * Interleaves the data in this mesh. This operation cannot be reversed.
-     * Some GPUs may prefer the data in this format, however it is a good idea
-     * to avoid using this method as it disables some engine features.
-     */
-    @Deprecated
-    public void setInterleaved() {
-        ArrayList vbs = new ArrayList<>();
-        vbs.addAll(buffersList);
-
-//        ArrayList vbs = new ArrayList(buffers.values());
-        // index buffer not included when interleaving
-        vbs.remove(getBuffer(Type.Index));
-
-        int stride = 0; // aka bytes per vertex
-        for (int i = 0; i < vbs.size(); i++) {
-            VertexBuffer vb = vbs.get(i);
-//            if (vb.getFormat() != Format.Float){
-//                throw new UnsupportedOperationException("Cannot interleave vertex buffer.\n" +
-//                                                        "Contains not-float data.");
-//            }
-            stride += vb.componentsLength;
-            vb.getData().clear(); // reset position & limit (used later)
-        }
-
-        VertexBuffer allData = new VertexBuffer(Type.InterleavedData);
-        ByteBuffer dataBuf = BufferUtils.createByteBuffer(stride * getVertexCount());
-        allData.setupData(Usage.Static, 1, Format.UnsignedByte, dataBuf);
-
-        // adding buffer directly so that no update counts is forced
-        buffers.put(Type.InterleavedData.ordinal(), allData);
-        buffersList.add(allData);
-
-        for (int vert = 0; vert < getVertexCount(); vert++) {
-            for (int i = 0; i < vbs.size(); i++) {
-                VertexBuffer vb = vbs.get(i);
-                switch (vb.getFormat()) {
-                    case Float:
-                        FloatBuffer fb = (FloatBuffer) vb.getData();
-                        for (int comp = 0; comp < vb.components; comp++) {
-                            dataBuf.putFloat(fb.get());
-                        }
-                        break;
-                    case Byte:
-                    case UnsignedByte:
-                        ByteBuffer bb = (ByteBuffer) vb.getData();
-                        for (int comp = 0; comp < vb.components; comp++) {
-                            dataBuf.put(bb.get());
-                        }
-                        break;
-                    case Half:
-                    case Short:
-                    case UnsignedShort:
-                        ShortBuffer sb = (ShortBuffer) vb.getData();
-                        for (int comp = 0; comp < vb.components; comp++) {
-                            dataBuf.putShort(sb.get());
-                        }
-                        break;
-                    case Int:
-                    case UnsignedInt:
-                        IntBuffer ib = (IntBuffer) vb.getData();
-                        for (int comp = 0; comp < vb.components; comp++) {
-                            dataBuf.putInt(ib.get());
-                        }
-                        break;
-                    case Double:
-                        DoubleBuffer db = (DoubleBuffer) vb.getData();
-                        for (int comp = 0; comp < vb.components; comp++) {
-                            dataBuf.putDouble(db.get());
-                        }
-                        break;
-                }
-            }
-        }
-
-        int offset = 0;
-        for (VertexBuffer vb : vbs) {
-            vb.setOffset(offset);
-            vb.setStride(stride);
-
-            vb.updateData(null);
-            //vb.setupData(vb.usage, vb.components, vb.format, null);
-            offset += vb.componentsLength;
-        }
-    }
-
-    private int computeNumElements(int bufSize) {
-        switch (mode) {
-            case Triangles:
-                return bufSize / 3;
-            case TriangleFan:
-            case TriangleStrip:
-                return bufSize - 2;
-            case Points:
-                return bufSize;
-            case Lines:
-                return bufSize / 2;
-            case LineLoop:
-                return bufSize;
-            case LineStrip:
-                return bufSize - 1;
-            case Patch:
-                return bufSize / patchVertexCount;
-            default:
-                throw new UnsupportedOperationException();
-        }
-    }
-
-    private int computeInstanceCount() {
-        // Whatever the max of the base instance counts
-        int max = 0;
-        for (VertexBuffer vb : buffersList) {
-            if (vb.getBaseInstanceCount() > max) {
-                max = vb.getBaseInstanceCount();
-            }
-        }
-        return max;
-    }
-
-    /**
-     * Update the {@link #getVertexCount() vertex} and
-     * {@link #getTriangleCount() triangle} counts for this mesh
-     * based on the current data. This method should be called
-     * after the {@link Buffer#capacity() capacities} of the mesh's
-     * {@link VertexBuffer vertex buffers} has been altered.
-     *
-     * @throws IllegalStateException If this mesh is in
-     * {@link #setInterleaved() interleaved} format.
-     */
-    public void updateCounts() {
-        if (getBuffer(Type.InterleavedData) != null) {
-            throw new IllegalStateException("Should update counts before interleave");
-        }
-
-        VertexBuffer pb = getBuffer(Type.Position);
-        VertexBuffer ib = getBuffer(Type.Index);
-        if (pb != null) {
-            vertCount = pb.getData().limit() / pb.getNumComponents();
-        }
-        if (ib != null) {
-            elementCount = computeNumElements(ib.getData().limit());
-        } else {
-            elementCount = computeNumElements(vertCount);
-        }
-        instanceCount = computeInstanceCount();
-    }
-
-    /**
-     * Returns the triangle count for the given LOD level.
-     *
-     * @param lod The lod level to look up
-     * @return The triangle count for that LOD level
-     */
-    public int getTriangleCount(int lod) {
-        if (lodLevels != null) {
-            if (lod < 0) {
-                throw new IllegalArgumentException("LOD level cannot be < 0");
-            }
-
-            if (lod >= lodLevels.length) {
-                throw new IllegalArgumentException("LOD level " + lod + " does not exist!");
-            }
-
-            return computeNumElements(lodLevels[lod].getData().limit());
-        } else if (lod == 0) {
-            return elementCount;
-        } else {
-            throw new IllegalArgumentException("There are no LOD levels on the mesh!");
-        }
-    }
-
-    /**
-     * Returns how many triangles or elements are on this Mesh.
-     * This value is only updated when {@link #updateCounts() } is called.
-     * If the mesh mode is not a triangle mode, then this returns the
-     * number of elements/primitives, e.g. how many lines or how many points,
-     * instead of how many triangles.
-     *
-     * @return how many triangles/elements are on this Mesh.
-     */
-    public int getTriangleCount() {
-        return elementCount;
-    }
-
-    /**
-     * Returns the number of vertices on this mesh.
-     * The value is computed based on the position buffer, which
-     * must be set on all meshes.
-     *
-     * @return Number of vertices on the mesh
-     */
-    public int getVertexCount() {
-        return vertCount;
-    }
-
-    /**
-     * Returns the number of instances this mesh contains.  The instance
-     * count is based on any VertexBuffers with instancing set.
-     *
-     * @return the number of instances
-     */
-    public int getInstanceCount() {
-        return instanceCount;
-    }
-
-    /**
-     * Gets the triangle vertex positions at the given triangle index
-     * and stores them into the v1, v2, v3 arguments.
-     *
-     * @param index The index of the triangle.
-     * Should be between 0 and {@link #getTriangleCount()}.
-     *
-     * @param v1 Vector to contain first vertex position
-     * @param v2 Vector to contain second vertex position
-     * @param v3 Vector to contain third vertex position
-     */
-    public void getTriangle(int index, Vector3f v1, Vector3f v2, Vector3f v3) {
-        VertexBuffer pb = getBuffer(Type.Position);
-        IndexBuffer ib = getIndicesAsList();
-        if (pb != null && pb.getFormat() == Format.Float && pb.getNumComponents() == 3) {
-            FloatBuffer fpb = (FloatBuffer) pb.getData();
-
-            // acquire triangle's vertex indices
-            int vertIndex = index * 3;
-            int vert1 = ib.get(vertIndex);
-            int vert2 = ib.get(vertIndex + 1);
-            int vert3 = ib.get(vertIndex + 2);
-
-            BufferUtils.populateFromBuffer(v1, fpb, vert1);
-            BufferUtils.populateFromBuffer(v2, fpb, vert2);
-            BufferUtils.populateFromBuffer(v3, fpb, vert3);
-        } else {
-            throw new UnsupportedOperationException("Position buffer not set or "
-                    + " has incompatible format");
-        }
-    }
-
-    /**
-     * Gets the triangle vertex positions at the given triangle index
-     * and stores them into the {@link Triangle} argument.
-     * Also sets the triangle index to the index argument.
-     *
-     * @param index The index of the triangle.
-     * Should be between 0 and {@link #getTriangleCount()}.
-     *
-     * @param tri The triangle to store the positions in
-     */
-    public void getTriangle(int index, Triangle tri) {
-        getTriangle(index, tri.get1(), tri.get2(), tri.get3());
-        tri.setIndex(index);
-        tri.setCenter(null); // invalidate previously cached centroid, if any
-        tri.setNormal(null);
-    }
-
-    /**
-     * Gets the triangle vertex indices at the given triangle index
-     * and stores them into the given int array.
-     *
-     * @param index The index of the triangle.
-     * Should be between 0 and {@link #getTriangleCount()}.
-     *
-     * @param indices Indices of the triangle's vertices
-     */
-    public void getTriangle(int index, int[] indices) {
-        IndexBuffer ib = getIndicesAsList();
-
-        // acquire triangle's vertex indices
-        int vertIndex = index * 3;
-        indices[0] = ib.get(vertIndex);
-        indices[1] = ib.get(vertIndex + 1);
-        indices[2] = ib.get(vertIndex + 2);
-    }
-
-    /**
-     * Returns the mesh's VAO ID. Internal use only.
-     *
-     * @return the array ID
-     */
-    public int getId() {
-        return vertexArrayID;
-    }
-
-    /**
-     * Sets the mesh's VAO ID. Internal use only.
-     *
-     * @param id the array ID
-     */
-    public void setId(int id) {
-        if (vertexArrayID != DEFAULT_VERTEX_ARRAY_ID) {
-            throw new IllegalStateException("ID has already been set.");
-        }
-
-        vertexArrayID = id;
-    }
-
-    /**
-     * Generates a collision tree for the mesh.
-     * Called automatically by {@link #collideWith(com.jme3.collision.Collidable,
-     * com.jme3.math.Matrix4f,
-     * com.jme3.bounding.BoundingVolume,
-     * com.jme3.collision.CollisionResults) }.
-     */
-    public void createCollisionData() {
-        throw new UnsupportedOperationException("Collision tree not supported.");
-//        BIHTree tree = new BIHTree(this);
-//        tree.construct();
-//        collisionTree = tree;
-    }
-
-    /**
-     * Clears any previously generated collision data.  Use this if
-     * the mesh has changed in some way that invalidates any previously
-     * generated BIHTree.
-     */
-    public void clearCollisionData() {
-        collisionTree = DEFAULT_COLLISION_TREE;
-    }
-
-    /**
-     * Handles collision detection, internal use only.
-     * User code should only use collideWith() on scene
-     * graph elements such as {@link Spatial}s.
-     *
-     * @param other the other Collidable
-     * @param worldMatrix the world matrix
-     * @param worldBound the world bound
-     * @param results storage for the results
-     * @return the number of collisions detected (≥0)
-     */
-    public int collideWith(Collidable other,
-            Matrix4f worldMatrix,
-            BoundingVolume worldBound,
-            CollisionResults results) {
-
-        switch (mode) {
-            case Points:
-            case Lines:
-            case LineStrip:
-            case LineLoop:
-                /*
-                 * Collisions can be detected only with triangles,
-                 * and there are no triangles in this mesh.
-                 */
-                return 0;
-        }
-
-        if (getVertexCount() == 0) {
-            return 0;
-        }
-
-        if (collisionTree == null) {
-            createCollisionData();
-        }
-
-        return collisionTree.collideWith(other, worldMatrix, worldBound, results);
-    }
-
-    /**
-     * Sets the {@link VertexBuffer} on the mesh.
-     * This will update the vertex/triangle counts if needed.
-     *
-     * @param vb The buffer to set
-     * @throws IllegalArgumentException If the buffer type is already set
-     */
-    public void setBuffer(VertexBuffer vb) {
-        if (buffers.containsKey(vb.getBufferType().ordinal())) {
-            throw new IllegalArgumentException("Buffer type already set: " + vb.getBufferType());
-        }
-
-        buffers.put(vb.getBufferType().ordinal(), vb);
-        buffersList.add(vb);
-        updateCounts();
-    }
-
-    /**
-     * Unsets the {@link VertexBuffer} set on this mesh
-     * with the given type. Does nothing if the vertex buffer type is not set
-     * initially.
-     *
-     * @param type The buffer type to remove
-     */
-    public void clearBuffer(VertexBuffer.Type type) {
-        VertexBuffer vb = buffers.remove(type.ordinal());
-        if (vb != null) {
-            buffersList.remove(vb);
-            updateCounts();
-        }
-    }
-
-    /**
-     * Creates a {@link VertexBuffer} for the mesh or modifies
-     * the existing one per the parameters given.
-     *
-     * @param type The type of the buffer
-     * @param components Number of components
-     * @param format Data format
-     * @param buf The buffer data
-     *
-     * @throws UnsupportedOperationException If the buffer already set is
-     * incompatible with the parameters given.
-     */
-    public void setBuffer(Type type, int components, Format format, Buffer buf) {
-        VertexBuffer vb = buffers.get(type.ordinal());
-        if (vb == null) {
-            vb = new VertexBuffer(type);
-            vb.setupData(Usage.Dynamic, components, format, buf);
-            setBuffer(vb);
-        } else {
-            if (vb.getNumComponents() != components || vb.getFormat() != format) {
-                throw new UnsupportedOperationException("The buffer already set "
-                        + "is incompatible with the given parameters");
-            }
-            vb.updateData(buf);
-            updateCounts();
-        }
-    }
-
-    /**
-     * Set a floating point {@link VertexBuffer} on the mesh.
-     *
-     * @param type The type of {@link VertexBuffer},
-     * e.g. {@link Type#Position}, {@link Type#Normal}, etc.
-     *
-     * @param components Number of components on the vertex buffer, should
-     * be between 1 and 4.
-     *
-     * @param buf The floating point data to contain
-     */
-    public void setBuffer(Type type, int components, FloatBuffer buf) {
-        setBuffer(type, components, Format.Float, buf);
-    }
-
-    public void setBuffer(Type type, int components, float[] buf) {
-        setBuffer(type, components, BufferUtils.createFloatBuffer(buf));
-    }
+public interface Mesh extends Collidable, Savable {
 
-    public void setBuffer(Type type, int components, IntBuffer buf) {
-        setBuffer(type, components, Format.UnsignedInt, buf);
-    }
+    void bind(CommandBuffer cmd);
 
-    public void setBuffer(Type type, int components, int[] buf) {
-        setBuffer(type, components, BufferUtils.createIntBuffer(buf));
-    }
+    void draw(CommandBuffer cmd);
 
-    public void setBuffer(Type type, int components, ShortBuffer buf) {
-        setBuffer(type, components, Format.UnsignedShort, buf);
-    }
+    AttributeModifier modifyAttribute(String name);
 
-    public void setBuffer(Type type, int components, byte[] buf) {
-        setBuffer(type, components, BufferUtils.createByteBuffer(buf));
-    }
+    int getVertexCount();
 
-    public void setBuffer(Type type, int components, ByteBuffer buf) {
-        setBuffer(type, components, Format.UnsignedByte, buf);
-    }
+    int getTriangleCount();
 
-    public void setBuffer(Type type, int components, short[] buf) {
-        setBuffer(type, components, BufferUtils.createShortBuffer(buf));
-    }
+    int collideWith(Collidable other, Geometry geometry, CollisionResults results);
 
-    /**
-     * Get the {@link VertexBuffer} stored on this mesh with the given
-     * type.
-     *
-     * @param type The type of VertexBuffer
-     * @return the VertexBuffer data, or null if not set
-     */
-    public VertexBuffer getBuffer(Type type) {
-        return buffers.get(type.ordinal());
-    }
+    void updateBound();
 
-    /**
-     * Get the {@link VertexBuffer} data stored on this mesh in float
-     * format.
-     *
-     * @param type The type of VertexBuffer
-     * @return the VertexBuffer data, or null if not set
-     */
-    public FloatBuffer getFloatBuffer(Type type) {
-        VertexBuffer vb = getBuffer(type);
-        if (vb == null) {
-            return null;
-        }
+    void setBound(BoundingVolume volume);
 
-        return (FloatBuffer) vb.getData();
-    }
+    BoundingVolume getBound();
 
-    /**
-     * Get the {@link VertexBuffer} data stored on this mesh in short
-     * format.
-     *
-     * @param type The type of VertexBuffer
-     * @return the VertexBuffer data, or null if not set
-     */
-    public ShortBuffer getShortBuffer(Type type) {
-        VertexBuffer vb = getBuffer(type);
-        if (vb == null) {
-            return null;
-        }
+    int getNumLodLevels();
 
-        return (ShortBuffer) vb.getData();
+    default AttributeModifier modifyAttribute(BuiltInAttribute name) {
+        return modifyAttribute(name.getName());
     }
 
-    /**
-     * Acquires an index buffer that will read the vertices on the mesh
-     * as a list.
-     *
-     * @return A virtual or wrapped index buffer to read the data as a list
-     */
-    public IndexBuffer getIndicesAsList() {
-        if (mode == Mode.Hybrid) {
-            throw new UnsupportedOperationException("Hybrid mode not supported");
-        }
-
-        IndexBuffer ib = getIndexBuffer();
-        if (ib != null) {
-            if (mode.isListMode()) {
-                // already in list mode
-                return ib;
-            } else {
-                // not in list mode but it does have an index buffer
-                // wrap it so the data is converted to list format
-                return new WrappedIndexBuffer(this);
-            }
-        } else {
-            // return a virtual index buffer that will supply
-            // "fake" indices in list format
-            return new VirtualIndexBuffer(vertCount, mode);
-        }
-    }
-
-    /**
-     * Get the index buffer for this mesh.
-     * Will return null if no index buffer is set.
-     *
-     * @return The index buffer of this mesh.
-     *
-     * @see Type#Index
-     */
-    public IndexBuffer getIndexBuffer() {
-        VertexBuffer vb = getBuffer(Type.Index);
-        if (vb == null) {
-            return null;
-        }
-
-        return IndexBuffer.wrapIndexBuffer(vb.getData());
-    }
-
-    /**
-     * Extracts the vertex attributes from the given mesh into
-     * this mesh, by using this mesh's {@link #getIndexBuffer() index buffer}
-     * to index into the attributes of the other mesh.
-     * Note that this will also change this mesh's index buffer so that
-     * the references to the vertex data match the new indices.
-     *
-     * @param other The mesh to extract the vertex data from
-     */
-    public void extractVertexData(Mesh other) {
-        // Determine the number of unique vertices need to
-        // be created. Also determine the mappings
-        // between old indices to new indices (since we avoid duplicating
-        // vertices, this is a map and not an array).
-        VertexBuffer oldIdxBuf = getBuffer(Type.Index);
-        IndexBuffer indexBuf = getIndexBuffer();
-        int numIndices = indexBuf.size();
-
-        IntMap oldIndicesToNewIndices = new IntMap<>(numIndices);
-        ArrayList newIndicesToOldIndices = new ArrayList<>();
-        int newIndex = 0;
-
-        for (int i = 0; i < numIndices; i++) {
-            int oldIndex = indexBuf.get(i);
-
-            if (!oldIndicesToNewIndices.containsKey(oldIndex)) {
-                // this vertex has not been added, so allocate a
-                // new index for it and add it to the map
-                oldIndicesToNewIndices.put(oldIndex, newIndex);
-                newIndicesToOldIndices.add(oldIndex);
-
-                // increment to have the next index
-                newIndex++;
-            }
-        }
-
-        // Number of unique verts to be created now available
-        int newNumVerts = newIndicesToOldIndices.size();
-
-        if (newIndex != newNumVerts) {
-            throw new AssertionError();
-        }
-
-        // Create the new index buffer.
-        // Do not overwrite the old one because we might be able to
-        // convert from int index buffer to short index buffer
-        IndexBuffer newIndexBuf;
-        if (newNumVerts >= 65536) {
-            newIndexBuf = new IndexIntBuffer(BufferUtils.createIntBuffer(numIndices));
-        } else {
-            newIndexBuf = new IndexShortBuffer(BufferUtils.createShortBuffer(numIndices));
-        }
-
-        for (int i = 0; i < numIndices; i++) {
-            // Map the old indices to the new indices
-            int oldIndex = indexBuf.get(i);
-            newIndex = oldIndicesToNewIndices.get(oldIndex);
-
-            newIndexBuf.put(i, newIndex);
-        }
-
-        VertexBuffer newIdxBuf = new VertexBuffer(Type.Index);
-        newIdxBuf.setupData(oldIdxBuf.getUsage(),
-                oldIdxBuf.getNumComponents(),
-                newIndexBuf instanceof IndexIntBuffer ? Format.UnsignedInt : Format.UnsignedShort,
-                newIndexBuf.getBuffer());
-        clearBuffer(Type.Index);
-        setBuffer(newIdxBuf);
-
-        // Now, create the vertex buffers
-        SafeArrayList oldVertexData = other.getBufferList();
-        for (VertexBuffer oldVb : oldVertexData) {
-            if (oldVb.getBufferType() == VertexBuffer.Type.Index) {
-                // ignore the index buffer
-                continue;
-            }
-
-            VertexBuffer newVb = new VertexBuffer(oldVb.getBufferType());
-            newVb.setNormalized(oldVb.isNormalized());
-            //check for data before copying, some buffers are just empty shells
-            //for caching purpose (HW skinning buffers), and will be filled when
-            //needed
-            if (oldVb.getData() != null) {
-                // Create a new vertex buffer with similar configuration, but
-                // with the capacity of number of unique vertices
-                Buffer buffer = VertexBuffer.createBuffer(oldVb.getFormat(),
-                        oldVb.getNumComponents(), newNumVerts);
-                newVb.setupData(oldVb.getUsage(), oldVb.getNumComponents(),
-                        oldVb.getFormat(), buffer);
-
-                // Copy the vertex data from the old buffer into the new buffer
-                for (int i = 0; i < newNumVerts; i++) {
-                    int oldIndex = newIndicesToOldIndices.get(i);
-
-                    // Copy the vertex attribute from the old index
-                    // to the new index
-                    oldVb.copyElement(oldIndex, newVb, i);
-                }
-            }
-
-            // Set the buffer on the mesh
-            clearBuffer(newVb.getBufferType());
-            setBuffer(newVb);
-        }
-
-        // Copy max weights per vertex as well
-        setMaxNumWeights(other.getMaxNumWeights());
-
-        // The data has been copied over, update information
-        updateCounts();
-        updateBound();
-    }
-
-    /**
-     * Scales the texture coordinate buffer on this mesh by the given scale
-     * factor.
-     * 

- * Note that values above 1 will cause the - * texture to tile, while values below 1 will cause the texture - * to stretch. - *

- * - * @param scaleFactor The scale factor to scale by. Every texture - * coordinate is multiplied by this vector to get the result. - * - * @throws IllegalStateException If there's no texture coordinate - * buffer on the mesh - * @throws UnsupportedOperationException If the texture coordinate - * buffer is not in 2D float format. - */ - public void scaleTextureCoordinates(Vector2f scaleFactor) { - VertexBuffer tc = getBuffer(Type.TexCoord); - if (tc == null) { - throw new IllegalStateException("The mesh has no texture coordinates"); - } - - if (tc.getFormat() != VertexBuffer.Format.Float) { - throw new UnsupportedOperationException("Only float texture coord format is supported"); - } - - if (tc.getNumComponents() != 2) { - throw new UnsupportedOperationException("Only 2D texture coords are supported"); - } - - FloatBuffer fb = (FloatBuffer) tc.getData(); - fb.clear(); - for (int i = 0; i < fb.limit() / 2; i++) { - float x = fb.get(); - float y = fb.get(); - fb.position(fb.position() - 2); - x *= scaleFactor.getX(); - y *= scaleFactor.getY(); - fb.put(x).put(y); - } - fb.clear(); - tc.updateData(fb); - } - - /** - * Updates the bounding volume of this mesh. - * The method does nothing if the mesh has no {@link Type#Position} buffer. - * It is expected that the position buffer is a float buffer with 3 components. - */ - public void updateBound() { - VertexBuffer posBuf = getBuffer(VertexBuffer.Type.Position); - if (meshBound != null && posBuf != null) { - meshBound.computeFromPoints((FloatBuffer) posBuf.getData()); - } - } - - /** - * Returns the {@link BoundingVolume} of this Mesh. - * By default the bounding volume is a {@link BoundingBox}. - * - * @return the bounding volume of this mesh - */ - public BoundingVolume getBound() { - return meshBound; - } - - /** - * Sets the {@link BoundingVolume} for this Mesh. - * The bounding volume is recomputed by calling {@link #updateBound() }. - * - * @param modelBound The model bound to set - */ - public void setBound(BoundingVolume modelBound) { - meshBound = modelBound; - } - - /** - * Returns a map of all {@link VertexBuffer vertex buffers} on this Mesh. - * The integer key for the map is the {@link Enum#ordinal() ordinal} - * of the vertex buffer's {@link Type}. - * Note that the returned map is a reference to the map used internally, - * modifying it will cause undefined results. - * - * @return map of vertex buffers on this mesh. - */ - public IntMap getBuffers() { - return buffers; - } - - /** - * Returns a list of all {@link VertexBuffer vertex buffers} on this Mesh. - * Using a list instead an IntMap via the {@link #getBuffers() } method is - * better for iteration as there's no need to create an iterator instance. - * Note that the returned list is a reference to the list used internally, - * modifying it will cause undefined results. - * - * @return list of vertex buffers on this mesh. - */ - public SafeArrayList getBufferList() { - return buffersList; - } - - /** - * Determines if the mesh uses bone animation. - * - * A mesh uses bone animation if it has bone index / weight buffers - * such as {@link Type#BoneIndex} or {@link Type#HWBoneIndex}. - * - * @return true if the mesh uses bone animation, false otherwise - */ - public boolean isAnimated() { - return getBuffer(Type.BoneIndex) != null - || getBuffer(Type.HWBoneIndex) != null; - } - - /** - * @deprecated use isAnimatedByJoint - * @param boneIndex the bone's index in its skeleton - * @return true if animated by that bone, otherwise false - */ - @Deprecated - public boolean isAnimatedByBone(int boneIndex) { - return isAnimatedByJoint(boneIndex); - } - - /** - * Test whether the specified bone animates this mesh. - * - * @param jointIndex the bone's index in its skeleton - * @return true if the specified bone animates this mesh, otherwise false - */ - public boolean isAnimatedByJoint(int jointIndex) { - VertexBuffer biBuf = getBuffer(VertexBuffer.Type.BoneIndex); - VertexBuffer wBuf = getBuffer(VertexBuffer.Type.BoneWeight); - if (biBuf == null || wBuf == null) { - return false; // no bone animation data - } - - IndexBuffer boneIndexBuffer = IndexBuffer.wrapIndexBuffer(biBuf.getData()); - boneIndexBuffer.rewind(); - int numBoneIndices = boneIndexBuffer.remaining(); - assert numBoneIndices % 4 == 0 : numBoneIndices; - int numVertices = boneIndexBuffer.remaining() / 4; - - FloatBuffer weightBuffer = (FloatBuffer) wBuf.getData(); - weightBuffer.rewind(); - int numWeights = weightBuffer.remaining(); - assert numWeights == numVertices * 4 : numWeights; - /* - * Test each vertex to determine whether the bone affects it. - */ - int biByte = jointIndex; - for (int vIndex = 0; vIndex < numVertices; vIndex++) { - for (int wIndex = 0; wIndex < 4; wIndex++) { - int bIndex = boneIndexBuffer.get(); - float weight = weightBuffer.get(); - if (wIndex < maxNumWeights && bIndex == biByte && weight != 0f) { - return true; - } - } - } - return false; - } - - /** - * Sets the count of vertices used for each tessellation patch - * - * @param patchVertexCount the desired count - */ - public void setPatchVertexCount(int patchVertexCount) { - this.patchVertexCount = patchVertexCount; - } - - /** - * Gets the amount of vertices used for each patch; - * - * @return the count (≥0) - */ - public int getPatchVertexCount() { - return patchVertexCount; - } - - public void addMorphTarget(MorphTarget target) { - if (morphTargets == null) { - morphTargets = new SafeArrayList<>(MorphTarget.class); - } - morphTargets.add(target); - } - - /** - * Remove the given MorphTarget from the Mesh - * @param target The MorphTarget to remove - * @return If the MorphTarget was removed - */ - public boolean removeMorphTarget(MorphTarget target) { - return morphTargets != null ? morphTargets.remove(target) : false; - } - - /** - * Remove the MorphTarget from the Mesh at the given index - * @throws IndexOutOfBoundsException if the index outside the number of morph targets - * @param index Index of the MorphTarget to remove - * @return The MorphTarget that was removed - */ - public MorphTarget removeMorphTarget(int index) { - if (morphTargets == null) { - throw new IndexOutOfBoundsException("Index:" + index + ", Size:0"); - } - return morphTargets.remove(index); - } - - /** - * Get the MorphTarget at the given index - * @throws IndexOutOfBoundsException if the index outside the number of morph targets - * @param index The index of the morph target to get - * @return The MorphTarget at the index - */ - public MorphTarget getMorphTarget(int index) { - if (morphTargets == null) { - throw new IndexOutOfBoundsException("Index:" + index + ", Size:0"); - } - return morphTargets.get(index); - } - - public MorphTarget[] getMorphTargets() { - if (morphTargets == null) { - return new MorphTarget[0]; - } else { - return morphTargets.getArray(); - } - } - - /** - * Get the name of all morphs in order. - * Morphs without names will be null - * @return an array - */ - public String[] getMorphTargetNames() { - MorphTarget[] nbMorphTargets = getMorphTargets(); - if (nbMorphTargets.length == 0) { - return new String[0]; - } - String[] targets = new String[nbMorphTargets.length]; - - for (int index = 0; index < nbMorphTargets.length; index++) { - targets[index] = nbMorphTargets[index].getName(); - } - return targets; - } - - public boolean hasMorphTargets() { - return morphTargets != null && !morphTargets.isEmpty(); - } - - /** - * Get the index of the morph that has the given name. - * - * @param morphName The name of the morph to search for - * @return The index of the morph, or -1 if not found. - */ - public int getMorphIndex(String morphName) { - int index = -1; - MorphTarget[] nbMorphTargets = getMorphTargets(); - for (int i = 0; i < nbMorphTargets.length; i++) { - if (nbMorphTargets[i].getName().equals(morphName)) { - index = i; - break; - } - } - return index; - } - - @Override - @SuppressWarnings("unchecked") - public void write(JmeExporter ex) throws IOException { - OutputCapsule out = ex.getCapsule(this); - - out.write(meshBound, "modelBound", null); - out.write(vertCount, "vertCount", DEFAULT_VERT_COUNT); - out.write(elementCount, "elementCount", DEFAULT_ELEMENT_COUNT); - out.write(instanceCount, "instanceCount", DEFAULT_INSTANCE_COUNT); - out.write(maxNumWeights, "max_num_weights", DEFAULT_MAX_NUM_WEIGHTS); - out.write(mode, "mode", Mode.Triangles); - out.write(collisionTree, "collisionTree", DEFAULT_COLLISION_TREE); - out.write(elementLengths, "elementLengths", null); - out.write(modeStart, "modeStart", null); - out.write(pointSize, "pointSize", DEFAULT_POINT_SIZE); - - //Removing HW skinning buffers to not save them - VertexBuffer hwBoneIndex = null; - VertexBuffer hwBoneWeight = null; - hwBoneIndex = getBuffer(Type.HWBoneIndex); - if (hwBoneIndex != null) { - buffers.remove(Type.HWBoneIndex.ordinal()); - } - hwBoneWeight = getBuffer(Type.HWBoneWeight); - if (hwBoneWeight != null) { - buffers.remove(Type.HWBoneWeight.ordinal()); - } - - out.writeIntSavableMap(buffers, "buffers", null); - - //restoring Hw skinning buffers. - if (hwBoneIndex != null) { - buffers.put(hwBoneIndex.getBufferType().ordinal(), hwBoneIndex); - } - if (hwBoneWeight != null) { - buffers.put(hwBoneWeight.getBufferType().ordinal(), hwBoneWeight); - } - - out.write(lodLevels, "lodLevels", null); - if (morphTargets != null) { - out.writeSavableArrayList(new ArrayList(morphTargets), "morphTargets", null); - } - } - - @Override - @SuppressWarnings("unchecked") - public void read(JmeImporter im) throws IOException { - InputCapsule in = im.getCapsule(this); - meshBound = (BoundingVolume) in.readSavable("modelBound", null); - vertCount = in.readInt("vertCount", DEFAULT_VERT_COUNT); - elementCount = in.readInt("elementCount", DEFAULT_ELEMENT_COUNT); - instanceCount = in.readInt("instanceCount", DEFAULT_INSTANCE_COUNT); - maxNumWeights = in.readInt("max_num_weights", DEFAULT_MAX_NUM_WEIGHTS); - mode = in.readEnum("mode", Mode.class, Mode.Triangles); - elementLengths = in.readIntArray("elementLengths", null); - modeStart = in.readIntArray("modeStart", null); - collisionTree = (BIHTree) in.readSavable("collisionTree", DEFAULT_COLLISION_TREE); - elementLengths = in.readIntArray("elementLengths", null); - modeStart = in.readIntArray("modeStart", null); - pointSize = in.readFloat("pointSize", DEFAULT_POINT_SIZE); - -// in.readStringSavableMap("buffers", null); - buffers = (IntMap) in.readIntSavableMap("buffers", null); - for (Entry entry : buffers) { - buffersList.add(entry.getValue()); - } - - //creating hw animation buffers empty so that they are put in the cache - if (isAnimated()) { - VertexBuffer hwBoneIndex = new VertexBuffer(Type.HWBoneIndex); - hwBoneIndex.setUsage(Usage.CpuOnly); - setBuffer(hwBoneIndex); - VertexBuffer hwBoneWeight = new VertexBuffer(Type.HWBoneWeight); - hwBoneWeight.setUsage(Usage.CpuOnly); - setBuffer(hwBoneWeight); - } - - Savable[] lodLevelsSavable = in.readSavableArray("lodLevels", null); - if (lodLevelsSavable != null) { - lodLevels = new VertexBuffer[lodLevelsSavable.length]; - System.arraycopy(lodLevelsSavable, 0, lodLevels, 0, lodLevels.length); - } - - ArrayList l = in.readSavableArrayList("morphTargets", null); - if (l != null) { - morphTargets = new SafeArrayList(MorphTarget.class, l); - } - } } diff --git a/jme3-core/src/main/java/com/jme3/scene/OldMesh.java b/jme3-core/src/main/java/com/jme3/scene/OldMesh.java new file mode 100644 index 0000000000..e949a606dd --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/scene/OldMesh.java @@ -0,0 +1,1759 @@ +/* + * Copyright (c) 2009-2022 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.scene; + +import com.jme3.bounding.BoundingBox; +import com.jme3.bounding.BoundingVolume; +import com.jme3.collision.Collidable; +import com.jme3.collision.CollisionResults; +import com.jme3.collision.UnsupportedCollisionException; +import com.jme3.collision.bih.BIHTree; +import com.jme3.export.*; +import com.jme3.material.Material; +import com.jme3.material.RenderState; +import com.jme3.math.*; +import com.jme3.scene.VertexBuffer.*; +import com.jme3.scene.mesh.*; +import com.jme3.util.*; +import com.jme3.util.IntMap.Entry; +import com.jme3.util.clone.Cloner; +import com.jme3.util.clone.JmeCloneable; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.mesh.AttributeModifier; + +import java.io.IOException; +import java.nio.*; +import java.util.ArrayList; + +/** + * Mesh is used to store rendering data. + *

+ * All visible elements in a scene are represented by meshes. + * Meshes may contain three types of geometric primitives: + *

    + *
  • Points - Every vertex represents a single point in space. + *
  • Lines - 2 vertices represent a line segment, with the width specified + * via {@link Material#getAdditionalRenderState()} and {@link RenderState#setLineWidth(float)}.
  • + *
  • Triangles - 3 vertices represent a solid triangle primitive.
  • + *
+ * + * @author Kirill Vainer + */ +@Deprecated +public class OldMesh implements Mesh, Savable, Cloneable, JmeCloneable { + + @Override + public int collideWith(Collidable other, CollisionResults results) throws UnsupportedCollisionException { + return 0; + } + + /** + * The mode of the Mesh specifies both the type of primitive represented + * by the mesh and how the data should be interpreted. + */ + public enum Mode { + /** + * A primitive is a single point in space. The size of {@link Mode#Points points} are + * determined via the vertex shader's gl_PointSize output. + */ + Points(true), + /** + * A primitive is a line segment. Every two vertices specify + * a single line. {@link Material#getAdditionalRenderState()} + * and {@link RenderState#setLineWidth(float)} can be used + * to set the width of the lines. + */ + Lines(true), + /** + * A primitive is a line segment. The first two vertices specify + * a single line, while subsequent vertices are combined with the + * previous vertex to make a line. {@link Material#getAdditionalRenderState()} + * and {@link RenderState#setLineWidth(float)} can + * be used to set the width of the lines. + */ + LineStrip(false), + /** + * Identical to {@link #LineStrip} except that at the end + * the last vertex is connected with the first to form a line. + * {@link Material#getAdditionalRenderState()} + * and {@link RenderState#setLineWidth(float)} can be used + * to set the width of the lines. + */ + LineLoop(false), + /** + * A primitive is a triangle. Each 3 vertices specify a single + * triangle. + */ + Triangles(true), + /** + * Similar to {@link #Triangles}, the first 3 vertices + * specify a triangle, while subsequent vertices are combined with + * the previous two to form a triangle. + */ + TriangleStrip(false), + /** + * Similar to {@link #Triangles}, the first 3 vertices + * specify a triangle, each 2 subsequent vertices are combined + * with the very first vertex to make a triangle. + */ + TriangleFan(false), + /** + * A combination of various triangle modes. It is best to avoid + * using this mode as it may not be supported by all renderers. + * The {@link OldMesh#setModeStart(int[]) mode start points} and + * {@link OldMesh#setElementLengths(int[]) element lengths} must + * be specified for this mode. + */ + Hybrid(false), + /** + * Used for Tessellation only. Requires to set the number of vertices + * for each patch (default is 3 for triangle tessellation) + */ + Patch(true); + + private boolean listMode = false; + + private Mode(boolean listMode) { + this.listMode = listMode; + } + + /** + * Returns true if the specified mode is a list mode (meaning + * ,it specifies the indices as a linear list and not some special + * format). + * Will return true for the types {@link #Points}, {@link #Lines} and + * {@link #Triangles}. + * + * @return true if the mode is a list type mode + */ + public boolean isListMode() { + return listMode; + } + } + + /** + * Default Variables + */ + private static final int DEFAULT_VERTEX_ARRAY_ID = -1; + private static final CollisionData DEFAULT_COLLISION_TREE = null; + + private static final float DEFAULT_POINT_SIZE = 1.0f; + private static final float DEFAULT_LINE_WIDTH = 1.0f; + + private static final int DEFAULT_VERT_COUNT = -1; + private static final int DEFAULT_ELEMENT_COUNT = -1; + private static final int DEFAULT_INSTANCE_COUNT = -1; + private static final int DEFAULT_PATCH_VERTEX_COUNT = 3; + private static final int DEFAULT_MAX_NUM_WEIGHTS = -1; + + /** + * The bounding volume that contains the mesh entirely. + * By default a BoundingBox (AABB). + */ + private BoundingVolume meshBound = new BoundingBox(); + + private CollisionData collisionTree = DEFAULT_COLLISION_TREE; + + private SafeArrayList buffersList = new SafeArrayList<>(VertexBuffer.class); + private IntMap buffers = new IntMap<>(); + private VertexBuffer[] lodLevels; + + private float pointSize = DEFAULT_POINT_SIZE; + private float lineWidth = DEFAULT_LINE_WIDTH; + + private transient int vertexArrayID = DEFAULT_VERTEX_ARRAY_ID; + + private int vertCount = DEFAULT_VERT_COUNT; + private int elementCount = DEFAULT_ELEMENT_COUNT; + private int instanceCount = DEFAULT_INSTANCE_COUNT; + private int patchVertexCount = DEFAULT_PATCH_VERTEX_COUNT; //only used for tessellation + private int maxNumWeights = DEFAULT_MAX_NUM_WEIGHTS; // only if using skeletal animation + + private int[] elementLengths; + private int[] modeStart; + + private Mode mode = Mode.Triangles; + + private SafeArrayList morphTargets; + + /** + * Creates a new mesh with no {@link VertexBuffer vertex buffers}. + */ + public OldMesh() { + } + + /** + * Create a shallow clone of this Mesh. The {@link VertexBuffer vertex + * buffers} are shared between this and the clone mesh, the rest + * of the data is cloned. + * + * @return A shallow clone of the mesh + */ + @Override + public OldMesh clone() { + try { + OldMesh clone = (OldMesh) super.clone(); + clone.meshBound = meshBound.clone(); + clone.collisionTree = collisionTree != null ? collisionTree : null; + clone.buffers = buffers.clone(); + clone.buffersList = new SafeArrayList<>(VertexBuffer.class, buffersList); + clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID; + if (elementLengths != null) { + clone.elementLengths = elementLengths.clone(); + } + if (modeStart != null) { + clone.modeStart = modeStart.clone(); + } + return clone; + } catch (CloneNotSupportedException ex) { + throw new AssertionError(); + } + } + + /** + * Creates a deep clone of this mesh. + * The {@link VertexBuffer vertex buffers} and the data inside them + * is cloned. + * + * @return a deep clone of this mesh. + */ + public OldMesh deepClone() { + try { + OldMesh clone = (OldMesh) super.clone(); + clone.meshBound = meshBound != null ? meshBound.clone() : null; + + // TODO: Collision tree cloning + //clone.collisionTree = collisionTree != null ? collisionTree : null; + clone.collisionTree = DEFAULT_COLLISION_TREE; // it will get re-generated in any case + + clone.buffers = new IntMap<>(); + clone.buffersList = new SafeArrayList<>(VertexBuffer.class); + for (VertexBuffer vb : buffersList.getArray()) { + VertexBuffer bufClone = vb.clone(); + clone.buffers.put(vb.getBufferType().ordinal(), bufClone); + clone.buffersList.add(bufClone); + } + + clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID; + clone.vertCount = vertCount; + clone.elementCount = elementCount; + clone.instanceCount = instanceCount; + + // although this could change + // if the bone weight/index buffers are modified + clone.maxNumWeights = maxNumWeights; + + clone.elementLengths = elementLengths != null ? elementLengths.clone() : null; + clone.modeStart = modeStart != null ? modeStart.clone() : null; + return clone; + } catch (CloneNotSupportedException ex) { + throw new AssertionError(); + } + } + + /** + * Clone the mesh for animation use. + * This creates a shallow clone of the mesh, sharing most + * of the {@link VertexBuffer vertex buffer} data, however the + * {@link Type#Position}, {@link Type#Normal}, and {@link Type#Tangent} buffers + * are deeply cloned. + * + * @return A clone of the mesh for animation use. + */ + public OldMesh cloneForAnim() { + OldMesh clone = clone(); + if (getBuffer(Type.BindPosePosition) != null) { + VertexBuffer oldPos = getBuffer(Type.Position); + + // NOTE: creates deep clone + VertexBuffer newPos = oldPos.clone(); + clone.clearBuffer(Type.Position); + clone.setBuffer(newPos); + + if (getBuffer(Type.BindPoseNormal) != null) { + VertexBuffer oldNorm = getBuffer(Type.Normal); + VertexBuffer newNorm = oldNorm.clone(); + clone.clearBuffer(Type.Normal); + clone.setBuffer(newNorm); + + if (getBuffer(Type.BindPoseTangent) != null) { + VertexBuffer oldTang = getBuffer(Type.Tangent); + VertexBuffer newTang = oldTang.clone(); + clone.clearBuffer(Type.Tangent); + clone.setBuffer(newTang); + } + } + } + return clone; + } + + /** + * Called internally by com.jme3.util.clone.Cloner. Do not call directly. + */ + @Override + public OldMesh jmeClone() { + try { + OldMesh clone = (OldMesh) super.clone(); + clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID; + return clone; + } catch (CloneNotSupportedException ex) { + throw new AssertionError(); + } + } + + /** + * Called internally by com.jme3.util.clone.Cloner. Do not call directly. + */ + @Override + public void cloneFields(Cloner cloner, Object original) { + // Probably could clone this now but it will get regenerated anyway. + this.collisionTree = DEFAULT_COLLISION_TREE; + + this.meshBound = cloner.clone(meshBound); + this.buffersList = cloner.clone(buffersList); + this.buffers = cloner.clone(buffers); + this.lodLevels = cloner.clone(lodLevels); + this.elementLengths = cloner.clone(elementLengths); + this.modeStart = cloner.clone(modeStart); + } + + /** + * @param forSoftwareAnim ignored + * @deprecated use generateBindPose(); + */ + @Deprecated + public void generateBindPose(boolean forSoftwareAnim) { + generateBindPose(); + } + + /** + * Generates the {@link Type#BindPosePosition}, {@link Type#BindPoseNormal}, + * and {@link Type#BindPoseTangent} + * buffers for this mesh by duplicating them based on the position and normal + * buffers already set on the mesh. + * This method does nothing if the mesh has no bone weight or index + * buffers. + */ + public void generateBindPose() { + VertexBuffer pos = getBuffer(Type.Position); + if (pos == null || getBuffer(Type.BoneIndex) == null) { + // ignore, this mesh doesn't have positional data + // or it doesn't have bone-vertex assignments, so it's not animated + return; + } + + VertexBuffer bindPos = new VertexBuffer(Type.BindPosePosition); + bindPos.setupData(Usage.CpuOnly, + pos.getNumComponents(), + pos.getFormat(), + BufferUtils.clone(pos.getData())); + setBuffer(bindPos); + + // XXX: note that this method also sets stream mode + // so that animation is faster. this is not needed for hardware skinning + pos.setUsage(Usage.Stream); + + VertexBuffer norm = getBuffer(Type.Normal); + if (norm != null) { + VertexBuffer bindNorm = new VertexBuffer(Type.BindPoseNormal); + bindNorm.setupData(Usage.CpuOnly, + norm.getNumComponents(), + norm.getFormat(), + BufferUtils.clone(norm.getData())); + setBuffer(bindNorm); + norm.setUsage(Usage.Stream); + } + + VertexBuffer tangents = getBuffer(Type.Tangent); + if (tangents != null) { + VertexBuffer bindTangents = new VertexBuffer(Type.BindPoseTangent); + bindTangents.setupData(Usage.CpuOnly, + tangents.getNumComponents(), + tangents.getFormat(), + BufferUtils.clone(tangents.getData())); + setBuffer(bindTangents); + tangents.setUsage(Usage.Stream); + }// else hardware setup does nothing, mesh already in bind pose + + } + + /** + * Prepares the mesh for software skinning by converting the bone index + * and weight buffers to heap buffers. + * + * @param forSoftwareAnim Should be true to enable the conversion. + */ + public void prepareForAnim(boolean forSoftwareAnim) { + if (forSoftwareAnim) { + // convert indices to ubytes on the heap + VertexBuffer indices = getBuffer(Type.BoneIndex); + if (!indices.getData().hasArray()) { + if (indices.getFormat() == Format.UnsignedByte) { + ByteBuffer originalIndex = (ByteBuffer) indices.getData(); + ByteBuffer arrayIndex = ByteBuffer.allocate(originalIndex.capacity()); + originalIndex.clear(); + arrayIndex.put(originalIndex); + indices.updateData(arrayIndex); + } else { + //bone indices can be stored in an UnsignedShort buffer + ShortBuffer originalIndex = (ShortBuffer) indices.getData(); + ShortBuffer arrayIndex = ShortBuffer.allocate(originalIndex.capacity()); + originalIndex.clear(); + arrayIndex.put(originalIndex); + indices.updateData(arrayIndex); + } + } + indices.setUsage(Usage.CpuOnly); + + // convert weights on the heap + VertexBuffer weights = getBuffer(Type.BoneWeight); + if (!weights.getData().hasArray()) { + FloatBuffer originalWeight = (FloatBuffer) weights.getData(); + FloatBuffer arrayWeight = FloatBuffer.allocate(originalWeight.capacity()); + originalWeight.clear(); + arrayWeight.put(originalWeight); + weights.updateData(arrayWeight); + } + weights.setUsage(Usage.CpuOnly); + // position, normal, and tangent buffers to be in "Stream" mode + VertexBuffer positions = getBuffer(Type.Position); + VertexBuffer normals = getBuffer(Type.Normal); + VertexBuffer tangents = getBuffer(Type.Tangent); + positions.setUsage(Usage.Stream); + if (normals != null) { + normals.setUsage(Usage.Stream); + } + if (tangents != null) { + tangents.setUsage(Usage.Stream); + } + } else { + //if HWBoneIndex and HWBoneWeight are empty, we setup them as direct + //buffers with software anim buffers data + VertexBuffer indicesHW = getBuffer(Type.HWBoneIndex); + Buffer result; + if (indicesHW.getData() == null) { + VertexBuffer indices = getBuffer(Type.BoneIndex); + if (indices.getFormat() == Format.UnsignedByte) { + ByteBuffer originalIndex = (ByteBuffer) indices.getData(); + ByteBuffer directIndex + = BufferUtils.createByteBuffer(originalIndex.capacity()); + originalIndex.clear(); + directIndex.put(originalIndex); + result = directIndex; + } else { + //bone indices can be stored in an UnsignedShort buffer + ShortBuffer originalIndex = (ShortBuffer) indices.getData(); + ShortBuffer directIndex + = BufferUtils.createShortBuffer(originalIndex.capacity()); + originalIndex.clear(); + directIndex.put(originalIndex); + result = directIndex; + } + indicesHW.setupData(Usage.Static, indices.getNumComponents(), + indices.getFormat(), result); + } + + VertexBuffer weightsHW = getBuffer(Type.HWBoneWeight); + if (weightsHW.getData() == null) { + VertexBuffer weights = getBuffer(Type.BoneWeight); + FloatBuffer originalWeight = (FloatBuffer) weights.getData(); + FloatBuffer directWeight + = BufferUtils.createFloatBuffer(originalWeight.capacity()); + originalWeight.clear(); + directWeight.put(originalWeight); + weightsHW.setupData(Usage.Static, weights.getNumComponents(), + weights.getFormat(), directWeight); + } + + // position, normal, and tangent buffers to be in "Static" mode + VertexBuffer positions = getBuffer(Type.Position); + VertexBuffer normals = getBuffer(Type.Normal); + VertexBuffer tangents = getBuffer(Type.Tangent); + + VertexBuffer positionsBP = getBuffer(Type.BindPosePosition); + VertexBuffer normalsBP = getBuffer(Type.BindPoseNormal); + VertexBuffer tangentsBP = getBuffer(Type.BindPoseTangent); + + positions.setUsage(Usage.Static); + positionsBP.copyElements(0, positions, 0, positionsBP.getNumElements()); + positions.setUpdateNeeded(); + + if (normals != null) { + normals.setUsage(Usage.Static); + normalsBP.copyElements(0, normals, 0, normalsBP.getNumElements()); + normals.setUpdateNeeded(); + } + + if (tangents != null) { + tangents.setUsage(Usage.Static); + tangentsBP.copyElements(0, tangents, 0, tangentsBP.getNumElements()); + tangents.setUpdateNeeded(); + } + } + } + + /** + * Set the LOD (level of detail) index buffers on this mesh. + * + * @param lodLevels The LOD levels to set + */ + public void setLodLevels(VertexBuffer[] lodLevels) { + this.lodLevels = lodLevels; + } + + /** + * @return The number of LOD levels set on this mesh, including the main + * index buffer, returns zero if there are no lod levels. + */ + @Override + public int getNumLodLevels() { + return lodLevels != null ? lodLevels.length : 0; + } + + /** + * Returns the lod level at the given index. + * + * @param lod The lod level index, this does not include + * the main index buffer. + * @return The LOD index buffer at the index + * + * @throws IndexOutOfBoundsException If the index is outside of the + * range [0, {@link #getNumLodLevels()}]. + * + * @see #setLodLevels(com.jme3.scene.VertexBuffer[]) + */ + public VertexBuffer getLodLevel(int lod) { + return lodLevels[lod]; + } + + /** + * Get the element lengths for {@link Mode#Hybrid} mesh mode. + * + * @return element lengths + */ + public int[] getElementLengths() { + return elementLengths; + } + + /** + * Set the element lengths for {@link Mode#Hybrid} mesh mode. + * + * @param elementLengths The element lengths to set + */ + public void setElementLengths(int[] elementLengths) { + this.elementLengths = elementLengths; + } + + /** + * Set the mode start indices for {@link Mode#Hybrid} mesh mode. + * + * @return mode start indices + */ + public int[] getModeStart() { + return modeStart; + } + + /** + * Get the mode start indices for {@link Mode#Hybrid} mesh mode. + * + * @param modeStart the pre-existing array + */ + public void setModeStart(int[] modeStart) { + this.modeStart = modeStart; + } + + /** + * Returns the mesh mode + * + * @return the mesh mode + * + * @see #setMode(OldMesh.Mode) + */ + public Mode getMode() { + return mode; + } + + /** + * Change the Mesh's mode. By default the mode is {@link Mode#Triangles}. + * + * @param mode The new mode to set + * + * @see Mode + */ + public void setMode(Mode mode) { + this.mode = mode; + updateCounts(); + } + + /** + * Returns the maximum number of weights per vertex on this mesh. + * + * @return maximum number of weights per vertex + * + * @see #setMaxNumWeights(int) + */ + public int getMaxNumWeights() { + return maxNumWeights; + } + + /** + * Set the maximum number of weights per vertex on this mesh. + * Only relevant if this mesh has bone index/weight buffers. + * This value should be between 0 and 4. + * + * @param maxNumWeights the desired number (between 0 and 4, inclusive) + */ + public void setMaxNumWeights(int maxNumWeights) { + this.maxNumWeights = maxNumWeights; + } + + /** + * @deprecated Always returns 1.0 since point size is + * determined in the vertex shader. + * + * @return 1.0 + */ + @Deprecated + public float getPointSize() { + return DEFAULT_POINT_SIZE; + } + + /** + * Returns the line width for line meshes. + * + * @return the line width + * @deprecated use {@link Material#getAdditionalRenderState()} + * and {@link RenderState#getLineWidth()} + */ + @Deprecated + public float getLineWidth() { + return lineWidth; + } + + /** + * Specify the line width for meshes of the line modes, such + * as {@link Mode#Lines}. The line width is specified as on-screen pixels, + * the default value is 1.0. + * + * @param lineWidth The line width + * @deprecated use {@link Material#getAdditionalRenderState()} + * and {@link RenderState#setLineWidth(float)} + */ + @Deprecated + public void setLineWidth(float lineWidth) { + if (lineWidth < 1f) { + throw new IllegalArgumentException("lineWidth must be greater than or equal to 1.0"); + } + this.lineWidth = lineWidth; + } + + /** + * Indicates to the GPU that this mesh will not be modified (a hint). + * Sets the usage mode to {@link Usage#Static} + * for all {@link VertexBuffer vertex buffers} on this Mesh. + */ + public void setStatic() { + for (VertexBuffer vb : buffersList.getArray()) { + vb.setUsage(Usage.Static); + } + } + + /** + * Indicates to the GPU that this mesh will be modified occasionally (a hint). + * Sets the usage mode to {@link Usage#Dynamic} + * for all {@link VertexBuffer vertex buffers} on this Mesh. + */ + public void setDynamic() { + for (VertexBuffer vb : buffersList.getArray()) { + vb.setUsage(Usage.Dynamic); + } + } + + /** + * Indicates to the GPU that this mesh will be modified every frame (a hint). + * Sets the usage mode to {@link Usage#Stream} + * for all {@link VertexBuffer vertex buffers} on this Mesh. + */ + public void setStreamed() { + for (VertexBuffer vb : buffersList.getArray()) { + vb.setUsage(Usage.Stream); + } + } + + /** + * Interleaves the data in this mesh. This operation cannot be reversed. + * Some GPUs may prefer the data in this format, however it is a good idea + * to avoid using this method as it disables some engine features. + */ + @Deprecated + public void setInterleaved() { + ArrayList vbs = new ArrayList<>(); + vbs.addAll(buffersList); + +// ArrayList vbs = new ArrayList(buffers.values()); + // index buffer not included when interleaving + vbs.remove(getBuffer(Type.Index)); + + int stride = 0; // aka bytes per vertex + for (int i = 0; i < vbs.size(); i++) { + VertexBuffer vb = vbs.get(i); +// if (vb.getFormat() != Format.Float){ +// throw new UnsupportedOperationException("Cannot interleave vertex buffer.\n" + +// "Contains not-float data."); +// } + stride += vb.componentsLength; + vb.getData().clear(); // reset position & limit (used later) + } + + VertexBuffer allData = new VertexBuffer(Type.InterleavedData); + ByteBuffer dataBuf = BufferUtils.createByteBuffer(stride * getVertexCount()); + allData.setupData(Usage.Static, 1, Format.UnsignedByte, dataBuf); + + // adding buffer directly so that no update counts is forced + buffers.put(Type.InterleavedData.ordinal(), allData); + buffersList.add(allData); + + for (int vert = 0; vert < getVertexCount(); vert++) { + for (int i = 0; i < vbs.size(); i++) { + VertexBuffer vb = vbs.get(i); + switch (vb.getFormat()) { + case Float: + FloatBuffer fb = (FloatBuffer) vb.getData(); + for (int comp = 0; comp < vb.components; comp++) { + dataBuf.putFloat(fb.get()); + } + break; + case Byte: + case UnsignedByte: + ByteBuffer bb = (ByteBuffer) vb.getData(); + for (int comp = 0; comp < vb.components; comp++) { + dataBuf.put(bb.get()); + } + break; + case Half: + case Short: + case UnsignedShort: + ShortBuffer sb = (ShortBuffer) vb.getData(); + for (int comp = 0; comp < vb.components; comp++) { + dataBuf.putShort(sb.get()); + } + break; + case Int: + case UnsignedInt: + IntBuffer ib = (IntBuffer) vb.getData(); + for (int comp = 0; comp < vb.components; comp++) { + dataBuf.putInt(ib.get()); + } + break; + case Double: + DoubleBuffer db = (DoubleBuffer) vb.getData(); + for (int comp = 0; comp < vb.components; comp++) { + dataBuf.putDouble(db.get()); + } + break; + } + } + } + + int offset = 0; + for (VertexBuffer vb : vbs) { + vb.setOffset(offset); + vb.setStride(stride); + + vb.updateData(null); + //vb.setupData(vb.usage, vb.components, vb.format, null); + offset += vb.componentsLength; + } + } + + private int computeNumElements(int bufSize) { + switch (mode) { + case Triangles: + return bufSize / 3; + case TriangleFan: + case TriangleStrip: + return bufSize - 2; + case Points: + return bufSize; + case Lines: + return bufSize / 2; + case LineLoop: + return bufSize; + case LineStrip: + return bufSize - 1; + case Patch: + return bufSize / patchVertexCount; + default: + throw new UnsupportedOperationException(); + } + } + + private int computeInstanceCount() { + // Whatever the max of the base instance counts + int max = 0; + for (VertexBuffer vb : buffersList) { + if (vb.getBaseInstanceCount() > max) { + max = vb.getBaseInstanceCount(); + } + } + return max; + } + + /** + * Update the {@link #getVertexCount() vertex} and + * {@link #getTriangleCount() triangle} counts for this mesh + * based on the current data. This method should be called + * after the {@link Buffer#capacity() capacities} of the mesh's + * {@link VertexBuffer vertex buffers} has been altered. + * + * @throws IllegalStateException If this mesh is in + * {@link #setInterleaved() interleaved} format. + */ + public void updateCounts() { + if (getBuffer(Type.InterleavedData) != null) { + throw new IllegalStateException("Should update counts before interleave"); + } + + VertexBuffer pb = getBuffer(Type.Position); + VertexBuffer ib = getBuffer(Type.Index); + if (pb != null) { + vertCount = pb.getData().limit() / pb.getNumComponents(); + } + if (ib != null) { + elementCount = computeNumElements(ib.getData().limit()); + } else { + elementCount = computeNumElements(vertCount); + } + instanceCount = computeInstanceCount(); + } + + /** + * Returns the triangle count for the given LOD level. + * + * @param lod The lod level to look up + * @return The triangle count for that LOD level + */ + public int getTriangleCount(int lod) { + if (lodLevels != null) { + if (lod < 0) { + throw new IllegalArgumentException("LOD level cannot be < 0"); + } + + if (lod >= lodLevels.length) { + throw new IllegalArgumentException("LOD level " + lod + " does not exist!"); + } + + return computeNumElements(lodLevels[lod].getData().limit()); + } else if (lod == 0) { + return elementCount; + } else { + throw new IllegalArgumentException("There are no LOD levels on the mesh!"); + } + } + + /** + * Returns how many triangles or elements are on this Mesh. + * This value is only updated when {@link #updateCounts() } is called. + * If the mesh mode is not a triangle mode, then this returns the + * number of elements/primitives, e.g. how many lines or how many points, + * instead of how many triangles. + * + * @return how many triangles/elements are on this Mesh. + */ + @Override + public int getTriangleCount() { + return elementCount; + } + + @Override + public int collideWith(Collidable other, Geometry geometry, CollisionResults results) { + return 0; + } + + @Override + public void bind(CommandBuffer cmd) { + + } + + @Override + public void draw(CommandBuffer cmd) { + + } + + @Override + public AttributeModifier modifyAttribute(String name) { + return null; + } + + /** + * Returns the number of vertices on this mesh. + * The value is computed based on the position buffer, which + * must be set on all meshes. + * + * @return Number of vertices on the mesh + */ + @Override + public int getVertexCount() { + return vertCount; + } + + /** + * Returns the number of instances this mesh contains. The instance + * count is based on any VertexBuffers with instancing set. + * + * @return the number of instances + */ + public int getInstanceCount() { + return instanceCount; + } + + /** + * Gets the triangle vertex positions at the given triangle index + * and stores them into the v1, v2, v3 arguments. + * + * @param index The index of the triangle. + * Should be between 0 and {@link #getTriangleCount()}. + * + * @param v1 Vector to contain first vertex position + * @param v2 Vector to contain second vertex position + * @param v3 Vector to contain third vertex position + */ + public void getTriangle(int index, Vector3f v1, Vector3f v2, Vector3f v3) { + VertexBuffer pb = getBuffer(Type.Position); + IndexBuffer ib = getIndicesAsList(); + if (pb != null && pb.getFormat() == Format.Float && pb.getNumComponents() == 3) { + FloatBuffer fpb = (FloatBuffer) pb.getData(); + + // acquire triangle's vertex indices + int vertIndex = index * 3; + int vert1 = ib.get(vertIndex); + int vert2 = ib.get(vertIndex + 1); + int vert3 = ib.get(vertIndex + 2); + + BufferUtils.populateFromBuffer(v1, fpb, vert1); + BufferUtils.populateFromBuffer(v2, fpb, vert2); + BufferUtils.populateFromBuffer(v3, fpb, vert3); + } else { + throw new UnsupportedOperationException("Position buffer not set or " + + " has incompatible format"); + } + } + + /** + * Gets the triangle vertex positions at the given triangle index + * and stores them into the {@link Triangle} argument. + * Also sets the triangle index to the index argument. + * + * @param index The index of the triangle. + * Should be between 0 and {@link #getTriangleCount()}. + * + * @param tri The triangle to store the positions in + */ + public void getTriangle(int index, Triangle tri) { + getTriangle(index, tri.get1(), tri.get2(), tri.get3()); + tri.setIndex(index); + tri.setCenter(null); // invalidate previously cached centroid, if any + tri.setNormal(null); + } + + /** + * Gets the triangle vertex indices at the given triangle index + * and stores them into the given int array. + * + * @param index The index of the triangle. + * Should be between 0 and {@link #getTriangleCount()}. + * + * @param indices Indices of the triangle's vertices + */ + public void getTriangle(int index, int[] indices) { + IndexBuffer ib = getIndicesAsList(); + + // acquire triangle's vertex indices + int vertIndex = index * 3; + indices[0] = ib.get(vertIndex); + indices[1] = ib.get(vertIndex + 1); + indices[2] = ib.get(vertIndex + 2); + } + + /** + * Returns the mesh's VAO ID. Internal use only. + * + * @return the array ID + */ + public int getId() { + return vertexArrayID; + } + + /** + * Sets the mesh's VAO ID. Internal use only. + * + * @param id the array ID + */ + public void setId(int id) { + if (vertexArrayID != DEFAULT_VERTEX_ARRAY_ID) { + throw new IllegalStateException("ID has already been set."); + } + + vertexArrayID = id; + } + + /** + * Generates a collision tree for the mesh. + * Called automatically by {@link #collideWith(com.jme3.collision.Collidable, + * com.jme3.math.Matrix4f, + * com.jme3.bounding.BoundingVolume, + * com.jme3.collision.CollisionResults) }. + */ + public void createCollisionData() { + throw new UnsupportedOperationException("Collision tree not supported."); +// BIHTree tree = new BIHTree(this); +// tree.construct(); +// collisionTree = tree; + } + + /** + * Clears any previously generated collision data. Use this if + * the mesh has changed in some way that invalidates any previously + * generated BIHTree. + */ + public void clearCollisionData() { + collisionTree = DEFAULT_COLLISION_TREE; + } + + /** + * Handles collision detection, internal use only. + * User code should only use collideWith() on scene + * graph elements such as {@link Spatial}s. + * + * @param other the other Collidable + * @param worldMatrix the world matrix + * @param worldBound the world bound + * @param results storage for the results + * @return the number of collisions detected (≥0) + */ + public int collideWith(Collidable other, + Matrix4f worldMatrix, + BoundingVolume worldBound, + CollisionResults results) { + + switch (mode) { + case Points: + case Lines: + case LineStrip: + case LineLoop: + /* + * Collisions can be detected only with triangles, + * and there are no triangles in this mesh. + */ + return 0; + } + + if (getVertexCount() == 0) { + return 0; + } + + if (collisionTree == null) { + createCollisionData(); + } + + return collisionTree.collideWith(other, worldMatrix, worldBound, results); + } + + /** + * Sets the {@link VertexBuffer} on the mesh. + * This will update the vertex/triangle counts if needed. + * + * @param vb The buffer to set + * @throws IllegalArgumentException If the buffer type is already set + */ + public void setBuffer(VertexBuffer vb) { + if (buffers.containsKey(vb.getBufferType().ordinal())) { + throw new IllegalArgumentException("Buffer type already set: " + vb.getBufferType()); + } + + buffers.put(vb.getBufferType().ordinal(), vb); + buffersList.add(vb); + updateCounts(); + } + + /** + * Unsets the {@link VertexBuffer} set on this mesh + * with the given type. Does nothing if the vertex buffer type is not set + * initially. + * + * @param type The buffer type to remove + */ + public void clearBuffer(VertexBuffer.Type type) { + VertexBuffer vb = buffers.remove(type.ordinal()); + if (vb != null) { + buffersList.remove(vb); + updateCounts(); + } + } + + /** + * Creates a {@link VertexBuffer} for the mesh or modifies + * the existing one per the parameters given. + * + * @param type The type of the buffer + * @param components Number of components + * @param format Data format + * @param buf The buffer data + * + * @throws UnsupportedOperationException If the buffer already set is + * incompatible with the parameters given. + */ + public void setBuffer(Type type, int components, Format format, Buffer buf) { + VertexBuffer vb = buffers.get(type.ordinal()); + if (vb == null) { + vb = new VertexBuffer(type); + vb.setupData(Usage.Dynamic, components, format, buf); + setBuffer(vb); + } else { + if (vb.getNumComponents() != components || vb.getFormat() != format) { + throw new UnsupportedOperationException("The buffer already set " + + "is incompatible with the given parameters"); + } + vb.updateData(buf); + updateCounts(); + } + } + + /** + * Set a floating point {@link VertexBuffer} on the mesh. + * + * @param type The type of {@link VertexBuffer}, + * e.g. {@link Type#Position}, {@link Type#Normal}, etc. + * + * @param components Number of components on the vertex buffer, should + * be between 1 and 4. + * + * @param buf The floating point data to contain + */ + public void setBuffer(Type type, int components, FloatBuffer buf) { + setBuffer(type, components, Format.Float, buf); + } + + public void setBuffer(Type type, int components, float[] buf) { + setBuffer(type, components, BufferUtils.createFloatBuffer(buf)); + } + + public void setBuffer(Type type, int components, IntBuffer buf) { + setBuffer(type, components, Format.UnsignedInt, buf); + } + + public void setBuffer(Type type, int components, int[] buf) { + setBuffer(type, components, BufferUtils.createIntBuffer(buf)); + } + + public void setBuffer(Type type, int components, ShortBuffer buf) { + setBuffer(type, components, Format.UnsignedShort, buf); + } + + public void setBuffer(Type type, int components, byte[] buf) { + setBuffer(type, components, BufferUtils.createByteBuffer(buf)); + } + + public void setBuffer(Type type, int components, ByteBuffer buf) { + setBuffer(type, components, Format.UnsignedByte, buf); + } + + public void setBuffer(Type type, int components, short[] buf) { + setBuffer(type, components, BufferUtils.createShortBuffer(buf)); + } + + /** + * Get the {@link VertexBuffer} stored on this mesh with the given + * type. + * + * @param type The type of VertexBuffer + * @return the VertexBuffer data, or null if not set + */ + public VertexBuffer getBuffer(Type type) { + return buffers.get(type.ordinal()); + } + + /** + * Get the {@link VertexBuffer} data stored on this mesh in float + * format. + * + * @param type The type of VertexBuffer + * @return the VertexBuffer data, or null if not set + */ + public FloatBuffer getFloatBuffer(Type type) { + VertexBuffer vb = getBuffer(type); + if (vb == null) { + return null; + } + + return (FloatBuffer) vb.getData(); + } + + /** + * Get the {@link VertexBuffer} data stored on this mesh in short + * format. + * + * @param type The type of VertexBuffer + * @return the VertexBuffer data, or null if not set + */ + public ShortBuffer getShortBuffer(Type type) { + VertexBuffer vb = getBuffer(type); + if (vb == null) { + return null; + } + + return (ShortBuffer) vb.getData(); + } + + /** + * Acquires an index buffer that will read the vertices on the mesh + * as a list. + * + * @return A virtual or wrapped index buffer to read the data as a list + */ + public IndexBuffer getIndicesAsList() { + if (mode == Mode.Hybrid) { + throw new UnsupportedOperationException("Hybrid mode not supported"); + } + + IndexBuffer ib = getIndexBuffer(); + if (ib != null) { + if (mode.isListMode()) { + // already in list mode + return ib; + } else { + // not in list mode but it does have an index buffer + // wrap it so the data is converted to list format + return new WrappedIndexBuffer(this); + } + } else { + // return a virtual index buffer that will supply + // "fake" indices in list format + return new VirtualIndexBuffer(vertCount, mode); + } + } + + /** + * Get the index buffer for this mesh. + * Will return null if no index buffer is set. + * + * @return The index buffer of this mesh. + * + * @see Type#Index + */ + public IndexBuffer getIndexBuffer() { + VertexBuffer vb = getBuffer(Type.Index); + if (vb == null) { + return null; + } + + return IndexBuffer.wrapIndexBuffer(vb.getData()); + } + + /** + * Extracts the vertex attributes from the given mesh into + * this mesh, by using this mesh's {@link #getIndexBuffer() index buffer} + * to index into the attributes of the other mesh. + * Note that this will also change this mesh's index buffer so that + * the references to the vertex data match the new indices. + * + * @param other The mesh to extract the vertex data from + */ + public void extractVertexData(OldMesh other) { + // Determine the number of unique vertices need to + // be created. Also determine the mappings + // between old indices to new indices (since we avoid duplicating + // vertices, this is a map and not an array). + VertexBuffer oldIdxBuf = getBuffer(Type.Index); + IndexBuffer indexBuf = getIndexBuffer(); + int numIndices = indexBuf.size(); + + IntMap oldIndicesToNewIndices = new IntMap<>(numIndices); + ArrayList newIndicesToOldIndices = new ArrayList<>(); + int newIndex = 0; + + for (int i = 0; i < numIndices; i++) { + int oldIndex = indexBuf.get(i); + + if (!oldIndicesToNewIndices.containsKey(oldIndex)) { + // this vertex has not been added, so allocate a + // new index for it and add it to the map + oldIndicesToNewIndices.put(oldIndex, newIndex); + newIndicesToOldIndices.add(oldIndex); + + // increment to have the next index + newIndex++; + } + } + + // Number of unique verts to be created now available + int newNumVerts = newIndicesToOldIndices.size(); + + if (newIndex != newNumVerts) { + throw new AssertionError(); + } + + // Create the new index buffer. + // Do not overwrite the old one because we might be able to + // convert from int index buffer to short index buffer + IndexBuffer newIndexBuf; + if (newNumVerts >= 65536) { + newIndexBuf = new IndexIntBuffer(BufferUtils.createIntBuffer(numIndices)); + } else { + newIndexBuf = new IndexShortBuffer(BufferUtils.createShortBuffer(numIndices)); + } + + for (int i = 0; i < numIndices; i++) { + // Map the old indices to the new indices + int oldIndex = indexBuf.get(i); + newIndex = oldIndicesToNewIndices.get(oldIndex); + + newIndexBuf.put(i, newIndex); + } + + VertexBuffer newIdxBuf = new VertexBuffer(Type.Index); + newIdxBuf.setupData(oldIdxBuf.getUsage(), + oldIdxBuf.getNumComponents(), + newIndexBuf instanceof IndexIntBuffer ? Format.UnsignedInt : Format.UnsignedShort, + newIndexBuf.getBuffer()); + clearBuffer(Type.Index); + setBuffer(newIdxBuf); + + // Now, create the vertex buffers + SafeArrayList oldVertexData = other.getBufferList(); + for (VertexBuffer oldVb : oldVertexData) { + if (oldVb.getBufferType() == VertexBuffer.Type.Index) { + // ignore the index buffer + continue; + } + + VertexBuffer newVb = new VertexBuffer(oldVb.getBufferType()); + newVb.setNormalized(oldVb.isNormalized()); + //check for data before copying, some buffers are just empty shells + //for caching purpose (HW skinning buffers), and will be filled when + //needed + if (oldVb.getData() != null) { + // Create a new vertex buffer with similar configuration, but + // with the capacity of number of unique vertices + Buffer buffer = VertexBuffer.createBuffer(oldVb.getFormat(), + oldVb.getNumComponents(), newNumVerts); + newVb.setupData(oldVb.getUsage(), oldVb.getNumComponents(), + oldVb.getFormat(), buffer); + + // Copy the vertex data from the old buffer into the new buffer + for (int i = 0; i < newNumVerts; i++) { + int oldIndex = newIndicesToOldIndices.get(i); + + // Copy the vertex attribute from the old index + // to the new index + oldVb.copyElement(oldIndex, newVb, i); + } + } + + // Set the buffer on the mesh + clearBuffer(newVb.getBufferType()); + setBuffer(newVb); + } + + // Copy max weights per vertex as well + setMaxNumWeights(other.getMaxNumWeights()); + + // The data has been copied over, update information + updateCounts(); + updateBound(); + } + + /** + * Scales the texture coordinate buffer on this mesh by the given scale + * factor. + *

+ * Note that values above 1 will cause the + * texture to tile, while values below 1 will cause the texture + * to stretch. + *

+ * + * @param scaleFactor The scale factor to scale by. Every texture + * coordinate is multiplied by this vector to get the result. + * + * @throws IllegalStateException If there's no texture coordinate + * buffer on the mesh + * @throws UnsupportedOperationException If the texture coordinate + * buffer is not in 2D float format. + */ + public void scaleTextureCoordinates(Vector2f scaleFactor) { + VertexBuffer tc = getBuffer(Type.TexCoord); + if (tc == null) { + throw new IllegalStateException("The mesh has no texture coordinates"); + } + + if (tc.getFormat() != VertexBuffer.Format.Float) { + throw new UnsupportedOperationException("Only float texture coord format is supported"); + } + + if (tc.getNumComponents() != 2) { + throw new UnsupportedOperationException("Only 2D texture coords are supported"); + } + + FloatBuffer fb = (FloatBuffer) tc.getData(); + fb.clear(); + for (int i = 0; i < fb.limit() / 2; i++) { + float x = fb.get(); + float y = fb.get(); + fb.position(fb.position() - 2); + x *= scaleFactor.getX(); + y *= scaleFactor.getY(); + fb.put(x).put(y); + } + fb.clear(); + tc.updateData(fb); + } + + /** + * Updates the bounding volume of this mesh. + * The method does nothing if the mesh has no {@link Type#Position} buffer. + * It is expected that the position buffer is a float buffer with 3 components. + */ + @Override + public void updateBound() { + VertexBuffer posBuf = getBuffer(VertexBuffer.Type.Position); + if (meshBound != null && posBuf != null) { + meshBound.computeFromPoints((FloatBuffer) posBuf.getData()); + } + } + + /** + * Returns the {@link BoundingVolume} of this Mesh. + * By default the bounding volume is a {@link BoundingBox}. + * + * @return the bounding volume of this mesh + */ + @Override + public BoundingVolume getBound() { + return meshBound; + } + + /** + * Sets the {@link BoundingVolume} for this Mesh. + * The bounding volume is recomputed by calling {@link #updateBound() }. + * + * @param modelBound The model bound to set + */ + @Override + public void setBound(BoundingVolume modelBound) { + meshBound = modelBound; + } + + /** + * Returns a map of all {@link VertexBuffer vertex buffers} on this Mesh. + * The integer key for the map is the {@link Enum#ordinal() ordinal} + * of the vertex buffer's {@link Type}. + * Note that the returned map is a reference to the map used internally, + * modifying it will cause undefined results. + * + * @return map of vertex buffers on this mesh. + */ + public IntMap getBuffers() { + return buffers; + } + + /** + * Returns a list of all {@link VertexBuffer vertex buffers} on this Mesh. + * Using a list instead an IntMap via the {@link #getBuffers() } method is + * better for iteration as there's no need to create an iterator instance. + * Note that the returned list is a reference to the list used internally, + * modifying it will cause undefined results. + * + * @return list of vertex buffers on this mesh. + */ + public SafeArrayList getBufferList() { + return buffersList; + } + + /** + * Determines if the mesh uses bone animation. + * + * A mesh uses bone animation if it has bone index / weight buffers + * such as {@link Type#BoneIndex} or {@link Type#HWBoneIndex}. + * + * @return true if the mesh uses bone animation, false otherwise + */ + public boolean isAnimated() { + return getBuffer(Type.BoneIndex) != null + || getBuffer(Type.HWBoneIndex) != null; + } + + /** + * @deprecated use isAnimatedByJoint + * @param boneIndex the bone's index in its skeleton + * @return true if animated by that bone, otherwise false + */ + @Deprecated + public boolean isAnimatedByBone(int boneIndex) { + return isAnimatedByJoint(boneIndex); + } + + /** + * Test whether the specified bone animates this mesh. + * + * @param jointIndex the bone's index in its skeleton + * @return true if the specified bone animates this mesh, otherwise false + */ + public boolean isAnimatedByJoint(int jointIndex) { + VertexBuffer biBuf = getBuffer(VertexBuffer.Type.BoneIndex); + VertexBuffer wBuf = getBuffer(VertexBuffer.Type.BoneWeight); + if (biBuf == null || wBuf == null) { + return false; // no bone animation data + } + + IndexBuffer boneIndexBuffer = IndexBuffer.wrapIndexBuffer(biBuf.getData()); + boneIndexBuffer.rewind(); + int numBoneIndices = boneIndexBuffer.remaining(); + assert numBoneIndices % 4 == 0 : numBoneIndices; + int numVertices = boneIndexBuffer.remaining() / 4; + + FloatBuffer weightBuffer = (FloatBuffer) wBuf.getData(); + weightBuffer.rewind(); + int numWeights = weightBuffer.remaining(); + assert numWeights == numVertices * 4 : numWeights; + /* + * Test each vertex to determine whether the bone affects it. + */ + int biByte = jointIndex; + for (int vIndex = 0; vIndex < numVertices; vIndex++) { + for (int wIndex = 0; wIndex < 4; wIndex++) { + int bIndex = boneIndexBuffer.get(); + float weight = weightBuffer.get(); + if (wIndex < maxNumWeights && bIndex == biByte && weight != 0f) { + return true; + } + } + } + return false; + } + + /** + * Sets the count of vertices used for each tessellation patch + * + * @param patchVertexCount the desired count + */ + public void setPatchVertexCount(int patchVertexCount) { + this.patchVertexCount = patchVertexCount; + } + + /** + * Gets the amount of vertices used for each patch; + * + * @return the count (≥0) + */ + public int getPatchVertexCount() { + return patchVertexCount; + } + + public void addMorphTarget(MorphTarget target) { + if (morphTargets == null) { + morphTargets = new SafeArrayList<>(MorphTarget.class); + } + morphTargets.add(target); + } + + /** + * Remove the given MorphTarget from the Mesh + * @param target The MorphTarget to remove + * @return If the MorphTarget was removed + */ + public boolean removeMorphTarget(MorphTarget target) { + return morphTargets != null ? morphTargets.remove(target) : false; + } + + /** + * Remove the MorphTarget from the Mesh at the given index + * @throws IndexOutOfBoundsException if the index outside the number of morph targets + * @param index Index of the MorphTarget to remove + * @return The MorphTarget that was removed + */ + public MorphTarget removeMorphTarget(int index) { + if (morphTargets == null) { + throw new IndexOutOfBoundsException("Index:" + index + ", Size:0"); + } + return morphTargets.remove(index); + } + + /** + * Get the MorphTarget at the given index + * @throws IndexOutOfBoundsException if the index outside the number of morph targets + * @param index The index of the morph target to get + * @return The MorphTarget at the index + */ + public MorphTarget getMorphTarget(int index) { + if (morphTargets == null) { + throw new IndexOutOfBoundsException("Index:" + index + ", Size:0"); + } + return morphTargets.get(index); + } + + public MorphTarget[] getMorphTargets() { + if (morphTargets == null) { + return new MorphTarget[0]; + } else { + return morphTargets.getArray(); + } + } + + /** + * Get the name of all morphs in order. + * Morphs without names will be null + * @return an array + */ + public String[] getMorphTargetNames() { + MorphTarget[] nbMorphTargets = getMorphTargets(); + if (nbMorphTargets.length == 0) { + return new String[0]; + } + String[] targets = new String[nbMorphTargets.length]; + + for (int index = 0; index < nbMorphTargets.length; index++) { + targets[index] = nbMorphTargets[index].getName(); + } + return targets; + } + + public boolean hasMorphTargets() { + return morphTargets != null && !morphTargets.isEmpty(); + } + + /** + * Get the index of the morph that has the given name. + * + * @param morphName The name of the morph to search for + * @return The index of the morph, or -1 if not found. + */ + public int getMorphIndex(String morphName) { + int index = -1; + MorphTarget[] nbMorphTargets = getMorphTargets(); + for (int i = 0; i < nbMorphTargets.length; i++) { + if (nbMorphTargets[i].getName().equals(morphName)) { + index = i; + break; + } + } + return index; + } + + @Override + @SuppressWarnings("unchecked") + public void write(JmeExporter ex) throws IOException { + OutputCapsule out = ex.getCapsule(this); + + out.write(meshBound, "modelBound", null); + out.write(vertCount, "vertCount", DEFAULT_VERT_COUNT); + out.write(elementCount, "elementCount", DEFAULT_ELEMENT_COUNT); + out.write(instanceCount, "instanceCount", DEFAULT_INSTANCE_COUNT); + out.write(maxNumWeights, "max_num_weights", DEFAULT_MAX_NUM_WEIGHTS); + out.write(mode, "mode", Mode.Triangles); + out.write(collisionTree, "collisionTree", DEFAULT_COLLISION_TREE); + out.write(elementLengths, "elementLengths", null); + out.write(modeStart, "modeStart", null); + out.write(pointSize, "pointSize", DEFAULT_POINT_SIZE); + + //Removing HW skinning buffers to not save them + VertexBuffer hwBoneIndex = null; + VertexBuffer hwBoneWeight = null; + hwBoneIndex = getBuffer(Type.HWBoneIndex); + if (hwBoneIndex != null) { + buffers.remove(Type.HWBoneIndex.ordinal()); + } + hwBoneWeight = getBuffer(Type.HWBoneWeight); + if (hwBoneWeight != null) { + buffers.remove(Type.HWBoneWeight.ordinal()); + } + + out.writeIntSavableMap(buffers, "buffers", null); + + //restoring Hw skinning buffers. + if (hwBoneIndex != null) { + buffers.put(hwBoneIndex.getBufferType().ordinal(), hwBoneIndex); + } + if (hwBoneWeight != null) { + buffers.put(hwBoneWeight.getBufferType().ordinal(), hwBoneWeight); + } + + out.write(lodLevels, "lodLevels", null); + if (morphTargets != null) { + out.writeSavableArrayList(new ArrayList(morphTargets), "morphTargets", null); + } + } + + @Override + @SuppressWarnings("unchecked") + public void read(JmeImporter im) throws IOException { + InputCapsule in = im.getCapsule(this); + meshBound = (BoundingVolume) in.readSavable("modelBound", null); + vertCount = in.readInt("vertCount", DEFAULT_VERT_COUNT); + elementCount = in.readInt("elementCount", DEFAULT_ELEMENT_COUNT); + instanceCount = in.readInt("instanceCount", DEFAULT_INSTANCE_COUNT); + maxNumWeights = in.readInt("max_num_weights", DEFAULT_MAX_NUM_WEIGHTS); + mode = in.readEnum("mode", Mode.class, Mode.Triangles); + elementLengths = in.readIntArray("elementLengths", null); + modeStart = in.readIntArray("modeStart", null); + collisionTree = (BIHTree) in.readSavable("collisionTree", DEFAULT_COLLISION_TREE); + elementLengths = in.readIntArray("elementLengths", null); + modeStart = in.readIntArray("modeStart", null); + pointSize = in.readFloat("pointSize", DEFAULT_POINT_SIZE); + +// in.readStringSavableMap("buffers", null); + buffers = (IntMap) in.readIntSavableMap("buffers", null); + for (Entry entry : buffers) { + buffersList.add(entry.getValue()); + } + + //creating hw animation buffers empty so that they are put in the cache + if (isAnimated()) { + VertexBuffer hwBoneIndex = new VertexBuffer(Type.HWBoneIndex); + hwBoneIndex.setUsage(Usage.CpuOnly); + setBuffer(hwBoneIndex); + VertexBuffer hwBoneWeight = new VertexBuffer(Type.HWBoneWeight); + hwBoneWeight.setUsage(Usage.CpuOnly); + setBuffer(hwBoneWeight); + } + + Savable[] lodLevelsSavable = in.readSavableArray("lodLevels", null); + if (lodLevelsSavable != null) { + lodLevels = new VertexBuffer[lodLevelsSavable.length]; + System.arraycopy(lodLevelsSavable, 0, lodLevels, 0, lodLevels.length); + } + + ArrayList l = in.readSavableArrayList("morphTargets", null); + if (l != null) { + morphTargets = new SafeArrayList(MorphTarget.class, l); + } + } +} diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java index dd56207777..2b90ae9fd7 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java +++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java @@ -55,7 +55,6 @@ import com.jme3.util.clone.IdentityCloneFunction; import com.jme3.util.clone.JmeCloneable; import com.jme3.vulkan.material.NewMaterial; -import com.jme3.vulkan.scene.NotSpatial; import java.io.IOException; import java.util.*; diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java index c3144e6b97..ae5cfbd170 100644 --- a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java @@ -31,23 +31,23 @@ */ package com.jme3.scene.mesh; -import com.jme3.scene.Mesh.Mode; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Format; import java.nio.Buffer; /** * IndexBuffer implementation that generates vertex indices sequentially - * based on a specific Mesh {@link Mode}. + * based on a specific Mesh {@link OldMesh.Mode}. * The generated indices are as if the mesh is in the given mode * but contains no index buffer, thus this implementation will * return the indices if the index buffer was there and contained sequential * triangles. * Example: *
    - *
  • {@link Mode#Triangles}: 0, 1, 2 | 3, 4, 5 | 6, 7, 8 | ...
  • - *
  • {@link Mode#TriangleStrip}: 0, 1, 2 | 2, 1, 3 | 2, 3, 4 | ...
  • - *
  • {@link Mode#TriangleFan}: 0, 1, 2 | 0, 2, 3 | 0, 3, 4 | ...
  • + *
  • {@link OldMesh.Mode#Triangles}: 0, 1, 2 | 3, 4, 5 | 6, 7, 8 | ...
  • + *
  • {@link OldMesh.Mode#TriangleStrip}: 0, 1, 2 | 2, 1, 3 | 2, 3, 4 | ...
  • + *
  • {@link OldMesh.Mode#TriangleFan}: 0, 1, 2 | 0, 2, 3 | 0, 3, 4 | ...
  • *
* * @author Kirill Vainer @@ -56,10 +56,10 @@ public class VirtualIndexBuffer extends IndexBuffer { protected int numVerts = 0; protected int numIndices = 0; - protected Mode meshMode; + protected OldMesh.Mode meshMode; protected int position = 0; - public VirtualIndexBuffer(int numVerts, Mode meshMode) { + public VirtualIndexBuffer(int numVerts, OldMesh.Mode meshMode) { this.numVerts = numVerts; this.meshMode = meshMode; switch (meshMode) { @@ -108,13 +108,13 @@ public int remaining() { @Override public int get(int i) { - if (meshMode == Mode.Triangles || meshMode == Mode.Lines || meshMode == Mode.Points) { + if (meshMode == OldMesh.Mode.Triangles || meshMode == OldMesh.Mode.Lines || meshMode == OldMesh.Mode.Points) { return i; - } else if (meshMode == Mode.LineStrip) { + } else if (meshMode == OldMesh.Mode.LineStrip) { return (i + 1) / 2; - } else if (meshMode == Mode.LineLoop) { + } else if (meshMode == OldMesh.Mode.LineLoop) { return (i == (numIndices - 1)) ? 0 : ((i + 1) / 2); - } else if (meshMode == Mode.TriangleStrip) { + } else if (meshMode == OldMesh.Mode.TriangleStrip) { int triIndex = i / 3; int vertIndex = i % 3; boolean isBack = (i / 3) % 2 == 1; @@ -132,7 +132,7 @@ public int get(int i) { throw new AssertionError(); } } - } else if (meshMode == Mode.TriangleFan) { + } else if (meshMode == OldMesh.Mode.TriangleFan) { int vertIndex = i % 3; if (vertIndex == 0) { return 0; diff --git a/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java b/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java index 50db5a5a64..6629131027 100644 --- a/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java +++ b/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java @@ -301,29 +301,31 @@ public CompareMode getShadowCompareMode() { */ protected Geometry createFrustum(Vector3f[] pts, int i) { WireFrustum frustum = new WireFrustum(pts); - Geometry frustumMdl = new Geometry("f", frustum); + // fixme + Geometry frustumMdl = new Geometry("f"/*, frustum*/); frustumMdl.setCullHint(Spatial.CullHint.Never); frustumMdl.setShadowMode(ShadowMode.Off); Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); mat.getAdditionalRenderState().setWireframe(true); - frustumMdl.setMaterial(mat); - switch (i) { - case 0: - frustumMdl.getMaterial().setColor("Color", ColorRGBA.Pink); - break; - case 1: - frustumMdl.getMaterial().setColor("Color", ColorRGBA.Red); - break; - case 2: - frustumMdl.getMaterial().setColor("Color", ColorRGBA.Green); - break; - case 3: - frustumMdl.getMaterial().setColor("Color", ColorRGBA.Blue); - break; - default: - frustumMdl.getMaterial().setColor("Color", ColorRGBA.White); - break; - } + // fixme + //frustumMdl.setMaterial(mat); +// switch (i) { +// case 0: +// frustumMdl.getMaterial().setColor("Color", ColorRGBA.Pink); +// break; +// case 1: +// frustumMdl.getMaterial().setColor("Color", ColorRGBA.Red); +// break; +// case 2: +// frustumMdl.getMaterial().setColor("Color", ColorRGBA.Green); +// break; +// case 3: +// frustumMdl.getMaterial().setColor("Color", ColorRGBA.Blue); +// break; +// default: +// frustumMdl.getMaterial().setColor("Color", ColorRGBA.White); +// break; +// } frustumMdl.updateGeometricState(); return frustumMdl; diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java index 5fafe1838d..c56cb3e183 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java @@ -13,6 +13,7 @@ import com.jme3.math.Matrix4f; import com.jme3.scene.CollisionData; import com.jme3.scene.Geometry; +import com.jme3.scene.Mesh; import com.jme3.vulkan.buffers.*; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.frames.VersionedResource; @@ -25,7 +26,7 @@ import static org.lwjgl.vulkan.VK10.*; -public abstract class AdaptiveMesh implements NewMesh { +public abstract class AdaptiveMesh implements Mesh { protected enum VertexMode { diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java deleted file mode 100644 index 49e599c700..0000000000 --- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/NewMesh.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.jme3.vulkan.mesh; - -import com.jme3.bounding.BoundingVolume; -import com.jme3.collision.Collidable; -import com.jme3.collision.CollisionResults; -import com.jme3.export.Savable; -import com.jme3.scene.Geometry; -import com.jme3.vulkan.commands.CommandBuffer; - -public interface NewMesh extends Collidable, Savable { - - void bind(CommandBuffer cmd); - - void draw(CommandBuffer cmd); - - AttributeModifier modifyAttribute(String name); - - int getVertexCount(); - - int getTriangleCount(); - - int collideWith(Collidable other, Geometry geometry, CollisionResults results); - - void updateBound(); - - void setBound(BoundingVolume volume); - - BoundingVolume getBound(); - - int getNumLodLevels(); - - default AttributeModifier modifyAttribute(BuiltInAttribute name) { - return modifyAttribute(name.getName()); - } - -} diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index bc93ded750..4c5369cfb6 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -5,6 +5,7 @@ import com.jme3.math.Transform; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; +import com.jme3.scene.Mesh; import com.jme3.scene.Spatial; import com.jme3.shaderc.ShaderType; import com.jme3.shaderc.ShadercLoader; @@ -249,7 +250,7 @@ public void simpleInitApp() { TestMaterial material = new TestMaterial(descriptorPool); material.getBaseColorMap().setResource(new SingleResource<>(texture)); - NewMesh m = new MyCustomMesh(device, frames, meshDesc, sharedData, + Mesh m = new MyCustomMesh(device, frames, meshDesc, sharedData, Vector3f.UNIT_Z, Vector3f.UNIT_Y, 1f, 1f, 0.5f, 0.5f); MatrixTransformMaterial t = new MatrixTransformMaterial(descriptorPool); t.getTransforms().setResource(frames.perFrame(n -> From bd21a2033b5e739f6d0307e05f36b0fc5aed7baa Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 13 Sep 2025 14:18:32 -0400 Subject: [PATCH 77/80] moved previous Mesh extensions to extend OldMesh --- jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java | 3 ++- .../java/com/jme3/environment/util/BoundingSphereDebug.java | 3 ++- jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java | 3 ++- .../src/main/java/com/jme3/renderer/opengl/GLRenderer.java | 2 +- jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/debug/Grid.java | 4 ++-- .../main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java | 3 ++- .../src/main/java/com/jme3/scene/debug/SkeletonPoints.java | 3 ++- .../src/main/java/com/jme3/scene/debug/SkeletonWire.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java | 3 ++- .../com/jme3/scene/debug/custom/ArmatureInterJointsWire.java | 3 ++- .../src/main/java/com/jme3/scene/debug/custom/JointShape.java | 3 ++- .../src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java | 2 +- jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/shape/Curve.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/shape/Dome.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/shape/Line.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/shape/Quad.java | 3 ++- .../src/main/java/com/jme3/scene/shape/RectangleMesh.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/shape/Surface.java | 3 ++- jme3-core/src/main/java/com/jme3/scene/shape/Torus.java | 3 ++- .../src/plugins/java/com/jme3/scene/plugins/OBJLoader.java | 2 +- .../tools/java/jme3tools/optimize/GeometryBatchFactory.java | 2 +- 29 files changed, 54 insertions(+), 30 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java index b4333ae9f8..78eb08a62e 100644 --- a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java +++ b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java @@ -34,6 +34,7 @@ import com.jme3.math.Matrix3f; import com.jme3.renderer.Camera; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; /** * The ParticleMesh is the underlying visual implementation of a @@ -41,7 +42,7 @@ * * @author Kirill Vainer */ -public abstract class ParticleMesh extends Mesh { +public abstract class ParticleMesh extends OldMesh { /** * Type of particle mesh diff --git a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java index 622164e4a1..4e52804c5b 100644 --- a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java +++ b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java @@ -37,6 +37,7 @@ import com.jme3.math.FastMath; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import java.nio.FloatBuffer; @@ -49,7 +50,7 @@ * * @author nehon */ -public class BoundingSphereDebug extends Mesh { +public class BoundingSphereDebug extends OldMesh { protected int vertCount; protected int triCount; diff --git a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java index c4ac9b26f0..6361f915cf 100644 --- a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java +++ b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java @@ -34,6 +34,7 @@ import com.jme3.material.Material; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.texture.Texture2D; @@ -59,7 +60,7 @@ class BitmapTextPage extends Geometry { private final LinkedList pageQuads = new LinkedList<>(); BitmapTextPage(BitmapFont font, boolean arrayBased, int page) { - super("BitmapFont", new Mesh()); + super("BitmapFont", new OldMesh()); setRequiresUpdates(false); setBatchHint(BatchHint.Never); if (font == null) { diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index 09a560d4a6..c2014477b2 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -40,7 +40,7 @@ import com.jme3.opencl.OpenCLObjectManager; import com.jme3.renderer.*; import com.jme3.scene.Mesh; -import com.jme3.scene.Mesh.Mode; +import com.jme3.scene.OldMesh.Mode; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java index 8f46298693..9d9a431fe6 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java @@ -34,6 +34,7 @@ import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import java.nio.FloatBuffer; @@ -45,7 +46,7 @@ * * @author Kirill Vainer */ -public class Arrow extends Mesh { +public class Arrow extends OldMesh { private final Quaternion tempQuat = new Quaternion(); private final Vector3f tempVec = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java index d2947e52a9..704343ca03 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java @@ -31,7 +31,7 @@ */ package com.jme3.scene.debug; -import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; @@ -43,7 +43,7 @@ * * @author Kirill Vainer */ -public class Grid extends Mesh { +public class Grid extends OldMesh { public Grid() { } diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java index 6db686bed8..9a379e2842 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java @@ -42,6 +42,7 @@ import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -55,7 +56,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class SkeletonInterBoneWire extends Mesh { +public class SkeletonInterBoneWire extends OldMesh { private static final int POINT_AMOUNT = 10; /** The amount of connections between bones. */ private int connectionsAmount; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java index 878b611673..9ac491493b 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java @@ -39,6 +39,7 @@ import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -53,7 +54,7 @@ /** * The class that displays either heads of the bones if no length data is supplied or both heads and tails otherwise. */ -public class SkeletonPoints extends Mesh { +public class SkeletonPoints extends OldMesh { /** The skeleton to be displayed. */ private Skeleton skeleton; /** The map between the bone index and its length. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java index afcecce778..94f7eb3132 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java @@ -43,6 +43,7 @@ import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -55,7 +56,7 @@ * The class that displays either wires between the bones' heads if no length data is supplied and * full bones' shapes otherwise. */ -public class SkeletonWire extends Mesh { +public class SkeletonWire extends OldMesh { /** The number of bones' connections. Used in non-length mode. */ private int numConnections; /** The skeleton to be displayed. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java index 38593898c1..040b3beb09 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java @@ -35,6 +35,7 @@ import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -42,7 +43,7 @@ import com.jme3.util.BufferUtils; import java.nio.FloatBuffer; -public class WireBox extends Mesh { +public class WireBox extends OldMesh { public WireBox() { this(1,1,1); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java index 9a2de74927..78978312c1 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java @@ -35,6 +35,7 @@ import com.jme3.renderer.Camera; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; @@ -52,7 +53,7 @@ * and four for the far plane. These points are connected by lines * to form a wireframe cube-like structure. */ -public class WireFrustum extends Mesh { +public class WireFrustum extends OldMesh { /** * For Serialization only. Do not use. diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java index 72ee624bb0..b76979c79c 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java @@ -36,6 +36,7 @@ import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -45,7 +46,7 @@ import java.nio.FloatBuffer; import java.nio.ShortBuffer; -public class WireSphere extends Mesh { +public class WireSphere extends OldMesh { private static final int samples = 30; private static final int zSamples = 10; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java index 1fe8bdcdc6..25be2e8866 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java @@ -35,6 +35,7 @@ import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; @@ -45,7 +46,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class ArmatureInterJointsWire extends Mesh { +public class ArmatureInterJointsWire extends OldMesh { private final Vector3f tmp = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java index 989667eb23..595fc2bb18 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java @@ -33,9 +33,10 @@ package com.jme3.scene.debug.custom; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; -public class JointShape extends Mesh { +public class JointShape extends OldMesh { /** * Serialization only. Do not use. diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java index f6c9d4bfea..de7f529796 100644 --- a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java @@ -32,7 +32,7 @@ package com.jme3.scene.mesh; import com.jme3.scene.Mesh; -import com.jme3.scene.Mesh.Mode; +import com.jme3.scene.OldMesh.Mode; import com.jme3.scene.VertexBuffer.Type; import java.nio.Buffer; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java index e096a91a4c..c7e6893100 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java @@ -34,6 +34,7 @@ import com.jme3.export.*; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import java.io.IOException; @@ -50,7 +51,7 @@ * @author Ian Phillips * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $ */ -public abstract class AbstractBox extends Mesh { +public abstract class AbstractBox extends OldMesh { public final Vector3f center = new Vector3f(0f, 0f, 0f); diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java index cfe51dbaff..54f2b353b9 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java @@ -36,6 +36,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; import java.io.IOException; @@ -51,7 +52,7 @@ * * @author Kirill Vainer */ -public class CenterQuad extends Mesh { +public class CenterQuad extends OldMesh { private float width; private float height; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java index e1b7dd994f..a020ef8001 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java @@ -34,6 +34,7 @@ import com.jme3.math.Spline; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import java.util.Iterator; import java.util.List; @@ -47,7 +48,7 @@ * * @author Nehon */ -public class Curve extends Mesh { +public class Curve extends OldMesh { private Spline spline; private Vector3f temp = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java index 36df9d9892..1a142f19cd 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java @@ -39,6 +39,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import java.io.IOException; @@ -50,7 +51,7 @@ * @author Mark Powell * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $ */ -public class Cylinder extends Mesh { +public class Cylinder extends OldMesh { private int axisSamples; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java index 5cfd312f82..87da2872fa 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java @@ -39,6 +39,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import com.jme3.util.TempVars; @@ -53,7 +54,7 @@ * @author Joshua Slack (Original sphere code that was adapted) * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $ */ -public class Dome extends Mesh { +public class Dome extends OldMesh { private int planes; private int radialSamples; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java index c9c5f3c197..03ae1e101c 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java @@ -37,6 +37,7 @@ import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import java.io.IOException; @@ -47,7 +48,7 @@ * * @author Brent Owens */ -public class Line extends Mesh { +public class Line extends OldMesh { private Vector3f start = new Vector3f(); private Vector3f end = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java index d301a98675..6640641835 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java @@ -39,6 +39,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; import static com.jme3.util.BufferUtils.*; import java.io.IOException; @@ -51,7 +52,7 @@ * @author Joshua Slack, Eric Woroshow * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $ */ -public class PQTorus extends Mesh { +public class PQTorus extends OldMesh { private float p, q; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java index 07c161c301..c813baed11 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java @@ -37,6 +37,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; import java.io.IOException; @@ -48,7 +49,7 @@ * * @author Kirill Vainer */ -public class Quad extends Mesh { +public class Quad extends OldMesh { private float width; private float height; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java index 6f16847390..c71eeca9f5 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java @@ -41,6 +41,7 @@ import com.jme3.math.Vector2f; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import com.jme3.util.clone.Cloner; @@ -71,7 +72,7 @@ * * @author Francivan Bezerra */ -public class RectangleMesh extends Mesh { +public class RectangleMesh extends OldMesh { /** * Used to locate the vertices and calculate a default normal. diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java index f4b2ba34c6..652daffa6f 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java @@ -39,6 +39,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import com.jme3.util.TempVars; @@ -53,7 +54,7 @@ * @author Joshua Slack * @version $Revision: 4163 $, $Date: 2009-03-24 21:14:55 -0400 (Tue, 24 Mar 2009) $ */ -public class Sphere extends Mesh { +public class Sphere extends OldMesh { public enum TextureMode { diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java index 9beef259e4..d1b1354b92 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java @@ -41,6 +41,7 @@ import com.jme3.math.Vector3f; import com.jme3.math.Vector4f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer; import com.jme3.util.BufferUtils; import java.io.IOException; @@ -56,7 +57,7 @@ * a) NURBS * @author Marcin Roguski (Kealthas) */ -public class Surface extends Mesh { +public class Surface extends OldMesh { private SplineType type; // the type of the surface private List> controlPoints; // space control points and their weights private List[] knots; // knots of the surface diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java index d3e75d6faf..8a59014d92 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java @@ -38,6 +38,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; +import com.jme3.scene.OldMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import java.io.IOException; @@ -52,7 +53,7 @@ * @author Mark Powell * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $ */ -public class Torus extends Mesh { +public class Torus extends OldMesh { private int circleSamples; diff --git a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java index cd2b4a29e8..9f83d8ea19 100644 --- a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java +++ b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java @@ -38,7 +38,7 @@ import com.jme3.math.Vector3f; import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.scene.*; -import com.jme3.scene.Mesh.Mode; +import com.jme3.scene.OldMesh.Mode; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.mesh.IndexBuffer; import com.jme3.scene.mesh.IndexIntBuffer; diff --git a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java index 98ccf9c35b..649fa8a1f9 100644 --- a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java +++ b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java @@ -5,7 +5,7 @@ import com.jme3.math.Transform; import com.jme3.math.Vector3f; import com.jme3.scene.*; -import com.jme3.scene.Mesh.Mode; +import com.jme3.scene.OldMesh.Mode; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; From 050e1dfd2d8cbe01d5667599eeaa81847e4bcce4 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 13 Sep 2025 17:04:07 -0400 Subject: [PATCH 78/80] moved Material to OldMaterial --- .../main/java/com/jme3/material/Material.java | 1219 +--------------- .../java/com/jme3/material/OldMaterial.java | 1287 +++++++++++++++++ .../java/com/jme3/material/Technique.java | 8 +- .../logic/DefaultTechniqueDefLogic.java | 3 +- .../logic/MultiPassLightingLogic.java | 3 +- .../SinglePassAndImageBasedLightingLogic.java | 2 +- .../logic/SinglePassLightingLogic.java | 3 +- .../logic/StaticPassLightingLogic.java | 3 +- .../material/logic/TechniqueDefLogic.java | 8 +- .../main/java/com/jme3/scene/Geometry.java | 12 +- .../src/main/java/com/jme3/scene/Node.java | 2 +- .../src/main/java/com/jme3/scene/Spatial.java | 2 +- .../main/java/com/jme3/shader/Uniform.java | 2 +- .../com/jme3/vulkan/buffers/GpuBuffer.java | 13 + .../com/jme3/vulkan/material/NewMaterial.java | 67 +- .../com/jme3/vulkan/struct/Structure.java | 14 + 16 files changed, 1393 insertions(+), 1255 deletions(-) create mode 100644 jme3-core/src/main/java/com/jme3/material/OldMaterial.java create mode 100644 jme3-core/src/main/java/com/jme3/vulkan/struct/Structure.java diff --git a/jme3-core/src/main/java/com/jme3/material/Material.java b/jme3-core/src/main/java/com/jme3/material/Material.java index da88ff30e9..350479e5ec 100644 --- a/jme3-core/src/main/java/com/jme3/material/Material.java +++ b/jme3-core/src/main/java/com/jme3/material/Material.java @@ -31,46 +31,11 @@ */ package com.jme3.material; -import com.jme3.asset.AssetKey; -import com.jme3.asset.AssetManager; -import com.jme3.asset.CloneableSmartAsset; -import com.jme3.export.InputCapsule; -import com.jme3.export.JmeExporter; -import com.jme3.export.JmeImporter; -import com.jme3.export.OutputCapsule; import com.jme3.export.Savable; -import com.jme3.light.LightList; -import com.jme3.material.RenderState.BlendMode; -import com.jme3.material.RenderState.FaceCullMode; -import com.jme3.material.TechniqueDef.LightMode; -import com.jme3.math.ColorRGBA; -import com.jme3.math.Matrix4f; -import com.jme3.math.Vector2f; -import com.jme3.math.Vector3f; -import com.jme3.math.Vector4f; -import com.jme3.renderer.Caps; -import com.jme3.renderer.RenderManager; -import com.jme3.renderer.Renderer; -import com.jme3.renderer.TextureUnitException; -import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.scene.Geometry; -import com.jme3.shader.*; -import com.jme3.shader.bufferobject.BufferObject; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; -import com.jme3.texture.TextureImage; -import com.jme3.texture.image.ColorSpace; -import com.jme3.util.ListMap; -import com.jme3.util.SafeArrayList; - -import java.io.IOException; -import java.util.Collection; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.material.uniforms.Uniform; +import com.jme3.vulkan.pipelines.Pipeline; /** * Material describes the rendering style for a given @@ -83,1182 +48,16 @@ * * @author Kirill Vainer */ -public class Material implements CloneableSmartAsset, Cloneable, Savable { - - // Version #2: Fixed issue with RenderState.apply*** flags not getting exported - public static final int SAVABLE_VERSION = 2; - private static final Logger logger = Logger.getLogger(Material.class.getName()); - - private AssetKey key; - private String name; - private MaterialDef def; - private ListMap paramValues = new ListMap<>(); - private Technique technique; - private HashMap techniques = new HashMap<>(); - private RenderState additionalState = null; - private final RenderState mergedRenderState = new RenderState(); - private boolean transparent = false; - private boolean receivesShadows = false; - private int sortingId = -1; - - /** - * Manages and tracks texture and buffer binding units for rendering. - * Used internally by the Material class. - */ - public static class BindUnits { - /** The current texture unit counter. */ - public int textureUnit = 0; - /** The current buffer unit counter. */ - public int bufferUnit = 0; - } - private BindUnits bindUnits = new BindUnits(); - - /** - * Constructs a new Material instance based on a provided MaterialDef. - * The material's parameters will be initialized with default values from the definition. - * - * @param def The material definition to use (cannot be null). - * @throws IllegalArgumentException if def is null. - */ - public Material(MaterialDef def) { - if (def == null) { - throw new IllegalArgumentException("Material definition cannot be null"); - } - this.def = def; - - // Load default values from definition (if any) - for (MatParam param : def.getMaterialParams()) { - if (param.getValue() != null) { - setParam(param.getName(), param.getVarType(), param.getValue()); - } - } - } - - /** - * Constructs a new Material by loading its MaterialDef from the asset manager. - * - * @param assetManager The asset manager to load the MaterialDef from. - * @param defName The asset path of the .j3md file. - */ - public Material(AssetManager assetManager, String defName) { - this(assetManager.loadAsset(new AssetKey(defName))); - } - - /** - * For serialization only. Do not use. - */ - public Material() { - } - - /** - * Returns the asset key name of the asset from which this material was loaded. - *

This value will be null unless this material was loaded from a .j3m file.

- * - * @return Asset key name of the .j3m file, or null if not loaded from a file. - */ - public String getAssetName() { - return key != null ? key.getName() : null; - } - - /** - * Returns the user-defined name of the material. - * This name is distinct from the asset name and may be null or not unique. - * - * @return The name of the material, or null. - */ - public String getName() { - return name; - } - - /** - * Sets the user-defined name of the material. - * The name is not the same as the asset name. - * It can be null, and there is no guarantee of its uniqueness. - * - * @param name The name of the material. - */ - public void setName(String name) { - this.name = name; - } - - @Override - public void setKey(AssetKey key) { - this.key = key; - } - - @Override - public AssetKey getKey() { - return key; - } - - /** - * Returns the sorting ID or sorting index for this material. - * - *

The sorting ID is used internally by the system to sort rendering - * of geometries. It sorted to reduce shader switches, if the shaders - * are equal, then it is sorted by textures. - * - * @return The sorting ID used for sorting geometries for rendering. - */ - public int getSortId() { - if (sortingId == -1 && technique != null) { - sortingId = technique.getSortId() << 16; - int texturesSortId = 17; - for (int i = 0; i < paramValues.size(); i++) { - MatParam param = paramValues.getValue(i); - if (!param.getVarType().isTextureType()) { - continue; - } - Texture texture = (Texture) param.getValue(); - if (texture == null) { - continue; - } - Image image = texture.getImage(); - if (image == null) { - continue; - } - int textureId = image.getId(); - if (textureId == -1) { - textureId = 0; - } - texturesSortId = texturesSortId * 23 + textureId; - } - sortingId |= texturesSortId & 0xFFFF; - } - return sortingId; - } - - /** - * Clones this material. The result is returned. - */ - @Override - public Material clone() { - try { - Material mat = (Material) super.clone(); - - if (additionalState != null) { - mat.additionalState = additionalState.clone(); - } - mat.technique = null; - mat.techniques = new HashMap(); - - mat.paramValues = new ListMap(); - for (int i = 0; i < paramValues.size(); i++) { - Map.Entry entry = paramValues.getEntry(i); - mat.paramValues.put(entry.getKey(), entry.getValue().clone()); - } - - mat.sortingId = -1; - - return mat; - } catch (CloneNotSupportedException ex) { - throw new AssertionError(ex); - } - } - - /** - * Compares two materials for content equality. - * This methods compare definition, parameters, additional render states. - * Since materials are mutable objects, implementing equals() properly is not possible, - * hence the name contentEquals(). - * - * @param otherObj the material to compare to this material - * @return true if the materials are equal. - */ - public boolean contentEquals(Object otherObj) { - if (!(otherObj instanceof Material)) { - return false; - } - - Material other = (Material) otherObj; - - // Early exit if the material are the same object - if (this == other) { - return true; - } - - // Check material definition - if (this.getMaterialDef() != other.getMaterialDef()) { - return false; - } - - // Early exit if the size of the params is different - if (this.paramValues.size() != other.paramValues.size()) { - return false; - } - - // Checking technique - if (this.technique != null || other.technique != null) { - // Techniques are considered equal if their names are the same - // E.g. if user chose custom technique for one material but - // uses default technique for other material, the materials - // are not equal. - String thisDefName = this.technique != null - ? this.technique.getDef().getName() - : TechniqueDef.DEFAULT_TECHNIQUE_NAME; - - String otherDefName = other.technique != null - ? other.technique.getDef().getName() - : TechniqueDef.DEFAULT_TECHNIQUE_NAME; - - if (!thisDefName.equals(otherDefName)) { - return false; - } - } - - // Comparing parameters - for (String paramKey : paramValues.keySet()) { - MatParam thisParam = this.getParam(paramKey); - MatParam otherParam = other.getParam(paramKey); - - // This param does not exist in compared mat - if (otherParam == null) { - return false; - } - - if (!otherParam.equals(thisParam)) { - return false; - } - } - - // Comparing additional render states - if (additionalState == null) { - if (other.additionalState != null) { - return false; - } - } else { - if (!additionalState.equals(other.additionalState)) { - return false; - } - } - - return true; - } - - /** - * Works like {@link Object#hashCode() } except it may change together with the material as the material is mutable by definition. - * - * @return value for use in hashing - */ - public int contentHashCode() { - int hash = 7; - hash = 29 * hash + (this.def != null ? this.def.hashCode() : 0); - hash = 29 * hash + (this.paramValues != null ? this.paramValues.hashCode() : 0); - hash = 29 * hash + (this.technique != null ? this.technique.getDef().getName().hashCode() : 0); - hash = 29 * hash + (this.additionalState != null ? this.additionalState.contentHashCode() : 0); - return hash; - } - - /** - * Returns the currently active technique. - *

- * The technique is selected automatically by the {@link RenderManager} - * based on system capabilities. Users may select their own - * technique by using - * {@link #selectTechnique(java.lang.String, com.jme3.renderer.RenderManager) }. - * - * @return the currently active technique. - * - * @see #selectTechnique(java.lang.String, com.jme3.renderer.RenderManager) - */ - public Technique getActiveTechnique() { - return technique; - } - - /** - * Check if the transparent value marker is set on this material. - * @return True if the transparent value marker is set on this material. - * @see #setTransparent(boolean) - */ - public boolean isTransparent() { - return transparent; - } - - /** - * Set the transparent value marker. - * - *

This value is merely a marker, by itself it does nothing. - * Generally model loaders will use this marker to indicate further - * up that the material is transparent and therefore any geometries - * using it should be put into the {@link Bucket#Transparent transparent - * bucket}. - * - * @param transparent the transparent value marker. - */ - public void setTransparent(boolean transparent) { - this.transparent = transparent; - } - - /** - * Check if the material should receive shadows or not. - * - * @return True if the material should receive shadows. - * - * @see Material#setReceivesShadows(boolean) - */ - public boolean isReceivesShadows() { - return receivesShadows; - } - - /** - * Set if the material should receive shadows or not. - * - *

This value is merely a marker, by itself it does nothing. - * Generally model loaders will use this marker to indicate - * the material should receive shadows and therefore any - * geometries using it should have {@link com.jme3.renderer.queue.RenderQueue.ShadowMode#Receive} set - * on them. - * - * @param receivesShadows if the material should receive shadows or not. - */ - public void setReceivesShadows(boolean receivesShadows) { - this.receivesShadows = receivesShadows; - } - - /** - * Acquire the additional {@link RenderState render state} to apply - * for this material. - * - *

The first call to this method will create an additional render - * state which can be modified by the user to apply any render - * states in addition to the ones used by the renderer. Only render - * states which are modified in the additional render state will be applied. - * - * @return The additional render state. - */ - public RenderState getAdditionalRenderState() { - if (additionalState == null) { - additionalState = RenderState.ADDITIONAL.clone(); - } - return additionalState; - } - - /** - * Get the material definition (.j3md file info) that this - * material is implementing. - * - * @return the material definition this material implements. - */ - public MaterialDef getMaterialDef() { - return def; - } - - /** - * Returns the parameter set on this material with the given name, - * returns null if the parameter is not set. - * - * @param name The parameter name to look up. - * @return The MatParam if set, or null if not set. - */ - public MatParam getParam(String name) { - return paramValues.get(name); - } - - /** - * Returns the current parameter's value. - * - * @param the expected type of the parameter value - * @param name the parameter name to look up. - * @return current value or null if the parameter wasn't set. - */ - @SuppressWarnings("unchecked") - public T getParamValue(final String name) { - final MatParam param = paramValues.get(name); - return param == null ? null : (T) param.getValue(); - } - - /** - * Returns the texture parameter set on this material with the given name, - * returns null if the parameter is not set. - * - * @param name The parameter name to look up. - * @return The MatParamTexture if set, or null if not set. - */ - public MatParamTexture getTextureParam(String name) { - MatParam param = paramValues.get(name); - if (param instanceof MatParamTexture) { - return (MatParamTexture) param; - } - return null; - } - - /** - * Returns a collection of all parameters set on this material. - * - * @return a collection of all parameters set on this material. - * - * @see #setParam(java.lang.String, com.jme3.shader.VarType, java.lang.Object) - */ - public Collection getParams() { - return paramValues.values(); - } - - /** - * Returns the ListMap of all parameters set on this material. - * - * @return a ListMap of all parameters set on this material. - * - * @see #setParam(java.lang.String, com.jme3.shader.VarType, java.lang.Object) - */ - public ListMap getParamsMap() { - return paramValues; - } - - /** - * Check if setting the parameter given the type and name is allowed. - * @param type The type that the "set" function is designed to set - * @param name The name of the parameter - */ - private void checkSetParam(VarType type, String name) { - MatParam paramDef = def.getMaterialParam(name); - if (paramDef == null) { - throw new IllegalArgumentException("Material parameter is not defined: " + name); - } - if (type != null && paramDef.getVarType() != type) { - logger.log(Level.WARNING, "Material parameter being set: {0} with " - + "type {1} doesn''t match definition types {2}", new Object[]{name, type.name(), paramDef.getVarType()}); - } - } - - /** - * Pass a parameter to the material shader. - * - * @param name the name of the parameter defined in the material definition (.j3md) - * @param type the type of the parameter {@link VarType} - * @param value the value of the parameter - */ - public void setParam(String name, VarType type, Object value) { - checkSetParam(type, name); - - if (type.isTextureType()) { - setTextureParam(name, type, (Texture)value); - } else { - MatParam val = getParam(name); - if (val == null) { - paramValues.put(name, new MatParam(type, name, value)); - } else { - val.setValue(value); - } - - if (technique != null) { - technique.notifyParamChanged(name, type, value); - } - if (type.isImageType()) { - // recompute sort id - sortingId = -1; - } - } - } - - /** - * Pass a parameter to the material shader. - * - * @param name the name of the parameter defined in the material definition (j3md) - * @param value the value of the parameter - */ - public void setParam(String name, Object value) { - MatParam p = getMaterialDef().getMaterialParam(name); - setParam(name, p.getVarType(), value); - } - - /** - * Clear a parameter from this material. The parameter must exist - * @param name the name of the parameter to clear - */ - public void clearParam(String name) { - checkSetParam(null, name); - MatParam matParam = getParam(name); - if (matParam == null) { - return; - } - - paramValues.remove(name); - if (matParam instanceof MatParamTexture) { - sortingId = -1; - } - if (technique != null) { - technique.notifyParamChanged(name, null, null); - } - } - - /** - * Set a texture parameter. - * - * @param name The name of the parameter - * @param type The variable type {@link VarType} - * @param value The texture value of the parameter. - * - * @throws IllegalArgumentException is value is null - */ - public void setTextureParam(String name, VarType type, Texture value) { - if (value == null) { - throw new IllegalArgumentException(); - } - - checkSetParam(type, name); - MatParamTexture param = getTextureParam(name); +public interface Material extends Savable { - checkTextureParamColorSpace(name, value); - ColorSpace colorSpace = value.getImage() != null ? value.getImage().getColorSpace() : null; + void bind(CommandBuffer cmd, Pipeline pipeline, int offset); - if (param == null) { - param = new MatParamTexture(type, name, value, colorSpace); - paramValues.put(name, param); - } else { - param.setTextureValue(value); - param.setColorSpace(colorSpace); - } + void setParam(String uniform, String param, Object value); - if (technique != null) { - technique.notifyParamChanged(name, type, value); - } + T getUniform(String name); - // need to recompute sort ID - sortingId = -1; + default void bind(CommandBuffer cmd, Pipeline pipeline) { + bind(cmd, pipeline, 0); } - private void checkTextureParamColorSpace(String name, Texture value) { - MatParamTexture paramDef = (MatParamTexture) def.getMaterialParam(name); - if (paramDef.getColorSpace() != null && paramDef.getColorSpace() != value.getImage().getColorSpace()) { - value.getImage().setColorSpace(paramDef.getColorSpace()); - if (logger.isLoggable(Level.FINE)) { - logger.log(Level.FINE, "Material parameter {0} needs a {1} texture, " - + "texture {2} was switched to {3} color space.", - new Object[]{name, paramDef.getColorSpace().toString(), - value.getName(), - value.getImage().getColorSpace().name()}); - } - } else if (paramDef.getColorSpace() == null && value.getName() != null && value.getImage().getColorSpace() == ColorSpace.Linear) { - logger.log(Level.WARNING, - "The texture {0} has linear color space, but the material " - + "parameter {2} specifies no color space requirement, this may " - + "lead to unexpected behavior.\nCheck if the image " - + "was not set to another material parameter with a linear " - + "color space, or that you did not set the ColorSpace to " - + "Linear using texture.getImage.setColorSpace().", - new Object[]{value.getName(), value.getImage().getColorSpace().name(), name}); - } - } - - /** - * Pass a texture to the material shader. - * - * @param name the name of the texture defined in the material definition - * (.j3md) (e.g. Texture for Lighting.j3md) - * @param value the Texture object previously loaded by the asset manager - */ - public void setTexture(String name, Texture value) { - if (value == null) { - // clear it - clearParam(name); - return; - } - - VarType paramType = null; - switch (value.getType()) { - case TwoDimensional: - paramType = VarType.Texture2D; - break; - case TwoDimensionalArray: - paramType = VarType.TextureArray; - break; - case ThreeDimensional: - paramType = VarType.Texture3D; - break; - case CubeMap: - paramType = VarType.TextureCubeMap; - break; - default: - throw new UnsupportedOperationException("Unknown texture type: " + value.getType()); - } - - setTextureParam(name, paramType, value); - } - - /** - * Pass a Matrix4f to the material shader. - * - * @param name the name of the matrix defined in the material definition (j3md) - * @param value the Matrix4f object - */ - public void setMatrix4(String name, Matrix4f value) { - setParam(name, VarType.Matrix4, value); - } - - /** - * Pass a boolean to the material shader. - * - * @param name the name of the boolean defined in the material definition (j3md) - * @param value the boolean value - */ - public void setBoolean(String name, boolean value) { - setParam(name, VarType.Boolean, value); - } - - /** - * Pass a float to the material shader. - * - * @param name the name of the float defined in the material definition (j3md) - * @param value the float value - */ - public void setFloat(String name, float value) { - setParam(name, VarType.Float, value); - } - - /** - * Pass a float to the material shader. This version avoids auto-boxing - * if the value is already a Float. - * - * @param name the name of the float defined in the material definition (j3md) - * @param value the float value - */ - public void setFloat(String name, Float value) { - setParam(name, VarType.Float, value); - } - - /** - * Pass an int to the material shader. - * - * @param name the name of the int defined in the material definition (j3md) - * @param value the int value - */ - public void setInt(String name, int value) { - setParam(name, VarType.Int, value); - } - - /** - * Pass a Color to the material shader. - * - * @param name the name of the color defined in the material definition (j3md) - * @param value the ColorRGBA value - */ - public void setColor(String name, ColorRGBA value) { - setParam(name, VarType.Vector4, value); - } - - /** - * Pass a uniform buffer object to the material shader. - * - * @param name the name of the buffer object defined in the material definition (j3md). - * @param value the buffer object. - */ - public void setUniformBufferObject(final String name, final BufferObject value) { - setParam(name, VarType.UniformBufferObject, value); - } - - /** - * Pass a shader storage buffer object to the material shader. - * - * @param name the name of the buffer object defined in the material definition (j3md). - * @param value the buffer object. - */ - public void setShaderStorageBufferObject(final String name, final BufferObject value) { - setParam(name, VarType.ShaderStorageBufferObject, value); - } - - /** - * Pass a Vector2f to the material shader. - * - * @param name the name of the Vector2f defined in the material definition (j3md) - * @param value the Vector2f value - */ - public void setVector2(String name, Vector2f value) { - setParam(name, VarType.Vector2, value); - } - - /** - * Pass a Vector3f to the material shader. - * - * @param name the name of the Vector3f defined in the material definition (j3md) - * @param value the Vector3f value - */ - public void setVector3(String name, Vector3f value) { - setParam(name, VarType.Vector3, value); - } - - /** - * Pass a Vector4f to the material shader. - * - * @param name the name of the Vector4f defined in the material definition (j3md) - * @param value the Vector4f value - */ - public void setVector4(String name, Vector4f value) { - setParam(name, VarType.Vector4, value); - } - - /** - * Select the technique to use for rendering this material. - *

- * Any candidate technique for selection (either default or named) - * must be verified to be compatible with the system, for that, the - * renderManager is queried for capabilities. - * - * @param name The name of the technique to select, pass - * {@link TechniqueDef#DEFAULT_TECHNIQUE_NAME} to select one of the default - * techniques. - * @param renderManager The {@link RenderManager render manager} - * to query for capabilities. - * - * @throws IllegalArgumentException If no technique exists with the given - * name. - * @throws UnsupportedOperationException If no candidate technique supports - * the system capabilities. - */ - public void selectTechnique(String name, final RenderManager renderManager) { - // check if already created - Technique tech = techniques.get(name); - // When choosing technique, we choose one that - // supports all the caps. - if (tech == null) { - EnumSet rendererCaps = renderManager.getRenderer().getCaps(); - List techDefs = def.getTechniqueDefs(name); - if (techDefs == null || techDefs.isEmpty()) { - throw new IllegalArgumentException( - String.format("The requested technique %s is not available on material %s", name, def.getName())); - } - - TechniqueDef lastTech = null; - float weight = 0; - for (TechniqueDef techDef : techDefs) { - if (rendererCaps.containsAll(techDef.getRequiredCaps())) { - float techWeight = techDef.getWeight() + (techDef.getLightMode() == renderManager.getPreferredLightMode() ? 10f : 0); - if (techWeight > weight) { - tech = new Technique(this, techDef); - techniques.put(name, tech); - weight = techWeight; - } - } - lastTech = techDef; - } - if (tech == null) { - throw new UnsupportedOperationException( - String.format("No technique '%s' on material " - + "'%s' is supported by the video hardware. " - + "The capabilities %s are required.", - name, def.getName(), lastTech.getRequiredCaps())); - } - if (logger.isLoggable(Level.FINE)) { - logger.log(Level.FINE, this.getMaterialDef().getName() + " selected technique def " + tech.getDef()); - } - } else if (technique == tech) { - // attempting to switch to an already - // active technique. - return; - } - - technique = tech; - tech.notifyTechniqueSwitched(); - - // shader was changed - sortingId = -1; - } - - private void applyOverrides(Renderer renderer, Shader shader, SafeArrayList overrides, BindUnits bindUnits) { - for (MatParamOverride override : overrides.getArray()) { - VarType type = override.getVarType(); - - MatParam paramDef = def.getMaterialParam(override.getName()); - - if (paramDef == null || paramDef.getVarType() != type || !override.isEnabled()) { - continue; - } - - Uniform uniform = shader.getUniform(override.getPrefixedName()); - - if (override.getValue() != null) { - updateShaderMaterialParameter(renderer, type, shader, override, bindUnits, true); - } else { - uniform.clearValue(); - } - } - } - - private void updateShaderMaterialParameter(Renderer renderer, VarType type, Shader shader, MatParam param, BindUnits unit, boolean override) { - if (type == VarType.UniformBufferObject || type == VarType.ShaderStorageBufferObject) { - ShaderBufferBlock bufferBlock = shader.getBufferBlock(param.getPrefixedName()); - BufferObject bufferObject = (BufferObject) param.getValue(); - - ShaderBufferBlock.BufferType btype; - if (type == VarType.ShaderStorageBufferObject) { - btype = ShaderBufferBlock.BufferType.ShaderStorageBufferObject; - bufferBlock.setBufferObject(btype, bufferObject); - renderer.setShaderStorageBufferObject(unit.bufferUnit, bufferObject); // TODO: probably not needed - } else { - btype = ShaderBufferBlock.BufferType.UniformBufferObject; - bufferBlock.setBufferObject(btype, bufferObject); - renderer.setUniformBufferObject(unit.bufferUnit, bufferObject); // TODO: probably not needed - } - unit.bufferUnit++; - } else { - Uniform uniform = shader.getUniform(param.getPrefixedName()); - if (!override && uniform.isSetByCurrentMaterial()) - return; - - if (type.isTextureType() || type.isImageType()) { - try { - if (type.isTextureType()) { - renderer.setTexture(unit.textureUnit, (Texture) param.getValue()); - } else { - renderer.setTextureImage(unit.textureUnit, (TextureImage) param.getValue()); - } - } catch (TextureUnitException ex) { - int numTexParams = unit.textureUnit + 1; - String message = "Too many texture parameters (" + numTexParams + ") assigned\n to " + this.toString(); - throw new IllegalStateException(message); - } - uniform.setValue(VarType.Int, unit.textureUnit); - unit.textureUnit++; - } else { - uniform.setValue(type, param.getValue()); - } - } - } - - private BindUnits updateShaderMaterialParameters(Renderer renderer, Shader shader, - SafeArrayList worldOverrides, SafeArrayList forcedOverrides) { - - bindUnits.textureUnit = 0; - bindUnits.bufferUnit = 0; - - if (worldOverrides != null) { - applyOverrides(renderer, shader, worldOverrides, bindUnits); - } - if (forcedOverrides != null) { - applyOverrides(renderer, shader, forcedOverrides, bindUnits); - } - - for (int i = 0; i < paramValues.size(); i++) { - MatParam param = paramValues.getValue(i); - VarType type = param.getVarType(); - updateShaderMaterialParameter(renderer, type, shader, param, bindUnits, false); - } - - // TODO: HACKY HACK remove this when texture unit is handled by the uniform. - return bindUnits; - } - - private void updateRenderState(Geometry geometry, RenderManager renderManager, Renderer renderer, TechniqueDef techniqueDef) { - RenderState finalRenderState; - if (renderManager.getForcedRenderState() != null) { - finalRenderState = mergedRenderState.copyFrom(renderManager.getForcedRenderState()); - } else if (techniqueDef.getRenderState() != null) { - finalRenderState = mergedRenderState.copyFrom(RenderState.DEFAULT); - finalRenderState = techniqueDef.getRenderState().copyMergedTo(additionalState, finalRenderState); - } else { - finalRenderState = mergedRenderState.copyFrom(RenderState.DEFAULT); - finalRenderState = RenderState.DEFAULT.copyMergedTo(additionalState, finalRenderState); - } - // test if the face cull mode should be flipped before render - if (finalRenderState.isFaceCullFlippable() && isNormalsBackward(geometry.getWorldScale())) { - finalRenderState.flipFaceCull(); - } - renderer.applyRenderState(finalRenderState); - } - - /** - * Returns true if the geometry world scale indicates that normals will be backward. - * - * @param scalar The geometry's world scale vector. - * @return true if the normals are effectively backward; false otherwise. - */ - private boolean isNormalsBackward(Vector3f scalar) { - // count number of negative scalar vector components - int n = 0; - if (scalar.x < 0) n++; - if (scalar.y < 0) n++; - if (scalar.z < 0) n++; - // An odd number of negative components means the normal vectors - // are backward to what they should be. - return n == 1 || n == 3; - } - - /** - * Preloads this material for the given render manager. - *

- * Preloading the material can ensure that when the material is first - * used for rendering, there won't be any delay since the material has - * been already been setup for rendering. - * - * @param renderManager The render manager to preload for - * @param geometry to determine the applicable parameter overrides, if any - */ - public void preload(RenderManager renderManager, Geometry geometry) { - if (technique == null) { - selectTechnique(TechniqueDef.DEFAULT_TECHNIQUE_NAME, renderManager); - } - TechniqueDef techniqueDef = technique.getDef(); - Renderer renderer = renderManager.getRenderer(); - EnumSet rendererCaps = renderer.getCaps(); - - if (techniqueDef.isNoRender()) { - return; - } - // Get world overrides - SafeArrayList overrides = geometry.getWorldMatParamOverrides(); - - Shader shader = technique.makeCurrent(renderManager, overrides, null, null, rendererCaps); - updateShaderMaterialParameters(renderer, shader, overrides, null); - renderManager.getRenderer().setShader(shader); - } - - private void clearUniformsSetByCurrent(Shader shader) { - ListMap uniforms = shader.getUniformMap(); - int size = uniforms.size(); - for (int i = 0; i < size; i++) { - Uniform u = uniforms.getValue(i); - u.clearSetByCurrentMaterial(); - } - } - - private void resetUniformsNotSetByCurrent(Shader shader) { - ListMap uniforms = shader.getUniformMap(); - int size = uniforms.size(); - for (int i = 0; i < size; i++) { - Uniform u = uniforms.getValue(i); - if (!u.isSetByCurrentMaterial()) { - if (u.getName().charAt(0) != 'g') { - // Don't reset world globals! - // The benefits gained from this are very minimal - // and cause lots of matrix -> FloatBuffer conversions. - u.clearValue(); - } - } - } - } - - /** - * Called by {@link RenderManager} to render the geometry by - * using this material. - *

- * The material is rendered as follows: - *

    - *
  • Determine which technique to use to render the material - - * either what the user selected via - * {@link #selectTechnique(java.lang.String, com.jme3.renderer.RenderManager) - * Material.selectTechnique()}, - * or the first default technique that the renderer supports - * (based on the technique's {@link TechniqueDef#getRequiredCaps() requested rendering capabilities})
      - *
    • If the technique has been changed since the last frame, then it is notified via - * {@link Technique#makeCurrent(com.jme3.renderer.RenderManager, com.jme3.util.SafeArrayList, com.jme3.util.SafeArrayList, com.jme3.light.LightList, java.util.EnumSet) - * Technique.makeCurrent()}. - * If the technique wants to use a shader to render the model, it should load it at this part - - * the shader should have all the proper defines as declared in the technique definition, - * including those that are bound to material parameters. - * The technique can re-use the shader from the last frame if - * no changes to the defines occurred.
    - *
  • Set the {@link RenderState} to use for rendering. The render states are - * applied in this order (later RenderStates override earlier RenderStates):
      - *
    1. {@link TechniqueDef#getRenderState() Technique Definition's RenderState} - * - i.e. specific RenderState that is required for the shader.
    2. - *
    3. {@link #getAdditionalRenderState() Material Instance Additional RenderState} - * - i.e. ad-hoc RenderState set per model
    4. - *
    5. {@link RenderManager#getForcedRenderState() RenderManager's Forced RenderState} - * - i.e. RenderState requested by a {@link com.jme3.post.SceneProcessor} or - * post-processing filter.
    - *
  • If the technique uses a shader, then the uniforms of the shader must be updated.
      - *
    • Uniforms bound to material parameters are updated based on the current material parameter values.
    • - *
    • Uniforms bound to world parameters are updated from the RenderManager. - * Internally {@link UniformBindingManager} is used for this task.
    • - *
    • Uniforms bound to textures will cause the texture to be uploaded as necessary. - * The uniform is set to the texture unit where the texture is bound.
    - *
  • If the technique uses a shader, the model is then rendered according - * to the lighting mode specified on the technique definition.
      - *
    • {@link LightMode#SinglePass single pass light mode} fills the shader's light uniform arrays - * with the first 4 lights and renders the model once.
    • - *
    • {@link LightMode#MultiPass multi pass light mode} light mode renders the model multiple times, - * for the first light it is rendered opaque, on subsequent lights it is - * rendered with {@link BlendMode#AlphaAdditive alpha-additive} blending and depth writing disabled.
    • - *
    - *
  • For techniques that do not use shaders, - * fixed function OpenGL is used to render the model (see {@link com.jme3.renderer.opengl.GLRenderer} interface):
      - *
    • OpenGL state that is bound to material parameters is updated.
    • - *
    • The texture set on the material is uploaded and bound. - * Currently only 1 texture is supported for fixed function techniques.
    • - *
    • If the technique uses lighting, then OpenGL lighting state is updated - * based on the light list on the geometry, otherwise OpenGL lighting is disabled.
    • - *
    • The mesh is uploaded and rendered.
    • - *
    - *
- * - * @param geometry The geometry to render - * @param lights Presorted and filtered light list to use for rendering - * @param renderManager The render manager requesting the rendering - */ - public void render(Geometry geometry, LightList lights, RenderManager renderManager) { - if (technique == null) { - selectTechnique(TechniqueDef.DEFAULT_TECHNIQUE_NAME, renderManager); - } - - TechniqueDef techniqueDef = technique.getDef(); - Renderer renderer = renderManager.getRenderer(); - EnumSet rendererCaps = renderer.getCaps(); - - if (techniqueDef.isNoRender()) { - return; - } - - // Apply render state - updateRenderState(geometry, renderManager, renderer, techniqueDef); - - // Get world overrides - SafeArrayList overrides = geometry.getWorldMatParamOverrides(); - - // Select shader to use - Shader shader = technique.makeCurrent(renderManager, overrides, renderManager.getForcedMatParams(), lights, rendererCaps); - - // Begin tracking which uniforms were changed by material. - clearUniformsSetByCurrent(shader); - - // Set uniform bindings - renderManager.updateUniformBindings(shader); - - // Set material parameters - BindUnits units = updateShaderMaterialParameters(renderer, shader, overrides, renderManager.getForcedMatParams()); - - // Clear any uniforms not changed by material. - resetUniformsNotSetByCurrent(shader); - - // Delegate rendering to the technique - technique.render(renderManager, shader, geometry, lights, units); - } - - /** - * Called by {@link RenderManager} to render the geometry by - * using this material. - * - * Note that this version of the render method - * does not perform light filtering. - * - * @param geom The geometry to render - * @param rm The render manager requesting the rendering - */ - public void render(Geometry geom, RenderManager rm) { - render(geom, geom.getWorldLightList(), rm); - } - - @Override - public String toString() { - return "Material[name=" + name + - ", def=" + (def != null ? def.getName() : null) + - ", tech=" + (technique != null && technique.getDef() != null ? technique.getDef().getName() : null) + - "]"; - } - - @Override - public void write(JmeExporter ex) throws IOException { - OutputCapsule oc = ex.getCapsule(this); - oc.write(def.getAssetName(), "material_def", null); - oc.write(additionalState, "render_state", null); - oc.write(transparent, "is_transparent", false); - oc.write(name, "name", null); - oc.writeStringSavableMap(paramValues, "parameters", null); - } - - @Override - @SuppressWarnings("unchecked") - public void read(JmeImporter im) throws IOException { - InputCapsule ic = im.getCapsule(this); - - name = ic.readString("name", null); - additionalState = (RenderState) ic.readSavable("render_state", null); - transparent = ic.readBoolean("is_transparent", false); - - // Load the material def - String defName = ic.readString("material_def", null); - HashMap params = (HashMap) ic.readStringSavableMap("parameters", null); - - boolean enableVertexColor = false; - boolean separateTexCoord = false; - boolean applyDefaultValues = false; - boolean guessRenderStateApply = false; - - int ver = ic.getSavableVersion(Material.class); - if (ver < 1) { - applyDefaultValues = true; - } - if (ver < 2) { - guessRenderStateApply = true; - } - if (im.getFormatVersion() == 0) { - // Enable compatibility with old models - if (defName.equalsIgnoreCase("Common/MatDefs/Misc/VertexColor.j3md")) { - // Using VertexColor, switch to Unshaded and set VertexColor=true - enableVertexColor = true; - defName = "Common/MatDefs/Misc/Unshaded.j3md"; - } else if (defName.equalsIgnoreCase("Common/MatDefs/Misc/SimpleTextured.j3md") - || defName.equalsIgnoreCase("Common/MatDefs/Misc/SolidColor.j3md")) { - // Using SimpleTextured/SolidColor, just switch to Unshaded - defName = "Common/MatDefs/Misc/Unshaded.j3md"; - } else if (defName.equalsIgnoreCase("Common/MatDefs/Misc/WireColor.j3md")) { - // Using WireColor, set wireframe render state = true and use Unshaded - getAdditionalRenderState().setWireframe(true); - defName = "Common/MatDefs/Misc/Unshaded.j3md"; - } else if (defName.equalsIgnoreCase("Common/MatDefs/Misc/Unshaded.j3md")) { - // Uses unshaded, ensure that the proper param is set - MatParam value = params.get("SeperateTexCoord"); - if (value != null && ((Boolean) value.getValue()) == true) { - params.remove("SeperateTexCoord"); - separateTexCoord = true; - } - } - assert applyDefaultValues && guessRenderStateApply; - } - - def = im.getAssetManager().loadAsset(new AssetKey(defName)); - paramValues = new ListMap(); - - // load the textures and update nextTexUnit - for (Map.Entry entry : params.entrySet()) { - MatParam param = entry.getValue(); - if (param instanceof MatParamTexture) { - MatParamTexture texVal = (MatParamTexture) param; - // the texture failed to load for this param - // do not add to param values - if (texVal.getTextureValue() == null || texVal.getTextureValue().getImage() == null) { - continue; - } - checkTextureParamColorSpace(texVal.getName(), texVal.getTextureValue()); - } - - if (im.getFormatVersion() == 0 && param.getName().startsWith("m_")) { - // Ancient version of jME3 ... - param.setName(param.getName().substring(2)); - } - - if (def.getMaterialParam(param.getName()) == null) { - logger.log(Level.WARNING, "The material parameter is not defined: {0}. Ignoring..", - param.getName()); - } else { - checkSetParam(param.getVarType(), param.getName()); - paramValues.put(param.getName(), param); - } - } - - if (applyDefaultValues) { - // compatibility with old versions where default vars were not available - for (MatParam param : def.getMaterialParams()) { - if (param.getValue() != null && paramValues.get(param.getName()) == null) { - setParam(param.getName(), param.getVarType(), param.getValue()); - } - } - } - if (guessRenderStateApply && additionalState != null) { - // Try to guess values of "apply" render state based on defaults - // if value != default then set apply to true - additionalState.applyPolyOffset = additionalState.offsetEnabled; - additionalState.applyBlendMode = additionalState.blendMode != BlendMode.Off; - additionalState.applyColorWrite = !additionalState.colorWrite; - additionalState.applyCullMode = additionalState.cullMode != FaceCullMode.Back; - additionalState.applyDepthTest = !additionalState.depthTest; - additionalState.applyDepthWrite = !additionalState.depthWrite; - additionalState.applyStencilTest = additionalState.stencilTest; - additionalState.applyWireFrame = additionalState.wireframe; - } - if (enableVertexColor) { - setBoolean("VertexColor", true); - } - if (separateTexCoord) { - setBoolean("SeparateTexCoord", true); - } - } } diff --git a/jme3-core/src/main/java/com/jme3/material/OldMaterial.java b/jme3-core/src/main/java/com/jme3/material/OldMaterial.java new file mode 100644 index 0000000000..aba37ab00c --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/material/OldMaterial.java @@ -0,0 +1,1287 @@ +/* + * Copyright (c) 2009-2025 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.material; + +import com.jme3.asset.AssetKey; +import com.jme3.asset.AssetManager; +import com.jme3.asset.CloneableSmartAsset; +import com.jme3.export.InputCapsule; +import com.jme3.export.JmeExporter; +import com.jme3.export.JmeImporter; +import com.jme3.export.OutputCapsule; +import com.jme3.export.Savable; +import com.jme3.light.LightList; +import com.jme3.material.RenderState.BlendMode; +import com.jme3.material.RenderState.FaceCullMode; +import com.jme3.material.TechniqueDef.LightMode; +import com.jme3.math.ColorRGBA; +import com.jme3.math.Matrix4f; +import com.jme3.math.Vector2f; +import com.jme3.math.Vector3f; +import com.jme3.math.Vector4f; +import com.jme3.renderer.Caps; +import com.jme3.renderer.RenderManager; +import com.jme3.renderer.Renderer; +import com.jme3.renderer.TextureUnitException; +import com.jme3.renderer.queue.RenderQueue.Bucket; +import com.jme3.scene.Geometry; +import com.jme3.shader.*; +import com.jme3.shader.bufferobject.BufferObject; +import com.jme3.texture.Image; +import com.jme3.texture.Texture; +import com.jme3.texture.TextureImage; +import com.jme3.texture.image.ColorSpace; +import com.jme3.util.ListMap; +import com.jme3.util.SafeArrayList; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.pipelines.Pipeline; +import org.lwjgl.opengl.GL45; + +import java.io.IOException; +import java.util.Collection; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Material describes the rendering style for a given + * {@link Geometry}. + *

A material is essentially a list of {@link MatParam parameters}, + * those parameters map to uniforms which are defined in a shader. + * Setting the parameters can modify the behavior of a + * shader. + *

+ * + * @author Kirill Vainer + */ +public class OldMaterial implements Material, CloneableSmartAsset, Cloneable, Savable { + + // Version #2: Fixed issue with RenderState.apply*** flags not getting exported + public static final int SAVABLE_VERSION = 2; + private static final Logger logger = Logger.getLogger(Material.class.getName()); + + private AssetKey key; + private String name; + private MaterialDef def; + private ListMap paramValues = new ListMap<>(); + private Technique technique; + private HashMap techniques = new HashMap<>(); + private RenderState additionalState = null; + private final RenderState mergedRenderState = new RenderState(); + private boolean transparent = false; + private boolean receivesShadows = false; + private int sortingId = -1; + + @Override + public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { + // todo: implement properly + int loc = GL45.glGetUniformLocation(pipeline.getNativeObject().intValue(), "MyUniformName"); + GL45.glUniform1f(loc, 123.4f); + } + + @Override + public void setParam(String uniform, String param, Object value) { + // todo: implement + throw new UnsupportedOperationException("Not implemented yet."); + } + + @Override + public T getUniform(String name) { + // todo: implement + throw new UnsupportedOperationException("Not implemented yet."); + } + + /** + * Manages and tracks texture and buffer binding units for rendering. + * Used internally by the Material class. + */ + public static class BindUnits { + /** The current texture unit counter. */ + public int textureUnit = 0; + /** The current buffer unit counter. */ + public int bufferUnit = 0; + } + private BindUnits bindUnits = new BindUnits(); + + /** + * Constructs a new Material instance based on a provided MaterialDef. + * The material's parameters will be initialized with default values from the definition. + * + * @param def The material definition to use (cannot be null). + * @throws IllegalArgumentException if def is null. + */ + public OldMaterial(MaterialDef def) { + if (def == null) { + throw new IllegalArgumentException("Material definition cannot be null"); + } + this.def = def; + + // Load default values from definition (if any) + for (MatParam param : def.getMaterialParams()) { + if (param.getValue() != null) { + setParam(param.getName(), param.getVarType(), param.getValue()); + } + } + } + + /** + * Constructs a new Material by loading its MaterialDef from the asset manager. + * + * @param assetManager The asset manager to load the MaterialDef from. + * @param defName The asset path of the .j3md file. + */ + public OldMaterial(AssetManager assetManager, String defName) { + this(assetManager.loadAsset(new AssetKey(defName))); + } + + /** + * For serialization only. Do not use. + */ + public OldMaterial() { + } + + /** + * Returns the asset key name of the asset from which this material was loaded. + *

This value will be null unless this material was loaded from a .j3m file.

+ * + * @return Asset key name of the .j3m file, or null if not loaded from a file. + */ + public String getAssetName() { + return key != null ? key.getName() : null; + } + + /** + * Returns the user-defined name of the material. + * This name is distinct from the asset name and may be null or not unique. + * + * @return The name of the material, or null. + */ + public String getName() { + return name; + } + + /** + * Sets the user-defined name of the material. + * The name is not the same as the asset name. + * It can be null, and there is no guarantee of its uniqueness. + * + * @param name The name of the material. + */ + public void setName(String name) { + this.name = name; + } + + @Override + public void setKey(AssetKey key) { + this.key = key; + } + + @Override + public AssetKey getKey() { + return key; + } + + /** + * Returns the sorting ID or sorting index for this material. + * + *

The sorting ID is used internally by the system to sort rendering + * of geometries. It sorted to reduce shader switches, if the shaders + * are equal, then it is sorted by textures. + * + * @return The sorting ID used for sorting geometries for rendering. + */ + public int getSortId() { + if (sortingId == -1 && technique != null) { + sortingId = technique.getSortId() << 16; + int texturesSortId = 17; + for (int i = 0; i < paramValues.size(); i++) { + MatParam param = paramValues.getValue(i); + if (!param.getVarType().isTextureType()) { + continue; + } + Texture texture = (Texture) param.getValue(); + if (texture == null) { + continue; + } + Image image = texture.getImage(); + if (image == null) { + continue; + } + int textureId = image.getId(); + if (textureId == -1) { + textureId = 0; + } + texturesSortId = texturesSortId * 23 + textureId; + } + sortingId |= texturesSortId & 0xFFFF; + } + return sortingId; + } + + /** + * Clones this material. The result is returned. + */ + @Override + public OldMaterial clone() { + try { + OldMaterial mat = (OldMaterial) super.clone(); + + if (additionalState != null) { + mat.additionalState = additionalState.clone(); + } + mat.technique = null; + mat.techniques = new HashMap(); + + mat.paramValues = new ListMap(); + for (int i = 0; i < paramValues.size(); i++) { + Map.Entry entry = paramValues.getEntry(i); + mat.paramValues.put(entry.getKey(), entry.getValue().clone()); + } + + mat.sortingId = -1; + + return mat; + } catch (CloneNotSupportedException ex) { + throw new AssertionError(ex); + } + } + + /** + * Compares two materials for content equality. + * This methods compare definition, parameters, additional render states. + * Since materials are mutable objects, implementing equals() properly is not possible, + * hence the name contentEquals(). + * + * @param otherObj the material to compare to this material + * @return true if the materials are equal. + */ + public boolean contentEquals(Object otherObj) { + if (!(otherObj instanceof OldMaterial)) { + return false; + } + + OldMaterial other = (OldMaterial) otherObj; + + // Early exit if the material are the same object + if (this == other) { + return true; + } + + // Check material definition + if (this.getMaterialDef() != other.getMaterialDef()) { + return false; + } + + // Early exit if the size of the params is different + if (this.paramValues.size() != other.paramValues.size()) { + return false; + } + + // Checking technique + if (this.technique != null || other.technique != null) { + // Techniques are considered equal if their names are the same + // E.g. if user chose custom technique for one material but + // uses default technique for other material, the materials + // are not equal. + String thisDefName = this.technique != null + ? this.technique.getDef().getName() + : TechniqueDef.DEFAULT_TECHNIQUE_NAME; + + String otherDefName = other.technique != null + ? other.technique.getDef().getName() + : TechniqueDef.DEFAULT_TECHNIQUE_NAME; + + if (!thisDefName.equals(otherDefName)) { + return false; + } + } + + // Comparing parameters + for (String paramKey : paramValues.keySet()) { + MatParam thisParam = this.getParam(paramKey); + MatParam otherParam = other.getParam(paramKey); + + // This param does not exist in compared mat + if (otherParam == null) { + return false; + } + + if (!otherParam.equals(thisParam)) { + return false; + } + } + + // Comparing additional render states + if (additionalState == null) { + if (other.additionalState != null) { + return false; + } + } else { + if (!additionalState.equals(other.additionalState)) { + return false; + } + } + + return true; + } + + /** + * Works like {@link Object#hashCode() } except it may change together with the material as the material is mutable by definition. + * + * @return value for use in hashing + */ + public int contentHashCode() { + int hash = 7; + hash = 29 * hash + (this.def != null ? this.def.hashCode() : 0); + hash = 29 * hash + (this.paramValues != null ? this.paramValues.hashCode() : 0); + hash = 29 * hash + (this.technique != null ? this.technique.getDef().getName().hashCode() : 0); + hash = 29 * hash + (this.additionalState != null ? this.additionalState.contentHashCode() : 0); + return hash; + } + + /** + * Returns the currently active technique. + *

+ * The technique is selected automatically by the {@link RenderManager} + * based on system capabilities. Users may select their own + * technique by using + * {@link #selectTechnique(java.lang.String, com.jme3.renderer.RenderManager) }. + * + * @return the currently active technique. + * + * @see #selectTechnique(java.lang.String, com.jme3.renderer.RenderManager) + */ + public Technique getActiveTechnique() { + return technique; + } + + /** + * Check if the transparent value marker is set on this material. + * @return True if the transparent value marker is set on this material. + * @see #setTransparent(boolean) + */ + public boolean isTransparent() { + return transparent; + } + + /** + * Set the transparent value marker. + * + *

This value is merely a marker, by itself it does nothing. + * Generally model loaders will use this marker to indicate further + * up that the material is transparent and therefore any geometries + * using it should be put into the {@link Bucket#Transparent transparent + * bucket}. + * + * @param transparent the transparent value marker. + */ + public void setTransparent(boolean transparent) { + this.transparent = transparent; + } + + /** + * Check if the material should receive shadows or not. + * + * @return True if the material should receive shadows. + * + * @see OldMaterial#setReceivesShadows(boolean) + */ + public boolean isReceivesShadows() { + return receivesShadows; + } + + /** + * Set if the material should receive shadows or not. + * + *

This value is merely a marker, by itself it does nothing. + * Generally model loaders will use this marker to indicate + * the material should receive shadows and therefore any + * geometries using it should have {@link com.jme3.renderer.queue.RenderQueue.ShadowMode#Receive} set + * on them. + * + * @param receivesShadows if the material should receive shadows or not. + */ + public void setReceivesShadows(boolean receivesShadows) { + this.receivesShadows = receivesShadows; + } + + /** + * Acquire the additional {@link RenderState render state} to apply + * for this material. + * + *

The first call to this method will create an additional render + * state which can be modified by the user to apply any render + * states in addition to the ones used by the renderer. Only render + * states which are modified in the additional render state will be applied. + * + * @return The additional render state. + */ + public RenderState getAdditionalRenderState() { + if (additionalState == null) { + additionalState = RenderState.ADDITIONAL.clone(); + } + return additionalState; + } + + /** + * Get the material definition (.j3md file info) that this + * material is implementing. + * + * @return the material definition this material implements. + */ + public MaterialDef getMaterialDef() { + return def; + } + + /** + * Returns the parameter set on this material with the given name, + * returns null if the parameter is not set. + * + * @param name The parameter name to look up. + * @return The MatParam if set, or null if not set. + */ + public MatParam getParam(String name) { + return paramValues.get(name); + } + + /** + * Returns the current parameter's value. + * + * @param the expected type of the parameter value + * @param name the parameter name to look up. + * @return current value or null if the parameter wasn't set. + */ + @SuppressWarnings("unchecked") + public T getParamValue(final String name) { + final MatParam param = paramValues.get(name); + return param == null ? null : (T) param.getValue(); + } + + /** + * Returns the texture parameter set on this material with the given name, + * returns null if the parameter is not set. + * + * @param name The parameter name to look up. + * @return The MatParamTexture if set, or null if not set. + */ + public MatParamTexture getTextureParam(String name) { + MatParam param = paramValues.get(name); + if (param instanceof MatParamTexture) { + return (MatParamTexture) param; + } + return null; + } + + /** + * Returns a collection of all parameters set on this material. + * + * @return a collection of all parameters set on this material. + * + * @see #setParam(java.lang.String, com.jme3.shader.VarType, java.lang.Object) + */ + public Collection getParams() { + return paramValues.values(); + } + + /** + * Returns the ListMap of all parameters set on this material. + * + * @return a ListMap of all parameters set on this material. + * + * @see #setParam(java.lang.String, com.jme3.shader.VarType, java.lang.Object) + */ + public ListMap getParamsMap() { + return paramValues; + } + + /** + * Check if setting the parameter given the type and name is allowed. + * @param type The type that the "set" function is designed to set + * @param name The name of the parameter + */ + private void checkSetParam(VarType type, String name) { + MatParam paramDef = def.getMaterialParam(name); + if (paramDef == null) { + throw new IllegalArgumentException("Material parameter is not defined: " + name); + } + if (type != null && paramDef.getVarType() != type) { + logger.log(Level.WARNING, "Material parameter being set: {0} with " + + "type {1} doesn''t match definition types {2}", new Object[]{name, type.name(), paramDef.getVarType()}); + } + } + + /** + * Pass a parameter to the material shader. + * + * @param name the name of the parameter defined in the material definition (.j3md) + * @param type the type of the parameter {@link VarType} + * @param value the value of the parameter + */ + public void setParam(String name, VarType type, Object value) { + checkSetParam(type, name); + + if (type.isTextureType()) { + setTextureParam(name, type, (Texture)value); + } else { + MatParam val = getParam(name); + if (val == null) { + paramValues.put(name, new MatParam(type, name, value)); + } else { + val.setValue(value); + } + + if (technique != null) { + technique.notifyParamChanged(name, type, value); + } + if (type.isImageType()) { + // recompute sort id + sortingId = -1; + } + } + } + + /** + * Pass a parameter to the material shader. + * + * @param name the name of the parameter defined in the material definition (j3md) + * @param value the value of the parameter + */ + public void setParam(String name, Object value) { + MatParam p = getMaterialDef().getMaterialParam(name); + setParam(name, p.getVarType(), value); + } + + /** + * Clear a parameter from this material. The parameter must exist + * @param name the name of the parameter to clear + */ + public void clearParam(String name) { + checkSetParam(null, name); + MatParam matParam = getParam(name); + if (matParam == null) { + return; + } + + paramValues.remove(name); + if (matParam instanceof MatParamTexture) { + sortingId = -1; + } + if (technique != null) { + technique.notifyParamChanged(name, null, null); + } + } + + /** + * Set a texture parameter. + * + * @param name The name of the parameter + * @param type The variable type {@link VarType} + * @param value The texture value of the parameter. + * + * @throws IllegalArgumentException is value is null + */ + public void setTextureParam(String name, VarType type, Texture value) { + if (value == null) { + throw new IllegalArgumentException(); + } + + checkSetParam(type, name); + MatParamTexture param = getTextureParam(name); + + checkTextureParamColorSpace(name, value); + ColorSpace colorSpace = value.getImage() != null ? value.getImage().getColorSpace() : null; + + if (param == null) { + param = new MatParamTexture(type, name, value, colorSpace); + paramValues.put(name, param); + } else { + param.setTextureValue(value); + param.setColorSpace(colorSpace); + } + + if (technique != null) { + technique.notifyParamChanged(name, type, value); + } + + // need to recompute sort ID + sortingId = -1; + } + + private void checkTextureParamColorSpace(String name, Texture value) { + MatParamTexture paramDef = (MatParamTexture) def.getMaterialParam(name); + if (paramDef.getColorSpace() != null && paramDef.getColorSpace() != value.getImage().getColorSpace()) { + value.getImage().setColorSpace(paramDef.getColorSpace()); + if (logger.isLoggable(Level.FINE)) { + logger.log(Level.FINE, "Material parameter {0} needs a {1} texture, " + + "texture {2} was switched to {3} color space.", + new Object[]{name, paramDef.getColorSpace().toString(), + value.getName(), + value.getImage().getColorSpace().name()}); + } + } else if (paramDef.getColorSpace() == null && value.getName() != null && value.getImage().getColorSpace() == ColorSpace.Linear) { + logger.log(Level.WARNING, + "The texture {0} has linear color space, but the material " + + "parameter {2} specifies no color space requirement, this may " + + "lead to unexpected behavior.\nCheck if the image " + + "was not set to another material parameter with a linear " + + "color space, or that you did not set the ColorSpace to " + + "Linear using texture.getImage.setColorSpace().", + new Object[]{value.getName(), value.getImage().getColorSpace().name(), name}); + } + } + + /** + * Pass a texture to the material shader. + * + * @param name the name of the texture defined in the material definition + * (.j3md) (e.g. Texture for Lighting.j3md) + * @param value the Texture object previously loaded by the asset manager + */ + public void setTexture(String name, Texture value) { + if (value == null) { + // clear it + clearParam(name); + return; + } + + VarType paramType = null; + switch (value.getType()) { + case TwoDimensional: + paramType = VarType.Texture2D; + break; + case TwoDimensionalArray: + paramType = VarType.TextureArray; + break; + case ThreeDimensional: + paramType = VarType.Texture3D; + break; + case CubeMap: + paramType = VarType.TextureCubeMap; + break; + default: + throw new UnsupportedOperationException("Unknown texture type: " + value.getType()); + } + + setTextureParam(name, paramType, value); + } + + /** + * Pass a Matrix4f to the material shader. + * + * @param name the name of the matrix defined in the material definition (j3md) + * @param value the Matrix4f object + */ + public void setMatrix4(String name, Matrix4f value) { + setParam(name, VarType.Matrix4, value); + } + + /** + * Pass a boolean to the material shader. + * + * @param name the name of the boolean defined in the material definition (j3md) + * @param value the boolean value + */ + public void setBoolean(String name, boolean value) { + setParam(name, VarType.Boolean, value); + } + + /** + * Pass a float to the material shader. + * + * @param name the name of the float defined in the material definition (j3md) + * @param value the float value + */ + public void setFloat(String name, float value) { + setParam(name, VarType.Float, value); + } + + /** + * Pass a float to the material shader. This version avoids auto-boxing + * if the value is already a Float. + * + * @param name the name of the float defined in the material definition (j3md) + * @param value the float value + */ + public void setFloat(String name, Float value) { + setParam(name, VarType.Float, value); + } + + /** + * Pass an int to the material shader. + * + * @param name the name of the int defined in the material definition (j3md) + * @param value the int value + */ + public void setInt(String name, int value) { + setParam(name, VarType.Int, value); + } + + /** + * Pass a Color to the material shader. + * + * @param name the name of the color defined in the material definition (j3md) + * @param value the ColorRGBA value + */ + public void setColor(String name, ColorRGBA value) { + setParam(name, VarType.Vector4, value); + } + + /** + * Pass a uniform buffer object to the material shader. + * + * @param name the name of the buffer object defined in the material definition (j3md). + * @param value the buffer object. + */ + public void setUniformBufferObject(final String name, final BufferObject value) { + setParam(name, VarType.UniformBufferObject, value); + } + + /** + * Pass a shader storage buffer object to the material shader. + * + * @param name the name of the buffer object defined in the material definition (j3md). + * @param value the buffer object. + */ + public void setShaderStorageBufferObject(final String name, final BufferObject value) { + setParam(name, VarType.ShaderStorageBufferObject, value); + } + + /** + * Pass a Vector2f to the material shader. + * + * @param name the name of the Vector2f defined in the material definition (j3md) + * @param value the Vector2f value + */ + public void setVector2(String name, Vector2f value) { + setParam(name, VarType.Vector2, value); + } + + /** + * Pass a Vector3f to the material shader. + * + * @param name the name of the Vector3f defined in the material definition (j3md) + * @param value the Vector3f value + */ + public void setVector3(String name, Vector3f value) { + setParam(name, VarType.Vector3, value); + } + + /** + * Pass a Vector4f to the material shader. + * + * @param name the name of the Vector4f defined in the material definition (j3md) + * @param value the Vector4f value + */ + public void setVector4(String name, Vector4f value) { + setParam(name, VarType.Vector4, value); + } + + /** + * Select the technique to use for rendering this material. + *

+ * Any candidate technique for selection (either default or named) + * must be verified to be compatible with the system, for that, the + * renderManager is queried for capabilities. + * + * @param name The name of the technique to select, pass + * {@link TechniqueDef#DEFAULT_TECHNIQUE_NAME} to select one of the default + * techniques. + * @param renderManager The {@link RenderManager render manager} + * to query for capabilities. + * + * @throws IllegalArgumentException If no technique exists with the given + * name. + * @throws UnsupportedOperationException If no candidate technique supports + * the system capabilities. + */ + public void selectTechnique(String name, final RenderManager renderManager) { + // check if already created + Technique tech = techniques.get(name); + // When choosing technique, we choose one that + // supports all the caps. + if (tech == null) { + EnumSet rendererCaps = renderManager.getRenderer().getCaps(); + List techDefs = def.getTechniqueDefs(name); + if (techDefs == null || techDefs.isEmpty()) { + throw new IllegalArgumentException( + String.format("The requested technique %s is not available on material %s", name, def.getName())); + } + + TechniqueDef lastTech = null; + float weight = 0; + for (TechniqueDef techDef : techDefs) { + if (rendererCaps.containsAll(techDef.getRequiredCaps())) { + float techWeight = techDef.getWeight() + (techDef.getLightMode() == renderManager.getPreferredLightMode() ? 10f : 0); + if (techWeight > weight) { + tech = new Technique(this, techDef); + techniques.put(name, tech); + weight = techWeight; + } + } + lastTech = techDef; + } + if (tech == null) { + throw new UnsupportedOperationException( + String.format("No technique '%s' on material " + + "'%s' is supported by the video hardware. " + + "The capabilities %s are required.", + name, def.getName(), lastTech.getRequiredCaps())); + } + if (logger.isLoggable(Level.FINE)) { + logger.log(Level.FINE, this.getMaterialDef().getName() + " selected technique def " + tech.getDef()); + } + } else if (technique == tech) { + // attempting to switch to an already + // active technique. + return; + } + + technique = tech; + tech.notifyTechniqueSwitched(); + + // shader was changed + sortingId = -1; + } + + private void applyOverrides(Renderer renderer, Shader shader, SafeArrayList overrides, BindUnits bindUnits) { + for (MatParamOverride override : overrides.getArray()) { + VarType type = override.getVarType(); + + MatParam paramDef = def.getMaterialParam(override.getName()); + + if (paramDef == null || paramDef.getVarType() != type || !override.isEnabled()) { + continue; + } + + Uniform uniform = shader.getUniform(override.getPrefixedName()); + + if (override.getValue() != null) { + updateShaderMaterialParameter(renderer, type, shader, override, bindUnits, true); + } else { + uniform.clearValue(); + } + } + } + + private void updateShaderMaterialParameter(Renderer renderer, VarType type, Shader shader, MatParam param, BindUnits unit, boolean override) { + if (type == VarType.UniformBufferObject || type == VarType.ShaderStorageBufferObject) { + ShaderBufferBlock bufferBlock = shader.getBufferBlock(param.getPrefixedName()); + BufferObject bufferObject = (BufferObject) param.getValue(); + + ShaderBufferBlock.BufferType btype; + if (type == VarType.ShaderStorageBufferObject) { + btype = ShaderBufferBlock.BufferType.ShaderStorageBufferObject; + bufferBlock.setBufferObject(btype, bufferObject); + renderer.setShaderStorageBufferObject(unit.bufferUnit, bufferObject); // TODO: probably not needed + } else { + btype = ShaderBufferBlock.BufferType.UniformBufferObject; + bufferBlock.setBufferObject(btype, bufferObject); + renderer.setUniformBufferObject(unit.bufferUnit, bufferObject); // TODO: probably not needed + } + unit.bufferUnit++; + } else { + Uniform uniform = shader.getUniform(param.getPrefixedName()); + if (!override && uniform.isSetByCurrentMaterial()) + return; + + if (type.isTextureType() || type.isImageType()) { + try { + if (type.isTextureType()) { + renderer.setTexture(unit.textureUnit, (Texture) param.getValue()); + } else { + renderer.setTextureImage(unit.textureUnit, (TextureImage) param.getValue()); + } + } catch (TextureUnitException ex) { + int numTexParams = unit.textureUnit + 1; + String message = "Too many texture parameters (" + numTexParams + ") assigned\n to " + this.toString(); + throw new IllegalStateException(message); + } + uniform.setValue(VarType.Int, unit.textureUnit); + unit.textureUnit++; + } else { + uniform.setValue(type, param.getValue()); + } + } + } + + private BindUnits updateShaderMaterialParameters(Renderer renderer, Shader shader, + SafeArrayList worldOverrides, SafeArrayList forcedOverrides) { + + bindUnits.textureUnit = 0; + bindUnits.bufferUnit = 0; + + if (worldOverrides != null) { + applyOverrides(renderer, shader, worldOverrides, bindUnits); + } + if (forcedOverrides != null) { + applyOverrides(renderer, shader, forcedOverrides, bindUnits); + } + + for (int i = 0; i < paramValues.size(); i++) { + MatParam param = paramValues.getValue(i); + VarType type = param.getVarType(); + updateShaderMaterialParameter(renderer, type, shader, param, bindUnits, false); + } + + // TODO: HACKY HACK remove this when texture unit is handled by the uniform. + return bindUnits; + } + + private void updateRenderState(Geometry geometry, RenderManager renderManager, Renderer renderer, TechniqueDef techniqueDef) { + RenderState finalRenderState; + if (renderManager.getForcedRenderState() != null) { + finalRenderState = mergedRenderState.copyFrom(renderManager.getForcedRenderState()); + } else if (techniqueDef.getRenderState() != null) { + finalRenderState = mergedRenderState.copyFrom(RenderState.DEFAULT); + finalRenderState = techniqueDef.getRenderState().copyMergedTo(additionalState, finalRenderState); + } else { + finalRenderState = mergedRenderState.copyFrom(RenderState.DEFAULT); + finalRenderState = RenderState.DEFAULT.copyMergedTo(additionalState, finalRenderState); + } + // test if the face cull mode should be flipped before render + if (finalRenderState.isFaceCullFlippable() && isNormalsBackward(geometry.getWorldScale())) { + finalRenderState.flipFaceCull(); + } + renderer.applyRenderState(finalRenderState); + } + + /** + * Returns true if the geometry world scale indicates that normals will be backward. + * + * @param scalar The geometry's world scale vector. + * @return true if the normals are effectively backward; false otherwise. + */ + private boolean isNormalsBackward(Vector3f scalar) { + // count number of negative scalar vector components + int n = 0; + if (scalar.x < 0) n++; + if (scalar.y < 0) n++; + if (scalar.z < 0) n++; + // An odd number of negative components means the normal vectors + // are backward to what they should be. + return n == 1 || n == 3; + } + + /** + * Preloads this material for the given render manager. + *

+ * Preloading the material can ensure that when the material is first + * used for rendering, there won't be any delay since the material has + * been already been setup for rendering. + * + * @param renderManager The render manager to preload for + * @param geometry to determine the applicable parameter overrides, if any + */ + public void preload(RenderManager renderManager, Geometry geometry) { + if (technique == null) { + selectTechnique(TechniqueDef.DEFAULT_TECHNIQUE_NAME, renderManager); + } + TechniqueDef techniqueDef = technique.getDef(); + Renderer renderer = renderManager.getRenderer(); + EnumSet rendererCaps = renderer.getCaps(); + + if (techniqueDef.isNoRender()) { + return; + } + // Get world overrides + SafeArrayList overrides = geometry.getWorldMatParamOverrides(); + + Shader shader = technique.makeCurrent(renderManager, overrides, null, null, rendererCaps); + updateShaderMaterialParameters(renderer, shader, overrides, null); + renderManager.getRenderer().setShader(shader); + } + + private void clearUniformsSetByCurrent(Shader shader) { + ListMap uniforms = shader.getUniformMap(); + int size = uniforms.size(); + for (int i = 0; i < size; i++) { + Uniform u = uniforms.getValue(i); + u.clearSetByCurrentMaterial(); + } + } + + private void resetUniformsNotSetByCurrent(Shader shader) { + ListMap uniforms = shader.getUniformMap(); + int size = uniforms.size(); + for (int i = 0; i < size; i++) { + Uniform u = uniforms.getValue(i); + if (!u.isSetByCurrentMaterial()) { + if (u.getName().charAt(0) != 'g') { + // Don't reset world globals! + // The benefits gained from this are very minimal + // and cause lots of matrix -> FloatBuffer conversions. + u.clearValue(); + } + } + } + } + + /** + * Called by {@link RenderManager} to render the geometry by + * using this material. + *

+ * The material is rendered as follows: + *

    + *
  • Determine which technique to use to render the material - + * either what the user selected via + * {@link #selectTechnique(java.lang.String, com.jme3.renderer.RenderManager) + * Material.selectTechnique()}, + * or the first default technique that the renderer supports + * (based on the technique's {@link TechniqueDef#getRequiredCaps() requested rendering capabilities})
      + *
    • If the technique has been changed since the last frame, then it is notified via + * {@link Technique#makeCurrent(com.jme3.renderer.RenderManager, com.jme3.util.SafeArrayList, com.jme3.util.SafeArrayList, com.jme3.light.LightList, java.util.EnumSet) + * Technique.makeCurrent()}. + * If the technique wants to use a shader to render the model, it should load it at this part - + * the shader should have all the proper defines as declared in the technique definition, + * including those that are bound to material parameters. + * The technique can re-use the shader from the last frame if + * no changes to the defines occurred.
    + *
  • Set the {@link RenderState} to use for rendering. The render states are + * applied in this order (later RenderStates override earlier RenderStates):
      + *
    1. {@link TechniqueDef#getRenderState() Technique Definition's RenderState} + * - i.e. specific RenderState that is required for the shader.
    2. + *
    3. {@link #getAdditionalRenderState() Material Instance Additional RenderState} + * - i.e. ad-hoc RenderState set per model
    4. + *
    5. {@link RenderManager#getForcedRenderState() RenderManager's Forced RenderState} + * - i.e. RenderState requested by a {@link com.jme3.post.SceneProcessor} or + * post-processing filter.
    + *
  • If the technique uses a shader, then the uniforms of the shader must be updated.
      + *
    • Uniforms bound to material parameters are updated based on the current material parameter values.
    • + *
    • Uniforms bound to world parameters are updated from the RenderManager. + * Internally {@link UniformBindingManager} is used for this task.
    • + *
    • Uniforms bound to textures will cause the texture to be uploaded as necessary. + * The uniform is set to the texture unit where the texture is bound.
    + *
  • If the technique uses a shader, the model is then rendered according + * to the lighting mode specified on the technique definition.
      + *
    • {@link LightMode#SinglePass single pass light mode} fills the shader's light uniform arrays + * with the first 4 lights and renders the model once.
    • + *
    • {@link LightMode#MultiPass multi pass light mode} light mode renders the model multiple times, + * for the first light it is rendered opaque, on subsequent lights it is + * rendered with {@link BlendMode#AlphaAdditive alpha-additive} blending and depth writing disabled.
    • + *
    + *
  • For techniques that do not use shaders, + * fixed function OpenGL is used to render the model (see {@link com.jme3.renderer.opengl.GLRenderer} interface):
      + *
    • OpenGL state that is bound to material parameters is updated.
    • + *
    • The texture set on the material is uploaded and bound. + * Currently only 1 texture is supported for fixed function techniques.
    • + *
    • If the technique uses lighting, then OpenGL lighting state is updated + * based on the light list on the geometry, otherwise OpenGL lighting is disabled.
    • + *
    • The mesh is uploaded and rendered.
    • + *
    + *
+ * + * @param geometry The geometry to render + * @param lights Presorted and filtered light list to use for rendering + * @param renderManager The render manager requesting the rendering + */ + public void render(Geometry geometry, LightList lights, RenderManager renderManager) { + if (technique == null) { + selectTechnique(TechniqueDef.DEFAULT_TECHNIQUE_NAME, renderManager); + } + + TechniqueDef techniqueDef = technique.getDef(); + Renderer renderer = renderManager.getRenderer(); + EnumSet rendererCaps = renderer.getCaps(); + + if (techniqueDef.isNoRender()) { + return; + } + + // Apply render state + updateRenderState(geometry, renderManager, renderer, techniqueDef); + + // Get world overrides + SafeArrayList overrides = geometry.getWorldMatParamOverrides(); + + // Select shader to use + Shader shader = technique.makeCurrent(renderManager, overrides, renderManager.getForcedMatParams(), lights, rendererCaps); + + // Begin tracking which uniforms were changed by material. + clearUniformsSetByCurrent(shader); + + // Set uniform bindings + renderManager.updateUniformBindings(shader); + + // Set material parameters + BindUnits units = updateShaderMaterialParameters(renderer, shader, overrides, renderManager.getForcedMatParams()); + + // Clear any uniforms not changed by material. + resetUniformsNotSetByCurrent(shader); + + // Delegate rendering to the technique + technique.render(renderManager, shader, geometry, lights, units); + } + + /** + * Called by {@link RenderManager} to render the geometry by + * using this material. + * + * Note that this version of the render method + * does not perform light filtering. + * + * @param geom The geometry to render + * @param rm The render manager requesting the rendering + */ + public void render(Geometry geom, RenderManager rm) { + render(geom, geom.getWorldLightList(), rm); + } + + @Override + public String toString() { + return "Material[name=" + name + + ", def=" + (def != null ? def.getName() : null) + + ", tech=" + (technique != null && technique.getDef() != null ? technique.getDef().getName() : null) + + "]"; + } + + @Override + public void write(JmeExporter ex) throws IOException { + OutputCapsule oc = ex.getCapsule(this); + oc.write(def.getAssetName(), "material_def", null); + oc.write(additionalState, "render_state", null); + oc.write(transparent, "is_transparent", false); + oc.write(name, "name", null); + oc.writeStringSavableMap(paramValues, "parameters", null); + } + + @Override + @SuppressWarnings("unchecked") + public void read(JmeImporter im) throws IOException { + InputCapsule ic = im.getCapsule(this); + + name = ic.readString("name", null); + additionalState = (RenderState) ic.readSavable("render_state", null); + transparent = ic.readBoolean("is_transparent", false); + + // Load the material def + String defName = ic.readString("material_def", null); + HashMap params = (HashMap) ic.readStringSavableMap("parameters", null); + + boolean enableVertexColor = false; + boolean separateTexCoord = false; + boolean applyDefaultValues = false; + boolean guessRenderStateApply = false; + + int ver = ic.getSavableVersion(Material.class); + if (ver < 1) { + applyDefaultValues = true; + } + if (ver < 2) { + guessRenderStateApply = true; + } + if (im.getFormatVersion() == 0) { + // Enable compatibility with old models + if (defName.equalsIgnoreCase("Common/MatDefs/Misc/VertexColor.j3md")) { + // Using VertexColor, switch to Unshaded and set VertexColor=true + enableVertexColor = true; + defName = "Common/MatDefs/Misc/Unshaded.j3md"; + } else if (defName.equalsIgnoreCase("Common/MatDefs/Misc/SimpleTextured.j3md") + || defName.equalsIgnoreCase("Common/MatDefs/Misc/SolidColor.j3md")) { + // Using SimpleTextured/SolidColor, just switch to Unshaded + defName = "Common/MatDefs/Misc/Unshaded.j3md"; + } else if (defName.equalsIgnoreCase("Common/MatDefs/Misc/WireColor.j3md")) { + // Using WireColor, set wireframe render state = true and use Unshaded + getAdditionalRenderState().setWireframe(true); + defName = "Common/MatDefs/Misc/Unshaded.j3md"; + } else if (defName.equalsIgnoreCase("Common/MatDefs/Misc/Unshaded.j3md")) { + // Uses unshaded, ensure that the proper param is set + MatParam value = params.get("SeperateTexCoord"); + if (value != null && ((Boolean) value.getValue()) == true) { + params.remove("SeperateTexCoord"); + separateTexCoord = true; + } + } + assert applyDefaultValues && guessRenderStateApply; + } + + def = im.getAssetManager().loadAsset(new AssetKey(defName)); + paramValues = new ListMap(); + + // load the textures and update nextTexUnit + for (Map.Entry entry : params.entrySet()) { + MatParam param = entry.getValue(); + if (param instanceof MatParamTexture) { + MatParamTexture texVal = (MatParamTexture) param; + // the texture failed to load for this param + // do not add to param values + if (texVal.getTextureValue() == null || texVal.getTextureValue().getImage() == null) { + continue; + } + checkTextureParamColorSpace(texVal.getName(), texVal.getTextureValue()); + } + + if (im.getFormatVersion() == 0 && param.getName().startsWith("m_")) { + // Ancient version of jME3 ... + param.setName(param.getName().substring(2)); + } + + if (def.getMaterialParam(param.getName()) == null) { + logger.log(Level.WARNING, "The material parameter is not defined: {0}. Ignoring..", + param.getName()); + } else { + checkSetParam(param.getVarType(), param.getName()); + paramValues.put(param.getName(), param); + } + } + + if (applyDefaultValues) { + // compatibility with old versions where default vars were not available + for (MatParam param : def.getMaterialParams()) { + if (param.getValue() != null && paramValues.get(param.getName()) == null) { + setParam(param.getName(), param.getVarType(), param.getValue()); + } + } + } + if (guessRenderStateApply && additionalState != null) { + // Try to guess values of "apply" render state based on defaults + // if value != default then set apply to true + additionalState.applyPolyOffset = additionalState.offsetEnabled; + additionalState.applyBlendMode = additionalState.blendMode != BlendMode.Off; + additionalState.applyColorWrite = !additionalState.colorWrite; + additionalState.applyCullMode = additionalState.cullMode != FaceCullMode.Back; + additionalState.applyDepthTest = !additionalState.depthTest; + additionalState.applyDepthWrite = !additionalState.depthWrite; + additionalState.applyStencilTest = additionalState.stencilTest; + additionalState.applyWireFrame = additionalState.wireframe; + } + if (enableVertexColor) { + setBoolean("VertexColor", true); + } + if (separateTexCoord) { + setBoolean("SeparateTexCoord", true); + } + } +} + diff --git a/jme3-core/src/main/java/com/jme3/material/Technique.java b/jme3-core/src/main/java/com/jme3/material/Technique.java index 5091028a85..46f321ff95 100644 --- a/jme3-core/src/main/java/com/jme3/material/Technique.java +++ b/jme3-core/src/main/java/com/jme3/material/Technique.java @@ -33,7 +33,7 @@ import com.jme3.asset.AssetManager; import com.jme3.light.LightList; -import com.jme3.material.Material.BindUnits; +import com.jme3.material.OldMaterial.BindUnits; import com.jme3.material.TechniqueDef.LightMode; import com.jme3.material.logic.TechniqueDefLogic; import com.jme3.renderer.Caps; @@ -52,7 +52,7 @@ public final class Technique { private final TechniqueDef def; - private final Material owner; + private final OldMaterial owner; private final DefineList paramDefines; private final DefineList dynamicDefines; @@ -63,7 +63,7 @@ public final class Technique { * @param owner The material that will own this technique * @param def The technique definition being implemented. */ - public Technique(Material owner, TechniqueDef def) { + public Technique(OldMaterial owner, TechniqueDef def) { this.owner = owner; this.def = def; this.paramDefines = def.createDefineList(); @@ -161,7 +161,7 @@ Shader makeCurrent(RenderManager renderManager, SafeArrayList * {@link #makeCurrent(RenderManager, SafeArrayList, SafeArrayList, LightList, EnumSet)}. * @param geometry The geometry to render * @param lights Lights which influence the geometry. - * @param lastTexUnit the index of the most recently used texture unit + * @param lastBindUnits the index of the most recently used texture unit */ void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, BindUnits lastBindUnits) { TechniqueDefLogic logic = def.getLogic(); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java index ca8f7d1efa..ec0541ac3e 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java @@ -33,6 +33,7 @@ import com.jme3.asset.AssetManager; import com.jme3.light.*; +import com.jme3.material.OldMaterial; import com.jme3.material.TechniqueDef; import com.jme3.material.Material.BindUnits; import com.jme3.math.ColorRGBA; @@ -92,7 +93,7 @@ protected static ColorRGBA getAmbientColor(LightList lightList, boolean removeLi @Override - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, BindUnits lastBindUnits) { + public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits) { Renderer renderer = renderManager.getRenderer(); renderer.setShader(shader); renderMeshFromGeometry(renderer, geometry); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/MultiPassLightingLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/MultiPassLightingLogic.java index 9340d3560d..c566e041da 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/MultiPassLightingLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/MultiPassLightingLogic.java @@ -36,6 +36,7 @@ import com.jme3.light.LightList; import com.jme3.light.PointLight; import com.jme3.light.SpotLight; +import com.jme3.material.OldMaterial; import com.jme3.material.RenderState; import com.jme3.material.TechniqueDef; import com.jme3.material.Material.BindUnits; @@ -68,7 +69,7 @@ public MultiPassLightingLogic(TechniqueDef techniqueDef) { } @Override - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, BindUnits lastBindUnits) { + public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits) { Renderer r = renderManager.getRenderer(); Uniform lightDir = shader.getUniform("g_LightDirection"); Uniform lightColor = shader.getUniform("g_LightColor"); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/SinglePassAndImageBasedLightingLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/SinglePassAndImageBasedLightingLogic.java index 8e38f2e6ca..10fdd894bf 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/SinglePassAndImageBasedLightingLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/SinglePassAndImageBasedLightingLogic.java @@ -263,7 +263,7 @@ private int setProbeData(RenderManager rm, int lastTexUnit, Uniform lightProbeDa } @Override - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, BindUnits lastBindUnits) { + public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits) { int nbRenderedLights = 0; Renderer renderer = renderManager.getRenderer(); int batchSize = renderManager.getSinglePassLightBatchSize(); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/SinglePassLightingLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/SinglePassLightingLogic.java index 58240569ef..ab2051f10b 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/SinglePassLightingLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/SinglePassLightingLogic.java @@ -37,6 +37,7 @@ import com.jme3.light.LightList; import com.jme3.light.PointLight; import com.jme3.light.SpotLight; +import com.jme3.material.OldMaterial; import com.jme3.material.RenderState; import com.jme3.material.RenderState.BlendMode; import com.jme3.material.TechniqueDef; @@ -207,7 +208,7 @@ protected int updateLightListUniforms(Shader shader, Geometry g, LightList light } @Override - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, BindUnits lastBindUnits) { + public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits) { int nbRenderedLights = 0; Renderer renderer = renderManager.getRenderer(); int batchSize = renderManager.getSinglePassLightBatchSize(); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/StaticPassLightingLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/StaticPassLightingLogic.java index fe35dc4c4d..42162a2edb 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/StaticPassLightingLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/StaticPassLightingLogic.java @@ -37,6 +37,7 @@ import com.jme3.light.LightList; import com.jme3.light.PointLight; import com.jme3.light.SpotLight; +import com.jme3.material.OldMaterial; import com.jme3.material.TechniqueDef; import com.jme3.material.Material.BindUnits; import com.jme3.math.ColorRGBA; @@ -172,7 +173,7 @@ private void updateLightListUniforms(Matrix4f viewMatrix, Shader shader, LightLi } @Override - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, BindUnits lastBindUnits) { + public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits) { Renderer renderer = renderManager.getRenderer(); Matrix4f viewMatrix = renderManager.getCurrentCamera().getViewMatrix(); updateLightListUniforms(viewMatrix, shader, lights); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/TechniqueDefLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/TechniqueDefLogic.java index 31f970a176..b3488e5a79 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/TechniqueDefLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/TechniqueDefLogic.java @@ -33,7 +33,7 @@ import com.jme3.asset.AssetManager; import com.jme3.light.LightList; -import com.jme3.material.Material.BindUnits; +import com.jme3.material.OldMaterial; import com.jme3.renderer.Caps; import com.jme3.renderer.RenderManager; import com.jme3.scene.Geometry; @@ -73,7 +73,7 @@ public interface TechniqueDefLogic { * * @return The shader to use for rendering. */ - public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager, + Shader makeCurrent(AssetManager assetManager, RenderManager renderManager, EnumSet rendererCaps, LightList lights, DefineList defines); /** @@ -91,7 +91,7 @@ public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager * {@link #makeCurrent(com.jme3.asset.AssetManager, com.jme3.renderer.RenderManager, java.util.EnumSet, com.jme3.light.LightList, com.jme3.shader.DefineList)}. * @param geometry The geometry to render * @param lights Lights which influence the geometry. - * @param lastTexUnit the index of the most recently used texture unit + * @param lastBindUnits the index of the most recently used texture unit */ - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, BindUnits lastBindUnits); + void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits); } diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java index 1a57d49993..0e7a8331f6 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java +++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java @@ -72,7 +72,7 @@ public class Geometry extends Spatial { private static final Logger logger = Logger.getLogger(Geometry.class.getName()); protected Mesh mesh; protected transient int lodLevel = 0; - protected NewMaterial material; + protected Material material; protected MatrixTransformMaterial transforms; // stores the matrices unique to this geometry /** * When true, the geometry's transform will not be applied. @@ -167,8 +167,8 @@ public void updateTransformMaterial(Camera cam) { } public void draw(CommandBuffer cmd, Pipeline pipeline) { - int offset = transforms.bind(cmd, pipeline); - material.bind(cmd, pipeline, offset); + transforms.bind(cmd, pipeline); + material.bind(cmd, pipeline, transforms.getSets().size()); mesh.bind(cmd); mesh.draw(cmd); } @@ -202,7 +202,7 @@ public void setIgnoreTransform(boolean ignoreTransform) { * Sets the LOD level to use when rendering the mesh of this geometry. * Level 0 indicates that the default index buffer should be used, * levels [1, LodLevels + 1] represent the levels set on the mesh - * with {@link Mesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. + * with {@link OldMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. * * @param lod The lod level to set */ @@ -293,7 +293,7 @@ public Mesh getMesh() { * @param material the material to use for this geometry */ @Override - public void setMaterial(NewMaterial material) { + public void setMaterial(Material material) { this.material = material; nbSimultaneousGPUMorph = -1; if (isGrouped()) { @@ -308,7 +308,7 @@ public void setMaterial(NewMaterial material) { * * @see #setMaterial(NewMaterial) */ - public NewMaterial getMaterial() { + public Material getMaterial() { return material; } diff --git a/jme3-core/src/main/java/com/jme3/scene/Node.java b/jme3-core/src/main/java/com/jme3/scene/Node.java index aa0fecf498..12d79e80e2 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Node.java +++ b/jme3-core/src/main/java/com/jme3/scene/Node.java @@ -563,7 +563,7 @@ public List getChildren() { } @Override - public void setMaterial(NewMaterial mat) { + public void setMaterial(Material mat) { for (int i = 0; i < children.size(); i++) { children.get(i).setMaterial(mat); } diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java index 2b90ae9fd7..c8151e4f91 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java +++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java @@ -1181,7 +1181,7 @@ public Transform getLocalTransform() { * * @param material The material to set. */ - public void setMaterial(NewMaterial material) { + public void setMaterial(Material material) { } /** diff --git a/jme3-core/src/main/java/com/jme3/shader/Uniform.java b/jme3-core/src/main/java/com/jme3/shader/Uniform.java index ebd42f9605..559c972ff3 100644 --- a/jme3-core/src/main/java/com/jme3/shader/Uniform.java +++ b/jme3-core/src/main/java/com/jme3/shader/Uniform.java @@ -31,7 +31,7 @@ */ package com.jme3.shader; -import com.jme3.material.Material.BindUnits; +import com.jme3.material.OldMaterial.BindUnits; import com.jme3.math.*; import com.jme3.util.BufferUtils; import com.jme3.util.TempVars; diff --git a/jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java index 70a9641f44..3e942d04e9 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/buffers/GpuBuffer.java @@ -12,6 +12,7 @@ import java.nio.*; import java.util.function.Function; +import java.util.function.LongFunction; public interface GpuBuffer { @@ -60,6 +61,18 @@ default T map(Function factory) { return factory.apply(map(0, size().getBytes())); } + default T map(int offset, int size, LongFunction factory) { + return factory.apply(map(offset, size).get(0)); + } + + default T map(int offset, LongFunction factory) { + return factory.apply(map(offset, size().getBytes() - offset).get(0)); + } + + default T map(LongFunction factory) { + return factory.apply(map(0, size().getBytes()).get(0)); + } + default ByteBuffer mapBytes(int offset, int size) { return map(offset * Byte.BYTES, size * Byte.BYTES).getByteBuffer(0, size); } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java b/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java index dedf54266b..3512e530fb 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java @@ -1,12 +1,18 @@ package com.jme3.vulkan.material; +import com.jme3.export.JmeExporter; +import com.jme3.export.JmeImporter; +import com.jme3.material.Material; +import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.descriptors.*; import com.jme3.vulkan.devices.LogicalDevice; import com.jme3.vulkan.material.uniforms.Uniform; import com.jme3.vulkan.pipelines.Pipeline; +import com.jme3.vulkan.struct.Structure; import org.lwjgl.system.MemoryStack; +import java.io.IOException; import java.nio.LongBuffer; import java.util.*; @@ -15,7 +21,7 @@ /** * Relates shader uniform values to sets and bindings. */ -public class NewMaterial { +public class NewMaterial implements Material { private final DescriptorPool pool; private final List uniformSets = new ArrayList<>(); @@ -31,11 +37,8 @@ public void update(CommandBuffer cmd) { } } - public int bind(CommandBuffer cmd, Pipeline pipeline) { - return bind(cmd, pipeline, 0); - } - - public int bind(CommandBuffer cmd, Pipeline pipeline, int offset) { + @Override + public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { LinkedList availableLayouts = new LinkedList<>(); Collections.addAll(availableLayouts, pipeline.getLayout().getDescriptorSetLayouts()); try (MemoryStack stack = MemoryStack.stackPush()) { @@ -47,7 +50,33 @@ public int bind(CommandBuffer cmd, Pipeline pipeline, int offset) { vkCmdBindDescriptorSets(cmd.getBuffer(), pipeline.getBindPoint().getVkEnum(), pipeline.getLayout().getNativeObject(), offset, setBuf, null); } - return uniformSets.size(); // number of descriptor slots filled + } + + @Override + public void setParam(String uniform, String param, Object value) { + Uniform u = getUniform(uniform); + GpuBuffer buffer = u.getResource().get(); + buffer.map(Structure::new).set(param, value); + buffer.unmap(); + } + + @Override + @SuppressWarnings("unchecked") + public T getUniform(String name) { + // Not sure if caching the results is really worth it... + Uniform uniform = uniformLookup.get(name); + if (uniform != null) { + return (T)uniform; + } + for (UniformSet set : uniformSets) { + for (Uniform u : set) { + if (name.equals(u.getName())) { + uniformLookup.put(u.getName(), u); + return (T)u; + } + } + } + return null; } public DescriptorSetLayout[] createLayouts(LogicalDevice device) { @@ -72,22 +101,14 @@ public List getSets() { return Collections.unmodifiableList(uniformSets); } - @SuppressWarnings("unchecked") - public T getUniform(String name) { - // Not sure if caching the results is really worth it... - Uniform uniform = uniformLookup.get(name); - if (uniform != null) { - return (T)uniform; - } - for (UniformSet set : uniformSets) { - for (Uniform u : set) { - if (name.equals(u.getName())) { - uniformLookup.put(u.getName(), u); - return (T)u; - } - } - } - return null; + @Override + public void write(JmeExporter ex) throws IOException { + throw new UnsupportedOperationException("Exporting not yet supported."); + } + + @Override + public void read(JmeImporter im) throws IOException { + throw new UnsupportedOperationException("Importing not yet supported."); } } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/struct/Structure.java b/jme3-core/src/main/java/com/jme3/vulkan/struct/Structure.java new file mode 100644 index 0000000000..f0fa386b53 --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/vulkan/struct/Structure.java @@ -0,0 +1,14 @@ +package com.jme3.vulkan.struct; + +public class Structure { + + public Structure(long address) { + // todo: implement + } + + public void set(String name, Object value) { + // todo: implement + throw new UnsupportedOperationException("Not yet supported."); + } + +} From 93067db970e07364593e164b80e849ed5edd97f8 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Sat, 13 Sep 2025 22:24:04 -0400 Subject: [PATCH 79/80] renamed Texture to GlTexture and Image to GlImage, both implementing base interfaces --- VulkanDesign.txt | 4 +- .../jme3/app/state/VideoRecorderAppState.java | 4 +- .../plugins/AndroidBufferImageLoader.java | 14 +- .../plugins/AndroidNativeImageLoader.java | 6 +- .../java/com/jme3/asset/AssetManager.java | 6 +- .../com/jme3/asset/DesktopAssetManager.java | 6 +- .../main/java/com/jme3/asset/TextureKey.java | 16 +- .../java/com/jme3/effect/ParticleMesh.java | 5 +- .../jme3/environment/EnvironmentCamera.java | 16 +- .../environment/EnvironmentProbeControl.java | 2 +- .../environment/FastLightProbeFactory.java | 2 +- .../environment/baker/GenericEnvBaker.java | 18 +- .../jme3/environment/baker/IBLGLEnvBaker.java | 10 +- .../environment/baker/IBLGLEnvBakerLight.java | 6 +- .../baker/IBLHybridEnvBakerLight.java | 10 +- .../environment/util/BoundingSphereDebug.java | 5 +- .../jme3/environment/util/CubeMapWrapper.java | 6 +- .../jme3/environment/util/EnvMapUtils.java | 32 +- .../java/com/jme3/font/BitmapTextPage.java | 4 +- .../{OldMaterial.java => GlMaterial.java} | 40 +- .../main/java/com/jme3/material/MatParam.java | 20 +- .../com/jme3/material/MatParamTexture.java | 14 +- .../main/java/com/jme3/material/Material.java | 8 + .../java/com/jme3/material/MaterialDef.java | 4 +- .../java/com/jme3/material/Technique.java | 6 +- .../logic/DefaultTechniqueDefLogic.java | 19 +- .../logic/MultiPassLightingLogic.java | 5 +- .../SinglePassAndImageBasedLightingLogic.java | 3 +- .../logic/SinglePassLightingLogic.java | 5 +- .../logic/StaticPassLightingLogic.java | 5 +- .../material/logic/TechniqueDefLogic.java | 8 +- .../main/java/com/jme3/opencl/Context.java | 11 +- .../src/main/java/com/jme3/opencl/Image.java | 9 +- .../java/com/jme3/opencl/package-info.java | 6 +- .../src/main/java/com/jme3/post/Filter.java | 6 +- .../com/jme3/post/FilterPostProcessor.java | 12 +- .../main/java/com/jme3/post/HDRRenderer.java | 14 +- .../src/main/java/com/jme3/renderer/Caps.java | 24 +- .../java/com/jme3/renderer/RenderContext.java | 11 +- .../main/java/com/jme3/renderer/Renderer.java | 38 +- .../java/com/jme3/renderer/Statistics.java | 10 +- .../jme3/renderer/opengl/GLImageFormats.java | 18 +- .../com/jme3/renderer/opengl/GLRenderer.java | 104 +- .../com/jme3/renderer/opengl/TextureUtil.java | 18 +- .../main/java/com/jme3/scene/Geometry.java | 10 +- .../jme3/scene/{OldMesh.java => GlMesh.java} | 38 +- .../src/main/java/com/jme3/scene/Mesh.java | 5 +- .../main/java/com/jme3/scene/debug/Arrow.java | 5 +- .../main/java/com/jme3/scene/debug/Grid.java | 4 +- .../scene/debug/SkeletonInterBoneWire.java | 5 +- .../com/jme3/scene/debug/SkeletonPoints.java | 5 +- .../com/jme3/scene/debug/SkeletonWire.java | 5 +- .../java/com/jme3/scene/debug/WireBox.java | 5 +- .../com/jme3/scene/debug/WireFrustum.java | 4 +- .../java/com/jme3/scene/debug/WireSphere.java | 5 +- .../scene/debug/custom/ArmatureDebugger.java | 4 +- .../debug/custom/ArmatureInterJointsWire.java | 5 +- .../jme3/scene/debug/custom/JointShape.java | 5 +- .../scene/instancing/InstancedGeometry.java | 18 + .../jme3/scene/mesh/VirtualIndexBuffer.java | 24 +- .../jme3/scene/mesh/WrappedIndexBuffer.java | 2 +- .../com/jme3/scene/shape/AbstractBox.java | 5 +- .../java/com/jme3/scene/shape/CenterQuad.java | 5 +- .../main/java/com/jme3/scene/shape/Curve.java | 4 +- .../java/com/jme3/scene/shape/Cylinder.java | 5 +- .../main/java/com/jme3/scene/shape/Dome.java | 5 +- .../main/java/com/jme3/scene/shape/Line.java | 5 +- .../java/com/jme3/scene/shape/PQTorus.java | 5 +- .../main/java/com/jme3/scene/shape/Quad.java | 5 +- .../com/jme3/scene/shape/RectangleMesh.java | 5 +- .../java/com/jme3/scene/shape/Sphere.java | 5 +- .../java/com/jme3/scene/shape/Surface.java | 5 +- .../main/java/com/jme3/scene/shape/Torus.java | 5 +- .../main/java/com/jme3/shader/Uniform.java | 2 +- .../main/java/com/jme3/shader/VarType.java | 10 +- .../jme3/shadow/AbstractShadowRenderer.java | 9 +- .../com/jme3/shadow/BasicShadowRenderer.java | 2 +- .../com/jme3/shadow/PssmShadowRenderer.java | 8 +- .../main/java/com/jme3/system/JmeSystem.java | 3 +- .../java/com/jme3/system/NullRenderer.java | 17 +- .../java/com/jme3/texture/FrameBuffer.java | 60 +- .../jme3/texture/{Image.java => GlImage.java} | 2647 +++++++++-------- .../main/java/com/jme3/texture/ImageView.java | 19 + .../main/java/com/jme3/texture/Texture.java | 644 +--- .../main/java/com/jme3/texture/Texture2D.java | 16 +- .../main/java/com/jme3/texture/Texture3D.java | 18 +- .../java/com/jme3/texture/TextureArray.java | 18 +- .../java/com/jme3/texture/TextureCubeMap.java | 16 +- .../java/com/jme3/texture/TextureImage.java | 28 +- .../com/jme3/texture/TextureProcessor.java | 12 +- .../texture/image/DefaultImageRaster.java | 8 +- .../com/jme3/texture/image/ImageCodec.java | 6 +- .../com/jme3/texture/image/ImageRaster.java | 22 +- .../jme3/texture/image/LastTextureState.java | 12 +- .../jme3/texture/image/MipMapImageRaster.java | 8 +- .../java/com/jme3/util/MipMapGenerator.java | 14 +- .../java/com/jme3/util/PlaceholderAssets.java | 20 +- .../main/java/com/jme3/util/SkyFactory.java | 74 +- .../java/com/jme3/util/natives/GlNative.java | 76 + .../vulkan/descriptors/ImageDescriptor.java | 8 +- .../jme3/vulkan/images/BasicVulkanImage.java | 237 ++ .../java/com/jme3/vulkan/images/Filter.java | 17 + .../java/com/jme3/vulkan/images/GpuImage.java | 231 +- .../java/com/jme3/vulkan/images/Image.java | 26 - .../com/jme3/vulkan/images/MipmapMode.java | 9 + .../java/com/jme3/vulkan/images/Sampler.java | 12 +- .../java/com/jme3/vulkan/images/Texture.java | 20 - .../com/jme3/vulkan/images/VulkanImage.java | 4 +- .../jme3/vulkan/images/VulkanImageLoader.java | 6 +- .../{ImageView.java => VulkanImageView.java} | 37 +- .../com/jme3/vulkan/images/VulkanTexture.java | 27 + .../com/jme3/vulkan/material/NewMaterial.java | 6 - .../com/jme3/vulkan/material/UniformSet.java | 9 - .../material/uniforms/AbstractUniform.java | 3 - .../material/uniforms/TextureUniform.java | 13 +- .../vulkan/material/uniforms/Uniform.java | 11 +- .../com/jme3/vulkan/memory/MemoryRegion.java | 4 +- .../com/jme3/vulkan/mesh/AdaptiveMesh.java | 20 +- .../jme3/vulkan/pipelines/FrameBuffer.java | 8 +- .../com/jme3/vulkan/surface/Swapchain.java | 16 +- .../java/com/jme3/vulkan/util/IntEnum.java | 10 +- .../jme3/font/plugins/BitmapFontLoader.java | 8 +- .../com/jme3/material/plugins/J3MLoader.java | 48 +- .../com/jme3/scene/plugins/MTLLoader.java | 10 +- .../com/jme3/scene/plugins/OBJLoader.java | 2 +- .../com/jme3/texture/plugins/DDSLoader.java | 36 +- .../com/jme3/texture/plugins/DXTFlipper.java | 2 +- .../com/jme3/texture/plugins/ETCFlipper.java | 2 +- .../com/jme3/texture/plugins/HDRLoader.java | 10 +- .../jme3/texture/plugins/ImageFlipper.java | 8 +- .../com/jme3/texture/plugins/PFMLoader.java | 8 +- .../com/jme3/texture/plugins/TGALoader.java | 10 +- .../jme3/texture/plugins/ktx/KTXLoader.java | 18 +- .../jme3/texture/plugins/ktx/KTXWriter.java | 14 +- .../jme3/material/MaterialMatParamTest.java | 10 +- .../java/com/jme3/material/MaterialTest.java | 8 +- .../jme3/material/plugins/J3MLoaderTest.java | 42 +- .../jme3/renderer/OpaqueComparatorTest.java | 22 +- .../com/jme3/scene/plugins/OBJLoaderTest.java | 4 +- .../java/com/jme3/texture/TestIssue2250.java | 6 +- .../com/jme3/texture/TextureArrayTest.java | 10 +- .../optimize/GeometryBatchFactory.java | 2 +- .../java/jme3tools/optimize/TextureAtlas.java | 74 +- .../jme3/app/state/VideoRecorderAppState.java | 4 +- .../com/jme3/system/AWTComponentRenderer.java | 8 +- .../com/jme3/system/AWTFrameProcessor.java | 6 +- .../com/jme3/system/JmeDesktopSystem.java | 4 +- .../java/com/jme3/system/awt/AwtPanel.java | 5 +- .../com/jme3/texture/plugins/AWTLoader.java | 20 +- .../java/jme3tools/converters/ImageToAwt.java | 20 +- .../jme3tools/converters/MipMapGenerator.java | 16 +- .../com/jme3/post/filters/BloomFilter.java | 2 +- .../jme3/post/filters/CartoonEdgeFilter.java | 2 +- .../jme3/post/filters/SoftBloomFilter.java | 24 +- .../post/filters/TranslucentBucketFilter.java | 6 +- .../java/com/jme3/post/ssao/SSAOFilter.java | 8 +- .../com/jme3/water/SimpleWaterProcessor.java | 12 +- .../main/java/com/jme3/water/WaterFilter.java | 4 +- .../java/jme3test/app/TestUseAfterFree.java | 4 +- .../java/jme3test/asset/TestUrlLoading.java | 4 +- .../jme3test/batching/TestBatchNodeTower.java | 10 +- .../jme3test/bullet/PhysicsTestHelper.java | 4 +- .../jme3test/bullet/TestAttachDriver.java | 6 +- .../java/jme3test/bullet/TestBoneRagdoll.java | 4 +- .../java/jme3test/bullet/TestBrickTower.java | 10 +- .../java/jme3test/bullet/TestBrickWall.java | 10 +- .../jme3test/bullet/TestHoveringTank.java | 18 +- .../jme3test/bullet/TestRagdollCharacter.java | 4 +- .../java/jme3test/bullet/TestWalkingChar.java | 18 +- .../jme3test/conversion/TestMipMapGen.java | 12 +- .../java/jme3test/effect/TestEverything.java | 4 +- .../java/jme3test/effect/TestIssue1773.java | 6 +- .../jme3test/gui/TestBitmapFontLayout.java | 10 +- .../java/jme3test/gui/TestSoftwareMouse.java | 4 +- .../jme3test/helloworld/HelloMaterial.java | 4 +- .../jme3test/helloworld/HelloPhysics.java | 10 +- .../jme3test/helloworld/HelloTerrain.java | 12 +- .../helloworld/HelloTerrainCollision.java | 12 +- .../jme3test/light/TestConeVSFrustum.java | 4 +- .../light/TestDirectionalLightShadow.java | 6 +- .../light/TestEnvironmentMapping.java | 6 +- .../java/jme3test/light/TestShadowBug.java | 6 +- .../java/jme3test/light/TestSpotLight.java | 2 +- .../jme3test/light/TestSpotLightShadows.java | 2 +- .../jme3test/light/TestSpotLightTerrain.java | 34 +- .../material/TestMaterialCompare.java | 8 +- .../jme3test/material/TestShaderNodes.java | 4 +- .../jme3test/model/shape/TestCylinder.java | 6 +- .../jme3test/niftygui/TestNiftyToMesh.java | 6 +- .../jme3test/opencl/TestWriteToTexture.java | 3 +- .../java/jme3test/post/TestCartoonEdge.java | 4 +- .../jme3test/post/TestContrastAdjustment.java | 4 +- .../java/jme3test/post/TestDepthOfField.java | 18 +- .../jme3test/post/TestFBOPassthrough.java | 2 +- .../src/main/java/jme3test/post/TestFog.java | 28 +- .../java/jme3test/post/TestIssue1798.java | 4 +- .../jme3test/post/TestMultiRenderTarget.java | 2 +- .../java/jme3test/post/TestPostFilters.java | 4 +- .../post/TestPostFiltersCompositing.java | 8 +- .../jme3test/post/TestRenderToCubemap.java | 12 +- .../jme3test/post/TestRenderToMemory.java | 2 +- .../jme3test/post/TestRenderToTexture.java | 12 +- .../src/main/java/jme3test/post/TestSSAO.java | 10 +- .../post/TestTransparentCartoonEdge.java | 4 +- .../renderer/TestBackgroundImage.java | 4 +- .../jme3test/renderer/TestDepthStencil.java | 2 +- .../TestInconsistentCompareDetection.java | 6 +- .../java/jme3test/renderer/TestIssue37.java | 4 +- .../jme3test/stencil/TestStencilOutline.java | 4 +- .../stress/TestShaderNodesStress.java | 4 +- .../terrain/PBRTerrainAdvancedTest.java | 62 +- .../java/jme3test/terrain/PBRTerrainTest.java | 32 +- .../terrain/TerrainFractalGridTest.java | 10 +- .../terrain/TerrainGridAlphaMapTest.java | 12 +- .../jme3test/terrain/TerrainGridTest.java | 10 +- .../terrain/TerrainGridTileLoaderTest.java | 10 +- .../java/jme3test/terrain/TerrainTest.java | 12 +- .../jme3test/terrain/TerrainTestAdvanced.java | 40 +- .../jme3test/terrain/TerrainTestAndroid.java | 12 +- .../terrain/TerrainTestCollision.java | 12 +- .../terrain/TerrainTestModifyHeight.java | 12 +- .../terrain/TerrainTestReadWrite.java | 18 +- .../jme3test/terrain/TerrainTestTile.java | 6 +- .../texture/TestAnisotropicFilter.java | 16 +- .../jme3test/texture/TestImageRaster.java | 26 +- .../jme3test/texture/TestShaderImage.java | 4 +- .../java/jme3test/texture/TestSkyLoading.java | 14 +- .../java/jme3test/texture/TestTexture3D.java | 12 +- .../texture/TestTexture3DLoading.java | 6 +- .../jme3test/texture/TestTextureArray.java | 12 +- .../texture/TestTextureArrayCompressed.java | 12 +- .../jme3test/vulkan/VulkanHelperTest.java | 22 +- .../jme3test/water/TestMultiPostWater.java | 18 +- .../java/jme3test/water/TestPostWater.java | 8 +- .../com/jme3/system/ios/IosImageLoader.java | 8 +- .../com/jme3/opencl/lwjgl/LwjglContext.java | 9 +- .../com/jme3/opencl/lwjgl/LwjglContext.java | 9 +- .../jme3/niftygui/JmeBatchRenderBackend.java | 29 +- .../com/jme3/niftygui/RenderImageJme.java | 8 +- .../scene/plugins/fbx/material/FbxImage.java | 6 +- .../plugins/fbx/material/FbxMaterial.java | 14 +- .../plugins/fbx/material/FbxTexture.java | 20 +- .../scene/plugins/fbx/objects/FbxImage.java | 20 +- .../scene/plugins/fbx/objects/FbxTexture.java | 6 +- .../jme3/scene/plugins/gltf/GltfLoader.java | 18 +- .../jme3/scene/plugins/gltf/GltfUtils.java | 32 +- .../scene/plugins/gltf/MaterialAdapter.java | 8 +- .../export/material/J3MOutputCapsule.java | 18 +- .../scene/plugins/ogre/MaterialLoader.java | 10 +- .../ogre/matext/MaterialExtensionLoader.java | 6 +- .../material/plugin/TestMaterialWrite.java | 12 +- .../effects/TestIssue1773.java | 6 +- .../terrain/TestPBRTerrain.java | 32 +- .../terrain/TestPBRTerrainAdvanced.java | 62 +- .../screenshottests/water/TestPostWater.java | 18 +- .../geomipmap/grid/ImageTileLoader.java | 4 +- .../heightmap/ImageBasedHeightMap.java | 10 +- .../jme3/terrain/TestTerrainExporting.java | 4 +- .../collision/TerrainCollisionTest.java | 4 +- .../jme3/input/vr/AbstractVRMouseManager.java | 6 +- .../lwjgl_openvr/LWJGLOpenVRViewManager.java | 28 +- .../com/jme3/input/vr/oculus/OculusVR.java | 6 +- .../input/vr/openvr/OpenVRViewManager.java | 40 +- .../main/java/com/jme3/post/CartoonSSAO.java | 3 +- .../jme3/shadow/AbstractShadowRendererVR.java | 8 +- .../main/java/com/jme3/util/VRGuiManager.java | 8 +- 266 files changed, 3290 insertions(+), 3767 deletions(-) rename jme3-core/src/main/java/com/jme3/material/{OldMaterial.java => GlMaterial.java} (97%) rename jme3-core/src/main/java/com/jme3/scene/{OldMesh.java => GlMesh.java} (98%) rename jme3-core/src/main/java/com/jme3/texture/{Image.java => GlImage.java} (88%) create mode 100644 jme3-core/src/main/java/com/jme3/texture/ImageView.java create mode 100644 jme3-core/src/main/java/com/jme3/util/natives/GlNative.java create mode 100644 jme3-core/src/main/java/com/jme3/vulkan/images/BasicVulkanImage.java delete mode 100644 jme3-core/src/main/java/com/jme3/vulkan/images/Image.java delete mode 100644 jme3-core/src/main/java/com/jme3/vulkan/images/Texture.java rename jme3-core/src/main/java/com/jme3/vulkan/images/{ImageView.java => VulkanImageView.java} (79%) create mode 100644 jme3-core/src/main/java/com/jme3/vulkan/images/VulkanTexture.java diff --git a/VulkanDesign.txt b/VulkanDesign.txt index 3e6ca6c92b..b42da4d728 100644 --- a/VulkanDesign.txt +++ b/VulkanDesign.txt @@ -2,4 +2,6 @@ Spatial: Current problems: * The transform refresh only works when transform setter methods are used. I propose that the world transform should be recalculated on every frame. It will make the system a lot simpler, I think. * An explicit world light list is unnecessary. All that needs to be done to capture all lights affecting a spatial is to iterate up the hierarchy and collect lights from the local light lists. Iterating up the hierarchy is extremely cheap and I want to take more advantage of it. - * There should be at most one method in Spatial for iterating over an entire tree. It should use depth-first traversal. Breadth-first traversal isn't used within the engine and is obviously more expensive. collideWith() is also counted as a traversal method. If possible, I'd like to take more advantage of SceneGraphIterator, since I think it is the most powerful traversal available. \ No newline at end of file + * There should be at most one method in Spatial for iterating over an entire tree. It should use depth-first traversal. Breadth-first traversal isn't used within the engine and is obviously more expensive. collideWith() is also counted as a traversal method. If possible, I'd like to take more advantage of SceneGraphIterator, since I think it is the most powerful traversal available. + + diff --git a/jme3-android/src/main/java/com/jme3/app/state/VideoRecorderAppState.java b/jme3-android/src/main/java/com/jme3/app/state/VideoRecorderAppState.java index cc25a40d55..15f7ac6816 100644 --- a/jme3-android/src/main/java/com/jme3/app/state/VideoRecorderAppState.java +++ b/jme3-android/src/main/java/com/jme3/app/state/VideoRecorderAppState.java @@ -43,7 +43,7 @@ import com.jme3.system.JmeSystem; import com.jme3.system.Timer; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.util.AndroidScreenshots; import com.jme3.util.BufferUtils; import java.io.File; @@ -241,7 +241,7 @@ public void addImage(Renderer renderer, FrameBuffer out) { final WorkItem item = freeItems.take(); usedItems.add(item); item.buffer.clear(); - renderer.readFrameBufferWithFormat(out, item.buffer, Image.Format.BGRA8); + renderer.readFrameBufferWithFormat(out, item.buffer, GlImage.Format.BGRA8); executor.submit(new Callable() { @Override diff --git a/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidBufferImageLoader.java b/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidBufferImageLoader.java index 4dc13519da..f723d6ce76 100644 --- a/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidBufferImageLoader.java +++ b/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidBufferImageLoader.java @@ -37,7 +37,7 @@ import com.jme3.asset.AssetInfo; import com.jme3.asset.AssetLoader; import com.jme3.asset.TextureKey; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; import java.io.IOException; @@ -72,7 +72,7 @@ private static void convertARGBtoABGR(int[] src, int srcOff, int[] dst, int dstO @Override public Object load(AssetInfo assetInfo) throws IOException { Bitmap bitmap; - Image.Format format; + GlImage.Format format; int bpp; BitmapFactory.Options options = new BitmapFactory.Options(); @@ -102,15 +102,15 @@ public Object load(AssetInfo assetInfo) throws IOException { switch (bitmap.getConfig()) { case ALPHA_8: - format = Image.Format.Alpha8; + format = GlImage.Format.Alpha8; bpp = 1; break; case ARGB_8888: - format = Image.Format.RGBA8; + format = GlImage.Format.RGBA8; bpp = 4; break; case RGB_565: - format = Image.Format.RGB565; + format = GlImage.Format.RGB565; bpp = 2; break; default: @@ -124,7 +124,7 @@ public Object load(AssetInfo assetInfo) throws IOException { ByteBuffer data = BufferUtils.createByteBuffer(bitmap.getWidth() * bitmap.getHeight() * bpp); - if (format == Image.Format.RGBA8) { + if (format == GlImage.Format.RGBA8) { int[] pixelData = new int[width * height]; bitmap.getPixels(pixelData, 0, width, 0, 0, width, height); @@ -163,7 +163,7 @@ public Object load(AssetInfo assetInfo) throws IOException { bitmap.recycle(); - Image image = new Image(format, width, height, data, ColorSpace.sRGB); + GlImage image = new GlImage(format, width, height, data, ColorSpace.sRGB); return image; } diff --git a/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidNativeImageLoader.java b/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidNativeImageLoader.java index c56e51d0f0..754cdf4f34 100644 --- a/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidNativeImageLoader.java +++ b/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidNativeImageLoader.java @@ -34,7 +34,7 @@ import com.jme3.asset.AssetInfo; import com.jme3.asset.AssetLoader; import com.jme3.asset.TextureKey; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import java.io.IOException; import java.io.InputStream; @@ -52,10 +52,10 @@ public class AndroidNativeImageLoader implements AssetLoader { System.loadLibrary("decodejme"); } - private static native Image load(InputStream in, boolean flipY, byte[] tmpArray) throws IOException; + private static native GlImage load(InputStream in, boolean flipY, byte[] tmpArray) throws IOException; @Override - public Image load(AssetInfo info) throws IOException { + public GlImage load(AssetInfo info) throws IOException { boolean flip = ((TextureKey) info.getKey()).isFlipY(); try (final InputStream in = info.openStream()) { return load(in, flip, tmpArray); diff --git a/jme3-core/src/main/java/com/jme3/asset/AssetManager.java b/jme3-core/src/main/java/com/jme3/asset/AssetManager.java index 73762a1234..dafc454c13 100644 --- a/jme3-core/src/main/java/com/jme3/asset/AssetManager.java +++ b/jme3-core/src/main/java/com/jme3/asset/AssetManager.java @@ -42,7 +42,7 @@ import com.jme3.scene.Spatial; import com.jme3.scene.plugins.OBJLoader; import com.jme3.shader.ShaderGenerator; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.plugins.TGALoader; import java.io.IOException; import java.io.InputStream; @@ -270,7 +270,7 @@ public default List getClassLoaders() { * * @see AssetManager#loadAsset(com.jme3.asset.AssetKey) */ - public Texture loadTexture(TextureKey key); + public GlTexture loadTexture(TextureKey key); /** * Loads texture file, supported types are BMP, JPG, PNG, GIF, @@ -283,7 +283,7 @@ public default List getClassLoaders() { * * @see AssetManager#loadAsset(com.jme3.asset.AssetKey) */ - public Texture loadTexture(String name); + public GlTexture loadTexture(String name); /** * Load audio file, supported types are WAV or OGG. diff --git a/jme3-core/src/main/java/com/jme3/asset/DesktopAssetManager.java b/jme3-core/src/main/java/com/jme3/asset/DesktopAssetManager.java index a8ff73f2c4..9edaa4a5d7 100644 --- a/jme3-core/src/main/java/com/jme3/asset/DesktopAssetManager.java +++ b/jme3-core/src/main/java/com/jme3/asset/DesktopAssetManager.java @@ -44,7 +44,7 @@ import com.jme3.shader.Glsl300ShaderGenerator; import com.jme3.shader.ShaderGenerator; import com.jme3.system.JmeSystem; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.io.IOException; import java.io.InputStream; import java.net.URL; @@ -405,7 +405,7 @@ public Object loadAsset(String name) { } @Override - public Texture loadTexture(TextureKey key) { + public GlTexture loadTexture(TextureKey key) { return loadAsset(key); } @@ -415,7 +415,7 @@ public Material loadMaterial(String name) { } @Override - public Texture loadTexture(String name) { + public GlTexture loadTexture(String name) { TextureKey key = new TextureKey(name, true); key.setGenerateMips(true); return loadTexture(key); diff --git a/jme3-core/src/main/java/com/jme3/asset/TextureKey.java b/jme3-core/src/main/java/com/jme3/asset/TextureKey.java index be096de5da..8b9d24a2ca 100644 --- a/jme3-core/src/main/java/com/jme3/asset/TextureKey.java +++ b/jme3-core/src/main/java/com/jme3/asset/TextureKey.java @@ -31,22 +31,22 @@ */ package com.jme3.asset; -import com.jme3.texture.Texture.Type; +import com.jme3.texture.GlTexture.Type; import com.jme3.asset.cache.AssetCache; import com.jme3.asset.cache.WeakRefCloneAssetCache; import com.jme3.export.InputCapsule; import com.jme3.export.JmeExporter; import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.TextureProcessor; import java.io.IOException; /** * Used to load textures from image files such as JPG or PNG. - * Note that texture loaders actually load the asset as an {@link Image} - * object, which is then converted to a {@link Texture} in the + * Note that texture loaders actually load the asset as an {@link GlImage} + * object, which is then converted to a {@link GlTexture} in the * {@link TextureProcessor#postProcess(com.jme3.asset.AssetKey, java.lang.Object)} * method. Since textures are cloneable smart assets, the texture stored * in the cache will be collected when all clones of the texture become @@ -54,12 +54,12 @@ * * @author Kirill Vainer */ -public class TextureKey extends AssetKey { +public class TextureKey extends AssetKey { private boolean generateMips; private boolean flipY; private int anisotropy; - private Texture.Type textureTypeHint = Texture.Type.TwoDimensional; + private GlTexture.Type textureTypeHint = GlTexture.Type.TwoDimensional; public TextureKey(String name, boolean flipY) { super(name); @@ -213,7 +213,7 @@ public void read(JmeImporter im) throws IOException { // Backwards compat textureTypeHint = Type.CubeMap; } else { - textureTypeHint = ic.readEnum("tex_type", Texture.Type.class, Type.TwoDimensional); + textureTypeHint = ic.readEnum("tex_type", GlTexture.Type.class, Type.TwoDimensional); } } } diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java index 78eb08a62e..f685fcfbb0 100644 --- a/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java +++ b/jme3-core/src/main/java/com/jme3/effect/ParticleMesh.java @@ -33,8 +33,7 @@ import com.jme3.math.Matrix3f; import com.jme3.renderer.Camera; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; /** * The ParticleMesh is the underlying visual implementation of a @@ -42,7 +41,7 @@ * * @author Kirill Vainer */ -public abstract class ParticleMesh extends OldMesh { +public abstract class ParticleMesh extends GlMesh { /** * Type of particle mesh diff --git a/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java b/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java index 2f8ee78d9b..729018e20a 100644 --- a/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java +++ b/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java @@ -66,7 +66,7 @@ public class EnvironmentCamera extends BaseAppState { protected static Vector3f[] axisY = new Vector3f[6]; protected static Vector3f[] axisZ = new Vector3f[6]; - protected Image.Format imageFormat = Image.Format.RGB16F; + protected GlImage.Format imageFormat = GlImage.Format.RGB16F; public TextureCubeMap debugEnv; @@ -98,7 +98,7 @@ public class EnvironmentCamera extends BaseAppState { axisZ[5] = Vector3f.UNIT_Z.mult(-1f); } - protected Image images[]; + protected GlImage images[]; protected ViewPort[] viewports; protected FrameBuffer[] framebuffers; protected ByteBuffer[] buffers; @@ -146,7 +146,7 @@ public EnvironmentCamera(int size, Vector3f position) { * @param position the position of the camera. * @param imageFormat the ImageFormat to use for the resulting texture. */ - public EnvironmentCamera(int size, Vector3f position, Image.Format imageFormat) { + public EnvironmentCamera(int size, Vector3f position, GlImage.Format imageFormat) { this.size = size; this.position.set(position); this.imageFormat = imageFormat; @@ -183,7 +183,7 @@ public void render(final RenderManager renderManager) { size * size * imageFormat.getBitsPerPixel() / 8); renderManager.getRenderer().readFrameBufferWithFormat( framebuffers[i], buffers[i], imageFormat); - images[i] = new Image(imageFormat, size, size, buffers[i], + images[i] = new GlImage(imageFormat, size, size, buffers[i], ColorSpace.Linear); MipMapGenerator.generateMipMaps(images[i]); } @@ -299,7 +299,7 @@ protected void initialize(Application app) { viewports = new ViewPort[6]; framebuffers = new FrameBuffer[6]; buffers = new ByteBuffer[6]; - images = new Image[6]; + images = new GlImage[6]; for (int i = 0; i < 6; i++) { cameras[i] = createOffCamera(size, position, axisX[i], axisY[i], axisZ[i]); @@ -318,7 +318,7 @@ protected void cleanup(Application app) { frameBuffer.dispose(); } - for (final Image image : images) { + for (final GlImage image : images) { if (image != null) { image.dispose(); } @@ -330,7 +330,7 @@ protected void cleanup(Application app) { * * @return the enum value */ - public Image.Format getImageFormat() { + public GlImage.Format getImageFormat() { return imageFormat; } @@ -386,7 +386,7 @@ protected ViewPort createOffViewPort(final String name, final Camera offCamera) protected FrameBuffer createOffScreenFrameBuffer(int mapSize, ViewPort offView) { // create offscreen framebuffer final FrameBuffer offBuffer = new FrameBuffer(mapSize, mapSize, 1); - offBuffer.setDepthBuffer(Image.Format.Depth); + offBuffer.setDepthBuffer(GlImage.Format.Depth); offView.setOutputFrameBuffer(offBuffer); return offBuffer; } diff --git a/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java b/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java index 6f07fd1c1c..a6e83d96e0 100644 --- a/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java +++ b/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java @@ -49,7 +49,7 @@ import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.scene.control.Control; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; /** * A control that automatically handles environment bake and rebake including diff --git a/jme3-core/src/main/java/com/jme3/environment/FastLightProbeFactory.java b/jme3-core/src/main/java/com/jme3/environment/FastLightProbeFactory.java index 12ba5e99c1..0abe35f999 100644 --- a/jme3-core/src/main/java/com/jme3/environment/FastLightProbeFactory.java +++ b/jme3-core/src/main/java/com/jme3/environment/FastLightProbeFactory.java @@ -40,7 +40,7 @@ import com.jme3.renderer.RenderManager; import com.jme3.scene.Node; import com.jme3.scene.Spatial; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; /** * A faster LightProbeFactory that uses GPU accelerated algorithms. diff --git a/jme3-core/src/main/java/com/jme3/environment/baker/GenericEnvBaker.java b/jme3-core/src/main/java/com/jme3/environment/baker/GenericEnvBaker.java index 6831914945..2c2a071012 100644 --- a/jme3-core/src/main/java/com/jme3/environment/baker/GenericEnvBaker.java +++ b/jme3-core/src/main/java/com/jme3/environment/baker/GenericEnvBaker.java @@ -49,12 +49,12 @@ import com.jme3.scene.Geometry; import com.jme3.scene.Spatial; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.FrameBuffer.FrameBufferTarget; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.TextureCubeMap; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; @@ -236,10 +236,10 @@ protected void startPulling() { * id of face if cubemap or 0 otherwise * @return the ByteBuffer containing the pulled data */ - protected ByteBuffer pull(FrameBuffer fb, Texture env, int faceId) { + protected ByteBuffer pull(FrameBuffer fb, GlTexture env, int faceId) { - if (fb.getColorTarget().getFormat() != env.getImage().getFormat()) - throw new IllegalArgumentException("Format mismatch: " + fb.getColorTarget().getFormat() + "!=" + env.getImage().getFormat()); + if (fb.getColorTarget().getFormat() != env.getImage().getGlFormat()) + throw new IllegalArgumentException("Format mismatch: " + fb.getColorTarget().getFormat() + "!=" + env.getImage().getGlFormat()); ByteBuffer face = BufferUtils.createByteBuffer(fb.getWidth() * fb.getHeight() * (fb.getColorTarget().getFormat().getBitsPerPixel() / 8)); renderManager.getRenderer().readFrameBufferWithFormat(fb, face, fb.getColorTarget().getFormat()); @@ -269,7 +269,7 @@ protected ByteBuffer pull(FrameBuffer fb, Texture env, int faceId) { * @param tx * the texture to pull into */ - protected void endPulling(Texture tx) { + protected void endPulling(GlTexture tx) { for (int i = 0; i < bos.size(); i++) { ByteArrayOutputStream bo = bos.get(i); if (bo != null) { diff --git a/jme3-core/src/main/java/com/jme3/environment/baker/IBLGLEnvBaker.java b/jme3-core/src/main/java/com/jme3/environment/baker/IBLGLEnvBaker.java index 5b79a4922f..820d7ce4dd 100644 --- a/jme3-core/src/main/java/com/jme3/environment/baker/IBLGLEnvBaker.java +++ b/jme3-core/src/main/java/com/jme3/environment/baker/IBLGLEnvBaker.java @@ -44,10 +44,10 @@ import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.Texture2D; import com.jme3.texture.TextureCubeMap; import com.jme3.texture.FrameBuffer.FrameBufferTarget; @@ -98,7 +98,7 @@ public IBLGLEnvBaker(RenderManager rm, AssetManager am, Format format, Format de int[] sizes = new int[nbMipMaps]; for (int i = 0; i < nbMipMaps; i++) { int size = (int) FastMath.pow(2, nbMipMaps - 1 - i); - sizes[i] = size * size * (specular.getImage().getFormat().getBitsPerPixel() / 8); + sizes[i] = size * size * (specular.getImage().getGlFormat().getBitsPerPixel() / 8); } specular.getImage().setMipMapSizes(sizes); diff --git a/jme3-core/src/main/java/com/jme3/environment/baker/IBLGLEnvBakerLight.java b/jme3-core/src/main/java/com/jme3/environment/baker/IBLGLEnvBakerLight.java index f6284f14ea..c28c6b1266 100644 --- a/jme3-core/src/main/java/com/jme3/environment/baker/IBLGLEnvBakerLight.java +++ b/jme3-core/src/main/java/com/jme3/environment/baker/IBLGLEnvBakerLight.java @@ -45,10 +45,10 @@ import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.Texture2D; import com.jme3.texture.FrameBuffer.FrameBufferTarget; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.image.ColorSpace; import com.jme3.texture.image.ImageRaster; import com.jme3.util.BufferUtils; @@ -149,7 +149,7 @@ public void bakeSphericalHarmonicsCoefficients() { renderManager.getRenderer().readFrameBufferWithFormat(shbaker[renderOnT], shCoefRaw, shbaker[renderOnT].getColorTarget().getFormat()); shCoefRaw.rewind(); - Image img = new Image(format, NUM_SH_COEFFICIENT, 1, shCoefRaw, ColorSpace.Linear); + GlImage img = new GlImage(format, NUM_SH_COEFFICIENT, 1, shCoefRaw, ColorSpace.Linear); ImageRaster imgr = ImageRaster.create(img); shCoef = new Vector3f[NUM_SH_COEFFICIENT]; diff --git a/jme3-core/src/main/java/com/jme3/environment/baker/IBLHybridEnvBakerLight.java b/jme3-core/src/main/java/com/jme3/environment/baker/IBLHybridEnvBakerLight.java index 26b3c1cd65..facf2c7f43 100644 --- a/jme3-core/src/main/java/com/jme3/environment/baker/IBLHybridEnvBakerLight.java +++ b/jme3-core/src/main/java/com/jme3/environment/baker/IBLHybridEnvBakerLight.java @@ -46,10 +46,10 @@ import com.jme3.texture.FrameBuffer; import com.jme3.texture.TextureCubeMap; import com.jme3.texture.FrameBuffer.FrameBufferTarget; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.image.ColorSpace; /** @@ -97,7 +97,7 @@ public IBLHybridEnvBakerLight(RenderManager rm, AssetManager am, Format format, int[] sizes = new int[nbMipMaps]; for (int i = 0; i < nbMipMaps; i++) { int size = (int) FastMath.pow(2, nbMipMaps - 1 - i); - sizes[i] = size * size * (specular.getImage().getFormat().getBitsPerPixel() / 8); + sizes[i] = size * size * (specular.getImage().getGlFormat().getBitsPerPixel() / 8); } specular.getImage().setMipMapSizes(sizes); specular.getImage().setMipmapsGenerated(true); diff --git a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java index 4e52804c5b..affcb101a1 100644 --- a/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java +++ b/jme3-core/src/main/java/com/jme3/environment/util/BoundingSphereDebug.java @@ -36,8 +36,7 @@ import com.jme3.math.ColorRGBA; import com.jme3.math.FastMath; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import java.nio.FloatBuffer; @@ -50,7 +49,7 @@ * * @author nehon */ -public class BoundingSphereDebug extends OldMesh { +public class BoundingSphereDebug extends GlMesh { protected int vertCount; protected int triCount; diff --git a/jme3-core/src/main/java/com/jme3/environment/util/CubeMapWrapper.java b/jme3-core/src/main/java/com/jme3/environment/util/CubeMapWrapper.java index 322caa92d1..046f02251f 100644 --- a/jme3-core/src/main/java/com/jme3/environment/util/CubeMapWrapper.java +++ b/jme3-core/src/main/java/com/jme3/environment/util/CubeMapWrapper.java @@ -32,7 +32,7 @@ package com.jme3.environment.util; import com.jme3.math.*; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.TextureCubeMap; import com.jme3.texture.image.DefaultImageRaster; import com.jme3.texture.image.MipMapImageRaster; @@ -53,7 +53,7 @@ public class CubeMapWrapper { private final DefaultImageRaster raster; private int[] sizes; private final Vector2f uvs = new Vector2f(); - private final Image image; + private final GlImage image; private final ColorRGBA tmpColor = new ColorRGBA(); @@ -245,7 +245,7 @@ public void initMipMaps(int nbMipMaps) { int totalSize = 0; for (int i = 0; i < nbMipMaps; i++) { int size = (int) pow(2, maxMipMap - 1 - i); - sizes[i] = size * size * image.getFormat().getBitsPerPixel() / 8; + sizes[i] = size * size * image.getGlFormat().getBitsPerPixel() / 8; totalSize += sizes[i]; } diff --git a/jme3-core/src/main/java/com/jme3/environment/util/EnvMapUtils.java b/jme3-core/src/main/java/com/jme3/environment/util/EnvMapUtils.java index 81c12e4a2c..2b62a080f1 100644 --- a/jme3-core/src/main/java/com/jme3/environment/util/EnvMapUtils.java +++ b/jme3-core/src/main/java/com/jme3/environment/util/EnvMapUtils.java @@ -113,8 +113,8 @@ private EnvMapUtils() { * @param format the format of the image * @return a cube map */ - public static TextureCubeMap makeCubeMap(Image rightImg, Image leftImg, Image upImg, Image downImg, Image backImg, Image frontImg, Image.Format format) { - Image cubeImage = new Image(format, leftImg.getWidth(), leftImg.getHeight(), null, ColorSpace.Linear); + public static TextureCubeMap makeCubeMap(GlImage rightImg, GlImage leftImg, GlImage upImg, GlImage downImg, GlImage backImg, GlImage frontImg, GlImage.Format format) { + GlImage cubeImage = new GlImage(format, leftImg.getWidth(), leftImg.getHeight(), null, ColorSpace.Linear); cubeImage.addData(rightImg.getData(0)); cubeImage.addData(leftImg.getData(0)); @@ -129,9 +129,9 @@ public static TextureCubeMap makeCubeMap(Image rightImg, Image leftImg, Image up TextureCubeMap cubeMap = new TextureCubeMap(cubeImage); cubeMap.setAnisotropicFilter(0); - cubeMap.setMagFilter(Texture.MagFilter.Bilinear); - cubeMap.setMinFilter(Texture.MinFilter.BilinearNoMipMaps); - cubeMap.setWrap(Texture.WrapMode.EdgeClamp); + cubeMap.setMagFilter(GlTexture.MagFilter.Bilinear); + cubeMap.setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); + cubeMap.setWrap(GlTexture.WrapMode.EdgeClamp); return cubeMap; } @@ -151,8 +151,8 @@ public static TextureCubeMap makeCubeMap(Image rightImg, Image leftImg, Image up * @return a new instance */ public static TextureCubeMap duplicateCubeMap(TextureCubeMap sourceMap) { - Image srcImg = sourceMap.getImage(); - Image cubeImage = new Image(srcImg.getFormat(), srcImg.getWidth(), srcImg.getHeight(), null, srcImg.getColorSpace()); + GlImage srcImg = sourceMap.getImage(); + GlImage cubeImage = new GlImage(srcImg.getGlFormat(), srcImg.getWidth(), srcImg.getHeight(), null, srcImg.getColorSpace()); for (ByteBuffer d : srcImg.getData()) { cubeImage.addData(d.duplicate()); @@ -164,7 +164,7 @@ public static TextureCubeMap duplicateCubeMap(TextureCubeMap sourceMap) { cubeMap.setAnisotropicFilter(sourceMap.getAnisotropicFilter()); cubeMap.setMagFilter(sourceMap.getMagFilter()); cubeMap.setMinFilter(sourceMap.getMinFilter()); - cubeMap.setWrap(sourceMap.getWrap(Texture.WrapAxis.S)); + cubeMap.setWrap(sourceMap.getWrap(GlTexture.WrapAxis.S)); return cubeMap; } @@ -621,7 +621,7 @@ public static Node getCubeMapCrossDebugView(TextureCubeMap cubeMap, AssetManager for (int i = 0; i < 6; i++) { pics[i] = new Picture("bla"); - Texture2D tex = new Texture2D(new Image(cubeMap.getImage().getFormat(), size, size, cubeMap.getImage().getData(i), cubeMap.getImage().getColorSpace())); + Texture2D tex = new Texture2D(new GlImage(cubeMap.getImage().getGlFormat(), size, size, cubeMap.getImage().getData(i), cubeMap.getImage().getColorSpace())); pics[i].setTexture(assetManager, tex, true); pics[i].setWidth(size); @@ -678,7 +678,7 @@ public static Node getCubeMapCrossDebugViewWithMipMaps(TextureCubeMap cubeMap, A ByteBuffer data = BufferUtils.createByteBuffer(dataArray); pics[i] = new Picture("bla"); - Texture2D tex = new Texture2D(new Image(cubeMap.getImage().getFormat(), size, size, data, cubeMap.getImage().getColorSpace())); + Texture2D tex = new Texture2D(new GlImage(cubeMap.getImage().getGlFormat(), size, size, data, cubeMap.getImage().getColorSpace())); pics[i].setTexture(assetManager, tex, true); pics[i].setWidth(size); @@ -721,11 +721,11 @@ public static Node getCubeMapCrossDebugViewWithMipMaps(TextureCubeMap cubeMap, A * @param imageFormat the format of the image * @return the initialized Irradiance map */ - public static TextureCubeMap createIrradianceMap(int size, Image.Format imageFormat) { + public static TextureCubeMap createIrradianceMap(int size, GlImage.Format imageFormat) { TextureCubeMap irrMap = new TextureCubeMap(size, size, imageFormat); - irrMap.setMagFilter(Texture.MagFilter.Bilinear); - irrMap.setMinFilter(Texture.MinFilter.BilinearNoMipMaps); + irrMap.setMagFilter(GlTexture.MagFilter.Bilinear); + irrMap.setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); irrMap.getImage().setColorSpace(ColorSpace.Linear); return irrMap; } @@ -736,11 +736,11 @@ public static TextureCubeMap createIrradianceMap(int size, Image.Format imageFor * @param imageFormat the format of the image * @return the initialized prefiltered env map */ - public static TextureCubeMap createPrefilteredEnvMap(int size, Image.Format imageFormat) { + public static TextureCubeMap createPrefilteredEnvMap(int size, GlImage.Format imageFormat) { TextureCubeMap pem = new TextureCubeMap(size, size, imageFormat); - pem.setMagFilter(Texture.MagFilter.Bilinear); - pem.setMinFilter(Texture.MinFilter.Trilinear); + pem.setMagFilter(GlTexture.MagFilter.Bilinear); + pem.setMinFilter(GlTexture.MinFilter.Trilinear); pem.getImage().setColorSpace(ColorSpace.Linear); int nbMipMap = Math.min(6, (int) (Math.log(size) / Math.log(2))); CubeMapWrapper targetWrapper = new CubeMapWrapper(pem); diff --git a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java index 6361f915cf..9a34f82b41 100644 --- a/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java +++ b/jme3-core/src/main/java/com/jme3/font/BitmapTextPage.java @@ -34,7 +34,7 @@ import com.jme3.material.Material; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.texture.Texture2D; @@ -60,7 +60,7 @@ class BitmapTextPage extends Geometry { private final LinkedList pageQuads = new LinkedList<>(); BitmapTextPage(BitmapFont font, boolean arrayBased, int page) { - super("BitmapFont", new OldMesh()); + super("BitmapFont", new GlMesh()); setRequiresUpdates(false); setBatchHint(BatchHint.Never); if (font == null) { diff --git a/jme3-core/src/main/java/com/jme3/material/OldMaterial.java b/jme3-core/src/main/java/com/jme3/material/GlMaterial.java similarity index 97% rename from jme3-core/src/main/java/com/jme3/material/OldMaterial.java rename to jme3-core/src/main/java/com/jme3/material/GlMaterial.java index aba37ab00c..3775d1601c 100644 --- a/jme3-core/src/main/java/com/jme3/material/OldMaterial.java +++ b/jme3-core/src/main/java/com/jme3/material/GlMaterial.java @@ -56,8 +56,8 @@ import com.jme3.scene.Geometry; import com.jme3.shader.*; import com.jme3.shader.bufferobject.BufferObject; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.TextureImage; import com.jme3.texture.image.ColorSpace; import com.jme3.util.ListMap; @@ -86,11 +86,11 @@ * * @author Kirill Vainer */ -public class OldMaterial implements Material, CloneableSmartAsset, Cloneable, Savable { +public class GlMaterial implements Material, CloneableSmartAsset, Cloneable, Savable { // Version #2: Fixed issue with RenderState.apply*** flags not getting exported public static final int SAVABLE_VERSION = 2; - private static final Logger logger = Logger.getLogger(Material.class.getName()); + private static final Logger logger = Logger.getLogger(GlMaterial.class.getName()); private AssetKey key; private String name; @@ -142,7 +142,7 @@ public static class BindUnits { * @param def The material definition to use (cannot be null). * @throws IllegalArgumentException if def is null. */ - public OldMaterial(MaterialDef def) { + public GlMaterial(MaterialDef def) { if (def == null) { throw new IllegalArgumentException("Material definition cannot be null"); } @@ -162,14 +162,14 @@ public OldMaterial(MaterialDef def) { * @param assetManager The asset manager to load the MaterialDef from. * @param defName The asset path of the .j3md file. */ - public OldMaterial(AssetManager assetManager, String defName) { + public GlMaterial(AssetManager assetManager, String defName) { this(assetManager.loadAsset(new AssetKey(defName))); } /** * For serialization only. Do not use. */ - public OldMaterial() { + public GlMaterial() { } /** @@ -231,15 +231,15 @@ public int getSortId() { if (!param.getVarType().isTextureType()) { continue; } - Texture texture = (Texture) param.getValue(); + GlTexture texture = (GlTexture) param.getValue(); if (texture == null) { continue; } - Image image = texture.getImage(); + GlImage image = texture.getImage(); if (image == null) { continue; } - int textureId = image.getId(); + int textureId = image.getNativeObject(); if (textureId == -1) { textureId = 0; } @@ -254,9 +254,9 @@ public int getSortId() { * Clones this material. The result is returned. */ @Override - public OldMaterial clone() { + public GlMaterial clone() { try { - OldMaterial mat = (OldMaterial) super.clone(); + GlMaterial mat = (GlMaterial) super.clone(); if (additionalState != null) { mat.additionalState = additionalState.clone(); @@ -288,11 +288,11 @@ public OldMaterial clone() { * @return true if the materials are equal. */ public boolean contentEquals(Object otherObj) { - if (!(otherObj instanceof OldMaterial)) { + if (!(otherObj instanceof GlMaterial)) { return false; } - OldMaterial other = (OldMaterial) otherObj; + GlMaterial other = (GlMaterial) otherObj; // Early exit if the material are the same object if (this == other) { @@ -416,7 +416,7 @@ public void setTransparent(boolean transparent) { * * @return True if the material should receive shadows. * - * @see OldMaterial#setReceivesShadows(boolean) + * @see GlMaterial#setReceivesShadows(boolean) */ public boolean isReceivesShadows() { return receivesShadows; @@ -553,7 +553,7 @@ public void setParam(String name, VarType type, Object value) { checkSetParam(type, name); if (type.isTextureType()) { - setTextureParam(name, type, (Texture)value); + setTextureParam(name, type, (GlTexture)value); } else { MatParam val = getParam(name); if (val == null) { @@ -612,7 +612,7 @@ public void clearParam(String name) { * * @throws IllegalArgumentException is value is null */ - public void setTextureParam(String name, VarType type, Texture value) { + public void setTextureParam(String name, VarType type, GlTexture value) { if (value == null) { throw new IllegalArgumentException(); } @@ -639,7 +639,7 @@ public void setTextureParam(String name, VarType type, Texture value) { sortingId = -1; } - private void checkTextureParamColorSpace(String name, Texture value) { + private void checkTextureParamColorSpace(String name, GlTexture value) { MatParamTexture paramDef = (MatParamTexture) def.getMaterialParam(name); if (paramDef.getColorSpace() != null && paramDef.getColorSpace() != value.getImage().getColorSpace()) { value.getImage().setColorSpace(paramDef.getColorSpace()); @@ -669,7 +669,7 @@ private void checkTextureParamColorSpace(String name, Texture value) { * (.j3md) (e.g. Texture for Lighting.j3md) * @param value the Texture object previously loaded by the asset manager */ - public void setTexture(String name, Texture value) { + public void setTexture(String name, GlTexture value) { if (value == null) { // clear it clearParam(name); @@ -919,7 +919,7 @@ private void updateShaderMaterialParameter(Renderer renderer, VarType type, Shad if (type.isTextureType() || type.isImageType()) { try { if (type.isTextureType()) { - renderer.setTexture(unit.textureUnit, (Texture) param.getValue()); + renderer.setTexture(unit.textureUnit, (GlTexture) param.getValue()); } else { renderer.setTextureImage(unit.textureUnit, (TextureImage) param.getValue()); } diff --git a/jme3-core/src/main/java/com/jme3/material/MatParam.java b/jme3-core/src/main/java/com/jme3/material/MatParam.java index 8e4168133e..cc5fa51566 100644 --- a/jme3-core/src/main/java/com/jme3/material/MatParam.java +++ b/jme3-core/src/main/java/com/jme3/material/MatParam.java @@ -48,8 +48,8 @@ import com.jme3.math.Vector3f; import com.jme3.math.Vector4f; import com.jme3.shader.VarType; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; /** * Describes a material parameter. This is used for both defining a name and type @@ -283,7 +283,7 @@ public String getValueAsString() { case TextureArray: case TextureBuffer: case TextureCubeMap: - Texture texVal = (Texture) value; + GlTexture texVal = (GlTexture) value; TextureKey texKey = (TextureKey) texVal.getKey(); if (texKey == null) { // throw new UnsupportedOperationException("The specified MatParam cannot be represented in J3M"); @@ -299,20 +299,20 @@ public String getValueAsString() { } // Wrap mode - ret += getWrapMode(texVal, Texture.WrapAxis.S); - ret += getWrapMode(texVal, Texture.WrapAxis.T); - ret += getWrapMode(texVal, Texture.WrapAxis.R); + ret += getWrapMode(texVal, GlTexture.WrapAxis.S); + ret += getWrapMode(texVal, GlTexture.WrapAxis.T); + ret += getWrapMode(texVal, GlTexture.WrapAxis.R); // Min and Mag filter - Texture.MinFilter def = Texture.MinFilter.BilinearNoMipMaps; + GlTexture.MinFilter def = GlTexture.MinFilter.BilinearNoMipMaps; if (texVal.getImage().hasMipmaps() || texKey.isGenerateMips()) { - def = Texture.MinFilter.Trilinear; + def = GlTexture.MinFilter.Trilinear; } if (texVal.getMinFilter() != def) { ret += "Min" + texVal.getMinFilter().name() + " "; } - if (texVal.getMagFilter() != Texture.MagFilter.Bilinear) { + if (texVal.getMagFilter() != GlTexture.MagFilter.Bilinear) { ret += "Mag" + texVal.getMagFilter().name() + " "; } @@ -322,7 +322,7 @@ public String getValueAsString() { } } - private String getWrapMode(Texture texVal, Texture.WrapAxis axis) { + private String getWrapMode(GlTexture texVal, GlTexture.WrapAxis axis) { WrapMode mode = WrapMode.EdgeClamp; try { mode = texVal.getWrap(axis); diff --git a/jme3-core/src/main/java/com/jme3/material/MatParamTexture.java b/jme3-core/src/main/java/com/jme3/material/MatParamTexture.java index 58bd44418d..e75137422b 100644 --- a/jme3-core/src/main/java/com/jme3/material/MatParamTexture.java +++ b/jme3-core/src/main/java/com/jme3/material/MatParamTexture.java @@ -36,7 +36,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.shader.VarType; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.image.ColorSpace; import java.io.IOException; @@ -57,7 +57,7 @@ public class MatParamTexture extends MatParam { * @param texture the texture associated with this parameter * @param colorSpace the required color space for the texture */ - public MatParamTexture(VarType type, String name, Texture texture, ColorSpace colorSpace) { + public MatParamTexture(VarType type, String name, GlTexture texture, ColorSpace colorSpace) { super(type, name, texture); this.colorSpace = colorSpace; } @@ -73,17 +73,17 @@ public MatParamTexture() { * * @return the texture object */ - public Texture getTextureValue() { - return (Texture) getValue(); + public GlTexture getTextureValue() { + return (GlTexture) getValue(); } /** * Sets the texture associated with this material parameter. * * @param value the texture object to set - * @throws RuntimeException if the provided value is not a {@link Texture} + * @throws RuntimeException if the provided value is not a {@link GlTexture} */ - public void setTextureValue(Texture value) { + public void setTextureValue(GlTexture value) { setValue(value); } @@ -113,7 +113,7 @@ public void write(JmeExporter ex) throws IOException { oc.write(colorSpace, "colorSpace", null); // For backwards compatibility oc.write(0, "texture_unit", -1); - oc.write((Texture) value, "texture", null); + oc.write((GlTexture) value, "texture", null); } @Override diff --git a/jme3-core/src/main/java/com/jme3/material/Material.java b/jme3-core/src/main/java/com/jme3/material/Material.java index 350479e5ec..66bafd584d 100644 --- a/jme3-core/src/main/java/com/jme3/material/Material.java +++ b/jme3-core/src/main/java/com/jme3/material/Material.java @@ -33,7 +33,10 @@ import com.jme3.export.Savable; import com.jme3.scene.Geometry; +import com.jme3.texture.Texture; import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.frames.SingleResource; +import com.jme3.vulkan.material.uniforms.TextureUniform; import com.jme3.vulkan.material.uniforms.Uniform; import com.jme3.vulkan.pipelines.Pipeline; @@ -60,4 +63,9 @@ default void bind(CommandBuffer cmd, Pipeline pipeline) { bind(cmd, pipeline, 0); } + default void setTexture(String name, Texture texture) { + TextureUniform u = getUniform(name); + u.setResource(new SingleResource<>(texture)); + } + } diff --git a/jme3-core/src/main/java/com/jme3/material/MaterialDef.java b/jme3-core/src/main/java/com/jme3/material/MaterialDef.java index 9cbd482e00..deccf713ca 100644 --- a/jme3-core/src/main/java/com/jme3/material/MaterialDef.java +++ b/jme3-core/src/main/java/com/jme3/material/MaterialDef.java @@ -38,7 +38,7 @@ import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; /** * Describes a J3MD (Material definition). @@ -133,7 +133,7 @@ public void addMaterialParam(VarType type, String name, Object value) { * @param value Default value of the parameter * @see ColorSpace */ - public void addMaterialParamTexture(VarType type, String name, ColorSpace colorSpace,Texture value) { + public void addMaterialParamTexture(VarType type, String name, ColorSpace colorSpace, GlTexture value) { matParams.put(name, new MatParamTexture(type, name, value, colorSpace)); } diff --git a/jme3-core/src/main/java/com/jme3/material/Technique.java b/jme3-core/src/main/java/com/jme3/material/Technique.java index 46f321ff95..3575bfc29d 100644 --- a/jme3-core/src/main/java/com/jme3/material/Technique.java +++ b/jme3-core/src/main/java/com/jme3/material/Technique.java @@ -33,7 +33,7 @@ import com.jme3.asset.AssetManager; import com.jme3.light.LightList; -import com.jme3.material.OldMaterial.BindUnits; +import com.jme3.material.GlMaterial.BindUnits; import com.jme3.material.TechniqueDef.LightMode; import com.jme3.material.logic.TechniqueDefLogic; import com.jme3.renderer.Caps; @@ -52,7 +52,7 @@ public final class Technique { private final TechniqueDef def; - private final OldMaterial owner; + private final GlMaterial owner; private final DefineList paramDefines; private final DefineList dynamicDefines; @@ -63,7 +63,7 @@ public final class Technique { * @param owner The material that will own this technique * @param def The technique definition being implemented. */ - public Technique(OldMaterial owner, TechniqueDef def) { + public Technique(GlMaterial owner, TechniqueDef def) { this.owner = owner; this.def = def; this.paramDefines = def.createDefineList(); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java index ec0541ac3e..d3818215a0 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/DefaultTechniqueDefLogic.java @@ -33,16 +33,13 @@ import com.jme3.asset.AssetManager; import com.jme3.light.*; -import com.jme3.material.OldMaterial; +import com.jme3.material.GlMaterial; import com.jme3.material.TechniqueDef; -import com.jme3.material.Material.BindUnits; import com.jme3.math.ColorRGBA; import com.jme3.renderer.Caps; import com.jme3.renderer.RenderManager; import com.jme3.renderer.Renderer; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; -import com.jme3.scene.instancing.InstancedGeometry; import com.jme3.shader.DefineList; import com.jme3.shader.Shader; import java.util.EnumSet; @@ -62,17 +59,7 @@ public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager } public static void renderMeshFromGeometry(Renderer renderer, Geometry geom) { - Mesh mesh = geom.getMesh(); - int lodLevel = geom.getLodLevel(); - if (geom instanceof InstancedGeometry) { - InstancedGeometry instGeom = (InstancedGeometry) geom; - int numVisibleInstances = instGeom.getNumVisibleInstances(); - if (numVisibleInstances > 0) { - renderer.renderMesh(mesh, lodLevel, numVisibleInstances, instGeom.getAllInstanceData()); - } - } else { - renderer.renderMesh(mesh, lodLevel, 1, null); - } + geom.draw(renderer); } protected static ColorRGBA getAmbientColor(LightList lightList, boolean removeLights, ColorRGBA ambientLightColor) { @@ -93,7 +80,7 @@ protected static ColorRGBA getAmbientColor(LightList lightList, boolean removeLi @Override - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits) { + public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, GlMaterial.BindUnits lastBindUnits) { Renderer renderer = renderManager.getRenderer(); renderer.setShader(shader); renderMeshFromGeometry(renderer, geometry); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/MultiPassLightingLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/MultiPassLightingLogic.java index c566e041da..cfeceb1c2a 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/MultiPassLightingLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/MultiPassLightingLogic.java @@ -36,10 +36,9 @@ import com.jme3.light.LightList; import com.jme3.light.PointLight; import com.jme3.light.SpotLight; -import com.jme3.material.OldMaterial; +import com.jme3.material.GlMaterial; import com.jme3.material.RenderState; import com.jme3.material.TechniqueDef; -import com.jme3.material.Material.BindUnits; import com.jme3.math.ColorRGBA; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; @@ -69,7 +68,7 @@ public MultiPassLightingLogic(TechniqueDef techniqueDef) { } @Override - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits) { + public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, GlMaterial.BindUnits lastBindUnits) { Renderer r = renderManager.getRenderer(); Uniform lightDir = shader.getUniform("g_LightDirection"); Uniform lightColor = shader.getUniform("g_LightColor"); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/SinglePassAndImageBasedLightingLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/SinglePassAndImageBasedLightingLogic.java index 10fdd894bf..91e66ab006 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/SinglePassAndImageBasedLightingLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/SinglePassAndImageBasedLightingLogic.java @@ -34,7 +34,6 @@ import com.jme3.asset.AssetManager; import com.jme3.light.*; import com.jme3.material.*; -import com.jme3.material.Material.BindUnits; import com.jme3.material.RenderState.BlendMode; import com.jme3.math.*; import com.jme3.renderer.*; @@ -263,7 +262,7 @@ private int setProbeData(RenderManager rm, int lastTexUnit, Uniform lightProbeDa } @Override - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits) { + public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, GlMaterial.BindUnits lastBindUnits) { int nbRenderedLights = 0; Renderer renderer = renderManager.getRenderer(); int batchSize = renderManager.getSinglePassLightBatchSize(); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/SinglePassLightingLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/SinglePassLightingLogic.java index ab2051f10b..caee9bb30c 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/SinglePassLightingLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/SinglePassLightingLogic.java @@ -37,11 +37,10 @@ import com.jme3.light.LightList; import com.jme3.light.PointLight; import com.jme3.light.SpotLight; -import com.jme3.material.OldMaterial; +import com.jme3.material.GlMaterial; import com.jme3.material.RenderState; import com.jme3.material.RenderState.BlendMode; import com.jme3.material.TechniqueDef; -import com.jme3.material.Material.BindUnits; import com.jme3.math.ColorRGBA; import com.jme3.math.Vector3f; import com.jme3.math.Vector4f; @@ -208,7 +207,7 @@ protected int updateLightListUniforms(Shader shader, Geometry g, LightList light } @Override - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits) { + public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, GlMaterial.BindUnits lastBindUnits) { int nbRenderedLights = 0; Renderer renderer = renderManager.getRenderer(); int batchSize = renderManager.getSinglePassLightBatchSize(); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/StaticPassLightingLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/StaticPassLightingLogic.java index 42162a2edb..a6f3b0a3ec 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/StaticPassLightingLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/StaticPassLightingLogic.java @@ -37,9 +37,8 @@ import com.jme3.light.LightList; import com.jme3.light.PointLight; import com.jme3.light.SpotLight; -import com.jme3.material.OldMaterial; +import com.jme3.material.GlMaterial; import com.jme3.material.TechniqueDef; -import com.jme3.material.Material.BindUnits; import com.jme3.math.ColorRGBA; import com.jme3.math.Matrix4f; import com.jme3.math.Vector3f; @@ -173,7 +172,7 @@ private void updateLightListUniforms(Matrix4f viewMatrix, Shader shader, LightLi } @Override - public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits) { + public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, GlMaterial.BindUnits lastBindUnits) { Renderer renderer = renderManager.getRenderer(); Matrix4f viewMatrix = renderManager.getCurrentCamera().getViewMatrix(); updateLightListUniforms(viewMatrix, shader, lights); diff --git a/jme3-core/src/main/java/com/jme3/material/logic/TechniqueDefLogic.java b/jme3-core/src/main/java/com/jme3/material/logic/TechniqueDefLogic.java index b3488e5a79..ad1ecc109e 100644 --- a/jme3-core/src/main/java/com/jme3/material/logic/TechniqueDefLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/logic/TechniqueDefLogic.java @@ -33,14 +33,14 @@ import com.jme3.asset.AssetManager; import com.jme3.light.LightList; -import com.jme3.material.OldMaterial; +import com.jme3.material.GlMaterial; import com.jme3.renderer.Caps; import com.jme3.renderer.RenderManager; import com.jme3.scene.Geometry; import com.jme3.shader.DefineList; import com.jme3.shader.Shader; import com.jme3.shader.Uniform; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.util.EnumSet; /** @@ -83,7 +83,7 @@ Shader makeCurrent(AssetManager assetManager, RenderManager renderManager, * {@link com.jme3.material.MatParam material parameters}, and * {@link com.jme3.shader.UniformBinding uniform bindings} * have already been applied by the material, however, - * {@link com.jme3.material.RenderState}, {@link Uniform uniforms}, {@link Texture textures}, + * {@link com.jme3.material.RenderState}, {@link Uniform uniforms}, {@link GlTexture textures}, * can still be overridden. * * @param renderManager The render manager to perform the rendering against. @@ -93,5 +93,5 @@ Shader makeCurrent(AssetManager assetManager, RenderManager renderManager, * @param lights Lights which influence the geometry. * @param lastBindUnits the index of the most recently used texture unit */ - void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, OldMaterial.BindUnits lastBindUnits); + void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, GlMaterial.BindUnits lastBindUnits); } diff --git a/jme3-core/src/main/java/com/jme3/opencl/Context.java b/jme3-core/src/main/java/com/jme3/opencl/Context.java index e25f893e24..33ba40166a 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/Context.java +++ b/jme3-core/src/main/java/com/jme3/opencl/Context.java @@ -40,7 +40,8 @@ import com.jme3.opencl.Image.ImageType; import com.jme3.scene.VertexBuffer; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -229,7 +230,7 @@ public Buffer createBufferFromHost(ByteBuffer data) { * @param access the allowed memory access for kernels * @return the OpenCL image */ - public abstract Image bindImage(com.jme3.texture.Image image, Texture.Type textureType, int miplevel, MemoryAccess access); + public abstract Image bindImage(GlImage image, GlTexture.Type textureType, int miplevel, MemoryAccess access); /** * Creates a shared image object from a jME3 texture. @@ -254,19 +255,19 @@ public Buffer createBufferFromHost(ByteBuffer data) { * @param access the allowed memory access for kernels * @return the OpenCL image */ - public Image bindImage(Texture texture, int miplevel, MemoryAccess access) { + public Image bindImage(GlTexture texture, int miplevel, MemoryAccess access) { return bindImage(texture.getImage(), texture.getType(), miplevel, access); } /** - * Alternative version to {@link #bindImage(com.jme3.texture.Texture, int, com.jme3.opencl.MemoryAccess) }, + * Alternative version to {@link #bindImage(GlTexture, int, com.jme3.opencl.MemoryAccess) }, * uses {@code miplevel=0}. * * @param texture the jME3 texture * @param access the allowed memory access for kernels * @return the OpenCL image */ - public Image bindImage(Texture texture, MemoryAccess access) { + public Image bindImage(GlTexture texture, MemoryAccess access) { return bindImage(texture, 0, access); } diff --git a/jme3-core/src/main/java/com/jme3/opencl/Image.java b/jme3-core/src/main/java/com/jme3/opencl/Image.java index 5b07d0f376..026fa516f5 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/Image.java +++ b/jme3-core/src/main/java/com/jme3/opencl/Image.java @@ -32,6 +32,9 @@ package com.jme3.opencl; import com.jme3.math.ColorRGBA; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; + import java.nio.ByteBuffer; import java.util.Objects; @@ -48,7 +51,7 @@ * An image is created from scratch using * {@link Context#createImage(com.jme3.opencl.MemoryAccess, com.jme3.opencl.Image.ImageFormat, com.jme3.opencl.Image.ImageDescriptor) } * or from OpenGL by - * {@link Context#bindImage(com.jme3.texture.Image, com.jme3.texture.Texture.Type, int, com.jme3.opencl.MemoryAccess) } + * {@link Context#bindImage(GlImage, GlTexture.Type, int, com.jme3.opencl.MemoryAccess) } * (and alternative versions). * *

@@ -504,7 +507,7 @@ public ImageMapping(ByteBuffer buffer, long rowPitch, long slicePitch) { /** * Acquires this image object for using. Only call this method if this image * represents a shared object from OpenGL, created with e.g. - * {@link Context#bindImage(com.jme3.texture.Image, com.jme3.texture.Texture.Type, int, com.jme3.opencl.MemoryAccess) } + * {@link Context#bindImage(GlImage, GlTexture.Type, int, com.jme3.opencl.MemoryAccess) } * or variations. * This method must be called before the image is used. After the work is * done, the image must be released by calling @@ -519,7 +522,7 @@ public ImageMapping(ByteBuffer buffer, long rowPitch, long slicePitch) { /** * Acquires this image object for using. Only call this method if this image * represents a shared object from OpenGL, created with e.g. - * {@link Context#bindImage(com.jme3.texture.Image, com.jme3.texture.Texture.Type, int, com.jme3.opencl.MemoryAccess) } + * {@link Context#bindImage(GlImage, GlTexture.Type, int, com.jme3.opencl.MemoryAccess) } * or variations. * This method must be called before the image is used. After the work is * done, the image must be released by calling diff --git a/jme3-core/src/main/java/com/jme3/opencl/package-info.java b/jme3-core/src/main/java/com/jme3/opencl/package-info.java index 0a19e3a24a..922e4e1f1d 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/package-info.java +++ b/jme3-core/src/main/java/com/jme3/opencl/package-info.java @@ -107,8 +107,8 @@ * by calling {@link com.jme3.opencl.Context#bindVertexBuffer(com.jme3.scene.VertexBuffer, com.jme3.opencl.MemoryAccess) } * resulting in a {@link com.jme3.opencl.Buffer} object. This buffer object * can then be used as usual, allowing e.g. the dynamic modification of position buffers for particle systems.
- * {@link com.jme3.texture.Image} and {@link com.jme3.texture.Texture} objects can be used in OpenCL with the method - * {@link com.jme3.opencl.Context#bindImage(com.jme3.texture.Texture, com.jme3.opencl.MemoryAccess) } + * {@link com.jme3.texture.GlImage} and {@link com.jme3.texture.GlTexture} objects can be used in OpenCL with the method + * {@link com.jme3.opencl.Context#bindImage(GlTexture, com.jme3.opencl.MemoryAccess) } * or variations of this method. The same holds for {@link com.jme3.texture.FrameBuffer.RenderBuffer} objects * using {@link com.jme3.opencl.Context#bindRenderBuffer(com.jme3.texture.FrameBuffer.RenderBuffer, com.jme3.opencl.MemoryAccess) }. * These methods result in an OpenCL-Image. Usages are e.g. animated textures, @@ -157,3 +157,5 @@ package com.jme3.opencl; //TODO: add profiling to Kernel, CommandQueue + +import com.jme3.texture.GlTexture; \ No newline at end of file diff --git a/jme3-core/src/main/java/com/jme3/post/Filter.java b/jme3-core/src/main/java/com/jme3/post/Filter.java index efdb19b04a..a7ea09851a 100644 --- a/jme3-core/src/main/java/com/jme3/post/Filter.java +++ b/jme3-core/src/main/java/com/jme3/post/Filter.java @@ -40,8 +40,8 @@ import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.texture.FrameBuffer.FrameBufferTarget; import java.io.IOException; @@ -306,7 +306,7 @@ protected void cleanUpFilter(Renderer r) { * * @param depthTexture the desired Texture */ - protected void setDepthTexture(Texture depthTexture){ + protected void setDepthTexture(GlTexture depthTexture){ getMaterial().setTexture("DepthTexture", depthTexture); } diff --git a/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java b/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java index 685549d593..749ca97566 100644 --- a/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java +++ b/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java @@ -38,8 +38,8 @@ import com.jme3.renderer.*; import com.jme3.renderer.queue.RenderQueue; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.texture.FrameBuffer.FrameBufferTarget; import com.jme3.ui.Picture; @@ -308,8 +308,8 @@ private void renderFilterChain(Renderer r, FrameBuffer sceneFb) { boolean wantsBilinear = filter.isRequiresBilinear(); if (wantsBilinear) { - tex.setMagFilter(Texture.MagFilter.Bilinear); - tex.setMinFilter(Texture.MinFilter.BilinearNoMipMaps); + tex.setMagFilter(GlTexture.MagFilter.Bilinear); + tex.setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); } buff = outputBuffer; @@ -324,8 +324,8 @@ private void renderFilterChain(Renderer r, FrameBuffer sceneFb) { filter.postFilter(r, buff); if (wantsBilinear) { - tex.setMagFilter(Texture.MagFilter.Nearest); - tex.setMinFilter(Texture.MinFilter.NearestNoMipMaps); + tex.setMagFilter(GlTexture.MagFilter.Nearest); + tex.setMinFilter(GlTexture.MinFilter.NearestNoMipMaps); } } } diff --git a/jme3-core/src/main/java/com/jme3/post/HDRRenderer.java b/jme3-core/src/main/java/com/jme3/post/HDRRenderer.java index 857e78dbc3..81dcd48b2d 100644 --- a/jme3-core/src/main/java/com/jme3/post/HDRRenderer.java +++ b/jme3-core/src/main/java/com/jme3/post/HDRRenderer.java @@ -38,11 +38,11 @@ import com.jme3.renderer.*; import com.jme3.renderer.queue.RenderQueue; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; import com.jme3.texture.Texture2D; import com.jme3.ui.Picture; import java.util.Collection; @@ -91,7 +91,7 @@ public class HDRRenderer implements SceneProcessor { private float whiteLevel = 100f; private float throttle = -1; private int maxIterations = -1; - private Image.Format bufFormat = Format.RGB8; + private GlImage.Format bufFormat = Format.RGB8; private MinFilter fbMinFilter = MinFilter.BilinearNoMipMaps; private MagFilter fbMagFilter = MagFilter.Bilinear; @@ -172,7 +172,7 @@ public Picture createDisplayQuad(/*int mode, Texture tex*/) { } private Material createLumShader(int srcW, int srcH, int bufW, int bufH, int mode, - int iters, Texture tex) { + int iters, GlTexture tex) { Material mat = new Material(manager, "Common/MatDefs/Hdr/LogLum.j3md"); Vector2f blockSize = new Vector2f(1f / bufW, 1f / bufH); diff --git a/jme3-core/src/main/java/com/jme3/renderer/Caps.java b/jme3-core/src/main/java/com/jme3/renderer/Caps.java index 647d44a9a6..af2745d268 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Caps.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Caps.java @@ -35,9 +35,9 @@ import com.jme3.shader.Shader.ShaderSource; import com.jme3.texture.FrameBuffer; import com.jme3.texture.FrameBuffer.RenderBuffer; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import java.util.Collection; /** @@ -378,12 +378,12 @@ public enum Caps { * *

Use of NPOT textures is allowed iff: *

    - *
  • The {@link com.jme3.texture.Texture.WrapMode} is set to - * {@link com.jme3.texture.Texture.WrapMode#EdgeClamp}.
  • + *
  • The {@link GlTexture.WrapMode} is set to + * {@link GlTexture.WrapMode#EdgeClamp}.
  • *
  • Mip-mapping is not used, meaning - * {@link com.jme3.texture.Texture.MinFilter} is set to - * {@link com.jme3.texture.Texture.MinFilter#BilinearNoMipMaps} or - * {@link com.jme3.texture.Texture.MinFilter#NearestNoMipMaps}
  • + * {@link GlTexture.MinFilter} is set to + * {@link GlTexture.MinFilter#BilinearNoMipMaps} or + * {@link GlTexture.MinFilter#NearestNoMipMaps} *
*/ PartialNonPowerOfTwoTextures, @@ -474,18 +474,18 @@ public enum Caps { * @param tex The texture to check * @return True if it is supported, false otherwise. */ - public static boolean supports(Collection caps, Texture tex) { - if (tex.getType() == Texture.Type.TwoDimensionalArray + public static boolean supports(Collection caps, GlTexture tex) { + if (tex.getType() == GlTexture.Type.TwoDimensionalArray && !caps.contains(Caps.TextureArray)) { return false; } - Image img = tex.getImage(); + GlImage img = tex.getImage(); if (img == null) { return true; } - Format fmt = img.getFormat(); + Format fmt = img.getGlFormat(); switch (fmt) { case Depth24Stencil8: return caps.contains(Caps.PackedDepthStencilBuffer); diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java index c6cdec02f1..0b3a570332 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java @@ -37,9 +37,10 @@ import com.jme3.scene.VertexBuffer; import com.jme3.shader.Shader; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import java.lang.ref.WeakReference; import com.jme3.shader.bufferobject.BufferObject; +import com.jme3.texture.GlTexture; /** * Represents the current state of the graphics library. This class is used @@ -258,9 +259,9 @@ public class RenderContext { /** * Current bound texture IDs for each texture unit. * - * @see Renderer#setTexture(int, com.jme3.texture.Texture) + * @see Renderer#setTexture(int, GlTexture) */ - public final WeakReference boundTextures[] + public final WeakReference boundTextures[] = new WeakReference[maxTextureUnits]; @@ -275,14 +276,14 @@ public class RenderContext { /** * IDList for texture units. * - * @see Renderer#setTexture(int, com.jme3.texture.Texture) + * @see Renderer#setTexture(int, GlTexture) */ public final IDList textureIndexList = new IDList(); /** * Currently bound texture unit. * - * @see Renderer#setTexture(int, com.jme3.texture.Texture) + * @see Renderer#setTexture(int, GlTexture) */ public int boundTextureUnit; diff --git a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java index acd0d599e1..3a88afa46a 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java @@ -33,15 +33,15 @@ import com.jme3.material.RenderState; import com.jme3.math.ColorRGBA; -import com.jme3.scene.Mesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.shader.bufferobject.BufferObject; import com.jme3.shader.Shader; import com.jme3.shader.Shader.ShaderSource; import com.jme3.system.AppSettings; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.TextureImage; import com.jme3.util.NativeObject; import java.nio.ByteBuffer; @@ -256,7 +256,7 @@ public interface Renderer { * @param byteBuf The bytebuffer to transfer color data to * @param format the image format to use when reading the frameBuffer. */ - public void readFrameBufferWithFormat(FrameBuffer fb, ByteBuffer byteBuf, Image.Format format); + public void readFrameBufferWithFormat(FrameBuffer fb, ByteBuffer byteBuf, GlImage.Format format); /** * Deletes a framebuffer and all attached renderbuffers. @@ -272,7 +272,7 @@ public interface Renderer { * @param tex the Texture to assign * @throws TextureUnitException if the texture unit doesn't exist */ - public void setTexture(int unit, Texture tex) + public void setTexture(int unit, GlTexture tex) throws TextureUnitException; /** @@ -295,14 +295,14 @@ public void setTexture(int unit, Texture tex) * @param x the x position to put the image into the texture * @param y the y position to put the image into the texture */ - public void modifyTexture(Texture tex, Image pixels, int x, int y); + public void modifyTexture(GlTexture tex, GlImage pixels, int x, int y); /** * Deletes a texture from the GPU. * * @param image the texture to delete */ - public void deleteImage(Image image); + public void deleteImage(GlImage image); /** * Uploads a vertex buffer to the GPU. @@ -356,7 +356,7 @@ public void setTexture(int unit, Texture tex) * @param instanceData When count is greater than 1, these buffers provide * the per-instance attributes. */ - public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData); + public void renderMesh(GlMesh mesh, int lod, int count, VertexBuffer[] instanceData); /** * Resets all previously used {@link NativeObject Native Objects} on this Renderer. @@ -381,7 +381,7 @@ public void setTexture(int unit, Texture tex) * Sets the default anisotropic filter level for textures. * *

If the - * {@link Texture#setAnisotropicFilter(int) texture anisotropic filter} is + * {@link GlTexture#setAnisotropicFilter(int) texture anisotropic filter} is * set to 0, then the default level is used. Otherwise, if the texture level * is 1 or greater, then the texture's value overrides the default value. * @@ -432,19 +432,19 @@ public void setTexture(int unit, Texture tex) public void setMainFrameBufferSrgb(boolean srgb); /** - * If enabled, all {@link Image images} with the - * {@link Image#setColorSpace(com.jme3.texture.image.ColorSpace) sRGB flag} + * If enabled, all {@link GlImage images} with the + * {@link GlImage#setColorSpace(com.jme3.texture.image.ColorSpace) sRGB flag} * set shall undergo an sRGB to linear RGB color conversion when read by a shader. * *

The conversion is performed for the following formats: - * - {@link com.jme3.texture.Image.Format#RGB8} - * - {@link com.jme3.texture.Image.Format#RGBA8} - * - {@link com.jme3.texture.Image.Format#Luminance8} - * - {@link com.jme3.texture.Image.Format#Luminance8Alpha8} - * - {@link com.jme3.texture.Image.Format#DXT1} - * - {@link com.jme3.texture.Image.Format#DXT1A} - * - {@link com.jme3.texture.Image.Format#DXT3} - * - {@link com.jme3.texture.Image.Format#DXT5} + * - {@link GlImage.Format#RGB8} + * - {@link GlImage.Format#RGBA8} + * - {@link GlImage.Format#Luminance8} + * - {@link GlImage.Format#Luminance8Alpha8} + * - {@link GlImage.Format#DXT1} + * - {@link GlImage.Format#DXT1A} + * - {@link GlImage.Format#DXT3} + * - {@link GlImage.Format#DXT5} * *

For all other formats, no conversion is performed. * diff --git a/jme3-core/src/main/java/com/jme3/renderer/Statistics.java b/jme3-core/src/main/java/com/jme3/renderer/Statistics.java index b2766df154..56a287a63c 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Statistics.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Statistics.java @@ -34,7 +34,7 @@ import com.jme3.scene.Mesh; import com.jme3.shader.Shader; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.util.IntMap; /** @@ -235,15 +235,15 @@ public void onUniformSet() { * @param image The image that was set * @param wasSwitched If true, the texture has required a state switch */ - public void onTextureUse(Image image, boolean wasSwitched) { - assert image.getId() >= 1; + public void onTextureUse(GlImage image, boolean wasSwitched) { + assert image.getNativeObject() >= 1; if (!enabled) { return; } - if (!texturesUsed.containsKey(image.getId())) { - texturesUsed.put(image.getId(), null); + if (!texturesUsed.containsKey(image.getNativeObject())) { + texturesUsed.put(image.getNativeObject(), null); } if (wasSwitched) { diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLImageFormats.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLImageFormats.java index c73943c54e..31955b927a 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLImageFormats.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLImageFormats.java @@ -32,8 +32,8 @@ package com.jme3.renderer.opengl; import com.jme3.renderer.Caps; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; import java.util.EnumSet; /** @@ -45,21 +45,21 @@ public final class GLImageFormats { private GLImageFormats() { } - private static void format(GLImageFormat[][] formatToGL, Image.Format format, + private static void format(GLImageFormat[][] formatToGL, GlImage.Format format, int glInternalFormat, int glFormat, int glDataType){ formatToGL[0][format.ordinal()] = new GLImageFormat(glInternalFormat, glFormat, glDataType); } - private static void formatSwiz(GLImageFormat[][] formatToGL, Image.Format format, + private static void formatSwiz(GLImageFormat[][] formatToGL, GlImage.Format format, int glInternalFormat, int glFormat, int glDataType){ formatToGL[0][format.ordinal()] = new GLImageFormat(glInternalFormat, glFormat, glDataType, false, true); } - private static void formatSrgb(GLImageFormat[][] formatToGL, Image.Format format, + private static void formatSrgb(GLImageFormat[][] formatToGL, GlImage.Format format, int glInternalFormat, int glFormat, int glDataType) @@ -67,7 +67,7 @@ private static void formatSrgb(GLImageFormat[][] formatToGL, Image.Format format formatToGL[1][format.ordinal()] = new GLImageFormat(glInternalFormat, glFormat, glDataType); } - private static void formatSrgbSwiz(GLImageFormat[][] formatToGL, Image.Format format, + private static void formatSrgbSwiz(GLImageFormat[][] formatToGL, GlImage.Format format, int glInternalFormat, int glFormat, int glDataType) @@ -75,14 +75,14 @@ private static void formatSrgbSwiz(GLImageFormat[][] formatToGL, Image.Format fo formatToGL[1][format.ordinal()] = new GLImageFormat(glInternalFormat, glFormat, glDataType, false, true); } - private static void formatComp(GLImageFormat[][] formatToGL, Image.Format format, + private static void formatComp(GLImageFormat[][] formatToGL, GlImage.Format format, int glCompressedFormat, int glFormat, int glDataType){ formatToGL[0][format.ordinal()] = new GLImageFormat(glCompressedFormat, glFormat, glDataType, true); } - private static void formatCompSrgb(GLImageFormat[][] formatToGL, Image.Format format, + private static void formatCompSrgb(GLImageFormat[][] formatToGL, GlImage.Format format, int glCompressedFormat, int glFormat, int glDataType) @@ -101,7 +101,7 @@ private static void formatCompSrgb(GLImageFormat[][] formatToGL, Image.Format fo * @return An 2D array containing supported texture formats. */ public static GLImageFormat[][] getFormatsForCaps(EnumSet caps) { - GLImageFormat[][] formatToGL = new GLImageFormat[2][Image.Format.values().length]; + GLImageFormat[][] formatToGL = new GLImageFormat[2][GlImage.Format.values().length]; int halfFloatFormat = GLExt.GL_HALF_FLOAT_ARB; if (caps.contains(Caps.OpenGLES20)) { diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index c2014477b2..06a5e93ae6 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -39,8 +39,8 @@ import com.jme3.math.*; import com.jme3.opencl.OpenCLObjectManager; import com.jme3.renderer.*; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh.Mode; +import com.jme3.scene.GlMesh; +import com.jme3.scene.GlMesh.Mode; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -56,11 +56,11 @@ import com.jme3.shader.bufferobject.DirtyRegionsIterator; import com.jme3.texture.FrameBuffer; import com.jme3.texture.FrameBuffer.RenderBuffer; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; -import com.jme3.texture.Texture.ShadowCompareMode; -import com.jme3.texture.Texture.WrapAxis; +import com.jme3.texture.GlTexture.ShadowCompareMode; +import com.jme3.texture.GlTexture.WrapAxis; import com.jme3.texture.TextureImage; import com.jme3.texture.image.LastTextureState; import com.jme3.util.BufferUtils; @@ -1977,8 +1977,8 @@ private int convertAttachmentSlot(int attachmentSlot) { } public void updateRenderTexture(FrameBuffer fb, RenderBuffer rb) { - Texture tex = rb.getTexture(); - Image image = tex.getImage(); + GlTexture tex = rb.getTexture(); + GlImage image = tex.getImage(); if (image.isUpdateNeeded()) { // Check NPOT requirements checkNonPowerOfTwo(tex); @@ -1995,12 +1995,12 @@ public void updateRenderTexture(FrameBuffer fb, RenderBuffer rb) { glfbo.glFramebufferTexture2DEXT(GLFbo.GL_FRAMEBUFFER_EXT, convertAttachmentSlot(rb.getSlot()), convertTextureType(tex.getType(), image.getMultiSamples(), rb.getFace()), - image.getId(), + image.getNativeObject(), rb.getLevel()); } else { glfbo.glFramebufferTextureLayerEXT(GLFbo.GL_FRAMEBUFFER_EXT, convertAttachmentSlot(rb.getSlot()), - image.getId(), + image.getNativeObject(), rb.getLevel(), rb.getLayer()); } @@ -2191,7 +2191,7 @@ public void setFrameBuffer(FrameBuffer fb) { if (context.boundFB != null && (context.boundFB.getMipMapsGenerationHint()!=null?context.boundFB.getMipMapsGenerationHint():generateMipmapsForFramebuffers)) { for (int i = 0; i < context.boundFB.getNumColorBuffers(); i++) { RenderBuffer rb = context.boundFB.getColorBuffer(i); - Texture tex = rb.getTexture(); + GlTexture tex = rb.getTexture(); if (tex != null && tex.getMinFilter().usesMipMapLevels()) { try { final int textureUnitIndex = 0; @@ -2199,7 +2199,7 @@ public void setFrameBuffer(FrameBuffer fb) { } catch (TextureUnitException exception) { throw new RuntimeException("Renderer lacks texture units?"); } - if (tex.getType() == Texture.Type.CubeMap) { + if (tex.getType() == GlTexture.Type.CubeMap) { glfbo.glGenerateMipmapEXT(GL.GL_TEXTURE_CUBE_MAP); } else { int textureType = convertTextureType(tex.getType(), tex.getImage().getMultiSamples(), rb.getFace()); @@ -2255,7 +2255,7 @@ private void readFrameBufferWithGLFormat(FrameBuffer fb, ByteBuffer byteBuf, int } @Override - public void readFrameBufferWithFormat(FrameBuffer fb, ByteBuffer byteBuf, Image.Format format) { + public void readFrameBufferWithFormat(FrameBuffer fb, ByteBuffer byteBuf, GlImage.Format format) { GLImageFormat glFormat = texUtil.getImageFormatWithError(format, false); readFrameBufferWithGLFormat(fb, byteBuf, glFormat.format, glFormat.dataType); } @@ -2291,7 +2291,7 @@ public void deleteFrameBuffer(FrameBuffer fb) { /*********************************************************************\ |* Textures *| \*********************************************************************/ - private int convertTextureType(Texture.Type type, int samples, int face) { + private int convertTextureType(GlTexture.Type type, int samples, int face) { if (samples > 1 && !caps.contains(Caps.TextureMultisample)) { throw new RendererException("Multisample textures are not supported" + " by the video hardware."); @@ -2333,7 +2333,7 @@ private int convertTextureType(Texture.Type type, int samples, int face) { } } - private int convertMagFilter(Texture.MagFilter filter) { + private int convertMagFilter(GlTexture.MagFilter filter) { switch (filter) { case Bilinear: return GL.GL_LINEAR; @@ -2344,7 +2344,7 @@ private int convertMagFilter(Texture.MagFilter filter) { } } - private int convertMinFilter(Texture.MinFilter filter, boolean haveMips) { + private int convertMinFilter(GlTexture.MinFilter filter, boolean haveMips) { if (haveMips){ switch (filter) { case Trilinear: @@ -2378,7 +2378,7 @@ private int convertMinFilter(Texture.MinFilter filter, boolean haveMips) { } } - private int convertWrapMode(Texture.WrapMode mode) { + private int convertWrapMode(GlTexture.WrapMode mode) { switch (mode) { case BorderClamp: case Clamp: @@ -2395,8 +2395,8 @@ private int convertWrapMode(Texture.WrapMode mode) { } @SuppressWarnings("fallthrough") - private void setupTextureParams(int unit, Texture tex) { - Image image = tex.getImage(); + private void setupTextureParams(int unit, GlTexture tex) { + GlImage image = tex.getImage(); int samples = image != null ? image.getMultiSamples() : 1; int target = convertTextureType(tex.getType(), samples, -1); @@ -2492,7 +2492,7 @@ private void setupTextureParams(int unit, Texture tex) { * @param tex The texture to validate. * @throws RendererException If the texture is not supported by the hardware */ - private void checkNonPowerOfTwo(Texture tex) { + private void checkNonPowerOfTwo(GlTexture tex) { if (!tex.getImage().isNPOT()) { // Texture is power-of-2, safe to use. return; @@ -2519,15 +2519,15 @@ private void checkNonPowerOfTwo(Texture tex) { switch (tex.getType()) { case CubeMap: case ThreeDimensional: - if (tex.getWrap(WrapAxis.R) != Texture.WrapMode.EdgeClamp) { + if (tex.getWrap(WrapAxis.R) != GlTexture.WrapMode.EdgeClamp) { throw new RendererException("repeating non-power-of-2 textures " + "are not supported by the video hardware"); } // fallthrough intentional!!! case TwoDimensionalArray: case TwoDimensional: - if (tex.getWrap(WrapAxis.S) != Texture.WrapMode.EdgeClamp - || tex.getWrap(WrapAxis.T) != Texture.WrapMode.EdgeClamp) { + if (tex.getWrap(WrapAxis.S) != GlTexture.WrapMode.EdgeClamp + || tex.getWrap(WrapAxis.T) != GlTexture.WrapMode.EdgeClamp) { throw new RendererException("repeating non-power-of-2 textures " + "are not supported by the video hardware"); } @@ -2545,13 +2545,13 @@ private void checkNonPowerOfTwo(Texture tex) { * @param img The image texture to bind * @param unit At what unit to bind the texture. */ - private void bindTextureAndUnit(int target, Image img, int unit) { + private void bindTextureAndUnit(int target, GlImage img, int unit) { if (context.boundTextureUnit != unit) { gl.glActiveTexture(GL.GL_TEXTURE0 + unit); context.boundTextureUnit = unit; } if (context.boundTextures[unit]==null||context.boundTextures[unit].get() != img.getWeakRef().get()) { - gl.glBindTexture(target, img.getId()); + gl.glBindTexture(target, img.getNativeObject()); context.boundTextures[unit] = img.getWeakRef(); statistics.onTextureUse(img, true); } else { @@ -2567,13 +2567,13 @@ private void bindTextureAndUnit(int target, Image img, int unit) { * @param img The image texture to bind * @param unit At what unit to bind the texture. */ - private void bindTextureOnly(int target, Image img, int unit) { + private void bindTextureOnly(int target, GlImage img, int unit) { if (context.boundTextures[unit] == null || context.boundTextures[unit].get() != img.getWeakRef().get()) { if (context.boundTextureUnit != unit) { gl.glActiveTexture(GL.GL_TEXTURE0 + unit); context.boundTextureUnit = unit; } - gl.glBindTexture(target, img.getId()); + gl.glBindTexture(target, img.getNativeObject()); context.boundTextures[unit] = img.getWeakRef(); statistics.onTextureUse(img, true); } else { @@ -2590,14 +2590,14 @@ private void bindTextureOnly(int target, Image img, int unit) { * @param scaleToPot If true, the image will be scaled to power-of-2 dimensions * before being uploaded. */ - public void updateTexImageData(Image img, Texture.Type type, int unit, boolean scaleToPot) { - int texId = img.getId(); + public void updateTexImageData(GlImage img, GlTexture.Type type, int unit, boolean scaleToPot) { + int texId = img.getNativeObject(); if (texId == -1) { // create texture gl.glGenTextures(intBuf1); texId = intBuf1.get(0); - img.setId(texId); - objManager.registerObject(img); + img.setId(this, texId); // setId automatically updates the native state + //objManager.registerObject(img); statistics.onNewTexture(); } @@ -2640,7 +2640,7 @@ public void updateTexImageData(Image img, Texture.Type type, int unit, boolean s throw new RendererException("Multisample textures do not support mipmaps"); } - if (img.getFormat().isDepthFormat()) { + if (img.getGlFormat().isDepthFormat()) { img.setMultiSamples(Math.min(limits.get(Limits.DepthTextureSamples), imageSamples)); } else { img.setMultiSamples(Math.min(limits.get(Limits.ColorTextureSamples), imageSamples)); @@ -2650,7 +2650,7 @@ public void updateTexImageData(Image img, Texture.Type type, int unit, boolean s } // Check if graphics card doesn't support depth textures - if (img.getFormat().isDepthFormat() && !caps.contains(Caps.DepthTexture)) { + if (img.getGlFormat().isDepthFormat() && !caps.contains(Caps.DepthTexture)) { throw new RendererException("Depth textures are not supported by the video hardware"); } @@ -2670,7 +2670,7 @@ public void updateTexImageData(Image img, Texture.Type type, int unit, boolean s } } - Image imageForUpload; + GlImage imageForUpload; if (scaleToPot) { imageForUpload = MipMapGenerator.resizeToPowerOf2(img); } else { @@ -2720,12 +2720,12 @@ public void updateTexImageData(Image img, Texture.Type type, int unit, boolean s } @Override - public void setTexture(int unit, Texture tex) throws TextureUnitException { + public void setTexture(int unit, GlTexture tex) throws TextureUnitException { if (unit < 0 || unit >= RenderContext.maxTextureUnits) { throw new TextureUnitException(); } - Image image = tex.getImage(); + GlImage image = tex.getImage(); if (image.isUpdateNeeded() || (image.isGeneratedMipmapsRequired() && !image.isMipmapsGenerated())) { // Check NPOT requirements boolean scaleToPot = false; @@ -2747,12 +2747,12 @@ public void setTexture(int unit, Texture tex) throws TextureUnitException { updateTexImageData(image, tex.getType(), unit, scaleToPot); } - int texId = image.getId(); + int texId = image.getNativeObject(); assert texId != -1; setupTextureParams(unit, tex); if (debug && caps.contains(Caps.GLDebug)) { - if (tex.getName() != null) glext.glObjectLabel(GL.GL_TEXTURE, tex.getImage().getId(), tex.getName()); + if (tex.getName() != null) glext.glObjectLabel(GL.GL_TEXTURE, tex.getImage().getNativeObject(), tex.getName()); } } @@ -2761,7 +2761,7 @@ public void setTextureImage(int unit, TextureImage tex) throws TextureUnitExcept if (unit < 0 || unit >= RenderContext.maxTextureUnits) { throw new TextureUnitException(); } - WeakReference ref = context.boundTextures[unit]; + WeakReference ref = context.boundTextures[unit]; boolean bindRequired = tex.clearUpdateNeeded() || ref == null || ref.get() != tex.getImage().getWeakRef().get(); setTexture(unit, tex.getTexture()); if (gl4 != null && bindRequired) { @@ -2811,7 +2811,7 @@ public void setShaderStorageBufferObject(int bindingPoint, BufferObject bufferOb */ @Deprecated @Override - public void modifyTexture(Texture tex, Image pixels, int x, int y) { + public void modifyTexture(GlTexture tex, GlImage pixels, int x, int y) { final int textureUnitIndex = 0; try { setTexture(textureUnitIndex, tex); @@ -2819,7 +2819,7 @@ public void modifyTexture(Texture tex, Image pixels, int x, int y) { throw new RuntimeException("Renderer lacks texture units?"); } - if(caps.contains(Caps.OpenGLES20) && pixels.getFormat()!=tex.getImage().getFormat()) { + if(caps.contains(Caps.OpenGLES20) && pixels.getGlFormat()!=tex.getImage().getGlFormat()) { logger.log(Level.WARNING, "Incompatible texture subimage"); } int target = convertTextureType(tex.getType(), pixels.getMultiSamples(), -1); @@ -2838,8 +2838,8 @@ public void modifyTexture(Texture tex, Image pixels, int x, int y) { * @param areaW Width of the area to copy * @param areaH Height of the area to copy */ - public void modifyTexture(Texture2D dest, Image src, int destX, int destY, - int srcX, int srcY, int areaW, int areaH) { + public void modifyTexture(Texture2D dest, GlImage src, int destX, int destY, + int srcX, int srcY, int areaW, int areaH) { final int textureUnitIndex = 0; try { setTexture(textureUnitIndex, dest); @@ -2847,7 +2847,7 @@ public void modifyTexture(Texture2D dest, Image src, int destX, int destY, throw new RuntimeException("Renderer lacks texture units?"); } - if(caps.contains(Caps.OpenGLES20) && src.getFormat()!=dest.getImage().getFormat()) { + if(caps.contains(Caps.OpenGLES20) && src.getGlFormat()!=dest.getImage().getGlFormat()) { logger.log(Level.WARNING, "Incompatible texture subimage"); } int target = convertTextureType(dest.getType(), src.getMultiSamples(), -1); @@ -2856,8 +2856,8 @@ public void modifyTexture(Texture2D dest, Image src, int destX, int destY, } @Override - public void deleteImage(Image image) { - int texId = image.getId(); + public void deleteImage(GlImage image) { + int texId = image.getNativeObject(); if (texId != -1) { intBuf1.put(0, texId); intBuf1.position(0).limit(1); @@ -3227,7 +3227,7 @@ public void setVertexAttrib(VertexBuffer vb) { setVertexAttrib(vb, null); } - public void drawTriangleArray(Mesh.Mode mode, int count, int vertCount) { + public void drawTriangleArray(GlMesh.Mode mode, int count, int vertCount) { boolean useInstancing = count > 1 && caps.contains(Caps.MeshInstancing); if (useInstancing) { glext.glDrawArraysInstancedARB(convertElementMode(mode), 0, @@ -3237,7 +3237,7 @@ public void drawTriangleArray(Mesh.Mode mode, int count, int vertCount) { } } - public void drawTriangleList(VertexBuffer indexBuf, Mesh mesh, int count) { + public void drawTriangleList(VertexBuffer indexBuf, GlMesh mesh, int count) { if (indexBuf.getBufferType() != VertexBuffer.Type.Index) { throw new IllegalArgumentException("Only index buffers are allowed as triangle lists."); } @@ -3340,7 +3340,7 @@ public void drawTriangleList(VertexBuffer indexBuf, Mesh mesh, int count) { * @param mode input enum value (not null) * @return the corresponding GL value */ - public int convertElementMode(Mesh.Mode mode) { + public int convertElementMode(GlMesh.Mode mode) { switch (mode) { case Points: return GL.GL_POINTS; @@ -3363,7 +3363,7 @@ public int convertElementMode(Mesh.Mode mode) { } } - public void updateVertexArray(Mesh mesh, VertexBuffer instanceData) { + public void updateVertexArray(GlMesh mesh, VertexBuffer instanceData) { int id = mesh.getId(); if (id == -1) { IntBuffer temp = intBuf1; @@ -3403,7 +3403,7 @@ public void updateVertexArray(Mesh mesh, VertexBuffer instanceData) { } } - private void renderMeshDefault(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { + private void renderMeshDefault(GlMesh mesh, int lod, int count, VertexBuffer[] instanceData) { // Here while count is still passed in. Can be removed when/if // the method is collapsed again. -pspeed @@ -3453,7 +3453,7 @@ private void renderMeshDefault(Mesh mesh, int lod, int count, VertexBuffer[] ins } @Override - public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { + public void renderMesh(GlMesh mesh, int lod, int count, VertexBuffer[] instanceData) { if (mesh.getVertexCount() == 0 || mesh.getTriangleCount() == 0 || count == 0) { return; } diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/TextureUtil.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/TextureUtil.java index 7064f7ce2e..786856e1d4 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/TextureUtil.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/TextureUtil.java @@ -33,8 +33,8 @@ import com.jme3.renderer.Caps; import com.jme3.renderer.RendererException; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.image.ColorSpace; import java.nio.ByteBuffer; import java.util.EnumSet; @@ -242,13 +242,13 @@ private void uploadTextureLevel(GLImageFormat format, int target, int level, int } } - public void uploadTexture(Image image, + public void uploadTexture(GlImage image, int target, int index, boolean linearizeSrgb) { boolean getSrgbFormat = image.getColorSpace() == ColorSpace.sRGB && linearizeSrgb; - Image.Format jmeFormat = image.getFormat(); + GlImage.Format jmeFormat = image.getGlFormat(); GLImageFormat oglFormat = getImageFormatWithError(jmeFormat, getSrgbFormat); ByteBuffer data = null; @@ -304,7 +304,7 @@ public void uploadTexture(Image image, * @deprecated Use uploadSubTexture(int target, Image src, int index,int targetX, int targetY,int srcX,int srcY, int areaWidth,int areaHeight, boolean linearizeSrgb) */ @Deprecated - public void uploadSubTexture(Image image, int target, int index, int x, int y, boolean linearizeSrgb) { + public void uploadSubTexture(GlImage image, int target, int index, int x, int y, boolean linearizeSrgb) { if (target != GL.GL_TEXTURE_2D || image.getDepth() > 1) { throw new UnsupportedOperationException("Updating non-2D texture is not supported"); } @@ -317,7 +317,7 @@ public void uploadSubTexture(Image image, int target, int index, int x, int y, b throw new UnsupportedOperationException("Updating multisampled images is not supported"); } - Image.Format jmeFormat = image.getFormat(); + GlImage.Format jmeFormat = image.getGlFormat(); if (jmeFormat.isCompressed()) { throw new UnsupportedOperationException("Updating compressed images is not supported"); @@ -345,7 +345,7 @@ public void uploadSubTexture(Image image, int target, int index, int x, int y, b oglFormat.format, oglFormat.dataType, data); } - public void uploadSubTexture(int target, Image src, int index, int targetX, int targetY, int areaX, int areaY, int areaWidth, int areaHeight, boolean linearizeSrgb) { + public void uploadSubTexture(int target, GlImage src, int index, int targetX, int targetY, int areaX, int areaY, int areaWidth, int areaHeight, boolean linearizeSrgb) { if (target != GL.GL_TEXTURE_2D || src.getDepth() > 1) { throw new UnsupportedOperationException("Updating non-2D texture is not supported"); } @@ -358,7 +358,7 @@ public void uploadSubTexture(int target, Image src, int index, int targetX, int throw new UnsupportedOperationException("Updating multisampled images is not supported"); } - Image.Format jmeFormat = src.getFormat(); + GlImage.Format jmeFormat = src.getGlFormat(); if (jmeFormat.isCompressed()) { throw new UnsupportedOperationException("Updating compressed images is not supported"); @@ -375,7 +375,7 @@ public void uploadSubTexture(int target, Image src, int index, int targetX, int throw new IndexOutOfBoundsException("The image index " + index + " is not valid for the given image"); } - int Bpp = src.getFormat().getBitsPerPixel() / 8; + int Bpp = src.getGlFormat().getBitsPerPixel() / 8; int srcWidth = src.getWidth(); int cpos = data.position(); diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java index 0e7a8331f6..cd12be2717 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java +++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java @@ -42,6 +42,7 @@ import com.jme3.material.Material; import com.jme3.math.Matrix4f; import com.jme3.renderer.Camera; +import com.jme3.renderer.Renderer; import com.jme3.scene.mesh.MorphTarget; import com.jme3.util.TempVars; import com.jme3.util.clone.Cloner; @@ -169,8 +170,11 @@ public void updateTransformMaterial(Camera cam) { public void draw(CommandBuffer cmd, Pipeline pipeline) { transforms.bind(cmd, pipeline); material.bind(cmd, pipeline, transforms.getSets().size()); - mesh.bind(cmd); - mesh.draw(cmd); + mesh.draw(cmd, this); + } + + public void draw(Renderer renderer) { + mesh.draw(renderer, this, 1, null); } @Override @@ -202,7 +206,7 @@ public void setIgnoreTransform(boolean ignoreTransform) { * Sets the LOD level to use when rendering the mesh of this geometry. * Level 0 indicates that the default index buffer should be used, * levels [1, LodLevels + 1] represent the levels set on the mesh - * with {@link OldMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. + * with {@link GlMesh#setLodLevels(com.jme3.scene.VertexBuffer[]) }. * * @param lod The lod level to set */ diff --git a/jme3-core/src/main/java/com/jme3/scene/OldMesh.java b/jme3-core/src/main/java/com/jme3/scene/GlMesh.java similarity index 98% rename from jme3-core/src/main/java/com/jme3/scene/OldMesh.java rename to jme3-core/src/main/java/com/jme3/scene/GlMesh.java index e949a606dd..205e057f3d 100644 --- a/jme3-core/src/main/java/com/jme3/scene/OldMesh.java +++ b/jme3-core/src/main/java/com/jme3/scene/GlMesh.java @@ -41,6 +41,7 @@ import com.jme3.material.Material; import com.jme3.material.RenderState; import com.jme3.math.*; +import com.jme3.renderer.Renderer; import com.jme3.scene.VertexBuffer.*; import com.jme3.scene.mesh.*; import com.jme3.util.*; @@ -68,8 +69,7 @@ * * @author Kirill Vainer */ -@Deprecated -public class OldMesh implements Mesh, Savable, Cloneable, JmeCloneable { +public class GlMesh implements Mesh, Savable, Cloneable, JmeCloneable { @Override public int collideWith(Collidable other, CollisionResults results) throws UnsupportedCollisionException { @@ -129,8 +129,8 @@ public enum Mode { /** * A combination of various triangle modes. It is best to avoid * using this mode as it may not be supported by all renderers. - * The {@link OldMesh#setModeStart(int[]) mode start points} and - * {@link OldMesh#setElementLengths(int[]) element lengths} must + * The {@link GlMesh#setModeStart(int[]) mode start points} and + * {@link GlMesh#setElementLengths(int[]) element lengths} must * be specified for this mode. */ Hybrid(false), @@ -208,7 +208,7 @@ public boolean isListMode() { /** * Creates a new mesh with no {@link VertexBuffer vertex buffers}. */ - public OldMesh() { + public GlMesh() { } /** @@ -219,9 +219,9 @@ public OldMesh() { * @return A shallow clone of the mesh */ @Override - public OldMesh clone() { + public GlMesh clone() { try { - OldMesh clone = (OldMesh) super.clone(); + GlMesh clone = (GlMesh) super.clone(); clone.meshBound = meshBound.clone(); clone.collisionTree = collisionTree != null ? collisionTree : null; clone.buffers = buffers.clone(); @@ -246,9 +246,9 @@ public OldMesh clone() { * * @return a deep clone of this mesh. */ - public OldMesh deepClone() { + public GlMesh deepClone() { try { - OldMesh clone = (OldMesh) super.clone(); + GlMesh clone = (GlMesh) super.clone(); clone.meshBound = meshBound != null ? meshBound.clone() : null; // TODO: Collision tree cloning @@ -289,8 +289,8 @@ public OldMesh deepClone() { * * @return A clone of the mesh for animation use. */ - public OldMesh cloneForAnim() { - OldMesh clone = clone(); + public GlMesh cloneForAnim() { + GlMesh clone = clone(); if (getBuffer(Type.BindPosePosition) != null) { VertexBuffer oldPos = getBuffer(Type.Position); @@ -320,9 +320,9 @@ public OldMesh cloneForAnim() { * Called internally by com.jme3.util.clone.Cloner. Do not call directly. */ @Override - public OldMesh jmeClone() { + public GlMesh jmeClone() { try { - OldMesh clone = (OldMesh) super.clone(); + GlMesh clone = (GlMesh) super.clone(); clone.vertexArrayID = DEFAULT_VERTEX_ARRAY_ID; return clone; } catch (CloneNotSupportedException ex) { @@ -596,7 +596,7 @@ public void setModeStart(int[] modeStart) { * * @return the mesh mode * - * @see #setMode(OldMesh.Mode) + * @see #setMode(GlMesh.Mode) */ public Mode getMode() { return mode; @@ -665,7 +665,7 @@ public float getLineWidth() { * the default value is 1.0. * * @param lineWidth The line width - * @deprecated use {@link Material#getAdditionalRenderState()} + * @deprecated use {@link GlMesh#getAdditionalRenderState()} * and {@link RenderState#setLineWidth(float)} */ @Deprecated @@ -900,13 +900,13 @@ public int collideWith(Collidable other, Geometry geometry, CollisionResults res } @Override - public void bind(CommandBuffer cmd) { + public void draw(CommandBuffer cmd, Geometry geometry) { } @Override - public void draw(CommandBuffer cmd) { - + public void draw(Renderer renderer, Geometry geometry, int instances, VertexBuffer[] instanceData) { + renderer.renderMesh(this, geometry.getLodLevel(), instances, instanceData); } @Override @@ -1288,7 +1288,7 @@ public IndexBuffer getIndexBuffer() { * * @param other The mesh to extract the vertex data from */ - public void extractVertexData(OldMesh other) { + public void extractVertexData(GlMesh other) { // Determine the number of unique vertices need to // be created. Also determine the mappings // between old indices to new indices (since we avoid duplicating diff --git a/jme3-core/src/main/java/com/jme3/scene/Mesh.java b/jme3-core/src/main/java/com/jme3/scene/Mesh.java index 4b527abb01..fc653904fb 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Mesh.java +++ b/jme3-core/src/main/java/com/jme3/scene/Mesh.java @@ -37,6 +37,7 @@ import com.jme3.export.*; import com.jme3.material.Material; import com.jme3.material.RenderState; +import com.jme3.renderer.Renderer; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.mesh.AttributeModifier; import com.jme3.vulkan.mesh.BuiltInAttribute; @@ -57,9 +58,9 @@ */ public interface Mesh extends Collidable, Savable { - void bind(CommandBuffer cmd); + void draw(CommandBuffer cmd, Geometry geometry); - void draw(CommandBuffer cmd); + void draw(Renderer renderer, Geometry geometry, int instances, VertexBuffer[] instanceData); AttributeModifier modifyAttribute(String name); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java index 9d9a431fe6..30e8180683 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Arrow.java @@ -33,8 +33,7 @@ import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import java.nio.FloatBuffer; @@ -46,7 +45,7 @@ * * @author Kirill Vainer */ -public class Arrow extends OldMesh { +public class Arrow extends GlMesh { private final Quaternion tempQuat = new Quaternion(); private final Vector3f tempVec = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java index 704343ca03..1135274364 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/Grid.java @@ -31,7 +31,7 @@ */ package com.jme3.scene.debug; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; @@ -43,7 +43,7 @@ * * @author Kirill Vainer */ -public class Grid extends OldMesh { +public class Grid extends GlMesh { public Grid() { } diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java index 9a379e2842..5d0635a4fc 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java @@ -41,8 +41,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -56,7 +55,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class SkeletonInterBoneWire extends OldMesh { +public class SkeletonInterBoneWire extends GlMesh { private static final int POINT_AMOUNT = 10; /** The amount of connections between bones. */ private int connectionsAmount; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java index 9ac491493b..50489df30e 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonPoints.java @@ -38,8 +38,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -54,7 +53,7 @@ /** * The class that displays either heads of the bones if no length data is supplied or both heads and tails otherwise. */ -public class SkeletonPoints extends OldMesh { +public class SkeletonPoints extends GlMesh { /** The skeleton to be displayed. */ private Skeleton skeleton; /** The map between the bone index and its length. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java index 94f7eb3132..caf30968ba 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonWire.java @@ -42,8 +42,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -56,7 +55,7 @@ * The class that displays either wires between the bones' heads if no length data is supplied and * full bones' shapes otherwise. */ -public class SkeletonWire extends OldMesh { +public class SkeletonWire extends GlMesh { /** The number of bones' connections. Used in non-length mode. */ private int numConnections; /** The skeleton to be displayed. */ diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java index 040b3beb09..5810278bec 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireBox.java @@ -34,8 +34,7 @@ import com.jme3.bounding.BoundingBox; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -43,7 +42,7 @@ import com.jme3.util.BufferUtils; import java.nio.FloatBuffer; -public class WireBox extends OldMesh { +public class WireBox extends GlMesh { public WireBox() { this(1,1,1); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java index 78978312c1..b2e8ee743c 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireFrustum.java @@ -35,7 +35,7 @@ import com.jme3.renderer.Camera; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; @@ -53,7 +53,7 @@ * and four for the far plane. These points are connected by lines * to form a wireframe cube-like structure. */ -public class WireFrustum extends OldMesh { +public class WireFrustum extends GlMesh { /** * For Serialization only. Do not use. diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java index b76979c79c..3aeeceb567 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/WireSphere.java @@ -35,8 +35,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; @@ -46,7 +45,7 @@ import java.nio.FloatBuffer; import java.nio.ShortBuffer; -public class WireSphere extends OldMesh { +public class WireSphere extends GlMesh { private static final int samples = 30; private static final int zSamples = 10; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureDebugger.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureDebugger.java index d7973eabc1..0ec2768050 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureDebugger.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureDebugger.java @@ -43,7 +43,7 @@ import com.jme3.renderer.queue.RenderQueue; import com.jme3.scene.Geometry; import com.jme3.scene.Node; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.util.List; @@ -126,7 +126,7 @@ public void initialize(AssetManager assetManager, Camera camera) { armatureNode.setCamera(camera); Material matJoints = new Material(assetManager, "Common/MatDefs/Misc/Billboard.j3md"); - Texture t = assetManager.loadTexture("Common/Textures/dot.png"); + GlTexture t = assetManager.loadTexture("Common/Textures/dot.png"); matJoints.setTexture("Texture", t); matJoints.getAdditionalRenderState().setDepthTest(false); matJoints.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java index 25be2e8866..c786f9e2a9 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureInterJointsWire.java @@ -34,8 +34,7 @@ import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; @@ -46,7 +45,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class ArmatureInterJointsWire extends OldMesh { +public class ArmatureInterJointsWire extends GlMesh { private final Vector3f tmp = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java index 595fc2bb18..4246e348fe 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/custom/JointShape.java @@ -32,11 +32,10 @@ package com.jme3.scene.debug.custom; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; -public class JointShape extends OldMesh { +public class JointShape extends GlMesh { /** * Serialization only. Do not use. diff --git a/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedGeometry.java b/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedGeometry.java index e0a673838f..c6f6c53827 100644 --- a/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedGeometry.java +++ b/jme3-core/src/main/java/com/jme3/scene/instancing/InstancedGeometry.java @@ -45,6 +45,7 @@ import com.jme3.math.Quaternion; import com.jme3.renderer.Camera; import com.jme3.renderer.Camera.FrustumIntersect; +import com.jme3.renderer.Renderer; import com.jme3.scene.Geometry; import com.jme3.scene.Spatial; import com.jme3.scene.VertexBuffer; @@ -54,6 +55,9 @@ import com.jme3.util.BufferUtils; import com.jme3.util.TempVars; import com.jme3.util.clone.Cloner; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.pipelines.Pipeline; + import java.io.IOException; import java.nio.FloatBuffer; import java.util.ArrayList; @@ -114,6 +118,20 @@ public static BiFunction getInstanceCullingFunction() return instanceCullingFunction; } + @Override + public void draw(CommandBuffer cmd, Pipeline pipeline) { + super.draw(cmd, pipeline); + // todo: implement correctly + } + + @Override + public void draw(Renderer renderer) { + int instances = getNumVisibleInstances(); + if (instances > 0) { + mesh.draw(renderer, this, instances, getAllInstanceData()); + } + } + /** * Global user specified per-instance data. * diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java index ae5cfbd170..4c483247eb 100644 --- a/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/mesh/VirtualIndexBuffer.java @@ -31,23 +31,23 @@ */ package com.jme3.scene.mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Format; import java.nio.Buffer; /** * IndexBuffer implementation that generates vertex indices sequentially - * based on a specific Mesh {@link OldMesh.Mode}. + * based on a specific Mesh {@link GlMesh.Mode}. * The generated indices are as if the mesh is in the given mode * but contains no index buffer, thus this implementation will * return the indices if the index buffer was there and contained sequential * triangles. * Example: *

    - *
  • {@link OldMesh.Mode#Triangles}: 0, 1, 2 | 3, 4, 5 | 6, 7, 8 | ...
  • - *
  • {@link OldMesh.Mode#TriangleStrip}: 0, 1, 2 | 2, 1, 3 | 2, 3, 4 | ...
  • - *
  • {@link OldMesh.Mode#TriangleFan}: 0, 1, 2 | 0, 2, 3 | 0, 3, 4 | ...
  • + *
  • {@link GlMesh.Mode#Triangles}: 0, 1, 2 | 3, 4, 5 | 6, 7, 8 | ...
  • + *
  • {@link GlMesh.Mode#TriangleStrip}: 0, 1, 2 | 2, 1, 3 | 2, 3, 4 | ...
  • + *
  • {@link GlMesh.Mode#TriangleFan}: 0, 1, 2 | 0, 2, 3 | 0, 3, 4 | ...
  • *
* * @author Kirill Vainer @@ -56,10 +56,10 @@ public class VirtualIndexBuffer extends IndexBuffer { protected int numVerts = 0; protected int numIndices = 0; - protected OldMesh.Mode meshMode; + protected GlMesh.Mode meshMode; protected int position = 0; - public VirtualIndexBuffer(int numVerts, OldMesh.Mode meshMode) { + public VirtualIndexBuffer(int numVerts, GlMesh.Mode meshMode) { this.numVerts = numVerts; this.meshMode = meshMode; switch (meshMode) { @@ -108,13 +108,13 @@ public int remaining() { @Override public int get(int i) { - if (meshMode == OldMesh.Mode.Triangles || meshMode == OldMesh.Mode.Lines || meshMode == OldMesh.Mode.Points) { + if (meshMode == GlMesh.Mode.Triangles || meshMode == GlMesh.Mode.Lines || meshMode == GlMesh.Mode.Points) { return i; - } else if (meshMode == OldMesh.Mode.LineStrip) { + } else if (meshMode == GlMesh.Mode.LineStrip) { return (i + 1) / 2; - } else if (meshMode == OldMesh.Mode.LineLoop) { + } else if (meshMode == GlMesh.Mode.LineLoop) { return (i == (numIndices - 1)) ? 0 : ((i + 1) / 2); - } else if (meshMode == OldMesh.Mode.TriangleStrip) { + } else if (meshMode == GlMesh.Mode.TriangleStrip) { int triIndex = i / 3; int vertIndex = i % 3; boolean isBack = (i / 3) % 2 == 1; @@ -132,7 +132,7 @@ public int get(int i) { throw new AssertionError(); } } - } else if (meshMode == OldMesh.Mode.TriangleFan) { + } else if (meshMode == GlMesh.Mode.TriangleFan) { int vertIndex = i % 3; if (vertIndex == 0) { return 0; diff --git a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java index de7f529796..ac1ee222d3 100644 --- a/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java +++ b/jme3-core/src/main/java/com/jme3/scene/mesh/WrappedIndexBuffer.java @@ -32,7 +32,7 @@ package com.jme3.scene.mesh; import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh.Mode; +import com.jme3.scene.GlMesh.Mode; import com.jme3.scene.VertexBuffer.Type; import java.nio.Buffer; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java index c7e6893100..1092512b67 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/AbstractBox.java @@ -33,8 +33,7 @@ import com.jme3.export.*; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import java.io.IOException; @@ -51,7 +50,7 @@ * @author Ian Phillips * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $ */ -public abstract class AbstractBox extends OldMesh { +public abstract class AbstractBox extends GlMesh { public final Vector3f center = new Vector3f(0f, 0f, 0f); diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java index 54f2b353b9..af5634df22 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/CenterQuad.java @@ -35,8 +35,7 @@ import com.jme3.export.JmeExporter; import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; import java.io.IOException; @@ -52,7 +51,7 @@ * * @author Kirill Vainer */ -public class CenterQuad extends OldMesh { +public class CenterQuad extends GlMesh { private float width; private float height; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java index a020ef8001..150a1a91e2 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java @@ -34,7 +34,7 @@ import com.jme3.math.Spline; import com.jme3.math.Vector3f; import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import java.util.Iterator; import java.util.List; @@ -48,7 +48,7 @@ * * @author Nehon */ -public class Curve extends OldMesh { +public class Curve extends GlMesh { private Spline spline; private Vector3f temp = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java index 1a142f19cd..6b8908ae20 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Cylinder.java @@ -38,8 +38,7 @@ import com.jme3.export.OutputCapsule; import com.jme3.math.FastMath; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import java.io.IOException; @@ -51,7 +50,7 @@ * @author Mark Powell * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $ */ -public class Cylinder extends OldMesh { +public class Cylinder extends GlMesh { private int axisSamples; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java index 87da2872fa..3e2c3bd1c5 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Dome.java @@ -38,8 +38,7 @@ import com.jme3.export.OutputCapsule; import com.jme3.math.FastMath; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import com.jme3.util.TempVars; @@ -54,7 +53,7 @@ * @author Joshua Slack (Original sphere code that was adapted) * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $ */ -public class Dome extends OldMesh { +public class Dome extends GlMesh { private int planes; private int radialSamples; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java index 03ae1e101c..465a9a9666 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Line.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Line.java @@ -36,8 +36,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import java.io.IOException; @@ -48,7 +47,7 @@ * * @author Brent Owens */ -public class Line extends OldMesh { +public class Line extends GlMesh { private Vector3f start = new Vector3f(); private Vector3f end = new Vector3f(); diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java index 6640641835..39243e05b3 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/PQTorus.java @@ -38,8 +38,7 @@ import com.jme3.export.OutputCapsule; import com.jme3.math.FastMath; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; import static com.jme3.util.BufferUtils.*; import java.io.IOException; @@ -52,7 +51,7 @@ * @author Joshua Slack, Eric Woroshow * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $ */ -public class PQTorus extends OldMesh { +public class PQTorus extends GlMesh { private float p, q; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java index c813baed11..be6defcb81 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Quad.java @@ -36,8 +36,7 @@ import com.jme3.export.JmeExporter; import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; import java.io.IOException; @@ -49,7 +48,7 @@ * * @author Kirill Vainer */ -public class Quad extends OldMesh { +public class Quad extends GlMesh { private float width; private float height; diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java index c71eeca9f5..778b6c6143 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/RectangleMesh.java @@ -40,8 +40,7 @@ import com.jme3.math.Rectangle; import com.jme3.math.Vector2f; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import com.jme3.util.clone.Cloner; @@ -72,7 +71,7 @@ * * @author Francivan Bezerra */ -public class RectangleMesh extends OldMesh { +public class RectangleMesh extends GlMesh { /** * Used to locate the vertices and calculate a default normal. diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java index 652daffa6f..3356820095 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Sphere.java @@ -38,8 +38,7 @@ import com.jme3.export.OutputCapsule; import com.jme3.math.FastMath; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import com.jme3.util.TempVars; @@ -54,7 +53,7 @@ * @author Joshua Slack * @version $Revision: 4163 $, $Date: 2009-03-24 21:14:55 -0400 (Tue, 24 Mar 2009) $ */ -public class Sphere extends OldMesh { +public class Sphere extends GlMesh { public enum TextureMode { diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java index d1b1354b92..f7e64c533d 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Surface.java @@ -40,8 +40,7 @@ import com.jme3.math.Spline.SplineType; import com.jme3.math.Vector3f; import com.jme3.math.Vector4f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.util.BufferUtils; import java.io.IOException; @@ -57,7 +56,7 @@ * a) NURBS * @author Marcin Roguski (Kealthas) */ -public class Surface extends OldMesh { +public class Surface extends GlMesh { private SplineType type; // the type of the surface private List> controlPoints; // space control points and their weights private List[] knots; // knots of the surface diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java index 8a59014d92..2b445feb4d 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Torus.java @@ -37,8 +37,7 @@ import com.jme3.export.OutputCapsule; import com.jme3.math.FastMath; import com.jme3.math.Vector3f; -import com.jme3.scene.Mesh; -import com.jme3.scene.OldMesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer.Type; import com.jme3.util.BufferUtils; import java.io.IOException; @@ -53,7 +52,7 @@ * @author Mark Powell * @version $Revision: 4131 $, $Date: 2009-03-19 16:15:28 -0400 (Thu, 19 Mar 2009) $ */ -public class Torus extends OldMesh { +public class Torus extends GlMesh { private int circleSamples; diff --git a/jme3-core/src/main/java/com/jme3/shader/Uniform.java b/jme3-core/src/main/java/com/jme3/shader/Uniform.java index 559c972ff3..ff9ef0351c 100644 --- a/jme3-core/src/main/java/com/jme3/shader/Uniform.java +++ b/jme3-core/src/main/java/com/jme3/shader/Uniform.java @@ -31,7 +31,7 @@ */ package com.jme3.shader; -import com.jme3.material.OldMaterial.BindUnits; +import com.jme3.material.GlMaterial.BindUnits; import com.jme3.math.*; import com.jme3.util.BufferUtils; import com.jme3.util.TempVars; diff --git a/jme3-core/src/main/java/com/jme3/shader/VarType.java b/jme3-core/src/main/java/com/jme3/shader/VarType.java index ebf7edc64c..4d847358ab 100644 --- a/jme3-core/src/main/java/com/jme3/shader/VarType.java +++ b/jme3-core/src/main/java/com/jme3/shader/VarType.java @@ -38,7 +38,7 @@ import com.jme3.math.Vector3f; import com.jme3.math.Vector4f; import com.jme3.shader.bufferobject.BufferObject; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.texture.Texture3D; import com.jme3.texture.TextureArray; @@ -68,10 +68,10 @@ public enum VarType { Matrix4Array(true, false, "mat4", Matrix4f[].class), TextureBuffer(false, true, "sampler1D|sampler1DShadow"), - Texture2D(false, true, "sampler2D|sampler2DShadow", Texture2D.class, Texture.class), - Texture3D(false, true, "sampler3D", Texture3D.class, Texture.class), - TextureArray(false, true, "sampler2DArray|sampler2DArrayShadow", TextureArray.class, Texture.class), - TextureCubeMap(false, true, "samplerCube", TextureCubeMap.class, Texture.class), + Texture2D(false, true, "sampler2D|sampler2DShadow", Texture2D.class, GlTexture.class), + Texture3D(false, true, "sampler3D", Texture3D.class, GlTexture.class), + TextureArray(false, true, "sampler2DArray|sampler2DArrayShadow", TextureArray.class, GlTexture.class), + TextureCubeMap(false, true, "samplerCube", TextureCubeMap.class, GlTexture.class), Image2D(false, false, true, "image2D", TextureImage.class), Image3D(false, false, true, "image3D", TextureImage.class), diff --git a/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java b/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java index 6629131027..88a9fdea42 100644 --- a/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java +++ b/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java @@ -37,7 +37,6 @@ import com.jme3.light.NullLightFilter; import com.jme3.material.Material; import com.jme3.material.RenderState; -import com.jme3.math.ColorRGBA; import com.jme3.math.Matrix4f; import com.jme3.math.Vector2f; import com.jme3.math.Vector3f; @@ -55,10 +54,10 @@ import com.jme3.scene.Spatial; import com.jme3.scene.debug.WireFrustum; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; -import com.jme3.texture.Texture.ShadowCompareMode; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; +import com.jme3.texture.GlTexture.ShadowCompareMode; import com.jme3.texture.Texture2D; import com.jme3.texture.FrameBuffer.FrameBufferTarget; import com.jme3.ui.Picture; diff --git a/jme3-core/src/main/java/com/jme3/shadow/BasicShadowRenderer.java b/jme3-core/src/main/java/com/jme3/shadow/BasicShadowRenderer.java index 3f41721b3c..a8d68052f3 100644 --- a/jme3-core/src/main/java/com/jme3/shadow/BasicShadowRenderer.java +++ b/jme3-core/src/main/java/com/jme3/shadow/BasicShadowRenderer.java @@ -48,7 +48,7 @@ import com.jme3.renderer.queue.RenderQueue.ShadowMode; import com.jme3.scene.Spatial; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.Texture2D; import com.jme3.ui.Picture; diff --git a/jme3-core/src/main/java/com/jme3/shadow/PssmShadowRenderer.java b/jme3-core/src/main/java/com/jme3/shadow/PssmShadowRenderer.java index a0d405000b..95e388c7c0 100644 --- a/jme3-core/src/main/java/com/jme3/shadow/PssmShadowRenderer.java +++ b/jme3-core/src/main/java/com/jme3/shadow/PssmShadowRenderer.java @@ -54,10 +54,10 @@ import com.jme3.scene.Spatial; import com.jme3.scene.debug.WireFrustum; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; -import com.jme3.texture.Texture.ShadowCompareMode; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; +import com.jme3.texture.GlTexture.ShadowCompareMode; import com.jme3.texture.Texture2D; import com.jme3.ui.Picture; import java.util.ArrayList; diff --git a/jme3-core/src/main/java/com/jme3/system/JmeSystem.java b/jme3-core/src/main/java/com/jme3/system/JmeSystem.java index 4a832916c8..e257e9d091 100644 --- a/jme3-core/src/main/java/com/jme3/system/JmeSystem.java +++ b/jme3-core/src/main/java/com/jme3/system/JmeSystem.java @@ -34,6 +34,7 @@ import com.jme3.asset.AssetManager; import com.jme3.audio.AudioRenderer; import com.jme3.input.SoftTextDialogInput; +import com.jme3.texture.GlImage; import java.io.File; import java.io.IOException; @@ -137,7 +138,7 @@ public static SoftTextDialogInput getSoftTextDialogInput() { * * @param outStream The stream where to write the image data. * @param format The format to use, either "png" or "jpg". - * @param imageData The image data in {@link com.jme3.texture.Image.Format#RGBA8} format. + * @param imageData The image data in {@link GlImage.Format#RGBA8} format. * @param width The width of the image. * @param height The height of the image. * @throws IOException If outStream throws an exception while writing. diff --git a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java index 28eb6b5231..38bf8b2982 100644 --- a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java +++ b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java @@ -40,14 +40,14 @@ import com.jme3.renderer.Renderer; import com.jme3.renderer.Statistics; import com.jme3.renderer.TextureUnitException; -import com.jme3.scene.Mesh; +import com.jme3.scene.GlMesh; import com.jme3.scene.VertexBuffer; import com.jme3.shader.Shader; import com.jme3.shader.Shader.ShaderSource; import com.jme3.shader.bufferobject.BufferObject; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.TextureImage; import java.nio.ByteBuffer; @@ -168,7 +168,7 @@ public void deleteFrameBuffer(FrameBuffer fb) { } @Override - public void setTexture(int unit, Texture tex) throws TextureUnitException { + public void setTexture(int unit, GlTexture tex) throws TextureUnitException { // do nothing } @@ -178,7 +178,7 @@ public void setTextureImage(int unit, TextureImage tex) throws TextureUnitExcept } @Override - public void modifyTexture(Texture tex, Image pixels, int x, int y) { + public void modifyTexture(GlTexture tex, GlImage pixels, int x, int y) { } @Override @@ -195,7 +195,7 @@ public void deleteBuffer(BufferObject bo) { } @Override - public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) { + public void renderMesh(GlMesh mesh, int lod, int count, VertexBuffer[] instanceData) { } @Override @@ -207,7 +207,7 @@ public void cleanup() { } @Override - public void deleteImage(Image image) { + public void deleteImage(GlImage image) { } @Override @@ -248,7 +248,7 @@ public boolean isTaskResultAvailable(int taskId) { } @Override - public void readFrameBufferWithFormat(FrameBuffer fb, ByteBuffer byteBuf, Image.Format format) { + public void readFrameBufferWithFormat(FrameBuffer fb, ByteBuffer byteBuf, GlImage.Format format) { } @Override @@ -302,6 +302,7 @@ public FrameBuffer getCurrentFrameBuffer() { return null; } + @Override public void updateShaderStorageBufferObjectData(BufferObject bo) { } diff --git a/jme3-core/src/main/java/com/jme3/texture/FrameBuffer.java b/jme3-core/src/main/java/com/jme3/texture/FrameBuffer.java index f3cc721df9..e41d228b70 100644 --- a/jme3-core/src/main/java/com/jme3/texture/FrameBuffer.java +++ b/jme3-core/src/main/java/com/jme3/texture/FrameBuffer.java @@ -33,7 +33,7 @@ import com.jme3.renderer.Caps; import com.jme3.renderer.Renderer; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.util.NativeObject; import java.util.ArrayList; @@ -45,7 +45,7 @@ * FrameBuffer, the result can be either a texture or a buffer. *

* A FrameBuffer supports two methods of rendering, - * using a {@link Texture} or using a buffer. + * using a {@link GlTexture} or using a buffer. * When using a texture, the result of the rendering will be rendered * onto the texture, after which the texture can be placed on an object * and rendered as if the texture was uploaded from disk. @@ -94,8 +94,8 @@ public class FrameBuffer extends NativeObject { */ public static class RenderBuffer { - Texture tex; - Image.Format format; + GlTexture tex; + GlImage.Format format; int id = -1; int slot = SLOT_UNDEF; int face = -1; @@ -118,7 +118,7 @@ public Format getFormat() { * @return The texture to render to for this RenderBuffer * or null if content should be rendered into a buffer. */ - public Texture getTexture() { + public GlTexture getTexture() { return tex; } @@ -182,9 +182,9 @@ public int getLayer() { public static class FrameBufferTextureTarget extends RenderBuffer { private FrameBufferTextureTarget(){} - void setTexture(Texture tx){ + void setTexture(GlTexture tx){ this.tex=tx; - this.format=tx.getImage().getFormat(); + this.format=tx.getImage().getGlFormat(); } void setFormat(Format f){ @@ -221,7 +221,7 @@ void setFormat(Format f){ public static class FrameBufferTarget { private FrameBufferTarget(){} - public static FrameBufferTextureTarget newTarget(Texture tx){ + public static FrameBufferTextureTarget newTarget(GlTexture tx){ FrameBufferTextureTarget t=new FrameBufferTextureTarget(); t.setTexture(tx); return t; @@ -241,7 +241,7 @@ public static FrameBufferBufferTarget newTarget(Format format){ * @param face face to add to the color buffer to * @return FrameBufferTexture Target */ - public static FrameBufferTextureTarget newTarget(Texture tx, TextureCubeMap.Face face) { + public static FrameBufferTextureTarget newTarget(GlTexture tx, TextureCubeMap.Face face) { FrameBufferTextureTarget t = new FrameBufferTextureTarget(); t.face = face.ordinal(); t.setTexture(tx); @@ -322,7 +322,7 @@ public void setDepthTarget(FrameBufferBufferTarget depthBuf){ public void setDepthTarget(FrameBufferTextureTarget depthBuf){ checkSetTexture(depthBuf.getTexture(), true); this.depthBuf = depthBuf; - this.depthBuf.slot = depthBuf.getTexture().getImage().getFormat().isDepthStencilFormat() ? SLOT_DEPTH_STENCIL : SLOT_DEPTH; + this.depthBuf.slot = depthBuf.getTexture().getImage().getGlFormat().isDepthStencilFormat() ? SLOT_DEPTH_STENCIL : SLOT_DEPTH; } public int getNumColorTargets(){ @@ -398,7 +398,7 @@ protected FrameBuffer(FrameBuffer src) { * {@link #setDepthTarget(com.jme3.texture.FrameBuffer.FrameBufferBufferTarget)} */ @Deprecated - public void setDepthBuffer(Image.Format format) { + public void setDepthBuffer(GlImage.Format format) { if (id != -1) { throw new UnsupportedOperationException("FrameBuffer already initialized."); } @@ -420,7 +420,7 @@ public void setDepthBuffer(Image.Format format) { * @deprecated Use addColorTarget */ @Deprecated - public void setColorBuffer(Image.Format format) { + public void setColorBuffer(GlImage.Format format) { if (id != -1) { throw new UnsupportedOperationException("FrameBuffer already initialized."); } @@ -437,15 +437,15 @@ public void setColorBuffer(Image.Format format) { colorBufs.add(colorBuf); } - private void checkSetTexture(Texture tex, boolean depth) { - Image img = tex.getImage(); + private void checkSetTexture(GlTexture tex, boolean depth) { + GlImage img = tex.getImage(); if (img == null) { throw new IllegalArgumentException("Texture not initialized with RTT."); } - if (depth && !img.getFormat().isDepthFormat()) { + if (depth && !img.getGlFormat().isDepthFormat()) { throw new IllegalArgumentException("Texture image format must be depth."); - } else if (!depth && img.getFormat().isDepthFormat()) { + } else if (!depth && img.getGlFormat().isDepthFormat()) { throw new IllegalArgumentException("Texture image format must be color/luminance."); } @@ -582,7 +582,7 @@ public void clearColorTargets() { * @deprecated Use addColorTarget */ @Deprecated - public void addColorBuffer(Image.Format format) { + public void addColorBuffer(GlImage.Format format) { if (id != -1) { throw new UnsupportedOperationException("FrameBuffer already initialized."); } @@ -606,7 +606,7 @@ public void addColorBuffer(Image.Format format) { * is rendered to by the shader. * * @param tex The texture to add. - * @see #addColorBuffer(com.jme3.texture.Image.Format) + * @see #addColorBuffer(GlImage.Format) * @deprecated Use addColorTarget */ @Deprecated @@ -615,13 +615,13 @@ public void addColorTexture(Texture2D tex) { throw new UnsupportedOperationException("FrameBuffer already initialized."); } - Image img = tex.getImage(); + GlImage img = tex.getImage(); checkSetTexture(tex, false); RenderBuffer colorBuf = new RenderBuffer(); colorBuf.slot = colorBufs.size(); colorBuf.tex = tex; - colorBuf.format = img.getFormat(); + colorBuf.format = img.getGlFormat(); colorBufs.add(colorBuf); } @@ -643,13 +643,13 @@ public void addColorTexture(TextureArray tex, int layer) { throw new UnsupportedOperationException("FrameBuffer already initialized."); } - Image img = tex.getImage(); + GlImage img = tex.getImage(); checkSetTexture(tex, false); RenderBuffer colorBuf = new RenderBuffer(); colorBuf.slot = colorBufs.size(); colorBuf.tex = tex; - colorBuf.format = img.getFormat(); + colorBuf.format = img.getGlFormat(); colorBuf.layer = layer; colorBufs.add(colorBuf); @@ -672,13 +672,13 @@ public void addColorTexture(TextureCubeMap tex, TextureCubeMap.Face face) { throw new UnsupportedOperationException("FrameBuffer already initialized."); } - Image img = tex.getImage(); + GlImage img = tex.getImage(); checkSetTexture(tex, false); RenderBuffer colorBuf = new RenderBuffer(); colorBuf.slot = colorBufs.size(); colorBuf.tex = tex; - colorBuf.format = img.getFormat(); + colorBuf.format = img.getGlFormat(); colorBuf.face = face.ordinal(); colorBufs.add(colorBuf); @@ -697,13 +697,13 @@ public void setDepthTexture(Texture2D tex) { throw new UnsupportedOperationException("FrameBuffer already initialized."); } - Image img = tex.getImage(); + GlImage img = tex.getImage(); checkSetTexture(tex, true); depthBuf = new RenderBuffer(); - depthBuf.slot = img.getFormat().isDepthStencilFormat() ? SLOT_DEPTH_STENCIL : SLOT_DEPTH; + depthBuf.slot = img.getGlFormat().isDepthStencilFormat() ? SLOT_DEPTH_STENCIL : SLOT_DEPTH; depthBuf.tex = tex; - depthBuf.format = img.getFormat(); + depthBuf.format = img.getGlFormat(); } /** @@ -719,13 +719,13 @@ public void setDepthTexture(TextureArray tex, int layer) { throw new UnsupportedOperationException("FrameBuffer already initialized."); } - Image img = tex.getImage(); + GlImage img = tex.getImage(); checkSetTexture(tex, true); depthBuf = new RenderBuffer(); - depthBuf.slot = img.getFormat().isDepthStencilFormat() ? SLOT_DEPTH_STENCIL : SLOT_DEPTH; + depthBuf.slot = img.getGlFormat().isDepthStencilFormat() ? SLOT_DEPTH_STENCIL : SLOT_DEPTH; depthBuf.tex = tex; - depthBuf.format = img.getFormat(); + depthBuf.format = img.getGlFormat(); depthBuf.layer = layer; } diff --git a/jme3-core/src/main/java/com/jme3/texture/Image.java b/jme3-core/src/main/java/com/jme3/texture/GlImage.java similarity index 88% rename from jme3-core/src/main/java/com/jme3/texture/Image.java rename to jme3-core/src/main/java/com/jme3/texture/GlImage.java index 3159f0856a..0d81ba644b 100644 --- a/jme3-core/src/main/java/com/jme3/texture/Image.java +++ b/jme3-core/src/main/java/com/jme3/texture/GlImage.java @@ -1,1308 +1,1339 @@ -/* - * Copyright (c) 2009-2024 jMonkeyEngine - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'jMonkeyEngine' nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.jme3.texture; - -import com.jme3.export.InputCapsule; -import com.jme3.export.JmeExporter; -import com.jme3.export.JmeImporter; -import com.jme3.export.OutputCapsule; -import com.jme3.export.Savable; -import com.jme3.math.FastMath; -import com.jme3.renderer.Caps; -import com.jme3.renderer.Renderer; -import com.jme3.texture.image.ColorSpace; -import com.jme3.texture.image.LastTextureState; -import com.jme3.util.BufferUtils; -import com.jme3.util.NativeObject; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Image defines a data format for a graphical image. The image - * is defined by a format, a height and width, and the image data. The width and - * height must be greater than 0. The data is contained in a byte buffer, and - * should be packed before creation of the image object. - * - * @author Mark Powell - * @author Joshua Slack - * @version $Id: Image.java 4131 2009-03-19 20:15:28Z blaine.dev $ - */ -public class Image extends NativeObject implements Savable /*, Cloneable*/ { - - public enum Format { - /** - * 8-bit alpha - */ - Alpha8(8), - - @Deprecated - Reserved1(0), - - /** - * 8-bit grayscale/luminance. - */ - Luminance8(8), - - @Deprecated - Reserved2(0), - - /** - * half-precision floating-point grayscale/luminance. - * - * Requires {@link Caps#FloatTexture}. - */ - Luminance16F(16,true), - - /** - * single-precision floating-point grayscale/luminance. - * - * Requires {@link Caps#FloatTexture}. - */ - Luminance32F(32,true), - - /** - * 8-bit luminance/grayscale and 8-bit alpha. - */ - Luminance8Alpha8(16), - - @Deprecated - Reserved3(0), - - /** - * half-precision floating-point grayscale/luminance and alpha. - * - * Requires {@link Caps#FloatTexture}. - */ - Luminance16FAlpha16F(32,true), - - @Deprecated - Reserved4(0), - - @Deprecated - Reserved5(0), - - /** - * 8-bit blue, green, and red. - */ - BGR8(24), // BGR and ABGR formats are often used on Windows systems - - /** - * 8-bit red, green, and blue. - */ - RGB8(24), - - @Deprecated - Reserved6(0), - - @Deprecated - Reserved7(0), - - /** - * 5-bit red, 6-bit green, and 5-bit blue. - */ - RGB565(16), - - @Deprecated - Reserved8(0), - - /** - * 5-bit red, green, and blue with 1-bit alpha. - */ - RGB5A1(16), - - /** - * 8-bit red, green, blue, and alpha. - */ - RGBA8(32), - - /** - * 8-bit alpha, blue, green, and red. - */ - ABGR8(32), - - /** - * 8-bit alpha, red, blue and green - */ - ARGB8(32), - - /** - * 8-bit blue, green, red and alpha. - */ - BGRA8(32), - - @Deprecated - Reserved9(0), - - /** - * S3TC compression DXT1. - */ - DXT1(4,false,true, false), - - /** - * S3TC compression DXT1 with 1-bit alpha. - */ - DXT1A(4,false,true, false), - - /** - * S3TC compression DXT3 with 4-bit alpha. - */ - DXT3(8,false,true, false), - - /** - * S3TC compression DXT5 with interpolated 8-bit alpha. - * - */ - DXT5(8,false,true, false), - - RGTC2(8,false,true, false), - - SIGNED_RGTC2(8,false,true, false), - - RGTC1(4,false,true, false), - - SIGNED_RGTC1(4,false,true, false), - - /** - * BPTC compression BC6 signed float RGB - */ - BC6H_SF16(8, false, true, true), - - /** - * BPTC compression BC6 unsigned float RGB - */ - BC6H_UF16(8, false, true, true), - - /** - * BPTC compression BC7 RGBA - */ - BC7_UNORM(8, false, true, false), - - /** - * BPTC compression BC7 SRGB Alpha - */ - BC7_UNORM_SRGB(8, false, true, false), - - /** - * Luminance-Alpha Texture Compression. - * - * @deprecated Not supported by OpenGL 3.0. - */ - @Deprecated - Reserved10(0), - - /** - * Arbitrary depth format. The precision is chosen by the video - * hardware. - */ - Depth(0,true,false,false), - - /** - * 16-bit depth. - */ - Depth16(16,true,false,false), - - /** - * 24-bit depth. - */ - Depth24(24,true,false,false), - - /** - * 32-bit depth. - */ - Depth32(32,true,false,false), - - /** - * single-precision floating point depth. - * - * Requires {@link Caps#FloatDepthBuffer}. - */ - Depth32F(32,true,false,true), - - /** - * Texture data is stored as {@link Format#RGB16F} in system memory, - * but will be converted to {@link Format#RGB111110F} when sent - * to the video hardware. - * - * Requires {@link Caps#FloatTexture} and {@link Caps#PackedFloatTexture}. - */ - RGB16F_to_RGB111110F(48,true), - - /** - * unsigned floating-point red, green and blue that uses 32 bits. - * - * Requires {@link Caps#PackedFloatTexture}. - */ - RGB111110F(32,true), - - /** - * Texture data is stored as {@link Format#RGB16F} in system memory, - * but will be converted to {@link Format#RGB9E5} when sent - * to the video hardware. - * - * Requires {@link Caps#FloatTexture} and {@link Caps#SharedExponentTexture}. - */ - RGB16F_to_RGB9E5(48,true), - - /** - * 9-bit red, green and blue with 5-bit exponent. - * - * Requires {@link Caps#SharedExponentTexture}. - */ - RGB9E5(32,true), - - /** - * half-precision floating point red, green, and blue. - * - * Requires {@link Caps#FloatTexture}. - * May be supported for renderbuffers, but the OpenGL specification does not require it. - */ - RGB16F(48,true), - - /** - * half-precision floating point red, green, blue, and alpha. - * - * Requires {@link Caps#FloatTexture}. - */ - RGBA16F(64,true), - - /** - * single-precision floating point red, green, and blue. - * - * Requires {@link Caps#FloatTexture}. - * May be supported for renderbuffers, but the OpenGL specification does not require it. - */ - RGB32F(96,true), - - /** - * single-precision floating point red, green, blue and alpha. - * - * Requires {@link Caps#FloatTexture}. - */ - RGBA32F(128,true), - - @Deprecated - Reserved11(0), - - /** - * 24-bit depth with 8-bit stencil. - * Check the cap {@link Caps#PackedDepthStencilBuffer}. - */ - Depth24Stencil8(32, true, false, false), - - @Deprecated - Reserved12(0), - - /** - * Ericsson Texture Compression. Typically used on Android. - * - * Requires {@link Caps#TextureCompressionETC1}. - */ - ETC1(4, false, true, false), - - /** - * Ericsson Texture Compression 2. Typically used on Android. - * Same as {@link #ETC1} but with alpha. - * - * Requires {@link Caps#TextureCompressionETC2}. - */ - ETC2(8, false, true, false), - - /** - * Ericsson Texture Compression 2. Typically used on Android. - * Same as {@link #ETC2} but alpha can be either 1 or 0. - * - * Requires {@link Caps#TextureCompressionETC2}. - */ - ETC2_ALPHA1(4, false, true, false), - - - /** - * 8-bit signed int red. - * - * Requires {@link Caps#IntegerTexture}. - */ - R8I(8), - /** - * 8-bit unsigned int red. - * - * Requires {@link Caps#IntegerTexture}. - */ - R8UI(8), - /** - * 16-bit signed int red. - * - * Requires {@link Caps#IntegerTexture}. - */ - R16I(16), - /** - * 16-bit unsigned int red. - * - * Requires {@link Caps#IntegerTexture}. - */ - R16UI(16), - /** - * 32-bit signed int red. - * - * Requires {@link Caps#IntegerTexture}. - */ - R32I(32), - /** - * 32-bit unsigned int red. - * - * Requires {@link Caps#IntegerTexture}. - */ - R32UI(32), - - - /** - * 8-bit signed int red and green. - * - * Requires {@link Caps#IntegerTexture}. - */ - RG8I(16), - /** - * 8-bit unsigned int red and green. - * - * Requires {@link Caps#IntegerTexture}. - */ - RG8UI(16), - /** - * 16-bit signed int red and green. - * - * Requires {@link Caps#IntegerTexture}. - */ - RG16I(32), - /** - * 16-bit unsigned int red and green. - * - * Requires {@link Caps#IntegerTexture}. - */ - RG16UI(32), - /** - * 32-bit signed int red and green. - * - * Requires {@link Caps#IntegerTexture}. - */ - RG32I(64), - /** - * 32-bit unsigned int red and green. - * - * Requires {@link Caps#IntegerTexture}. - */ - RG32UI(64), - - /** - * 8-bit signed int red, green and blue. - * - * Requires {@link Caps#IntegerTexture} to be supported for textures. - * May be supported for renderbuffers, but the OpenGL specification does not require it. - */ - RGB8I(24), - /** - * 8 bit unsigned int red, green and blue. - * - * Requires {@link Caps#IntegerTexture} to be supported for textures. - * May be supported for renderbuffers, but the OpenGL specification does not require it. - */ - RGB8UI(24), - /** - * 16-bit signed int red, green and blue. - * - * Requires {@link Caps#IntegerTexture} to be supported for textures. - * May be supported for renderbuffers, but the OpenGL specification does not require it. - */ - RGB16I(48), - /** - * 16-bit unsigned int red, green and blue. - * - * Requires {@link Caps#IntegerTexture} to be supported for textures. - * May be supported for renderbuffers, but the OpenGL specification does not require it. - */ - RGB16UI(48), - /** - * 32-bit signed int red, green and blue. - * - * Requires {@link Caps#IntegerTexture} to be supported for textures. - * May be supported for renderbuffers, but the OpenGL specification does not require it. - */ - RGB32I(96), - /** - * 32-bit unsigned int red, green and blue. - * - * Requires {@link Caps#IntegerTexture} to be supported for textures. - * May be supported for renderbuffers, but the OpenGL specification does not require it. - */ - RGB32UI(96), - - - /** - * 8-bit signed int red, green, blue and alpha. - * - * Requires {@link Caps#IntegerTexture}. - */ - RGBA8I(32), - /** - * 8-bit unsigned int red, green, blue and alpha. - * - * Requires {@link Caps#IntegerTexture}. - */ - RGBA8UI(32), - /** - * 16-bit signed int red, green, blue and alpha. - * - * Requires {@link Caps#IntegerTexture}. - */ - RGBA16I(64), - /** - * 16-bit unsigned int red, green, blue and alpha. - * - * Requires {@link Caps#IntegerTexture}. - */ - RGBA16UI(64), - /** - * 32-bit signed int red, green, blue and alpha. - * - * Requires {@link Caps#IntegerTexture}. - */ - RGBA32I(128), - /** - * 32-bit unsigned int red, green, blue and alpha. - * - * Requires {@link Caps#IntegerTexture}. - */ - RGBA32UI(128), - - /** - * half-precision floating point red. - * - * Requires {@link Caps#FloatTexture}. - */ - R16F(16,true), - - /** - * single-precision floating point red. - * - * Requires {@link Caps#FloatTexture}. - */ - R32F(32,true), - - /** - * half-precision floating point red and green. - * - * Requires {@link Caps#FloatTexture}. - */ - RG16F(32,true), - - /** - * single-precision floating point red and green. - * - * Requires {@link Caps#FloatTexture}. - */ - RG32F(64,true), - - /** - * 10-bit red, green, and blue with 2-bit alpha. - */ - RGB10A2(32), - ; - - private int bpp; - private boolean isDepth; - private boolean isCompressed; - private boolean isFloatingPoint; - - private Format(int bpp){ - this.bpp = bpp; - } - - private Format(int bpp, boolean isFP){ - this(bpp); - this.isFloatingPoint = isFP; - } - - private Format(int bpp, boolean isDepth, boolean isCompressed, boolean isFP){ - this(bpp, isFP); - this.isDepth = isDepth; - this.isCompressed = isCompressed; - } - - /** - * @return bits per pixel. - */ - public int getBitsPerPixel(){ - return bpp; - } - - /** - * @return True if this format is a depth format, false otherwise. - */ - public boolean isDepthFormat(){ - return isDepth; - } - - /** - * @return True if this format is a depth + stencil (packed) format, false otherwise. - */ - boolean isDepthStencilFormat() { - return this == Depth24Stencil8; - } - - /** - * @return True if this is a compressed image format, false if - * uncompressed. - */ - public boolean isCompressed() { - return isCompressed; - } - - /** - * @return True if this image format is in floating point, - * false if it is an integer format. - */ - public boolean isFloatingPont(){ - return isFloatingPoint; - } - - - - } - - // image attributes - protected Format format; - protected int width, height, depth; - protected int[] mipMapSizes; - protected ArrayList data; - protected int multiSamples = 1; - protected ColorSpace colorSpace = null; -// protected int mipOffset = 0; - - // attributes relating to GL object - protected boolean mipsWereGenerated = false; - protected boolean needGeneratedMips = false; - protected LastTextureState lastTextureState = new LastTextureState(); - - /** - * Internal use only. - * The renderer stores the texture state set from the last texture, - * so it doesn't have to change it unless necessary. - * - * @return The image parameter state. - */ - public LastTextureState getLastTextureState() { - return lastTextureState; - } - - /** - * Internal use only. - * The renderer marks which images have generated mipmaps in VRAM - * and which do not, so it can generate them as needed. - * - * @param generated If mipmaps were generated or not. - */ - public void setMipmapsGenerated(boolean generated) { - this.mipsWereGenerated = generated; - } - - /** - * Internal use only. - * Check if the renderer has generated mipmaps for this image in VRAM - * or not. - * - * @return If mipmaps were generated already. - */ - public boolean isMipmapsGenerated() { - return mipsWereGenerated; - } - - /** - * (Package private) Called by {@link Texture} when - * {@link #isMipmapsGenerated() } is false in order to generate - * mipmaps for this image. - */ - void setNeedGeneratedMipmaps() { - needGeneratedMips = true; - } - - /** - * @return True if the image needs to have mipmaps generated - * for it (as requested by the texture). This stays true even - * after mipmaps have been generated. - */ - public boolean isGeneratedMipmapsRequired() { - return needGeneratedMips; - } - - /** - * Sets the update needed flag, while also checking if mipmaps - * need to be regenerated. - */ - @Override - public void setUpdateNeeded() { - super.setUpdateNeeded(); - if (isGeneratedMipmapsRequired() && !hasMipmaps()) { - // Mipmaps are no longer valid, since the image was changed. - setMipmapsGenerated(false); - } - } - - /** - * Determine if the image is NPOT. - * - * @return if the image is a non-power-of-2 image, e.g. having dimensions - * that are not powers of 2. - */ - public boolean isNPOT() { - return width != 0 && height != 0 - && (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height)); - } - - @Override - public void resetObject() { - this.id = -1; - this.mipsWereGenerated = false; - this.lastTextureState.reset(); - setUpdateNeeded(); - } - - @Override - protected void deleteNativeBuffers() { - for (ByteBuffer buf : data) { - BufferUtils.destroyDirectBuffer(buf); - } - } - - @Override - public void deleteObject(Object rendererObject) { - ((Renderer)rendererObject).deleteImage(this); - } - - @Override - public NativeObject createDestructableClone() { - return new Image(id); - } - - @Override - public long getUniqueId() { - return ((long)OBJTYPE_TEXTURE << 32) | (0xffffffffL & (long)id); - } - - /** - * @return A shallow clone of this image. The data is not cloned. - */ - @Override - public Image clone(){ - Image clone = (Image) super.clone(); - clone.mipMapSizes = mipMapSizes != null ? mipMapSizes.clone() : null; - clone.data = data != null ? new ArrayList(data) : null; - clone.lastTextureState = new LastTextureState(); - clone.setUpdateNeeded(); - return clone; - } - - /** - * Constructor instantiates a new Image object. All values - * are undefined. - */ - public Image() { - super(); - data = new ArrayList(1); - } - - protected Image(int id){ - super(id); - } - - /** - * Constructor instantiates a new Image object. The - * attributes of the image are defined during construction. - * - * @param format - * the data format of the image. - * @param width - * the width of the image. - * @param height - * the height of the image. - * @param depth - * the desired image depth - * @param data - * the image data. - * @param mipMapSizes - * the array of mipmap sizes, or null for no mipmaps. - * @param colorSpace - * the colorSpace of the image - */ - public Image(Format format, int width, int height, int depth, ArrayList data, - int[] mipMapSizes, ColorSpace colorSpace) { - - this(); - - if (mipMapSizes != null) { - if (mipMapSizes.length <= 1) { - mipMapSizes = null; - } else { - needGeneratedMips = false; - mipsWereGenerated = true; - } - } - - setFormat(format); - this.width = width; - this.height = height; - this.data = data; - this.depth = depth; - this.mipMapSizes = mipMapSizes; - this.colorSpace = colorSpace; - } - - /** - * @see #Image(com.jme3.texture.Image.Format, int, int, int, java.util.ArrayList, int[], com.jme3.texture.image.ColorSpace) - * @param format the desired data format - * @param width the desired width (in pixels) - * @param height the desired height (in pixels) - * @param depth the desired image depth - * @param data the image data to use - * @param mipMapSizes the desired mipmap sizes, or null for no mipmaps - * @deprecated use {@link #Image(com.jme3.texture.Image.Format, int, int, int, java.util.ArrayList, int[], com.jme3.texture.image.ColorSpace)} - */ - @Deprecated - public Image(Format format, int width, int height, int depth, ArrayList data, - int[] mipMapSizes) { - this(format, width, height, depth, data, mipMapSizes, ColorSpace.Linear); - } - - /** - * Constructor instantiates a new Image object. The - * attributes of the image are defined during construction. - * - * @param format - * the data format of the image. - * @param width - * the width of the image. - * @param height - * the height of the image. - * @param data - * the image data. - * @param mipMapSizes - * the array of mipmap sizes, or null for no mipmaps. - * @param colorSpace - * the colorSpace of the image - */ - public Image(Format format, int width, int height, ByteBuffer data, - int[] mipMapSizes, ColorSpace colorSpace) { - - this(); - - if (mipMapSizes != null) { - if (mipMapSizes.length <= 1) { - mipMapSizes = null; - } else { - needGeneratedMips = false; - mipsWereGenerated = true; - } - } - - setFormat(format); - this.width = width; - this.height = height; - if (data != null){ - this.data = new ArrayList(1); - this.data.add(data); - } - this.mipMapSizes = mipMapSizes; - this.colorSpace = colorSpace; - } - - /** - * @see #Image(com.jme3.texture.Image.Format, int, int, java.nio.ByteBuffer, int[], com.jme3.texture.image.ColorSpace) - * @param format the desired data format - * @param width the desired width (in pixels) - * @param height the desired height (in pixels) - * @param data the image data to use - * @param mipMapSizes the desired mipmap sizes, or null for no mipmaps - * @deprecated use {@link #Image(com.jme3.texture.Image.Format, int, int, java.nio.ByteBuffer, int[], com.jme3.texture.image.ColorSpace)} - */ - @Deprecated - public Image(Format format, int width, int height, ByteBuffer data, - int[] mipMapSizes) { - this(format, width, height, data, mipMapSizes, ColorSpace.Linear); - } - - /** - * Constructor instantiates a new Image object. The - * attributes of the image are defined during construction. - * - * @param format - * the data format of the image. - * @param width - * the width of the image. - * @param height - * the height of the image. - * @param depth - * the desired image depth - * @param data - * the image data. - * @param colorSpace - * the colorSpace of the image - */ - public Image(Format format, int width, int height, int depth, ArrayList data, ColorSpace colorSpace) { - this(format, width, height, depth, data, null, colorSpace); - } - - /** - * @see #Image(com.jme3.texture.Image.Format, int, int, int, java.util.ArrayList, com.jme3.texture.image.ColorSpace) - * @param format the desired data format - * @param width the desired width (in pixels) - * @param height the desired height (in pixels) - * @param depth the desired image depth - * @param data the image data to use - * @deprecated use {@link #Image(com.jme3.texture.Image.Format, int, int, int, java.util.ArrayList, com.jme3.texture.image.ColorSpace)} - */ - @Deprecated - public Image(Format format, int width, int height, int depth, ArrayList data) { - this(format, width, height, depth, data, ColorSpace.Linear); - } - - /** - * Constructor instantiates a new Image object. The - * attributes of the image are defined during construction. - * - * @param format - * the data format of the image. - * @param width - * the width of the image. - * @param height - * the height of the image. - * @param data - * the image data. - * @param colorSpace - * the colorSpace of the image - */ - public Image(Format format, int width, int height, ByteBuffer data, ColorSpace colorSpace) { - this(format, width, height, data, null, colorSpace); - } - - - /** - * @see #Image(com.jme3.texture.Image.Format, int, int, java.nio.ByteBuffer, com.jme3.texture.image.ColorSpace) - * @param format the desired data format - * @param width the desired width (in pixels) - * @param height the desired height (in pixels) - * @param data the image data - * @deprecated use {@link #Image(com.jme3.texture.Image.Format, int, int, java.nio.ByteBuffer, com.jme3.texture.image.ColorSpace)} - */ - @Deprecated - public Image(Format format, int width, int height, ByteBuffer data) { - this(format, width, height, data, null, ColorSpace.Linear); - } - - - /** - * @return The number of samples (for multisampled textures). - * @see Image#setMultiSamples(int) - */ - public int getMultiSamples() { - return multiSamples; - } - - /** - * @param multiSamples Set the number of samples to use for this image, - * setting this to a value higher than 1 turns this image/texture - * into a multisample texture (on OpenGL3.1 and higher). - */ - public void setMultiSamples(int multiSamples) { - if (multiSamples <= 0) { - throw new IllegalArgumentException("multiSamples must be > 0"); - } - - if (multiSamples > 1) { - if (getData(0) != null) { - throw new IllegalArgumentException("Cannot upload data as multisample texture"); - } - - if (hasMipmaps()) { - throw new IllegalArgumentException("Multisample textures do not support mipmaps"); - } - } - - this.multiSamples = multiSamples; - } - - /** - * setData sets the data that makes up the image. This data - * is packed into an array of ByteBuffer objects. - * - * @param data - * the data that contains the image information. - */ - public void setData(ArrayList data) { - this.data = data; - setUpdateNeeded(); - } - - /** - * setData sets the data that makes up the image. This data - * is packed into a single ByteBuffer. - * - * @param data - * the data that contains the image information. - */ - public void setData(ByteBuffer data) { - this.data = new ArrayList(1); - this.data.add(data); - setUpdateNeeded(); - } - - public void addData(ByteBuffer data) { - if (this.data == null) - this.data = new ArrayList(1); - this.data.add(data); - setUpdateNeeded(); - } - - public void setData(int index, ByteBuffer data) { - if (index >= 0) { - while (this.data.size() <= index) { - this.data.add(null); - } - this.data.set(index, data); - setUpdateNeeded(); - } else { - throw new IllegalArgumentException("index must be greater than or equal to 0."); - } - } - - /** - * @return null - * @deprecated This feature is no longer used by the engine - */ - @Deprecated - public Object getEfficentData(){ - return null; - } - - /** - * Sets the mipmap sizes stored in this image's data buffer. Mipmaps are - * stored sequentially, and the first mipmap is the main image data. To - * specify no mipmaps, pass null and this will automatically be expanded - * into a single mipmap of the full - * - * @param mipMapSizes - * the mipmap sizes array, or null for a single image map. - */ - public void setMipMapSizes(int[] mipMapSizes) { - if (mipMapSizes != null && mipMapSizes.length <= 1) - mipMapSizes = null; - - this.mipMapSizes = mipMapSizes; - - if (mipMapSizes != null) { - needGeneratedMips = false; - mipsWereGenerated = false; - } else { - needGeneratedMips = true; - mipsWereGenerated = false; - } - - setUpdateNeeded(); - } - - /** - * setHeight sets the height value of the image. It is - * typically a good idea to try to keep this as a multiple of 2. - * - * @param height - * the height of the image. - */ - public void setHeight(int height) { - this.height = height; - setUpdateNeeded(); - } - - /** - * setDepth sets the depth value of the image. It is - * typically a good idea to try to keep this as a multiple of 2. This is - * used for 3d images. - * - * @param depth - * the depth of the image. - */ - public void setDepth(int depth) { - this.depth = depth; - setUpdateNeeded(); - } - - /** - * setWidth sets the width value of the image. It is - * typically a good idea to try to keep this as a multiple of 2. - * - * @param width - * the width of the image. - */ - public void setWidth(int width) { - this.width = width; - setUpdateNeeded(); - } - - /** - * setFormat sets the image format for this image. - * - * @param format - * the image format (not null) - * @throws IllegalArgumentException - * if format is null - * @see Format - */ - public void setFormat(Format format) { - if (format == null) { - throw new IllegalArgumentException("format may not be null."); - } - - this.format = format; - setUpdateNeeded(); - } - - /** - * getFormat returns the image format for this image. - * - * @return the image format. - * @see Format - */ - public Format getFormat() { - return format; - } - - /** - * getWidth returns the width of this image. - * - * @return the width of this image. - */ - public int getWidth() { - return width; - } - - /** - * getHeight returns the height of this image. - * - * @return the height of this image. - */ - public int getHeight() { - return height; - } - - /** - * getDepth returns the depth of this image (for 3d images). - * - * @return the depth of this image. - */ - public int getDepth() { - return depth; - } - - /** - * getData returns the data for this image. If the data is - * undefined, null will be returned. - * - * @return the data for this image. - */ - public List getData() { - return data; - } - - /** - * getData returns the data for this image. If the data is - * undefined, null will be returned. - * - * @param index index of the data buffer to access - * @return the data for this image. - */ - public ByteBuffer getData(int index) { - if (data.size() > index) - return data.get(index); - else - return null; - } - - /** - * Returns whether the image data contains mipmaps. - * - * @return true if the image data contains mipmaps, false if not. - */ - public boolean hasMipmaps() { - return mipMapSizes != null; - } - - /** - * Returns the mipmap sizes for this image. - * - * @return the mipmap sizes for this image. - */ - public int[] getMipMapSizes() { - return mipMapSizes; - } - - /** - * image loader is responsible for setting this attribute based on the color - * space in which the image has been encoded with. In the majority of cases, - * this flag will be set to sRGB by default since many image formats do not - * contain any color space information and the most frequently used colors - * space is sRGB - * - * The material loader may override this attribute to Linear if it determines that - * such conversion must not be performed, for example, when loading normal - * maps. - * - * @param colorSpace Set to sRGB to enable srgb -> linear - * conversion, Linear otherwise. - * - * @see Renderer#setLinearizeSrgbImages(boolean) - * - */ - public void setColorSpace(ColorSpace colorSpace) { - this.colorSpace = colorSpace; - } - - /** - * Specifies that this image is an SRGB image and therefore must undergo an - * sRGB -> linear RGB color conversion prior to being read by a shader and - * with the {@link Renderer#setLinearizeSrgbImages(boolean)} option is - * enabled. - * - * This option is only supported for the 8-bit color and grayscale image - * formats. Determines if the image is in SRGB color space or not. - * - * @return True, if the image is an SRGB image, false if it is linear RGB. - * - * @see Renderer#setLinearizeSrgbImages(boolean) - */ - public ColorSpace getColorSpace() { - return colorSpace; - } - - @Override - public String toString(){ - StringBuilder sb = new StringBuilder(); - sb.append(getClass().getSimpleName()); - sb.append("[size=").append(width).append("x").append(height); - - if (depth > 1) - sb.append("x").append(depth); - - sb.append(", format=").append(format.name()); - - if (hasMipmaps()) - sb.append(", mips"); - - if (getId() >= 0) - sb.append(", id=").append(id); - - sb.append("]"); - - return sb.toString(); - } - - @Override - public boolean equals(Object other) { - if (other == this) { - return true; - } - if (!(other instanceof Image)) { - return false; - } - Image that = (Image) other; - if (this.getFormat() != that.getFormat()) - return false; - if (this.getWidth() != that.getWidth()) - return false; - if (this.getHeight() != that.getHeight()) - return false; - if (this.getData() != null && !this.getData().equals(that.getData())) - return false; - if (this.getData() == null && that.getData() != null) - return false; - if (this.getMipMapSizes() != null - && !Arrays.equals(this.getMipMapSizes(), that.getMipMapSizes())) - return false; - if (this.getMipMapSizes() == null && that.getMipMapSizes() != null) - return false; - if (this.getMultiSamples() != that.getMultiSamples()) - return false; - - return true; - } - - @Override - public int hashCode() { - int hash = 7; - hash = 97 * hash + (this.format != null ? this.format.hashCode() : 0); - hash = 97 * hash + this.width; - hash = 97 * hash + this.height; - hash = 97 * hash + this.depth; - hash = 97 * hash + Arrays.hashCode(this.mipMapSizes); - hash = 97 * hash + (this.data != null ? this.data.hashCode() : 0); - hash = 97 * hash + this.multiSamples; - return hash; - } - - @Override - public void write(JmeExporter e) throws IOException { - OutputCapsule capsule = e.getCapsule(this); - capsule.write(format, "format", Format.RGBA8); - capsule.write(width, "width", 0); - capsule.write(height, "height", 0); - capsule.write(depth, "depth", 0); - capsule.write(mipMapSizes, "mipMapSizes", null); - capsule.write(multiSamples, "multiSamples", 1); - capsule.writeByteBufferArrayList(data, "data", null); - capsule.write(colorSpace, "colorSpace", null); - } - - @Override - public void read(JmeImporter importer) throws IOException { - InputCapsule capsule = importer.getCapsule(this); - format = capsule.readEnum("format", Format.class, Format.RGBA8); - width = capsule.readInt("width", 0); - height = capsule.readInt("height", 0); - depth = capsule.readInt("depth", 0); - mipMapSizes = capsule.readIntArray("mipMapSizes", null); - multiSamples = capsule.readInt("multiSamples", 1); - data = capsule.readByteBufferArrayList("data", null); - colorSpace = capsule.readEnum("colorSpace", ColorSpace.class, null); - if (mipMapSizes != null) { - needGeneratedMips = false; - mipsWereGenerated = true; - } - } - -} +/* + * Copyright (c) 2009-2024 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.texture; + +import com.jme3.export.InputCapsule; +import com.jme3.export.JmeExporter; +import com.jme3.export.JmeImporter; +import com.jme3.export.OutputCapsule; +import com.jme3.export.Savable; +import com.jme3.math.FastMath; +import com.jme3.renderer.Caps; +import com.jme3.renderer.Renderer; +import com.jme3.texture.image.ColorSpace; +import com.jme3.texture.image.LastTextureState; +import com.jme3.util.natives.GlNative; +import com.jme3.vulkan.images.GpuImage; +import com.jme3.vulkan.images.VulkanImage; +import com.jme3.vulkan.util.IntEnum; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Image defines a data format for a graphical image. The image + * is defined by a format, a height and width, and the image data. The width and + * height must be greater than 0. The data is contained in a byte buffer, and + * should be packed before creation of the image object. + * + * @author Mark Powell + * @author Joshua Slack + * @version $Id: Image.java 4131 2009-03-19 20:15:28Z blaine.dev $ + */ +public class GlImage extends GlNative implements GpuImage, ImageView, Savable /*, Cloneable*/ { + + @Override + public GlImage getImage() { + return this; + } + + @Override + public int getBaseMipmap() { + return 0; + } + + @Override + public int getMipmapCount() { + // todo: determine if this is correct + return mipMapSizes.length; + } + + @Override + public int getBaseLayer() { + return 0; + } + + @Override + public int getLayerCount() { + // todo: determine if this is correct + return 1; + } + + public enum Format { + /** + * 8-bit alpha + */ + Alpha8(8), + + @Deprecated + Reserved1(0), + + /** + * 8-bit grayscale/luminance. + */ + Luminance8(8), + + @Deprecated + Reserved2(0), + + /** + * half-precision floating-point grayscale/luminance. + * + * Requires {@link Caps#FloatTexture}. + */ + Luminance16F(16,true), + + /** + * single-precision floating-point grayscale/luminance. + * + * Requires {@link Caps#FloatTexture}. + */ + Luminance32F(32,true), + + /** + * 8-bit luminance/grayscale and 8-bit alpha. + */ + Luminance8Alpha8(16), + + @Deprecated + Reserved3(0), + + /** + * half-precision floating-point grayscale/luminance and alpha. + * + * Requires {@link Caps#FloatTexture}. + */ + Luminance16FAlpha16F(32,true), + + @Deprecated + Reserved4(0), + + @Deprecated + Reserved5(0), + + /** + * 8-bit blue, green, and red. + */ + BGR8(24), // BGR and ABGR formats are often used on Windows systems + + /** + * 8-bit red, green, and blue. + */ + RGB8(24), + + @Deprecated + Reserved6(0), + + @Deprecated + Reserved7(0), + + /** + * 5-bit red, 6-bit green, and 5-bit blue. + */ + RGB565(16), + + @Deprecated + Reserved8(0), + + /** + * 5-bit red, green, and blue with 1-bit alpha. + */ + RGB5A1(16), + + /** + * 8-bit red, green, blue, and alpha. + */ + RGBA8(32), + + /** + * 8-bit alpha, blue, green, and red. + */ + ABGR8(32), + + /** + * 8-bit alpha, red, blue and green + */ + ARGB8(32), + + /** + * 8-bit blue, green, red and alpha. + */ + BGRA8(32), + + @Deprecated + Reserved9(0), + + /** + * S3TC compression DXT1. + */ + DXT1(4,false,true, false), + + /** + * S3TC compression DXT1 with 1-bit alpha. + */ + DXT1A(4,false,true, false), + + /** + * S3TC compression DXT3 with 4-bit alpha. + */ + DXT3(8,false,true, false), + + /** + * S3TC compression DXT5 with interpolated 8-bit alpha. + * + */ + DXT5(8,false,true, false), + + RGTC2(8,false,true, false), + + SIGNED_RGTC2(8,false,true, false), + + RGTC1(4,false,true, false), + + SIGNED_RGTC1(4,false,true, false), + + /** + * BPTC compression BC6 signed float RGB + */ + BC6H_SF16(8, false, true, true), + + /** + * BPTC compression BC6 unsigned float RGB + */ + BC6H_UF16(8, false, true, true), + + /** + * BPTC compression BC7 RGBA + */ + BC7_UNORM(8, false, true, false), + + /** + * BPTC compression BC7 SRGB Alpha + */ + BC7_UNORM_SRGB(8, false, true, false), + + /** + * Luminance-Alpha Texture Compression. + * + * @deprecated Not supported by OpenGL 3.0. + */ + @Deprecated + Reserved10(0), + + /** + * Arbitrary depth format. The precision is chosen by the video + * hardware. + */ + Depth(0,true,false,false), + + /** + * 16-bit depth. + */ + Depth16(16,true,false,false), + + /** + * 24-bit depth. + */ + Depth24(24,true,false,false), + + /** + * 32-bit depth. + */ + Depth32(32,true,false,false), + + /** + * single-precision floating point depth. + * + * Requires {@link Caps#FloatDepthBuffer}. + */ + Depth32F(32,true,false,true), + + /** + * Texture data is stored as {@link Format#RGB16F} in system memory, + * but will be converted to {@link Format#RGB111110F} when sent + * to the video hardware. + * + * Requires {@link Caps#FloatTexture} and {@link Caps#PackedFloatTexture}. + */ + RGB16F_to_RGB111110F(48,true), + + /** + * unsigned floating-point red, green and blue that uses 32 bits. + * + * Requires {@link Caps#PackedFloatTexture}. + */ + RGB111110F(32,true), + + /** + * Texture data is stored as {@link Format#RGB16F} in system memory, + * but will be converted to {@link Format#RGB9E5} when sent + * to the video hardware. + * + * Requires {@link Caps#FloatTexture} and {@link Caps#SharedExponentTexture}. + */ + RGB16F_to_RGB9E5(48,true), + + /** + * 9-bit red, green and blue with 5-bit exponent. + * + * Requires {@link Caps#SharedExponentTexture}. + */ + RGB9E5(32,true), + + /** + * half-precision floating point red, green, and blue. + * + * Requires {@link Caps#FloatTexture}. + * May be supported for renderbuffers, but the OpenGL specification does not require it. + */ + RGB16F(48,true), + + /** + * half-precision floating point red, green, blue, and alpha. + * + * Requires {@link Caps#FloatTexture}. + */ + RGBA16F(64,true), + + /** + * single-precision floating point red, green, and blue. + * + * Requires {@link Caps#FloatTexture}. + * May be supported for renderbuffers, but the OpenGL specification does not require it. + */ + RGB32F(96,true), + + /** + * single-precision floating point red, green, blue and alpha. + * + * Requires {@link Caps#FloatTexture}. + */ + RGBA32F(128,true), + + @Deprecated + Reserved11(0), + + /** + * 24-bit depth with 8-bit stencil. + * Check the cap {@link Caps#PackedDepthStencilBuffer}. + */ + Depth24Stencil8(32, true, false, false), + + @Deprecated + Reserved12(0), + + /** + * Ericsson Texture Compression. Typically used on Android. + * + * Requires {@link Caps#TextureCompressionETC1}. + */ + ETC1(4, false, true, false), + + /** + * Ericsson Texture Compression 2. Typically used on Android. + * Same as {@link #ETC1} but with alpha. + * + * Requires {@link Caps#TextureCompressionETC2}. + */ + ETC2(8, false, true, false), + + /** + * Ericsson Texture Compression 2. Typically used on Android. + * Same as {@link #ETC2} but alpha can be either 1 or 0. + * + * Requires {@link Caps#TextureCompressionETC2}. + */ + ETC2_ALPHA1(4, false, true, false), + + + /** + * 8-bit signed int red. + * + * Requires {@link Caps#IntegerTexture}. + */ + R8I(8), + /** + * 8-bit unsigned int red. + * + * Requires {@link Caps#IntegerTexture}. + */ + R8UI(8), + /** + * 16-bit signed int red. + * + * Requires {@link Caps#IntegerTexture}. + */ + R16I(16), + /** + * 16-bit unsigned int red. + * + * Requires {@link Caps#IntegerTexture}. + */ + R16UI(16), + /** + * 32-bit signed int red. + * + * Requires {@link Caps#IntegerTexture}. + */ + R32I(32), + /** + * 32-bit unsigned int red. + * + * Requires {@link Caps#IntegerTexture}. + */ + R32UI(32), + + + /** + * 8-bit signed int red and green. + * + * Requires {@link Caps#IntegerTexture}. + */ + RG8I(16), + /** + * 8-bit unsigned int red and green. + * + * Requires {@link Caps#IntegerTexture}. + */ + RG8UI(16), + /** + * 16-bit signed int red and green. + * + * Requires {@link Caps#IntegerTexture}. + */ + RG16I(32), + /** + * 16-bit unsigned int red and green. + * + * Requires {@link Caps#IntegerTexture}. + */ + RG16UI(32), + /** + * 32-bit signed int red and green. + * + * Requires {@link Caps#IntegerTexture}. + */ + RG32I(64), + /** + * 32-bit unsigned int red and green. + * + * Requires {@link Caps#IntegerTexture}. + */ + RG32UI(64), + + /** + * 8-bit signed int red, green and blue. + * + * Requires {@link Caps#IntegerTexture} to be supported for textures. + * May be supported for renderbuffers, but the OpenGL specification does not require it. + */ + RGB8I(24), + /** + * 8 bit unsigned int red, green and blue. + * + * Requires {@link Caps#IntegerTexture} to be supported for textures. + * May be supported for renderbuffers, but the OpenGL specification does not require it. + */ + RGB8UI(24), + /** + * 16-bit signed int red, green and blue. + * + * Requires {@link Caps#IntegerTexture} to be supported for textures. + * May be supported for renderbuffers, but the OpenGL specification does not require it. + */ + RGB16I(48), + /** + * 16-bit unsigned int red, green and blue. + * + * Requires {@link Caps#IntegerTexture} to be supported for textures. + * May be supported for renderbuffers, but the OpenGL specification does not require it. + */ + RGB16UI(48), + /** + * 32-bit signed int red, green and blue. + * + * Requires {@link Caps#IntegerTexture} to be supported for textures. + * May be supported for renderbuffers, but the OpenGL specification does not require it. + */ + RGB32I(96), + /** + * 32-bit unsigned int red, green and blue. + * + * Requires {@link Caps#IntegerTexture} to be supported for textures. + * May be supported for renderbuffers, but the OpenGL specification does not require it. + */ + RGB32UI(96), + + + /** + * 8-bit signed int red, green, blue and alpha. + * + * Requires {@link Caps#IntegerTexture}. + */ + RGBA8I(32), + /** + * 8-bit unsigned int red, green, blue and alpha. + * + * Requires {@link Caps#IntegerTexture}. + */ + RGBA8UI(32), + /** + * 16-bit signed int red, green, blue and alpha. + * + * Requires {@link Caps#IntegerTexture}. + */ + RGBA16I(64), + /** + * 16-bit unsigned int red, green, blue and alpha. + * + * Requires {@link Caps#IntegerTexture}. + */ + RGBA16UI(64), + /** + * 32-bit signed int red, green, blue and alpha. + * + * Requires {@link Caps#IntegerTexture}. + */ + RGBA32I(128), + /** + * 32-bit unsigned int red, green, blue and alpha. + * + * Requires {@link Caps#IntegerTexture}. + */ + RGBA32UI(128), + + /** + * half-precision floating point red. + * + * Requires {@link Caps#FloatTexture}. + */ + R16F(16,true), + + /** + * single-precision floating point red. + * + * Requires {@link Caps#FloatTexture}. + */ + R32F(32,true), + + /** + * half-precision floating point red and green. + * + * Requires {@link Caps#FloatTexture}. + */ + RG16F(32,true), + + /** + * single-precision floating point red and green. + * + * Requires {@link Caps#FloatTexture}. + */ + RG32F(64,true), + + /** + * 10-bit red, green, and blue with 2-bit alpha. + */ + RGB10A2(32), + ; + + private int bpp; + private boolean isDepth; + private boolean isCompressed; + private boolean isFloatingPoint; + + private Format(int bpp){ + this.bpp = bpp; + } + + private Format(int bpp, boolean isFP){ + this(bpp); + this.isFloatingPoint = isFP; + } + + private Format(int bpp, boolean isDepth, boolean isCompressed, boolean isFP){ + this(bpp, isFP); + this.isDepth = isDepth; + this.isCompressed = isCompressed; + } + + /** + * @return bits per pixel. + */ + public int getBitsPerPixel(){ + return bpp; + } + + /** + * @return True if this format is a depth format, false otherwise. + */ + public boolean isDepthFormat(){ + return isDepth; + } + + /** + * @return True if this format is a depth + stencil (packed) format, false otherwise. + */ + boolean isDepthStencilFormat() { + return this == Depth24Stencil8; + } + + /** + * @return True if this is a compressed image format, false if + * uncompressed. + */ + public boolean isCompressed() { + return isCompressed; + } + + /** + * @return True if this image format is in floating point, + * false if it is an integer format. + */ + public boolean isFloatingPont(){ + return isFloatingPoint; + } + + + + } + + // image attributes + protected Format format; + protected int width, height, depth; + protected int[] mipMapSizes; + protected ArrayList data; + protected int multiSamples = 1; + protected ColorSpace colorSpace = null; +// protected int mipOffset = 0; + + // attributes relating to GL object + protected boolean mipsWereGenerated = false; + protected boolean needGeneratedMips = false; + protected LastTextureState lastTextureState = new LastTextureState(); + + /** + * Internal use only. + * The renderer stores the texture state set from the last texture, + * so it doesn't have to change it unless necessary. + * + * @return The image parameter state. + */ + public LastTextureState getLastTextureState() { + return lastTextureState; + } + + /** + * Internal use only. + * The renderer marks which images have generated mipmaps in VRAM + * and which do not, so it can generate them as needed. + * + * @param generated If mipmaps were generated or not. + */ + public void setMipmapsGenerated(boolean generated) { + this.mipsWereGenerated = generated; + } + + /** + * Internal use only. + * Check if the renderer has generated mipmaps for this image in VRAM + * or not. + * + * @return If mipmaps were generated already. + */ + public boolean isMipmapsGenerated() { + return mipsWereGenerated; + } + + /** + * (Package private) Called by {@link GlTexture} when + * {@link #isMipmapsGenerated() } is false in order to generate + * mipmaps for this image. + */ + void setNeedGeneratedMipmaps() { + needGeneratedMips = true; + } + + /** + * @return True if the image needs to have mipmaps generated + * for it (as requested by the texture). This stays true even + * after mipmaps have been generated. + */ + public boolean isGeneratedMipmapsRequired() { + return needGeneratedMips; + } + + /** + * Determine if the image is NPOT. + * + * @return if the image is a non-power-of-2 image, e.g. having dimensions + * that are not powers of 2. + */ + public boolean isNPOT() { + return width != 0 && height != 0 + && (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height)); + } + + @Override + public void resetObject() { + this.object = -1; + this.mipsWereGenerated = false; + this.lastTextureState.reset(); + setUpdateNeeded(); + } + + @Override + public Runnable createNativeDestroyer() { + return () -> renderer.deleteImage(new GlImage(object)); + } + + /** + * @return A shallow clone of this image. The data is not cloned. + */ + @Override + public GlImage clone(){ + GlImage clone = (GlImage) super.clone(); + clone.mipMapSizes = mipMapSizes != null ? mipMapSizes.clone() : null; + clone.data = data != null ? new ArrayList<>(data) : null; + clone.lastTextureState = new LastTextureState(); + clone.setUpdateNeeded(); + return clone; + } + + /** + * Constructor instantiates a new Image object. All values + * are undefined. + */ + public GlImage() { + super(); + data = new ArrayList(1); + } + + protected GlImage(int id) { + super(id); + } + + /** + * Constructor instantiates a new Image object. The + * attributes of the image are defined during construction. + * + * @param format + * the data format of the image. + * @param width + * the width of the image. + * @param height + * the height of the image. + * @param depth + * the desired image depth + * @param data + * the image data. + * @param mipMapSizes + * the array of mipmap sizes, or null for no mipmaps. + * @param colorSpace + * the colorSpace of the image + */ + public GlImage(Format format, int width, int height, int depth, ArrayList data, + int[] mipMapSizes, ColorSpace colorSpace) { + + this(); + + if (mipMapSizes != null) { + if (mipMapSizes.length <= 1) { + mipMapSizes = null; + } else { + needGeneratedMips = false; + mipsWereGenerated = true; + } + } + + setFormat(format); + this.width = width; + this.height = height; + this.data = data; + this.depth = depth; + this.mipMapSizes = mipMapSizes; + this.colorSpace = colorSpace; + } + + /** + * @see #GlImage(GlImage.Format, int, int, int, java.util.ArrayList, int[], com.jme3.texture.image.ColorSpace) + * @param format the desired data format + * @param width the desired width (in pixels) + * @param height the desired height (in pixels) + * @param depth the desired image depth + * @param data the image data to use + * @param mipMapSizes the desired mipmap sizes, or null for no mipmaps + * @deprecated use {@link #GlImage(GlImage.Format, int, int, int, java.util.ArrayList, int[], com.jme3.texture.image.ColorSpace)} + */ + @Deprecated + public GlImage(Format format, int width, int height, int depth, ArrayList data, + int[] mipMapSizes) { + this(format, width, height, depth, data, mipMapSizes, ColorSpace.Linear); + } + + /** + * Constructor instantiates a new Image object. The + * attributes of the image are defined during construction. + * + * @param format + * the data format of the image. + * @param width + * the width of the image. + * @param height + * the height of the image. + * @param data + * the image data. + * @param mipMapSizes + * the array of mipmap sizes, or null for no mipmaps. + * @param colorSpace + * the colorSpace of the image + */ + public GlImage(Format format, int width, int height, ByteBuffer data, + int[] mipMapSizes, ColorSpace colorSpace) { + + this(); + + if (mipMapSizes != null) { + if (mipMapSizes.length <= 1) { + mipMapSizes = null; + } else { + needGeneratedMips = false; + mipsWereGenerated = true; + } + } + + setFormat(format); + this.width = width; + this.height = height; + if (data != null){ + this.data = new ArrayList(1); + this.data.add(data); + } + this.mipMapSizes = mipMapSizes; + this.colorSpace = colorSpace; + } + + /** + * @see #GlImage(GlImage.Format, int, int, java.nio.ByteBuffer, int[], com.jme3.texture.image.ColorSpace) + * @param format the desired data format + * @param width the desired width (in pixels) + * @param height the desired height (in pixels) + * @param data the image data to use + * @param mipMapSizes the desired mipmap sizes, or null for no mipmaps + * @deprecated use {@link #GlImage(GlImage.Format, int, int, java.nio.ByteBuffer, int[], com.jme3.texture.image.ColorSpace)} + */ + @Deprecated + public GlImage(Format format, int width, int height, ByteBuffer data, + int[] mipMapSizes) { + this(format, width, height, data, mipMapSizes, ColorSpace.Linear); + } + + /** + * Constructor instantiates a new Image object. The + * attributes of the image are defined during construction. + * + * @param format + * the data format of the image. + * @param width + * the width of the image. + * @param height + * the height of the image. + * @param depth + * the desired image depth + * @param data + * the image data. + * @param colorSpace + * the colorSpace of the image + */ + public GlImage(Format format, int width, int height, int depth, ArrayList data, ColorSpace colorSpace) { + this(format, width, height, depth, data, null, colorSpace); + } + + /** + * @see #GlImage(GlImage.Format, int, int, int, java.util.ArrayList, com.jme3.texture.image.ColorSpace) + * @param format the desired data format + * @param width the desired width (in pixels) + * @param height the desired height (in pixels) + * @param depth the desired image depth + * @param data the image data to use + * @deprecated use {@link #GlImage(GlImage.Format, int, int, int, java.util.ArrayList, com.jme3.texture.image.ColorSpace)} + */ + @Deprecated + public GlImage(Format format, int width, int height, int depth, ArrayList data) { + this(format, width, height, depth, data, ColorSpace.Linear); + } + + /** + * Constructor instantiates a new Image object. The + * attributes of the image are defined during construction. + * + * @param format + * the data format of the image. + * @param width + * the width of the image. + * @param height + * the height of the image. + * @param data + * the image data. + * @param colorSpace + * the colorSpace of the image + */ + public GlImage(Format format, int width, int height, ByteBuffer data, ColorSpace colorSpace) { + this(format, width, height, data, null, colorSpace); + } + + + /** + * @see #GlImage(GlImage.Format, int, int, java.nio.ByteBuffer, com.jme3.texture.image.ColorSpace) + * @param format the desired data format + * @param width the desired width (in pixels) + * @param height the desired height (in pixels) + * @param data the image data + * @deprecated use {@link #GlImage(GlImage.Format, int, int, java.nio.ByteBuffer, com.jme3.texture.image.ColorSpace)} + */ + @Deprecated + public GlImage(Format format, int width, int height, ByteBuffer data) { + this(format, width, height, data, null, ColorSpace.Linear); + } + + + /** + * @return The number of samples (for multisampled textures). + * @see GlImage#setMultiSamples(int) + */ + public int getMultiSamples() { + return multiSamples; + } + + /** + * @param multiSamples Set the number of samples to use for this image, + * setting this to a value higher than 1 turns this image/texture + * into a multisample texture (on OpenGL3.1 and higher). + */ + public void setMultiSamples(int multiSamples) { + if (multiSamples <= 0) { + throw new IllegalArgumentException("multiSamples must be > 0"); + } + + if (multiSamples > 1) { + if (getData(0) != null) { + throw new IllegalArgumentException("Cannot upload data as multisample texture"); + } + + if (hasMipmaps()) { + throw new IllegalArgumentException("Multisample textures do not support mipmaps"); + } + } + + this.multiSamples = multiSamples; + } + + /** + * setData sets the data that makes up the image. This data + * is packed into an array of ByteBuffer objects. + * + * @param data + * the data that contains the image information. + */ + public void setData(ArrayList data) { + this.data = data; + setUpdateNeeded(); + } + + /** + * setData sets the data that makes up the image. This data + * is packed into a single ByteBuffer. + * + * @param data + * the data that contains the image information. + */ + public void setData(ByteBuffer data) { + this.data = new ArrayList(1); + this.data.add(data); + setUpdateNeeded(); + } + + public void addData(ByteBuffer data) { + if (this.data == null) + this.data = new ArrayList(1); + this.data.add(data); + setUpdateNeeded(); + } + + public void setData(int index, ByteBuffer data) { + if (index >= 0) { + while (this.data.size() <= index) { + this.data.add(null); + } + this.data.set(index, data); + setUpdateNeeded(); + } else { + throw new IllegalArgumentException("index must be greater than or equal to 0."); + } + } + + /** + * @return null + * @deprecated This feature is no longer used by the engine + */ + @Deprecated + public Object getEfficentData(){ + return null; + } + + /** + * Sets the mipmap sizes stored in this image's data buffer. Mipmaps are + * stored sequentially, and the first mipmap is the main image data. To + * specify no mipmaps, pass null and this will automatically be expanded + * into a single mipmap of the full + * + * @param mipMapSizes + * the mipmap sizes array, or null for a single image map. + */ + public void setMipMapSizes(int[] mipMapSizes) { + if (mipMapSizes != null && mipMapSizes.length <= 1) + mipMapSizes = null; + + this.mipMapSizes = mipMapSizes; + + if (mipMapSizes != null) { + needGeneratedMips = false; + mipsWereGenerated = false; + } else { + needGeneratedMips = true; + mipsWereGenerated = false; + } + + setUpdateNeeded(); + } + + /** + * setHeight sets the height value of the image. It is + * typically a good idea to try to keep this as a multiple of 2. + * + * @param height + * the height of the image. + */ + public void setHeight(int height) { + this.height = height; + setUpdateNeeded(); + } + + /** + * setDepth sets the depth value of the image. It is + * typically a good idea to try to keep this as a multiple of 2. This is + * used for 3d images. + * + * @param depth + * the depth of the image. + */ + public void setDepth(int depth) { + this.depth = depth; + setUpdateNeeded(); + } + + /** + * setWidth sets the width value of the image. It is + * typically a good idea to try to keep this as a multiple of 2. + * + * @param width + * the width of the image. + */ + public void setWidth(int width) { + this.width = width; + setUpdateNeeded(); + } + + /** + * setFormat sets the image format for this image. + * + * @param format + * the image format (not null) + * @throws IllegalArgumentException + * if format is null + * @see Format + */ + public void setFormat(Format format) { + if (format == null) { + throw new IllegalArgumentException("format may not be null."); + } + + this.format = format; + setUpdateNeeded(); + } + + /** + * getFormat returns the image format for this image. + * + * @return the image format. + * @see Format + */ + public Format getGlFormat() { + return format; + } + + @Override + public com.jme3.vulkan.Format getFormat() { + // todo: merge com.jme3.vulkan.Format and GlImage.Format + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public long getId() { + return object; + } + + @Override + public IntEnum getType() { + return VulkanImage.Type.TwoDemensional; + } + + /** + * getWidth returns the width of this image. + * + * @return the width of this image. + */ + @Override + public int getWidth() { + return width; + } + + /** + * getHeight returns the height of this image. + * + * @return the height of this image. + */ + @Override + public int getHeight() { + return height; + } + + /** + * getDepth returns the depth of this image (for 3d images). + * + * @return the depth of this image. + */ + @Override + public int getDepth() { + return depth; + } + + @Override + public int getMipmaps() { + // todo: check for accuracy (maybe refactor gl mipmaps?) + return mipMapSizes.length; + } + + @Override + public int getLayers() { + // todo: implement properly + return 1; + } + + /** + * getData returns the data for this image. If the data is + * undefined, null will be returned. + * + * @return the data for this image. + */ + public List getData() { + return data; + } + + /** + * getData returns the data for this image. If the data is + * undefined, null will be returned. + * + * @param index index of the data buffer to access + * @return the data for this image. + */ + public ByteBuffer getData(int index) { + if (data.size() > index) + return data.get(index); + else + return null; + } + + /** + * Returns whether the image data contains mipmaps. + * + * @return true if the image data contains mipmaps, false if not. + */ + public boolean hasMipmaps() { + return mipMapSizes != null; + } + + /** + * Returns the mipmap sizes for this image. + * + * @return the mipmap sizes for this image. + */ + public int[] getMipMapSizes() { + return mipMapSizes; + } + + /** + * image loader is responsible for setting this attribute based on the color + * space in which the image has been encoded with. In the majority of cases, + * this flag will be set to sRGB by default since many image formats do not + * contain any color space information and the most frequently used colors + * space is sRGB + * + * The material loader may override this attribute to Linear if it determines that + * such conversion must not be performed, for example, when loading normal + * maps. + * + * @param colorSpace Set to sRGB to enable srgb -> linear + * conversion, Linear otherwise. + * + * @see Renderer#setLinearizeSrgbImages(boolean) + * + */ + public void setColorSpace(ColorSpace colorSpace) { + this.colorSpace = colorSpace; + } + + /** + * Specifies that this image is an SRGB image and therefore must undergo an + * sRGB -> linear RGB color conversion prior to being read by a shader and + * with the {@link Renderer#setLinearizeSrgbImages(boolean)} option is + * enabled. + * + * This option is only supported for the 8-bit color and grayscale image + * formats. Determines if the image is in SRGB color space or not. + * + * @return True, if the image is an SRGB image, false if it is linear RGB. + * + * @see Renderer#setLinearizeSrgbImages(boolean) + */ + public ColorSpace getColorSpace() { + return colorSpace; + } + + @Override + public String toString(){ + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append("[size=").append(width).append("x").append(height); + + if (depth > 1) + sb.append("x").append(depth); + + sb.append(", format=").append(format.name()); + + if (hasMipmaps()) + sb.append(", mips"); + + if (getNativeObject() >= 0) + sb.append(", id=").append(object); + + sb.append("]"); + + return sb.toString(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if (!(other instanceof GlImage)) { + return false; + } + GlImage that = (GlImage) other; + if (this.getGlFormat() != that.getGlFormat()) + return false; + if (this.getWidth() != that.getWidth()) + return false; + if (this.getHeight() != that.getHeight()) + return false; + if (this.getData() != null && !this.getData().equals(that.getData())) + return false; + if (this.getData() == null && that.getData() != null) + return false; + if (this.getMipMapSizes() != null + && !Arrays.equals(this.getMipMapSizes(), that.getMipMapSizes())) + return false; + if (this.getMipMapSizes() == null && that.getMipMapSizes() != null) + return false; + if (this.getMultiSamples() != that.getMultiSamples()) + return false; + + return true; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 97 * hash + (this.format != null ? this.format.hashCode() : 0); + hash = 97 * hash + this.width; + hash = 97 * hash + this.height; + hash = 97 * hash + this.depth; + hash = 97 * hash + Arrays.hashCode(this.mipMapSizes); + hash = 97 * hash + (this.data != null ? this.data.hashCode() : 0); + hash = 97 * hash + this.multiSamples; + return hash; + } + + @Override + public void write(JmeExporter e) throws IOException { + OutputCapsule capsule = e.getCapsule(this); + capsule.write(format, "format", Format.RGBA8); + capsule.write(width, "width", 0); + capsule.write(height, "height", 0); + capsule.write(depth, "depth", 0); + capsule.write(mipMapSizes, "mipMapSizes", null); + capsule.write(multiSamples, "multiSamples", 1); + capsule.writeByteBufferArrayList(data, "data", null); + capsule.write(colorSpace, "colorSpace", null); + } + + @Override + public void read(JmeImporter importer) throws IOException { + InputCapsule capsule = importer.getCapsule(this); + format = capsule.readEnum("format", Format.class, Format.RGBA8); + width = capsule.readInt("width", 0); + height = capsule.readInt("height", 0); + depth = capsule.readInt("depth", 0); + mipMapSizes = capsule.readIntArray("mipMapSizes", null); + multiSamples = capsule.readInt("multiSamples", 1); + data = capsule.readByteBufferArrayList("data", null); + colorSpace = capsule.readEnum("colorSpace", ColorSpace.class, null); + if (mipMapSizes != null) { + needGeneratedMips = false; + mipsWereGenerated = true; + } + } + +} diff --git a/jme3-core/src/main/java/com/jme3/texture/ImageView.java b/jme3-core/src/main/java/com/jme3/texture/ImageView.java new file mode 100644 index 0000000000..ae0babfa48 --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/texture/ImageView.java @@ -0,0 +1,19 @@ +package com.jme3.texture; + +import com.jme3.vulkan.images.GpuImage; + +public interface ImageView { + + long getId(); + + T getImage(); + + int getBaseMipmap(); + + int getMipmapCount(); + + int getBaseLayer(); + + int getLayerCount(); + +} diff --git a/jme3-core/src/main/java/com/jme3/texture/Texture.java b/jme3-core/src/main/java/com/jme3/texture/Texture.java index 3ba9b78128..fabca33f88 100644 --- a/jme3-core/src/main/java/com/jme3/texture/Texture.java +++ b/jme3-core/src/main/java/com/jme3/texture/Texture.java @@ -1,647 +1,15 @@ -/* - * Copyright (c) 2009-2021 jMonkeyEngine - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'jMonkeyEngine' nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ package com.jme3.texture; -import com.jme3.asset.AssetKey; -import com.jme3.asset.AssetNotFoundException; -import com.jme3.asset.CloneableSmartAsset; -import com.jme3.asset.TextureKey; -import com.jme3.export.*; -import com.jme3.util.PlaceholderAssets; -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; +import com.jme3.vulkan.images.GpuImage; -/** - * Texture defines a texture object to be used to display an - * image on a piece of geometry. The image to be displayed is defined by the - * Image class. All attributes required for texture mapping are - * contained within this class. This includes mipmapping if desired, - * magnificationFilter options, apply options and correction options. Default - * values are as follows: minificationFilter - NearestNeighborNoMipMaps, - * magnificationFilter - NearestNeighbor, wrap - EdgeClamp on S,T and R, apply - - * Modulate, environment - None. - * - * @see com.jme3.texture.Image - * @author Mark Powell - * @author Joshua Slack - * @version $Id: Texture.java 4131 2009-03-19 20:15:28Z blaine.dev $ - */ -public abstract class Texture implements CloneableSmartAsset, Savable, Cloneable { +public interface Texture , I extends GpuImage> { - public enum Type { + long getId(); - /** - * Two dimensional texture (default). A rectangle. - */ - TwoDimensional, + V getView(); - /** - * An array of two-dimensional textures. - */ - TwoDimensionalArray, - - /** - * Three-dimensional texture. (A cube) - */ - ThreeDimensional, - - /** - * A set of 6 TwoDimensional textures arranged as faces of a cube facing - * inwards. - */ - CubeMap; + default I getImage() { + return getView().getImage(); } - public enum MinFilter { - - /** - * Nearest neighbor interpolation is the fastest and crudest filtering - * method - it simply uses the color of the texel closest to the pixel - * center for the pixel color. While fast, this results in aliasing and - * shimmering during minification. (GL equivalent: GL_NEAREST) - */ - NearestNoMipMaps(false), - - /** - * In this method the four nearest texels to the pixel center are - * sampled (at texture level 0), and their colors are combined by - * weighted averages. Though smoother, without mipmaps it suffers the - * same aliasing and shimmering problems as nearest - * NearestNeighborNoMipMaps. (GL equivalent: GL_LINEAR) - */ - BilinearNoMipMaps(false), - - /** - * Same as NearestNeighborNoMipMaps except that instead of using samples - * from texture level 0, the closest mipmap level is chosen based on - * distance. This reduces the aliasing and shimmering significantly, but - * does not help with blockiness. (GL equivalent: - * GL_NEAREST_MIPMAP_NEAREST) - */ - NearestNearestMipMap(true), - - /** - * Same as BilinearNoMipMaps except that instead of using samples from - * texture level 0, the closest mipmap level is chosen based on - * distance. By using mipmapping we avoid the aliasing and shimmering - * problems of BilinearNoMipMaps. (GL equivalent: - * GL_LINEAR_MIPMAP_NEAREST) - */ - BilinearNearestMipMap(true), - - /** - * Similar to NearestNeighborNoMipMaps except that instead of using - * samples from texture level 0, a sample is chosen from each of the - * closest (by distance) two mipmap levels. A weighted average of these - * two samples is returned. (GL equivalent: GL_NEAREST_MIPMAP_LINEAR) - */ - NearestLinearMipMap(true), - - /** - * Trilinear filtering is a remedy to a common artifact seen in - * mipmapped bilinearly filtered images: an abrupt and very noticeable - * change in quality at boundaries where the renderer switches from one - * mipmap level to the next. Trilinear filtering solves this by doing a - * texture lookup and bilinear filtering on the two closest mipmap - * levels (one higher and one lower quality), and then linearly - * interpolating the results. This results in a smooth degradation of - * texture quality as distance from the viewer increases, rather than a - * series of sudden drops. Of course, closer than Level 0 there is only - * one mipmap level available, and the algorithm reverts to bilinear - * filtering (GL equivalent: GL_LINEAR_MIPMAP_LINEAR) - */ - Trilinear(true); - - private final boolean usesMipMapLevels; - - private MinFilter(boolean usesMipMapLevels) { - this.usesMipMapLevels = usesMipMapLevels; - } - - public boolean usesMipMapLevels() { - return usesMipMapLevels; - } - } - - public enum MagFilter { - - /** - * Nearest neighbor interpolation is the fastest and crudest filtering - * mode - it simply uses the color of the texel closest to the pixel - * center for the pixel color. While fast, this results in texture - * 'blockiness' during magnification. (GL equivalent: GL_NEAREST) - */ - Nearest, - - /** - * In this mode the four nearest texels to the pixel center are sampled - * (at the closest mipmap level), and their colors are combined by - * weighted average according to distance. This removes the 'blockiness' - * seen during magnification, as there is now a smooth gradient of color - * change from one texel to the next, instead of an abrupt jump as the - * pixel center crosses the texel boundary. (GL equivalent: GL_LINEAR) - */ - Bilinear; - - } - - public enum WrapMode { - /** - * Only the fractional portion of the coordinate is considered. - */ - Repeat, - - /** - * Only the fractional portion of the coordinate is considered, but if - * the integer portion is odd, we'll use 1 - the fractional portion. - * (Introduced around OpenGL1.4) Falls back on Repeat if not supported. - */ - MirroredRepeat, - - /** - * coordinate will be clamped to [0,1] - * - * @deprecated Not supported by OpenGL 3 - */ - @Deprecated - Clamp, - /** - * mirrors and clamps the texture coordinate, where mirroring and - * clamping a value f computes: - * mirrorClamp(f) = min(1, max(1/(2*N), - * abs(f))) where N - * is the size of the one-, two-, or three-dimensional texture image in - * the direction of wrapping. (Introduced after OpenGL1.4) Falls back on - * Clamp if not supported. - * - * @deprecated Not supported by OpenGL 3 - */ - @Deprecated - MirrorClamp, - - /** - * coordinate will be clamped to the range [-1/(2N), 1 + 1/(2N)] where N - * is the size of the texture in the direction of clamping. Falls back - * on Clamp if not supported. - * - * @deprecated Not supported by OpenGL 3 or OpenGL ES 2 - */ - @Deprecated - BorderClamp, - /** - * Wrap mode MIRROR_CLAMP_TO_BORDER_EXT mirrors and clamps to border the - * texture coordinate, where mirroring and clamping to border a value f - * computes: - * mirrorClampToBorder(f) = min(1+1/(2*N), max(1/(2*N), abs(f))) - * where N is the size of the one-, two-, or three-dimensional texture - * image in the direction of wrapping. (Introduced after OpenGL1.4) - * Falls back on BorderClamp if not supported. - * - * @deprecated Not supported by OpenGL 3 - */ - @Deprecated - MirrorBorderClamp, - /** - * coordinate will be clamped to the range [1/(2N), 1 - 1/(2N)] where N - * is the size of the texture in the direction of clamping. Falls back - * on Clamp if not supported. - */ - EdgeClamp, - - /** - * mirrors and clamps to edge the texture coordinate, where mirroring - * and clamping to edge a value f computes: - * mirrorClampToEdge(f) = min(1-1/(2*N), max(1/(2*N), abs(f))) - * where N is the size of the one-, two-, or three-dimensional texture - * image in the direction of wrapping. (Introduced after OpenGL1.4) - * Falls back on EdgeClamp if not supported. - * - * @deprecated Not supported by OpenGL 3 - */ - @Deprecated - MirrorEdgeClamp; - } - - public enum WrapAxis { - /** - * S wrapping (u or "horizontal" wrap) - */ - S, - /** - * T wrapping (v or "vertical" wrap) - */ - T, - /** - * R wrapping (w or "depth" wrap) - */ - R; - } - - /** - * If this texture is a depth texture (the format is Depth*) then - * this value may be used to compare the texture depth to the R texture - * coordinate. - */ - public enum ShadowCompareMode { - /** - * Shadow comparison mode is disabled. - * Texturing is done normally. - */ - Off, - - /** - * {@code - * Compares the 3rd texture coordinate R to the value - * in this depth texture. If R <= texture value then result is 1.0, - * otherwise, result is 0.0. If filtering is set to bilinear or trilinear - * the implementation may sample the texture multiple times to provide - * smoother results in the range [0, 1].} - */ - LessOrEqual, - - /** - * {@code - * Compares the 3rd texture coordinate R to the value - * in this depth texture. If R >= texture value then result is 1.0, - * otherwise, result is 0.0. If filtering is set to bilinear or trilinear - * the implementation may sample the texture multiple times to provide - * smoother results in the range [0, 1].} - */ - GreaterOrEqual - } - - /** - * The name of the texture (if loaded as a resource). - */ - private String name = null; - - /** - * The image stored in the texture - */ - private Image image = null; - - /** - * The texture key allows to reload a texture from a file - * if needed. - */ - private TextureKey key = null; - - private MinFilter minificationFilter = MinFilter.BilinearNoMipMaps; - private MagFilter magnificationFilter = MagFilter.Bilinear; - private ShadowCompareMode shadowCompareMode = ShadowCompareMode.Off; - private int anisotropicFilter; - - /** - * @return A cloned Texture object. - */ - @Override - public Texture clone(){ - try { - return (Texture) super.clone(); - } catch (CloneNotSupportedException ex) { - throw new AssertionError(); - } - } - - /** - * Constructor instantiates a new Texture object with default - * attributes. - */ - public Texture() { - } - - /** - * @return the MinificationFilterMode of this texture. - */ - public MinFilter getMinFilter() { - return minificationFilter; - } - - /** - * @param minificationFilter - * the new MinificationFilterMode for this texture. - * @throws IllegalArgumentException - * if minificationFilter is null - */ - public void setMinFilter(MinFilter minificationFilter) { - if (minificationFilter == null) { - throw new IllegalArgumentException( - "minificationFilter can not be null."); - } - this.minificationFilter = minificationFilter; - if (minificationFilter.usesMipMapLevels() && image != null && !image.isGeneratedMipmapsRequired() && !image.hasMipmaps()) { - image.setNeedGeneratedMipmaps(); - } - } - - /** - * @return the MagnificationFilterMode of this texture. - */ - public MagFilter getMagFilter() { - return magnificationFilter; - } - - /** - * @param magnificationFilter - * the new MagnificationFilter for this texture. - * @throws IllegalArgumentException - * if magnificationFilter is null - */ - public void setMagFilter(MagFilter magnificationFilter) { - if (magnificationFilter == null) { - throw new IllegalArgumentException( - "magnificationFilter can not be null."); - } - this.magnificationFilter = magnificationFilter; - } - - /** - * @return The ShadowCompareMode of this texture. - * @see ShadowCompareMode - */ - public ShadowCompareMode getShadowCompareMode(){ - return shadowCompareMode; - } - - /** - * @param compareMode - * the new ShadowCompareMode for this texture. - * @throws IllegalArgumentException - * if compareMode is null - * @see ShadowCompareMode - */ - public void setShadowCompareMode(ShadowCompareMode compareMode){ - if (compareMode == null){ - throw new IllegalArgumentException( - "compareMode can not be null."); - } - this.shadowCompareMode = compareMode; - } - - /** - * setImage sets the image object that defines the texture. - * - * @param image - * the image that defines the texture. - */ - public void setImage(Image image) { - this.image = image; - - // Test if mipmap generation required. - setMinFilter(getMinFilter()); - } - - /** - * @param key The texture key that was used to load this texture - */ - @Override - public void setKey(AssetKey key){ - this.key = (TextureKey) key; - } - - @Override - public AssetKey getKey(){ - return this.key; - } - - /** - * getImage returns the image data that makes up this - * texture. If no image data has been set, this will return null. - * - * @return the image data that makes up the texture. - */ - public Image getImage() { - return image; - } - - /** - * setWrap sets the wrap mode of this texture for a - * particular axis. - * - * @param axis - * the texture axis to apply the wrap mode to. - * @param mode - * the wrap mode for the given axis of the texture. - * @throws IllegalArgumentException - * if axis or mode are null or invalid for this type of texture - */ - public abstract void setWrap(WrapAxis axis, WrapMode mode); - - /** - * setWrap sets the wrap mode of this texture for all axis. - * - * @param mode - * the wrap mode for the given axis of the texture. - * @throws IllegalArgumentException - * if mode is null or invalid for this type of texture - */ - public abstract void setWrap(WrapMode mode); - - /** - * getWrap returns the wrap mode for a given coordinate axis - * on this texture. - * - * @param axis - * the axis to return for - * @return the wrap mode of the texture. - * @throws IllegalArgumentException - * if axis is null or invalid for this type of texture - */ - public abstract WrapMode getWrap(WrapAxis axis); - - public abstract Type getType(); - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - /** - * @return the anisotropic filtering level for this texture. Default value - * is 0 (use value from config), - * 1 means 1x (no anisotropy), 2 means x2, 4 is x4, etc. - */ - public int getAnisotropicFilter() { - return anisotropicFilter; - } - - /** - * @param level - * the anisotropic filtering level for this texture. - */ - public void setAnisotropicFilter(int level) { - anisotropicFilter = Math.max(0, level); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(getClass().getSimpleName()); - sb.append("[name=").append(name); - if (image != null) { - sb.append(", image=").append(image.toString()); - } - - sb.append("]"); - return sb.toString(); - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final Texture other = (Texture) obj; - - // NOTE: Since images are generally considered unique assets in jME3, - // using the image's equals() implementation is not necessary here - // (would be too slow) - if (this.image != other.image) { - return false; - } - if (this.minificationFilter != other.minificationFilter) { - return false; - } - if (this.magnificationFilter != other.magnificationFilter) { - return false; - } - if (this.shadowCompareMode != other.shadowCompareMode) { - return false; - } - if (this.anisotropicFilter != other.anisotropicFilter) { - return false; - } - return true; - } - - @Override - public int hashCode() { - int hash = 5; - // NOTE: Since images are generally considered unique assets in jME3, - // using the image's hashCode() implementation is not necessary here - // (would be too slow) - hash = 67 * hash + (this.image != null ? System.identityHashCode(this.image) : 0); - hash = 67 * hash + (this.minificationFilter != null ? this.minificationFilter.hashCode() : 0); - hash = 67 * hash + (this.magnificationFilter != null ? this.magnificationFilter.hashCode() : 0); - hash = 67 * hash + (this.shadowCompareMode != null ? this.shadowCompareMode.hashCode() : 0); - hash = 67 * hash + this.anisotropicFilter; - return hash; - } - - /** Retrieve a basic clone of this Texture (ie, clone everything but the - * image data, which is shared) - * - * @param rVal storage for the clone (not null, modified) - * @return Texture - * - * @deprecated Use {@link Texture#clone()} instead. - */ - @Deprecated - public Texture createSimpleClone(Texture rVal) { - rVal.setMinFilter(minificationFilter); - rVal.setMagFilter(magnificationFilter); - rVal.setShadowCompareMode(shadowCompareMode); - rVal.setAnisotropicFilter(anisotropicFilter); - rVal.setImage(image); // NOT CLONED. - rVal.setKey(key); - rVal.setName(name); - return rVal; - } - - /** - * @return a new Texture - * @deprecated Use {@link Texture#clone()} instead. - */ - @Deprecated - public abstract Texture createSimpleClone(); - - @Override - public void write(JmeExporter e) throws IOException { - OutputCapsule capsule = e.getCapsule(this); - capsule.write(name, "name", null); - - if (key == null){ - // no texture key is set, try to save image instead then - capsule.write(image, "image", null); - }else{ - capsule.write(key, "key", null); - } - - capsule.write(anisotropicFilter, "anisotropicFilter", 1); - capsule.write(minificationFilter, "minificationFilter", - MinFilter.BilinearNoMipMaps); - capsule.write(magnificationFilter, "magnificationFilter", - MagFilter.Bilinear); - } - - @Override - public void read(JmeImporter importer) throws IOException { - InputCapsule capsule = importer.getCapsule(this); - name = capsule.readString("name", null); - key = (TextureKey) capsule.readSavable("key", null); - - // load texture from key, if available - if (key != null) { - // key is available, so try the texture from there. - try { - Texture loadedTex = importer.getAssetManager().loadTexture(key); - image = loadedTex.getImage(); - } catch (AssetNotFoundException ex){ - Logger.getLogger(Texture.class.getName()).log(Level.SEVERE, "Cannot locate texture {0}", key); - image = PlaceholderAssets.getPlaceholderImage(importer.getAssetManager()); - } - }else{ - // no key is set on the texture. Attempt to load an embedded image - image = (Image) capsule.readSavable("image", null); - if (image == null){ - // TODO: what to print out here? the texture has no key or data, there's no useful information .. - // assume texture.name is set even though the key is null - Logger.getLogger(Texture.class.getName()) - .log(Level.SEVERE, "Cannot load embedded image {0}", toString()); - } - } - - setAnisotropicFilter(capsule.readInt("anisotropicFilter", 1)); - setMinFilter(capsule.readEnum("minificationFilter", - MinFilter.class, - MinFilter.BilinearNoMipMaps)); - setMagFilter(capsule.readEnum("magnificationFilter", - MagFilter.class, MagFilter.Bilinear)); - } } diff --git a/jme3-core/src/main/java/com/jme3/texture/Texture2D.java b/jme3-core/src/main/java/com/jme3/texture/Texture2D.java index ab633aed49..d221c075f1 100644 --- a/jme3-core/src/main/java/com/jme3/texture/Texture2D.java +++ b/jme3-core/src/main/java/com/jme3/texture/Texture2D.java @@ -41,7 +41,7 @@ /** * @author Joshua Slack */ -public class Texture2D extends Texture { +public class Texture2D extends GlTexture { private WrapMode wrapS = WrapMode.EdgeClamp; private WrapMode wrapT = WrapMode.EdgeClamp; @@ -57,7 +57,7 @@ public Texture2D(){ * Creates a new two-dimensional texture using the given image. * @param img The image to use. */ - public Texture2D(Image img){ + public Texture2D(GlImage img){ super(); setImage(img); if (img.getData(0) == null) { @@ -76,8 +76,8 @@ public Texture2D(Image img){ * @param height the desired height (in pixels) * @param format the desired format */ - public Texture2D(int width, int height, Image.Format format){ - this(new Image(format, width, height, null, ColorSpace.Linear)); + public Texture2D(int width, int height, GlImage.Format format){ + this(new GlImage(format, width, height, null, ColorSpace.Linear)); } /** @@ -91,20 +91,20 @@ public Texture2D(int width, int height, Image.Format format){ * @param numSamples the desired degree of multi-sampling (≥1) * @param format the desired format */ - public Texture2D(int width, int height, int numSamples, Image.Format format){ - this(new Image(format, width, height, null, ColorSpace.Linear)); + public Texture2D(int width, int height, int numSamples, GlImage.Format format){ + this(new GlImage(format, width, height, null, ColorSpace.Linear)); getImage().setMultiSamples(numSamples); } @Override - public Texture createSimpleClone() { + public GlTexture createSimpleClone() { Texture2D clone = new Texture2D(); createSimpleClone(clone); return clone; } @Override - public Texture createSimpleClone(Texture rVal) { + public GlTexture createSimpleClone(GlTexture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); return super.createSimpleClone(rVal); diff --git a/jme3-core/src/main/java/com/jme3/texture/Texture3D.java b/jme3-core/src/main/java/com/jme3/texture/Texture3D.java index bb12a858dd..22b44775a4 100644 --- a/jme3-core/src/main/java/com/jme3/texture/Texture3D.java +++ b/jme3-core/src/main/java/com/jme3/texture/Texture3D.java @@ -41,7 +41,7 @@ /** * @author Maarten Steur */ -public class Texture3D extends Texture { +public class Texture3D extends GlTexture { private WrapMode wrapS = WrapMode.EdgeClamp; private WrapMode wrapT = WrapMode.EdgeClamp; @@ -58,10 +58,10 @@ public Texture3D() { * Creates a new three-dimensional texture using the given image. * @param img The image to use. */ - public Texture3D(Image img) { + public Texture3D(GlImage img) { super(); setImage(img); - if (img.getFormat().isDepthFormat()) { + if (img.getGlFormat().isDepthFormat()) { setMagFilter(MagFilter.Nearest); setMinFilter(MinFilter.NearestNoMipMaps); } @@ -78,8 +78,8 @@ public Texture3D(Image img) { * @param depth the desired depth * @param format the desired format */ - public Texture3D(int width, int height, int depth, Image.Format format) { - this(new Image(format, width, height, depth, null, ColorSpace.Linear)); + public Texture3D(int width, int height, int depth, GlImage.Format format) { + this(new GlImage(format, width, height, depth, null, ColorSpace.Linear)); } /** @@ -94,20 +94,20 @@ public Texture3D(int width, int height, int depth, Image.Format format) { * @param numSamples the desired degree of multi-sampling (≥1) * @param format the desired format */ - public Texture3D(int width, int height, int depth, int numSamples, Image.Format format) { - this(new Image(format, width, height, depth, null, ColorSpace.Linear)); + public Texture3D(int width, int height, int depth, int numSamples, GlImage.Format format) { + this(new GlImage(format, width, height, depth, null, ColorSpace.Linear)); getImage().setMultiSamples(numSamples); } @Override - public Texture createSimpleClone() { + public GlTexture createSimpleClone() { Texture3D clone = new Texture3D(); createSimpleClone(clone); return clone; } @Override - public Texture createSimpleClone(Texture rVal) { + public GlTexture createSimpleClone(GlTexture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); rVal.setWrap(WrapAxis.R, wrapR); diff --git a/jme3-core/src/main/java/com/jme3/texture/TextureArray.java b/jme3-core/src/main/java/com/jme3/texture/TextureArray.java index e839399c33..32416099ac 100644 --- a/jme3-core/src/main/java/com/jme3/texture/TextureArray.java +++ b/jme3-core/src/main/java/com/jme3/texture/TextureArray.java @@ -35,7 +35,7 @@ import com.jme3.export.JmeExporter; import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.image.ColorSpace; import java.io.IOException; import java.util.Arrays; @@ -48,7 +48,7 @@ * renderManager.getRenderer().getCaps().contains(Caps.TextureArray) * @author phate666 */ -public class TextureArray extends Texture { +public class TextureArray extends GlTexture { private WrapMode wrapS = WrapMode.EdgeClamp; private WrapMode wrapT = WrapMode.EdgeClamp; @@ -70,22 +70,22 @@ public TextureArray() { * * @param images the images to use (not null) */ - public TextureArray(List images) { + public TextureArray(List images) { super(); int width = images.get(0).getWidth(); int height = images.get(0).getHeight(); - Format format = images.get(0).getFormat(); + Format format = images.get(0).getGlFormat(); ColorSpace colorSpace = images.get(0).getColorSpace(); int[] mipMapSizes = images.get(0).getMipMapSizes(); - Image arrayImage = new Image(format, width, height, null, colorSpace); + GlImage arrayImage = new GlImage(format, width, height, null, colorSpace); arrayImage.setMipMapSizes(mipMapSizes); - for (Image img : images) { + for (GlImage img : images) { if (img.getHeight() != height || img.getWidth() != width) { throw new IllegalArgumentException("Images in texture array must have same dimensions"); } - if (img.getFormat() != format) { + if (img.getGlFormat() != format) { throw new IllegalArgumentException("Images in texture array must have same format"); } if (!Arrays.equals(mipMapSizes, img.getMipMapSizes())) { @@ -99,14 +99,14 @@ public TextureArray(List images) { } @Override - public Texture createSimpleClone() { + public GlTexture createSimpleClone() { TextureArray clone = new TextureArray(); createSimpleClone(clone); return clone; } @Override - public Texture createSimpleClone(Texture rVal) { + public GlTexture createSimpleClone(GlTexture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); return super.createSimpleClone(rVal); diff --git a/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java b/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java index 40e6c037c3..01d3165d0c 100644 --- a/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java +++ b/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java @@ -55,7 +55,7 @@ * * @author Joshua Slack */ -public class TextureCubeMap extends Texture { +public class TextureCubeMap extends GlTexture { private WrapMode wrapS = WrapMode.EdgeClamp; private WrapMode wrapT = WrapMode.EdgeClamp; @@ -74,32 +74,32 @@ public TextureCubeMap() { super(); } - public TextureCubeMap(Image img) { + public TextureCubeMap(GlImage img) { super(); setImage(img); } - public TextureCubeMap(int width, int height, Image.Format format) { + public TextureCubeMap(int width, int height, GlImage.Format format) { this(createEmptyLayeredImage(width, height, 6, format)); } - private static Image createEmptyLayeredImage(int width, int height, - int layerCount, Image.Format format) { + private static GlImage createEmptyLayeredImage(int width, int height, + int layerCount, GlImage.Format format) { ArrayList layers = new ArrayList<>(); for (int i = 0; i < layerCount; i++) { layers.add(null); } - Image image = new Image(format, width, height, 0, layers, ColorSpace.Linear); + GlImage image = new GlImage(format, width, height, 0, layers, ColorSpace.Linear); return image; } @Override - public Texture createSimpleClone() { + public GlTexture createSimpleClone() { return createSimpleClone(new TextureCubeMap()); } @Override - public Texture createSimpleClone(Texture rVal) { + public GlTexture createSimpleClone(GlTexture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); rVal.setWrap(WrapAxis.R, wrapR); diff --git a/jme3-core/src/main/java/com/jme3/texture/TextureImage.java b/jme3-core/src/main/java/com/jme3/texture/TextureImage.java index 31b705fa5d..9a86aae851 100644 --- a/jme3-core/src/main/java/com/jme3/texture/TextureImage.java +++ b/jme3-core/src/main/java/com/jme3/texture/TextureImage.java @@ -104,24 +104,24 @@ public int getGlEnum() { } - private Texture texture; + private GlTexture texture; private int level, layer; private Access access; private boolean updateFlag = true; - public TextureImage(Texture texture) { + public TextureImage(GlTexture texture) { this(texture, 0, -1, Access.ReadWrite); } - public TextureImage(Texture texture, Access access) { + public TextureImage(GlTexture texture, Access access) { this(texture, 0, -1, access); } - public TextureImage(Texture texture, int level, int layer) { + public TextureImage(GlTexture texture, int level, int layer) { this(texture, level, layer, Access.ReadWrite); } - public TextureImage(Texture texture, int level, int layer, Access access) { + public TextureImage(GlTexture texture, int level, int layer, Access access) { this.texture = Objects.requireNonNull(texture, "Underlying texture cannot be null"); this.level = level; this.layer = layer; @@ -143,9 +143,9 @@ public TextureImage(Texture texture, int level, int layer, Access access) { * @param unit texture unit to bind to */ public void bindImage(GL4 gl4, TextureUtil texUtil, int unit) { - Image img = texture.getImage(); - gl4.glBindImageTexture(unit, img.getId(), level, isLayered(), Math.max(layer, 0), - access.getGlEnum(), texUtil.getImageFormat(img.getFormat(), false).internalFormat); + GlImage img = texture.getImage(); + gl4.glBindImageTexture(unit, img.getNativeObject(), level, isLayered(), Math.max(layer, 0), + access.getGlEnum(), texUtil.getImageFormat(img.getGlFormat(), false).internalFormat); } /** @@ -172,7 +172,7 @@ public boolean clearUpdateNeeded() { * * @param texture wrapped texture (not null) */ - public void setTexture(Texture texture) { + public void setTexture(GlTexture texture) { Objects.requireNonNull(texture, "Wrapped texture cannot be null."); if (this.texture != texture) { this.texture = texture; @@ -235,7 +235,7 @@ public void setAccess(Access access) { * * @return underlying texture */ - public Texture getTexture() { + public GlTexture getTexture() { return texture; } @@ -244,7 +244,7 @@ public Texture getTexture() { * * @return */ - public Image getImage() { + public GlImage getImage() { return texture.getImage(); } @@ -253,8 +253,8 @@ public Image getImage() { * * @return */ - public Image.Format getFormat() { - return texture.getImage().getFormat(); + public GlImage.Format getFormat() { + return texture.getImage().getGlFormat(); } /** @@ -263,7 +263,7 @@ public Image.Format getFormat() { * @return */ public int getImageId() { - return texture.getImage().getId(); + return texture.getImage().getNativeObject(); } /** diff --git a/jme3-core/src/main/java/com/jme3/texture/TextureProcessor.java b/jme3-core/src/main/java/com/jme3/texture/TextureProcessor.java index c0dc0ad359..6d309d9cbc 100644 --- a/jme3-core/src/main/java/com/jme3/texture/TextureProcessor.java +++ b/jme3-core/src/main/java/com/jme3/texture/TextureProcessor.java @@ -41,13 +41,13 @@ public class TextureProcessor implements AssetProcessor { @Override public Object postProcess(AssetKey key, Object obj) { TextureKey texKey = (TextureKey) key; - Image img = (Image) obj; + GlImage img = (GlImage) obj; if (img == null) { return null; } - Texture tex; - if (texKey.getTextureTypeHint() == Texture.Type.CubeMap) { + GlTexture tex; + if (texKey.getTextureTypeHint() == GlTexture.Type.CubeMap) { if (texKey.isFlipY()) { // also flip -y and +y image in cubemap ByteBuffer pos_y = img.getData(2); @@ -55,7 +55,7 @@ public Object postProcess(AssetKey key, Object obj) { img.setData(3, pos_y); } tex = new TextureCubeMap(); - } else if (texKey.getTextureTypeHint() == Texture.Type.ThreeDimensional) { + } else if (texKey.getTextureTypeHint() == GlTexture.Type.ThreeDimensional) { tex = new Texture3D(); } else { tex = new Texture2D(); @@ -64,7 +64,7 @@ public Object postProcess(AssetKey key, Object obj) { // enable mipmaps if image has them // or generate them if requested by user if (img.hasMipmaps() || texKey.isGenerateMips()) { - tex.setMinFilter(Texture.MinFilter.Trilinear); + tex.setMinFilter(GlTexture.MinFilter.Trilinear); } tex.setAnisotropicFilter(texKey.getAnisotropy()); @@ -75,7 +75,7 @@ public Object postProcess(AssetKey key, Object obj) { @Override public Object createClone(Object obj) { - Texture tex = (Texture) obj; + GlTexture tex = (GlTexture) obj; return tex.clone(); } diff --git a/jme3-core/src/main/java/com/jme3/texture/image/DefaultImageRaster.java b/jme3-core/src/main/java/com/jme3/texture/image/DefaultImageRaster.java index 4de14566b4..f955739673 100644 --- a/jme3-core/src/main/java/com/jme3/texture/image/DefaultImageRaster.java +++ b/jme3-core/src/main/java/com/jme3/texture/image/DefaultImageRaster.java @@ -33,14 +33,14 @@ import com.jme3.math.ColorRGBA; import com.jme3.math.FastMath; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import java.nio.ByteBuffer; public class DefaultImageRaster extends ImageRaster { private final int[] components = new int[4]; private ByteBuffer buffer; - private final Image image; + private final GlImage image; private final ImageCodec codec; private final int width; private final int height; @@ -56,7 +56,7 @@ private void rangeCheck(int x, int y) { } } - public DefaultImageRaster(Image image, int slice, int mipMapLevel, boolean convertToLinear) { + public DefaultImageRaster(GlImage image, int slice, int mipMapLevel, boolean convertToLinear) { int[] mipMapSizes = image.getMipMapSizes(); int availableMips = mipMapSizes != null ? mipMapSizes.length : 1; @@ -88,7 +88,7 @@ public DefaultImageRaster(Image image, int slice, int mipMapLevel, boolean conve this.convertToLinear = convertToLinear && image.getColorSpace() == ColorSpace.sRGB; this.buffer = image.getData(slice); - this.codec = ImageCodec.lookup(image.getFormat()); + this.codec = ImageCodec.lookup(image.getGlFormat()); if (codec instanceof ByteAlignedImageCodec || codec instanceof ByteOffsetImageCodec) { this.temp = new byte[codec.bpp]; diff --git a/jme3-core/src/main/java/com/jme3/texture/image/ImageCodec.java b/jme3-core/src/main/java/com/jme3/texture/image/ImageCodec.java index 993ce508b4..5598b6fc83 100644 --- a/jme3-core/src/main/java/com/jme3/texture/image/ImageCodec.java +++ b/jme3-core/src/main/java/com/jme3/texture/image/ImageCodec.java @@ -31,15 +31,15 @@ */ package com.jme3.texture.image; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; import java.nio.ByteBuffer; import java.util.EnumMap; abstract class ImageCodec { public static final int FLAG_F16 = 1, FLAG_F32 = 2, FLAG_GRAY = 4; //, FLAG_ALPHAONLY = 8, FLAG_SHAREDEXP = 16; - private static final EnumMap params = new EnumMap(Image.Format.class); + private static final EnumMap params = new EnumMap(GlImage.Format.class); protected final int bpp, type, maxAlpha, maxRed, maxGreen, maxBlue; protected final boolean isGray; diff --git a/jme3-core/src/main/java/com/jme3/texture/image/ImageRaster.java b/jme3-core/src/main/java/com/jme3/texture/image/ImageRaster.java index 1a75203225..758e77abcf 100644 --- a/jme3-core/src/main/java/com/jme3/texture/image/ImageRaster.java +++ b/jme3-core/src/main/java/com/jme3/texture/image/ImageRaster.java @@ -32,14 +32,14 @@ package com.jme3.texture.image; import com.jme3.math.ColorRGBA; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; /** - * Utility class for reading and writing from jME3 {@link Image images}. + * Utility class for reading and writing from jME3 {@link GlImage images}. *
* Allows directly manipulating pixels of the image by writing and * reading {@link ColorRGBA colors} at any coordinate, without - * regard to the underlying {@link com.jme3.texture.Image.Format format} of the image. + * regard to the underlying {@link GlImage.Format format} of the image. * NOTE: compressed and depth formats are not supported. * Special RGB formats like RGB111110F and RGB9E5 are not supported * at the moment, but may be added later on. For now @@ -72,14 +72,14 @@ public abstract class ImageRaster { * arrays or cubemaps. * @param mipMapLevel The mipmap level to read / write to. To access levels * other than 0, the image must have - * {@link Image#setMipMapSizes(int[]) mipmap sizes} set. + * {@link GlImage#setMipMapSizes(int[]) mipmap sizes} set. * @param convertToLinear If true, the application expects read or written * colors to be in linear color space (ImageRaster will * automatically perform a conversion as needed). If false, the application expects - * colors to be in the image's native {@link Image#getColorSpace() color space}. + * colors to be in the image's native {@link GlImage#getColorSpace() color space}. * @return An ImageRaster to read / write to the image. */ - public static ImageRaster create(Image image, int slice, int mipMapLevel, boolean convertToLinear) { + public static ImageRaster create(GlImage image, int slice, int mipMapLevel, boolean convertToLinear) { return new DefaultImageRaster(image, slice, mipMapLevel, convertToLinear); } @@ -91,7 +91,7 @@ public static ImageRaster create(Image image, int slice, int mipMapLevel, boolea * arrays or cubemaps. * @return An ImageRaster to read / write to the image. */ - public static ImageRaster create(Image image, int slice) { + public static ImageRaster create(GlImage image, int slice) { return create(image, slice, 0, false); } @@ -101,7 +101,7 @@ public static ImageRaster create(Image image, int slice) { * @param image The image to read / write to. * @return An ImageRaster to read / write to the image. */ - public static ImageRaster create(Image image) { + public static ImageRaster create(GlImage image) { if (image.getData().size() > 1) { throw new IllegalStateException("Use constructor that takes slices argument to read from multislice image"); } @@ -135,7 +135,7 @@ public ImageRaster() { * lower than 0.0 are still not allowed (as all formats are unsigned). *

* If the underlying format is grayscale (e.g. one of the luminance formats, - * such as {@link com.jme3.texture.Image.Format#Luminance8}) then a color to grayscale + * such as {@link GlImage.Format#Luminance8}) then a color to grayscale * conversion is done first, before writing the result into the image. *

* If the image lacks some components (such @@ -159,7 +159,7 @@ public ImageRaster() { *

* Any components that are not defined in the image format * will be set to 1.0 in the returned color. For example, - * reading from an {@link com.jme3.texture.Image.Format#Alpha8} format will + * reading from an {@link GlImage.Format#Alpha8} format will * return a ColorRGBA with the R, G, and B components set to 1.0, and * the A component set to the alpha in the image. *

@@ -169,7 +169,7 @@ public ImageRaster() { * Integer formats are converted to the range 0.0 - 1.0, based * on the maximum possible integer value that can be represented * by the number of bits the component has. - * For example, the {@link com.jme3.texture.Image.Format#RGB5A1} format can + * For example, the {@link GlImage.Format#RGB5A1} format can * contain the integer values 0 - 31, a conversion to floating point * is done by diving the integer value by 31 (done with floating point * precision). diff --git a/jme3-core/src/main/java/com/jme3/texture/image/LastTextureState.java b/jme3-core/src/main/java/com/jme3/texture/image/LastTextureState.java index 7a08e1cdde..63e7feab1c 100644 --- a/jme3-core/src/main/java/com/jme3/texture/image/LastTextureState.java +++ b/jme3-core/src/main/java/com/jme3/texture/image/LastTextureState.java @@ -32,7 +32,7 @@ package com.jme3.texture.image; import com.jme3.renderer.Renderer; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; /** * Stores/caches texture-state parameters so the {@link Renderer} doesn't have to @@ -42,11 +42,11 @@ */ public final class LastTextureState { - public Texture.WrapMode sWrap, tWrap, rWrap; - public Texture.MagFilter magFilter; - public Texture.MinFilter minFilter; + public GlTexture.WrapMode sWrap, tWrap, rWrap; + public GlTexture.MagFilter magFilter; + public GlTexture.MinFilter minFilter; public int anisoFilter; - public Texture.ShadowCompareMode shadowCompareMode; + public GlTexture.ShadowCompareMode shadowCompareMode; public LastTextureState() { reset(); @@ -62,6 +62,6 @@ public void reset() { // The default in OpenGL is OFF, so we avoid setting this per texture // if it's not used. - shadowCompareMode = Texture.ShadowCompareMode.Off; + shadowCompareMode = GlTexture.ShadowCompareMode.Off; } } diff --git a/jme3-core/src/main/java/com/jme3/texture/image/MipMapImageRaster.java b/jme3-core/src/main/java/com/jme3/texture/image/MipMapImageRaster.java index d37db00b67..d024b1c956 100644 --- a/jme3-core/src/main/java/com/jme3/texture/image/MipMapImageRaster.java +++ b/jme3-core/src/main/java/com/jme3/texture/image/MipMapImageRaster.java @@ -33,14 +33,14 @@ import com.jme3.math.ColorRGBA; import com.jme3.math.FastMath; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import java.nio.ByteBuffer; public class MipMapImageRaster extends ImageRaster { private final int[] components = new int[4]; private ByteBuffer buffer; - private final Image image; + private final GlImage image; private final ImageCodec codec; private int width[]; private int height[]; @@ -55,11 +55,11 @@ private void rangeCheck(int x, int y) { } } - public MipMapImageRaster(Image image, int slice) { + public MipMapImageRaster(GlImage image, int slice) { this.image = image; this.slice = slice; this.buffer = image.getData(slice); - this.codec = ImageCodec.lookup(image.getFormat()); + this.codec = ImageCodec.lookup(image.getGlFormat()); if (image.hasMipmaps()) { int nbMipMap = image.getMipMapSizes().length; this.width = new int[nbMipMap]; diff --git a/jme3-core/src/main/java/com/jme3/util/MipMapGenerator.java b/jme3-core/src/main/java/com/jme3/util/MipMapGenerator.java index 7073dfab52..23ccb420b6 100644 --- a/jme3-core/src/main/java/com/jme3/util/MipMapGenerator.java +++ b/jme3-core/src/main/java/com/jme3/util/MipMapGenerator.java @@ -33,7 +33,7 @@ import com.jme3.math.ColorRGBA; import com.jme3.math.FastMath; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.image.ImageRaster; import java.nio.ByteBuffer; @@ -44,10 +44,10 @@ public class MipMapGenerator { private MipMapGenerator() { } - public static Image scaleImage(Image inputImage, int outputWidth, int outputHeight) { - int size = outputWidth * outputHeight * inputImage.getFormat().getBitsPerPixel() / 8; + public static GlImage scaleImage(GlImage inputImage, int outputWidth, int outputHeight) { + int size = outputWidth * outputHeight * inputImage.getGlFormat().getBitsPerPixel() / 8; ByteBuffer buffer = BufferUtils.createByteBuffer(size); - Image outputImage = new Image(inputImage.getFormat(), + GlImage outputImage = new GlImage(inputImage.getGlFormat(), outputWidth, outputHeight, buffer, @@ -87,17 +87,17 @@ public static Image scaleImage(Image inputImage, int outputWidth, int outputHeig return outputImage; } - public static Image resizeToPowerOf2(Image original){ + public static GlImage resizeToPowerOf2(GlImage original){ int potWidth = FastMath.nearestPowerOfTwo(original.getWidth()); int potHeight = FastMath.nearestPowerOfTwo(original.getHeight()); return scaleImage(original, potWidth, potHeight); } - public static void generateMipMaps(Image image){ + public static void generateMipMaps(GlImage image){ int width = image.getWidth(); int height = image.getHeight(); - Image current = image; + GlImage current = image; ArrayList output = new ArrayList<>(); int totalSize = 0; diff --git a/jme3-core/src/main/java/com/jme3/util/PlaceholderAssets.java b/jme3-core/src/main/java/com/jme3/util/PlaceholderAssets.java index 63edfecaa7..19adc6652e 100644 --- a/jme3-core/src/main/java/com/jme3/util/PlaceholderAssets.java +++ b/jme3-core/src/main/java/com/jme3/util/PlaceholderAssets.java @@ -38,9 +38,9 @@ import com.jme3.scene.Geometry; import com.jme3.scene.Spatial; import com.jme3.scene.shape.Box; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.image.ColorSpace; import java.nio.ByteBuffer; @@ -78,20 +78,20 @@ private PlaceholderAssets() { } @Deprecated - public static Image getPlaceholderImage(){ + public static GlImage getPlaceholderImage(){ ByteBuffer tempData = BufferUtils.createByteBuffer(3 * 4 * 4); tempData.put(imageData).flip(); - return new Image(Format.RGB8, 4, 4, tempData, null, ColorSpace.Linear); + return new GlImage(Format.RGB8, 4, 4, tempData, null, ColorSpace.Linear); } - public static Image getPlaceholderImage(AssetManager assetManager){ + public static GlImage getPlaceholderImage(AssetManager assetManager){ return assetManager.loadTexture("Common/Textures/MissingTexture.png").getImage(); } public static Material getPlaceholderMaterial(AssetManager assetManager){ Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - Texture tex = assetManager.loadTexture("Common/Textures/MissingMaterial.png"); - tex.setWrap(Texture.WrapMode.Repeat); + GlTexture tex = assetManager.loadTexture("Common/Textures/MissingMaterial.png"); + tex.setWrap(GlTexture.WrapMode.Repeat); mat.setTexture("ColorMap", tex); return mat; } @@ -102,8 +102,8 @@ public static Spatial getPlaceholderModel(AssetManager assetManager){ Box box = new Box(1, 1, 1); Geometry geom = new Geometry("placeholder", box); Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - Texture tex = assetManager.loadTexture("Common/Textures/MissingModel.png"); - tex.setWrap(Texture.WrapMode.Repeat); + GlTexture tex = assetManager.loadTexture("Common/Textures/MissingModel.png"); + tex.setWrap(GlTexture.WrapMode.Repeat); mat.setTexture("ColorMap", tex); geom.setMaterial(mat); return geom; diff --git a/jme3-core/src/main/java/com/jme3/util/SkyFactory.java b/jme3-core/src/main/java/com/jme3/util/SkyFactory.java index 48794ad991..724f8e12e0 100644 --- a/jme3-core/src/main/java/com/jme3/util/SkyFactory.java +++ b/jme3-core/src/main/java/com/jme3/util/SkyFactory.java @@ -41,9 +41,9 @@ import com.jme3.scene.Geometry; import com.jme3.scene.Spatial; import com.jme3.scene.shape.Sphere; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.TextureCubeMap; import java.nio.ByteBuffer; @@ -108,11 +108,11 @@ private SkyFactory() { * * @return a new spatial representing the sky, ready to be attached to the * scene graph - * @deprecated use {@link SkyFactory#createSky(com.jme3.asset.AssetManager, com.jme3.texture.Texture, + * @deprecated use {@link SkyFactory#createSky(com.jme3.asset.AssetManager, GlTexture, * com.jme3.math.Vector3f, com.jme3.util.SkyFactory.EnvMapType)} */ @Deprecated - public static Spatial createSky(AssetManager assetManager, Texture texture, + public static Spatial createSky(AssetManager assetManager, GlTexture texture, Vector3f normalScale, boolean sphereMap) { return createSky(assetManager, texture, normalScale, sphereMap, 10); } @@ -132,7 +132,7 @@ public static Spatial createSky(AssetManager assetManager, Texture texture, * @return a new spatial representing the sky, ready to be attached to the * scene graph */ - public static Spatial createSky(AssetManager assetManager, Texture texture, + public static Spatial createSky(AssetManager assetManager, GlTexture texture, Vector3f normalScale, EnvMapType envMapType) { return createSky(assetManager, texture, normalScale, envMapType, 10); } @@ -159,11 +159,11 @@ public static Spatial createSky(AssetManager assetManager, Texture texture, * frustum * @return a new spatial representing the sky, ready to be attached to the * scene graph - * @deprecated use {@link #createSky(com.jme3.asset.AssetManager, com.jme3.texture.Texture, + * @deprecated use {@link #createSky(com.jme3.asset.AssetManager, GlTexture, * com.jme3.math.Vector3f, com.jme3.util.SkyFactory.EnvMapType, float)} */ @Deprecated - public static Spatial createSky(AssetManager assetManager, Texture texture, + public static Spatial createSky(AssetManager assetManager, GlTexture texture, Vector3f normalScale, boolean sphereMap, int sphereRadius) { return createSky(assetManager, texture, normalScale, sphereMap ? EnvMapType.SphereMap : EnvMapType.CubeMap, sphereRadius); @@ -184,7 +184,7 @@ public static Spatial createSky(AssetManager assetManager, Texture texture, * @return a new spatial representing the sky, ready to be attached to the * scene graph */ - public static Spatial createSky(AssetManager assetManager, Texture texture, + public static Spatial createSky(AssetManager assetManager, GlTexture texture, Vector3f normalScale, EnvMapType envMapType, float sphereRadius) { if (texture == null) { throw new IllegalArgumentException("texture cannot be null"); @@ -202,7 +202,7 @@ public static Spatial createSky(AssetManager assetManager, Texture texture, case CubeMap: // make sure it's a cubemap if (!(texture instanceof TextureCubeMap)) { - Image img = texture.getImage(); + GlImage img = texture.getImage(); texture = new TextureCubeMap(); texture.setImage(img); } @@ -223,10 +223,10 @@ public static Spatial createSky(AssetManager assetManager, Texture texture, throw new IllegalArgumentException("envMapType=" + envMapType); } skyMat.setVector3("NormalScale", normalScale); - texture.setMagFilter(Texture.MagFilter.Bilinear); - texture.setMinFilter(Texture.MinFilter.BilinearNoMipMaps); + texture.setMagFilter(GlTexture.MagFilter.Bilinear); + texture.setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); texture.setAnisotropicFilter(0); - texture.setWrap(Texture.WrapMode.EdgeClamp); + texture.setWrap(GlTexture.WrapMode.EdgeClamp); skyMat.setTexture("Texture", texture); sky.setMaterial(skyMat); @@ -249,11 +249,11 @@ public static Spatial createSky(AssetManager assetManager, Texture texture, * * @return a new spatial representing the sky, ready to be attached to the * scene graph - * @deprecated use {@link SkyFactory#createSky(com.jme3.asset.AssetManager, com.jme3.texture.Texture, + * @deprecated use {@link SkyFactory#createSky(com.jme3.asset.AssetManager, GlTexture, * com.jme3.math.Vector3f, com.jme3.util.SkyFactory.EnvMapType)} */ @Deprecated - public static Spatial createSky(AssetManager assetManager, Texture texture, boolean sphereMap) { + public static Spatial createSky(AssetManager assetManager, GlTexture texture, boolean sphereMap) { return createSky(assetManager, texture, Vector3f.UNIT_XYZ, sphereMap ? EnvMapType.SphereMap : EnvMapType.CubeMap); } @@ -291,7 +291,7 @@ public static Spatial createSky(AssetManager assetManager, String textureName, b * @return a new spatial representing the sky, ready to be attached to the * scene graph */ - public static Spatial createSky(AssetManager assetManager, Texture texture, EnvMapType envMapType) { + public static Spatial createSky(AssetManager assetManager, GlTexture texture, EnvMapType envMapType) { return createSky(assetManager, texture, Vector3f.UNIT_XYZ, envMapType); } @@ -308,13 +308,13 @@ public static Spatial createSky(AssetManager assetManager, String textureName, E TextureKey key = new TextureKey(textureName, true); key.setGenerateMips(false); if (envMapType == EnvMapType.CubeMap) { - key.setTextureTypeHint(Texture.Type.CubeMap); + key.setTextureTypeHint(GlTexture.Type.CubeMap); } - Texture tex = assetManager.loadTexture(key); + GlTexture tex = assetManager.loadTexture(key); return createSky(assetManager, tex, envMapType); } - private static void checkImage(Image image) { + private static void checkImage(GlImage image) { // if (image.getDepth() != 1) // throw new IllegalArgumentException("3D/Array images not allowed"); @@ -327,12 +327,12 @@ private static void checkImage(Image image) { } } - private static void checkImagesForCubeMap(Image... images) { + private static void checkImagesForCubeMap(GlImage... images) { if (images.length == 1) { return; } - Format fmt = images[0].getFormat(); + Format fmt = images[0].getGlFormat(); int width = images[0].getWidth(); int height = images[0].getHeight(); @@ -342,9 +342,9 @@ private static void checkImagesForCubeMap(Image... images) { checkImage(images[0]); for (int i = 1; i < images.length; i++) { - Image image = images[i]; + GlImage image = images[i]; checkImage(images[i]); - if (image.getFormat() != fmt) { + if (image.getGlFormat() != fmt) { throw new IllegalArgumentException("Images must have same format"); } if (image.getWidth() != width || image.getHeight() != height) { @@ -378,9 +378,9 @@ private static void checkImagesForCubeMap(Image... images) { * @return a new spatial representing the sky, ready to be attached to the * scene graph */ - public static Spatial createSky(AssetManager assetManager, Texture west, - Texture east, Texture north, Texture south, Texture up, - Texture down, Vector3f normalScale) { + public static Spatial createSky(AssetManager assetManager, GlTexture west, + GlTexture east, GlTexture north, GlTexture south, GlTexture up, + GlTexture down, Vector3f normalScale) { return createSky(assetManager, west, east, north, south, up, down, normalScale, 10); } @@ -404,20 +404,20 @@ public static Spatial createSky(AssetManager assetManager, Texture west, * @return a new spatial representing the sky, ready to be attached to the * scene graph */ - public static Spatial createSky(AssetManager assetManager, Texture west, - Texture east, Texture north, Texture south, Texture up, - Texture down, Vector3f normalScale, float sphereRadius) { + public static Spatial createSky(AssetManager assetManager, GlTexture west, + GlTexture east, GlTexture north, GlTexture south, GlTexture up, + GlTexture down, Vector3f normalScale, float sphereRadius) { - Image westImg = west.getImage(); - Image eastImg = east.getImage(); - Image northImg = north.getImage(); - Image southImg = south.getImage(); - Image upImg = up.getImage(); - Image downImg = down.getImage(); + GlImage westImg = west.getImage(); + GlImage eastImg = east.getImage(); + GlImage northImg = north.getImage(); + GlImage southImg = south.getImage(); + GlImage upImg = up.getImage(); + GlImage downImg = down.getImage(); checkImagesForCubeMap(westImg, eastImg, northImg, southImg, upImg, downImg); - Image cubeImage = new Image(westImg.getFormat(), westImg.getWidth(), westImg.getHeight(), + GlImage cubeImage = new GlImage(westImg.getGlFormat(), westImg.getWidth(), westImg.getHeight(), null, westImg.getColorSpace()); cubeImage.addData(westImg.getData(0)); @@ -445,7 +445,7 @@ public static Spatial createSky(AssetManager assetManager, Texture west, * scene graph */ public static Spatial createSky(AssetManager assetManager, - Texture west, Texture east, Texture north, Texture south, Texture up, Texture down) { + GlTexture west, GlTexture east, GlTexture north, GlTexture south, GlTexture up, GlTexture down) { return createSky(assetManager, west, east, north, south, up, down, Vector3f.UNIT_XYZ); } } diff --git a/jme3-core/src/main/java/com/jme3/util/natives/GlNative.java b/jme3-core/src/main/java/com/jme3/util/natives/GlNative.java new file mode 100644 index 0000000000..84495aea45 --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/util/natives/GlNative.java @@ -0,0 +1,76 @@ +package com.jme3.util.natives; + +import com.jme3.renderer.opengl.GLRenderer; + +import java.lang.ref.WeakReference; + +public abstract class GlNative extends AbstractNative implements Cloneable { + + protected GLRenderer renderer; + protected boolean updateNeeded = true; + private WeakReference> weakRef; + + public GlNative() {} + + public GlNative(T object) { + this.object = object; + } + + public abstract void resetObject(); + + protected void setId(T id) { + setId(null, id); + } + + public void setId(GLRenderer renderer, T id) { + object = id; + if (ref != null) { + ref.destroy(); + } + this.renderer = renderer; + ref = Native.get().register(this); + } + + public void setUpdateNeeded() { + updateNeeded = true; + } + + public void clearUpdateNeeded() { + updateNeeded = false; + } + + public boolean isUpdateNeeded() { + return updateNeeded; + } + + public void dispose() { + if (ref != null) { + ref.destroy(); + ref = null; + } + } + + @SuppressWarnings("unchecked") + public WeakReference getWeakRef() { + if (weakRef == null) { + weakRef = new WeakReference<>(this); + } + return (WeakReference) weakRef; + } + + @Override + @SuppressWarnings("unchecked") + public GlNative clone() { + try { + GlNative clone = (GlNative) super.clone(); + // TODO: copy mutable state here, so the clone can't change the internals of the original + clone.updateNeeded = true; + clone.renderer = renderer; + clone.object = object; + return clone; + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } + +} diff --git a/jme3-core/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java index cc11c0dc8a..9575318b28 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/descriptors/ImageDescriptor.java @@ -5,15 +5,15 @@ public class ImageDescriptor { - private final ImageView view; + private final VulkanImageView view; private final Sampler sampler; private final VulkanImage.Layout layout; - public ImageDescriptor(Texture texture, VulkanImage.Layout layout) { + public ImageDescriptor(VulkanTexture texture, VulkanImage.Layout layout) { this(texture.getImage(), texture, layout); } - public ImageDescriptor(ImageView view, Sampler sampler, VulkanImage.Layout layout) { + public ImageDescriptor(VulkanImageView view, Sampler sampler, VulkanImage.Layout layout) { this.view = view; this.sampler = sampler; this.layout = layout; @@ -25,7 +25,7 @@ public void fillDescriptorInfo(VkDescriptorImageInfo info) { .imageLayout(layout.getEnum()); } - public ImageView getView() { + public VulkanImageView getView() { return view; } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/BasicVulkanImage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/BasicVulkanImage.java new file mode 100644 index 0000000000..6de30f759c --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/BasicVulkanImage.java @@ -0,0 +1,237 @@ +package com.jme3.vulkan.images; + +import com.jme3.util.natives.Native; +import com.jme3.util.natives.NativeReference; +import com.jme3.util.natives.AbstractNative; +import com.jme3.vulkan.Format; +import com.jme3.vulkan.SharingMode; +import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.devices.LogicalDevice; +import com.jme3.vulkan.memory.MemoryProp; +import com.jme3.vulkan.memory.MemoryRegion; +import com.jme3.vulkan.util.Flag; +import com.jme3.vulkan.util.IntEnum; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.VkImageCreateInfo; +import org.lwjgl.vulkan.VkImageMemoryBarrier; +import org.lwjgl.vulkan.VkMemoryRequirements; + +import java.nio.LongBuffer; + +import static com.jme3.renderer.vulkan.VulkanUtils.*; +import static org.lwjgl.vulkan.VK10.*; + +public class BasicVulkanImage extends AbstractNative implements VulkanImage { + + private final LogicalDevice device; + private final IntEnum type; + private MemoryRegion memory; + + private int width, height, depth; + private int mipmaps, layers; + private Flag usage; + private Format format = Format.RGBA8_SRGB; + private IntEnum tiling = Tiling.Optimal; + private IntEnum sharing = SharingMode.Exclusive; + + public BasicVulkanImage(LogicalDevice device, IntEnum type) { + this.device = device; + this.type = type; + width = height = depth = 1; + mipmaps = layers = 1; + } + + @Override + public LogicalDevice getDevice() { + return device; + } + + @Override + public long getId() { + return object; + } + + @Override + public IntEnum getType() { + return type; + } + + @Override + public int getWidth() { + return width; + } + + @Override + public int getHeight() { + return height; + } + + @Override + public int getDepth() { + return depth; + } + + @Override + public int getMipmaps() { + return mipmaps; + } + + @Override + public int getLayers() { + return layers; + } + + @Override + public Flag getUsage() { + return usage; + } + + @Override + public Format getFormat() { + return format; + } + + @Override + public IntEnum getTiling() { + return tiling; + } + + @Override + public IntEnum getSharingMode() { + return sharing; + } + + @Override + public void addNativeDependent(NativeReference ref) { + this.ref.addDependent(ref); + } + + @Override + public Runnable createNativeDestroyer() { + return () -> vkDestroyImage(device.getNativeObject(), object, null); + } + + // todo: replace with transition autocloseable and deprecate this method + public void transitionLayout(CommandBuffer commands, Layout srcLayout, Layout dstLayout) { + try (MemoryStack stack = MemoryStack.stackPush()) { + int[] args = VulkanImage.Layout.getTransferArguments(srcLayout, dstLayout); + VkImageMemoryBarrier.Buffer barrier = VkImageMemoryBarrier.calloc(1, stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) + .oldLayout(srcLayout.getEnum()) + .newLayout(dstLayout.getEnum()) + .srcQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) + .dstQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) // for transfering queue ownership + .image(object) + .srcAccessMask(args[0]) + .dstAccessMask(args[1]); + barrier.subresourceRange() + .baseMipLevel(0) + .levelCount(1) + .baseArrayLayer(0) + .layerCount(1) + .aspectMask(format.getAspects().bits()); + vkCmdPipelineBarrier(commands.getBuffer(), args[2], args[3], 0, null, null, barrier); + } + } + + public Builder build() { + return new Builder(); + } + + public class Builder extends AbstractNative.Builder { + + private Flag mem; + private IntEnum layout = Layout.Undefined; + + @Override + protected void build() { + VkImageCreateInfo create = VkImageCreateInfo.calloc(stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) + .imageType(type.getEnum()) + .mipLevels(mipmaps) + .arrayLayers(layers) + .format(format.getVkEnum()) + .tiling(tiling.getEnum()) + .initialLayout(layout.getEnum()) + .usage(usage.bits()) + .samples(VK_SAMPLE_COUNT_1_BIT) // todo: multisampling + .sharingMode(sharing.getEnum()); + create.extent().width(width).height(height).depth(depth); + LongBuffer idBuf = stack.mallocLong(1); + check(vkCreateImage(device.getNativeObject(), create, null, idBuf), + "Failed to create image."); + object = idBuf.get(0); + VkMemoryRequirements memReq = VkMemoryRequirements.malloc(stack); + vkGetImageMemoryRequirements(device.getNativeObject(), object, memReq); + memory = new MemoryRegion(device, memReq.size(), mem, memReq.memoryTypeBits()); + memory.bind(BasicVulkanImage.this, 0); + ref = Native.get().register(BasicVulkanImage.this); + device.getNativeReference().addDependent(ref); + } + + public void setWidth(int w) { + width = w; + } + + public void setHeight(int h) { + height = h; + } + + public void setDepth(int d) { + depth = d; + } + + public void setSize(int w) { + width = w; + } + + public void setSize(int w, int h) { + width = w; + height = h; + } + + public void setSize(int w, int h, int d) { + width = w; + height = h; + depth = d; + } + + public void setNumMipmaps(int m) { + mipmaps = m; + } + + public void setNumLayers(int l) { + layers = l; + } + + public void setUsage(Flag u) { + usage = u; + } + + public void setMemoryProps(Flag m) { + this.mem = m; + } + + public void setFormat(Format f) { + format = f; + } + + public void setTiling(IntEnum t) { + tiling = t; + } + + public void setLayout(IntEnum l) { + this.layout = l; + } + + public Flag getMemoryProps() { + return mem; + } + + public IntEnum getLayout() { + return layout; + } + + } + +} diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/Filter.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Filter.java index 1c84bced98..aeacf554b0 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/Filter.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/Filter.java @@ -1,7 +1,10 @@ package com.jme3.vulkan.images; +import com.jme3.texture.GlTexture; import com.jme3.vulkan.util.IntEnum; +import java.util.Objects; + import static org.lwjgl.vulkan.VK10.*; public enum Filter implements IntEnum { @@ -20,4 +23,18 @@ public int getEnum() { return vkEnum; } + public static Filter of(GlTexture.MinFilter min) { + switch (min) { + case BilinearNearestMipMap: + case BilinearNoMipMaps: + case Trilinear: return Linear; + default: return Nearest; + } + } + + public static Filter of(GlTexture.MagFilter mag) { + if (mag == GlTexture.MagFilter.Bilinear) return Linear; + else return Nearest; + } + } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java index 509bb5fd86..3001103d00 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -1,237 +1,26 @@ package com.jme3.vulkan.images; -import com.jme3.util.natives.Native; -import com.jme3.util.natives.NativeReference; -import com.jme3.util.natives.AbstractNative; import com.jme3.vulkan.Format; -import com.jme3.vulkan.SharingMode; -import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.memory.MemoryProp; -import com.jme3.vulkan.memory.MemoryRegion; -import com.jme3.vulkan.util.Flag; import com.jme3.vulkan.util.IntEnum; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.vulkan.VkImageCreateInfo; -import org.lwjgl.vulkan.VkImageMemoryBarrier; -import org.lwjgl.vulkan.VkMemoryRequirements; -import java.nio.LongBuffer; +public interface GpuImage { -import static com.jme3.renderer.vulkan.VulkanUtils.*; -import static org.lwjgl.vulkan.VK10.*; + interface Type extends IntEnum {} -public class GpuImage extends AbstractNative implements VulkanImage { + long getId(); - private final LogicalDevice device; - private final IntEnum type; - private MemoryRegion memory; + IntEnum getType(); - private int width, height, depth; - private int mipmaps, layers; - private Flag usage; - private Format format = Format.RGBA8_SRGB; - private IntEnum tiling = Tiling.Optimal; - private IntEnum sharing = SharingMode.Exclusive; + int getWidth(); - public GpuImage(LogicalDevice device, IntEnum type) { - this.device = device; - this.type = type; - width = height = depth = 1; - mipmaps = layers = 1; - } + int getHeight(); - @Override - public LogicalDevice getDevice() { - return device; - } + int getDepth(); - @Override - public long getId() { - return object; - } + int getMipmaps(); - @Override - public IntEnum getType() { - return type; - } + int getLayers(); - @Override - public int getWidth() { - return width; - } - - @Override - public int getHeight() { - return height; - } - - @Override - public int getDepth() { - return depth; - } - - @Override - public int getMipmaps() { - return mipmaps; - } - - @Override - public int getLayers() { - return layers; - } - - @Override - public Flag getUsage() { - return usage; - } - - @Override - public Format getFormat() { - return format; - } - - @Override - public IntEnum getTiling() { - return tiling; - } - - @Override - public IntEnum getSharingMode() { - return sharing; - } - - @Override - public void addNativeDependent(NativeReference ref) { - this.ref.addDependent(ref); - } - - @Override - public Runnable createNativeDestroyer() { - return () -> vkDestroyImage(device.getNativeObject(), object, null); - } - - // todo: replace with transition autocloseable and deprecate this method - public void transitionLayout(CommandBuffer commands, Layout srcLayout, Layout dstLayout) { - try (MemoryStack stack = MemoryStack.stackPush()) { - int[] args = VulkanImage.Layout.getTransferArguments(srcLayout, dstLayout); - VkImageMemoryBarrier.Buffer barrier = VkImageMemoryBarrier.calloc(1, stack) - .sType(VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) - .oldLayout(srcLayout.getEnum()) - .newLayout(dstLayout.getEnum()) - .srcQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) - .dstQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) // for transfering queue ownership - .image(object) - .srcAccessMask(args[0]) - .dstAccessMask(args[1]); - barrier.subresourceRange() - .baseMipLevel(0) - .levelCount(1) - .baseArrayLayer(0) - .layerCount(1) - .aspectMask(format.getAspects().bits()); - vkCmdPipelineBarrier(commands.getBuffer(), args[2], args[3], 0, null, null, barrier); - } - } - - public Builder build() { - return new Builder(); - } - - public class Builder extends AbstractNative.Builder { - - private Flag mem; - private IntEnum layout = Layout.Undefined; - - @Override - protected void build() { - VkImageCreateInfo create = VkImageCreateInfo.calloc(stack) - .sType(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) - .imageType(type.getEnum()) - .mipLevels(mipmaps) - .arrayLayers(layers) - .format(format.getVkEnum()) - .tiling(tiling.getEnum()) - .initialLayout(layout.getEnum()) - .usage(usage.bits()) - .samples(VK_SAMPLE_COUNT_1_BIT) // todo: multisampling - .sharingMode(sharing.getEnum()); - create.extent().width(width).height(height).depth(depth); - LongBuffer idBuf = stack.mallocLong(1); - check(vkCreateImage(device.getNativeObject(), create, null, idBuf), - "Failed to create image."); - object = idBuf.get(0); - VkMemoryRequirements memReq = VkMemoryRequirements.malloc(stack); - vkGetImageMemoryRequirements(device.getNativeObject(), object, memReq); - memory = new MemoryRegion(device, memReq.size(), mem, memReq.memoryTypeBits()); - memory.bind(GpuImage.this, 0); - ref = Native.get().register(GpuImage.this); - device.getNativeReference().addDependent(ref); - } - - public void setWidth(int w) { - width = w; - } - - public void setHeight(int h) { - height = h; - } - - public void setDepth(int d) { - depth = d; - } - - public void setSize(int w) { - width = w; - } - - public void setSize(int w, int h) { - width = w; - height = h; - } - - public void setSize(int w, int h, int d) { - width = w; - height = h; - depth = d; - } - - public void setNumMipmaps(int m) { - mipmaps = m; - } - - public void setNumLayers(int l) { - layers = l; - } - - public void setUsage(Flag u) { - usage = u; - } - - public void setMemoryProps(Flag m) { - this.mem = m; - } - - public void setFormat(Format f) { - format = f; - } - - public void setTiling(IntEnum t) { - tiling = t; - } - - public void setLayout(IntEnum l) { - this.layout = l; - } - - public Flag getMemoryProps() { - return mem; - } - - public IntEnum getLayout() { - return layout; - } - - } + Format getFormat(); } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/Image.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Image.java deleted file mode 100644 index e54b233ad0..0000000000 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/Image.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.jme3.vulkan.images; - -import com.jme3.vulkan.Format; -import com.jme3.vulkan.util.IntEnum; - -public interface Image { - - interface Type extends IntEnum {} - - long getId(); - - IntEnum getType(); - - int getWidth(); - - int getHeight(); - - int getDepth(); - - int getMipmaps(); - - int getLayers(); - - Format getFormat(); - -} diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/MipmapMode.java b/jme3-core/src/main/java/com/jme3/vulkan/images/MipmapMode.java index b1dae1ee45..b8dd674b54 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/MipmapMode.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/MipmapMode.java @@ -1,5 +1,6 @@ package com.jme3.vulkan.images; +import com.jme3.texture.GlTexture; import com.jme3.vulkan.util.IntEnum; import static org.lwjgl.vulkan.VK10.*; @@ -20,4 +21,12 @@ public int getEnum() { return vkEnum; } + public static MipmapMode of(GlTexture.MinFilter min) { + switch (min) { + case NearestLinearMipMap: + case Trilinear: return Linear; + default: return Nearest; + } + } + } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java index 43be80e270..327fca4e2b 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/Sampler.java @@ -49,11 +49,11 @@ public IntEnum getMipmapMode() { return mipmapMode; } - public IntEnum getMin() { + public IntEnum getMinFilter() { return min; } - public IntEnum getMag() { + public IntEnum getMagFilter() { return mag; } @@ -146,12 +146,12 @@ public void setMinMagFilters(IntEnum min, IntEnum mag) { setMagFilter(mag); } - public void setEdgeMode(int demension, IntEnum a) { - if (demension < 0 || demension >= edgeModes.length) { - throw new IndexOutOfBoundsException("Invalid demension index (" + demension + "). " + + public void setEdgeMode(int axis, IntEnum a) { + if (axis < 0 || axis >= edgeModes.length) { + throw new IndexOutOfBoundsException("Invalid axis index (" + axis + "). " + "Must be 0 (U), 1 (V), or 2 (W)."); } - edgeModes[demension] = Objects.requireNonNull(a); + edgeModes[axis] = Objects.requireNonNull(a); } public void setEdgeModeU(IntEnum u) { diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/Texture.java b/jme3-core/src/main/java/com/jme3/vulkan/images/Texture.java deleted file mode 100644 index 33c34469d9..0000000000 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/Texture.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.jme3.vulkan.images; - -import com.jme3.vulkan.devices.LogicalDevice; - -import java.util.Objects; - -public class Texture extends Sampler { - - private final ImageView image; - - public Texture(LogicalDevice device, ImageView image) { - super(device); - this.image = Objects.requireNonNull(image); - } - - public ImageView getImage() { - return image; - } - -} diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImage.java index aadc6050fe..9be484df19 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImage.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImage.java @@ -9,9 +9,9 @@ import static org.lwjgl.vulkan.VK10.*; -public interface VulkanImage extends Image { +public interface VulkanImage extends GpuImage { - enum Type implements Image.Type { + enum Type implements GpuImage.Type { OneDemensional(VK_IMAGE_TYPE_1D), TwoDemensional(VK_IMAGE_TYPE_2D), diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java index a4c04b7a7b..ffff3fb704 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageLoader.java @@ -152,13 +152,13 @@ private void flipImage(byte[] img, int width, int height, int bpp) { } } - private GpuImage loadGpuImage(CommandPool transferPool, ImageData data) { + private BasicVulkanImage loadGpuImage(CommandPool transferPool, ImageData data) { try (MemoryStack stack = MemoryStack.stackPush()) { GpuBuffer staging = new BasicVulkanBuffer(transferPool.getDevice(), MemorySize.bytes(data.getBuffer().limit()), BufferUsage.TransferSrc, Flag.of(MemoryProp.HostVisible, MemoryProp.HostCached), false); staging.copy(data.getBuffer()); - GpuImage image = new GpuImage(transferPool.getDevice(), VulkanImage.Type.TwoDemensional); - try (GpuImage.Builder i = image.build()) { + BasicVulkanImage image = new BasicVulkanImage(transferPool.getDevice(), VulkanImage.Type.TwoDemensional); + try (BasicVulkanImage.Builder i = image.build()) { i.setSize(data.getWidth(), data.getHeight()); i.setFormat(data.getFormat()); i.setTiling(VulkanImage.Tiling.Optimal); diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageView.java similarity index 79% rename from jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java rename to jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageView.java index 62d558a4e6..516707ecca 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/ImageView.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageView.java @@ -1,5 +1,6 @@ package com.jme3.vulkan.images; +import com.jme3.texture.ImageView; import com.jme3.util.natives.Native; import com.jme3.util.natives.AbstractNative; import com.jme3.vulkan.Swizzle; @@ -12,7 +13,7 @@ import static com.jme3.renderer.vulkan.VulkanUtils.check; import static org.lwjgl.vulkan.VK10.*; -public class ImageView extends AbstractNative { +public class VulkanImageView extends AbstractNative implements ImageView { private final VulkanImage image; private final IntEnum type; @@ -27,7 +28,7 @@ public class ImageView extends AbstractNative { private int baseLayer = 0; private int layerCount = 1; - public ImageView(VulkanImage image, IntEnum type) { + public VulkanImageView(VulkanImage image, IntEnum type) { this.image = image; this.type = type; } @@ -37,6 +38,12 @@ public Runnable createNativeDestroyer() { return () -> vkDestroyImageView(image.getDevice().getNativeObject(), object, null); } + @Override + public long getId() { + return object; + } + + @Override public VulkanImage getImage() { return image; } @@ -65,18 +72,22 @@ public Flag getAspect() { return aspect; } + @Override public int getBaseMipmap() { return baseMipmap; } + @Override public int getMipmapCount() { return mipmapCount; } + @Override public int getBaseLayer() { return baseLayer; } + @Override public int getLayerCount() { return layerCount; } @@ -85,7 +96,7 @@ public Builder build() { return new Builder(); } - public class Builder extends AbstractNative.Builder { + public class Builder extends AbstractNative.Builder { @Override protected void build() { @@ -109,7 +120,7 @@ protected void build() { check(vkCreateImageView(image.getDevice().getNativeObject(), create, null, idBuf), "Failed to create image view."); object = idBuf.get(0); - ref = Native.get().register(ImageView.this); + ref = Native.get().register(VulkanImageView.this); image.addNativeDependent(ref); } @@ -119,39 +130,39 @@ public void allMipmaps() { } public void setSwizzleR(IntEnum swizzleR) { - ImageView.this.swizzleR = swizzleR; + VulkanImageView.this.swizzleR = swizzleR; } public void setSwizzleG(IntEnum swizzleG) { - ImageView.this.swizzleG = swizzleG; + VulkanImageView.this.swizzleG = swizzleG; } public void setSwizzleB(IntEnum swizzleB) { - ImageView.this.swizzleB = swizzleB; + VulkanImageView.this.swizzleB = swizzleB; } public void setSwizzleA(IntEnum swizzleA) { - ImageView.this.swizzleA = swizzleA; + VulkanImageView.this.swizzleA = swizzleA; } public void setAspect(Flag aspect) { - ImageView.this.aspect = aspect; + VulkanImageView.this.aspect = aspect; } public void setBaseMipmap(int baseMipmap) { - ImageView.this.baseMipmap = baseMipmap; + VulkanImageView.this.baseMipmap = baseMipmap; } public void setMipmapCount(int mipmapCount) { - ImageView.this.mipmapCount = mipmapCount; + VulkanImageView.this.mipmapCount = mipmapCount; } public void setBaseLayer(int baseLayer) { - ImageView.this.baseLayer = baseLayer; + VulkanImageView.this.baseLayer = baseLayer; } public void setLayerCount(int layerCount) { - ImageView.this.layerCount = layerCount; + VulkanImageView.this.layerCount = layerCount; } } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanTexture.java b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanTexture.java new file mode 100644 index 0000000000..e057f9976f --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanTexture.java @@ -0,0 +1,27 @@ +package com.jme3.vulkan.images; + +import com.jme3.texture.Texture; +import com.jme3.vulkan.devices.LogicalDevice; + +import java.util.Objects; + +public class VulkanTexture extends Sampler implements Texture { + + private final VulkanImageView image; + + public VulkanTexture(LogicalDevice device, VulkanImageView image) { + super(device); + this.image = Objects.requireNonNull(image); + } + + @Override + public long getId() { + return object; + } + + @Override + public VulkanImageView getView() { + return image; + } + +} diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java b/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java index 3512e530fb..a6ea568627 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java @@ -31,12 +31,6 @@ public NewMaterial(DescriptorPool pool) { this.pool = pool; } - public void update(CommandBuffer cmd) { - for (UniformSet s : uniformSets) { - s.update(cmd); - } - } - @Override public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { LinkedList availableLayouts = new LinkedList<>(); diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/UniformSet.java b/jme3-core/src/main/java/com/jme3/vulkan/material/UniformSet.java index e42d18a8be..f9201756e5 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/material/UniformSet.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/material/UniformSet.java @@ -33,15 +33,6 @@ public Iterator iterator() { return new IteratorImpl(); } - public void update(CommandBuffer cmd) { - for (Uniform u : uniforms) { - u.update(cmd); - if (u.getResource().get() == null) { - throw new NullPointerException("Uniform \"" + u.getName() + "\" contains no value."); - } - } - } - public DescriptorSet acquireSet(DescriptorPool pool, List availableLayouts) { activeFrames.removeIf(FrameData::cycleTimeout); FrameData data = activeFrames.stream().filter(FrameData::isCurrent).findAny().orElse(null); diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java index 464984f750..4d0fd5e31d 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/AbstractUniform.java @@ -38,9 +38,6 @@ public int getBindingIndex() { return bindingIndex; } - @Override - public void update(CommandBuffer cmd) {} - @Override public void setResource(VersionedResource resource) { this.resource = resource; diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index 2b3fc96950..8e8bfdf085 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -1,8 +1,10 @@ package com.jme3.vulkan.material.uniforms; +import com.jme3.material.GlMaterial; +import com.jme3.renderer.opengl.GLRenderer; +import com.jme3.texture.Texture; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; -import com.jme3.vulkan.images.Texture; import com.jme3.vulkan.images.VulkanImage; import com.jme3.vulkan.shader.ShaderStage; import com.jme3.vulkan.util.Flag; @@ -20,12 +22,17 @@ public TextureUniform(String name, IntEnum layout, int bindi this.layout = layout; } + @Override + public void uploadToProgram(GLRenderer renderer, GlMaterial.BindUnits units) { + renderer.setTexture(units.textureUnit++, resource.get()); + } + @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { Texture tex = resource.get(); VkDescriptorImageInfo.Buffer info = VkDescriptorImageInfo.calloc(1, stack) - .imageView(tex.getImage().getNativeObject()) - .sampler(tex.getNativeObject()) + .imageView(tex.getView().getId()) + .sampler(tex.getId()) .imageLayout(layout.getEnum()); write.pImageInfo(info) .descriptorType(type.getEnum()) diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java index 527c7d58f7..c008989cd2 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java @@ -1,6 +1,7 @@ package com.jme3.vulkan.material.uniforms; -import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.material.GlMaterial; +import com.jme3.renderer.opengl.GLRenderer; import com.jme3.vulkan.descriptors.DescriptorSetWriter; import com.jme3.vulkan.descriptors.SetLayoutBinding; import com.jme3.vulkan.frames.VersionedResource; @@ -12,13 +13,7 @@ public interface Uniform extends DescriptorSetWriter { */ String getName(); - /** - * Updates this uniform and extracts the uniform value from the - * {@link #setResource(VersionedResource) data pipe}. - * - * @param cmd command buffer to submit commands to - */ - void update(CommandBuffer cmd); + void uploadToProgram(GLRenderer renderer, GlMaterial.BindUnits units); /** * Tests if the {@link SetLayoutBinding} is compatible with this uniform, diff --git a/jme3-core/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java b/jme3-core/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java index f47f7120cf..f5b6848c04 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/memory/MemoryRegion.java @@ -4,7 +4,7 @@ import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.images.GpuImage; import com.jme3.vulkan.util.Flag; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; @@ -71,7 +71,7 @@ public void bind(GpuBuffer buffer, long offset) { "Failed to bind buffer memory."); } - public void bind(Image image, long offset) { + public void bind(GpuImage image, long offset) { check(vkBindImageMemory(device.getNativeObject(), image.getId(), id, offset), "Failed to bind image memory."); } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java index c56cb3e183..b87195e326 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/mesh/AdaptiveMesh.java @@ -11,6 +11,7 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.math.Matrix4f; +import com.jme3.renderer.Renderer; import com.jme3.scene.CollisionData; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; @@ -37,7 +38,6 @@ protected enum VertexMode { protected final MeshDescription description; private final List vertexBuffers = new ArrayList<>(); protected final List> indexBuffers = new ArrayList<>(); - private GpuBuffer boundIndexBuffer; protected BoundingVolume volume = new BoundingBox(); private int vertices; private CollisionData collisionTree; @@ -47,7 +47,7 @@ public AdaptiveMesh(MeshDescription description) { } @Override - public void bind(CommandBuffer cmd) { + public void draw(CommandBuffer cmd, Geometry geometry) { try (MemoryStack stack = MemoryStack.stackPush()) { LongBuffer verts = stack.mallocLong(vertexBuffers.size()); LongBuffer offsets = stack.mallocLong(vertexBuffers.size()); @@ -60,20 +60,18 @@ public void bind(CommandBuffer cmd) { vkCmdBindVertexBuffers(cmd.getBuffer(), 0, verts, offsets); } if (!indexBuffers.isEmpty()) { - boundIndexBuffer = indexBuffers.get(0).get(); - vkCmdBindIndexBuffer(cmd.getBuffer(), boundIndexBuffer.getId(), 0, IndexType.of(boundIndexBuffer).getEnum()); + GpuBuffer indices = indexBuffers.get(0).get(); + vkCmdBindIndexBuffer(cmd.getBuffer(), indices.getId(), 0, IndexType.of(indices).getEnum()); + vkCmdDrawIndexed(cmd.getBuffer(), indices.size().getElements(), 1, 0, 0, 0); } else { - boundIndexBuffer = null; + vkCmdDraw(cmd.getBuffer(), vertices, 1, 0, 0); } } @Override - public void draw(CommandBuffer cmd) { - if (boundIndexBuffer != null) { - vkCmdDrawIndexed(cmd.getBuffer(), boundIndexBuffer.size().getElements(), 1, 0, 0, 0); - } else { - vkCmdDraw(cmd.getBuffer(), vertices, 1, 0, 0); - } + public void draw(Renderer renderer, Geometry geometry, int instances, com.jme3.scene.VertexBuffer[] instanceData) { + // todo: figure out how to possibly implement this + throw new UnsupportedOperationException("Not supported yet."); } @Override diff --git a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java index 416d2bfe18..fdbb8c8205 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/pipelines/FrameBuffer.java @@ -3,7 +3,7 @@ import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.images.ImageView; +import com.jme3.vulkan.images.VulkanImageView; import com.jme3.vulkan.pass.RenderPass; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkFramebufferCreateInfo; @@ -18,10 +18,10 @@ public class FrameBuffer implements Native { private final LogicalDevice device; private final NativeReference ref; private final int width, height, layers; - private final ImageView[] attachments; + private final VulkanImageView[] attachments; private long id; - public FrameBuffer(LogicalDevice device, RenderPass compat, int width, int height, int layers, ImageView... attachments) { + public FrameBuffer(LogicalDevice device, RenderPass compat, int width, int height, int layers, VulkanImageView... attachments) { this.device = device; this.width = width; this.height = height; @@ -80,7 +80,7 @@ public int getLayers() { return layers; } - public ImageView[] getAttachments() { + public VulkanImageView[] getAttachments() { return attachments; } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java index 952a73c000..5381cd1040 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -6,9 +6,9 @@ import com.jme3.vulkan.*; import com.jme3.vulkan.commands.Queue; import com.jme3.vulkan.devices.LogicalDevice; -import com.jme3.vulkan.images.Image; +import com.jme3.vulkan.images.GpuImage; import com.jme3.vulkan.images.ImageUsage; -import com.jme3.vulkan.images.ImageView; +import com.jme3.vulkan.images.VulkanImageView; import com.jme3.vulkan.images.VulkanImage; import com.jme3.vulkan.pipelines.FrameBuffer; import com.jme3.vulkan.pass.RenderPass; @@ -76,7 +76,7 @@ public Runnable createNativeDestroyer() { return () -> KHRSwapchain.vkDestroySwapchainKHR(device.getNativeObject(), object, null); } - public void createFrameBuffers(RenderPass compat, ImageView depthStencil) { + public void createFrameBuffers(RenderPass compat, VulkanImageView depthStencil) { for (PresentImage img : images) { img.createFrameBuffer(compat, depthStencil); } @@ -157,14 +157,14 @@ public class PresentImage implements VulkanImage { private final LogicalDevice device; private final long id; - private final ImageView colorView; + private final VulkanImageView colorView; private FrameBuffer frameBuffer; private PresentImage(LogicalDevice device, long id) { this.device = device; this.id = id; - colorView = new ImageView(this, VulkanImage.View.TwoDemensional); - try (ImageView.Builder v = colorView.build()) { + colorView = new VulkanImageView(this, VulkanImage.View.TwoDemensional); + try (VulkanImageView.Builder v = colorView.build()) { v.setLayerCount(imageLayers); } } @@ -180,7 +180,7 @@ public long getId() { } @Override - public IntEnum getType() { + public IntEnum getType() { return Type.TwoDemensional; } @@ -234,7 +234,7 @@ public void addNativeDependent(NativeReference ref) { Swapchain.this.ref.addDependent(ref); } - public void createFrameBuffer(RenderPass compat, ImageView depthStencil) { + public void createFrameBuffer(RenderPass compat, VulkanImageView depthStencil) { this.frameBuffer = new FrameBuffer(getDevice(), compat, extent.x, extent.y, 1, colorView, depthStencil); } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/util/IntEnum.java b/jme3-core/src/main/java/com/jme3/vulkan/util/IntEnum.java index 24c17fdf02..5fd0f276ad 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/util/IntEnum.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/util/IntEnum.java @@ -1,6 +1,6 @@ package com.jme3.vulkan.util; -public interface IntEnum { +public interface IntEnum { int getEnum(); @@ -22,15 +22,15 @@ static IntEnum of(int libEnum) { class EnumImpl implements IntEnum { - private final int libEnum; + private final int intEnum; - public EnumImpl(int libEnum) { - this.libEnum = libEnum; + public EnumImpl(int intEnum) { + this.intEnum = intEnum; } @Override public int getEnum() { - return libEnum; + return intEnum; } } diff --git a/jme3-core/src/plugins/java/com/jme3/font/plugins/BitmapFontLoader.java b/jme3-core/src/plugins/java/com/jme3/font/plugins/BitmapFontLoader.java index b81253601c..0968b00332 100644 --- a/jme3-core/src/plugins/java/com/jme3/font/plugins/BitmapFontLoader.java +++ b/jme3-core/src/plugins/java/com/jme3/font/plugins/BitmapFontLoader.java @@ -38,7 +38,7 @@ import com.jme3.material.Material; import com.jme3.material.MaterialDef; import com.jme3.material.RenderState.BlendMode; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -86,7 +86,7 @@ private BitmapFont load(AssetManager assetManager, String folder, InputStream in } }else if (tokens[0].equals("page")){ int index = -1; - Texture tex = null; + GlTexture tex = null; for (int i = 1; i < tokens.length; i++){ String token = tokens[i]; @@ -100,8 +100,8 @@ private BitmapFont load(AssetManager assetManager, String folder, InputStream in TextureKey key = new TextureKey(folder + file, true); key.setGenerateMips(false); tex = assetManager.loadTexture(key); - tex.setMagFilter(Texture.MagFilter.Bilinear); - tex.setMinFilter(Texture.MinFilter.BilinearNoMipMaps); + tex.setMagFilter(GlTexture.MagFilter.Bilinear); + tex.setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); } } // set page diff --git a/jme3-core/src/plugins/java/com/jme3/material/plugins/J3MLoader.java b/jme3-core/src/plugins/java/com/jme3/material/plugins/J3MLoader.java index e874ed555c..819ccd1476 100644 --- a/jme3-core/src/plugins/java/com/jme3/material/plugins/J3MLoader.java +++ b/jme3-core/src/plugins/java/com/jme3/material/plugins/J3MLoader.java @@ -43,7 +43,7 @@ import com.jme3.math.Vector2f; import com.jme3.math.Vector3f; import com.jme3.shader.*; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.texture.image.ColorSpace; import com.jme3.util.PlaceholderAssets; @@ -211,7 +211,7 @@ private boolean isTexturePathDeclaredTheTraditionalWay(final List textureValues = tokenizeTextureValue(value); final List textureOptionValues = parseTextureOptions(textureValues); @@ -267,17 +267,17 @@ private Texture parseTextureType(final VarType type, final String value) { switch (type) { case Texture3D: - textureKey.setTextureTypeHint(Texture.Type.ThreeDimensional); + textureKey.setTextureTypeHint(GlTexture.Type.ThreeDimensional); break; case TextureArray: - textureKey.setTextureTypeHint(Texture.Type.TwoDimensionalArray); + textureKey.setTextureTypeHint(GlTexture.Type.TwoDimensionalArray); break; case TextureCubeMap: - textureKey.setTextureTypeHint(Texture.Type.CubeMap); + textureKey.setTextureTypeHint(GlTexture.Type.CubeMap); break; } - Texture texture; + GlTexture texture; try { texture = assetManager.loadTexture(textureKey); @@ -403,7 +403,7 @@ private void readParam(String statement) throws IOException{ defaultValObj = readValue(type, defaultVal); } if(type.isTextureType()){ - materialDef.addMaterialParamTexture(type, name, colorSpace,(Texture)defaultValObj); + materialDef.addMaterialParamTexture(type, name, colorSpace,(GlTexture)defaultValObj); }else{ materialDef.addMaterialParam(type, name, defaultValObj); } @@ -426,7 +426,7 @@ private void readValueParam(String statement) throws IOException{ Object valueObj = readValue(p.getVarType(), split[1]); if (p.getVarType().isTextureType()){ - material.setTextureParam(name, p.getVarType(), (Texture) valueObj); + material.setTextureParam(name, p.getVarType(), (GlTexture) valueObj); }else{ material.setParam(name, p.getVarType(), valueObj); } @@ -857,60 +857,60 @@ protected void initNodesLoader() { private enum TextureOption { /** - * Applies a {@link com.jme3.texture.Texture.MinFilter} to the texture. + * Applies a {@link GlTexture.MinFilter} to the texture. */ Min { @Override public void applyToTextureKey(final String option, final TextureKey textureKey) { - Texture.MinFilter minFilter = Texture.MinFilter.valueOf(option); + GlTexture.MinFilter minFilter = GlTexture.MinFilter.valueOf(option); textureKey.setGenerateMips(minFilter.usesMipMapLevels()); } @Override - public void applyToTexture(final String option, final Texture texture) { - texture.setMinFilter(Texture.MinFilter.valueOf(option)); + public void applyToTexture(final String option, final GlTexture texture) { + texture.setMinFilter(GlTexture.MinFilter.valueOf(option)); } }, /** - * Applies a {@link com.jme3.texture.Texture.MagFilter} to the texture. + * Applies a {@link GlTexture.MagFilter} to the texture. */ Mag { @Override - public void applyToTexture(final String option, final Texture texture) { - texture.setMagFilter(Texture.MagFilter.valueOf(option)); + public void applyToTexture(final String option, final GlTexture texture) { + texture.setMagFilter(GlTexture.MagFilter.valueOf(option)); } }, /** - * Applies a {@link com.jme3.texture.Texture.WrapMode} to the texture. This also supports {@link com.jme3.texture.Texture.WrapAxis} + * Applies a {@link GlTexture.WrapMode} to the texture. This also supports {@link GlTexture.WrapAxis} * by adding "_AXIS" to the texture option. For instance if you wanted to repeat on the S (horizontal) axis, you * would use

WrapRepeat_S
as a texture option. */ Wrap { @Override - public void applyToTexture(final String option, final Texture texture) { + public void applyToTexture(final String option, final GlTexture texture) { final int separatorPosition = option.indexOf("_"); if (separatorPosition >= option.length() - 2) { final String axis = option.substring(separatorPosition + 1); final String mode = option.substring(0, separatorPosition); - final Texture.WrapAxis wrapAxis = Texture.WrapAxis.valueOf(axis); - texture.setWrap(wrapAxis, Texture.WrapMode.valueOf(mode)); + final GlTexture.WrapAxis wrapAxis = GlTexture.WrapAxis.valueOf(axis); + texture.setWrap(wrapAxis, GlTexture.WrapMode.valueOf(mode)); } else { - texture.setWrap(Texture.WrapMode.valueOf(option)); + texture.setWrap(GlTexture.WrapMode.valueOf(option)); } } }, /** - * Applies a {@link com.jme3.texture.Texture.WrapMode#Repeat} to the texture. This is simply an alias for + * Applies a {@link GlTexture.WrapMode#Repeat} to the texture. This is simply an alias for * WrapRepeat, please use WrapRepeat instead if possible as this may become deprecated later on. */ Repeat { @Override - public void applyToTexture(final String option, final Texture texture) { + public void applyToTexture(final String option, final GlTexture texture) { Wrap.applyToTexture("Repeat", texture); } }, @@ -929,7 +929,7 @@ public String getOptionValue(final String option) { return option.substring(name().length()); } - public void applyToTexture(final String option, final Texture texture) { + public void applyToTexture(final String option, final GlTexture texture) { } public void applyToTextureKey(final String option, final TextureKey textureKey) { @@ -964,7 +964,7 @@ public void applyToTextureKey(final TextureKey textureKey) { textureOption.applyToTextureKey(value, textureKey); } - public void applyToTexture(final Texture texture) { + public void applyToTexture(final GlTexture texture) { textureOption.applyToTexture(value, texture); } } diff --git a/jme3-core/src/plugins/java/com/jme3/scene/plugins/MTLLoader.java b/jme3-core/src/plugins/java/com/jme3/scene/plugins/MTLLoader.java index ac186c1606..8853bd0721 100644 --- a/jme3-core/src/plugins/java/com/jme3/scene/plugins/MTLLoader.java +++ b/jme3-core/src/plugins/java/com/jme3/scene/plugins/MTLLoader.java @@ -36,8 +36,8 @@ import com.jme3.material.MaterialList; import com.jme3.material.RenderState.BlendMode; import com.jme3.math.ColorRGBA; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.Texture2D; import com.jme3.util.PlaceholderAssets; import java.io.File; @@ -60,7 +60,7 @@ public class MTLLoader implements AssetLoader { protected String folderName; protected AssetKey key; - protected Texture diffuseMap, normalMap, specularMap, alphaMap; + protected GlTexture diffuseMap, normalMap, specularMap, alphaMap; protected ColorRGBA ambient = new ColorRGBA(); protected ColorRGBA diffuse = new ColorRGBA(); protected ColorRGBA specular = new ColorRGBA(); @@ -167,7 +167,7 @@ protected void startMaterial(String name){ matName = name; } - protected Texture loadTexture(String path){ + protected GlTexture loadTexture(String path){ String[] split = path.trim().split("\\p{javaWhitespace}+"); // will crash if path is an empty string @@ -176,7 +176,7 @@ protected Texture loadTexture(String path){ String name = new File(path).getName(); TextureKey texKey = new TextureKey(folderName + name); texKey.setGenerateMips(true); - Texture texture; + GlTexture texture; try { texture = assetManager.loadTexture(texKey); texture.setWrap(WrapMode.Repeat); diff --git a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java index 9f83d8ea19..21ea84d298 100644 --- a/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java +++ b/jme3-core/src/plugins/java/com/jme3/scene/plugins/OBJLoader.java @@ -38,7 +38,7 @@ import com.jme3.math.Vector3f; import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.scene.*; -import com.jme3.scene.OldMesh.Mode; +import com.jme3.scene.GlMesh.Mode; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.mesh.IndexBuffer; import com.jme3.scene.mesh.IndexIntBuffer; diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/DDSLoader.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/DDSLoader.java index 6ea0f8d45d..a6b0cd7a8e 100644 --- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/DDSLoader.java +++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/DDSLoader.java @@ -34,9 +34,9 @@ import com.jme3.asset.AssetInfo; import com.jme3.asset.AssetLoader; import com.jme3.asset.TextureKey; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; import com.jme3.util.LittleEndien; @@ -125,20 +125,20 @@ public Object load(AssetInfo info) throws IOException { in = new LittleEndien(stream); loadHeader(); if (texture3D) { - textureKey.setTextureTypeHint(Texture.Type.ThreeDimensional); + textureKey.setTextureTypeHint(GlTexture.Type.ThreeDimensional); } else if (depth > 1) { - textureKey.setTextureTypeHint(Texture.Type.CubeMap); + textureKey.setTextureTypeHint(GlTexture.Type.CubeMap); } ArrayList data = readData(textureKey.isFlipY()); - return new Image(pixelFormat, width, height, depth, data, sizes, ColorSpace.sRGB); + return new GlImage(pixelFormat, width, height, depth, data, sizes, ColorSpace.sRGB); } } - public Image load(InputStream stream) throws IOException { + public GlImage load(InputStream stream) throws IOException { in = new LittleEndien(stream); loadHeader(); ArrayList data = readData(false); - return new Image(pixelFormat, width, height, depth, data, sizes, ColorSpace.sRGB); + return new GlImage(pixelFormat, width, height, depth, data, sizes, ColorSpace.sRGB); } private void loadDX10Header() throws IOException { @@ -178,16 +178,16 @@ private void setPixelFormat(int dxgiFormat) throws IOException { pixelFormat = Format.DXT5; break; case DXGIFormat.DXGI_FORMAT_BC4_UNORM: - pixelFormat = Image.Format.RGTC1; + pixelFormat = GlImage.Format.RGTC1; break; case DXGIFormat.DXGI_FORMAT_BC4_SNORM: pixelFormat = Format.SIGNED_RGTC1; break; case DXGIFormat.DXGI_FORMAT_BC5_UNORM: - pixelFormat = Image.Format.RGTC2; + pixelFormat = GlImage.Format.RGTC2; break; case DXGIFormat.DXGI_FORMAT_BC5_SNORM: - pixelFormat = Image.Format.SIGNED_RGTC2; + pixelFormat = GlImage.Format.SIGNED_RGTC2; break; case DXGIFormat.DXGI_FORMAT_BC6H_UF16: pixelFormat = Format.BC6H_UF16; @@ -298,26 +298,26 @@ private void readPixelFormat() throws IOException { case PF_DXT1: bpp = 4; if (is(pfFlags, DDPF_ALPHAPIXELS)) { - pixelFormat = Image.Format.DXT1A; + pixelFormat = GlImage.Format.DXT1A; } else { - pixelFormat = Image.Format.DXT1; + pixelFormat = GlImage.Format.DXT1; } break; case PF_DXT3: bpp = 8; - pixelFormat = Image.Format.DXT3; + pixelFormat = GlImage.Format.DXT3; break; case PF_DXT5: bpp = 8; - pixelFormat = Image.Format.DXT5; + pixelFormat = GlImage.Format.DXT5; break; case PF_ATI1: bpp = 4; - pixelFormat = Image.Format.RGTC1; + pixelFormat = GlImage.Format.RGTC1; break; case PF_ATI2: bpp = 8; - pixelFormat = Image.Format.RGTC2; + pixelFormat = GlImage.Format.RGTC2; break; case PF_DX10: compressed = false; @@ -329,7 +329,7 @@ private void readPixelFormat() throws IOException { case 113: compressed = false; bpp = 64; - pixelFormat = Image.Format.RGBA16F; + pixelFormat = GlImage.Format.RGBA16F; break; case 111: compressed = false; diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/DXTFlipper.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/DXTFlipper.java index 10a02df4a3..6293c70985 100644 --- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/DXTFlipper.java +++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/DXTFlipper.java @@ -32,7 +32,7 @@ package com.jme3.texture.plugins; import com.jme3.math.FastMath; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.util.BufferUtils; import java.nio.ByteBuffer; import java.nio.ByteOrder; diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/ETCFlipper.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/ETCFlipper.java index 0809a5f7bb..889ad55c1a 100644 --- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/ETCFlipper.java +++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/ETCFlipper.java @@ -3,7 +3,7 @@ import java.nio.ByteBuffer; import java.util.logging.Logger; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; /** * A place-holder for future implementation of ETC texture flipping. diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/HDRLoader.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/HDRLoader.java index 183049f9ec..b498df6ea6 100644 --- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/HDRLoader.java +++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/HDRLoader.java @@ -35,8 +35,8 @@ import com.jme3.asset.AssetLoader; import com.jme3.asset.TextureKey; import com.jme3.math.FastMath; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; import java.io.IOException; @@ -215,7 +215,7 @@ private void decodeScanline(InputStream in, int width) throws IOException{ } } - public Image load(InputStream in, boolean flipY) throws IOException{ + public GlImage load(InputStream in, boolean flipY) throws IOException{ float gamma = -1f; float exposure = -1f; @@ -305,7 +305,7 @@ public Image load(InputStream in, boolean flipY) throws IOException{ dataStore.rewind(); //HDR files color data is actually stored in linear space. - return new Image(pixelFormat, width, height, dataStore, ColorSpace.Linear); + return new GlImage(pixelFormat, width, height, dataStore, ColorSpace.Linear); } @Override @@ -317,7 +317,7 @@ public Object load(AssetInfo info) throws IOException { InputStream in = null; try { in = info.openStream(); - Image img = load(in, flip); + GlImage img = load(in, flip); return img; } finally { if (in != null){ diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/ImageFlipper.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/ImageFlipper.java index 0d5f39d84b..dfc788b9c4 100644 --- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/ImageFlipper.java +++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/ImageFlipper.java @@ -31,7 +31,7 @@ */ package com.jme3.texture.plugins; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.util.BufferUtils; import java.nio.ByteBuffer; @@ -50,8 +50,8 @@ public class ImageFlipper { private ImageFlipper() { } - public static void flipImage(Image img, int index){ - if (img.getFormat().isCompressed()) + public static void flipImage(GlImage img, int index){ + if (img.getGlFormat().isCompressed()) throw new UnsupportedOperationException("Flipping compressed " + "images is unsupported."); @@ -60,7 +60,7 @@ public static void flipImage(Image img, int index){ int halfH = h / 2; // bytes per pixel - int bpp = img.getFormat().getBitsPerPixel() / 8; + int bpp = img.getGlFormat().getBitsPerPixel() / 8; int scanline = w * bpp; ByteBuffer data = img.getData(index); diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/PFMLoader.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/PFMLoader.java index 859d06fc77..dde12fcef3 100644 --- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/PFMLoader.java +++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/PFMLoader.java @@ -34,8 +34,8 @@ import com.jme3.asset.AssetInfo; import com.jme3.asset.AssetLoader; import com.jme3.asset.TextureKey; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; import java.io.IOException; @@ -73,7 +73,7 @@ private void flipScanline(byte[] scanline){ } } - private Image load(InputStream in, boolean needYFlip) throws IOException{ + private GlImage load(InputStream in, boolean needYFlip) throws IOException{ Format format = null; String fmtStr = readString(in); @@ -130,7 +130,7 @@ private Image load(InputStream in, boolean needYFlip) throws IOException{ } imageData.rewind(); - return new Image(format, width, height, imageData, null, ColorSpace.Linear); + return new GlImage(format, width, height, imageData, null, ColorSpace.Linear); } @Override diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/TGALoader.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/TGALoader.java index 13bf130977..edcad585fc 100644 --- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/TGALoader.java +++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/TGALoader.java @@ -35,8 +35,8 @@ import com.jme3.asset.AssetLoader; import com.jme3.asset.TextureKey; import com.jme3.math.FastMath; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; import com.jme3.util.BufferUtils; import java.io.BufferedInputStream; import java.io.DataInputStream; @@ -81,7 +81,7 @@ public Object load(AssetInfo info) throws IOException { InputStream in = null; try { in = info.openStream(); - Image img = load(in, flip); + GlImage img = load(in, flip); return img; } finally { if (in != null) { @@ -104,7 +104,7 @@ public Object load(AssetInfo info) throws IOException { * image, either as a RGB888 or RGBA8888 * @throws java.io.IOException if an I/O error occurs */ - public static Image load(InputStream in, boolean flip) throws IOException { + public static GlImage load(InputStream in, boolean flip) throws IOException { boolean flipH = false; // open a stream to the file @@ -470,7 +470,7 @@ public static Image load(InputStream in, boolean flip) throws IOException { scratch.put(rawData); scratch.rewind(); // Create the Image object - Image textureImage = new Image(); + GlImage textureImage = new GlImage(); textureImage.setFormat(format); textureImage.setWidth(width); textureImage.setHeight(height); diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/ktx/KTXLoader.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/ktx/KTXLoader.java index 9cd78b35a3..259a263487 100644 --- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/ktx/KTXLoader.java +++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/ktx/KTXLoader.java @@ -37,7 +37,7 @@ import com.jme3.renderer.Caps; import com.jme3.renderer.opengl.GLImageFormat; import com.jme3.renderer.opengl.GLImageFormats; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; import com.jme3.util.LittleEndien; @@ -80,7 +80,7 @@ public Object load(AssetInfo info) throws IOException { InputStream in = null; try { in = info.openStream(); - Image img = load(in); + GlImage img = load(in); return img; } finally { if (in != null) { @@ -89,7 +89,7 @@ public Object load(AssetInfo info) throws IOException { } } - private Image load(InputStream stream) { + private GlImage load(InputStream stream) { byte[] fileId = new byte[12]; @@ -149,7 +149,7 @@ private Image load(InputStream stream) { int nbSlices = Math.max(numberOfFaces,numberOfArrayElements); - Image.Format imgFormat = getImageFormat(glFormat, glInternalFormat, glType); + GlImage.Format imgFormat = getImageFormat(glFormat, glInternalFormat, glType); log.log(Level.FINE, "img format {0}", imgFormat.toString()); @@ -159,7 +159,7 @@ private Image load(InputStream stream) { int[] mipMapSizes = new int[numberOfMipmapLevels]; - Image image = createImage(nbSlices, byteBuffersSize, imgFormat, pixelWidth, pixelHeight, pixelDepth); + GlImage image = createImage(nbSlices, byteBuffersSize, imgFormat, pixelWidth, pixelHeight, pixelDepth); byte[] pixelData = new byte[bytePerPixel]; @@ -258,12 +258,12 @@ private int computeBuffersSize(int numberOfMipmapLevels, int pixelWidth, int pix * @param depth * @return */ - private Image createImage(int nbSlices, int byteBuffersSize, Image.Format imgFormat, int pixelWidth, int pixelHeight, int depth) { + private GlImage createImage(int nbSlices, int byteBuffersSize, GlImage.Format imgFormat, int pixelWidth, int pixelHeight, int depth) { ArrayList imageData = new ArrayList<>(nbSlices); for (int i = 0; i < nbSlices; i++) { imageData.add(BufferUtils.createByteBuffer(byteBuffersSize)); } - Image image = new Image(imgFormat, pixelWidth, pixelHeight, depth, imageData, ColorSpace.sRGB); + GlImage image = new GlImage(imgFormat, pixelWidth, pixelHeight, depth, imageData, ColorSpace.sRGB); return image; } @@ -334,7 +334,7 @@ private boolean checkFileIdentifier(byte[] b) { * @param glType * @return */ - private Image.Format getImageFormat(int glFormat, int glInternalFormat, int glType) { + private GlImage.Format getImageFormat(int glFormat, int glInternalFormat, int glType) { EnumSet caps = EnumSet.allOf(Caps.class); GLImageFormat[][] formats = GLImageFormats.getFormatsForCaps(caps); for (GLImageFormat[] format : formats) { @@ -343,7 +343,7 @@ private Image.Format getImageFormat(int glFormat, int glInternalFormat, int glTy if (glImgFormat != null) { if (glImgFormat.format == glFormat && glImgFormat.dataType == glType) { if (glFormat == glInternalFormat || glImgFormat.internalFormat == glInternalFormat) { - return Image.Format.values()[j]; + return GlImage.Format.values()[j]; } } } diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/ktx/KTXWriter.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/ktx/KTXWriter.java index 116ec05df2..1d4366f79f 100644 --- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/ktx/KTXWriter.java +++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/ktx/KTXWriter.java @@ -34,8 +34,8 @@ import com.jme3.renderer.Caps; import com.jme3.renderer.opengl.GLImageFormat; import com.jme3.renderer.opengl.GLImageFormats; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.texture.Texture3D; import com.jme3.texture.TextureArray; @@ -83,7 +83,7 @@ public KTXWriter(String path) { * @param image the image to write * @param fileName the name of the file to write */ - public void write(Image image, String fileName) { + public void write(GlImage image, String fileName) { write(image, Texture2D.class, fileName); } @@ -97,7 +97,7 @@ public void write(Image image, String fileName) { * @param textureType the texture type * @param fileName the name of the file to write */ - public void write(Image image, Class textureType, String fileName) { + public void write(GlImage image, Class textureType, String fileName) { FileOutputStream outs = null; try { @@ -110,7 +110,7 @@ public void write(Image image, Class textureType, String file out.write(fileIdentifier); //endianness out.writeInt(0x04030201); - GLImageFormat format = getGlFormat(image.getFormat()); + GLImageFormat format = getGlFormat(image.getGlFormat()); //glType out.writeInt(format.dataType); //glTypeSize @@ -181,7 +181,7 @@ public void write(Image image, Class textureType, String file if (image.hasMipmaps()) { imageSize = image.getMipMapSizes()[mipLevel]; } else { - imageSize = width * height * image.getFormat().getBitsPerPixel() / 8; + imageSize = width * height * image.getGlFormat().getBitsPerPixel() / 8; } out.writeInt(imageSize); @@ -263,7 +263,7 @@ private byte[] getByteBufferArray(ByteBuffer byteBuffer, int size) { * @param format * @return */ - private GLImageFormat getGlFormat(Image.Format format) { + private GLImageFormat getGlFormat(GlImage.Format format) { EnumSet caps = EnumSet.allOf(Caps.class); GLImageFormat[][] formats = GLImageFormats.getFormatsForCaps(caps); return formats[0][format.ordinal()]; diff --git a/jme3-core/src/test/java/com/jme3/material/MaterialMatParamTest.java b/jme3-core/src/test/java/com/jme3/material/MaterialMatParamTest.java index 9b572e8e93..a11db8906b 100644 --- a/jme3-core/src/test/java/com/jme3/material/MaterialMatParamTest.java +++ b/jme3-core/src/test/java/com/jme3/material/MaterialMatParamTest.java @@ -50,8 +50,8 @@ import com.jme3.shader.DefineList; import com.jme3.system.NullRenderer; import com.jme3.system.TestUtil; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import java.util.ArrayList; import static org.junit.Assert.assertEquals; @@ -445,7 +445,7 @@ public void setShader(Shader shader) { } @Override - public void setTexture(int unit, Texture texture) { + public void setTexture(int unit, GlTexture texture) { MaterialMatParamTest.this.usedTextures[unit] = texture; } }; @@ -453,7 +453,7 @@ public void setTexture(int unit, Texture texture) { private boolean evaluated = false; private Shader usedShader = null; - private final Texture[] usedTextures = new Texture[32]; + private final GlTexture[] usedTextures = new GlTexture[32]; private void inputMp(MatParam... params) { if (evaluated) { @@ -530,7 +530,7 @@ private void evaluateTechniqueDef() { Assert.assertTrue(evaluated); } - private void outTextures(Texture... textures) { + private void outTextures(GlTexture... textures) { for (int i = 0; i < usedTextures.length; i++) { if (i < textures.length) { Assert.assertSame(textures[i], usedTextures[i]); diff --git a/jme3-core/src/test/java/com/jme3/material/MaterialTest.java b/jme3-core/src/test/java/com/jme3/material/MaterialTest.java index 6edd3ed34a..8b5eaf7407 100644 --- a/jme3-core/src/test/java/com/jme3/material/MaterialTest.java +++ b/jme3-core/src/test/java/com/jme3/material/MaterialTest.java @@ -39,9 +39,9 @@ import com.jme3.shader.VarType; import com.jme3.system.NullRenderer; import com.jme3.system.TestUtil; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.Texture2D; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; @@ -130,8 +130,8 @@ public void testSelectNamedTechnique_GLSL150Cap() { @Test public void testForcedColorSpace(){ - Image img=new Image(Format.RGBA8,2,2,BufferUtils.createByteBuffer(16),null,ColorSpace.sRGB); - Image img2=new Image(Format.RGBA8,2,2,BufferUtils.createByteBuffer(16),null,ColorSpace.sRGB); + GlImage img=new GlImage(Format.RGBA8,2,2,BufferUtils.createByteBuffer(16),null,ColorSpace.sRGB); + GlImage img2=new GlImage(Format.RGBA8,2,2,BufferUtils.createByteBuffer(16),null,ColorSpace.sRGB); Texture2D tx=new Texture2D(img); Texture2D tx2=new Texture2D(img2); diff --git a/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java b/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java index 7126d94fa8..5af7845993 100644 --- a/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java +++ b/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java @@ -9,7 +9,7 @@ import com.jme3.material.MaterialDef; import com.jme3.renderer.Caps; import com.jme3.shader.VarType; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.io.IOException; import java.util.EnumSet; import org.junit.Before; @@ -84,8 +84,8 @@ public void multipleSameNamedTechniques_shouldBeSupported() throws IOException { public void oldStyleTextureParameters_shouldBeSupported() throws Exception { when(assetInfo.openStream()).thenReturn(J3MLoader.class.getResourceAsStream("/texture-parameters-oldstyle.j3m")); - final Texture textureOldStyle = Mockito.mock(Texture.class); - final Texture textureOldStyleUsingQuotes = Mockito.mock(Texture.class); + final GlTexture textureOldStyle = Mockito.mock(GlTexture.class); + final GlTexture textureOldStyleUsingQuotes = Mockito.mock(GlTexture.class); final TextureKey textureKeyUsingQuotes = setupMockForTexture("OldStyleUsingQuotes", "old style using quotes/texture.png", true, true, textureOldStyleUsingQuotes); final TextureKey textureKeyOldStyle = setupMockForTexture("OldStyle", "old style/texture.png", true, true, textureOldStyle); @@ -94,22 +94,22 @@ public void oldStyleTextureParameters_shouldBeSupported() throws Exception { verify(assetManager).loadTexture(textureKeyUsingQuotes); verify(assetManager).loadTexture(textureKeyOldStyle); - verify(textureOldStyle).setWrap(Texture.WrapMode.Repeat); - verify(textureOldStyleUsingQuotes).setWrap(Texture.WrapMode.Repeat); + verify(textureOldStyle).setWrap(GlTexture.WrapMode.Repeat); + verify(textureOldStyleUsingQuotes).setWrap(GlTexture.WrapMode.Repeat); } @Test public void newStyleTextureParameters_shouldBeSupported() throws Exception { when(assetInfo.openStream()).thenReturn(J3MLoader.class.getResourceAsStream("/texture-parameters-newstyle.j3m")); - final Texture textureNoParameters = Mockito.mock(Texture.class); - final Texture textureFlip = Mockito.mock(Texture.class); - final Texture textureRepeat = Mockito.mock(Texture.class); - final Texture textureRepeatAxis = Mockito.mock(Texture.class); - final Texture textureMin = Mockito.mock(Texture.class); - final Texture textureMag = Mockito.mock(Texture.class); - final Texture textureCombined = Mockito.mock(Texture.class); - final Texture textureLooksLikeOldStyle = Mockito.mock(Texture.class); + final GlTexture textureNoParameters = Mockito.mock(GlTexture.class); + final GlTexture textureFlip = Mockito.mock(GlTexture.class); + final GlTexture textureRepeat = Mockito.mock(GlTexture.class); + final GlTexture textureRepeatAxis = Mockito.mock(GlTexture.class); + final GlTexture textureMin = Mockito.mock(GlTexture.class); + final GlTexture textureMag = Mockito.mock(GlTexture.class); + final GlTexture textureCombined = Mockito.mock(GlTexture.class); + final GlTexture textureLooksLikeOldStyle = Mockito.mock(GlTexture.class); final TextureKey textureKeyNoParameters = setupMockForTexture("Empty", "empty.png", false, true, textureNoParameters); final TextureKey textureKeyFlip = setupMockForTexture("Flip", "flip.png", true, true, textureFlip); @@ -125,17 +125,17 @@ public void newStyleTextureParameters_shouldBeSupported() throws Exception { verify(assetManager).loadTexture(textureKeyNoParameters); verify(assetManager).loadTexture(textureKeyFlip); - verify(textureRepeat).setWrap(Texture.WrapMode.Repeat); - verify(textureRepeatAxis).setWrap(Texture.WrapAxis.T, Texture.WrapMode.Repeat); - verify(textureMin).setMinFilter(Texture.MinFilter.Trilinear); - verify(textureMag).setMagFilter(Texture.MagFilter.Bilinear); + verify(textureRepeat).setWrap(GlTexture.WrapMode.Repeat); + verify(textureRepeatAxis).setWrap(GlTexture.WrapAxis.T, GlTexture.WrapMode.Repeat); + verify(textureMin).setMinFilter(GlTexture.MinFilter.Trilinear); + verify(textureMag).setMagFilter(GlTexture.MagFilter.Bilinear); - verify(textureCombined).setMagFilter(Texture.MagFilter.Nearest); - verify(textureCombined).setMinFilter(Texture.MinFilter.BilinearNoMipMaps); - verify(textureCombined).setWrap(Texture.WrapMode.Repeat); + verify(textureCombined).setMagFilter(GlTexture.MagFilter.Nearest); + verify(textureCombined).setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); + verify(textureCombined).setWrap(GlTexture.WrapMode.Repeat); } - private TextureKey setupMockForTexture(final String paramName, final String path, final boolean flipY, boolean generateMips, final Texture texture) { + private TextureKey setupMockForTexture(final String paramName, final String path, final boolean flipY, boolean generateMips, final GlTexture texture) { when(materialDef.getMaterialParam(paramName)).thenReturn(new MatParamTexture(VarType.Texture2D, paramName, texture, null)); final TextureKey textureKey = new TextureKey(path, flipY); diff --git a/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java b/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java index 929281819e..ae99460114 100644 --- a/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java +++ b/jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java @@ -41,9 +41,9 @@ import com.jme3.scene.Mesh; import com.jme3.scene.shape.Box; import com.jme3.system.TestUtil; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; @@ -188,9 +188,9 @@ public void testNoSortByParam() { testSort(sameMat1, sameMat2); } - private Texture createTexture(String name) { + private GlTexture createTexture(String name) { ByteBuffer bb = BufferUtils.createByteBuffer(3); - Image image = new Image(Format.RGB8, 1, 1, bb, ColorSpace.sRGB); + GlImage image = new GlImage(Format.RGB8, 1, 1, bb, ColorSpace.sRGB); Texture2D texture = new Texture2D(image); texture.setName(name); return texture; @@ -202,13 +202,13 @@ public void testSortByTexture() { Material texture2Mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); Material texture3Mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - Texture tex1 = createTexture("A"); + GlTexture tex1 = createTexture("A"); tex1.getImage().setId(1); - Texture tex2 = createTexture("B"); + GlTexture tex2 = createTexture("B"); tex2.getImage().setId(2); - Texture tex3 = createTexture("C"); + GlTexture tex3 = createTexture("C"); tex3.getImage().setId(3); texture1Mat.setName("TexA"); @@ -261,11 +261,11 @@ public void testSortByAll() { Material matBase1 = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); Material matBase2 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - Texture texBase = createTexture("BASE"); + GlTexture texBase = createTexture("BASE"); texBase.getImage().setId(1); - Texture tex1 = createTexture("1"); + GlTexture tex1 = createTexture("1"); tex1.getImage().setId(2); - Texture tex2 = createTexture("2"); + GlTexture tex2 = createTexture("2"); tex2.getImage().setId(3); matBase1.setName("BASE"); diff --git a/jme3-core/src/test/java/com/jme3/scene/plugins/OBJLoaderTest.java b/jme3-core/src/test/java/com/jme3/scene/plugins/OBJLoaderTest.java index 8fadbedae5..5e60407c15 100644 --- a/jme3-core/src/test/java/com/jme3/scene/plugins/OBJLoaderTest.java +++ b/jme3-core/src/test/java/com/jme3/scene/plugins/OBJLoaderTest.java @@ -39,7 +39,7 @@ import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.system.TestUtil; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import org.junit.Before; import org.junit.Test; @@ -100,7 +100,7 @@ private static String toDiffFriendlyString(String indent, Spatial spatial) { public static class PngLoaderStub implements AssetLoader { @Override public Object load(final AssetInfo assetInfo) { - return new Image(); + return new GlImage(); } } } \ No newline at end of file diff --git a/jme3-core/src/test/java/com/jme3/texture/TestIssue2250.java b/jme3-core/src/test/java/com/jme3/texture/TestIssue2250.java index 51d9e9e007..0fde872f09 100644 --- a/jme3-core/src/test/java/com/jme3/texture/TestIssue2250.java +++ b/jme3-core/src/test/java/com/jme3/texture/TestIssue2250.java @@ -54,8 +54,8 @@ public void testIssue2250WithData() { int height = 8; int numBytes = 4 * width * height; ByteBuffer data = BufferUtils.createByteBuffer(numBytes); - Image image1 = new Image( - Image.Format.RGBA8, width, height, data, ColorSpace.Linear); + GlImage image1 = new GlImage( + GlImage.Format.RGBA8, width, height, data, ColorSpace.Linear); image1.setMultiSamples(1); } @@ -71,7 +71,7 @@ public void testIssue2250WithMips() { int[] mipMapSizes = {256, 64, 16, 4}; ArrayList data = new ArrayList<>(); - Image image2 = new Image(Image.Format.RGBA8, width, height, depth, data, + GlImage image2 = new GlImage(GlImage.Format.RGBA8, width, height, depth, data, mipMapSizes, ColorSpace.Linear); image2.setMultiSamples(1); diff --git a/jme3-core/src/test/java/com/jme3/texture/TextureArrayTest.java b/jme3-core/src/test/java/com/jme3/texture/TextureArrayTest.java index bd861b9879..095d94e9cb 100644 --- a/jme3-core/src/test/java/com/jme3/texture/TextureArrayTest.java +++ b/jme3-core/src/test/java/com/jme3/texture/TextureArrayTest.java @@ -36,8 +36,8 @@ import com.jme3.asset.AssetManager; import com.jme3.asset.DesktopAssetManager; import com.jme3.export.binary.BinaryExporter; -import com.jme3.texture.Texture.WrapAxis; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture.WrapAxis; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; import java.nio.ByteBuffer; @@ -51,7 +51,7 @@ public class TextureArrayTest { @Test public void testExportWrapMode() { - List images = new ArrayList<>(); + List images = new ArrayList<>(); images.add(createImage()); images.add(createImage()); TextureArray tex3 = new TextureArray(images); @@ -62,12 +62,12 @@ public void testExportWrapMode() { assertEquals(tex3.getWrap(WrapAxis.T), tex4.getWrap(WrapAxis.T)); } - private Image createImage() { + private GlImage createImage() { int width = 8; int height = 8; int numBytes = 4 * width * height; ByteBuffer data = BufferUtils.createByteBuffer(numBytes); - return new Image(Image.Format.RGBA8, width, height, data, ColorSpace.Linear); + return new GlImage(GlImage.Format.RGBA8, width, height, data, ColorSpace.Linear); } } diff --git a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java index 649fa8a1f9..d6d83d27cb 100644 --- a/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java +++ b/jme3-core/src/tools/java/jme3tools/optimize/GeometryBatchFactory.java @@ -5,7 +5,7 @@ import com.jme3.math.Transform; import com.jme3.math.Vector3f; import com.jme3.scene.*; -import com.jme3.scene.OldMesh.Mode; +import com.jme3.scene.GlMesh.Mode; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; diff --git a/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java b/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java index 9447b2d956..7b7cf956f7 100644 --- a/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java +++ b/jme3-core/src/tools/java/jme3tools/optimize/TextureAtlas.java @@ -41,9 +41,9 @@ import com.jme3.scene.Spatial; import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; @@ -143,9 +143,9 @@ public TextureAtlas(int width, int height) { * @return false if the atlas is full. */ public boolean addGeometry(Geometry geometry) { - Texture diffuse = getMaterialTexture(geometry, "DiffuseMap"); - Texture normal = getMaterialTexture(geometry, "NormalMap"); - Texture specular = getMaterialTexture(geometry, "SpecularMap"); + GlTexture diffuse = getMaterialTexture(geometry, "DiffuseMap"); + GlTexture normal = getMaterialTexture(geometry, "NormalMap"); + GlTexture specular = getMaterialTexture(geometry, "SpecularMap"); if (diffuse == null) { diffuse = getMaterialTexture(geometry, "ColorMap"); @@ -173,7 +173,7 @@ public boolean addGeometry(Geometry geometry) { * @param mapName A freely chosen map name that can be later retrieved as a Texture. The first map name supplied will be the master map. * @return false if the atlas is full. */ - public boolean addTexture(Texture texture, String mapName) { + public boolean addTexture(GlTexture texture, String mapName) { if (texture == null) { throw new IllegalStateException("Texture cannot be null!"); } @@ -191,7 +191,7 @@ public boolean addTexture(Texture texture, String mapName) { * @param mapName A freely chosen map name that can be later retrieved as a Texture. * @param masterTexture The master texture for determining the location, it has to exist in tha master map. */ - public void addTexture(Texture texture, String mapName, Texture masterTexture) { + public void addTexture(GlTexture texture, String mapName, GlTexture masterTexture) { String sourceTextureName = textureName(masterTexture); if (sourceTextureName == null) { throw new IllegalStateException("Supplied master map texture has no asset key name!"); @@ -206,7 +206,7 @@ public void addTexture(Texture texture, String mapName, Texture masterTexture) { * @param mapName A freely chosen map name that can be later retrieved as a Texture. * @param sourceTextureName Name of the master map used for the location. */ - public void addTexture(Texture texture, String mapName, String sourceTextureName) { + public void addTexture(GlTexture texture, String mapName, String sourceTextureName) { if (texture == null) { throw new IllegalStateException("Texture cannot be null!"); } @@ -218,7 +218,7 @@ public void addTexture(Texture texture, String mapName, String sourceTextureName } } - private String textureName(Texture texture) { + private String textureName(GlTexture texture) { if (texture == null) { return null; } @@ -230,7 +230,7 @@ private String textureName(Texture texture) { } } - private boolean addImage(Image image, String name, String mapName, String sourceTextureName) { + private boolean addImage(GlImage image, String name, String mapName, String sourceTextureName) { if (rootMapName == null) { rootMapName = mapName; } @@ -270,7 +270,7 @@ private boolean addImage(Image image, String name, String mapName, String source return true; } - private void drawImage(Image source, int x, int y, String mapName) { + private void drawImage(GlImage source, int x, int y, String mapName) { if (images == null) { images = new HashMap(); } @@ -286,41 +286,41 @@ private void drawImage(Image source, int x, int y, String mapName) { ByteBuffer sourceData = source.getData(0); int height = source.getHeight(); int width = source.getWidth(); - Image newImage = null; + GlImage newImage = null; for (int yPos = 0; yPos < height; yPos++) { for (int xPos = 0; xPos < width; xPos++) { int i = ((xPos + x) + (yPos + y) * atlasWidth) * 4; - if (source.getFormat() == Format.ABGR8) { + if (source.getGlFormat() == Format.ABGR8) { int j = (xPos + yPos * width) * 4; image[i] = sourceData.get(j); //a image[i + 1] = sourceData.get(j + 1); //b image[i + 2] = sourceData.get(j + 2); //g image[i + 3] = sourceData.get(j + 3); //r - } else if (source.getFormat() == Format.BGR8) { + } else if (source.getGlFormat() == Format.BGR8) { int j = (xPos + yPos * width) * 3; image[i] = 1; //a image[i + 1] = sourceData.get(j); //b image[i + 2] = sourceData.get(j + 1); //g image[i + 3] = sourceData.get(j + 2); //r - } else if (source.getFormat() == Format.RGB8) { + } else if (source.getGlFormat() == Format.RGB8) { int j = (xPos + yPos * width) * 3; image[i] = 1; //a image[i + 1] = sourceData.get(j + 2); //b image[i + 2] = sourceData.get(j + 1); //g image[i + 3] = sourceData.get(j); //r - } else if (source.getFormat() == Format.RGBA8) { + } else if (source.getGlFormat() == Format.RGBA8) { int j = (xPos + yPos * width) * 4; image[i] = sourceData.get(j + 3); //a image[i + 1] = sourceData.get(j + 2); //b image[i + 2] = sourceData.get(j + 1); //g image[i + 3] = sourceData.get(j); //r - } else if (source.getFormat() == Format.Luminance8) { + } else if (source.getGlFormat() == Format.Luminance8) { int j = (xPos + yPos * width) * 1; image[i] = 1; //a image[i + 1] = sourceData.get(j); //b image[i + 2] = sourceData.get(j); //g image[i + 3] = sourceData.get(j); //r - } else if (source.getFormat() == Format.Luminance8Alpha8) { + } else if (source.getGlFormat() == Format.Luminance8Alpha8) { int j = (xPos + yPos * width) * 2; image[i] = sourceData.get(j + 1); //a image[i + 1] = sourceData.get(j); //b @@ -339,10 +339,10 @@ private void drawImage(Image source, int x, int y, String mapName) { image[i + 2] = sourceData.get(j + 2); //g image[i + 3] = sourceData.get(j + 3); //r }else{ - throw new UnsupportedOperationException("Cannot draw or convert textures with format " + source.getFormat()); + throw new UnsupportedOperationException("Cannot draw or convert textures with format " + source.getGlFormat()); } } else { - throw new UnsupportedOperationException("Cannot draw textures with format " + source.getFormat()); + throw new UnsupportedOperationException("Cannot draw textures with format " + source.getGlFormat()); } } } @@ -350,15 +350,15 @@ private void drawImage(Image source, int x, int y, String mapName) { } @SuppressWarnings("unchecked") - private Image convertImageToAwt(Image source) { + private GlImage convertImageToAwt(GlImage source) { //use awt dependent classes without actual dependency via reflection try { Class clazz = Class.forName("jme3tools.converters.ImageToAwt"); if (clazz == null) { return null; } - Image newImage = new Image(format, source.getWidth(), source.getHeight(), BufferUtils.createByteBuffer(source.getWidth() * source.getHeight() * 4), null, ColorSpace.Linear); - clazz.getMethod("convert", Image.class, Image.class).invoke(clazz.getDeclaredConstructor().newInstance(), source, newImage); + GlImage newImage = new GlImage(format, source.getWidth(), source.getHeight(), BufferUtils.createByteBuffer(source.getWidth() * source.getHeight() * 4), null, ColorSpace.Linear); + clazz.getMethod("convert", GlImage.class, GlImage.class).invoke(clazz.getDeclaredConstructor().newInstance(), source, newImage); return newImage; } catch (InstantiationException | IllegalAccessException @@ -376,7 +376,7 @@ private Image convertImageToAwt(Image source) { * @param texture The texture to retrieve the TextureAtlasTile for. * @return the atlas tile */ - public TextureAtlasTile getAtlasTile(Texture texture) { + public TextureAtlasTile getAtlasTile(GlTexture texture) { String sourceTextureName = textureName(texture); if (sourceTextureName != null) { return getAtlasTile(sourceTextureName); @@ -399,17 +399,17 @@ private TextureAtlasTile getAtlasTile(String assetName) { * @param mapName the desired name * @return the atlas texture */ - public Texture getAtlasTexture(String mapName) { + public GlTexture getAtlasTexture(String mapName) { if (images == null) { return null; } byte[] image = images.get(mapName); if (image != null) { //TODO check if color space shouldn't be sRGB - Texture2D tex = new Texture2D(new Image(format, atlasWidth, atlasHeight, BufferUtils.createByteBuffer(image), null, ColorSpace.Linear)); - tex.setMagFilter(Texture.MagFilter.Bilinear); - tex.setMinFilter(Texture.MinFilter.BilinearNearestMipMap); - tex.setWrap(Texture.WrapMode.EdgeClamp); + Texture2D tex = new Texture2D(new GlImage(format, atlasWidth, atlasHeight, BufferUtils.createByteBuffer(image), null, ColorSpace.Linear)); + tex.setMagFilter(GlTexture.MagFilter.Bilinear); + tex.setMinFilter(GlTexture.MinFilter.BilinearNearestMipMap); + tex.setWrap(GlTexture.WrapMode.EdgeClamp); return tex; } return null; @@ -444,7 +444,7 @@ public boolean applyCoords(Geometry geom, int offset, Mesh outMesh) { throw new IllegalStateException("Geometry mesh has no texture coordinate buffer."); } - Texture tex = getMaterialTexture(geom, "DiffuseMap"); + GlTexture tex = getMaterialTexture(geom, "DiffuseMap"); if (tex == null) { tex = getMaterialTexture(geom, "ColorMap"); @@ -507,9 +507,9 @@ public static Geometry makeAtlasBatch(Spatial spat, AssetManager mgr, int atlasS geom.setMesh(mesh); Material mat = new Material(mgr, "Common/MatDefs/Light/Lighting.j3md"); - Texture diffuseMap = atlas.getAtlasTexture("DiffuseMap"); - Texture normalMap = atlas.getAtlasTexture("NormalMap"); - Texture specularMap = atlas.getAtlasTexture("SpecularMap"); + GlTexture diffuseMap = atlas.getAtlasTexture("DiffuseMap"); + GlTexture normalMap = atlas.getAtlasTexture("NormalMap"); + GlTexture specularMap = atlas.getAtlasTexture("SpecularMap"); if (diffuseMap != null) { mat.setTexture("DiffuseMap", diffuseMap); } @@ -547,13 +547,13 @@ private static void applyAtlasCoords(List geometries, Mesh outMesh, Te } } - private static Texture getMaterialTexture(Geometry geometry, String mapName) { + private static GlTexture getMaterialTexture(Geometry geometry, String mapName) { Material mat = geometry.getMaterial(); if (mat == null || mat.getParam(mapName) == null || !(mat.getParam(mapName) instanceof MatParamTexture)) { return null; } MatParamTexture param = (MatParamTexture) mat.getParam(mapName); - Texture texture = param.getTextureValue(); + GlTexture texture = param.getTextureValue(); if (texture == null) { return null; } @@ -581,7 +581,7 @@ public boolean isLeaf() { } // Algorithm from http://www.blackpawn.com/texts/lightmaps/ - public Node insert(Image image) { + public Node insert(GlImage image) { if (!isLeaf()) { Node newNode = child[0].insert(image); diff --git a/jme3-desktop/src/main/java/com/jme3/app/state/VideoRecorderAppState.java b/jme3-desktop/src/main/java/com/jme3/app/state/VideoRecorderAppState.java index 7e1d55b3e3..0824f2d7a7 100644 --- a/jme3-desktop/src/main/java/com/jme3/app/state/VideoRecorderAppState.java +++ b/jme3-desktop/src/main/java/com/jme3/app/state/VideoRecorderAppState.java @@ -41,7 +41,7 @@ import com.jme3.renderer.queue.RenderQueue; import com.jme3.system.Timer; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.util.BufferUtils; import com.jme3.util.Screenshots; import java.awt.image.BufferedImage; @@ -231,7 +231,7 @@ public void addImage(Renderer renderer, FrameBuffer out) { final WorkItem item = freeItems.take(); usedItems.add(item); item.buffer.clear(); - renderer.readFrameBufferWithFormat(out, item.buffer, Image.Format.BGRA8); + renderer.readFrameBufferWithFormat(out, item.buffer, GlImage.Format.BGRA8); executor.submit(new Callable() { @Override diff --git a/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java b/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java index bfb0e85e31..2b61aedd91 100644 --- a/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java +++ b/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java @@ -51,7 +51,7 @@ import com.jme3.renderer.Renderer; import com.jme3.system.AWTFrameProcessor.TransferMode; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.util.BufferUtils; @@ -186,8 +186,8 @@ public AWTComponentRenderer(Component destination, TransferMode transferMode, Fr this.frameBuffer = frameBuffer; } else { this.frameBuffer = new FrameBuffer(width, height, 1); - this.frameBuffer.setDepthBuffer(Image.Format.Depth); - this.frameBuffer.setColorBuffer(Image.Format.RGBA8); + this.frameBuffer.setDepthBuffer(GlImage.Format.Depth); + this.frameBuffer.setColorBuffer(GlImage.Format.RGBA8); this.frameBuffer.setSrgb(true); } @@ -270,7 +270,7 @@ public void copyFrameBufferToImage(RenderManager renderManager) { frameByteBuffer.clear(); final Renderer renderer = renderManager.getRenderer(); - renderer.readFrameBufferWithFormat(frameBuffer, frameByteBuffer, Image.Format.RGBA8); + renderer.readFrameBufferWithFormat(frameBuffer, frameByteBuffer, GlImage.Format.RGBA8); } finally { if (!frameState.compareAndSet(RUNNING_STATE, WAITING_STATE)) { diff --git a/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java b/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java index 111e856973..b0fda11ed0 100644 --- a/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java +++ b/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java @@ -49,7 +49,7 @@ import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; /** * A frame processor that enables to render JMonkey frame buffer onto an AWT component. @@ -620,8 +620,8 @@ protected void reshapeCurrentViewPort(int width, int height) { if (found) { FrameBuffer frameBuffer = new FrameBuffer(width, height, 1); - frameBuffer.setDepthBuffer(Image.Format.Depth); - frameBuffer.setColorBuffer(Image.Format.RGBA8); + frameBuffer.setDepthBuffer(GlImage.Format.Depth); + frameBuffer.setColorBuffer(GlImage.Format.RGBA8); frameBuffer.setSrgb(true); viewPort.setOutputFrameBuffer(frameBuffer); diff --git a/jme3-desktop/src/main/java/com/jme3/system/JmeDesktopSystem.java b/jme3-desktop/src/main/java/com/jme3/system/JmeDesktopSystem.java index 81c197a3c5..2c28833e0e 100644 --- a/jme3-desktop/src/main/java/com/jme3/system/JmeDesktopSystem.java +++ b/jme3-desktop/src/main/java/com/jme3/system/JmeDesktopSystem.java @@ -37,7 +37,7 @@ import com.jme3.audio.openal.ALC; import com.jme3.audio.openal.EFX; import com.jme3.system.JmeContext.Type; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.image.ColorSpace; import com.jme3.util.res.Resources; @@ -102,7 +102,7 @@ private static BufferedImage ensureOpaque(BufferedImage original) { @Override public void writeImageFile(OutputStream outStream, String format, ByteBuffer imageData, int width, int height) throws IOException { - BufferedImage awtImage = ImageToAwt.convert(new Image(Image.Format.RGBA8, width, height, imageData.duplicate(), ColorSpace.Linear), false, true, 0); + BufferedImage awtImage = ImageToAwt.convert(new GlImage(GlImage.Format.RGBA8, width, height, imageData.duplicate(), ColorSpace.Linear), false, true, 0); awtImage = verticalFlip(awtImage); ImageWriter writer = ImageIO.getImageWritersByFormatName(format).next(); diff --git a/jme3-desktop/src/main/java/com/jme3/system/awt/AwtPanel.java b/jme3-desktop/src/main/java/com/jme3/system/awt/AwtPanel.java index a234775bdb..0d874ea5db 100644 --- a/jme3-desktop/src/main/java/com/jme3/system/awt/AwtPanel.java +++ b/jme3-desktop/src/main/java/com/jme3/system/awt/AwtPanel.java @@ -37,6 +37,7 @@ import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; import com.jme3.texture.FrameBuffer; +import com.jme3.texture.GlImage; import com.jme3.util.BufferUtils; import com.jme3.util.Screenshots; import java.awt.*; @@ -243,8 +244,8 @@ private void reshapeInThread(int width, int height) { } fb = new FrameBuffer(width, height, 1); - fb.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(com.jme3.texture.Image.Format.Depth)); - fb.addColorTarget(FrameBuffer.FrameBufferTarget.newTarget(com.jme3.texture.Image.Format.RGB8)); + fb.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(GlImage.Format.Depth)); + fb.addColorTarget(FrameBuffer.FrameBufferTarget.newTarget(GlImage.Format.RGB8)); fb.setSrgb(srgb); if (attachAsMain) { diff --git a/jme3-desktop/src/main/java/com/jme3/texture/plugins/AWTLoader.java b/jme3-desktop/src/main/java/com/jme3/texture/plugins/AWTLoader.java index 926e7305af..fadd628fef 100644 --- a/jme3-desktop/src/main/java/com/jme3/texture/plugins/AWTLoader.java +++ b/jme3-desktop/src/main/java/com/jme3/texture/plugins/AWTLoader.java @@ -35,8 +35,8 @@ import com.jme3.asset.AssetLoadException; import com.jme3.asset.AssetLoader; import com.jme3.asset.TextureKey; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; import com.jme3.util.BufferUtils; import java.awt.Transparency; import java.awt.color.ColorSpace; @@ -101,7 +101,7 @@ private void flipImage(short[] img, int width, int height, int bpp){ } } - public Image load(BufferedImage img, boolean flipY){ + public GlImage load(BufferedImage img, boolean flipY){ int width = img.getWidth(); int height = img.getHeight(); @@ -113,7 +113,7 @@ public Image load(BufferedImage img, boolean flipY){ ByteBuffer data1 = BufferUtils.createByteBuffer(img.getWidth()*img.getHeight()*4); data1.put(dataBuf1); - return new Image(Format.ABGR8, width, height, data1, null, com.jme3.texture.image.ColorSpace.sRGB); + return new GlImage(Format.ABGR8, width, height, data1, null, com.jme3.texture.image.ColorSpace.sRGB); case BufferedImage.TYPE_3BYTE_BGR: // most common in JPEG images byte[] dataBuf2 = (byte[]) extractImageData(img); if (flipY) @@ -121,14 +121,14 @@ public Image load(BufferedImage img, boolean flipY){ ByteBuffer data2 = BufferUtils.createByteBuffer(img.getWidth()*img.getHeight()*3); data2.put(dataBuf2); - return new Image(Format.BGR8, width, height, data2, null, com.jme3.texture.image.ColorSpace.sRGB); + return new GlImage(Format.BGR8, width, height, data2, null, com.jme3.texture.image.ColorSpace.sRGB); case BufferedImage.TYPE_BYTE_GRAY: // grayscale fonts byte[] dataBuf3 = (byte[]) extractImageData(img); if (flipY) flipImage(dataBuf3, width, height, 8); ByteBuffer data3 = BufferUtils.createByteBuffer(img.getWidth()*img.getHeight()); data3.put(dataBuf3); - return new Image(Format.Luminance8, width, height, data3, null, com.jme3.texture.image.ColorSpace.sRGB); + return new GlImage(Format.Luminance8, width, height, data3, null, com.jme3.texture.image.ColorSpace.sRGB); default: break; } @@ -151,7 +151,7 @@ public Image load(BufferedImage img, boolean flipY){ } } data.flip(); - return new Image(Format.RGB8, width, height, data, null, com.jme3.texture.image.ColorSpace.sRGB); + return new GlImage(Format.RGB8, width, height, data, null, com.jme3.texture.image.ColorSpace.sRGB); }else{ ByteBuffer data = BufferUtils.createByteBuffer(img.getWidth()*img.getHeight()*4); // alpha @@ -171,11 +171,11 @@ public Image load(BufferedImage img, boolean flipY){ } } data.flip(); - return new Image(Format.RGBA8, width, height, data, null, com.jme3.texture.image.ColorSpace.sRGB); + return new GlImage(Format.RGBA8, width, height, data, null, com.jme3.texture.image.ColorSpace.sRGB); } } - public Image load(InputStream in, boolean flipY) throws IOException{ + public GlImage load(InputStream in, boolean flipY) throws IOException{ ImageIO.setUseCache(false); BufferedImage img = ImageIO.read(in); if (img == null){ @@ -190,7 +190,7 @@ public Object load(AssetInfo info) throws IOException { boolean flip = ((TextureKey) info.getKey()).isFlipY(); try (InputStream in = info.openStream(); BufferedInputStream bin = new BufferedInputStream(in)) { - Image img = load(bin, flip); + GlImage img = load(bin, flip); if (img == null){ throw new AssetLoadException("The given image cannot be loaded " + info.getKey()); } diff --git a/jme3-desktop/src/main/java/jme3tools/converters/ImageToAwt.java b/jme3-desktop/src/main/java/jme3tools/converters/ImageToAwt.java index 82f03a410d..ad556493f9 100644 --- a/jme3-desktop/src/main/java/jme3tools/converters/ImageToAwt.java +++ b/jme3-desktop/src/main/java/jme3tools/converters/ImageToAwt.java @@ -31,8 +31,8 @@ */ package jme3tools.converters; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.plugins.AWTLoader; import com.jme3.util.BufferUtils; import java.awt.Transparency; @@ -279,8 +279,8 @@ public static void convert(BufferedImage image, Format format, ByteBuffer buf) { private static final double LOG2 = Math.log(2); - public static void createData(Image image, boolean mipmaps){ - int bpp = image.getFormat().getBitsPerPixel(); + public static void createData(GlImage image, boolean mipmaps){ + int bpp = image.getGlFormat().getBitsPerPixel(); int w = image.getWidth(); int h = image.getHeight(); if (!mipmaps){ @@ -309,9 +309,9 @@ public static void createData(Image image, boolean mipmaps){ * @param input the input image (not null, unaffected) * @param output the output image (not null, modified) */ - public static void convert(Image input, Image output){ - DecodeParams inParams = params.get(input.getFormat()); - DecodeParams outParams = params.get(output.getFormat()); + public static void convert(GlImage input, GlImage output){ + DecodeParams inParams = params.get(input.getGlFormat()); + DecodeParams outParams = params.get(output.getGlFormat()); if (inParams == null || outParams == null) throw new UnsupportedOperationException(); @@ -375,9 +375,9 @@ public static void convert(Image input, Image output){ } } - public static BufferedImage convert(Image image, boolean do16bit, boolean fullAlpha, int mipLevel){ - Format format = image.getFormat(); - DecodeParams p = params.get(image.getFormat()); + public static BufferedImage convert(GlImage image, boolean do16bit, boolean fullAlpha, int mipLevel){ + Format format = image.getGlFormat(); + DecodeParams p = params.get(image.getGlFormat()); if (p == null) throw new UnsupportedOperationException(); diff --git a/jme3-desktop/src/main/java/jme3tools/converters/MipMapGenerator.java b/jme3-desktop/src/main/java/jme3tools/converters/MipMapGenerator.java index 24378647e6..1f6abe9c0f 100644 --- a/jme3-desktop/src/main/java/jme3tools/converters/MipMapGenerator.java +++ b/jme3-desktop/src/main/java/jme3tools/converters/MipMapGenerator.java @@ -32,8 +32,8 @@ package jme3tools.converters; import com.jme3.math.FastMath; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.plugins.AWTLoader; import com.jme3.util.BufferUtils; import java.awt.Graphics2D; @@ -64,7 +64,7 @@ private static BufferedImage scaleDown(BufferedImage sourceImage, int targetWidt return targetImage; } - public static void resizeToPowerOf2(Image image){ + public static void resizeToPowerOf2(GlImage image){ BufferedImage original = ImageToAwt.convert(image, false, true, 0); int potWidth = FastMath.nearestPowerOfTwo(image.getWidth()); int potHeight = FastMath.nearestPowerOfTwo(image.getHeight()); @@ -73,17 +73,17 @@ public static void resizeToPowerOf2(Image image){ BufferedImage scaled = scaleDown(original, potSize, potSize); AWTLoader loader = new AWTLoader(); - Image output = loader.load(scaled, false); + GlImage output = loader.load(scaled, false); image.setWidth(potSize); image.setHeight(potSize); image.setDepth(0); image.setData(output.getData(0)); - image.setFormat(output.getFormat()); + image.setFormat(output.getGlFormat()); image.setMipMapSizes(null); } - public static void generateMipMaps(Image image){ + public static void generateMipMaps(GlImage image){ BufferedImage original = ImageToAwt.convert(image, false, true, 0); int width = original.getWidth(); int height = original.getHeight(); @@ -96,8 +96,8 @@ public static void generateMipMaps(Image image){ Format format = null; while (height >= 1 || width >= 1){ - Image converted = loader.load(current, false); - format = converted.getFormat(); + GlImage converted = loader.load(current, false); + format = converted.getGlFormat(); output.add(converted.getData(0)); totalSize += converted.getData(0).capacity(); diff --git a/jme3-effects/src/main/java/com/jme3/post/filters/BloomFilter.java b/jme3-effects/src/main/java/com/jme3/post/filters/BloomFilter.java index 1ad0a967c8..5103e20817 100644 --- a/jme3-effects/src/main/java/com/jme3/post/filters/BloomFilter.java +++ b/jme3-effects/src/main/java/com/jme3/post/filters/BloomFilter.java @@ -43,7 +43,7 @@ import com.jme3.renderer.Renderer; import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import java.io.IOException; import java.util.ArrayList; diff --git a/jme3-effects/src/main/java/com/jme3/post/filters/CartoonEdgeFilter.java b/jme3-effects/src/main/java/com/jme3/post/filters/CartoonEdgeFilter.java index ab04279633..daaa8be176 100644 --- a/jme3-effects/src/main/java/com/jme3/post/filters/CartoonEdgeFilter.java +++ b/jme3-effects/src/main/java/com/jme3/post/filters/CartoonEdgeFilter.java @@ -45,7 +45,7 @@ import com.jme3.renderer.Renderer; import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; /** * Applies a cartoon-style edge detection filter to all objects in the scene. diff --git a/jme3-effects/src/main/java/com/jme3/post/filters/SoftBloomFilter.java b/jme3-effects/src/main/java/com/jme3/post/filters/SoftBloomFilter.java index 3ccbf03ff9..08e1a68edb 100644 --- a/jme3-effects/src/main/java/com/jme3/post/filters/SoftBloomFilter.java +++ b/jme3-effects/src/main/java/com/jme3/post/filters/SoftBloomFilter.java @@ -43,8 +43,8 @@ import com.jme3.renderer.RenderManager; import com.jme3.renderer.Renderer; import com.jme3.renderer.ViewPort; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import java.io.IOException; import java.util.logging.Logger; import java.util.logging.Level; @@ -77,7 +77,7 @@ public class SoftBloomFilter extends Filter { private int height; private Pass[] downsamplingPasses; private Pass[] upsamplingPasses; - private final Image.Format format = Image.Format.RGBA16F; + private final GlImage.Format format = GlImage.Format.RGBA16F; private boolean initialized = false; private int numSamplingPasses = 5; private float glowFactor = 0.05f; @@ -120,7 +120,7 @@ public void beforeRender() { downsampleMat.setVector2("TexelSize", initTexelSize); } }; - initialPass.init(renderer, w, h, format, Image.Format.Depth, 1, downsampleMat); + initialPass.init(renderer, w, h, format, GlImage.Format.Depth, 1, downsampleMat); postRenderPasses.add(initialPass); downsamplingPasses[0] = initialPass; for (int i = 1; i < downsamplingPasses.length; i++) { @@ -134,9 +134,9 @@ public void beforeRender() { downsampleMat.setVector2("TexelSize", texelSize); } }; - pass.init(renderer, w, h, format, Image.Format.Depth, 1, downsampleMat); + pass.init(renderer, w, h, format, GlImage.Format.Depth, 1, downsampleMat); if (bilinearFiltering) { - pass.getRenderedTexture().setMinFilter(Texture.MinFilter.BilinearNoMipMaps); + pass.getRenderedTexture().setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); } postRenderPasses.add(pass); downsamplingPasses[i] = pass; @@ -160,9 +160,9 @@ public void beforeRender() { upsampleMat.setVector2("TexelSize", texelSize); } }; - pass.init(renderer, w, h, format, Image.Format.Depth, 1, upsampleMat); + pass.init(renderer, w, h, format, GlImage.Format.Depth, 1, upsampleMat); if (bilinearFiltering) { - pass.getRenderedTexture().setMagFilter(Texture.MagFilter.Bilinear); + pass.getRenderedTexture().setMagFilter(GlTexture.MagFilter.Bilinear); } postRenderPasses.add(pass); upsamplingPasses[i] = pass; @@ -249,16 +249,16 @@ public void setBilinearFiltering(boolean bilinearFiltering) { if (initialized) { for (Pass p : downsamplingPasses) { if (this.bilinearFiltering) { - p.getRenderedTexture().setMinFilter(Texture.MinFilter.BilinearNoMipMaps); + p.getRenderedTexture().setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); } else { - p.getRenderedTexture().setMinFilter(Texture.MinFilter.NearestNoMipMaps); + p.getRenderedTexture().setMinFilter(GlTexture.MinFilter.NearestNoMipMaps); } } for (Pass p : upsamplingPasses) { if (this.bilinearFiltering) { - p.getRenderedTexture().setMagFilter(Texture.MagFilter.Bilinear); + p.getRenderedTexture().setMagFilter(GlTexture.MagFilter.Bilinear); } else { - p.getRenderedTexture().setMagFilter(Texture.MagFilter.Nearest); + p.getRenderedTexture().setMagFilter(GlTexture.MagFilter.Nearest); } } } diff --git a/jme3-effects/src/main/java/com/jme3/post/filters/TranslucentBucketFilter.java b/jme3-effects/src/main/java/com/jme3/post/filters/TranslucentBucketFilter.java index 1519dec4cd..9863444c50 100644 --- a/jme3-effects/src/main/java/com/jme3/post/filters/TranslucentBucketFilter.java +++ b/jme3-effects/src/main/java/com/jme3/post/filters/TranslucentBucketFilter.java @@ -43,7 +43,7 @@ import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import java.util.logging.Level; import java.util.logging.Logger; @@ -58,7 +58,7 @@ public final class TranslucentBucketFilter extends Filter { private final static Logger logger = Logger.getLogger(TranslucentBucketFilter.class.getName()); private RenderManager renderManager; private boolean enabledSoftParticles = false; - private Texture depthTexture; + private GlTexture depthTexture; private ViewPort viewPort; public TranslucentBucketFilter() { @@ -99,7 +99,7 @@ private void initSoftParticles(ViewPort vp, boolean enabledSP) { } @Override - protected void setDepthTexture(Texture depthTexture) { + protected void setDepthTexture(GlTexture depthTexture) { this.depthTexture = depthTexture; if (enabledSoftParticles && depthTexture != null) { initSoftParticles(viewPort, true); diff --git a/jme3-effects/src/main/java/com/jme3/post/ssao/SSAOFilter.java b/jme3-effects/src/main/java/com/jme3/post/ssao/SSAOFilter.java index 58a12570d0..4adb9ac11c 100644 --- a/jme3-effects/src/main/java/com/jme3/post/ssao/SSAOFilter.java +++ b/jme3-effects/src/main/java/com/jme3/post/ssao/SSAOFilter.java @@ -45,8 +45,8 @@ import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; import com.jme3.shader.VarType; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import java.io.IOException; import java.util.ArrayList; @@ -146,8 +146,8 @@ protected void initFilter(AssetManager assetManager, RenderManager renderManager //ssao Pass ssaoMat = new Material(assetManager, "Common/MatDefs/SSAO/ssao.j3md"); ssaoMat.setTexture("Normals", normalPass.getRenderedTexture()); - Texture random = assetManager.loadTexture("Common/MatDefs/SSAO/Textures/random.png"); - random.setWrap(Texture.WrapMode.Repeat); + GlTexture random = assetManager.loadTexture("Common/MatDefs/SSAO/Textures/random.png"); + random.setWrap(GlTexture.WrapMode.Repeat); ssaoMat.setTexture("RandomMap", random); Pass ssaoPass = new Pass("SSAO pass") { diff --git a/jme3-effects/src/main/java/com/jme3/water/SimpleWaterProcessor.java b/jme3-effects/src/main/java/com/jme3/water/SimpleWaterProcessor.java index 3bc5e7ca79..e1763daa49 100644 --- a/jme3-effects/src/main/java/com/jme3/water/SimpleWaterProcessor.java +++ b/jme3-effects/src/main/java/com/jme3/water/SimpleWaterProcessor.java @@ -43,8 +43,8 @@ import com.jme3.scene.shape.Quad; import com.jme3.texture.*; import com.jme3.texture.FrameBuffer.FrameBufferTarget; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.ui.Picture; /** @@ -255,11 +255,11 @@ protected void createTextures() { reflectionTexture = new Texture2D(renderWidth, renderHeight, Format.RGBA8); refractionTexture = new Texture2D(renderWidth, renderHeight, Format.RGBA8); - reflectionTexture.setMinFilter(Texture.MinFilter.Trilinear); - reflectionTexture.setMagFilter(Texture.MagFilter.Bilinear); + reflectionTexture.setMinFilter(GlTexture.MinFilter.Trilinear); + reflectionTexture.setMagFilter(GlTexture.MagFilter.Bilinear); - refractionTexture.setMinFilter(Texture.MinFilter.Trilinear); - refractionTexture.setMagFilter(Texture.MagFilter.Bilinear); + refractionTexture.setMinFilter(GlTexture.MinFilter.Trilinear); + refractionTexture.setMagFilter(GlTexture.MagFilter.Bilinear); depthTexture = new Texture2D(renderWidth, renderHeight, Format.Depth); } diff --git a/jme3-effects/src/main/java/com/jme3/water/WaterFilter.java b/jme3-effects/src/main/java/com/jme3/water/WaterFilter.java index 0d84b23674..a264d4204e 100644 --- a/jme3-effects/src/main/java/com/jme3/water/WaterFilter.java +++ b/jme3-effects/src/main/java/com/jme3/water/WaterFilter.java @@ -49,8 +49,8 @@ import com.jme3.renderer.ViewPort; import com.jme3.scene.Node; import com.jme3.scene.Spatial; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.Texture2D; import com.jme3.util.clone.Cloner; import com.jme3.util.clone.JmeCloneable; diff --git a/jme3-examples/src/main/java/jme3test/app/TestUseAfterFree.java b/jme3-examples/src/main/java/jme3test/app/TestUseAfterFree.java index b241d78087..0406fa42c1 100644 --- a/jme3-examples/src/main/java/jme3test/app/TestUseAfterFree.java +++ b/jme3-examples/src/main/java/jme3test/app/TestUseAfterFree.java @@ -35,7 +35,7 @@ import com.jme3.material.Material; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.util.BufferUtils; /** @@ -49,7 +49,7 @@ public class TestUseAfterFree extends SimpleApplication { private float time = 0; private Material mat; - private Texture deletedTex; + private GlTexture deletedTex; public static void main(String[] args) { TestUseAfterFree app = new TestUseAfterFree(); diff --git a/jme3-examples/src/main/java/jme3test/asset/TestUrlLoading.java b/jme3-examples/src/main/java/jme3test/asset/TestUrlLoading.java index 563eb4c7c7..21982d5fc0 100644 --- a/jme3-examples/src/main/java/jme3test/asset/TestUrlLoading.java +++ b/jme3-examples/src/main/java/jme3test/asset/TestUrlLoading.java @@ -39,7 +39,7 @@ import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Quad; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; /** * Load an image and display it from the internet using the UrlLocator. @@ -64,7 +64,7 @@ public void simpleInitApp() { UrlLocator.class); TextureKey key = new TextureKey("mucha-window.png", false); key.setGenerateMips(true); - Texture tex = assetManager.loadTexture(key); + GlTexture tex = assetManager.loadTexture(key); Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); mat.setTexture("ColorMap", tex); diff --git a/jme3-examples/src/main/java/jme3test/batching/TestBatchNodeTower.java b/jme3-examples/src/main/java/jme3test/batching/TestBatchNodeTower.java index 5f0e603fb5..d823553ee6 100644 --- a/jme3-examples/src/main/java/jme3test/batching/TestBatchNodeTower.java +++ b/jme3-examples/src/main/java/jme3test/batching/TestBatchNodeTower.java @@ -57,8 +57,8 @@ import com.jme3.shadow.EdgeFilteringMode; import com.jme3.system.AppSettings; import com.jme3.system.NanoTimer; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import jme3test.bullet.BombControl; /** @@ -208,19 +208,19 @@ public void initMaterial() { mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key = new TextureKey("Textures/Terrain/BrickWall/BrickWall.jpg"); key.setGenerateMips(true); - Texture tex = assetManager.loadTexture(key); + GlTexture tex = assetManager.loadTexture(key); mat.setTexture("ColorMap", tex); mat2 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key2 = new TextureKey("Textures/Terrain/Rock/Rock.PNG"); key2.setGenerateMips(true); - Texture tex2 = assetManager.loadTexture(key2); + GlTexture tex2 = assetManager.loadTexture(key2); mat2.setTexture("ColorMap", tex2); mat3 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key3 = new TextureKey("Textures/Terrain/Pond/Pond.jpg"); key3.setGenerateMips(true); - Texture tex3 = assetManager.loadTexture(key3); + GlTexture tex3 = assetManager.loadTexture(key3); tex3.setWrap(WrapMode.Repeat); mat3.setTexture("ColorMap", tex3); } diff --git a/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java b/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java index 59d02d64c8..7b9d44944e 100644 --- a/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java +++ b/jme3-examples/src/main/java/jme3test/bullet/PhysicsTestHelper.java @@ -55,7 +55,7 @@ import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Sphere; import com.jme3.scene.shape.Sphere.TextureMode; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.util.BufferUtils; /** @@ -237,7 +237,7 @@ public void onAction(String name, boolean keyPressed, float tpf) { Material mat2 = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key2 = new TextureKey("Textures/Terrain/Rock/Rock.PNG"); key2.setGenerateMips(true); - Texture tex2 = app.getAssetManager().loadTexture(key2); + GlTexture tex2 = app.getAssetManager().loadTexture(key2); mat2.setTexture("ColorMap", tex2); if (name.equals("shoot") && !keyPressed) { Geometry bulletGeometry = new Geometry("bullet", bullet); diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestAttachDriver.java b/jme3-examples/src/main/java/jme3test/bullet/TestAttachDriver.java index 8c1c712603..aa507c4d26 100644 --- a/jme3-examples/src/main/java/jme3test/bullet/TestAttachDriver.java +++ b/jme3-examples/src/main/java/jme3test/bullet/TestAttachDriver.java @@ -51,7 +51,7 @@ import com.jme3.scene.Node; import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Cylinder; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; /** * Tests attaching/detaching nodes via joints @@ -107,8 +107,8 @@ public void setupFloor() { Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key = new TextureKey("Interface/Logo/Monkey.jpg", true); key.setGenerateMips(true); - Texture tex = assetManager.loadTexture(key); - tex.setMinFilter(Texture.MinFilter.Trilinear); + GlTexture tex = assetManager.loadTexture(key); + tex.setMinFilter(GlTexture.MinFilter.Trilinear); mat.setTexture("ColorMap", tex); Box floor = new Box(100, 1f, 100); diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestBoneRagdoll.java b/jme3-examples/src/main/java/jme3test/bullet/TestBoneRagdoll.java index 538ec8b31c..e6c120c186 100644 --- a/jme3-examples/src/main/java/jme3test/bullet/TestBoneRagdoll.java +++ b/jme3-examples/src/main/java/jme3test/bullet/TestBoneRagdoll.java @@ -61,7 +61,7 @@ import com.jme3.scene.Node; import com.jme3.scene.shape.Sphere; import com.jme3.scene.shape.Sphere.TextureMode; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; /** * @author normenhansen @@ -218,7 +218,7 @@ private void initMaterial() { "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key2 = new TextureKey("Textures/Terrain/Rock/Rock.PNG"); key2.setGenerateMips(true); - Texture tex2 = assetManager.loadTexture(key2); + GlTexture tex2 = assetManager.loadTexture(key2); matBullet.setTexture("ColorMap", tex2); } diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestBrickTower.java b/jme3-examples/src/main/java/jme3test/bullet/TestBrickTower.java index a607878185..3e7a31c234 100644 --- a/jme3-examples/src/main/java/jme3test/bullet/TestBrickTower.java +++ b/jme3-examples/src/main/java/jme3test/bullet/TestBrickTower.java @@ -49,8 +49,8 @@ import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Sphere; import com.jme3.scene.shape.Sphere.TextureMode; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; /** * @@ -177,19 +177,19 @@ public void initMaterial() { mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key = new TextureKey("Textures/Terrain/BrickWall/BrickWall.jpg"); key.setGenerateMips(true); - Texture tex = assetManager.loadTexture(key); + GlTexture tex = assetManager.loadTexture(key); mat.setTexture("ColorMap", tex); mat2 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key2 = new TextureKey("Textures/Terrain/Rock/Rock.PNG"); key2.setGenerateMips(true); - Texture tex2 = assetManager.loadTexture(key2); + GlTexture tex2 = assetManager.loadTexture(key2); mat2.setTexture("ColorMap", tex2); mat3 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key3 = new TextureKey("Textures/Terrain/Pond/Pond.jpg"); key3.setGenerateMips(true); - Texture tex3 = assetManager.loadTexture(key3); + GlTexture tex3 = assetManager.loadTexture(key3); tex3.setWrap(WrapMode.Repeat); mat3.setTexture("ColorMap", tex3); } diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestBrickWall.java b/jme3-examples/src/main/java/jme3test/bullet/TestBrickWall.java index d0cbdb2bba..eeb0fbd537 100644 --- a/jme3-examples/src/main/java/jme3test/bullet/TestBrickWall.java +++ b/jme3-examples/src/main/java/jme3test/bullet/TestBrickWall.java @@ -52,8 +52,8 @@ import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Sphere; import com.jme3.scene.shape.Sphere.TextureMode; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; /** * @@ -161,19 +161,19 @@ public void initMaterial() { mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key = new TextureKey("Textures/Terrain/BrickWall/BrickWall.jpg"); key.setGenerateMips(true); - Texture tex = assetManager.loadTexture(key); + GlTexture tex = assetManager.loadTexture(key); mat.setTexture("ColorMap", tex); mat2 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key2 = new TextureKey("Textures/Terrain/Rock/Rock.PNG"); key2.setGenerateMips(true); - Texture tex2 = assetManager.loadTexture(key2); + GlTexture tex2 = assetManager.loadTexture(key2); mat2.setTexture("ColorMap", tex2); mat3 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key3 = new TextureKey("Textures/Terrain/Pond/Pond.jpg"); key3.setGenerateMips(true); - Texture tex3 = assetManager.loadTexture(key3); + GlTexture tex3 = assetManager.loadTexture(key3); tex3.setWrap(WrapMode.Repeat); mat3.setTexture("ColorMap", tex3); } diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestHoveringTank.java b/jme3-examples/src/main/java/jme3test/bullet/TestHoveringTank.java index 3127ec4a68..ec712e30f9 100644 --- a/jme3-examples/src/main/java/jme3test/bullet/TestHoveringTank.java +++ b/jme3-examples/src/main/java/jme3test/bullet/TestHoveringTank.java @@ -57,8 +57,8 @@ import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.util.SkyFactory; import com.jme3.util.SkyFactory.EnvMapType; import java.util.ArrayList; @@ -255,24 +255,24 @@ private void createTerrain() { matRock.setBoolean("useTriPlanarMapping", false); matRock.setBoolean("WardIso", true); matRock.setTexture("AlphaMap", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap", grass); matRock.setFloat("DiffuseMap_0_scale", 64); - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap_1", dirt); matRock.setFloat("DiffuseMap_1_scale", 16); - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap_2", rock); matRock.setFloat("DiffuseMap_2_scale", 128); - Texture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); + GlTexture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); normalMap0.setWrap(WrapMode.Repeat); - Texture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); + GlTexture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); normalMap1.setWrap(WrapMode.Repeat); - Texture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); + GlTexture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); normalMap2.setWrap(WrapMode.Repeat); matRock.setTexture("NormalMap", normalMap0); matRock.setTexture("NormalMap_1", normalMap1); diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestRagdollCharacter.java b/jme3-examples/src/main/java/jme3test/bullet/TestRagdollCharacter.java index b457e3b15b..0a903c0c44 100644 --- a/jme3-examples/src/main/java/jme3test/bullet/TestRagdollCharacter.java +++ b/jme3-examples/src/main/java/jme3test/bullet/TestRagdollCharacter.java @@ -54,7 +54,7 @@ import com.jme3.scene.Geometry; import com.jme3.scene.Node; import com.jme3.scene.shape.Box; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; /** * @author normenhansen @@ -197,7 +197,7 @@ private void initWall(float bLength, float bWidth, float bHeight) { Material mat2 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key = new TextureKey("Textures/Terrain/BrickWall/BrickWall.jpg"); key.setGenerateMips(true); - Texture tex = assetManager.loadTexture(key); + GlTexture tex = assetManager.loadTexture(key); mat2.setTexture("ColorMap", tex); float startpt = bLength / 4f; diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestWalkingChar.java b/jme3-examples/src/main/java/jme3test/bullet/TestWalkingChar.java index 61f08d25f2..5b2ffe6024 100644 --- a/jme3-examples/src/main/java/jme3test/bullet/TestWalkingChar.java +++ b/jme3-examples/src/main/java/jme3test/bullet/TestWalkingChar.java @@ -70,8 +70,8 @@ import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.util.SkyFactory; import java.util.ArrayList; @@ -243,24 +243,24 @@ private void createTerrain() { matRock.setBoolean("useTriPlanarMapping", false); matRock.setBoolean("WardIso", true); matRock.setTexture("AlphaMap", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap", grass); matRock.setFloat("DiffuseMap_0_scale", 64); - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap_1", dirt); matRock.setFloat("DiffuseMap_1_scale", 16); - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap_2", rock); matRock.setFloat("DiffuseMap_2_scale", 128); - Texture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); + GlTexture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); normalMap0.setWrap(WrapMode.Repeat); - Texture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); + GlTexture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); normalMap1.setWrap(WrapMode.Repeat); - Texture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); + GlTexture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); normalMap2.setWrap(WrapMode.Repeat); matRock.setTexture("NormalMap", normalMap0); matRock.setTexture("NormalMap_1", normalMap1); diff --git a/jme3-examples/src/main/java/jme3test/conversion/TestMipMapGen.java b/jme3-examples/src/main/java/jme3test/conversion/TestMipMapGen.java index 6110469ee0..cc8dbf0df5 100644 --- a/jme3-examples/src/main/java/jme3test/conversion/TestMipMapGen.java +++ b/jme3-examples/src/main/java/jme3test/conversion/TestMipMapGen.java @@ -37,8 +37,8 @@ import com.jme3.material.Material; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Quad; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.util.MipMapGenerator; public class TestMipMapGen extends SimpleApplication { @@ -66,11 +66,11 @@ public void simpleInitApp() { Geometry quad1 = new Geometry("Textured Quad", quadMesh); Geometry quad2 = new Geometry("Textured Quad 2", quadMesh); - Texture tex = assetManager.loadTexture("Interface/Logo/Monkey.png"); - tex.setMinFilter(Texture.MinFilter.Trilinear); + GlTexture tex = assetManager.loadTexture("Interface/Logo/Monkey.png"); + tex.setMinFilter(GlTexture.MinFilter.Trilinear); - Texture texCustomMip = tex.clone(); - Image imageCustomMip = texCustomMip.getImage().clone(); + GlTexture texCustomMip = tex.clone(); + GlImage imageCustomMip = texCustomMip.getImage().clone(); MipMapGenerator.generateMipMaps(imageCustomMip); texCustomMip.setImage(imageCustomMip); diff --git a/jme3-examples/src/main/java/jme3test/effect/TestEverything.java b/jme3-examples/src/main/java/jme3test/effect/TestEverything.java index bb5ab62a1a..98bc400680 100644 --- a/jme3-examples/src/main/java/jme3test/effect/TestEverything.java +++ b/jme3-examples/src/main/java/jme3test/effect/TestEverything.java @@ -46,7 +46,7 @@ import com.jme3.scene.Spatial.CullHint; import com.jme3.scene.shape.Box; import com.jme3.shadow.DirectionalLightShadowRenderer; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.util.SkyFactory; import com.jme3.util.mikktspace.MikktspaceTangentGenerator; @@ -81,7 +81,7 @@ public void setupBasicShadow(){ } public void setupSkyBox(){ - Texture envMap; + GlTexture envMap; if (renderer.getCaps().contains(Caps.FloatTexture)){ envMap = assetManager.loadTexture("Textures/Sky/St Peters/StPeters.hdr"); }else{ diff --git a/jme3-examples/src/main/java/jme3test/effect/TestIssue1773.java b/jme3-examples/src/main/java/jme3test/effect/TestIssue1773.java index b466815dfb..ef5f1be8ad 100644 --- a/jme3-examples/src/main/java/jme3test/effect/TestIssue1773.java +++ b/jme3-examples/src/main/java/jme3test/effect/TestIssue1773.java @@ -62,7 +62,7 @@ import com.jme3.scene.shape.Torus; import com.jme3.shadow.DirectionalLightShadowFilter; import com.jme3.system.AppSettings; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.util.Arrays; /** @@ -249,8 +249,8 @@ private void setupGround() { quad.scaleTextureCoordinates(new Vector2f(2, 2)); Geometry floor = new Geometry("Floor", quad); Material mat = new Material(assetManager, Materials.LIGHTING); - Texture tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); - tex.setWrap(Texture.WrapMode.Repeat); + GlTexture tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); + tex.setWrap(GlTexture.WrapMode.Repeat); mat.setTexture("DiffuseMap", tex); floor.setMaterial(mat); floor.rotate(-FastMath.HALF_PI, 0, 0); diff --git a/jme3-examples/src/main/java/jme3test/gui/TestBitmapFontLayout.java b/jme3-examples/src/main/java/jme3test/gui/TestBitmapFontLayout.java index 6d2ad6f37b..b7826e590a 100644 --- a/jme3-examples/src/main/java/jme3test/gui/TestBitmapFontLayout.java +++ b/jme3-examples/src/main/java/jme3test/gui/TestBitmapFontLayout.java @@ -61,8 +61,8 @@ import com.jme3.scene.*; import com.jme3.scene.debug.WireBox; import com.jme3.scene.shape.*; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.texture.plugins.AWTLoader; @@ -109,7 +109,7 @@ public static Font loadTtf( String resource ) { } } - private Texture renderAwtFont( TestConfig test, int width, int height, BitmapFont bitmapFont ) { + private GlTexture renderAwtFont(TestConfig test, int width, int height, BitmapFont bitmapFont ) { BitmapCharacterSet charset = bitmapFont.getCharSet(); @@ -152,7 +152,7 @@ private Texture renderAwtFont( TestConfig test, int width, int height, BitmapFon g2.dispose(); - Image jmeImage = new AWTLoader().load(image, true); + GlImage jmeImage = new AWTLoader().load(image, true); return new Texture2D(jmeImage); } @@ -243,7 +243,7 @@ private Node createVisual( TestConfig test ) { int width = Math.round(x2 - Math.min(0, x1)); int height = Math.round(y2 - Math.min(0, y1)); - Texture awtText = renderAwtFont(test, width, height, bitmapFont); + GlTexture awtText = renderAwtFont(test, width, height, bitmapFont); Quad quad = new Quad(width, height); geom = new Geometry(test.name + " awt1", quad); geom.setMaterial(new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md")); diff --git a/jme3-examples/src/main/java/jme3test/gui/TestSoftwareMouse.java b/jme3-examples/src/main/java/jme3test/gui/TestSoftwareMouse.java index e1baf0b5c7..e620766e76 100644 --- a/jme3-examples/src/main/java/jme3test/gui/TestSoftwareMouse.java +++ b/jme3-examples/src/main/java/jme3test/gui/TestSoftwareMouse.java @@ -38,7 +38,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector2f; import com.jme3.system.AppSettings; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.ui.Picture; @@ -99,7 +99,7 @@ public void simpleInitApp() { flyCam.setEnabled(false); // inputManager.setCursorVisible(false); - Texture tex = assetManager.loadTexture("Interface/Logo/Cursor.png"); + GlTexture tex = assetManager.loadTexture("Interface/Logo/Cursor.png"); cursor = new Picture("cursor"); cursor.setTexture(assetManager, (Texture2D) tex, true); diff --git a/jme3-examples/src/main/java/jme3test/helloworld/HelloMaterial.java b/jme3-examples/src/main/java/jme3test/helloworld/HelloMaterial.java index a9e4b4f28a..6ad829dbb1 100644 --- a/jme3-examples/src/main/java/jme3test/helloworld/HelloMaterial.java +++ b/jme3-examples/src/main/java/jme3test/helloworld/HelloMaterial.java @@ -42,7 +42,7 @@ import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Sphere; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.util.mikktspace.MikktspaceTangentGenerator; /** Sample 6 - how to give an object's surface a material and texture. @@ -62,7 +62,7 @@ public void simpleInitApp() { Geometry cube1Geo = new Geometry("My Textured Box", cube1Mesh); cube1Geo.setLocalTranslation(new Vector3f(-3f,1.1f,0f)); Material cube1Mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - Texture cube1Tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); + GlTexture cube1Tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); cube1Mat.setTexture("ColorMap", cube1Tex); cube1Geo.setMaterial(cube1Mat); rootNode.attachChild(cube1Geo); diff --git a/jme3-examples/src/main/java/jme3test/helloworld/HelloPhysics.java b/jme3-examples/src/main/java/jme3test/helloworld/HelloPhysics.java index ec566e3909..e88f9fe7c3 100644 --- a/jme3-examples/src/main/java/jme3test/helloworld/HelloPhysics.java +++ b/jme3-examples/src/main/java/jme3test/helloworld/HelloPhysics.java @@ -47,8 +47,8 @@ import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Sphere; import com.jme3.scene.shape.Sphere.TextureMode; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; /** * Example 12 - how to give objects physical properties, so they bounce and fall. @@ -132,19 +132,19 @@ public void initMaterials() { wall_mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key = new TextureKey("Textures/Terrain/BrickWall/BrickWall.jpg"); key.setGenerateMips(true); - Texture tex = assetManager.loadTexture(key); + GlTexture tex = assetManager.loadTexture(key); wall_mat.setTexture("ColorMap", tex); stone_mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key2 = new TextureKey("Textures/Terrain/Rock/Rock.PNG"); key2.setGenerateMips(true); - Texture tex2 = assetManager.loadTexture(key2); + GlTexture tex2 = assetManager.loadTexture(key2); stone_mat.setTexture("ColorMap", tex2); floor_mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key3 = new TextureKey("Textures/Terrain/Pond/Pond.jpg"); key3.setGenerateMips(true); - Texture tex3 = assetManager.loadTexture(key3); + GlTexture tex3 = assetManager.loadTexture(key3); tex3.setWrap(WrapMode.Repeat); floor_mat.setTexture("ColorMap", tex3); } diff --git a/jme3-examples/src/main/java/jme3test/helloworld/HelloTerrain.java b/jme3-examples/src/main/java/jme3test/helloworld/HelloTerrain.java index f6032faf36..c14b6e18ab 100644 --- a/jme3-examples/src/main/java/jme3test/helloworld/HelloTerrain.java +++ b/jme3-examples/src/main/java/jme3test/helloworld/HelloTerrain.java @@ -39,8 +39,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; public class HelloTerrain extends SimpleApplication { @@ -62,21 +62,21 @@ public void simpleInitApp() { "Textures/Terrain/splat/alphamap.png")); /* 1.2) Add GRASS texture into the red layer (Tex1). */ - Texture grass = assetManager.loadTexture( + GlTexture grass = assetManager.loadTexture( "Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); mat_terrain.setTexture("Tex1", grass); mat_terrain.setFloat("Tex1Scale", 64f); /* 1.3) Add DIRT texture into the green layer (Tex2) */ - Texture dirt = assetManager.loadTexture( + GlTexture dirt = assetManager.loadTexture( "Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); mat_terrain.setTexture("Tex2", dirt); mat_terrain.setFloat("Tex2Scale", 32f); /* 1.4) Add ROAD texture into the blue layer (Tex3) */ - Texture rock = assetManager.loadTexture( + GlTexture rock = assetManager.loadTexture( "Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); mat_terrain.setTexture("Tex3", rock); @@ -84,7 +84,7 @@ public void simpleInitApp() { /* 2.a Create a custom height map from an image */ AbstractHeightMap heightmap = null; - Texture heightMapImage = assetManager.loadTexture( + GlTexture heightMapImage = assetManager.loadTexture( "Textures/Terrain/splat/mountains512.png"); heightmap = new ImageBasedHeightMap(heightMapImage.getImage()); diff --git a/jme3-examples/src/main/java/jme3test/helloworld/HelloTerrainCollision.java b/jme3-examples/src/main/java/jme3test/helloworld/HelloTerrainCollision.java index 739a93ff76..ecdffc4718 100644 --- a/jme3-examples/src/main/java/jme3test/helloworld/HelloTerrainCollision.java +++ b/jme3-examples/src/main/java/jme3test/helloworld/HelloTerrainCollision.java @@ -47,8 +47,8 @@ import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import java.util.ArrayList; import java.util.List; @@ -92,21 +92,21 @@ public void simpleInitApp() { "Textures/Terrain/splat/alphamap.png")); /* 1.2) Add GRASS texture into the red layer (Tex1). */ - Texture grass = assetManager.loadTexture( + GlTexture grass = assetManager.loadTexture( "Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); mat_terrain.setTexture("Tex1", grass); mat_terrain.setFloat("Tex1Scale", 64f); /* 1.3) Add DIRT texture into the green layer (Tex2) */ - Texture dirt = assetManager.loadTexture( + GlTexture dirt = assetManager.loadTexture( "Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); mat_terrain.setTexture("Tex2", dirt); mat_terrain.setFloat("Tex2Scale", 32f); /* 1.4) Add ROAD texture into the blue layer (Tex3) */ - Texture rock = assetManager.loadTexture( + GlTexture rock = assetManager.loadTexture( "Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); mat_terrain.setTexture("Tex3", rock); @@ -114,7 +114,7 @@ public void simpleInitApp() { /* 2. Create the height map */ AbstractHeightMap heightmap = null; - Texture heightMapImage = assetManager.loadTexture( + GlTexture heightMapImage = assetManager.loadTexture( "Textures/Terrain/splat/mountains512.png"); heightmap = new ImageBasedHeightMap(heightMapImage.getImage()); heightmap.load(); diff --git a/jme3-examples/src/main/java/jme3test/light/TestConeVSFrustum.java b/jme3-examples/src/main/java/jme3test/light/TestConeVSFrustum.java index 0f2605839c..3985e23536 100644 --- a/jme3-examples/src/main/java/jme3test/light/TestConeVSFrustum.java +++ b/jme3-examples/src/main/java/jme3test/light/TestConeVSFrustum.java @@ -55,7 +55,7 @@ import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Cylinder; import com.jme3.shadow.ShadowUtil; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.util.TempVars; public class TestConeVSFrustum extends SimpleApplication { @@ -221,7 +221,7 @@ public void onAction(String name, boolean isPressed, float tpf) { Box boxMesh = new Box(1f, 1f, 1f); Geometry boxGeo = new Geometry("A Textured Box", boxMesh); Material boxMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - Texture monkeyTex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); + GlTexture monkeyTex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); boxMat.setTexture("ColorMap", monkeyTex); boxGeo.setMaterial(boxMat); System.err.println("light " + spotLight.getPosition()); diff --git a/jme3-examples/src/main/java/jme3test/light/TestDirectionalLightShadow.java b/jme3-examples/src/main/java/jme3test/light/TestDirectionalLightShadow.java index 0c6f437305..1e3e7acd37 100644 --- a/jme3-examples/src/main/java/jme3test/light/TestDirectionalLightShadow.java +++ b/jme3-examples/src/main/java/jme3test/light/TestDirectionalLightShadow.java @@ -54,8 +54,8 @@ import com.jme3.shadow.DirectionalLightShadowFilter; import com.jme3.shadow.DirectionalLightShadowRenderer; import com.jme3.shadow.EdgeFilteringMode; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.util.SkyFactory; import com.jme3.util.SkyFactory.EnvMapType; import com.jme3.util.mikktspace.MikktspaceTangentGenerator; @@ -134,7 +134,7 @@ public void loadScene() { matGroundL = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matGroundL.setTexture("DiffuseMap", grass); diff --git a/jme3-examples/src/main/java/jme3test/light/TestEnvironmentMapping.java b/jme3-examples/src/main/java/jme3test/light/TestEnvironmentMapping.java index 846acfce40..85acd18e2e 100644 --- a/jme3-examples/src/main/java/jme3test/light/TestEnvironmentMapping.java +++ b/jme3-examples/src/main/java/jme3test/light/TestEnvironmentMapping.java @@ -42,7 +42,7 @@ import com.jme3.scene.Geometry; import com.jme3.scene.Node; import com.jme3.scene.Spatial; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.util.SkyFactory; /** @@ -62,8 +62,8 @@ public void simpleInitApp() { TextureKey key = new TextureKey("Textures/Sky/Bright/BrightSky.dds", true); key.setGenerateMips(true); - key.setTextureTypeHint(Texture.Type.CubeMap); - final Texture tex = assetManager.loadTexture(key); + key.setTextureTypeHint(GlTexture.Type.CubeMap); + final GlTexture tex = assetManager.loadTexture(key); for (Spatial geom : buggy.getChildren()) { if (geom instanceof Geometry) { diff --git a/jme3-examples/src/main/java/jme3test/light/TestShadowBug.java b/jme3-examples/src/main/java/jme3test/light/TestShadowBug.java index acf2d6df13..1dd4c94d61 100644 --- a/jme3-examples/src/main/java/jme3test/light/TestShadowBug.java +++ b/jme3-examples/src/main/java/jme3test/light/TestShadowBug.java @@ -50,8 +50,8 @@ import com.jme3.shadow.EdgeFilteringMode; import com.jme3.shadow.PointLightShadowRenderer; import com.jme3.shadow.SpotLightShadowRenderer; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; public class TestShadowBug extends SimpleApplication { @@ -119,7 +119,7 @@ protected Geometry makeFloor() { Geometry floor = new Geometry("the Floor", box); floor.setLocalTranslation(200, -9, 200); Material matGroundL = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matGroundL.setTexture("DiffuseMap", grass); floor.setMaterial(matGroundL); diff --git a/jme3-examples/src/main/java/jme3test/light/TestSpotLight.java b/jme3-examples/src/main/java/jme3test/light/TestSpotLight.java index ed53b0de35..d5ded001ac 100644 --- a/jme3-examples/src/main/java/jme3test/light/TestSpotLight.java +++ b/jme3-examples/src/main/java/jme3test/light/TestSpotLight.java @@ -42,7 +42,7 @@ import com.jme3.scene.Spatial; import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Sphere; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.util.mikktspace.MikktspaceTangentGenerator; public class TestSpotLight extends SimpleApplication { diff --git a/jme3-examples/src/main/java/jme3test/light/TestSpotLightShadows.java b/jme3-examples/src/main/java/jme3test/light/TestSpotLightShadows.java index 11dd519ef3..0ce70de799 100644 --- a/jme3-examples/src/main/java/jme3test/light/TestSpotLightShadows.java +++ b/jme3-examples/src/main/java/jme3test/light/TestSpotLightShadows.java @@ -48,7 +48,7 @@ import com.jme3.shadow.EdgeFilteringMode; import com.jme3.shadow.SpotLightShadowFilter; import com.jme3.shadow.SpotLightShadowRenderer; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.util.mikktspace.MikktspaceTangentGenerator; public class TestSpotLightShadows extends SimpleApplication { diff --git a/jme3-examples/src/main/java/jme3test/light/TestSpotLightTerrain.java b/jme3-examples/src/main/java/jme3test/light/TestSpotLightTerrain.java index 9fa5a0ea36..754fa38bd0 100644 --- a/jme3-examples/src/main/java/jme3test/light/TestSpotLightTerrain.java +++ b/jme3-examples/src/main/java/jme3test/light/TestSpotLightTerrain.java @@ -46,8 +46,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.util.SkyFactory; /** @@ -112,45 +112,45 @@ private void makeTerrain() { matTerrain.setTexture("AlphaMap_1", assetManager.loadTexture("Textures/Terrain/splat/alpha2.png")); // HEIGHTMAP image (for the terrain heightmap) - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); // GRASS texture - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap", grass); matTerrain.setFloat("DiffuseMap_0_scale", grassScale); // DIRT texture - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_1", dirt); matTerrain.setFloat("DiffuseMap_1_scale", dirtScale); // ROCK texture - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_2", rock); matTerrain.setFloat("DiffuseMap_2_scale", rockScale); // BRICK texture - Texture brick = assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"); + GlTexture brick = assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"); brick.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_3", brick); matTerrain.setFloat("DiffuseMap_3_scale", rockScale); // RIVER ROCK texture - Texture riverRock = assetManager.loadTexture("Textures/Terrain/Pond/Pond.jpg"); + GlTexture riverRock = assetManager.loadTexture("Textures/Terrain/Pond/Pond.jpg"); riverRock.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_4", riverRock); matTerrain.setFloat("DiffuseMap_4_scale", rockScale); - Texture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); + GlTexture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); normalMap0.setWrap(WrapMode.Repeat); - Texture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); + GlTexture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); normalMap1.setWrap(WrapMode.Repeat); - Texture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); + GlTexture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); normalMap2.setWrap(WrapMode.Repeat); matTerrain.setTexture("NormalMap", normalMap0); matTerrain.setTexture("NormalMap_1", normalMap1); @@ -191,12 +191,12 @@ private void makeTerrain() { } private void createSky() { - Texture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg"); - Texture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg"); - Texture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg"); - Texture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg"); - Texture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg"); - Texture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg"); + GlTexture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg"); + GlTexture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg"); + GlTexture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg"); + GlTexture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg"); + GlTexture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg"); + GlTexture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg"); Spatial sky = SkyFactory.createSky(assetManager, west, east, north, south, up, down); rootNode.attachChild(sky); diff --git a/jme3-examples/src/main/java/jme3test/material/TestMaterialCompare.java b/jme3-examples/src/main/java/jme3test/material/TestMaterialCompare.java index a37855185c..895b75c123 100644 --- a/jme3-examples/src/main/java/jme3test/material/TestMaterialCompare.java +++ b/jme3-examples/src/main/java/jme3test/material/TestMaterialCompare.java @@ -37,7 +37,7 @@ import com.jme3.material.RenderState.BlendMode; import com.jme3.math.ColorRGBA; import com.jme3.system.JmeSystem; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; public class TestMaterialCompare { @@ -79,16 +79,16 @@ public static void main(String[] args) { System.out.println("TEXTURE KEYS ARE NOT EQUAL"); } - Texture tex1 = assetManager.loadTexture(tex1key); + GlTexture tex1 = assetManager.loadTexture(tex1key); mat4.setTexture("DiffuseMap", tex1); testEquality(mat4, mat5, true); // Change some stuff on the texture and compare, materials no longer equal - tex1.setWrap(Texture.WrapMode.MirroredRepeat); + tex1.setWrap(GlTexture.WrapMode.MirroredRepeat); testEquality(mat4, mat5, false); // Comparing different textures - Texture tex2 = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); + GlTexture tex2 = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); mat4.setTexture("DiffuseMap", tex2); testEquality(mat4, mat5, false); diff --git a/jme3-examples/src/main/java/jme3test/material/TestShaderNodes.java b/jme3-examples/src/main/java/jme3test/material/TestShaderNodes.java index 592663efeb..261f1c1bb5 100644 --- a/jme3-examples/src/main/java/jme3test/material/TestShaderNodes.java +++ b/jme3-examples/src/main/java/jme3test/material/TestShaderNodes.java @@ -8,7 +8,7 @@ import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; import com.jme3.shader.Shader; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.util.logging.Level; import java.util.logging.Logger; @@ -25,7 +25,7 @@ public void simpleInitApp() { Logger.getLogger("com.jme3").setLevel(Level.WARNING); Box boxShape1 = new Box(1f, 1f, 1f); Geometry cube_tex = new Geometry("A Textured Box", boxShape1); - Texture tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); + GlTexture tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); Material mat = new Material(assetManager, "Common/MatDefs/Misc/UnshadedNodes.j3md"); mat.selectTechnique(TechniqueDef.DEFAULT_TECHNIQUE_NAME, renderManager); diff --git a/jme3-examples/src/main/java/jme3test/model/shape/TestCylinder.java b/jme3-examples/src/main/java/jme3test/model/shape/TestCylinder.java index bec3847faa..29b0396800 100644 --- a/jme3-examples/src/main/java/jme3test/model/shape/TestCylinder.java +++ b/jme3-examples/src/main/java/jme3test/model/shape/TestCylinder.java @@ -37,7 +37,7 @@ import com.jme3.material.Material; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Cylinder; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; public class TestCylinder extends SimpleApplication { @@ -54,8 +54,8 @@ public void simpleInitApp() { Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); TextureKey key = new TextureKey("Interface/Logo/Monkey.jpg", true); key.setGenerateMips(true); - Texture tex = assetManager.loadTexture(key); - tex.setMinFilter(Texture.MinFilter.Trilinear); + GlTexture tex = assetManager.loadTexture(key); + tex.setMinFilter(GlTexture.MinFilter.Trilinear); mat.setTexture("ColorMap", tex); geom.setMaterial(mat); diff --git a/jme3-examples/src/main/java/jme3test/niftygui/TestNiftyToMesh.java b/jme3-examples/src/main/java/jme3test/niftygui/TestNiftyToMesh.java index da428f5d5e..2da82578a3 100644 --- a/jme3-examples/src/main/java/jme3test/niftygui/TestNiftyToMesh.java +++ b/jme3-examples/src/main/java/jme3test/niftygui/TestNiftyToMesh.java @@ -40,9 +40,9 @@ import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; import com.jme3.texture.Texture2D; import com.jme3.texture.FrameBuffer.FrameBufferTarget; import com.jme3.texture.image.ColorSpace; diff --git a/jme3-examples/src/main/java/jme3test/opencl/TestWriteToTexture.java b/jme3-examples/src/main/java/jme3test/opencl/TestWriteToTexture.java index aaf4cc4d06..23421f2f02 100644 --- a/jme3-examples/src/main/java/jme3test/opencl/TestWriteToTexture.java +++ b/jme3-examples/src/main/java/jme3test/opencl/TestWriteToTexture.java @@ -41,6 +41,7 @@ import com.jme3.math.Vector2f; import com.jme3.opencl.*; import com.jme3.system.AppSettings; +import com.jme3.texture.GlImage; import com.jme3.texture.Texture2D; import com.jme3.ui.Picture; import java.util.logging.Logger; @@ -80,7 +81,7 @@ public static void main(String[] args){ public void simpleInitApp() { initOpenCL1(); - tex = new Texture2D(settings.getWidth(), settings.getHeight(), 1, com.jme3.texture.Image.Format.RGBA8); + tex = new Texture2D(settings.getWidth(), settings.getHeight(), 1, GlImage.Format.RGBA8); Picture pic = new Picture("julia"); pic.setTexture(assetManager, tex, true); pic.setPosition(0, 0); diff --git a/jme3-examples/src/main/java/jme3test/post/TestCartoonEdge.java b/jme3-examples/src/main/java/jme3test/post/TestCartoonEdge.java index ff6ab497f3..b157d5f0c7 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestCartoonEdge.java +++ b/jme3-examples/src/main/java/jme3test/post/TestCartoonEdge.java @@ -46,7 +46,7 @@ import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.scene.Spatial.CullHint; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; public class TestCartoonEdge extends SimpleApplication { @@ -81,7 +81,7 @@ public void makeToonish(Spatial spatial){ Geometry g = (Geometry) spatial; Material m = g.getMaterial(); if (m.getMaterialDef().getMaterialParam("UseMaterialColors") != null) { - Texture t = assetManager.loadTexture("Textures/ColorRamp/toon.png"); + GlTexture t = assetManager.loadTexture("Textures/ColorRamp/toon.png"); // t.setMinFilter(Texture.MinFilter.NearestNoMipMaps); // t.setMagFilter(Texture.MagFilter.Nearest); m.setTexture("ColorRamp", t); diff --git a/jme3-examples/src/main/java/jme3test/post/TestContrastAdjustment.java b/jme3-examples/src/main/java/jme3test/post/TestContrastAdjustment.java index 52c125cb3e..940ef370f7 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestContrastAdjustment.java +++ b/jme3-examples/src/main/java/jme3test/post/TestContrastAdjustment.java @@ -43,7 +43,7 @@ import com.jme3.post.filters.ContrastAdjustmentFilter; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Sphere; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; /** * A {@link ContrastAdjustmentFilter} with user-controlled exponents, scales, and input range. @@ -74,7 +74,7 @@ public void simpleInitApp() { final Geometry earth = new Geometry("Earth", globe); earth.rotate(-FastMath.HALF_PI, 0f, 0f); final Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - final Texture texture = assetManager.loadTexture("Textures/Sky/Earth/Earth.jpg"); + final GlTexture texture = assetManager.loadTexture("Textures/Sky/Earth/Earth.jpg"); material.setTexture("ColorMap", texture); earth.setMaterial(material); rootNode.attachChild(earth); diff --git a/jme3-examples/src/main/java/jme3test/post/TestDepthOfField.java b/jme3-examples/src/main/java/jme3test/post/TestDepthOfField.java index 3690fe9aa7..e611685cf6 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestDepthOfField.java +++ b/jme3-examples/src/main/java/jme3test/post/TestDepthOfField.java @@ -50,8 +50,8 @@ import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.util.SkyFactory; import com.jme3.util.SkyFactory.EnvMapType; import java.util.ArrayList; @@ -177,24 +177,24 @@ private void createTerrain(Node rootNode) { matRock.setBoolean("useTriPlanarMapping", false); matRock.setBoolean("WardIso", true); matRock.setTexture("AlphaMap", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap", grass); matRock.setFloat("DiffuseMap_0_scale", 64); - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap_1", dirt); matRock.setFloat("DiffuseMap_1_scale", 16); - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap_2", rock); matRock.setFloat("DiffuseMap_2_scale", 128); - Texture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); + GlTexture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); normalMap0.setWrap(WrapMode.Repeat); - Texture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); + GlTexture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); normalMap1.setWrap(WrapMode.Repeat); - Texture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); + GlTexture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); normalMap2.setWrap(WrapMode.Repeat); matRock.setTexture("NormalMap", normalMap0); matRock.setTexture("NormalMap_1", normalMap1); diff --git a/jme3-examples/src/main/java/jme3test/post/TestFBOPassthrough.java b/jme3-examples/src/main/java/jme3test/post/TestFBOPassthrough.java index 72a4c875f5..0582737b9e 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestFBOPassthrough.java +++ b/jme3-examples/src/main/java/jme3test/post/TestFBOPassthrough.java @@ -40,7 +40,7 @@ import com.jme3.scene.Node; import com.jme3.scene.shape.Sphere; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.Texture2D; import com.jme3.texture.FrameBuffer.FrameBufferTarget; import com.jme3.ui.Picture; diff --git a/jme3-examples/src/main/java/jme3test/post/TestFog.java b/jme3-examples/src/main/java/jme3test/post/TestFog.java index b7a913d79f..890fcddf81 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestFog.java +++ b/jme3-examples/src/main/java/jme3test/post/TestFog.java @@ -50,7 +50,7 @@ import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.util.SkyFactory; import java.util.ArrayList; import java.util.List; @@ -163,25 +163,25 @@ private void createTerrain(Node rootNode) { matRock.setBoolean("useTriPlanarMapping", false); matRock.setBoolean("WardIso", true); matRock.setTexture("AlphaMap", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); - grass.setWrap(Texture.WrapMode.Repeat); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + grass.setWrap(GlTexture.WrapMode.Repeat); matRock.setTexture("DiffuseMap", grass); matRock.setFloat("DiffuseMap_0_scale", 64); - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); - dirt.setWrap(Texture.WrapMode.Repeat); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + dirt.setWrap(GlTexture.WrapMode.Repeat); matRock.setTexture("DiffuseMap_1", dirt); matRock.setFloat("DiffuseMap_1_scale", 16); - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); - rock.setWrap(Texture.WrapMode.Repeat); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + rock.setWrap(GlTexture.WrapMode.Repeat); matRock.setTexture("DiffuseMap_2", rock); matRock.setFloat("DiffuseMap_2_scale", 128); - Texture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); - normalMap0.setWrap(Texture.WrapMode.Repeat); - Texture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); - normalMap1.setWrap(Texture.WrapMode.Repeat); - Texture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); - normalMap2.setWrap(Texture.WrapMode.Repeat); + GlTexture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); + normalMap0.setWrap(GlTexture.WrapMode.Repeat); + GlTexture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); + normalMap1.setWrap(GlTexture.WrapMode.Repeat); + GlTexture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); + normalMap2.setWrap(GlTexture.WrapMode.Repeat); matRock.setTexture("NormalMap", normalMap0); matRock.setTexture("NormalMap_1", normalMap1); matRock.setTexture("NormalMap_2", normalMap2); diff --git a/jme3-examples/src/main/java/jme3test/post/TestIssue1798.java b/jme3-examples/src/main/java/jme3test/post/TestIssue1798.java index 79605f29a8..a5fe510d32 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestIssue1798.java +++ b/jme3-examples/src/main/java/jme3test/post/TestIssue1798.java @@ -42,7 +42,7 @@ import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.system.AppSettings; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; /** * Test case for JME issue #1798: filtered scenes are squeezed by resizable @@ -98,7 +98,7 @@ private void makeToonish(Spatial spatial) { Geometry g = (Geometry) spatial; Material m = g.getMaterial(); if (m.getMaterialDef().getMaterialParam("UseMaterialColors") != null) { - Texture t = assetManager.loadTexture("Textures/ColorRamp/toon.png"); + GlTexture t = assetManager.loadTexture("Textures/ColorRamp/toon.png"); m.setTexture("ColorRamp", t); m.setBoolean("UseMaterialColors", true); m.setColor("Specular", ColorRGBA.Black); diff --git a/jme3-examples/src/main/java/jme3test/post/TestMultiRenderTarget.java b/jme3-examples/src/main/java/jme3test/post/TestMultiRenderTarget.java index a5422ac539..0544343ca8 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestMultiRenderTarget.java +++ b/jme3-examples/src/main/java/jme3test/post/TestMultiRenderTarget.java @@ -43,7 +43,7 @@ import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.Texture2D; import com.jme3.ui.Picture; diff --git a/jme3-examples/src/main/java/jme3test/post/TestPostFilters.java b/jme3-examples/src/main/java/jme3test/post/TestPostFilters.java index a46b14655c..db49516ecc 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestPostFilters.java +++ b/jme3-examples/src/main/java/jme3test/post/TestPostFilters.java @@ -45,7 +45,7 @@ import com.jme3.scene.Geometry; import com.jme3.scene.Spatial; import com.jme3.scene.shape.Box; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.util.SkyFactory; import com.jme3.util.SkyFactory.EnvMapType; import com.jme3.util.mikktspace.MikktspaceTangentGenerator; @@ -80,7 +80,7 @@ public void setupFilters() { } public void setupSkyBox() { - Texture envMap; + GlTexture envMap; if (renderer.getCaps().contains(Caps.FloatTexture)) { envMap = assetManager.loadTexture("Textures/Sky/St Peters/StPeters.hdr"); } else { diff --git a/jme3-examples/src/main/java/jme3test/post/TestPostFiltersCompositing.java b/jme3-examples/src/main/java/jme3test/post/TestPostFiltersCompositing.java index 8661ee550e..ef7e5fec8c 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestPostFiltersCompositing.java +++ b/jme3-examples/src/main/java/jme3test/post/TestPostFiltersCompositing.java @@ -41,10 +41,10 @@ import com.jme3.post.filters.ComposeFilter; import com.jme3.scene.Spatial; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.Texture2D; import com.jme3.texture.FrameBuffer.FrameBufferTarget; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.util.SkyFactory; /** @@ -79,7 +79,7 @@ public void simpleInitApp() { //creating a frame buffer for the main viewport FrameBuffer mainVPFrameBuffer = new FrameBuffer(cam.getWidth(), cam.getHeight(), 1); - Texture2D mainVPTexture = new Texture2D(cam.getWidth(), cam.getHeight(), Image.Format.RGBA8); + Texture2D mainVPTexture = new Texture2D(cam.getWidth(), cam.getHeight(), GlImage.Format.RGBA8); mainVPFrameBuffer.setDepthTarget(FrameBufferTarget.newTarget(Format.Depth)); mainVPFrameBuffer.addColorTarget(FrameBufferTarget.newTarget(mainVPTexture)); @@ -87,7 +87,7 @@ public void simpleInitApp() { // Create the post processor for the GUI viewport. final FilterPostProcessor guiFpp = new FilterPostProcessor(assetManager); - guiFpp.setFrameBufferFormat(Image.Format.RGBA8); + guiFpp.setFrameBufferFormat(GlImage.Format.RGBA8); guiFpp.addFilter(new ColorOverlayFilter(ColorRGBA.Red)); // This will compose the main viewport texture with the GUI-viewport back buffer. // Note that you can switch the order of the filters so that GUI-viewport filters are applied or not to the main viewport texture diff --git a/jme3-examples/src/main/java/jme3test/post/TestRenderToCubemap.java b/jme3-examples/src/main/java/jme3test/post/TestRenderToCubemap.java index da00ccecd5..442a4c5d4b 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestRenderToCubemap.java +++ b/jme3-examples/src/main/java/jme3test/post/TestRenderToCubemap.java @@ -44,8 +44,8 @@ import com.jme3.scene.Spatial; import com.jme3.scene.shape.Box; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.TextureCubeMap; import com.jme3.texture.FrameBuffer.FrameBufferTarget; import com.jme3.util.SkyFactory; @@ -65,7 +65,7 @@ public static void main(String[] args){ app.start(); } - public Texture setupOffscreenView(){ + public GlTexture setupOffscreenView(){ Camera offCamera = new Camera(512, 512); ViewPort offView @@ -83,8 +83,8 @@ public Texture setupOffscreenView(){ //setup framebuffer's texture TextureCubeMap offTex = new TextureCubeMap(512, 512, Format.RGBA8); - offTex.setMinFilter(Texture.MinFilter.Trilinear); - offTex.setMagFilter(Texture.MagFilter.Bilinear); + offTex.setMinFilter(GlTexture.MinFilter.Trilinear); + offTex.setMagFilter(GlTexture.MagFilter.Bilinear); //setup framebuffer to use texture offBuffer.setDepthTarget(FrameBufferTarget.newTarget(Format.Depth)); @@ -116,7 +116,7 @@ public void simpleInitApp() { cam.setLocation(new Vector3f(3, 3, 3)); cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y); - Texture offTex = setupOffscreenView(); + GlTexture offTex = setupOffscreenView(); Spatial sky = SkyFactory.createSky(assetManager, offTex, EnvMapType.CubeMap); rootNode.attachChild(sky); diff --git a/jme3-examples/src/main/java/jme3test/post/TestRenderToMemory.java b/jme3-examples/src/main/java/jme3test/post/TestRenderToMemory.java index 1cfa50b9a2..ac4ddc43f3 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestRenderToMemory.java +++ b/jme3-examples/src/main/java/jme3test/post/TestRenderToMemory.java @@ -50,7 +50,7 @@ import com.jme3.system.JmeContext.Type; import com.jme3.texture.FrameBuffer; import com.jme3.texture.FrameBuffer.FrameBufferTarget; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.util.BufferUtils; import com.jme3.util.Screenshots; import java.awt.Color; diff --git a/jme3-examples/src/main/java/jme3test/post/TestRenderToTexture.java b/jme3-examples/src/main/java/jme3test/post/TestRenderToTexture.java index 88de57274d..5945c3c005 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestRenderToTexture.java +++ b/jme3-examples/src/main/java/jme3test/post/TestRenderToTexture.java @@ -46,8 +46,8 @@ import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.texture.FrameBuffer.FrameBufferTarget; @@ -66,7 +66,7 @@ public static void main(String[] args){ app.start(); } - public Texture setupOffscreenView(){ + public GlTexture setupOffscreenView(){ Camera offCamera = new Camera(512, 512); offView = renderManager.createPreView("Offscreen View", offCamera); @@ -83,8 +83,8 @@ public Texture setupOffscreenView(){ //setup framebuffer's texture Texture2D offTex = new Texture2D(512, 512, Format.RGBA8); - offTex.setMinFilter(Texture.MinFilter.Trilinear); - offTex.setMagFilter(Texture.MagFilter.Bilinear); + offTex.setMinFilter(GlTexture.MinFilter.Trilinear); + offTex.setMagFilter(GlTexture.MagFilter.Bilinear); //setup framebuffer to use texture offBuffer.setDepthTarget(FrameBufferTarget.newTarget(Format.Depth)); @@ -113,7 +113,7 @@ public void simpleInitApp() { //setup main scene Geometry quad = new Geometry("box", new Box(1, 1, 1)); - Texture offTex = setupOffscreenView(); + GlTexture offTex = setupOffscreenView(); Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); mat.setTexture("ColorMap", offTex); diff --git a/jme3-examples/src/main/java/jme3test/post/TestSSAO.java b/jme3-examples/src/main/java/jme3test/post/TestSSAO.java index 9275feb23d..54f23c707f 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestSSAO.java +++ b/jme3-examples/src/main/java/jme3test/post/TestSSAO.java @@ -41,7 +41,7 @@ import com.jme3.post.FilterPostProcessor; import com.jme3.post.ssao.SSAOFilter; import com.jme3.scene.Geometry; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; public class TestSSAO extends SimpleApplication { @@ -59,10 +59,10 @@ public void simpleInitApp() { flyCam.setMoveSpeed(50); Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); - Texture diff = assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"); - diff.setWrap(Texture.WrapMode.Repeat); - Texture norm = assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall_normal.jpg"); - norm.setWrap(Texture.WrapMode.Repeat); + GlTexture diff = assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"); + diff.setWrap(GlTexture.WrapMode.Repeat); + GlTexture norm = assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall_normal.jpg"); + norm.setWrap(GlTexture.WrapMode.Repeat); mat.setTexture("DiffuseMap", diff); mat.setTexture("NormalMap", norm); mat.setFloat("Shininess", 2.0f); diff --git a/jme3-examples/src/main/java/jme3test/post/TestTransparentCartoonEdge.java b/jme3-examples/src/main/java/jme3test/post/TestTransparentCartoonEdge.java index 2e2c9874f7..1fcdea9557 100644 --- a/jme3-examples/src/main/java/jme3test/post/TestTransparentCartoonEdge.java +++ b/jme3-examples/src/main/java/jme3test/post/TestTransparentCartoonEdge.java @@ -13,7 +13,7 @@ import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.scene.shape.RectangleMesh; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; public class TestTransparentCartoonEdge extends SimpleApplication { @@ -84,7 +84,7 @@ public void makeToonish(Spatial spatial){ Geometry g = (Geometry) spatial; Material m = g.getMaterial(); if (m.getMaterialDef().getName().equals("Phong Lighting")){ - Texture t = assetManager.loadTexture("Textures/ColorRamp/toon.png"); + GlTexture t = assetManager.loadTexture("Textures/ColorRamp/toon.png"); // t.setMinFilter(Texture.MinFilter.NearestNoMipMaps); // t.setMagFilter(Texture.MagFilter.Nearest); m.setTexture("ColorRamp", t); diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java b/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java index c8c004a9c3..52d0352ccd 100644 --- a/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java +++ b/jme3-examples/src/main/java/jme3test/renderer/TestBackgroundImage.java @@ -47,7 +47,7 @@ import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.scene.shape.Quad; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.util.List; /** @@ -88,7 +88,7 @@ public void simpleInitApp() { * assign it to the Gui bucket, * and attach it to the background viewport. */ - Texture quadTexture + GlTexture quadTexture = assetManager.loadTexture("Interface/Logo/Monkey.png"); Material quadMaterial = new Material(assetManager, Materials.UNSHADED); quadMaterial.setTexture("ColorMap", quadTexture); diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestDepthStencil.java b/jme3-examples/src/main/java/jme3test/renderer/TestDepthStencil.java index 0f333ac661..29c7079707 100644 --- a/jme3-examples/src/main/java/jme3test/renderer/TestDepthStencil.java +++ b/jme3-examples/src/main/java/jme3test/renderer/TestDepthStencil.java @@ -46,7 +46,7 @@ import com.jme3.scene.control.AbstractControl; import com.jme3.scene.shape.Sphere; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; import com.jme3.texture.Texture2D; import com.jme3.texture.FrameBuffer.FrameBufferTarget; import com.jme3.ui.Picture; diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestInconsistentCompareDetection.java b/jme3-examples/src/main/java/jme3test/renderer/TestInconsistentCompareDetection.java index dbb2eaad8d..4f44a3ec37 100644 --- a/jme3-examples/src/main/java/jme3test/renderer/TestInconsistentCompareDetection.java +++ b/jme3-examples/src/main/java/jme3test/renderer/TestInconsistentCompareDetection.java @@ -41,7 +41,7 @@ import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.scene.shape.Box; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; /** * Changes a material's texture from another thread while it is rendered. @@ -51,7 +51,7 @@ */ public class TestInconsistentCompareDetection extends SimpleApplication { - private static Texture t1, t2; + private static GlTexture t1, t2; public static void main(String[] args){ TestInconsistentCompareDetection app = new TestInconsistentCompareDetection(); @@ -104,7 +104,7 @@ public void run() { for (Spatial child : rootNode.getChildren()) { Geometry g = (Geometry) (((Node)child).getChild(0)); Material m = g.getMaterial(); - Texture curTex = m.getTextureParam("ColorMap").getTextureValue(); + GlTexture curTex = m.getTextureParam("ColorMap").getTextureValue(); if (curTex == t1) { m.setTexture("ColorMap", t2); } else { diff --git a/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java b/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java index ce276e81d9..04d8cb0d03 100644 --- a/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java +++ b/jme3-examples/src/main/java/jme3test/renderer/TestIssue37.java @@ -39,7 +39,7 @@ import com.jme3.scene.Mesh; import com.jme3.scene.shape.Box; import com.jme3.shader.VarType; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; /** * Test a Material with increasing numbers of texture parameters, to see what @@ -59,7 +59,7 @@ public class TestIssue37 extends SimpleApplication { private int numTextures; private Material manyTexturesMaterial; - private Texture testTexture; + private GlTexture testTexture; public static void main(String[] args) { Application application = new TestIssue37(); diff --git a/jme3-examples/src/main/java/jme3test/stencil/TestStencilOutline.java b/jme3-examples/src/main/java/jme3test/stencil/TestStencilOutline.java index 406b15621e..3b49ff3be7 100644 --- a/jme3-examples/src/main/java/jme3test/stencil/TestStencilOutline.java +++ b/jme3-examples/src/main/java/jme3test/stencil/TestStencilOutline.java @@ -15,7 +15,7 @@ import com.jme3.scene.control.AbstractControl; import com.jme3.scene.shape.Box; import com.jme3.system.AppSettings; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import java.util.logging.Level; import java.util.logging.Logger; @@ -131,7 +131,7 @@ public void simpleInitApp() { //This is to make sure a depth stencil format is used in the TestChooser app. FilterPostProcessor postProcessor=new FilterPostProcessor(assetManager); - postProcessor.setFrameBufferDepthFormat(Image.Format.Depth24Stencil8); + postProcessor.setFrameBufferDepthFormat(GlImage.Format.Depth24Stencil8); viewPort.addProcessor(postProcessor); postProcessor.addFilter(new BloomFilter()); } diff --git a/jme3-examples/src/main/java/jme3test/stress/TestShaderNodesStress.java b/jme3-examples/src/main/java/jme3test/stress/TestShaderNodesStress.java index 34ab16f550..10b8fea703 100644 --- a/jme3-examples/src/main/java/jme3test/stress/TestShaderNodesStress.java +++ b/jme3-examples/src/main/java/jme3test/stress/TestShaderNodesStress.java @@ -10,7 +10,7 @@ import com.jme3.renderer.queue.RenderQueue; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Quad; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.util.logging.Level; import java.util.logging.Logger; @@ -33,7 +33,7 @@ public void simpleInitApp() { cam.setLocation(new Vector3f(0.0f, 0.0f, 0.40647888f)); cam.setRotation(new Quaternion(0.0f, 1.0f, 0.0f, 0.0f)); - Texture tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); + GlTexture tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); Material mat = new Material(assetManager, "Common/MatDefs/Misc/UnshadedNodes.j3md"); //Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); diff --git a/jme3-examples/src/main/java/jme3test/terrain/PBRTerrainAdvancedTest.java b/jme3-examples/src/main/java/jme3test/terrain/PBRTerrainAdvancedTest.java index d4cd04e403..07c14715df 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/PBRTerrainAdvancedTest.java +++ b/jme3-examples/src/main/java/jme3test/terrain/PBRTerrainAdvancedTest.java @@ -49,11 +49,11 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; import com.jme3.texture.TextureArray; import java.util.ArrayList; import java.util.List; @@ -229,31 +229,31 @@ private void setUpTerrainMaterial() { // load textures for texture arrays // These MUST all have the same dimensions and format in order to be put into a texture array. //ALBEDO MAPS - Texture dirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); - Texture darkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Color.png"); - Texture snow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Color.png"); - Texture tileRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Color.png"); - Texture grass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); - Texture marble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Color.png"); - Texture gravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Color.png"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); + GlTexture darkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Color.png"); + GlTexture snow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Color.png"); + GlTexture tileRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Color.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); + GlTexture marble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Color.png"); + GlTexture gravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Color.png"); // NORMAL MAPS - Texture normalMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_1K_Normal.png"); - Texture normalMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Normal.png"); - Texture normalMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Normal.png"); - Texture normalMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Normal.png"); - Texture normalMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Normal.png"); - Texture normalMapMarble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Normal.png"); - Texture normalMapRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Normal.png"); + GlTexture normalMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_1K_Normal.png"); + GlTexture normalMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Normal.png"); + GlTexture normalMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Normal.png"); + GlTexture normalMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Normal.png"); + GlTexture normalMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Normal.png"); + GlTexture normalMapMarble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Normal.png"); + GlTexture normalMapRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Normal.png"); //PACKED METALLIC/ROUGHNESS / AMBIENT OCCLUSION / EMISSIVE INTENSITY MAPS - Texture metallicRoughnessAoEiMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel_015_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapMarble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel_015_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapMarble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_PackedMetallicRoughnessMap.png"); // put all images into lists to create texture arrays. // @@ -261,9 +261,9 @@ private void setUpTerrainMaterial() { // sent to the material to tell the shader to choose that texture from // the textureArray when setting up a texture slot's mat params. // - List albedoImages = new ArrayList<>(); - List normalMapImages = new ArrayList<>(); - List metallicRoughnessAoEiMapImages = new ArrayList<>(); + List albedoImages = new ArrayList<>(); + List normalMapImages = new ArrayList<>(); + List metallicRoughnessAoEiMapImages = new ArrayList<>(); albedoImages.add(dirt.getImage()); //0 albedoImages.add(darkRock.getImage()); //1 @@ -457,7 +457,7 @@ public void simpleUpdate(float tpf) { private void setUpTerrain() { // HEIGHTMAP image (for the terrain heightmap) TextureKey hmKey = new TextureKey("Textures/Terrain/splat/mountains512.png", false); - Texture heightMapImage = assetManager.loadTexture(hmKey); + GlTexture heightMapImage = assetManager.loadTexture(hmKey); // CREATE HEIGHTMAP AbstractHeightMap heightmap = null; @@ -481,7 +481,7 @@ private void setUpTerrain() { rootNode.attachChild(terrain); } - private void setWrapAndMipMaps(Texture texture){ + private void setWrapAndMipMaps(GlTexture texture){ texture.setWrap(WrapMode.Repeat); texture.setMinFilter(MinFilter.Trilinear); texture.setMagFilter(MagFilter.Bilinear); diff --git a/jme3-examples/src/main/java/jme3test/terrain/PBRTerrainTest.java b/jme3-examples/src/main/java/jme3test/terrain/PBRTerrainTest.java index 1500257612..83dc7f633e 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/PBRTerrainTest.java +++ b/jme3-examples/src/main/java/jme3test/terrain/PBRTerrainTest.java @@ -48,8 +48,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; /** * This test uses 'PBRTerrain.j3md' to create a terrain Material for PBR. @@ -193,7 +193,7 @@ private void setUpTerrainMaterial() { // this material also supports 'AlphaMap_2', so you can get up to 12 diffuse textures // DIRT texture, Diffuse textures 0 to 3 use the first AlphaMap - Texture dirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); dirt.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_0", dirt); matTerrain.setFloat("AlbedoMap_0_scale", dirtScale); @@ -202,7 +202,7 @@ private void setUpTerrainMaterial() { //matTerrain.setInt("AfflictionMode_0", 0); // DARK ROCK texture - Texture darkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Color.png"); + GlTexture darkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Color.png"); darkRock.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_1", darkRock); matTerrain.setFloat("AlbedoMap_1_scale", darkRockScale); @@ -211,14 +211,14 @@ private void setUpTerrainMaterial() { //matTerrain.setInt("AfflictionMode_1", 0); // SNOW texture - Texture snow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Color.png"); + GlTexture snow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Color.png"); snow.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_2", snow); matTerrain.setFloat("AlbedoMap_2_scale", snowScale); matTerrain.setFloat("Roughness_2", 0.55f); matTerrain.setFloat("Metallic_2", 0.12f); - Texture tiles = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Color.png"); + GlTexture tiles = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Color.png"); tiles.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_3", tiles); matTerrain.setFloat("AlbedoMap_3_scale", tileRoadScale); @@ -226,7 +226,7 @@ private void setUpTerrainMaterial() { matTerrain.setFloat("Metallic_3", 0.08f); // GRASS texture - Texture grass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); grass.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_4", grass); matTerrain.setFloat("AlbedoMap_4_scale", grassScale); @@ -234,7 +234,7 @@ private void setUpTerrainMaterial() { matTerrain.setFloat("Metallic_4", 0); // MARBLE texture - Texture marble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Color.png"); + GlTexture marble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Color.png"); marble.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_5", marble); matTerrain.setFloat("AlbedoMap_5_scale", marbleScale); @@ -242,32 +242,32 @@ private void setUpTerrainMaterial() { matTerrain.setFloat("Metallic_5", 0.8f); // Gravel texture - Texture gravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Color.png"); + GlTexture gravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Color.png"); gravel.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_6", gravel); matTerrain.setFloat("AlbedoMap_6_scale", gravelScale); matTerrain.setFloat("Roughness_6", 0.9f); matTerrain.setFloat("Metallic_6", 0.07f); // NORMAL MAPS - Texture normalMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_1K_Normal.png"); + GlTexture normalMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_1K_Normal.png"); normalMapDirt.setWrap(WrapMode.Repeat); - Texture normalMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Normal.png"); + GlTexture normalMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Normal.png"); normalMapDarkRock.setWrap(WrapMode.Repeat); - Texture normalMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Normal.png"); + GlTexture normalMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Normal.png"); normalMapSnow.setWrap(WrapMode.Repeat); - Texture normalMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Normal.png"); + GlTexture normalMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Normal.png"); normalMapGravel.setWrap(WrapMode.Repeat); - Texture normalMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Normal.png"); + GlTexture normalMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Normal.png"); normalMapGrass.setWrap(WrapMode.Repeat); // Texture normalMapMarble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Normal.png"); // normalMapMarble.setWrap(WrapMode.Repeat); - Texture normalMapTiles = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Normal.png"); + GlTexture normalMapTiles = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Normal.png"); normalMapTiles.setWrap(WrapMode.Repeat); matTerrain.setTexture("NormalMap_0", normalMapDirt); @@ -365,7 +365,7 @@ public void simpleUpdate(float tpf) { private void setUpTerrain() { // HEIGHTMAP image (for the terrain heightmap) TextureKey hmKey = new TextureKey("Textures/Terrain/splat/mountains512.png", false); - Texture heightMapImage = assetManager.loadTexture(hmKey); + GlTexture heightMapImage = assetManager.loadTexture(hmKey); // CREATE HEIGHTMAP AbstractHeightMap heightmap = null; diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainFractalGridTest.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainFractalGridTest.java index 76d10a8220..d99ca8b487 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainFractalGridTest.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainFractalGridTest.java @@ -19,8 +19,8 @@ import com.jme3.terrain.noise.filter.SmoothFilter; import com.jme3.terrain.noise.fractal.FractalSum; import com.jme3.terrain.noise.modulator.NoiseModulator; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; public class TerrainFractalGridTest extends SimpleApplication { @@ -54,19 +54,19 @@ public void simpleInitApp() { // slopeTileFactor: the texture scale for slopes // terrainSize: the total size of the terrain (used for scaling the texture) // GRASS texture - Texture grass = this.assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = this.assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); mat_terrain.setTexture("region1ColorMap", grass); mat_terrain.setVector3("region1", new Vector3f(15, 200, this.grassScale)); // DIRT texture - Texture dirt = this.assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = this.assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); mat_terrain.setTexture("region2ColorMap", dirt); mat_terrain.setVector3("region2", new Vector3f(0, 20, this.dirtScale)); // ROCK texture - Texture rock = this.assetManager.loadTexture("Textures/Terrain/Rock2/rock.jpg"); + GlTexture rock = this.assetManager.loadTexture("Textures/Terrain/Rock2/rock.jpg"); rock.setWrap(WrapMode.Repeat); mat_terrain.setTexture("region3ColorMap", rock); mat_terrain.setVector3("region3", new Vector3f(198, 260, this.rockScale)); diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainGridAlphaMapTest.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainGridAlphaMapTest.java index a5f01976bd..cb1750f08c 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainGridAlphaMapTest.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainGridAlphaMapTest.java @@ -38,8 +38,8 @@ import com.jme3.terrain.noise.filter.SmoothFilter; import com.jme3.terrain.noise.fractal.FractalSum; import com.jme3.terrain.noise.modulator.NoiseModulator; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import java.io.File; public class TerrainGridAlphaMapTest extends SimpleApplication { @@ -86,19 +86,19 @@ public void simpleInitApp() { material.setFloat("Shininess", 0.0f); // GRASS texture - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); material.setTexture("DiffuseMap", grass); material.setFloat("DiffuseMap_0_scale", grassScale); // DIRT texture - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); material.setTexture("DiffuseMap_1", dirt); material.setFloat("DiffuseMap_1_scale", dirtScale); // ROCK texture - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); material.setTexture("DiffuseMap_2", rock); material.setFloat("DiffuseMap_2_scale", rockScale); @@ -185,7 +185,7 @@ public void gridMoved(Vector3f newCenter) { @Override public void tileAttached(Vector3f cell, TerrainQuad quad) { - Texture alpha = null; + GlTexture alpha = null; try { alpha = assetManager.loadTexture("TerrainAlphaTest/alpha_" + (int)cell.x+ "_" + (int)cell.z + ".png"); } catch (Exception e) { diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainGridTest.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainGridTest.java index 762b32f2da..36b1d17120 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainGridTest.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainGridTest.java @@ -24,8 +24,8 @@ import com.jme3.terrain.geomipmap.grid.ImageTileLoader; import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.Namer; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; public class TerrainGridTest extends SimpleApplication { @@ -64,19 +64,19 @@ public void simpleInitApp() { // slopeTileFactor: the texture scale for slopes // terrainSize: the total size of the terrain (used for scaling the texture) // GRASS texture - Texture grass = this.assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = this.assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); mat_terrain.setTexture("region1ColorMap", grass); mat_terrain.setVector3("region1", new Vector3f(88, 200, this.grassScale)); // DIRT texture - Texture dirt = this.assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = this.assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); mat_terrain.setTexture("region2ColorMap", dirt); mat_terrain.setVector3("region2", new Vector3f(0, 90, this.dirtScale)); // ROCK texture - Texture rock = this.assetManager.loadTexture("Textures/Terrain/Rock2/rock.jpg"); + GlTexture rock = this.assetManager.loadTexture("Textures/Terrain/Rock2/rock.jpg"); rock.setWrap(WrapMode.Repeat); mat_terrain.setTexture("region3ColorMap", rock); mat_terrain.setVector3("region3", new Vector3f(198, 260, this.rockScale)); diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainGridTileLoaderTest.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainGridTileLoaderTest.java index 5f9ca109fe..3bb3e1fd0e 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainGridTileLoaderTest.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainGridTileLoaderTest.java @@ -24,8 +24,8 @@ import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.geomipmap.grid.AssetTileLoader; import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; public class TerrainGridTileLoaderTest extends SimpleApplication { @@ -67,19 +67,19 @@ public void simpleInitApp() { // slopeTileFactor: the texture scale for slopes // terrainSize: the total size of the terrain (used for scaling the texture) // GRASS texture - Texture grass = this.assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = this.assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); mat_terrain.setTexture("region1ColorMap", grass); mat_terrain.setVector3("region1", new Vector3f(88, 200, this.grassScale)); // DIRT texture - Texture dirt = this.assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = this.assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); mat_terrain.setTexture("region2ColorMap", dirt); mat_terrain.setVector3("region2", new Vector3f(0, 90, this.dirtScale)); // ROCK texture - Texture rock = this.assetManager.loadTexture("Textures/Terrain/Rock2/rock.jpg"); + GlTexture rock = this.assetManager.loadTexture("Textures/Terrain/Rock2/rock.jpg"); rock.setWrap(WrapMode.Repeat); mat_terrain.setTexture("region3ColorMap", rock); mat_terrain.setVector3("region3", new Vector3f(198, 260, this.rockScale)); diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainTest.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainTest.java index 4f91ebcf0e..1be4fc5b47 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainTest.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainTest.java @@ -46,8 +46,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; /** * Demonstrates how to use terrain. @@ -105,22 +105,22 @@ public void simpleInitApp() { matRock.setTexture("Alpha", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); // HEIGHTMAP image (for the terrain heightmap) - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); // GRASS texture - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matRock.setTexture("Tex1", grass); matRock.setFloat("Tex1Scale", grassScale); // DIRT texture - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matRock.setTexture("Tex2", dirt); matRock.setFloat("Tex2Scale", dirtScale); // ROCK texture - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matRock.setTexture("Tex3", rock); matRock.setFloat("Tex3Scale", rockScale); diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestAdvanced.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestAdvanced.java index c69eeac3fb..3d015d9c2c 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestAdvanced.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestAdvanced.java @@ -51,8 +51,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.util.SkyFactory; /** @@ -106,46 +106,46 @@ public void simpleInitApp() { // HEIGHTMAP image (for the terrain heightmap) TextureKey hmKey = new TextureKey("Textures/Terrain/splat/mountains512.png", false); - Texture heightMapImage = assetManager.loadTexture(hmKey); + GlTexture heightMapImage = assetManager.loadTexture(hmKey); // DIRT texture, Diffuse textures 0 to 3 use the first AlphaMap - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap", dirt); matTerrain.setFloat("DiffuseMap_0_scale", dirtScale); // DARK ROCK texture - Texture darkRock = assetManager.loadTexture("Textures/Terrain/Rock2/rock.jpg"); + GlTexture darkRock = assetManager.loadTexture("Textures/Terrain/Rock2/rock.jpg"); darkRock.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_1", darkRock); matTerrain.setFloat("DiffuseMap_1_scale", darkRockScale); // PINK ROCK texture - Texture pinkRock = assetManager.loadTexture("Textures/Terrain/Rock/Rock.PNG"); + GlTexture pinkRock = assetManager.loadTexture("Textures/Terrain/Rock/Rock.PNG"); pinkRock.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_2", pinkRock); matTerrain.setFloat("DiffuseMap_2_scale", pinkRockScale); // RIVER ROCK texture, this texture will use the next alphaMap: AlphaMap_1 - Texture riverRock = assetManager.loadTexture("Textures/Terrain/Pond/Pond.jpg"); + GlTexture riverRock = assetManager.loadTexture("Textures/Terrain/Pond/Pond.jpg"); riverRock.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_3", riverRock); matTerrain.setFloat("DiffuseMap_3_scale", riverRockScale); // GRASS texture - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_4", grass); matTerrain.setFloat("DiffuseMap_4_scale", grassScale); // BRICK texture - Texture brick = assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"); + GlTexture brick = assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"); brick.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_5", brick); matTerrain.setFloat("DiffuseMap_5_scale", brickScale); // ROAD texture - Texture road = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture road = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); road.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_6", road); matTerrain.setFloat("DiffuseMap_6_scale", roadScale); @@ -157,13 +157,13 @@ public void simpleInitApp() { // NORMAL MAPS - Texture normalMapDirt = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); + GlTexture normalMapDirt = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); normalMapDirt.setWrap(WrapMode.Repeat); - Texture normalMapPinkRock = assetManager.loadTexture("Textures/Terrain/Rock/Rock_normal.png"); + GlTexture normalMapPinkRock = assetManager.loadTexture("Textures/Terrain/Rock/Rock_normal.png"); normalMapPinkRock.setWrap(WrapMode.Repeat); - Texture normalMapGrass = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); + GlTexture normalMapGrass = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); normalMapGrass.setWrap(WrapMode.Repeat); - Texture normalMapRoad = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); + GlTexture normalMapRoad = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); normalMapRoad.setWrap(WrapMode.Repeat); matTerrain.setTexture("NormalMap", normalMapDirt); matTerrain.setTexture("NormalMap_1", normalMapPinkRock); @@ -296,12 +296,12 @@ public void onAction(String name, boolean pressed, float tpf) { }; private void createSky() { - Texture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg"); - Texture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg"); - Texture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg"); - Texture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg"); - Texture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg"); - Texture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg"); + GlTexture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg"); + GlTexture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg"); + GlTexture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg"); + GlTexture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg"); + GlTexture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg"); + GlTexture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg"); Spatial sky = SkyFactory.createSky(assetManager, west, east, north, south, up, down); rootNode.attachChild(sky); diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestAndroid.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestAndroid.java index 57be5d293a..de512811bf 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestAndroid.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestAndroid.java @@ -46,8 +46,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; /** * Demonstrates how to use terrain on Android. @@ -93,22 +93,22 @@ public void simpleInitApp() { matRock.setTexture("Alpha", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); // HEIGHTMAP image (for the terrain heightmap) - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains128.png"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains128.png"); // GRASS texture - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matRock.setTexture("Tex1", grass); matRock.setFloat("Tex1Scale", grassScale); // DIRT texture - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matRock.setTexture("Tex2", dirt); matRock.setFloat("Tex2Scale", dirtScale); // ROCK texture - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matRock.setTexture("Tex3", rock); matRock.setFloat("Tex3Scale", rockScale); diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestCollision.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestCollision.java index 456e5cec29..78aba04165 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestCollision.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestCollision.java @@ -59,8 +59,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import java.util.ArrayList; import java.util.List; @@ -104,16 +104,16 @@ public void simpleInitApp() { setupKeys(); matRock = new Material(assetManager, "Common/MatDefs/Terrain/Terrain.j3md"); matRock.setTexture("Alpha", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matRock.setTexture("Tex1", grass); matRock.setFloat("Tex1Scale", 64f); - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matRock.setTexture("Tex2", dirt); matRock.setFloat("Tex2Scale", 32f); - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matRock.setTexture("Tex3", rock); matRock.setFloat("Tex3Scale", 128f); diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestModifyHeight.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestModifyHeight.java index 4a34906fd0..105054a89a 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestModifyHeight.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestModifyHeight.java @@ -57,8 +57,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import java.util.ArrayList; import java.util.List; @@ -275,25 +275,25 @@ private void createTerrain() { matTerrain.setTexture("AlphaMap", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); // GRASS texture - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap", grass); matTerrain.setFloat("DiffuseMap_0_scale", grassScale); // DIRT texture - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_1", dirt); matTerrain.setFloat("DiffuseMap_1_scale", dirtScale); // ROCK texture - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_2", rock); matTerrain.setFloat("DiffuseMap_2_scale", rockScale); // HEIGHTMAP image (for the terrain heightmap) - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); AbstractHeightMap heightmap = null; try { heightmap = new ImageBasedHeightMap(heightMapImage.getImage(), 0.5f); diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestReadWrite.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestReadWrite.java index 06a4f95776..8ab507b7ff 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestReadWrite.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestReadWrite.java @@ -51,8 +51,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import java.io.*; import java.util.logging.Level; import java.util.logging.Logger; @@ -100,33 +100,33 @@ private void createMap() { matTerrain.setTexture("AlphaMap", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); // HEIGHTMAP image (for the terrain heightmap) - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); // GRASS texture - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap", grass); matTerrain.setFloat("DiffuseMap_0_scale", grassScale); // DIRT texture - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_1", dirt); matTerrain.setFloat("DiffuseMap_1_scale", dirtScale); // ROCK texture - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap_2", rock); matTerrain.setFloat("DiffuseMap_2_scale", rockScale); - Texture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); + GlTexture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); normalMap0.setWrap(WrapMode.Repeat); - Texture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); + GlTexture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); normalMap1.setWrap(WrapMode.Repeat); - Texture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); + GlTexture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); normalMap2.setWrap(WrapMode.Repeat); matTerrain.setTexture("NormalMap", normalMap0); matTerrain.setTexture("NormalMap_1", normalMap1); diff --git a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestTile.java b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestTile.java index e4d60bd915..8ba864afe8 100644 --- a/jme3-examples/src/main/java/jme3test/terrain/TerrainTestTile.java +++ b/jme3-examples/src/main/java/jme3test/terrain/TerrainTestTile.java @@ -51,8 +51,8 @@ import com.jme3.terrain.geomipmap.NeighbourFinder; import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import java.util.List; /** @@ -179,7 +179,7 @@ private class TiledTerrain extends Node implements Terrain, NeighbourFinder { matTerrain.setFloat("Shininess", 0); // GRASS texture - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matTerrain.setTexture("DiffuseMap", grass); matTerrain.setFloat("DiffuseMap_0_scale", grassScale); diff --git a/jme3-examples/src/main/java/jme3test/texture/TestAnisotropicFilter.java b/jme3-examples/src/main/java/jme3test/texture/TestAnisotropicFilter.java index 16ba966618..1cc8017dda 100755 --- a/jme3-examples/src/main/java/jme3test/texture/TestAnisotropicFilter.java +++ b/jme3-examples/src/main/java/jme3test/texture/TestAnisotropicFilter.java @@ -13,9 +13,9 @@ import com.jme3.renderer.Limits; import com.jme3.scene.Geometry; import com.jme3.scene.shape.RectangleMesh; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.texture.image.ColorSpace; import com.jme3.texture.image.ImageRaster; @@ -52,16 +52,16 @@ public void simpleInitApp() { private static Material createCheckerBoardMaterial(AssetManager assetManager) { Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - Texture tex = createCheckerBoardTexture(); // assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.dds"); - tex.setMagFilter(Texture.MagFilter.Bilinear); - tex.setMinFilter(Texture.MinFilter.Trilinear); - tex.setWrap(Texture.WrapMode.Repeat); + GlTexture tex = createCheckerBoardTexture(); // assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.dds"); + tex.setMagFilter(GlTexture.MagFilter.Bilinear); + tex.setMinFilter(GlTexture.MinFilter.Trilinear); + tex.setWrap(GlTexture.WrapMode.Repeat); mat.setTexture("ColorMap", tex); return mat; } private static Texture2D createCheckerBoardTexture() { - Image image = new Image(Format.RGBA8, 1024, 1024, BufferUtils.createByteBuffer(1024 * 1024 * 4), ColorSpace.sRGB); + GlImage image = new GlImage(Format.RGBA8, 1024, 1024, BufferUtils.createByteBuffer(1024 * 1024 * 4), ColorSpace.sRGB); ImageRaster raster = ImageRaster.create(image); for (int y = 0; y < 1024; y++) { diff --git a/jme3-examples/src/main/java/jme3test/texture/TestImageRaster.java b/jme3-examples/src/main/java/jme3test/texture/TestImageRaster.java index 5288d4ffe6..b02b123a63 100644 --- a/jme3-examples/src/main/java/jme3test/texture/TestImageRaster.java +++ b/jme3-examples/src/main/java/jme3test/texture/TestImageRaster.java @@ -11,11 +11,11 @@ import com.jme3.renderer.queue.RenderQueue; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Quad; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; import com.jme3.texture.Texture2D; import com.jme3.texture.image.ImageRaster; import com.jme3.util.BufferUtils; @@ -23,11 +23,11 @@ public class TestImageRaster extends SimpleApplication { - private Image convertImage(Image image, Format newFormat) { + private GlImage convertImage(GlImage image, Format newFormat) { int width = image.getWidth(); int height = image.getHeight(); ByteBuffer data = BufferUtils.createByteBuffer( (int)Math.ceil(newFormat.getBitsPerPixel() / 8.0) * width * height); - Image convertedImage = new Image(newFormat, width, height, data,null, image.getColorSpace()); + GlImage convertedImage = new GlImage(newFormat, width, height, data,null, image.getColorSpace()); ImageRaster sourceReader = ImageRaster.create(image); ImageRaster targetWriter = ImageRaster.create(convertedImage); @@ -41,8 +41,8 @@ private Image convertImage(Image image, Format newFormat) { return convertedImage; } - private void convertAndPutImage(Image image, float posX, float posY) { - Texture tex = new Texture2D(image); + private void convertAndPutImage(GlImage image, float posX, float posY) { + GlTexture tex = new Texture2D(image); tex.setMagFilter(MagFilter.Nearest); tex.setMinFilter(MinFilter.NearestNoMipMaps); tex.setAnisotropicFilter(16); @@ -60,7 +60,7 @@ private void convertAndPutImage(Image image, float posX, float posY) { txt.setBox(new Rectangle(0, 0, 5, 5)); txt.setQueueBucket(RenderQueue.Bucket.Transparent); txt.setSize(0.5f); - txt.setText(image.getFormat().name()); + txt.setText(image.getGlFormat().name()); txt.setLocalTranslation(posX, posY, 0); rootNode.attachChild(txt); } @@ -70,11 +70,11 @@ public void simpleInitApp() { cam.setLocation(new Vector3f(16, 6, 36)); flyCam.setMoveSpeed(10); - Texture tex = assetManager.loadTexture("com/jme3/app/Monkey.png"); + GlTexture tex = assetManager.loadTexture("com/jme3/app/Monkey.png"); // Texture tex = assetManager.loadTexture("Textures/HdrTest/Memorial.hdr"); - Image originalImage = tex.getImage(); + GlImage originalImage = tex.getImage(); - Image image = convertImage(originalImage, Format.RGBA32F); + GlImage image = convertImage(originalImage, Format.RGBA32F); convertAndPutImage(image, 0, 0); image = convertImage(image, Format.RGB32F); diff --git a/jme3-examples/src/main/java/jme3test/texture/TestShaderImage.java b/jme3-examples/src/main/java/jme3test/texture/TestShaderImage.java index 52f698c99d..3b02292c2c 100644 --- a/jme3-examples/src/main/java/jme3test/texture/TestShaderImage.java +++ b/jme3-examples/src/main/java/jme3test/texture/TestShaderImage.java @@ -11,7 +11,7 @@ import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Quad; import com.jme3.shader.VarType; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.Texture2D; import com.jme3.texture.TextureImage; @@ -37,7 +37,7 @@ public void simpleInitApp() { int width = context.getFramebufferWidth(); int height = context.getFramebufferHeight(); - Texture2D target = new Texture2D(width, height, Image.Format.RGBA8); + Texture2D target = new Texture2D(width, height, GlImage.Format.RGBA8); TextureImage targetImage = new TextureImage(target, TextureImage.Access.WriteOnly); mat.setParam("TargetImage", VarType.Image2D, targetImage); diff --git a/jme3-examples/src/main/java/jme3test/texture/TestSkyLoading.java b/jme3-examples/src/main/java/jme3test/texture/TestSkyLoading.java index 21c1b590b9..c86f790ec7 100644 --- a/jme3-examples/src/main/java/jme3test/texture/TestSkyLoading.java +++ b/jme3-examples/src/main/java/jme3test/texture/TestSkyLoading.java @@ -34,7 +34,7 @@ import com.jme3.app.SimpleApplication; import com.jme3.scene.Spatial; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.util.SkyFactory; public class TestSkyLoading extends SimpleApplication { @@ -46,12 +46,12 @@ public static void main(String[] args){ @Override public void simpleInitApp() { - Texture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg"); - Texture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg"); - Texture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg"); - Texture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg"); - Texture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg"); - Texture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg"); + GlTexture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg"); + GlTexture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg"); + GlTexture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg"); + GlTexture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg"); + GlTexture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg"); + GlTexture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg"); Spatial sky = SkyFactory.createSky(assetManager, west, east, north, south, up, down); rootNode.attachChild(sky); diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTexture3D.java b/jme3-examples/src/main/java/jme3test/texture/TestTexture3D.java index e3f41b6fee..b0aad67d50 100644 --- a/jme3-examples/src/main/java/jme3test/texture/TestTexture3D.java +++ b/jme3-examples/src/main/java/jme3test/texture/TestTexture3D.java @@ -42,9 +42,9 @@ import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; import com.jme3.scene.shape.Sphere; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture3D; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; @@ -91,7 +91,7 @@ public void simpleInitApp() { Geometry g = new Geometry("sphere", sphere); Material material = new Material(assetManager, "jme3test/texture/tex3D.j3md"); try { - Texture texture = this.getTexture(); + GlTexture texture = this.getTexture(); material.setTexture("Texture", texture); } catch (IOException e) { e.printStackTrace(); @@ -114,7 +114,7 @@ public void simpleInitApp() { /** * This method creates an RGB8 texture with the sizes of 10x10x10 pixels. */ - private Texture getTexture() throws IOException { + private GlTexture getTexture() throws IOException { ArrayList data = new ArrayList<>(1); ByteBuffer bb = BufferUtils.createByteBuffer(10 * 10 * 10 * 3);//all data must be inside one buffer for (int i = 0; i < 10; ++i) { @@ -126,6 +126,6 @@ private Texture getTexture() throws IOException { } bb.rewind(); data.add(bb); - return new Texture3D(new Image(Format.RGB8, 10, 10, 10, data, null, ColorSpace.Linear)); + return new Texture3D(new GlImage(Format.RGB8, 10, 10, 10, data, null, ColorSpace.Linear)); } } diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTexture3DLoading.java b/jme3-examples/src/main/java/jme3test/texture/TestTexture3DLoading.java index ada3f1fffe..e935b12d7e 100644 --- a/jme3-examples/src/main/java/jme3test/texture/TestTexture3DLoading.java +++ b/jme3-examples/src/main/java/jme3test/texture/TestTexture3DLoading.java @@ -39,7 +39,7 @@ import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Quad; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; public class TestTexture3DLoading extends SimpleApplication { @@ -60,9 +60,9 @@ public void simpleInitApp() { Material material = new Material(assetManager, "jme3test/texture/tex3DThumb.j3md"); TextureKey key = new TextureKey("Textures/3D/flame.dds"); key.setGenerateMips(true); - key.setTextureTypeHint(Texture.Type.ThreeDimensional); + key.setTextureTypeHint(GlTexture.Type.ThreeDimensional); - Texture t = assetManager.loadTexture(key); + GlTexture t = assetManager.loadTexture(key); int rows = 4;//4 * 4 diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java b/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java index ba56b3ff2a..0c4be35f17 100644 --- a/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java +++ b/jme3-examples/src/main/java/jme3test/texture/TestTextureArray.java @@ -8,8 +8,8 @@ import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer.Type; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.TextureArray; import com.jme3.util.BufferUtils; import java.util.ArrayList; @@ -31,13 +31,13 @@ public void simpleInitApp() } - Texture tex1 = assetManager.loadTexture( "Textures/Terrain/Pond/Pond.jpg"); - Texture tex2 = assetManager.loadTexture("Textures/Terrain/Rock2/rock.jpg"); - List images = new ArrayList<>(); + GlTexture tex1 = assetManager.loadTexture( "Textures/Terrain/Pond/Pond.jpg"); + GlTexture tex2 = assetManager.loadTexture("Textures/Terrain/Rock2/rock.jpg"); + List images = new ArrayList<>(); images.add(tex1.getImage()); images.add(tex2.getImage()); TextureArray tex3 = new TextureArray(images); - tex3.setMinFilter(Texture.MinFilter.Trilinear); + tex3.setMinFilter(GlTexture.MinFilter.Trilinear); mat.setTexture("ColorMap", tex3); Mesh m = new Mesh(); diff --git a/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java b/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java index 0af064f557..8c1d0d55a4 100644 --- a/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java +++ b/jme3-examples/src/main/java/jme3test/texture/TestTextureArrayCompressed.java @@ -8,8 +8,8 @@ import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer.Type; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.TextureArray; import com.jme3.util.BufferUtils; import java.util.ArrayList; @@ -31,13 +31,13 @@ public void simpleInitApp() } - Texture tex1 = assetManager.loadTexture( "Textures/Terrain/Pond/Pond_dxt5.dds"); - Texture tex2 = assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall_dxt5.dds"); - List images = new ArrayList<>(); + GlTexture tex1 = assetManager.loadTexture( "Textures/Terrain/Pond/Pond_dxt5.dds"); + GlTexture tex2 = assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall_dxt5.dds"); + List images = new ArrayList<>(); images.add(tex1.getImage()); images.add(tex2.getImage()); TextureArray tex3 = new TextureArray(images); - tex3.setMinFilter(Texture.MinFilter.Trilinear); + tex3.setMinFilter(GlTexture.MinFilter.Trilinear); mat.setTexture("ColorMap", tex3); Mesh m = new Mesh(); diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 4c5369cfb6..1cf82fc5ac 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -2,7 +2,6 @@ import com.jme3.app.FlyCamAppState; import com.jme3.app.SimpleApplication; -import com.jme3.math.Transform; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; @@ -11,7 +10,6 @@ import com.jme3.shaderc.ShadercLoader; import com.jme3.system.AppSettings; import com.jme3.system.vulkan.LwjglVulkanContext; -import com.jme3.util.BufferUtils; import com.jme3.util.natives.Native; import com.jme3.vulkan.Format; import com.jme3.vulkan.VulkanInstance; @@ -54,8 +52,6 @@ import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.*; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; import java.util.logging.Level; import static org.lwjgl.vulkan.VK13.*; @@ -79,7 +75,7 @@ public class VulkanHelperTest extends SimpleApplication implements SwapchainUpda private boolean applicationStopped = false; // framebuffer - private ImageView depthView; + private VulkanImageView depthView; // commands private CommandBatch graphics, perFrameData, sharedData; @@ -230,12 +226,12 @@ public void simpleInitApp() { // material color texture VulkanImage image = assetManager.loadAsset(VulkanImageLoader.key(initPool, "Common/Textures/MissingTexture.png")); - ImageView imgView = new ImageView(image, VulkanImage.View.TwoDemensional); - try (ImageView.Builder i = imgView.build()) { + VulkanImageView imgView = new VulkanImageView(image, VulkanImage.View.TwoDemensional); + try (VulkanImageView.Builder i = imgView.build()) { i.setAspect(VulkanImage.Aspect.Color); } // material - Texture texture = new Texture(device, imgView); + VulkanTexture texture = new VulkanTexture(device, imgView); try (Sampler.Builder t = texture.build()) { t.setMinMagFilters(Filter.Linear, Filter.Linear); t.setEdgeModes(AddressMode.Repeat); @@ -306,21 +302,21 @@ public void simpleUpdate(float tpf) { frames.update(tpf); } - private ImageView createDepthAttachment(CommandBuffer cmd) { + private VulkanImageView createDepthAttachment(CommandBuffer cmd) { Format depthFormat = device.getPhysicalDevice().findSupportedFormat( VulkanImage.Tiling.Optimal, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, Format.Depth32SFloat, Format.Depth32SFloat_Stencil8UInt, Format.Depth24UNorm_Stencil8UInt); - GpuImage image = new GpuImage(device, VulkanImage.Type.TwoDemensional); - try (GpuImage.Builder i = image.build()) { + BasicVulkanImage image = new BasicVulkanImage(device, VulkanImage.Type.TwoDemensional); + try (BasicVulkanImage.Builder i = image.build()) { i.setSize(swapchain.getExtent().x, swapchain.getExtent().y); i.setFormat(depthFormat); i.setTiling(VulkanImage.Tiling.Optimal); i.setUsage(ImageUsage.DepthStencilAttachment); i.setMemoryProps(MemoryProp.DeviceLocal); } - ImageView view = new ImageView(image, VulkanImage.View.TwoDemensional); - try (ImageView.Builder v = view.build()) { + VulkanImageView view = new VulkanImageView(image, VulkanImage.View.TwoDemensional); + try (VulkanImageView.Builder v = view.build()) { v.allMipmaps(); v.setAspect(VulkanImage.Aspect.Depth); } diff --git a/jme3-examples/src/main/java/jme3test/water/TestMultiPostWater.java b/jme3-examples/src/main/java/jme3test/water/TestMultiPostWater.java index 2784d59fa1..f71cabd154 100644 --- a/jme3-examples/src/main/java/jme3test/water/TestMultiPostWater.java +++ b/jme3-examples/src/main/java/jme3test/water/TestMultiPostWater.java @@ -47,8 +47,8 @@ import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.Texture2D; import com.jme3.util.SkyFactory; import com.jme3.util.SkyFactory.EnvMapType; @@ -166,24 +166,24 @@ private void createTerrain(Node rootNode) { matRock.setBoolean("useTriPlanarMapping", false); matRock.setBoolean("WardIso", true); matRock.setTexture("AlphaMap", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/pools.png"); - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/pools.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap", grass); matRock.setFloat("DiffuseMap_0_scale", 64); - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap_1", dirt); matRock.setFloat("DiffuseMap_1_scale", 16); - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap_2", rock); matRock.setFloat("DiffuseMap_2_scale", 128); - Texture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); + GlTexture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); normalMap0.setWrap(WrapMode.Repeat); - Texture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); + GlTexture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); normalMap1.setWrap(WrapMode.Repeat); - Texture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); + GlTexture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); normalMap2.setWrap(WrapMode.Repeat); matRock.setTexture("NormalMap", normalMap0); matRock.setTexture("NormalMap_1", normalMap1); diff --git a/jme3-examples/src/main/java/jme3test/water/TestPostWater.java b/jme3-examples/src/main/java/jme3test/water/TestPostWater.java index 7f6117bc0c..08d3d8cc7b 100644 --- a/jme3-examples/src/main/java/jme3test/water/TestPostWater.java +++ b/jme3-examples/src/main/java/jme3test/water/TestPostWater.java @@ -61,8 +61,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.Texture2D; import com.jme3.util.SkyFactory; import com.jme3.util.SkyFactory.EnvMapType; @@ -231,7 +231,7 @@ private void createWaterFilter() { private void createTerrain(Node mainScene) { Material matRock = createTerrainMaterial(); - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); AbstractHeightMap heightmap = null; try { heightmap = new ImageBasedHeightMap(heightMapImage.getImage(), 0.25f); @@ -276,7 +276,7 @@ private Material createTerrainMaterial() { } private void setTexture(String texture, Material mat, String param) { - Texture tex = assetManager.loadTexture(texture); + GlTexture tex = assetManager.loadTexture(texture); tex.setWrap(WrapMode.Repeat); mat.setTexture(param, tex); } diff --git a/jme3-ios/src/main/java/com/jme3/system/ios/IosImageLoader.java b/jme3-ios/src/main/java/com/jme3/system/ios/IosImageLoader.java index 07a881ee5f..0a9fa89461 100644 --- a/jme3-ios/src/main/java/com/jme3/system/ios/IosImageLoader.java +++ b/jme3-ios/src/main/java/com/jme3/system/ios/IosImageLoader.java @@ -34,8 +34,8 @@ import com.jme3.asset.AssetInfo; import com.jme3.asset.AssetLoader; import com.jme3.asset.TextureKey; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; import java.io.IOException; import java.io.InputStream; @@ -48,7 +48,7 @@ public class IosImageLoader implements AssetLoader { @Override public Object load(AssetInfo info) throws IOException { boolean flip = ((TextureKey) info.getKey()).isFlipY(); - Image img = null; + GlImage img = null; InputStream in = null; try { in = info.openStream(); @@ -68,5 +68,5 @@ public Object load(AssetInfo info) throws IOException { * @param inputStream the InputStream to load the image data from * @return the loaded Image */ - private static native Image loadImageData(Format format, boolean flipY, InputStream inputStream); + private static native GlImage loadImageData(Format format, boolean flipY, InputStream inputStream); } diff --git a/jme3-lwjgl/src/main/java/com/jme3/opencl/lwjgl/LwjglContext.java b/jme3-lwjgl/src/main/java/com/jme3/opencl/lwjgl/LwjglContext.java index e95a2a56d0..ac665cc9ec 100644 --- a/jme3-lwjgl/src/main/java/com/jme3/opencl/lwjgl/LwjglContext.java +++ b/jme3-lwjgl/src/main/java/com/jme3/opencl/lwjgl/LwjglContext.java @@ -37,7 +37,8 @@ import com.jme3.opencl.Image.ImageFormat; import com.jme3.scene.VertexBuffer; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.util.List; @@ -163,8 +164,8 @@ public Buffer bindVertexBuffer(VertexBuffer vb, MemoryAccess access) { } @Override - public Image bindImage(com.jme3.texture.Image image, Texture.Type textureType, int mipLevel, MemoryAccess access) { - int imageID = image.getId(); + public Image bindImage(GlImage image, GlTexture.Type textureType, int mipLevel, MemoryAccess access) { + int imageID = image.getNativeObject(); if (imageID == -1) { throw new IllegalArgumentException("image was not yet uploaded to the GPU"); } @@ -189,7 +190,7 @@ protected Image bindPureRenderBuffer(FrameBuffer.RenderBuffer buffer, MemoryAcce return new LwjglImage(mem); } - private int convertTextureType(Texture.Type textureType) { + private int convertTextureType(GlTexture.Type textureType) { switch (textureType) { case TwoDimensional: return GL11.GL_TEXTURE_2D; case TwoDimensionalArray: return GL30.GL_TEXTURE_2D_ARRAY; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/opencl/lwjgl/LwjglContext.java b/jme3-lwjgl3/src/main/java/com/jme3/opencl/lwjgl/LwjglContext.java index 8fef7ad1f1..930c4ddb14 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/opencl/lwjgl/LwjglContext.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/opencl/lwjgl/LwjglContext.java @@ -37,7 +37,8 @@ import com.jme3.opencl.Image.ImageFormat; import com.jme3.scene.VertexBuffer; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.util.List; @@ -174,9 +175,9 @@ public Buffer bindVertexBuffer(VertexBuffer vb, MemoryAccess access) { } @Override - public Image bindImage(com.jme3.texture.Image image, Texture.Type textureType, int mipLevel, MemoryAccess access) { + public Image bindImage(GlImage image, GlTexture.Type textureType, int mipLevel, MemoryAccess access) { Utils.assertSharingPossible(); - int imageID = image.getId(); + int imageID = image.getNativeObject(); if (imageID == -1) { throw new IllegalArgumentException("image was not yet uploaded to the GPU"); } @@ -202,7 +203,7 @@ protected Image bindPureRenderBuffer(FrameBuffer.RenderBuffer buffer, MemoryAcce return new LwjglImage(mem); } - private int convertTextureType(Texture.Type textureType) { + private int convertTextureType(GlTexture.Type textureType) { switch (textureType) { case TwoDimensional: return GL11.GL_TEXTURE_2D; case TwoDimensionalArray: return GL30.GL_TEXTURE_2D_ARRAY; diff --git a/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java b/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java index 4d08588759..6f1d21d041 100644 --- a/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java +++ b/jme3-niftygui/src/main/java/com/jme3/niftygui/JmeBatchRenderBackend.java @@ -44,9 +44,10 @@ import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; import com.jme3.texture.Texture2D; import com.jme3.texture.image.ColorSpace; import com.jme3.texture.image.ImageRaster; @@ -223,11 +224,11 @@ public Image loadImage(final String filename) { // Fix GLES format incompatibility issue with glTexSubImage Renderer renderer = display.getRenderer(); if (renderer == null || renderer.getCaps().contains(Caps.OpenGLES20)) { - if (texture.getImage().getFormat() != Format.RGBA8) { - com.jme3.texture.Image sourceImage = texture.getImage(); + if (texture.getImage().getGlFormat() != Format.RGBA8) { + GlImage sourceImage = texture.getImage(); int size = sourceImage.getWidth() * sourceImage.getHeight() * 4; ByteBuffer buffer = BufferUtils.createByteBuffer(size); - com.jme3.texture.Image rgba8Image = new com.jme3.texture.Image(Format.RGBA8, + GlImage rgba8Image = new GlImage(Format.RGBA8, sourceImage.getWidth(), sourceImage.getHeight(), buffer, @@ -250,7 +251,7 @@ public Image loadImage(final String filename) { @Override public Image loadImage(final ByteBuffer imageData, final int imageWidth, final int imageHeight) { - return new ImageImpl(new com.jme3.texture.Image(Format.RGBA8, imageWidth, imageHeight, imageData, ColorSpace.Linear)); + return new ImageImpl(new GlImage(Format.RGBA8, imageWidth, imageHeight, imageData, ColorSpace.Linear)); } @Override @@ -334,7 +335,7 @@ public void removeImageFromAtlas(final Image image, final int x, final int y, fi initialData.rewind(); modifyTexture( getTextureAtlas(atlasTextureId), - new com.jme3.texture.Image(Format.RGBA8, image.getWidth(), image.getHeight(), initialData, ColorSpace.sRGB), + new GlImage(Format.RGBA8, image.getWidth(), image.getHeight(), initialData, ColorSpace.sRGB), x, y); } @@ -376,7 +377,7 @@ private Texture2D createAtlasTextureInternal(final int width, final int height) // re-use pre-defined initial data instead of creating a new buffer initialData.rewind(); - Texture2D texture = new Texture2D(new com.jme3.texture.Image(Format.RGBA8, width, height, initialData, ColorSpace.sRGB)); + Texture2D texture = new Texture2D(new GlImage(Format.RGBA8, width, height, initialData, ColorSpace.sRGB)); texture.setMinFilter(MinFilter.NearestNoMipMaps); texture.setMagFilter(MagFilter.Nearest); return texture; @@ -384,7 +385,7 @@ private Texture2D createAtlasTextureInternal(final int width, final int height) private void modifyTexture( final Texture2D textureAtlas, - final com.jme3.texture.Image image, + final GlImage image, final int x, final int y) { Renderer renderer = display.getRenderer(); @@ -417,9 +418,9 @@ private int addTexture(final Texture2D texture) { */ private static class ImageImpl implements BatchRenderBackend.Image { - private final com.jme3.texture.Image image; + private final GlImage image; - public ImageImpl(final com.jme3.texture.Image image) { + public ImageImpl(final GlImage image) { this.image = image; } @@ -451,11 +452,11 @@ public int getHeight() { private static class ModifyTexture { private final Texture2D atlas; - private final com.jme3.texture.Image image; + private final GlImage image; private final int x; private final int y; - private ModifyTexture(final Texture2D atlas, final com.jme3.texture.Image image, final int x, final int y) { + private ModifyTexture(final Texture2D atlas, final GlImage image, final int x, final int y) { this.atlas = atlas; this.image = image; this.x = x; diff --git a/jme3-niftygui/src/main/java/com/jme3/niftygui/RenderImageJme.java b/jme3-niftygui/src/main/java/com/jme3/niftygui/RenderImageJme.java index 2354f1c596..72f156d832 100644 --- a/jme3-niftygui/src/main/java/com/jme3/niftygui/RenderImageJme.java +++ b/jme3-niftygui/src/main/java/com/jme3/niftygui/RenderImageJme.java @@ -32,16 +32,16 @@ package com.jme3.niftygui; import com.jme3.asset.TextureKey; -import com.jme3.texture.Image; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; import com.jme3.texture.Texture2D; import de.lessvoid.nifty.spi.render.RenderImage; public class RenderImageJme implements RenderImage { private Texture2D texture; - private Image image; + private GlImage image; private int width; private int height; diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxImage.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxImage.java index 518dd4134a..ca53746803 100644 --- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxImage.java +++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxImage.java @@ -37,7 +37,7 @@ import com.jme3.asset.TextureKey; import com.jme3.scene.plugins.fbx.file.FbxElement; import com.jme3.scene.plugins.fbx.obj.FbxObject; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.util.PlaceholderAssets; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -86,7 +86,7 @@ public void fromElement(FbxElement element) { } } - private Image loadImageSafe(AssetManager assetManager, TextureKey texKey) { + private GlImage loadImageSafe(AssetManager assetManager, TextureKey texKey) { try { return assetManager.loadTexture(texKey).getImage(); } catch (AssetNotFoundException ex) { @@ -123,7 +123,7 @@ public TextureKey getTextureKey() { @Override protected Object toJmeObject() { - Image image = null; + GlImage image = null; String fileName = null; String relativeFilePathJme; diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxMaterial.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxMaterial.java index 8574bf0637..7487f5ba8a 100644 --- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxMaterial.java +++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxMaterial.java @@ -38,7 +38,7 @@ import com.jme3.math.ColorRGBA; import com.jme3.scene.plugins.fbx.file.FbxElement; import com.jme3.scene.plugins.fbx.obj.FbxObject; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.image.ColorSpace; import java.util.logging.Level; import java.util.logging.Logger; @@ -108,12 +108,12 @@ protected Material toJmeObject() { float shininess = 1f; boolean separateTexCoord = false; - Texture diffuseMap = null; - Texture specularMap = null; - Texture normalMap = null; - Texture transpMap = null; - Texture emitMap = null; - Texture aoMap = null; + GlTexture diffuseMap = null; + GlTexture specularMap = null; + GlTexture normalMap = null; + GlTexture transpMap = null; + GlTexture emitMap = null; + GlTexture aoMap = null; FbxTexture fbxDiffuseMap = null; diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxTexture.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxTexture.java index cb1cdd0d9e..06cdb4eb56 100644 --- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxTexture.java +++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/material/FbxTexture.java @@ -35,16 +35,16 @@ import com.jme3.asset.TextureKey; import com.jme3.scene.plugins.fbx.file.FbxElement; import com.jme3.scene.plugins.fbx.obj.FbxObject; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; -import com.jme3.texture.Texture.WrapAxis; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; +import com.jme3.texture.GlTexture.WrapAxis; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.Texture2D; import com.jme3.util.PlaceholderAssets; -public class FbxTexture extends FbxObject { +public class FbxTexture extends FbxObject { private static enum AlphaSource { None, @@ -65,11 +65,11 @@ public String getUvSet() { } @Override - protected Texture toJmeObject() { - Image image = null; + protected GlTexture toJmeObject() { + GlImage image = null; TextureKey key = null; if (media != null) { - image = (Image) media.getJmeObject(); + image = (GlImage) media.getJmeObject(); key = media.getTextureKey(); } if (image == null) { diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxImage.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxImage.java index 7ef3299339..632fab9e3d 100644 --- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxImage.java +++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxImage.java @@ -3,8 +3,8 @@ import java.io.File; import com.jme3.asset.AssetManager; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.image.ColorSpace; import com.jme3.util.BufferUtils; import com.jme3.scene.plugins.fbx.ContentTextureKey; @@ -19,7 +19,7 @@ public class FbxImage extends FbxObject { byte[] content; String imageType; - public Image image; + public GlImage image; public FbxImage(SceneLoader scene, FbxElement element) { super(scene, element); @@ -47,16 +47,16 @@ public FbxImage(SceneLoader scene, FbxElement element) { } - private Image createImage() { + private GlImage createImage() { AssetManager assetManager = scene.assetManager; - Image image = null; + GlImage image = null; if(filename != null) { // Try load by absolute path File file = new File(filename); if(file.exists() && file.isFile()) { File dir = new File(file.getParent()); String locatorPath = dir.getAbsolutePath(); - Texture tex = null; + GlTexture tex = null; try { assetManager.registerLocator(locatorPath, com.jme3.asset.plugins.FileLocator.class); tex = assetManager.loadTexture(file.getName()); @@ -71,7 +71,7 @@ private Image createImage() { // Try load by relative path File dir = new File(scene.sceneFolderName); String locatorPath = dir.getAbsolutePath(); - Texture tex = null; + GlTexture tex = null; try { assetManager.registerLocator(locatorPath, com.jme3.asset.plugins.FileLocator.class); tex = assetManager.loadTexture(relativeFilename); @@ -92,7 +92,7 @@ private Image createImage() { if(filename != null) { String locatorPath = scene.sceneFilename; filename = scene.sceneFilename + File.separatorChar + filename; // Unique path - Texture tex = null; + GlTexture tex = null; try { assetManager.registerLocator(locatorPath, ContentTextureLocator.class); tex = assetManager.loadTexture(new ContentTextureKey(filename, content)); @@ -108,7 +108,7 @@ private Image createImage() { if(relativeFilename != null) { String[] split = relativeFilename.split("[\\\\/]"); String filename = split[split.length - 1]; - Texture tex = null; + GlTexture tex = null; try { tex = assetManager.loadTexture(new ContentTextureKey(scene.currentAssetInfo.getKey().getFolder() + filename, content)); } catch(Exception e) {} @@ -117,7 +117,7 @@ private Image createImage() { } } if(image == null) - return new Image(Image.Format.RGB8, 1, 1, BufferUtils.createByteBuffer((int) (Image.Format.RGB8.getBitsPerPixel() / 8L)), ColorSpace.Linear); + return new GlImage(GlImage.Format.RGB8, 1, 1, BufferUtils.createByteBuffer((int) (GlImage.Format.RGB8.getBitsPerPixel() / 8L)), ColorSpace.Linear); return image; } } diff --git a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxTexture.java b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxTexture.java index 1ccc01141d..7525dac8ab 100644 --- a/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxTexture.java +++ b/jme3-plugins/src/fbx/java/com/jme3/scene/plugins/fbx/objects/FbxTexture.java @@ -1,8 +1,8 @@ package com.jme3.scene.plugins.fbx.objects; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.scene.plugins.fbx.SceneLoader; import com.jme3.scene.plugins.fbx.file.FbxElement; @@ -11,7 +11,7 @@ public class FbxTexture extends FbxObject { String bindType; String filename; - public Texture texture; + public GlTexture texture; public FbxTexture(SceneLoader scene, FbxElement element) { super(scene, element); diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java index 3002515633..b3d48fa49c 100644 --- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java +++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfLoader.java @@ -46,7 +46,7 @@ import com.jme3.scene.control.CameraControl; import com.jme3.scene.mesh.MorphTarget; import static com.jme3.scene.plugins.gltf.GltfUtils.*; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.util.IntMap; import com.jme3.util.mikktspace.MikktspaceTangentGenerator; @@ -761,7 +761,7 @@ public Texture2D readTexture(JsonObject texture, boolean flip) throws IOExceptio if (samplerIndex != null) { texture2d = readSampler(samplerIndex, texture2d); } else { - texture2d.setWrap(Texture.WrapMode.Repeat); + texture2d.setWrap(GlTexture.WrapMode.Repeat); } texture2d = customContentManager.readExtensionAndExtras("texture", texture, texture2d); @@ -801,7 +801,7 @@ public Texture2D readImage(int sourceIndex, boolean flip) throws IOException { // external file image String decoded = decodeUri(uri); TextureKey key = new TextureKey(info.getKey().getFolder() + decoded, flip); - Texture tex = info.getManager().loadTexture(key); + GlTexture tex = info.getManager().loadTexture(key); result = (Texture2D) tex; } return result; @@ -1016,10 +1016,10 @@ public Texture2D readSampler(int samplerIndex, Texture2D texture) throws IOExcep throw new AssetLoadException("No samplers defined"); } JsonObject sampler = samplers.get(samplerIndex).getAsJsonObject(); - Texture.MagFilter magFilter = getMagFilter(getAsInteger(sampler, "magFilter")); - Texture.MinFilter minFilter = getMinFilter(getAsInteger(sampler, "minFilter")); - Texture.WrapMode wrapS = getWrapMode(getAsInteger(sampler, "wrapS")); - Texture.WrapMode wrapT = getWrapMode(getAsInteger(sampler, "wrapT")); + GlTexture.MagFilter magFilter = getMagFilter(getAsInteger(sampler, "magFilter")); + GlTexture.MinFilter minFilter = getMinFilter(getAsInteger(sampler, "minFilter")); + GlTexture.WrapMode wrapS = getWrapMode(getAsInteger(sampler, "wrapS")); + GlTexture.WrapMode wrapT = getWrapMode(getAsInteger(sampler, "wrapT")); if (magFilter != null) { texture.setMagFilter(magFilter); @@ -1027,8 +1027,8 @@ public Texture2D readSampler(int samplerIndex, Texture2D texture) throws IOExcep if (minFilter != null) { texture.setMinFilter(minFilter); } - texture.setWrap(Texture.WrapAxis.S, wrapS); - texture.setWrap(Texture.WrapAxis.T, wrapT); + texture.setWrap(GlTexture.WrapAxis.S, wrapS); + texture.setWrap(GlTexture.WrapAxis.T, wrapT); texture = customContentManager.readExtensionAndExtras("texture.sampler", sampler, texture); diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java index 8f015f28db..50ffa165b7 100644 --- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java +++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/GltfUtils.java @@ -40,7 +40,7 @@ import com.jme3.plugins.json.Json; import com.jme3.plugins.json.JsonParser; import com.jme3.scene.*; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.util.*; import java.io.*; import java.nio.*; @@ -178,52 +178,52 @@ public static int getIndex(String name) { return Integer.parseInt(num); } - public static Texture.MagFilter getMagFilter(Integer value) { + public static GlTexture.MagFilter getMagFilter(Integer value) { if (value == null) { return null; } switch (value) { case 9728: - return Texture.MagFilter.Nearest; + return GlTexture.MagFilter.Nearest; case 9729: - return Texture.MagFilter.Bilinear; + return GlTexture.MagFilter.Bilinear; } return null; } - public static Texture.MinFilter getMinFilter(Integer value) { + public static GlTexture.MinFilter getMinFilter(Integer value) { if (value == null) { return null; } switch (value) { case 9728: - return Texture.MinFilter.NearestNoMipMaps; + return GlTexture.MinFilter.NearestNoMipMaps; case 9729: - return Texture.MinFilter.BilinearNoMipMaps; + return GlTexture.MinFilter.BilinearNoMipMaps; case 9984: - return Texture.MinFilter.NearestNearestMipMap; + return GlTexture.MinFilter.NearestNearestMipMap; case 9985: - return Texture.MinFilter.BilinearNearestMipMap; + return GlTexture.MinFilter.BilinearNearestMipMap; case 9986: - return Texture.MinFilter.NearestLinearMipMap; + return GlTexture.MinFilter.NearestLinearMipMap; case 9987: - return Texture.MinFilter.Trilinear; + return GlTexture.MinFilter.Trilinear; } return null; } - public static Texture.WrapMode getWrapMode(Integer value) { + public static GlTexture.WrapMode getWrapMode(Integer value) { if (value == null) { - return Texture.WrapMode.Repeat; + return GlTexture.WrapMode.Repeat; } switch (value) { case 33071: - return Texture.WrapMode.EdgeClamp; + return GlTexture.WrapMode.EdgeClamp; case 33648: - return Texture.WrapMode.MirroredRepeat; + return GlTexture.WrapMode.MirroredRepeat; default: - return Texture.WrapMode.Repeat; + return GlTexture.WrapMode.Repeat; } } diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/MaterialAdapter.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/MaterialAdapter.java index b6b10f9c83..e1cf01d08f 100644 --- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/MaterialAdapter.java +++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/MaterialAdapter.java @@ -37,7 +37,7 @@ import com.jme3.material.*; import com.jme3.math.*; import com.jme3.shader.VarType; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.util.HashMap; import java.util.Map; @@ -94,7 +94,7 @@ public void setParam(String gltfParamName, Object value) { return; } MatParam param; - if (value instanceof Texture) { + if (value instanceof GlTexture) { MatParam defParam = getMaterial().getMaterialDef().getMaterialParam(name); if (defParam == null) { throw new AssetLoadException("Material definition " + getMaterialDefPath() + " has not param with name" + name); @@ -102,10 +102,10 @@ public void setParam(String gltfParamName, Object value) { if (!(defParam instanceof MatParamTexture)) { throw new AssetLoadException("param with name" + name + "in material definition " + getMaterialDefPath() + " should be a texture param"); } - param = new MatParamTexture(VarType.Texture2D, name, (Texture) value, ((MatParamTexture) defParam).getColorSpace()); + param = new MatParamTexture(VarType.Texture2D, name, (GlTexture) value, ((MatParamTexture) defParam).getColorSpace()); param = adaptMatParam(param); if (param != null) { - getMaterial().setTextureParam(param.getName(), param.getVarType(), (Texture) param.getValue()); + getMaterial().setTextureParam(param.getName(), param.getVarType(), (GlTexture) param.getValue()); } } else { param = new MatParam(getVarType(value), name, value); diff --git a/jme3-plugins/src/main/java/com/jme3/material/plugin/export/material/J3MOutputCapsule.java b/jme3-plugins/src/main/java/com/jme3/material/plugin/export/material/J3MOutputCapsule.java index 950466b4ba..d701ef799c 100644 --- a/jme3-plugins/src/main/java/com/jme3/material/plugin/export/material/J3MOutputCapsule.java +++ b/jme3-plugins/src/main/java/com/jme3/material/plugin/export/material/J3MOutputCapsule.java @@ -38,8 +38,8 @@ import com.jme3.material.MatParamTexture; import com.jme3.math.*; import com.jme3.shader.VarType; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.util.IntMap; import java.io.IOException; import java.io.Writer; @@ -157,7 +157,7 @@ private String formatMatParam(MatParam param){ protected static String formatMatParamTexture(MatParamTexture param) { StringBuilder ret = new StringBuilder(); - Texture tex = (Texture) param.getValue(); + GlTexture tex = (GlTexture) param.getValue(); TextureKey key; if (tex != null) { key = (TextureKey) tex.getKey(); @@ -166,16 +166,16 @@ protected static String formatMatParamTexture(MatParamTexture param) { ret.append("Flip "); } - ret.append(formatWrapMode(tex, Texture.WrapAxis.S)); - ret.append(formatWrapMode(tex, Texture.WrapAxis.T)); - ret.append(formatWrapMode(tex, Texture.WrapAxis.R)); + ret.append(formatWrapMode(tex, GlTexture.WrapAxis.S)); + ret.append(formatWrapMode(tex, GlTexture.WrapAxis.T)); + ret.append(formatWrapMode(tex, GlTexture.WrapAxis.R)); //Min and Mag filter - if (tex.getMinFilter() != Texture.MinFilter.Trilinear) { + if (tex.getMinFilter() != GlTexture.MinFilter.Trilinear) { ret.append("Min").append(tex.getMinFilter().name()).append(" "); } - if (tex.getMagFilter() != Texture.MagFilter.Bilinear) { + if (tex.getMagFilter() != GlTexture.MagFilter.Bilinear) { ret.append("Mag").append(tex.getMagFilter().name()).append(" "); } @@ -185,7 +185,7 @@ protected static String formatMatParamTexture(MatParamTexture param) { return ret.toString(); } - protected static String formatWrapMode(Texture texVal, Texture.WrapAxis axis) { + protected static String formatWrapMode(GlTexture texVal, GlTexture.WrapAxis axis) { WrapMode mode; try { mode = texVal.getWrap(axis); diff --git a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MaterialLoader.java b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MaterialLoader.java index 5c0b33ed63..26a25bbf04 100644 --- a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MaterialLoader.java +++ b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/MaterialLoader.java @@ -39,8 +39,8 @@ import com.jme3.scene.plugins.ogre.matext.MaterialExtensionLoader; import com.jme3.scene.plugins.ogre.matext.MaterialExtensionSet; import com.jme3.scene.plugins.ogre.matext.OgreMaterialKey; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.Texture2D; import com.jme3.util.PlaceholderAssets; import com.jme3.util.blockparser.BlockLanguageParser; @@ -60,7 +60,7 @@ public class MaterialLoader implements AssetLoader { private String folderName; private AssetManager assetManager; private ColorRGBA ambient, diffuse, specular, emissive; - private Texture[] textures = new Texture[4]; + private GlTexture[] textures = new GlTexture[4]; private String texName; private String matName; private float shininess; @@ -132,11 +132,11 @@ private void readTextureImage(String content){ TextureKey texKey = new TextureKey(folderName + path, false); texKey.setGenerateMips(genMips); if (cubic) { - texKey.setTextureTypeHint(Texture.Type.CubeMap); + texKey.setTextureTypeHint(GlTexture.Type.CubeMap); } try { - Texture loadedTexture = assetManager.loadTexture(texKey); + GlTexture loadedTexture = assetManager.loadTexture(texKey); textures[texUnit].setImage(loadedTexture.getImage()); textures[texUnit].setMinFilter(loadedTexture.getMinFilter()); diff --git a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/matext/MaterialExtensionLoader.java b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/matext/MaterialExtensionLoader.java index 0b444b80d4..44be3d766f 100644 --- a/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/matext/MaterialExtensionLoader.java +++ b/jme3-plugins/src/ogre/java/com/jme3/scene/plugins/ogre/matext/MaterialExtensionLoader.java @@ -38,8 +38,8 @@ import com.jme3.material.Material; import com.jme3.material.MaterialList; import com.jme3.scene.plugins.ogre.MaterialLoader; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.Texture2D; import com.jme3.util.PlaceholderAssets; import com.jme3.util.blockparser.Statement; @@ -74,7 +74,7 @@ private void readExtendingMaterialStatement(Statement statement) throws IOExcept TextureKey texKey = new TextureKey(texturePath, false); texKey.setGenerateMips(true); - Texture tex; + GlTexture tex; try { tex = assetManager.loadTexture(texKey); diff --git a/jme3-plugins/src/test/java/com/jme3/material/plugin/TestMaterialWrite.java b/jme3-plugins/src/test/java/com/jme3/material/plugin/TestMaterialWrite.java index e5dfa75965..400b9db850 100644 --- a/jme3-plugins/src/test/java/com/jme3/material/plugin/TestMaterialWrite.java +++ b/jme3-plugins/src/test/java/com/jme3/material/plugin/TestMaterialWrite.java @@ -41,7 +41,7 @@ import com.jme3.material.plugins.J3MLoader; import com.jme3.math.ColorRGBA; import com.jme3.system.JmeSystem; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import org.junit.Before; import org.junit.Test; @@ -77,11 +77,11 @@ public void testWriteMat() throws Exception { mat.setFloat("Shininess", 2.5f); - Texture tex = assetManager.loadTexture(new TextureKey("Common/Textures/MissingTexture.png", true)); - tex.setMagFilter(Texture.MagFilter.Nearest); - tex.setMinFilter(Texture.MinFilter.BilinearNoMipMaps); - tex.setWrap(Texture.WrapAxis.S, Texture.WrapMode.Repeat); - tex.setWrap(Texture.WrapAxis.T, Texture.WrapMode.MirroredRepeat); + GlTexture tex = assetManager.loadTexture(new TextureKey("Common/Textures/MissingTexture.png", true)); + tex.setMagFilter(GlTexture.MagFilter.Nearest); + tex.setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); + tex.setWrap(GlTexture.WrapAxis.S, GlTexture.WrapMode.Repeat); + tex.setWrap(GlTexture.WrapAxis.T, GlTexture.WrapMode.MirroredRepeat); mat.setTexture("DiffuseMap", tex); mat.getAdditionalRenderState().setDepthWrite(false); diff --git a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/effects/TestIssue1773.java b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/effects/TestIssue1773.java index 05eb097ee7..4abd237422 100644 --- a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/effects/TestIssue1773.java +++ b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/effects/TestIssue1773.java @@ -60,7 +60,7 @@ import com.jme3.scene.shape.CenterQuad; import com.jme3.scene.shape.Torus; import com.jme3.shadow.DirectionalLightShadowFilter; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import org.jmonkeyengine.screenshottests.testframework.ScreenshotTestBase; import org.junit.jupiter.api.TestInfo; import org.junit.jupiter.params.ParameterizedTest; @@ -219,8 +219,8 @@ private void setupGround() { quad.scaleTextureCoordinates(new Vector2f(2, 2)); Geometry floor = new Geometry("Floor", quad); Material mat = new Material(assetManager, Materials.LIGHTING); - Texture tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); - tex.setWrap(Texture.WrapMode.Repeat); + GlTexture tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); + tex.setWrap(GlTexture.WrapMode.Repeat); mat.setTexture("DiffuseMap", tex); floor.setMaterial(mat); floor.rotate(-FastMath.HALF_PI, 0, 0); diff --git a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/terrain/TestPBRTerrain.java b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/terrain/TestPBRTerrain.java index 37f8063300..d2a71fa756 100644 --- a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/terrain/TestPBRTerrain.java +++ b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/terrain/TestPBRTerrain.java @@ -47,8 +47,8 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import org.jmonkeyengine.screenshottests.testframework.ScreenshotTestBase; import org.junit.jupiter.api.TestInfo; import org.junit.jupiter.params.ParameterizedTest; @@ -143,7 +143,7 @@ private void setUpTerrainMaterial(AssetManager assetManager) { matTerrain.setTexture("AlphaMap_1", assetManager.loadTexture("Textures/Terrain/splat/alpha2.png")); // DIRT texture - Texture dirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); dirt.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_0", dirt); matTerrain.setFloat("AlbedoMap_0_scale", dirtScale); @@ -151,7 +151,7 @@ private void setUpTerrainMaterial(AssetManager assetManager) { matTerrain.setFloat("Metallic_0", 0); // DARK ROCK texture - Texture darkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Color.png"); + GlTexture darkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Color.png"); darkRock.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_1", darkRock); matTerrain.setFloat("AlbedoMap_1_scale", darkRockScale); @@ -159,7 +159,7 @@ private void setUpTerrainMaterial(AssetManager assetManager) { matTerrain.setFloat("Metallic_1", 0.02f); // SNOW texture - Texture snow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Color.png"); + GlTexture snow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Color.png"); snow.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_2", snow); matTerrain.setFloat("AlbedoMap_2_scale", snowScale); @@ -167,7 +167,7 @@ private void setUpTerrainMaterial(AssetManager assetManager) { matTerrain.setFloat("Metallic_2", 0.12f); // TILES texture - Texture tiles = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Color.png"); + GlTexture tiles = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Color.png"); tiles.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_3", tiles); matTerrain.setFloat("AlbedoMap_3_scale", tileRoadScale); @@ -175,7 +175,7 @@ private void setUpTerrainMaterial(AssetManager assetManager) { matTerrain.setFloat("Metallic_3", 0.08f); // GRASS texture - Texture grass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); grass.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_4", grass); matTerrain.setFloat("AlbedoMap_4_scale", grassScale); @@ -183,7 +183,7 @@ private void setUpTerrainMaterial(AssetManager assetManager) { matTerrain.setFloat("Metallic_4", 0); // MARBLE texture - Texture marble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Color.png"); + GlTexture marble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Color.png"); marble.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_5", marble); matTerrain.setFloat("AlbedoMap_5_scale", marbleScale); @@ -191,7 +191,7 @@ private void setUpTerrainMaterial(AssetManager assetManager) { matTerrain.setFloat("Metallic_5", 0.8f); // Gravel texture - Texture gravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Color.png"); + GlTexture gravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Color.png"); gravel.setWrap(WrapMode.Repeat); matTerrain.setTexture("AlbedoMap_6", gravel); matTerrain.setFloat("AlbedoMap_6_scale", gravelScale); @@ -199,22 +199,22 @@ private void setUpTerrainMaterial(AssetManager assetManager) { matTerrain.setFloat("Metallic_6", 0.07f); // NORMAL MAPS - Texture normalMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_1K_Normal.png"); + GlTexture normalMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_1K_Normal.png"); normalMapDirt.setWrap(WrapMode.Repeat); - Texture normalMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Normal.png"); + GlTexture normalMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Normal.png"); normalMapDarkRock.setWrap(WrapMode.Repeat); - Texture normalMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Normal.png"); + GlTexture normalMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Normal.png"); normalMapSnow.setWrap(WrapMode.Repeat); - Texture normalMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Normal.png"); + GlTexture normalMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Normal.png"); normalMapGravel.setWrap(WrapMode.Repeat); - Texture normalMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Normal.png"); + GlTexture normalMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Normal.png"); normalMapGrass.setWrap(WrapMode.Repeat); - Texture normalMapTiles = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Normal.png"); + GlTexture normalMapTiles = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Normal.png"); normalMapTiles.setWrap(WrapMode.Repeat); matTerrain.setTexture("NormalMap_0", normalMapDirt); @@ -230,7 +230,7 @@ private void setUpTerrainMaterial(AssetManager assetManager) { private void setUpTerrain(SimpleApplication simpleApp, AssetManager assetManager) { // HEIGHTMAP image (for the terrain heightmap) TextureKey hmKey = new TextureKey("Textures/Terrain/splat/mountains512.png", false); - Texture heightMapImage = assetManager.loadTexture(hmKey); + GlTexture heightMapImage = assetManager.loadTexture(hmKey); // CREATE HEIGHTMAP AbstractHeightMap heightmap; diff --git a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/terrain/TestPBRTerrainAdvanced.java b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/terrain/TestPBRTerrainAdvanced.java index a1f5830896..0f8b1c2d35 100644 --- a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/terrain/TestPBRTerrainAdvanced.java +++ b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/terrain/TestPBRTerrainAdvanced.java @@ -48,11 +48,11 @@ import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; import com.jme3.texture.TextureArray; import org.jmonkeyengine.screenshottests.testframework.ScreenshotTestBase; import org.junit.jupiter.api.TestInfo; @@ -167,36 +167,36 @@ private void setUpTerrainMaterial(AssetManager assetManager) { // load textures for texture arrays // These MUST all have the same dimensions and format in order to be put into a texture array. //ALBEDO MAPS - Texture dirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); - Texture darkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Color.png"); - Texture snow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Color.png"); - Texture tileRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Color.png"); - Texture grass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); - Texture marble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Color.png"); - Texture gravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Color.png"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); + GlTexture darkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Color.png"); + GlTexture snow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Color.png"); + GlTexture tileRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Color.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Color.png"); + GlTexture marble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Color.png"); + GlTexture gravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Color.png"); // NORMAL MAPS - Texture normalMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_1K_Normal.png"); - Texture normalMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Normal.png"); - Texture normalMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Normal.png"); - Texture normalMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Normal.png"); - Texture normalMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Normal.png"); - Texture normalMapMarble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Normal.png"); - Texture normalMapRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Normal.png"); + GlTexture normalMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_1K_Normal.png"); + GlTexture normalMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_1K_Normal.png"); + GlTexture normalMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_1K_Normal.png"); + GlTexture normalMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel015_1K_Normal.png"); + GlTexture normalMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_1K_Normal.png"); + GlTexture normalMapMarble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_1K_Normal.png"); + GlTexture normalMapRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_1K_Normal.png"); //PACKED METALLIC/ROUGHNESS / AMBIENT OCCLUSION / EMISSIVE INTENSITY MAPS - Texture metallicRoughnessAoEiMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel_015_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapMarble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_PackedMetallicRoughnessMap.png"); - Texture metallicRoughnessAoEiMapRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapDirt = assetManager.loadTexture("Textures/Terrain/PBR/Ground036_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapDarkRock = assetManager.loadTexture("Textures/Terrain/PBR/Rock035_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapSnow = assetManager.loadTexture("Textures/Terrain/PBR/Snow006_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapGravel = assetManager.loadTexture("Textures/Terrain/PBR/Gravel_015_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapGrass = assetManager.loadTexture("Textures/Terrain/PBR/Ground037_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapMarble = assetManager.loadTexture("Textures/Terrain/PBR/Marble013_PackedMetallicRoughnessMap.png"); + GlTexture metallicRoughnessAoEiMapRoad = assetManager.loadTexture("Textures/Terrain/PBR/Tiles083_PackedMetallicRoughnessMap.png"); // put all images into lists to create texture arrays. - List albedoImages = new ArrayList<>(); - List normalMapImages = new ArrayList<>(); - List metallicRoughnessAoEiMapImages = new ArrayList<>(); + List albedoImages = new ArrayList<>(); + List normalMapImages = new ArrayList<>(); + List metallicRoughnessAoEiMapImages = new ArrayList<>(); albedoImages.add(dirt.getImage()); //0 albedoImages.add(darkRock.getImage()); //1 @@ -298,7 +298,7 @@ private void setUpTerrainMaterial(AssetManager assetManager) { terrain.setMaterial(matTerrain); } - private void setWrapAndMipMaps(Texture texture) { + private void setWrapAndMipMaps(GlTexture texture) { texture.setWrap(WrapMode.Repeat); texture.setMinFilter(MinFilter.Trilinear); texture.setMagFilter(MagFilter.Bilinear); @@ -307,7 +307,7 @@ private void setWrapAndMipMaps(Texture texture) { private void setUpTerrain(SimpleApplication simpleApp, AssetManager assetManager) { // HEIGHTMAP image (for the terrain heightmap) TextureKey hmKey = new TextureKey("Textures/Terrain/splat/mountains512.png", false); - Texture heightMapImage = assetManager.loadTexture(hmKey); + GlTexture heightMapImage = assetManager.loadTexture(hmKey); // CREATE HEIGHTMAP AbstractHeightMap heightmap; diff --git a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/water/TestPostWater.java b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/water/TestPostWater.java index 7868ecd71e..270497c549 100644 --- a/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/water/TestPostWater.java +++ b/jme3-screenshot-tests/src/test/java/org/jmonkeyengine/screenshottests/water/TestPostWater.java @@ -52,8 +52,8 @@ import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; -import com.jme3.texture.Texture.WrapMode; +import com.jme3.texture.GlTexture; +import com.jme3.texture.GlTexture.WrapMode; import com.jme3.texture.Texture2D; import com.jme3.util.SkyFactory; import com.jme3.util.SkyFactory.EnvMapType; @@ -170,24 +170,24 @@ private void createTerrain(Node rootNode, AssetManager assetManager) { matRock.setBoolean("useTriPlanarMapping", false); matRock.setBoolean("WardIso", true); matRock.setTexture("AlphaMap", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); - Texture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); - Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); + GlTexture heightMapImage = assetManager.loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg"); grass.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap", grass); matRock.setFloat("DiffuseMap_0_scale", 64); - Texture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); + GlTexture dirt = assetManager.loadTexture("Textures/Terrain/splat/dirt.jpg"); dirt.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap_1", dirt); matRock.setFloat("DiffuseMap_1_scale", 16); - Texture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); + GlTexture rock = assetManager.loadTexture("Textures/Terrain/splat/road.jpg"); rock.setWrap(WrapMode.Repeat); matRock.setTexture("DiffuseMap_2", rock); matRock.setFloat("DiffuseMap_2_scale", 128); - Texture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); + GlTexture normalMap0 = assetManager.loadTexture("Textures/Terrain/splat/grass_normal.jpg"); normalMap0.setWrap(WrapMode.Repeat); - Texture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); + GlTexture normalMap1 = assetManager.loadTexture("Textures/Terrain/splat/dirt_normal.png"); normalMap1.setWrap(WrapMode.Repeat); - Texture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); + GlTexture normalMap2 = assetManager.loadTexture("Textures/Terrain/splat/road_normal.png"); normalMap2.setWrap(WrapMode.Repeat); matRock.setTexture("NormalMap", normalMap0); matRock.setTexture("NormalMap_1", normalMap1); diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/grid/ImageTileLoader.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/grid/ImageTileLoader.java index d6692c25ca..6435e2b378 100644 --- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/grid/ImageTileLoader.java +++ b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/grid/ImageTileLoader.java @@ -40,7 +40,7 @@ import com.jme3.terrain.geomipmap.TerrainGridTileLoader; import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.*; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; @@ -112,7 +112,7 @@ private HeightMap getHeightMapAt(Vector3f location) { try { name = namer.getName(x, z); logger.log(Level.FINE, "Loading heightmap from file: {0}", name); - final Texture texture = assetManager.loadTexture(new TextureKey(name)); + final GlTexture texture = assetManager.loadTexture(new TextureKey(name)); heightmap = new ImageBasedHeightMap(texture.getImage()); /*if (assetInfo != null){ InputStream in = assetInfo.openStream(); diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/ImageBasedHeightMap.java b/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/ImageBasedHeightMap.java index 459beffb63..0958f27ced 100644 --- a/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/ImageBasedHeightMap.java +++ b/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/ImageBasedHeightMap.java @@ -32,7 +32,7 @@ package com.jme3.terrain.heightmap; import com.jme3.math.ColorRGBA; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.image.ImageRaster; /** @@ -47,11 +47,11 @@ public class ImageBasedHeightMap extends AbstractHeightMap { - protected Image colorImage; + protected GlImage colorImage; private float backwardsCompScale = 255f; - public void setImage(Image image) { + public void setImage(GlImage image) { this.colorImage = image; } @@ -66,11 +66,11 @@ public void setImage(Image image) { * @param colorImage * Image to map to the height map. */ - public ImageBasedHeightMap(Image colorImage) { + public ImageBasedHeightMap(GlImage colorImage) { this.colorImage = colorImage; } - public ImageBasedHeightMap(Image colorImage, float heightScale) { + public ImageBasedHeightMap(GlImage colorImage, float heightScale) { this.colorImage = colorImage; this.heightScale = heightScale; } diff --git a/jme3-terrain/src/test/java/com/jme3/terrain/TestTerrainExporting.java b/jme3-terrain/src/test/java/com/jme3/terrain/TestTerrainExporting.java index 7dceb63b0e..613fb77b42 100644 --- a/jme3-terrain/src/test/java/com/jme3/terrain/TestTerrainExporting.java +++ b/jme3-terrain/src/test/java/com/jme3/terrain/TestTerrainExporting.java @@ -38,7 +38,7 @@ import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import org.junit.Assert; import org.junit.Test; @@ -55,7 +55,7 @@ public class TestTerrainExporting extends BaseAWTTest { @Test public void testTerrainExporting() { - Texture heightMapImage = getAssetManager().loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture heightMapImage = getAssetManager().loadTexture("Textures/Terrain/splat/mountains512.png"); AbstractHeightMap map = new ImageBasedHeightMap(heightMapImage.getImage(), 0.25f); map.load(); diff --git a/jme3-terrain/src/test/java/com/jme3/terrain/collision/TerrainCollisionTest.java b/jme3-terrain/src/test/java/com/jme3/terrain/collision/TerrainCollisionTest.java index 32768f4060..868f0194fb 100644 --- a/jme3-terrain/src/test/java/com/jme3/terrain/collision/TerrainCollisionTest.java +++ b/jme3-terrain/src/test/java/com/jme3/terrain/collision/TerrainCollisionTest.java @@ -6,7 +6,7 @@ import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.AbstractHeightMap; import com.jme3.terrain.heightmap.ImageBasedHeightMap; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -16,7 +16,7 @@ public class TerrainCollisionTest extends BaseAWTTest { @Before public void initQuad() { - Texture heightMapImage = getAssetManager().loadTexture("Textures/Terrain/splat/mountains512.png"); + GlTexture heightMapImage = getAssetManager().loadTexture("Textures/Terrain/splat/mountains512.png"); AbstractHeightMap map = new ImageBasedHeightMap(heightMapImage.getImage(), 0.25f); map.load(); quad = new TerrainQuad("terrain", 65, 513, map.getHeightMap()); diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/AbstractVRMouseManager.java b/jme3-vr/src/main/java/com/jme3/input/vr/AbstractVRMouseManager.java index 6be4cae9fb..e798dab3d3 100644 --- a/jme3-vr/src/main/java/com/jme3/input/vr/AbstractVRMouseManager.java +++ b/jme3-vr/src/main/java/com/jme3/input/vr/AbstractVRMouseManager.java @@ -11,7 +11,7 @@ import com.jme3.math.Vector2f; import com.jme3.system.AppSettings; import com.jme3.system.lwjgl.LwjglWindow; -import com.jme3.texture.Texture; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.ui.Picture; @@ -115,7 +115,7 @@ public void setImage(String texture) { if (environment.getApplication() != null){ if( environment.isInVR() == false ){ - Texture tex = environment.getApplication().getAssetManager().loadTexture(texture); + GlTexture tex = environment.getApplication().getAssetManager().loadTexture(texture); mouseImage.setTexture(environment.getApplication().getAssetManager(), (Texture2D)tex, true); ySize = tex.getImage().getHeight(); mouseImage.setHeight(ySize); @@ -123,7 +123,7 @@ public void setImage(String texture) { mouseImage.getMaterial().getAdditionalRenderState().setBlendMode(BlendMode.Alpha); mouseImage.getMaterial().getAdditionalRenderState().setDepthWrite(false); } else { - Texture tex = environment.getApplication().getAssetManager().loadTexture(texture); + GlTexture tex = environment.getApplication().getAssetManager().loadTexture(texture); mouseImage.setTexture(environment.getApplication().getAssetManager(), (Texture2D)tex, true); ySize = tex.getImage().getHeight(); mouseImage.setHeight(ySize); diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVRViewManager.java b/jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVRViewManager.java index 2b658e53f4..022e3c3374 100644 --- a/jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVRViewManager.java +++ b/jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVRViewManager.java @@ -12,7 +12,7 @@ import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.scene.Spatial; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; +import com.jme3.texture.GlImage; import com.jme3.texture.Texture2D; import com.jme3.ui.Picture; import com.jme3.util.VRGUIPositioningMode; @@ -70,7 +70,7 @@ public LWJGLOpenVRViewManager(VREnvironment environment) { * @see #getFullTexId() */ protected int getLeftTexId() { - return getLeftTexture().getImage().getId(); + return getLeftTexture().getImage().getNativeObject(); } /** @@ -81,7 +81,7 @@ protected int getLeftTexId() { * @see #getFullTexId() */ protected int getRightTexId() { - return getRightTexture().getImage().getId(); + return getRightTexture().getImage().getNativeObject(); } /** @@ -92,7 +92,7 @@ protected int getRightTexId() { * @see #getRightTexId() */ private int getFullTexId() { - return dualEyeTex.getImage().getId(); + return dualEyeTex.getImage().getNativeObject(); } /** @@ -197,11 +197,11 @@ public void postRender() { logger.severe("Submit to left compositor error: " + " (" + Integer.toString(errl) + ")"); logger.severe(" Texture handle: " + leftTextureType.handle()); - logger.severe(" Left eye texture " + leftEyeTexture.getName() + " (" + leftEyeTexture.getImage().getId() + ")"); + logger.severe(" Left eye texture " + leftEyeTexture.getName() + " (" + leftEyeTexture.getImage().getNativeObject() + ")"); logger.severe(" Type: " + leftEyeTexture.getType()); logger.severe(" Size: " + leftEyeTexture.getImage().getWidth() + "x" + leftEyeTexture.getImage().getHeight()); logger.severe(" Image depth: " + leftEyeTexture.getImage().getDepth()); - logger.severe(" Image format: " + leftEyeTexture.getImage().getFormat()); + logger.severe(" Image format: " + leftEyeTexture.getImage().getGlFormat()); logger.severe(" Image color space: " + leftEyeTexture.getImage().getColorSpace()); } @@ -212,11 +212,11 @@ public void postRender() { // logger.severe(" Texture type: "+OpenVRUtil.getETextureTypeString(rightTextureType.eType)); logger.severe(" Texture handle: " + rightTextureType.handle()); - logger.severe(" Right eye texture " + rightEyeTexture.getName() + " (" + rightEyeTexture.getImage().getId() + ")"); + logger.severe(" Right eye texture " + rightEyeTexture.getName() + " (" + rightEyeTexture.getImage().getNativeObject() + ")"); logger.severe(" Type: " + rightEyeTexture.getType()); logger.severe(" Size: " + rightEyeTexture.getImage().getWidth() + "x" + rightEyeTexture.getImage().getHeight()); logger.severe(" Image depth: " + rightEyeTexture.getImage().getDepth()); - logger.severe(" Image format: " + rightEyeTexture.getImage().getFormat()); + logger.severe(" Image format: " + rightEyeTexture.getImage().getGlFormat()); logger.severe(" Image color space: " + rightEyeTexture.getImage().getColorSpace()); } } @@ -502,19 +502,19 @@ private void setupFinalFullTexture(Camera cam) { //offBuffer.setSrgb(true); //setup framebuffer's texture - dualEyeTex = new Texture2D(cam.getWidth(), cam.getHeight(), Image.Format.RGBA8); + dualEyeTex = new Texture2D(cam.getWidth(), cam.getHeight(), GlImage.Format.RGBA8); dualEyeTex.setMinFilter(Texture2D.MinFilter.BilinearNoMipMaps); dualEyeTex.setMagFilter(Texture2D.MagFilter.Bilinear); - logger.config("Dual eye texture " + dualEyeTex.getName() + " (" + dualEyeTex.getImage().getId() + ")"); + logger.config("Dual eye texture " + dualEyeTex.getName() + " (" + dualEyeTex.getImage().getNativeObject() + ")"); logger.config(" Type: " + dualEyeTex.getType()); logger.config(" Size: " + dualEyeTex.getImage().getWidth() + "x" + dualEyeTex.getImage().getHeight()); logger.config(" Image depth: " + dualEyeTex.getImage().getDepth()); - logger.config(" Image format: " + dualEyeTex.getImage().getFormat()); + logger.config(" Image format: " + dualEyeTex.getImage().getGlFormat()); logger.config(" Image color space: " + dualEyeTex.getImage().getColorSpace()); //setup framebuffer to use texture - out.setDepthBuffer(Image.Format.Depth); + out.setDepthBuffer(GlImage.Format.Depth); out.setColorTexture(dualEyeTex); ViewPort viewPort = environment.getApplication().getViewPort(); @@ -538,12 +538,12 @@ private ViewPort setupViewBuffers(Camera cam, String viewName) { //offBufferLeft.setSrgb(true); //setup framebuffer's texture - Texture2D offTex = new Texture2D(cam.getWidth(), cam.getHeight(), Image.Format.RGBA8); + Texture2D offTex = new Texture2D(cam.getWidth(), cam.getHeight(), GlImage.Format.RGBA8); offTex.setMinFilter(Texture2D.MinFilter.BilinearNoMipMaps); offTex.setMagFilter(Texture2D.MagFilter.Bilinear); //setup framebuffer to use texture - offBufferLeft.setDepthBuffer(Image.Format.Depth); + offBufferLeft.setDepthBuffer(GlImage.Format.Depth); offBufferLeft.setColorTexture(offTex); ViewPort viewPort = environment.getApplication().getRenderManager().createPreView(viewName, cam); diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/oculus/OculusVR.java b/jme3-vr/src/main/java/com/jme3/input/vr/oculus/OculusVR.java index 75c14c1647..ef02d44e8e 100644 --- a/jme3-vr/src/main/java/com/jme3/input/vr/oculus/OculusVR.java +++ b/jme3-vr/src/main/java/com/jme3/input/vr/oculus/OculusVR.java @@ -540,16 +540,16 @@ public void setupFramebuffers(int eye) { int textureId = textureIdB.get(); // TODO less hacky way of getting our texture into JMonkeyEngine - Image img = new Image(); + GlImage img = new GlImage(); img.setId(textureId); - img.setFormat(Image.Format.RGBA8); + img.setFormat(GlImage.Format.RGBA8); img.setWidth(textureW); img.setHeight(textureH); Texture2D tex = new Texture2D(img); FrameBuffer buffer = new FrameBuffer(textureW, textureH, 1); - buffer.setDepthBuffer(Image.Format.Depth); + buffer.setDepthBuffer(GlImage.Format.Depth); buffer.setColorTexture(tex); framebuffers[eye][i] = buffer; diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java b/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java index c6d0237321..b472ec8ea0 100644 --- a/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java +++ b/jme3-vr/src/main/java/com/jme3/input/vr/openvr/OpenVRViewManager.java @@ -23,8 +23,8 @@ import com.jme3.system.jopenvr.VRTextureBounds_t; import com.jme3.system.jopenvr.VR_IVRSystem_FnTable; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import com.jme3.ui.Picture; import com.jme3.util.VRGUIPositioningMode; @@ -70,7 +70,7 @@ public OpenVRViewManager(VREnvironment environment){ * @see #getFullTexId() */ protected int getLeftTexId() { - return getLeftTexture().getImage().getId(); + return getLeftTexture().getImage().getNativeObject(); } /** @@ -80,7 +80,7 @@ protected int getLeftTexId() { * @see #getFullTexId() */ protected int getRightTexId() { - return getRightTexture().getImage().getId(); + return getRightTexture().getImage().getNativeObject(); } /** @@ -90,7 +90,7 @@ protected int getRightTexId() { * @see #getRightTexId() */ private int getFullTexId() { - return dualEyeTex.getImage().getId(); + return dualEyeTex.getImage().getNativeObject(); } /** @@ -216,11 +216,11 @@ public void postRender() { logger.severe(" Texture type: "+OpenVRUtil.getETextureTypeString(leftTextureType.eType)); logger.severe(" Texture handle: "+leftTextureType.handle); - logger.severe(" Left eye texture "+leftEyeTexture.getName()+" ("+leftEyeTexture.getImage().getId()+")"); + logger.severe(" Left eye texture "+leftEyeTexture.getName()+" ("+leftEyeTexture.getImage().getNativeObject()+")"); logger.severe(" Type: "+leftEyeTexture.getType()); logger.severe(" Size: "+leftEyeTexture.getImage().getWidth()+"x"+leftEyeTexture.getImage().getHeight()); logger.severe(" Image depth: "+leftEyeTexture.getImage().getDepth()); - logger.severe(" Image format: "+leftEyeTexture.getImage().getFormat()); + logger.severe(" Image format: "+leftEyeTexture.getImage().getGlFormat()); logger.severe(" Image color space: "+leftEyeTexture.getImage().getColorSpace()); } @@ -230,11 +230,11 @@ public void postRender() { logger.severe(" Texture type: "+OpenVRUtil.getETextureTypeString(rightTextureType.eType)); logger.severe(" Texture handle: "+rightTextureType.handle); - logger.severe(" Right eye texture "+rightEyeTexture.getName()+" ("+rightEyeTexture.getImage().getId()+")"); + logger.severe(" Right eye texture "+rightEyeTexture.getName()+" ("+rightEyeTexture.getImage().getNativeObject()+")"); logger.severe(" Type: "+rightEyeTexture.getType()); logger.severe(" Size: "+rightEyeTexture.getImage().getWidth()+"x"+rightEyeTexture.getImage().getHeight()); logger.severe(" Image depth: "+rightEyeTexture.getImage().getDepth()); - logger.severe(" Image format: "+rightEyeTexture.getImage().getFormat()); + logger.severe(" Image format: "+rightEyeTexture.getImage().getGlFormat()); logger.severe(" Image color space: "+rightEyeTexture.getImage().getColorSpace()); } } @@ -536,7 +536,7 @@ private void setupCamerasAndViews() { } } - private ViewPort setupMirrorBuffers(Camera cam, Texture tex, boolean expand) { + private ViewPort setupMirrorBuffers(Camera cam, GlTexture tex, boolean expand) { if (environment != null){ if (environment.getApplication() != null){ Camera cloneCam = cam.clone(); @@ -575,19 +575,19 @@ private void setupFinalFullTexture(Camera cam) { //offBuffer.setSrgb(true); //setup framebuffer's texture - dualEyeTex = new Texture2D(cam.getWidth(), cam.getHeight(), Image.Format.RGBA8); - dualEyeTex.setMinFilter(Texture.MinFilter.BilinearNoMipMaps); - dualEyeTex.setMagFilter(Texture.MagFilter.Bilinear); + dualEyeTex = new Texture2D(cam.getWidth(), cam.getHeight(), GlImage.Format.RGBA8); + dualEyeTex.setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); + dualEyeTex.setMagFilter(GlTexture.MagFilter.Bilinear); - logger.config("Dual eye texture "+dualEyeTex.getName()+" ("+dualEyeTex.getImage().getId()+")"); + logger.config("Dual eye texture "+dualEyeTex.getName()+" ("+dualEyeTex.getImage().getNativeObject()+")"); logger.config(" Type: "+dualEyeTex.getType()); logger.config(" Size: "+dualEyeTex.getImage().getWidth()+"x"+dualEyeTex.getImage().getHeight()); logger.config(" Image depth: "+dualEyeTex.getImage().getDepth()); - logger.config(" Image format: "+dualEyeTex.getImage().getFormat()); + logger.config(" Image format: "+dualEyeTex.getImage().getGlFormat()); logger.config(" Image color space: "+dualEyeTex.getImage().getColorSpace()); //setup framebuffer to use texture - out.setDepthBuffer(Image.Format.Depth); + out.setDepthBuffer(GlImage.Format.Depth); out.setColorTexture(dualEyeTex); ViewPort viewPort = environment.getApplication().getViewPort(); @@ -610,12 +610,12 @@ private ViewPort setupViewBuffers(Camera cam, String viewName){ //offBufferLeft.setSrgb(true); //setup framebuffer's texture - Texture2D offTex = new Texture2D(cam.getWidth(), cam.getHeight(), Image.Format.RGBA8); - offTex.setMinFilter(Texture.MinFilter.BilinearNoMipMaps); - offTex.setMagFilter(Texture.MagFilter.Bilinear); + Texture2D offTex = new Texture2D(cam.getWidth(), cam.getHeight(), GlImage.Format.RGBA8); + offTex.setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); + offTex.setMagFilter(GlTexture.MagFilter.Bilinear); //setup framebuffer to use texture - offBufferLeft.setDepthBuffer(Image.Format.Depth); + offBufferLeft.setDepthBuffer(GlImage.Format.Depth); offBufferLeft.setColorTexture(offTex); ViewPort viewPort = environment.getApplication().getRenderManager().createPreView(viewName, cam); diff --git a/jme3-vr/src/main/java/com/jme3/post/CartoonSSAO.java b/jme3-vr/src/main/java/com/jme3/post/CartoonSSAO.java index eb1ddd5404..7f695d4ff6 100644 --- a/jme3-vr/src/main/java/com/jme3/post/CartoonSSAO.java +++ b/jme3-vr/src/main/java/com/jme3/post/CartoonSSAO.java @@ -4,11 +4,10 @@ import com.jme3.material.Material; import com.jme3.math.Vector2f; import com.jme3.math.Vector3f; -import com.jme3.post.Filter; import com.jme3.renderer.RenderManager; import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; -import com.jme3.texture.Image.Format; +import com.jme3.texture.GlImage.Format; /** * A Cartoon Screen Space Ambient Occlusion filter with instance rendering capabilities. diff --git a/jme3-vr/src/main/java/com/jme3/shadow/AbstractShadowRendererVR.java b/jme3-vr/src/main/java/com/jme3/shadow/AbstractShadowRendererVR.java index ac2df723c4..ef16d9df99 100644 --- a/jme3-vr/src/main/java/com/jme3/shadow/AbstractShadowRendererVR.java +++ b/jme3-vr/src/main/java/com/jme3/shadow/AbstractShadowRendererVR.java @@ -56,10 +56,10 @@ import com.jme3.scene.Spatial; import com.jme3.scene.debug.WireFrustum; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture.MagFilter; -import com.jme3.texture.Texture.MinFilter; -import com.jme3.texture.Texture.ShadowCompareMode; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture.MagFilter; +import com.jme3.texture.GlTexture.MinFilter; +import com.jme3.texture.GlTexture.ShadowCompareMode; import com.jme3.texture.Texture2D; import com.jme3.texture.FrameBuffer.FrameBufferTarget; import com.jme3.ui.Picture; diff --git a/jme3-vr/src/main/java/com/jme3/util/VRGuiManager.java b/jme3-vr/src/main/java/com/jme3/util/VRGuiManager.java index 61033e7ab6..7e1512d64a 100644 --- a/jme3-vr/src/main/java/com/jme3/util/VRGuiManager.java +++ b/jme3-vr/src/main/java/com/jme3/util/VRGuiManager.java @@ -17,8 +17,8 @@ import com.jme3.scene.shape.CenterQuad; import com.jme3.system.AppSettings; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture; +import com.jme3.texture.GlImage.Format; +import com.jme3.texture.GlTexture; import com.jme3.texture.Texture2D; import java.awt.GraphicsEnvironment; import java.util.Iterator; @@ -427,8 +427,8 @@ private Spatial getGuiQuad(Camera sourceCam){ //setup framebuffer's texture guiTexture = new Texture2D((int)guiCanvasSize.x, (int)guiCanvasSize.y, Format.RGBA8); - guiTexture.setMinFilter(Texture.MinFilter.BilinearNoMipMaps); - guiTexture.setMagFilter(Texture.MagFilter.Bilinear); + guiTexture.setMinFilter(GlTexture.MinFilter.BilinearNoMipMaps); + guiTexture.setMagFilter(GlTexture.MagFilter.Bilinear); //setup framebuffer to use texture offBuffer.setDepthBuffer(Format.Depth); From fe84d1e86b03429276a29b31160c406f304145f0 Mon Sep 17 00:00:00 2001 From: codex <103840984+codex128@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:59:26 -0400 Subject: [PATCH 80/80] added methods to Material interface for compatibility with old GlMaterial usage --- .../java/com/jme3/material/GlMaterial.java | 51 +- .../main/java/com/jme3/material/Material.java | 61 +- .../main/java/com/jme3/texture/GlImage.java | 34 +- .../main/java/com/jme3/texture/GlTexture.java | 709 ++++++++++++++++++ .../main/java/com/jme3/texture/ImageView.java | 38 + .../main/java/com/jme3/texture/Texture2D.java | 3 + .../java/com/jme3/vulkan/images/GpuImage.java | 22 +- .../com/jme3/vulkan/images/VulkanImage.java | 42 -- .../jme3/vulkan/images/VulkanImageView.java | 7 +- .../com/jme3/vulkan/material/NewMaterial.java | 14 +- .../material/uniforms/TextureUniform.java | 7 - .../vulkan/material/uniforms/Uniform.java | 2 - .../com/jme3/vulkan/struct/MappedStruct.java | 11 + .../com/jme3/vulkan/struct/Structure.java | 62 +- .../com/jme3/vulkan/surface/Swapchain.java | 5 +- .../jme3test/vulkan/VulkanHelperTest.java | 5 +- 16 files changed, 943 insertions(+), 130 deletions(-) create mode 100644 jme3-core/src/main/java/com/jme3/texture/GlTexture.java create mode 100644 jme3-core/src/main/java/com/jme3/vulkan/struct/MappedStruct.java diff --git a/jme3-core/src/main/java/com/jme3/material/GlMaterial.java b/jme3-core/src/main/java/com/jme3/material/GlMaterial.java index 3775d1601c..31992ac35f 100644 --- a/jme3-core/src/main/java/com/jme3/material/GlMaterial.java +++ b/jme3-core/src/main/java/com/jme3/material/GlMaterial.java @@ -56,13 +56,13 @@ import com.jme3.scene.Geometry; import com.jme3.shader.*; import com.jme3.shader.bufferobject.BufferObject; -import com.jme3.texture.GlImage; -import com.jme3.texture.GlTexture; -import com.jme3.texture.TextureImage; +import com.jme3.texture.*; import com.jme3.texture.image.ColorSpace; import com.jme3.util.ListMap; import com.jme3.util.SafeArrayList; +import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.commands.CommandBuffer; +import com.jme3.vulkan.frames.VersionedResource; import com.jme3.vulkan.pipelines.Pipeline; import org.lwjgl.opengl.GL45; @@ -104,23 +104,9 @@ public class GlMaterial implements Material, CloneableSmartAsset, Cloneable, Sav private boolean receivesShadows = false; private int sortingId = -1; - @Override - public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { - // todo: implement properly - int loc = GL45.glGetUniformLocation(pipeline.getNativeObject().intValue(), "MyUniformName"); - GL45.glUniform1f(loc, 123.4f); - } - @Override public void setParam(String uniform, String param, Object value) { - // todo: implement - throw new UnsupportedOperationException("Not implemented yet."); - } - - @Override - public T getUniform(String name) { - // todo: implement - throw new UnsupportedOperationException("Not implemented yet."); + setParam(param, value); } /** @@ -578,6 +564,7 @@ public void setParam(String name, VarType type, Object value) { * @param name the name of the parameter defined in the material definition (j3md) * @param value the value of the parameter */ + @Override public void setParam(String name, Object value) { MatParam p = getMaterialDef().getMaterialParam(name); setParam(name, p.getVarType(), value); @@ -669,15 +656,20 @@ private void checkTextureParamColorSpace(String name, GlTexture value) { * (.j3md) (e.g. Texture for Lighting.j3md) * @param value the Texture object previously loaded by the asset manager */ - public void setTexture(String name, GlTexture value) { + @Override + public void setTexture(String name, VersionedResource value) { if (value == null) { // clear it clearParam(name); return; } + if (!(value.get() instanceof GlTexture)) { + throw new IllegalArgumentException("Must be a GlTexture."); + } VarType paramType = null; - switch (value.getType()) { + GlTexture.Type type = ((GlTexture)value.get()).getType(); + switch (type) { case TwoDimensional: paramType = VarType.Texture2D; break; @@ -691,10 +683,10 @@ public void setTexture(String name, GlTexture value) { paramType = VarType.TextureCubeMap; break; default: - throw new UnsupportedOperationException("Unknown texture type: " + value.getType()); + throw new UnsupportedOperationException("Unknown texture type: " + type); } - setTextureParam(name, paramType, value); + setTextureParam(name, paramType, (GlTexture)value); } /** @@ -703,6 +695,7 @@ public void setTexture(String name, GlTexture value) { * @param name the name of the matrix defined in the material definition (j3md) * @param value the Matrix4f object */ + @Override public void setMatrix4(String name, Matrix4f value) { setParam(name, VarType.Matrix4, value); } @@ -713,6 +706,7 @@ public void setMatrix4(String name, Matrix4f value) { * @param name the name of the boolean defined in the material definition (j3md) * @param value the boolean value */ + @Override public void setBoolean(String name, boolean value) { setParam(name, VarType.Boolean, value); } @@ -723,6 +717,7 @@ public void setBoolean(String name, boolean value) { * @param name the name of the float defined in the material definition (j3md) * @param value the float value */ + @Override public void setFloat(String name, float value) { setParam(name, VarType.Float, value); } @@ -734,6 +729,7 @@ public void setFloat(String name, float value) { * @param name the name of the float defined in the material definition (j3md) * @param value the float value */ + @Override public void setFloat(String name, Float value) { setParam(name, VarType.Float, value); } @@ -744,6 +740,7 @@ public void setFloat(String name, Float value) { * @param name the name of the int defined in the material definition (j3md) * @param value the int value */ + @Override public void setInt(String name, int value) { setParam(name, VarType.Int, value); } @@ -754,6 +751,7 @@ public void setInt(String name, int value) { * @param name the name of the color defined in the material definition (j3md) * @param value the ColorRGBA value */ + @Override public void setColor(String name, ColorRGBA value) { setParam(name, VarType.Vector4, value); } @@ -778,12 +776,18 @@ public void setShaderStorageBufferObject(final String name, final BufferObject v setParam(name, VarType.ShaderStorageBufferObject, value); } + @Override + public void setUniform(String name, VersionedResource buffer) { + + } + /** * Pass a Vector2f to the material shader. * * @param name the name of the Vector2f defined in the material definition (j3md) * @param value the Vector2f value */ + @Override public void setVector2(String name, Vector2f value) { setParam(name, VarType.Vector2, value); } @@ -794,6 +798,7 @@ public void setVector2(String name, Vector2f value) { * @param name the name of the Vector3f defined in the material definition (j3md) * @param value the Vector3f value */ + @Override public void setVector3(String name, Vector3f value) { setParam(name, VarType.Vector3, value); } @@ -804,6 +809,7 @@ public void setVector3(String name, Vector3f value) { * @param name the name of the Vector4f defined in the material definition (j3md) * @param value the Vector4f value */ + @Override public void setVector4(String name, Vector4f value) { setParam(name, VarType.Vector4, value); } @@ -1106,6 +1112,7 @@ private void resetUniformsNotSetByCurrent(Shader shader) { * @param lights Presorted and filtered light list to use for rendering * @param renderManager The render manager requesting the rendering */ + @Override public void render(Geometry geometry, LightList lights, RenderManager renderManager) { if (technique == null) { selectTechnique(TechniqueDef.DEFAULT_TECHNIQUE_NAME, renderManager); diff --git a/jme3-core/src/main/java/com/jme3/material/Material.java b/jme3-core/src/main/java/com/jme3/material/Material.java index 66bafd584d..56fc484632 100644 --- a/jme3-core/src/main/java/com/jme3/material/Material.java +++ b/jme3-core/src/main/java/com/jme3/material/Material.java @@ -32,13 +32,13 @@ package com.jme3.material; import com.jme3.export.Savable; +import com.jme3.light.LightList; +import com.jme3.math.*; +import com.jme3.renderer.RenderManager; import com.jme3.scene.Geometry; import com.jme3.texture.Texture; -import com.jme3.vulkan.commands.CommandBuffer; -import com.jme3.vulkan.frames.SingleResource; -import com.jme3.vulkan.material.uniforms.TextureUniform; -import com.jme3.vulkan.material.uniforms.Uniform; -import com.jme3.vulkan.pipelines.Pipeline; +import com.jme3.vulkan.buffers.GpuBuffer; +import com.jme3.vulkan.frames.VersionedResource; /** * Material describes the rendering style for a given @@ -53,19 +53,56 @@ */ public interface Material extends Savable { - void bind(CommandBuffer cmd, Pipeline pipeline, int offset); + String DEFAULT_UNIFORM_BUFFER = "DefaultUniformBuffer"; + + void render(Geometry geometry, LightList lights, RenderManager renderManager); + + void setUniform(String name, VersionedResource buffer); + + void setTexture(String name, VersionedResource texture); void setParam(String uniform, String param, Object value); - T getUniform(String name); + /* ----- COMPATABILITY WITH OLD MATERIAL ----- */ + + default void setParam(String param, Object value) { + setParam(DEFAULT_UNIFORM_BUFFER, param, value); + } + + default void setBoolean(String param, boolean value) { + setParam(param, value); + } + + default void setInt(String param, int value) { + setParam(param, value); + } + + default void setFloat(String param, float value) { + setParam(param, value); + } + + default void setFloat(String param, Float value) { + setParam(param, value); + } + + default void setColor(String param, ColorRGBA value) { + setParam(param, value); + } + + default void setVector2(String param, Vector2f value) { + setParam(param, value); + } + + default void setVector3(String param, Vector3f value) { + setParam(param, value); + } - default void bind(CommandBuffer cmd, Pipeline pipeline) { - bind(cmd, pipeline, 0); + default void setVector4(String param, Vector4f value) { + setParam(param, value); } - default void setTexture(String name, Texture texture) { - TextureUniform u = getUniform(name); - u.setResource(new SingleResource<>(texture)); + default void setMatrix4(String param, Matrix4f value) { + setParam(param, value); } } diff --git a/jme3-core/src/main/java/com/jme3/texture/GlImage.java b/jme3-core/src/main/java/com/jme3/texture/GlImage.java index 0d81ba644b..3a1d2a11ea 100644 --- a/jme3-core/src/main/java/com/jme3/texture/GlImage.java +++ b/jme3-core/src/main/java/com/jme3/texture/GlImage.java @@ -43,7 +43,6 @@ import com.jme3.texture.image.LastTextureState; import com.jme3.util.natives.GlNative; import com.jme3.vulkan.images.GpuImage; -import com.jme3.vulkan.images.VulkanImage; import com.jme3.vulkan.util.IntEnum; import java.io.IOException; @@ -62,33 +61,11 @@ * @author Joshua Slack * @version $Id: Image.java 4131 2009-03-19 20:15:28Z blaine.dev $ */ -public class GlImage extends GlNative implements GpuImage, ImageView, Savable /*, Cloneable*/ { +public class GlImage extends GlNative implements GpuImage, Savable /*, Cloneable*/ { @Override - public GlImage getImage() { - return this; - } - - @Override - public int getBaseMipmap() { - return 0; - } - - @Override - public int getMipmapCount() { - // todo: determine if this is correct - return mipMapSizes.length; - } - - @Override - public int getBaseLayer() { - return 0; - } - - @Override - public int getLayerCount() { - // todo: determine if this is correct - return 1; + public IntEnum getType() { + return Type.TwoDemensional; } public enum Format { @@ -1114,11 +1091,6 @@ public long getId() { return object; } - @Override - public IntEnum getType() { - return VulkanImage.Type.TwoDemensional; - } - /** * getWidth returns the width of this image. * diff --git a/jme3-core/src/main/java/com/jme3/texture/GlTexture.java b/jme3-core/src/main/java/com/jme3/texture/GlTexture.java new file mode 100644 index 0000000000..f637e4fb2f --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/texture/GlTexture.java @@ -0,0 +1,709 @@ +/* + * Copyright (c) 2009-2021 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.texture; + +import com.jme3.asset.AssetKey; +import com.jme3.asset.AssetNotFoundException; +import com.jme3.asset.CloneableSmartAsset; +import com.jme3.asset.TextureKey; +import com.jme3.export.*; +import com.jme3.util.PlaceholderAssets; +import com.jme3.vulkan.images.AddressMode; +import com.jme3.vulkan.images.Filter; +import com.jme3.vulkan.images.GpuImage; +import com.jme3.vulkan.images.MipmapMode; +import com.jme3.vulkan.util.IntEnum; +import org.lwjgl.vulkan.VK10; + +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Texture defines a texture object to be used to display an + * image on a piece of geometry. The image to be displayed is defined by the + * Image class. All attributes required for texture mapping are + * contained within this class. This includes mipmapping if desired, + * magnificationFilter options, apply options and correction options. Default + * values are as follows: minificationFilter - NearestNeighborNoMipMaps, + * magnificationFilter - NearestNeighbor, wrap - EdgeClamp on S,T and R, apply - + * Modulate, environment - None. + * + * @see GlImage + * @author Mark Powell + * @author Joshua Slack + * @version $Id: Texture.java 4131 2009-03-19 20:15:28Z blaine.dev $ + */ +public abstract class GlTexture implements Texture, ImageView, CloneableSmartAsset, Savable, Cloneable { + + public enum Type { + + /** + * Two dimensional texture (default). A rectangle. + */ + TwoDimensional, + + /** + * An array of two-dimensional textures. + */ + TwoDimensionalArray, + + /** + * Three-dimensional texture. (A cube) + */ + ThreeDimensional, + + /** + * A set of 6 TwoDimensional textures arranged as faces of a cube facing + * inwards. + */ + CubeMap; + } + + public enum MinFilter { + + /** + * Nearest neighbor interpolation is the fastest and crudest filtering + * method - it simply uses the color of the texel closest to the pixel + * center for the pixel color. While fast, this results in aliasing and + * shimmering during minification. (GL equivalent: GL_NEAREST) + */ + NearestNoMipMaps(false), + + /** + * In this method the four nearest texels to the pixel center are + * sampled (at texture level 0), and their colors are combined by + * weighted averages. Though smoother, without mipmaps it suffers the + * same aliasing and shimmering problems as nearest + * NearestNeighborNoMipMaps. (GL equivalent: GL_LINEAR) + */ + BilinearNoMipMaps(false), + + /** + * Same as NearestNeighborNoMipMaps except that instead of using samples + * from texture level 0, the closest mipmap level is chosen based on + * distance. This reduces the aliasing and shimmering significantly, but + * does not help with blockiness. (GL equivalent: + * GL_NEAREST_MIPMAP_NEAREST) + */ + NearestNearestMipMap(true), + + /** + * Same as BilinearNoMipMaps except that instead of using samples from + * texture level 0, the closest mipmap level is chosen based on + * distance. By using mipmapping we avoid the aliasing and shimmering + * problems of BilinearNoMipMaps. (GL equivalent: + * GL_LINEAR_MIPMAP_NEAREST) + */ + BilinearNearestMipMap(true), + + /** + * Similar to NearestNeighborNoMipMaps except that instead of using + * samples from texture level 0, a sample is chosen from each of the + * closest (by distance) two mipmap levels. A weighted average of these + * two samples is returned. (GL equivalent: GL_NEAREST_MIPMAP_LINEAR) + */ + NearestLinearMipMap(true), + + /** + * Trilinear filtering is a remedy to a common artifact seen in + * mipmapped bilinearly filtered images: an abrupt and very noticeable + * change in quality at boundaries where the renderer switches from one + * mipmap level to the next. Trilinear filtering solves this by doing a + * texture lookup and bilinear filtering on the two closest mipmap + * levels (one higher and one lower quality), and then linearly + * interpolating the results. This results in a smooth degradation of + * texture quality as distance from the viewer increases, rather than a + * series of sudden drops. Of course, closer than Level 0 there is only + * one mipmap level available, and the algorithm reverts to bilinear + * filtering (GL equivalent: GL_LINEAR_MIPMAP_LINEAR) + */ + Trilinear(true); + + private final boolean usesMipMapLevels; + + MinFilter(boolean usesMipMapLevels) { + this.usesMipMapLevels = usesMipMapLevels; + } + + public boolean usesMipMapLevels() { + return usesMipMapLevels; + } + + public static MinFilter of(IntEnum filter, IntEnum mipmap) { + if (filter.is(Filter.Linear)) { + if (mipmap.is(MipmapMode.Linear)) return Trilinear; + else return BilinearNearestMipMap; + } else if (filter.is(Filter.Nearest)) { + if (mipmap.is(MipmapMode.Linear)) return Trilinear; + else return NearestNearestMipMap; + } else if (mipmap.is(MipmapMode.Linear)) return NearestLinearMipMap; + else return NearestNearestMipMap; + } + + } + + public enum MagFilter { + + /** + * Nearest neighbor interpolation is the fastest and crudest filtering + * mode - it simply uses the color of the texel closest to the pixel + * center for the pixel color. While fast, this results in texture + * 'blockiness' during magnification. (GL equivalent: GL_NEAREST) + */ + Nearest, + + /** + * In this mode the four nearest texels to the pixel center are sampled + * (at the closest mipmap level), and their colors are combined by + * weighted average according to distance. This removes the 'blockiness' + * seen during magnification, as there is now a smooth gradient of color + * change from one texel to the next, instead of an abrupt jump as the + * pixel center crosses the texel boundary. (GL equivalent: GL_LINEAR) + */ + Bilinear; + + public static MagFilter of(IntEnum filter) { + if (filter.is(Filter.Linear)) return Bilinear; + else return Nearest; + } + + } + + public enum WrapMode { + /** + * Only the fractional portion of the coordinate is considered. + */ + Repeat, + + /** + * Only the fractional portion of the coordinate is considered, but if + * the integer portion is odd, we'll use 1 - the fractional portion. + * (Introduced around OpenGL1.4) Falls back on Repeat if not supported. + */ + MirroredRepeat, + + /** + * coordinate will be clamped to [0,1] + * + * @deprecated Not supported by OpenGL 3 + */ + @Deprecated + Clamp, + /** + * mirrors and clamps the texture coordinate, where mirroring and + * clamping a value f computes: + * mirrorClamp(f) = min(1, max(1/(2*N), + * abs(f))) where N + * is the size of the one-, two-, or three-dimensional texture image in + * the direction of wrapping. (Introduced after OpenGL1.4) Falls back on + * Clamp if not supported. + * + * @deprecated Not supported by OpenGL 3 + */ + @Deprecated + MirrorClamp, + + /** + * coordinate will be clamped to the range [-1/(2N), 1 + 1/(2N)] where N + * is the size of the texture in the direction of clamping. Falls back + * on Clamp if not supported. + * + * @deprecated Not supported by OpenGL 3 or OpenGL ES 2 + */ + @Deprecated + BorderClamp, + /** + * Wrap mode MIRROR_CLAMP_TO_BORDER_EXT mirrors and clamps to border the + * texture coordinate, where mirroring and clamping to border a value f + * computes: + * mirrorClampToBorder(f) = min(1+1/(2*N), max(1/(2*N), abs(f))) + * where N is the size of the one-, two-, or three-dimensional texture + * image in the direction of wrapping. (Introduced after OpenGL1.4) + * Falls back on BorderClamp if not supported. + * + * @deprecated Not supported by OpenGL 3 + */ + @Deprecated + MirrorBorderClamp, + /** + * coordinate will be clamped to the range [1/(2N), 1 - 1/(2N)] where N + * is the size of the texture in the direction of clamping. Falls back + * on Clamp if not supported. + */ + EdgeClamp, + + /** + * mirrors and clamps to edge the texture coordinate, where mirroring + * and clamping to edge a value f computes: + * mirrorClampToEdge(f) = min(1-1/(2*N), max(1/(2*N), abs(f))) + * where N is the size of the one-, two-, or three-dimensional texture + * image in the direction of wrapping. (Introduced after OpenGL1.4) + * Falls back on EdgeClamp if not supported. + * + * @deprecated Not supported by OpenGL 3 + */ + @Deprecated + MirrorEdgeClamp; + + public static WrapMode of(IntEnum address) { + if (address.is(AddressMode.Repeat)) return Repeat; + else if (address.is(AddressMode.MirroredRepeat)) return MirroredRepeat; + else if (address.is(AddressMode.ClampToBorder)) return BorderClamp; + else return EdgeClamp; + } + + } + + public enum WrapAxis { + /** + * S wrapping (u or "horizontal" wrap) + */ + S, + /** + * T wrapping (v or "vertical" wrap) + */ + T, + /** + * R wrapping (w or "depth" wrap) + */ + R; + } + + /** + * If this texture is a depth texture (the format is Depth*) then + * this value may be used to compare the texture depth to the R texture + * coordinate. + */ + public enum ShadowCompareMode { + /** + * Shadow comparison mode is disabled. + * Texturing is done normally. + */ + Off, + + /** + * {@code + * Compares the 3rd texture coordinate R to the value + * in this depth texture. If R <= texture value then result is 1.0, + * otherwise, result is 0.0. If filtering is set to bilinear or trilinear + * the implementation may sample the texture multiple times to provide + * smoother results in the range [0, 1].} + */ + LessOrEqual, + + /** + * {@code + * Compares the 3rd texture coordinate R to the value + * in this depth texture. If R >= texture value then result is 1.0, + * otherwise, result is 0.0. If filtering is set to bilinear or trilinear + * the implementation may sample the texture multiple times to provide + * smoother results in the range [0, 1].} + */ + GreaterOrEqual + } + + /** + * The name of the texture (if loaded as a resource). + */ + private String name = null; + + /** + * The image stored in the texture + */ + private GlImage image = null; + + /** + * The texture key allows to reload a texture from a file + * if needed. + */ + private TextureKey key = null; + + private MinFilter minificationFilter = MinFilter.BilinearNoMipMaps; + private MagFilter magnificationFilter = MagFilter.Bilinear; + private ShadowCompareMode shadowCompareMode = ShadowCompareMode.Off; + private int anisotropicFilter; + + /** + * @return A cloned Texture object. + */ + @Override + public GlTexture clone(){ + try { + return (GlTexture) super.clone(); + } catch (CloneNotSupportedException ex) { + throw new AssertionError(); + } + } + + @Override + public long getId() { + return VK10.VK_NULL_HANDLE; + } + + /** + * Constructor instantiates a new Texture object with default + * attributes. + */ + public GlTexture() { + } + + /** + * @return the MinificationFilterMode of this texture. + */ + public MinFilter getMinFilter() { + return minificationFilter; + } + + /** + * @param minificationFilter + * the new MinificationFilterMode for this texture. + * @throws IllegalArgumentException + * if minificationFilter is null + */ + public void setMinFilter(MinFilter minificationFilter) { + if (minificationFilter == null) { + throw new IllegalArgumentException( + "minificationFilter can not be null."); + } + this.minificationFilter = minificationFilter; + if (minificationFilter.usesMipMapLevels() && image != null && !image.isGeneratedMipmapsRequired() && !image.hasMipmaps()) { + image.setNeedGeneratedMipmaps(); + } + } + + /** + * @return the MagnificationFilterMode of this texture. + */ + public MagFilter getMagFilter() { + return magnificationFilter; + } + + /** + * @param magnificationFilter + * the new MagnificationFilter for this texture. + * @throws IllegalArgumentException + * if magnificationFilter is null + */ + public void setMagFilter(MagFilter magnificationFilter) { + if (magnificationFilter == null) { + throw new IllegalArgumentException( + "magnificationFilter can not be null."); + } + this.magnificationFilter = magnificationFilter; + } + + /** + * @return The ShadowCompareMode of this texture. + * @see ShadowCompareMode + */ + public ShadowCompareMode getShadowCompareMode(){ + return shadowCompareMode; + } + + /** + * @param compareMode + * the new ShadowCompareMode for this texture. + * @throws IllegalArgumentException + * if compareMode is null + * @see ShadowCompareMode + */ + public void setShadowCompareMode(ShadowCompareMode compareMode){ + if (compareMode == null){ + throw new IllegalArgumentException( + "compareMode can not be null."); + } + this.shadowCompareMode = compareMode; + } + + /** + * setImage sets the image object that defines the texture. + * + * @param image + * the image that defines the texture. + */ + public void setImage(GlImage image) { + this.image = image; + + // Test if mipmap generation required. + setMinFilter(getMinFilter()); + } + + /** + * @param key The texture key that was used to load this texture + */ + @Override + public void setKey(AssetKey key){ + this.key = (TextureKey) key; + } + + @Override + public AssetKey getKey(){ + return this.key; + } + + @Override + public GlTexture getView() { + return this; + } + + @Override + public GlImage getImage() { + return image; + } + + /** + * setWrap sets the wrap mode of this texture for a + * particular axis. + * + * @param axis + * the texture axis to apply the wrap mode to. + * @param mode + * the wrap mode for the given axis of the texture. + * @throws IllegalArgumentException + * if axis or mode are null or invalid for this type of texture + */ + public abstract void setWrap(WrapAxis axis, WrapMode mode); + + /** + * setWrap sets the wrap mode of this texture for all axis. + * + * @param mode + * the wrap mode for the given axis of the texture. + * @throws IllegalArgumentException + * if mode is null or invalid for this type of texture + */ + public abstract void setWrap(WrapMode mode); + + /** + * getWrap returns the wrap mode for a given coordinate axis + * on this texture. + * + * @param axis + * the axis to return for + * @return the wrap mode of the texture. + * @throws IllegalArgumentException + * if axis is null or invalid for this type of texture + */ + public abstract WrapMode getWrap(WrapAxis axis); + + public abstract Type getType(); + + @Override + public IntEnum getViewType() { + return ImageView.Type.of(getType()); + } + + @Override + public int getBaseMipmap() { + return 0; + } + + @Override + public int getMipmapCount() { + return 0; + } + + @Override + public int getBaseLayer() { + return 0; + } + + @Override + public int getLayerCount() { + return 0; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + /** + * @return the anisotropic filtering level for this texture. Default value + * is 0 (use value from config), + * 1 means 1x (no anisotropy), 2 means x2, 4 is x4, etc. + */ + public int getAnisotropicFilter() { + return anisotropicFilter; + } + + /** + * @param level + * the anisotropic filtering level for this texture. + */ + public void setAnisotropicFilter(int level) { + anisotropicFilter = Math.max(0, level); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append("[name=").append(name); + if (image != null) { + sb.append(", image=").append(image.toString()); + } + + sb.append("]"); + return sb.toString(); + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final GlTexture other = (GlTexture) obj; + + // NOTE: Since images are generally considered unique assets in jME3, + // using the image's equals() implementation is not necessary here + // (would be too slow) + if (this.image != other.image) { + return false; + } + if (this.minificationFilter != other.minificationFilter) { + return false; + } + if (this.magnificationFilter != other.magnificationFilter) { + return false; + } + if (this.shadowCompareMode != other.shadowCompareMode) { + return false; + } + if (this.anisotropicFilter != other.anisotropicFilter) { + return false; + } + return true; + } + + @Override + public int hashCode() { + int hash = 5; + // NOTE: Since images are generally considered unique assets in jME3, + // using the image's hashCode() implementation is not necessary here + // (would be too slow) + hash = 67 * hash + (this.image != null ? System.identityHashCode(this.image) : 0); + hash = 67 * hash + (this.minificationFilter != null ? this.minificationFilter.hashCode() : 0); + hash = 67 * hash + (this.magnificationFilter != null ? this.magnificationFilter.hashCode() : 0); + hash = 67 * hash + (this.shadowCompareMode != null ? this.shadowCompareMode.hashCode() : 0); + hash = 67 * hash + this.anisotropicFilter; + return hash; + } + + /** Retrieve a basic clone of this Texture (ie, clone everything but the + * image data, which is shared) + * + * @param rVal storage for the clone (not null, modified) + * @return Texture + * + * @deprecated Use {@link GlTexture#clone()} instead. + */ + @Deprecated + public GlTexture createSimpleClone(GlTexture rVal) { + rVal.setMinFilter(minificationFilter); + rVal.setMagFilter(magnificationFilter); + rVal.setShadowCompareMode(shadowCompareMode); + rVal.setAnisotropicFilter(anisotropicFilter); + rVal.setImage(image); // NOT CLONED. + rVal.setKey(key); + rVal.setName(name); + return rVal; + } + + /** + * @return a new Texture + * @deprecated Use {@link GlTexture#clone()} instead. + */ + @Deprecated + public abstract GlTexture createSimpleClone(); + + @Override + public void write(JmeExporter e) throws IOException { + OutputCapsule capsule = e.getCapsule(this); + capsule.write(name, "name", null); + + if (key == null){ + // no texture key is set, try to save image instead then + capsule.write(image, "image", null); + }else{ + capsule.write(key, "key", null); + } + + capsule.write(anisotropicFilter, "anisotropicFilter", 1); + capsule.write(minificationFilter, "minificationFilter", + MinFilter.BilinearNoMipMaps); + capsule.write(magnificationFilter, "magnificationFilter", + MagFilter.Bilinear); + } + + @Override + public void read(JmeImporter importer) throws IOException { + InputCapsule capsule = importer.getCapsule(this); + name = capsule.readString("name", null); + key = (TextureKey) capsule.readSavable("key", null); + + // load texture from key, if available + if (key != null) { + // key is available, so try the texture from there. + try { + GlTexture loadedTex = importer.getAssetManager().loadTexture(key); + image = loadedTex.getImage(); + } catch (AssetNotFoundException ex){ + Logger.getLogger(GlTexture.class.getName()).log(Level.SEVERE, "Cannot locate texture {0}", key); + image = PlaceholderAssets.getPlaceholderImage(importer.getAssetManager()); + } + }else{ + // no key is set on the texture. Attempt to load an embedded image + image = (GlImage) capsule.readSavable("image", null); + if (image == null){ + // TODO: what to print out here? the texture has no key or data, there's no useful information .. + // assume texture.name is set even though the key is null + Logger.getLogger(GlTexture.class.getName()) + .log(Level.SEVERE, "Cannot load embedded image {0}", toString()); + } + } + + setAnisotropicFilter(capsule.readInt("anisotropicFilter", 1)); + setMinFilter(capsule.readEnum("minificationFilter", + MinFilter.class, + MinFilter.BilinearNoMipMaps)); + setMagFilter(capsule.readEnum("magnificationFilter", + MagFilter.class, MagFilter.Bilinear)); + } +} diff --git a/jme3-core/src/main/java/com/jme3/texture/ImageView.java b/jme3-core/src/main/java/com/jme3/texture/ImageView.java index ae0babfa48..311db00d82 100644 --- a/jme3-core/src/main/java/com/jme3/texture/ImageView.java +++ b/jme3-core/src/main/java/com/jme3/texture/ImageView.java @@ -1,13 +1,51 @@ package com.jme3.texture; import com.jme3.vulkan.images.GpuImage; +import com.jme3.vulkan.util.IntEnum; + +import static org.lwjgl.vulkan.VK10.*; public interface ImageView { + enum Type implements IntEnum { + + OneDemensional(VK_IMAGE_VIEW_TYPE_1D), + TwoDemensional(VK_IMAGE_VIEW_TYPE_2D), + ThreeDemensional(VK_IMAGE_VIEW_TYPE_3D), + OneDemensionalArray(VK_IMAGE_VIEW_TYPE_1D_ARRAY), + TwoDemensionalArray(VK_IMAGE_VIEW_TYPE_2D_ARRAY), + Cube(VK_IMAGE_VIEW_TYPE_CUBE), + CubeArray(VK_IMAGE_VIEW_TYPE_CUBE_ARRAY); + + private final int vkEnum; + + Type(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + + public static Type of(GlTexture.Type type) { + switch (type) { + case TwoDimensional: return TwoDemensional; + case TwoDimensionalArray: return TwoDemensionalArray; + case ThreeDimensional: return ThreeDemensional; + case CubeMap: return Cube; + default: throw new UnsupportedOperationException("No conversion implemented for " + type); + } + } + + } + long getId(); T getImage(); + IntEnum getViewType(); + int getBaseMipmap(); int getMipmapCount(); diff --git a/jme3-core/src/main/java/com/jme3/texture/Texture2D.java b/jme3-core/src/main/java/com/jme3/texture/Texture2D.java index d221c075f1..8094e3cb1f 100644 --- a/jme3-core/src/main/java/com/jme3/texture/Texture2D.java +++ b/jme3-core/src/main/java/com/jme3/texture/Texture2D.java @@ -36,6 +36,9 @@ import com.jme3.export.JmeImporter; import com.jme3.export.OutputCapsule; import com.jme3.texture.image.ColorSpace; +import com.jme3.vulkan.images.GpuImage; +import com.jme3.vulkan.util.IntEnum; + import java.io.IOException; /** diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java index 3001103d00..ee9ede4dd8 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/GpuImage.java @@ -1,11 +1,31 @@ package com.jme3.vulkan.images; +import com.jme3.texture.GlTexture; import com.jme3.vulkan.Format; import com.jme3.vulkan.util.IntEnum; +import static org.lwjgl.vulkan.VK10.*; + public interface GpuImage { - interface Type extends IntEnum {} + enum Type implements IntEnum { + + OneDemensional(VK_IMAGE_TYPE_1D), + TwoDemensional(VK_IMAGE_TYPE_2D), + ThreeDemensional(VK_IMAGE_TYPE_3D); + + private final int vkEnum; + + Type(int vkEnum) { + this.vkEnum = vkEnum; + } + + @Override + public int getEnum() { + return vkEnum; + } + + } long getId(); diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImage.java b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImage.java index 9be484df19..e4f0da2ad1 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImage.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImage.java @@ -11,25 +11,6 @@ public interface VulkanImage extends GpuImage { - enum Type implements GpuImage.Type { - - OneDemensional(VK_IMAGE_TYPE_1D), - TwoDemensional(VK_IMAGE_TYPE_2D), - ThreeDemensional(VK_IMAGE_TYPE_3D); - - private final int vkEnum; - - Type(int vkEnum) { - this.vkEnum = vkEnum; - } - - @Override - public int getEnum() { - return vkEnum; - } - - } - enum Layout implements IntEnum { Undefined(VK_IMAGE_LAYOUT_UNDEFINED), @@ -132,29 +113,6 @@ public int getEnum() { } - enum View implements IntEnum { - - OneDemensional(VK_IMAGE_VIEW_TYPE_1D), - TwoDemensional(VK_IMAGE_VIEW_TYPE_2D), - ThreeDemensional(VK_IMAGE_VIEW_TYPE_3D), - OneDemensionalArray(VK_IMAGE_VIEW_TYPE_1D_ARRAY), - TwoDemensionalArray(VK_IMAGE_VIEW_TYPE_2D_ARRAY), - Cube(VK_IMAGE_VIEW_TYPE_CUBE), - CubeArray(VK_IMAGE_VIEW_TYPE_CUBE_ARRAY); - - private final int vkEnum; - - View(int vkEnum) { - this.vkEnum = vkEnum; - } - - @Override - public int getEnum() { - return vkEnum; - } - - } - enum Aspect implements Flag { Color(VK_IMAGE_ASPECT_COLOR_BIT), diff --git a/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageView.java b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageView.java index 516707ecca..2a23e40ad6 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageView.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/images/VulkanImageView.java @@ -16,7 +16,7 @@ public class VulkanImageView extends AbstractNative implements ImageView { private final VulkanImage image; - private final IntEnum type; + private final IntEnum type; private IntEnum swizzleR = Swizzle.R; private IntEnum swizzleG = Swizzle.G; @@ -28,7 +28,7 @@ public class VulkanImageView extends AbstractNative implements ImageView type) { + public VulkanImageView(VulkanImage image, IntEnum type) { this.image = image; this.type = type; } @@ -48,7 +48,8 @@ public VulkanImage getImage() { return image; } - public IntEnum getType() { + @Override + public IntEnum getViewType() { return type; } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java b/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java index a6ea568627..d9f4fce253 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/material/NewMaterial.java @@ -2,7 +2,10 @@ import com.jme3.export.JmeExporter; import com.jme3.export.JmeImporter; +import com.jme3.light.LightList; import com.jme3.material.Material; +import com.jme3.renderer.RenderManager; +import com.jme3.scene.Geometry; import com.jme3.vulkan.buffers.GpuBuffer; import com.jme3.vulkan.commands.CommandBuffer; import com.jme3.vulkan.descriptors.*; @@ -31,7 +34,10 @@ public NewMaterial(DescriptorPool pool) { this.pool = pool; } - @Override + public void bind(CommandBuffer cmd, Pipeline pipeline) { + bind(cmd, pipeline, 0); + } + public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { LinkedList availableLayouts = new LinkedList<>(); Collections.addAll(availableLayouts, pipeline.getLayout().getDescriptorSetLayouts()); @@ -46,6 +52,12 @@ public void bind(CommandBuffer cmd, Pipeline pipeline, int offset) { } } + @Override + public void render(Geometry geometry, LightList lights, RenderManager renderManager) { + bind(cmd, pipeline); + geometry.getMesh().draw(cmd, geometry); + } + @Override public void setParam(String uniform, String param, Object value) { Uniform u = getUniform(uniform); diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java index 8e8bfdf085..c4ba2b8758 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/TextureUniform.java @@ -1,7 +1,5 @@ package com.jme3.vulkan.material.uniforms; -import com.jme3.material.GlMaterial; -import com.jme3.renderer.opengl.GLRenderer; import com.jme3.texture.Texture; import com.jme3.vulkan.descriptors.Descriptor; import com.jme3.vulkan.descriptors.SetLayoutBinding; @@ -22,11 +20,6 @@ public TextureUniform(String name, IntEnum layout, int bindi this.layout = layout; } - @Override - public void uploadToProgram(GLRenderer renderer, GlMaterial.BindUnits units) { - renderer.setTexture(units.textureUnit++, resource.get()); - } - @Override public void populateWrite(MemoryStack stack, VkWriteDescriptorSet write) { Texture tex = resource.get(); diff --git a/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java index c008989cd2..eeb6549150 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/material/uniforms/Uniform.java @@ -13,8 +13,6 @@ public interface Uniform extends DescriptorSetWriter { */ String getName(); - void uploadToProgram(GLRenderer renderer, GlMaterial.BindUnits units); - /** * Tests if the {@link SetLayoutBinding} is compatible with this uniform, * indicating that this uniform may be bound to the binding which it represents. diff --git a/jme3-core/src/main/java/com/jme3/vulkan/struct/MappedStruct.java b/jme3-core/src/main/java/com/jme3/vulkan/struct/MappedStruct.java new file mode 100644 index 0000000000..e67accae37 --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/vulkan/struct/MappedStruct.java @@ -0,0 +1,11 @@ +package com.jme3.vulkan.struct; + +import com.jme3.vulkan.buffers.GpuBuffer; + +public interface MappedStruct extends GpuBuffer { + + void set(String name, Object value); + + T get(String name); + +} diff --git a/jme3-core/src/main/java/com/jme3/vulkan/struct/Structure.java b/jme3-core/src/main/java/com/jme3/vulkan/struct/Structure.java index f0fa386b53..72facf4e0c 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/struct/Structure.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/struct/Structure.java @@ -1,14 +1,66 @@ package com.jme3.vulkan.struct; -public class Structure { +import com.jme3.vulkan.memory.MemorySize; +import org.lwjgl.PointerBuffer; +import org.lwjgl.system.Struct; - public Structure(long address) { - // todo: implement +import java.nio.ByteBuffer; + +public class Structure extends Struct implements MappedStruct { + + public Structure(long address, ByteBuffer container) { + super(address, container); + Layout layout = __struct( + __member(4), + __member(4), + __member(4) + ); + layout.offsetof(0); } + @Override public void set(String name, Object value) { - // todo: implement - throw new UnsupportedOperationException("Not yet supported."); + + } + + @Override + protected Structure create(long address, ByteBuffer container) { + return null; + } + + @Override + public int sizeof() { + return 0; + } + + @Override + public T get(String name) { + return null; + } + + @Override + public PointerBuffer map(int offset, int size) { + return null; + } + + @Override + public void unmap() { + + } + + @Override + public void freeMemory() { + + } + + @Override + public MemorySize size() { + return null; + } + + @Override + public long getId() { + return 0; } } diff --git a/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java index 5381cd1040..492ed9b05c 100644 --- a/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java +++ b/jme3-core/src/main/java/com/jme3/vulkan/surface/Swapchain.java @@ -1,5 +1,6 @@ package com.jme3.vulkan.surface; +import com.jme3.texture.ImageView; import com.jme3.util.natives.AbstractNative; import com.jme3.util.natives.Native; import com.jme3.util.natives.NativeReference; @@ -163,7 +164,7 @@ public class PresentImage implements VulkanImage { private PresentImage(LogicalDevice device, long id) { this.device = device; this.id = id; - colorView = new VulkanImageView(this, VulkanImage.View.TwoDemensional); + colorView = new VulkanImageView(this, ImageView.Type.TwoDemensional); try (VulkanImageView.Builder v = colorView.build()) { v.setLayerCount(imageLayers); } @@ -181,7 +182,7 @@ public long getId() { @Override public IntEnum getType() { - return Type.TwoDemensional; + return GpuImage.Type.TwoDemensional; } @Override diff --git a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java index 1cf82fc5ac..47c365caa7 100644 --- a/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java +++ b/jme3-examples/src/main/java/jme3test/vulkan/VulkanHelperTest.java @@ -10,6 +10,7 @@ import com.jme3.shaderc.ShadercLoader; import com.jme3.system.AppSettings; import com.jme3.system.vulkan.LwjglVulkanContext; +import com.jme3.texture.ImageView; import com.jme3.util.natives.Native; import com.jme3.vulkan.Format; import com.jme3.vulkan.VulkanInstance; @@ -226,7 +227,7 @@ public void simpleInitApp() { // material color texture VulkanImage image = assetManager.loadAsset(VulkanImageLoader.key(initPool, "Common/Textures/MissingTexture.png")); - VulkanImageView imgView = new VulkanImageView(image, VulkanImage.View.TwoDemensional); + VulkanImageView imgView = new VulkanImageView(image, ImageView.Type.TwoDemensional); try (VulkanImageView.Builder i = imgView.build()) { i.setAspect(VulkanImage.Aspect.Color); } @@ -315,7 +316,7 @@ private VulkanImageView createDepthAttachment(CommandBuffer cmd) { i.setUsage(ImageUsage.DepthStencilAttachment); i.setMemoryProps(MemoryProp.DeviceLocal); } - VulkanImageView view = new VulkanImageView(image, VulkanImage.View.TwoDemensional); + VulkanImageView view = new VulkanImageView(image, ImageView.Type.TwoDemensional); try (VulkanImageView.Builder v = view.build()) { v.allMipmaps(); v.setAspect(VulkanImage.Aspect.Depth);