From a5d4e2348e0b701ad54023efbb52db47e4dba6d6 Mon Sep 17 00:00:00 2001 From: austin Date: Thu, 29 May 2025 16:06:48 -0400 Subject: [PATCH] delete actorshadermask --- docs/src/progress/renderertodo.md | 1 + .../engine/assetmanager/AssetManager.java | 10 +-- .../assetmanager/queue/QueuedShader.java | 46 ++++++++++++ .../electrosphere/renderer/actor/Actor.java | 33 --------- .../renderer/actor/mask/ActorMeshMask.java | 16 ++-- .../renderer/actor/mask/ActorShaderMask.java | 74 ------------------- .../electrosphere/renderer/model/Model.java | 46 ------------ 7 files changed, 60 insertions(+), 166 deletions(-) create mode 100644 src/main/java/electrosphere/engine/assetmanager/queue/QueuedShader.java delete mode 100644 src/main/java/electrosphere/renderer/actor/mask/ActorShaderMask.java diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index f371dc8c..8b706ef1 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -2063,6 +2063,7 @@ Actor code cleanup Refactor animation logic into dedicated actor class Simplify draw call logic Error report on window.java +Delete ActorShaderMask diff --git a/src/main/java/electrosphere/engine/assetmanager/AssetManager.java b/src/main/java/electrosphere/engine/assetmanager/AssetManager.java index 2357706d..88d12452 100644 --- a/src/main/java/electrosphere/engine/assetmanager/AssetManager.java +++ b/src/main/java/electrosphere/engine/assetmanager/AssetManager.java @@ -6,8 +6,8 @@ import electrosphere.collision.CollisionEngine; import electrosphere.collision.collidable.Collidable; import electrosphere.engine.Globals; import electrosphere.engine.assetmanager.queue.QueuedAsset; +import electrosphere.engine.assetmanager.queue.QueuedShader; import electrosphere.logger.LoggerInterface; -import electrosphere.renderer.actor.mask.ActorShaderMask; import electrosphere.renderer.buffer.HomogenousInstancedArray; import electrosphere.renderer.buffer.HomogenousUniformBuffer; import electrosphere.renderer.loading.ModelLoader; @@ -58,7 +58,7 @@ public class AssetManager { Map shadersLoadedIntoMemory = new HashMap(); List shadersInDeleteQueue = new LinkedList(); - List shadersInQueue = new LinkedList(); + List shadersInQueue = new LinkedList(); // //Compute shader related @@ -147,7 +147,7 @@ public class AssetManager { //shaders LoggerInterface.loggerEngine.DEBUG_LOOP("AssetManager - Load visual shaders"); Globals.profiler.beginCpuSample("AssetManager.loadAssetsInQueue - Load visual shaders"); - for(ActorShaderMask currentShader : shadersInQueue){ + for(QueuedShader currentShader : shadersInQueue){ String key = getShaderKey(currentShader.getVertexShaderPath(),currentShader.getFragmentShaderPath()); shadersLoadedIntoMemory.put( key, @@ -662,7 +662,7 @@ public class AssetManager { // public void addShaderToQueue(String vertexShader, String fragmentShader){ lock.lock(); - shadersInQueue.add(new ActorShaderMask("","",vertexShader,fragmentShader)); + shadersInQueue.add(new QueuedShader(vertexShader,fragmentShader)); lock.unlock(); } @@ -688,7 +688,7 @@ public class AssetManager { lock.lock(); for(String shaderKey : shadersLoadedIntoMemory.keySet()){ String shaderPaths[] = shaderKey.split("-"); - shadersInQueue.add(new ActorShaderMask("","",shaderPaths[0],shaderPaths[1])); + shadersInQueue.add(new QueuedShader(shaderPaths[0],shaderPaths[1])); } shadersLoadedIntoMemory.clear(); lock.unlock(); diff --git a/src/main/java/electrosphere/engine/assetmanager/queue/QueuedShader.java b/src/main/java/electrosphere/engine/assetmanager/queue/QueuedShader.java new file mode 100644 index 00000000..45a21758 --- /dev/null +++ b/src/main/java/electrosphere/engine/assetmanager/queue/QueuedShader.java @@ -0,0 +1,46 @@ +package electrosphere.engine.assetmanager.queue; + +/** + * A shader queued to be created + */ +public class QueuedShader { + + /** + * The vertex shader's path + */ + private String vertexShaderPath; + + /** + * The fragment shader's path + */ + private String fragmentShaderPath; + + /** + * A queued shader + * @param vertexShaderPath The vertex shader path + * @param fragmentShaderPath The fragment shader path + */ + public QueuedShader(String vertexShaderPath, String fragmentShaderPath) { + this.vertexShaderPath = vertexShaderPath; + this.fragmentShaderPath = fragmentShaderPath; + } + + /** + * Gets the vertex shader's path + * @return The vertex shader's path + */ + public String getVertexShaderPath() { + return vertexShaderPath; + } + + /** + * Gets the fragment shader's path + * @return The fragment shader's path + */ + public String getFragmentShaderPath() { + return fragmentShaderPath; + } + + + +} diff --git a/src/main/java/electrosphere/renderer/actor/Actor.java b/src/main/java/electrosphere/renderer/actor/Actor.java index 29fcbdce..602b5b44 100644 --- a/src/main/java/electrosphere/renderer/actor/Actor.java +++ b/src/main/java/electrosphere/renderer/actor/Actor.java @@ -6,14 +6,12 @@ import electrosphere.renderer.OpenGLState; import electrosphere.renderer.RenderPipelineState; import electrosphere.renderer.actor.mask.ActorAnimationData; import electrosphere.renderer.actor.mask.ActorMeshMask; -import electrosphere.renderer.actor.mask.ActorShaderMask; import electrosphere.renderer.actor.mask.ActorTextureMask; import electrosphere.renderer.actor.mask.ActorUniformMap; import electrosphere.renderer.actor.mask.ActorUniformMap.UniformValue; import electrosphere.renderer.model.Model; import java.util.HashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -119,11 +117,6 @@ public class Actor { */ private ActorMeshMask meshMask = new ActorMeshMask(); - /** - * optional overrides for specific shaders - */ - private List shaderMasks = new LinkedList(); - /** * optional overrides for textures */ @@ -203,11 +196,6 @@ public class Actor { meshMask.processMeshMaskQueue(); model.setMeshMask(meshMask); model.setTextureMask(textureMap); - for(ActorShaderMask shaderMask : shaderMasks){ - if(shaderMask.getModelName().equals(pathToFetch)){ - model.getShaderMask().put(shaderMask.getMeshName(),shaderMask); - } - } this.animationData.calculateNodeTransforms(model); //apply uniform overrides if(this.uniformMap.getMeshes() != null && this.uniformMap.getMeshes().size() > 0){ @@ -219,7 +207,6 @@ public class Actor { } } model.draw(renderPipelineState,openGLState); - model.getShaderMask().clear(); model.setTextureMask(null); Globals.profiler.endCpuSample(); } @@ -242,7 +229,6 @@ public class Actor { this.animationData.isPlayingAnimation() && this.meshMask.getBlockedMeshes().size() == 0 && this.textureMap == null && - this.shaderMasks.size() == 0 && this.uniformMap.isEmpty() && this.animationData.getStaticMorph() == null ) @@ -264,7 +250,6 @@ public class Actor { rVal = rVal + this.animationData.isPlayingAnimation() + "\n"; rVal = rVal + (this.meshMask.getBlockedMeshes().size() == 0) + "\n"; rVal = rVal + (this.textureMap == null) + "\n"; - rVal = rVal + (this.shaderMasks.size() == 0) + "\n"; rVal = rVal + this.uniformMap.isEmpty() + "\n"; rVal = rVal + (this.animationData.getStaticMorph() == null) + "\n"; return rVal; @@ -323,24 +308,6 @@ public class Actor { return meshMask; } - /** - * Masks a shader with another shader - * @param mesh The mesh to apply the mask on - * @param vertexShader the vertex shader to apply - * @param fragmentShader the fragment shader to apply - */ - public void maskShader(String mesh, String vertexShader, String fragmentShader){ - shaderMasks.add(new ActorShaderMask(this.baseModelPath, mesh, vertexShader, fragmentShader)); - } - - /** - * Unmasks a shader - * @param mesh the mesh to unmask - */ - public void unmaskShader(String mesh){ - throw new UnsupportedOperationException("Not implemented yet"); - } - /** * Adds a texture mask to this actor * @param textureMask The texture mask diff --git a/src/main/java/electrosphere/renderer/actor/mask/ActorMeshMask.java b/src/main/java/electrosphere/renderer/actor/mask/ActorMeshMask.java index 25479ea5..3e4d78dc 100644 --- a/src/main/java/electrosphere/renderer/actor/mask/ActorMeshMask.java +++ b/src/main/java/electrosphere/renderer/actor/mask/ActorMeshMask.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.concurrent.Semaphore; +import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; import electrosphere.engine.Globals; @@ -36,7 +36,7 @@ public class ActorMeshMask { /** * lock for queueing blockers */ - private Semaphore queueLock = new Semaphore(1); + private ReentrantLock lock = new ReentrantLock(); /** * The set of queued meshes @@ -56,9 +56,9 @@ public class ActorMeshMask { * @param meshName The mesh's name */ public void queueMesh(String modelName, String meshName){ - queueLock.acquireUninterruptibly(); + lock.lock(); queuedMeshes.add(new MeshDrawQueueItem(modelName, meshName)); - queueLock.release(); + lock.unlock(); } /** @@ -67,7 +67,7 @@ public class ActorMeshMask { public void processMeshMaskQueue(){ Model model; Mesh mesh; - if(queueLock.tryAcquire()){ + if(lock.tryLock()){ if(queuedMeshes.size() > 0 || queuedBlockers.size() > 0){ //process queued meshes List toRemove = new LinkedList(); @@ -96,7 +96,7 @@ public class ActorMeshMask { queuedBlockers.remove(item); } } - queueLock.release(); + lock.unlock(); } } @@ -152,9 +152,9 @@ public class ActorMeshMask { * @param meshName The name of the mesh */ public void blockMesh(String modelName, String meshName){ - queueLock.acquireUninterruptibly(); + lock.lock(); queuedBlockers.add(new MeshDrawQueueItem(modelName, meshName)); - queueLock.release(); + lock.unlock(); } /** diff --git a/src/main/java/electrosphere/renderer/actor/mask/ActorShaderMask.java b/src/main/java/electrosphere/renderer/actor/mask/ActorShaderMask.java deleted file mode 100644 index 6db1fe21..00000000 --- a/src/main/java/electrosphere/renderer/actor/mask/ActorShaderMask.java +++ /dev/null @@ -1,74 +0,0 @@ -package electrosphere.renderer.actor.mask; - -/** - * Masks a shader on a mesh with another shader - */ -public class ActorShaderMask { - - /** - * The name of the model - */ - private String modelName; - - /** - * The name of the mesh to apply the shader to - */ - private String meshName; - - /** - * The vertex shader's path - */ - private String vertexShaderPath; - - /** - * The fragment shader's path - */ - private String fragmentShaderPath; - - /** - * Constructor - * @param modelName - * @param meshName - * @param vertexShaderPath - * @param fragmentShaderPath - */ - public ActorShaderMask(String modelName, String meshName, String vertexShaderPath, String fragmentShaderPath){ - this.modelName = modelName; - this.meshName = meshName; - this.vertexShaderPath = vertexShaderPath; - this.fragmentShaderPath = fragmentShaderPath; - } - - /** - * Gets the model name - * @return the model name - */ - public String getModelName(){ - return modelName; - } - - /** - * Gets the mesh name - * @return the mesh name - */ - public String getMeshName(){ - return meshName; - } - - /** - * Gets the vertex shader path - * @return the vertex shader path - */ - public String getVertexShaderPath(){ - return vertexShaderPath; - } - - /** - * Gets the fragment shader path - * @return the fragment shader path - */ - public String getFragmentShaderPath(){ - return fragmentShaderPath; - } - -} diff --git a/src/main/java/electrosphere/renderer/model/Model.java b/src/main/java/electrosphere/renderer/model/Model.java index 70af9d6d..cac84cb6 100644 --- a/src/main/java/electrosphere/renderer/model/Model.java +++ b/src/main/java/electrosphere/renderer/model/Model.java @@ -5,13 +5,11 @@ import electrosphere.renderer.RenderPipelineState; import electrosphere.renderer.actor.ActorBoneRotator; import electrosphere.renderer.actor.ActorStaticMorph; import electrosphere.renderer.actor.mask.ActorMeshMask; -import electrosphere.renderer.actor.mask.ActorShaderMask; import electrosphere.renderer.actor.mask.ActorTextureMask; import electrosphere.renderer.anim.AnimChannel; import electrosphere.renderer.anim.Animation; import electrosphere.renderer.loading.ModelPretransforms; import electrosphere.renderer.meshgen.MeshLoader; -import electrosphere.renderer.shader.VisualShader; import electrosphere.renderer.anim.AnimNode; import electrosphere.engine.Globals; import electrosphere.logger.LoggerInterface; @@ -105,11 +103,6 @@ public class Model { * A mask that overwrites meshes themsselves */ private ActorMeshMask meshMask; - - /** - * A mask that overwrites shaders on a given mesh - */ - private Map shaderMask = new HashMap(); /** * A mask that overwrites textures on a given mesh @@ -271,10 +264,6 @@ public class Model { while(mesh_Iterator.hasNext()){ Mesh currentMesh = mesh_Iterator.next(); if(meshMask == null || (meshMask != null && !meshMask.isBlockedMesh(currentMesh.getMeshName()))){ - //set shader - VisualShader original = currentMesh.getShader(); - VisualShader shader = getCorrectShader(shaderMask, currentMesh, currentMesh.getShader()); - currentMesh.setShader(shader); //set texture mask if(this.textureMap != null && textureMap.containsKey(currentMesh.getMeshName())){ currentMesh.setTextureMask(textureMap.get(currentMesh.getMeshName())); @@ -283,22 +272,14 @@ public class Model { currentMesh.complexDraw(renderPipelineState, openGLState); //reset texture mask currentMesh.setTextureMask(null); - //reset shader - currentMesh.setShader(original); } } if(meshMask != null){ for(Mesh toDraw : meshMask.getToDrawMeshes()){ toDraw.setBones(bones); toDraw.setParent(this); - //set shader - VisualShader original = toDraw.getShader(); - VisualShader shader = getCorrectShader(shaderMask, toDraw, toDraw.getShader()); - toDraw.setShader(shader); //draw toDraw.complexDraw(renderPipelineState, openGLState); - //reset shader - toDraw.setShader(original); } } Globals.profiler.endCpuSample(); @@ -322,25 +303,6 @@ public class Model { public int getMeshCount(){ return this.meshes.size(); } - - /** - * Determines the correct shader to use for a given mesh - * @param shaderMask The shader mask - * @param mesh The mesh - * @param oldShader The original shader on the mesh - * @return The correct shader program to use for this mesh - */ - private VisualShader getCorrectShader(Map shaderMask, Mesh mesh, VisualShader oldShader){ - VisualShader rVal = oldShader; - if(shaderMask.containsKey(mesh.getMeshName())){ - ActorShaderMask specificMask = shaderMask.get(mesh.getMeshName()); - VisualShader overwriteShader = null; - if((overwriteShader = Globals.assetManager.fetchShader(specificMask.getVertexShaderPath(), specificMask.getFragmentShaderPath())) != null){ - rVal = overwriteShader; - } - } - return rVal; - } /** @@ -662,14 +624,6 @@ public class Model { this.textureMap = textureMask; } - /** - * Gets the shader mask map - * @return The shader mask map - */ - public Map getShaderMask(){ - return shaderMask; - } - /** * Utility method to attempt overwriting the model's meshes with a new material