allocation reduction work
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2025-06-08 19:24:41 -04:00
parent 4ae4f176c5
commit 0ce647635c
8 changed files with 95 additions and 29 deletions

View File

@ -2136,6 +2136,7 @@ Fix many places where entity position being set on vector fetched from getPositi
- Fixed first person model placement update - Fixed first person model placement update
- Fixed skybox placement update - Fixed skybox placement update
Undo getPosition new alloc to lower memory footprint Undo getPosition new alloc to lower memory footprint
Work to reduce allocations

View File

@ -45,7 +45,6 @@ import electrosphere.engine.time.Timekeeper;
import electrosphere.entity.Entity; import electrosphere.entity.Entity;
import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityDataStrings;
import electrosphere.entity.EntityUtils; import electrosphere.entity.EntityUtils;
import electrosphere.entity.state.collidable.Impulse;
import electrosphere.entity.state.physicssync.ServerPhysicsSyncTree; import electrosphere.entity.state.physicssync.ServerPhysicsSyncTree;
import electrosphere.logger.LoggerInterface; import electrosphere.logger.LoggerInterface;
@ -688,7 +687,7 @@ public class CollisionEngine {
Vector3d calculatedPosition = new Vector3d(rawPos.x,rawPos.y,rawPos.z); Vector3d calculatedPosition = new Vector3d(rawPos.x,rawPos.y,rawPos.z);
Vector3d suggestedPosition = this.suggestMovementPosition(collisionWorldData, calculatedPosition); Vector3d suggestedPosition = this.suggestMovementPosition(collisionWorldData, calculatedPosition);
if(calculatedPosition.distance(suggestedPosition) > 0){ if(calculatedPosition.distance(suggestedPosition) > 0){
collidable.addImpulse(new Impulse(new Vector3d(), new Vector3d(), new Vector3d(), 0, Collidable.TYPE_WORLD_BOUND)); collidable.addImpulse(Collidable.TYPE_WORLD_BOUND);
} }
Quaterniond newRotation = null; Quaterniond newRotation = null;
if(rigidBody != null){ if(rigidBody != null){

View File

@ -148,6 +148,18 @@ public class Collidable {
} }
} }
/**
* Adds an impulse the collidable
* @param impulse The impulse
*/
public void addImpulse(String type){
if(this.impulseCount < MAX_IMPULSES){
impulses[this.impulseCount].setType(type);
impulses[this.impulseCount].setForce(0);
this.impulseCount++;
}
}
public Entity getParent() { public Entity getParent() {
return parent; return parent;
} }

View File

@ -61,14 +61,18 @@ public class ServerGravityTree implements BehaviorTree {
} }
public void start(){ public void start(){
setState(GravityTreeState.ACTIVE); if(this.state == GravityTreeState.NOT_ACTIVE){
this.setState(GravityTreeState.ACTIVE);
}
if(state == GravityTreeState.NOT_ACTIVE){ if(state == GravityTreeState.NOT_ACTIVE){
frameCurrent = 0; frameCurrent = 0;
} }
} }
public void stop(){ public void stop(){
setState(GravityTreeState.NOT_ACTIVE); if(this.state == GravityTreeState.ACTIVE){
this.setState(GravityTreeState.NOT_ACTIVE);
}
} }
/** /**

View File

@ -530,6 +530,14 @@ public class ServerConnectionHandler implements Runnable {
this.characterId = characterId; this.characterId = characterId;
} }
/**
* Gets the network parser
* @return The network parser
*/
public NetworkParser getNetworkParser(){
return this.networkParser;
}
} }

View File

@ -36,6 +36,7 @@ public class EntityProtocol implements ServerProtocolTemplate<EntityMessage> {
targetEntity = EntityLookupUtils.getEntityById(connectionHandler.getPlayerEntityId()); targetEntity = EntityLookupUtils.getEntityById(connectionHandler.getPlayerEntityId());
if(targetEntity != null){ if(targetEntity != null){
CreatureUtils.serverAttachEntityMessageToMovementTree(targetEntity,message); CreatureUtils.serverAttachEntityMessageToMovementTree(targetEntity,message);
connectionHandler.getNetworkParser().release(message);
} }
break; break;
case ATTACKUPDATE: case ATTACKUPDATE:
@ -54,6 +55,7 @@ public class EntityProtocol implements ServerProtocolTemplate<EntityMessage> {
targetEntity = EntityLookupUtils.getEntityById(connectionHandler.getPlayerEntityId()); targetEntity = EntityLookupUtils.getEntityById(connectionHandler.getPlayerEntityId());
if(targetEntity != null && ServerPlayerViewDirTree.hasTree(targetEntity)){ if(targetEntity != null && ServerPlayerViewDirTree.hasTree(targetEntity)){
ServerPlayerViewDirTree.getTree(targetEntity).setPlayerViewDir(message.getpropertyType(), message.getyaw(),message.getpitch(),message.gettime()); ServerPlayerViewDirTree.getTree(targetEntity).setPlayerViewDir(message.getpropertyType(), message.getyaw(),message.getpitch(),message.gettime());
connectionHandler.getNetworkParser().release(message);
} }
} break; } break;
case INTERACT: { case INTERACT: {

View File

@ -1,5 +1,6 @@
package electrosphere.renderer.shader; package electrosphere.renderer.shader;
import java.nio.FloatBuffer;
import java.util.Map; import java.util.Map;
import org.joml.Matrix4d; import org.joml.Matrix4d;
@ -11,6 +12,7 @@ import org.joml.Vector3f;
import org.joml.Vector3i; import org.joml.Vector3i;
import org.joml.Vector4d; import org.joml.Vector4d;
import org.joml.Vector4f; import org.joml.Vector4f;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL40; import org.lwjgl.opengl.GL40;
import electrosphere.engine.Globals; import electrosphere.engine.Globals;
@ -22,19 +24,14 @@ import electrosphere.renderer.OpenGLState;
public class ShaderUtils { public class ShaderUtils {
/** /**
* Private float array for setting uniforms * Size of the buffers
*/ */
private static final float[] float16Arr = new float[16]; private static final int BUFF_SIZE = 16;
/** /**
* Private float array for setting uniforms * Private float array for setting uniforms
*/ */
private static final float[] float4Arr = new float[4]; private static final FloatBuffer floatBuff = BufferUtils.createFloatBuffer(BUFF_SIZE);
/**
* Private float array for setting uniforms
*/
private static final float[] float3Arr = new float[3];
/** /**
* Private double array for setting uniforms * Private double array for setting uniforms
@ -72,7 +69,24 @@ public class ShaderUtils {
//matrix4f //matrix4f
if(value instanceof Matrix4f){ if(value instanceof Matrix4f){
Matrix4f currentUniform = (Matrix4f)value; Matrix4f currentUniform = (Matrix4f)value;
GL40.glUniformMatrix4fv(uniformLocation, false, currentUniform.get(float16Arr)); floatBuff.put(currentUniform.m00());
floatBuff.put(currentUniform.m01());
floatBuff.put(currentUniform.m02());
floatBuff.put(currentUniform.m03());
floatBuff.put(currentUniform.m10());
floatBuff.put(currentUniform.m11());
floatBuff.put(currentUniform.m12());
floatBuff.put(currentUniform.m13());
floatBuff.put(currentUniform.m20());
floatBuff.put(currentUniform.m21());
floatBuff.put(currentUniform.m22());
floatBuff.put(currentUniform.m23());
floatBuff.put(currentUniform.m30());
floatBuff.put(currentUniform.m31());
floatBuff.put(currentUniform.m32());
floatBuff.put(currentUniform.m33());
floatBuff.flip();
GL40.glUniformMatrix4fv(uniformLocation, false, floatBuff);
Globals.renderingEngine.checkError(); Globals.renderingEngine.checkError();
if(uniformMap.containsKey(uniformLocation)){ if(uniformMap.containsKey(uniformLocation)){
((Matrix4f)uniformMap.get(uniformLocation)).set(currentUniform); ((Matrix4f)uniformMap.get(uniformLocation)).set(currentUniform);
@ -84,7 +98,24 @@ public class ShaderUtils {
//matrix4d //matrix4d
} else if(value instanceof Matrix4d){ } else if(value instanceof Matrix4d){
Matrix4d currentUniform = (Matrix4d)value; Matrix4d currentUniform = (Matrix4d)value;
GL40.glUniformMatrix4fv(uniformLocation, false, currentUniform.get(float16Arr)); floatBuff.put((float)currentUniform.m00());
floatBuff.put((float)currentUniform.m01());
floatBuff.put((float)currentUniform.m02());
floatBuff.put((float)currentUniform.m03());
floatBuff.put((float)currentUniform.m10());
floatBuff.put((float)currentUniform.m11());
floatBuff.put((float)currentUniform.m12());
floatBuff.put((float)currentUniform.m13());
floatBuff.put((float)currentUniform.m20());
floatBuff.put((float)currentUniform.m21());
floatBuff.put((float)currentUniform.m22());
floatBuff.put((float)currentUniform.m23());
floatBuff.put((float)currentUniform.m30());
floatBuff.put((float)currentUniform.m31());
floatBuff.put((float)currentUniform.m32());
floatBuff.put((float)currentUniform.m33());
floatBuff.flip();
GL40.glUniformMatrix4fv(uniformLocation, false, floatBuff);
Globals.renderingEngine.checkError(); Globals.renderingEngine.checkError();
if(uniformMap.containsKey(uniformLocation)){ if(uniformMap.containsKey(uniformLocation)){
((Matrix4d)uniformMap.get(uniformLocation)).set(currentUniform); ((Matrix4d)uniformMap.get(uniformLocation)).set(currentUniform);
@ -96,12 +127,14 @@ public class ShaderUtils {
//vector4d //vector4d
} else if(value instanceof Vector4d){ } else if(value instanceof Vector4d){
Vector4d currentUniform = (Vector4d)value; Vector4d currentUniform = (Vector4d)value;
float4Arr[0] = (float)currentUniform.x; floatBuff.put((float)currentUniform.x);
float4Arr[1] = (float)currentUniform.y; floatBuff.put((float)currentUniform.y);
float4Arr[2] = (float)currentUniform.z; floatBuff.put((float)currentUniform.z);
float4Arr[3] = (float)currentUniform.w; floatBuff.put((float)currentUniform.w);
GL40.glUniform4fv(uniformLocation, float4Arr); floatBuff.flip();
GL40.glUniform4fv(uniformLocation, floatBuff);
Globals.renderingEngine.checkError(); Globals.renderingEngine.checkError();
floatBuff.limit(BUFF_SIZE);
if(uniformMap.containsKey(uniformLocation)){ if(uniformMap.containsKey(uniformLocation)){
((Vector4d)uniformMap.get(uniformLocation)).set(currentUniform); ((Vector4d)uniformMap.get(uniformLocation)).set(currentUniform);
} else { } else {
@ -112,12 +145,14 @@ public class ShaderUtils {
//vector4f //vector4f
} else if(value instanceof Vector4f){ } else if(value instanceof Vector4f){
Vector4f currentUniform = (Vector4f)value; Vector4f currentUniform = (Vector4f)value;
float4Arr[0] = currentUniform.x; floatBuff.put(currentUniform.x);
float4Arr[1] = currentUniform.y; floatBuff.put(currentUniform.y);
float4Arr[2] = currentUniform.z; floatBuff.put(currentUniform.z);
float4Arr[3] = currentUniform.w; floatBuff.put(currentUniform.w);
GL40.glUniform4fv(uniformLocation, float4Arr); floatBuff.flip();
GL40.glUniform4fv(uniformLocation, floatBuff);
Globals.renderingEngine.checkError(); Globals.renderingEngine.checkError();
floatBuff.limit(BUFF_SIZE);
if(uniformMap.containsKey(uniformLocation)){ if(uniformMap.containsKey(uniformLocation)){
((Vector4f)uniformMap.get(uniformLocation)).set(currentUniform); ((Vector4f)uniformMap.get(uniformLocation)).set(currentUniform);
} else { } else {
@ -128,11 +163,13 @@ public class ShaderUtils {
//vector3d //vector3d
} else if(value instanceof Vector3f){ } else if(value instanceof Vector3f){
Vector3f currentUniform = (Vector3f)value; Vector3f currentUniform = (Vector3f)value;
float3Arr[0] = currentUniform.x; floatBuff.put(currentUniform.x);
float3Arr[1] = currentUniform.y; floatBuff.put(currentUniform.y);
float3Arr[2] = currentUniform.z; floatBuff.put(currentUniform.z);
GL40.glUniform3fv(uniformLocation, float3Arr); floatBuff.flip();
GL40.glUniform3fv(uniformLocation, floatBuff);
Globals.renderingEngine.checkError(); Globals.renderingEngine.checkError();
floatBuff.limit(BUFF_SIZE);
if(uniformMap.containsKey(uniformLocation)){ if(uniformMap.containsKey(uniformLocation)){
((Vector3f)uniformMap.get(uniformLocation)).set(currentUniform); ((Vector3f)uniformMap.get(uniformLocation)).set(currentUniform);
} else { } else {

View File

@ -17,6 +17,7 @@ import org.lwjgl.opengl.GL45;
import electrosphere.engine.Globals; import electrosphere.engine.Globals;
import electrosphere.logger.LoggerInterface; import electrosphere.logger.LoggerInterface;
import electrosphere.logger.Logger.LogLevel;
import electrosphere.renderer.OpenGLState; import electrosphere.renderer.OpenGLState;
import electrosphere.renderer.RenderingEngine; import electrosphere.renderer.RenderingEngine;
import electrosphere.util.FileUtils; import electrosphere.util.FileUtils;
@ -351,7 +352,9 @@ public class VisualShader implements Shader {
// //
//set the uniform //set the uniform
if(uniformLocation == INVALID_UNIFORM_NAME){ if(uniformLocation == INVALID_UNIFORM_NAME){
LoggerInterface.loggerRenderer.DEBUG_LOOP("Searched for uniform in a shader that does not contain it. Uniform name: \"" + uniformName + "\""); if(LoggerInterface.loggerRenderer.getLevel() == LogLevel.LOOP_DEBUG){
LoggerInterface.loggerRenderer.DEBUG_LOOP("Searched for uniform in a shader that does not contain it. Uniform name: \"" + uniformName + "\"");
}
} else { } else {
ShaderUtils.setUniform(openGLState, this.uniformValueMap, uniformLocation, value); ShaderUtils.setUniform(openGLState, this.uniformValueMap, uniformLocation, value);
} }