leverage standard uniforms buffer
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2025-05-25 00:34:46 -04:00
parent 1999319433
commit f02d9979e3
17 changed files with 62 additions and 80 deletions

View File

@ -2,6 +2,7 @@
#extension GL_ARB_shading_language_include : require #extension GL_ARB_shading_language_include : require
#include "./lib/lights.fs" #include "./lib/lights.fs"
#include "./lib/material.fs" #include "./lib/material.fs"
#include "./lib/standarduniform.fs"
//Shaders/FragmentShader.fs //Shaders/FragmentShader.fs

View File

@ -1,5 +1,7 @@
//Vertex Shader //Vertex Shader
#version 450 core #version 450 core
#extension GL_ARB_shading_language_include : require
#include "./lib/standarduniform.fs"
@ -12,11 +14,7 @@ layout (location = 4) in vec2 aTex;
//coordinate space transformation matrices //coordinate space transformation matrices
uniform mat4 transform;
uniform mat4 model; uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform mat4 lightSpaceMatrix;
//bone related variables //bone related variables
const int MAX_WEIGHTS = 4; const int MAX_WEIGHTS = 4;
@ -58,14 +56,14 @@ void main() {
//push frag, normal, and texture positions to fragment shader //push frag, normal, and texture positions to fragment shader
FragPos = vec3(model * FinalVertex); FragPos = vec3(model * FinalVertex);
ViewFragPos = vec3(view * model * FinalVertex); ViewFragPos = vec3(standardUniforms.view * model * FinalVertex);
Normal = mat3(transpose(inverse(model))) * FinalNormal.xyz; Normal = mat3(transpose(inverse(model))) * FinalNormal.xyz;
TexCoord = aTex; TexCoord = aTex;
//shadow map stuff //shadow map stuff
FragPosLightSpace = lightSpaceMatrix * vec4(FragPos, 1.0); FragPosLightSpace = standardUniforms.lightSpaceMatrix * vec4(FragPos, 1.0);
//set final position with opengl space //set final position with opengl space
gl_Position = projection * view * model * FinalVertex; gl_Position = standardUniforms.projection * standardUniforms.view * model * FinalVertex;
} }

View File

@ -1,9 +1,12 @@
#version 330 core #version 450 core
#extension GL_ARB_shading_language_include : require
#include "../../lib/standarduniform.fs"
layout (location = 0) in vec3 aPos; layout (location = 0) in vec3 aPos;
layout (location = 2) in vec4 aWeights; layout (location = 2) in vec4 aWeights;
layout (location = 3) in vec4 aIndex; layout (location = 3) in vec4 aIndex;
uniform mat4 lightSpaceMatrix;
uniform mat4 model; uniform mat4 model;
//bone related variables //bone related variables
@ -23,5 +26,5 @@ void main(){
FinalVertex = vec4(aPos, 1.0); FinalVertex = vec4(aPos, 1.0);
gl_Position = lightSpaceMatrix * model * FinalVertex; gl_Position = standardUniforms.lightSpaceMatrix * model * FinalVertex;
} }

View File

@ -2,6 +2,7 @@
#extension GL_ARB_shading_language_include : require #extension GL_ARB_shading_language_include : require
#include "../../../lib/lights.fs" #include "../../../lib/lights.fs"
#include "../../../lib/material.fs" #include "../../../lib/material.fs"
#include "../../../lib/standarduniform.fs"
layout (location = 0) out vec4 accum; layout (location = 0) out vec4 accum;

View File

@ -1,5 +1,7 @@
//Vertex Shader //Vertex Shader
#version 400 core #version 450 core
#extension GL_ARB_shading_language_include : require
#include "../../../lib/standarduniform.fs"
@ -12,11 +14,7 @@ layout (location = 4) in vec2 aTex;
//coordinate space transformation matrices //coordinate space transformation matrices
uniform mat4 transform;
uniform mat4 model; uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform mat4 lightSpaceMatrix;
//bone related variables //bone related variables
const int MAX_WEIGHTS = 4; const int MAX_WEIGHTS = 4;
@ -58,14 +56,14 @@ void main() {
//push frag, normal, and texture positions to fragment shader //push frag, normal, and texture positions to fragment shader
FragPos = vec3(model * FinalVertex); FragPos = vec3(model * FinalVertex);
ViewFragPos = vec3(view * model * FinalVertex); ViewFragPos = vec3(standardUniforms.view * model * FinalVertex);
Normal = mat3(transpose(inverse(model))) * FinalNormal.xyz; Normal = mat3(transpose(inverse(model))) * FinalNormal.xyz;
TexCoord = aTex; TexCoord = aTex;
//shadow map stuff //shadow map stuff
FragPosLightSpace = lightSpaceMatrix * vec4(FragPos, 1.0); FragPosLightSpace = standardUniforms.lightSpaceMatrix * vec4(FragPos, 1.0);
//set final position with opengl space //set final position with opengl space
gl_Position = projection * view * model * FinalVertex; gl_Position = standardUniforms.projection * standardUniforms.view * model * FinalVertex;
} }

View File

@ -1,5 +1,7 @@
//Vertex Shader //Vertex Shader
#version 330 core #version 450 core
#extension GL_ARB_shading_language_include : require
#include "../../lib/standarduniform.fs"
//defines //defines
#define TEXTURE_MAP_SCALE 1.0 #define TEXTURE_MAP_SCALE 1.0
@ -14,11 +16,7 @@ layout (location = 5) in int samplerIndices;
//coordinate space transformation matrices //coordinate space transformation matrices
uniform mat4 transform;
uniform mat4 model; uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform mat4 lightSpaceMatrix;
@ -41,7 +39,7 @@ void main() {
//push frag, normal, and texture positions to fragment shader //push frag, normal, and texture positions to fragment shader
FragPos = vec3(model * FinalVertex); FragPos = vec3(model * FinalVertex);
ViewFragPos = vec3(view * model * FinalVertex); ViewFragPos = vec3(standardUniforms.view * model * FinalVertex);
Normal = mat3(transpose(inverse(model))) * aNormal; Normal = mat3(transpose(inverse(model))) * aNormal;
uv = aTex; uv = aTex;
@ -50,9 +48,9 @@ void main() {
//shadow map stuff //shadow map stuff
FragPosLightSpace = lightSpaceMatrix * vec4(FragPos, 1.0); FragPosLightSpace = standardUniforms.lightSpaceMatrix * vec4(FragPos, 1.0);
//set final position with opengl space //set final position with opengl space
gl_Position = projection * view * model * FinalVertex; gl_Position = standardUniforms.projection * standardUniforms.view * model * FinalVertex;
} }

View File

@ -2,6 +2,7 @@
#extension GL_ARB_shading_language_include : require #extension GL_ARB_shading_language_include : require
#include "../../lib/lights.fs" #include "../../lib/lights.fs"
#include "../../lib/material.fs" #include "../../lib/material.fs"
#include "../../lib/standarduniform.fs"
//foliage.fs //foliage.fs
@ -22,22 +23,13 @@ in vec3 normalRot2;
uniform dvec3 viewPos; uniform dvec3 viewPos;
// uniform DirLight dirLight;
// uniform PointLight pointLights[NR_POINT_LIGHTS];
// uniform SpotLight spotLight;
uniform Material material; uniform Material material;
//texture stuff //texture stuff
// uniform sampler2D ourTexture;
uniform int hasTransparency;
// uniform sampler2D specularTexture;
uniform vec3 baseColor; uniform vec3 baseColor;
uniform vec3 tipColor; uniform vec3 tipColor;
uniform mat4 view;
/** /**
The output The output
*/ */

View File

@ -1,7 +1,8 @@
//Vertex Shader //Vertex Shader
#version 430 core #version 450 core
#extension GL_ARB_shading_language_include : require #extension GL_ARB_shading_language_include : require
#include "../../lib/material.fs" #include "../../lib/material.fs"
#include "../../lib/standarduniform.fs"
@ -27,14 +28,8 @@ uniform Material material;
uniform sampler2D dataMap; uniform sampler2D dataMap;
//coordinate space transformation matrices //coordinate space transformation matrices
uniform mat4 transform;
uniform mat4 model; uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform mat4 lightSpaceMatrix;
uniform dvec3 viewPos;
uniform vec3 modelWorldPos; uniform vec3 modelWorldPos;
uniform float time;
/** /**
@ -96,7 +91,7 @@ void main() {
zOffset + modelWorldPos.z, zOffset + modelWorldPos.z,
1.0 1.0
); );
float curveFloatNoiseSample = clamp(map(openSimplex2_ImproveXY(vec3(worldPos.x,worldPos.z,time)).x,-1.0,1.0,0,1),0,1); float curveFloatNoiseSample = clamp(map(openSimplex2_ImproveXY(vec3(worldPos.x,worldPos.z,standardUniforms.time)).x,-1.0,1.0,0,1),0,1);
// //
//calculate rotations //calculate rotations
@ -106,16 +101,16 @@ void main() {
float windDirectionSpeedMagnitude = 0.05; float windDirectionSpeedMagnitude = 0.05;
vec3 windDirectionMovementOverTime = vec3( vec3 windDirectionMovementOverTime = vec3(
windDirectionSpeedMagnitude * time, windDirectionSpeedMagnitude * standardUniforms.time,
windDirectionSpeedMagnitude * time, windDirectionSpeedMagnitude * standardUniforms.time,
0 0
); );
float windStrengthMagnitude = 0.2; float windStrengthMagnitude = 0.2;
vec3 windStrengthOverTime = vec3( vec3 windStrengthOverTime = vec3(
windStrengthMagnitude * time, windStrengthMagnitude * standardUniforms.time,
windStrengthMagnitude * time, windStrengthMagnitude * standardUniforms.time,
0 0
); );
@ -160,7 +155,7 @@ void main() {
//shift in viewspace to make it feel slightly fuller //shift in viewspace to make it feel slightly fuller
// //
//dot view and normal //dot view and normal
vec3 viewDir = normalize(vec3(viewPos) - FinalVertex.xyz); vec3 viewDir = normalize(vec3(standardUniforms.viewPos) - FinalVertex.xyz);
float viewDotNormal = clamp(dot(FinalNormal.xz,viewDir.xz),0,1); float viewDotNormal = clamp(dot(FinalNormal.xz,viewDir.xz),0,1);
//calculate thinkening factor to shift verts slightly based on view angle //calculate thinkening factor to shift verts slightly based on view angle
float viewSpaceThickenFactor = easeOut(1.0 - viewDotNormal); float viewSpaceThickenFactor = easeOut(1.0 - viewDotNormal);
@ -174,17 +169,17 @@ void main() {
//push frag, normal, and texture positions to fragment shader //push frag, normal, and texture positions to fragment shader
// //
FragPos = vec3(FinalVertex); FragPos = vec3(FinalVertex);
ViewFragPos = vec3(view * model * FinalVertex); ViewFragPos = vec3(standardUniforms.view * model * FinalVertex);
Normal = vec3(FinalNormal); Normal = vec3(FinalNormal);
TexCoord = aTex; TexCoord = aTex;
//shadow map stuff //shadow map stuff
FragPosLightSpace = lightSpaceMatrix * vec4(FragPos, 1.0); FragPosLightSpace = standardUniforms.lightSpaceMatrix * vec4(FragPos, 1.0);
//set final position with opengl space //set final position with opengl space
gl_Position = projection * view * FinalVertex; gl_Position = standardUniforms.projection * standardUniforms.view * FinalVertex;
} }
mat4 rotation3dX(float angle) { mat4 rotation3dX(float angle) {

View File

@ -1,6 +1,6 @@
#version 330 core #version 450 core
out vec4 FragColor; out vec4 FragColor;

View File

@ -1,5 +1,7 @@
//Vertex Shader //Vertex Shader
#version 330 core #version 450 core
#extension GL_ARB_shading_language_include : require
#include "../../lib/standarduniform.fs"
@ -9,10 +11,7 @@ layout (location = 1) in float id;
//coordinate space transformation matrices //coordinate space transformation matrices
uniform mat4 transform;
uniform mat4 model; uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
@ -29,6 +28,6 @@ void main()
//send color to the frag shader //send color to the frag shader
color = colors[int(id)]; color = colors[int(id)];
//set final position with opengl space //set final position with opengl space
vec4 pos = projection * view * model * FinalVertex; vec4 pos = standardUniforms.projection * standardUniforms.view * model * FinalVertex;
gl_Position = pos.xyww; gl_Position = pos.xyww;
} }

View File

@ -1,6 +1,8 @@
#version 450 core #version 450 core
#extension GL_ARB_shading_language_include : require
#include "../../lib/standarduniform.fs"
/** /**

View File

@ -1,6 +1,7 @@
//Vertex Shader //Vertex Shader
#version 330 core #version 450 core
#extension GL_ARB_shading_language_include : require
#include "../../lib/standarduniform.fs"
//input buffers //input buffers
@ -10,11 +11,7 @@ layout (location = 4) in vec2 aTex;
//coordinate space transformation matrices //coordinate space transformation matrices
uniform mat4 transform;
uniform mat4 model; uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform mat4 lightSpaceMatrix;
@ -36,15 +33,15 @@ void main() {
//push frag, normal, and texture positions to fragment shader //push frag, normal, and texture positions to fragment shader
FragPos = vec3(model * FinalVertex); FragPos = vec3(model * FinalVertex);
ViewFragPos = vec3(view * model * FinalVertex); ViewFragPos = vec3(standardUniforms.view * model * FinalVertex);
Normal = mat3(transpose(inverse(model))) * aNormal; Normal = mat3(transpose(inverse(model))) * aNormal;
TexCoord = aTex; TexCoord = aTex;
//shadow map stuff //shadow map stuff
FragPosLightSpace = lightSpaceMatrix * vec4(FragPos, 1.0); FragPosLightSpace = standardUniforms.lightSpaceMatrix * vec4(FragPos, 1.0);
//set final position with opengl space //set final position with opengl space
gl_Position = projection * view * model * FinalVertex; gl_Position = standardUniforms.projection * standardUniforms.view * model * FinalVertex;
} }

View File

@ -2,6 +2,7 @@
#extension GL_ARB_shading_language_include : require #extension GL_ARB_shading_language_include : require
#include "../../lib/lights.fs" #include "../../lib/lights.fs"
#include "../../lib/material.fs" #include "../../lib/material.fs"
#include "../../lib/standarduniform.fs"
//texture defines //texture defines
#define ATLAS_ELEMENT_DIM 256.0 #define ATLAS_ELEMENT_DIM 256.0
@ -35,7 +36,6 @@ uniform dvec3 viewPos;
// uniform PointLight pointLights[NR_POINT_LIGHTS]; // uniform PointLight pointLights[NR_POINT_LIGHTS];
// uniform SpotLight spotLight; // uniform SpotLight spotLight;
uniform Material material; uniform Material material;
uniform mat4 view;
/** /**

View File

@ -1,5 +1,7 @@
//Vertex Shader //Vertex Shader
#version 330 core #version 450 core
#extension GL_ARB_shading_language_include : require
#include "../../lib/standarduniform.fs"
//defines //defines
#define TEXTURE_MAP_SCALE 1.0 #define TEXTURE_MAP_SCALE 1.0
@ -15,11 +17,7 @@ layout (location = 6) in vec3 samplerRatioVectors; //the interpolated ratio of H
//coordinate space transformation matrices //coordinate space transformation matrices
uniform mat4 transform;
uniform mat4 model; uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform mat4 lightSpaceMatrix;
@ -45,7 +43,7 @@ void main() {
//push frag, normal, and texture positions to fragment shader //push frag, normal, and texture positions to fragment shader
FragPos = vec3(model * FinalVertex); FragPos = vec3(model * FinalVertex);
ViewFragPos = vec3(view * model * FinalVertex); ViewFragPos = vec3(standardUniforms.view * model * FinalVertex);
Normal = mat3(transpose(inverse(model))) * aNormal; Normal = mat3(transpose(inverse(model))) * aNormal;
// //clamp the aPos vector to just shy of its surrounding values // //clamp the aPos vector to just shy of its surrounding values
@ -68,11 +66,11 @@ void main() {
//shadow map stuff //shadow map stuff
FragPosLightSpace = lightSpaceMatrix * vec4(FragPos, 1.0); FragPosLightSpace = standardUniforms.lightSpaceMatrix * vec4(FragPos, 1.0);
//set final position with opengl space //set final position with opengl space
gl_Position = projection * view * model * FinalVertex; gl_Position = standardUniforms.projection * standardUniforms.view * model * FinalVertex;
} }

View File

@ -1974,6 +1974,7 @@ Performance improvements
- Far-away entities do not spawn physics by default - Far-away entities do not spawn physics by default
- Clustering terrain draw calls - Clustering terrain draw calls
- Reduce allocations in some rendering paths - Reduce allocations in some rendering paths
- Leverage standard uniforms buffer
Lod emitter service checker function Lod emitter service checker function
Mesh profiling Mesh profiling
Upgrade target framerate Upgrade target framerate

View File

@ -700,11 +700,13 @@ public class PhysicsEntityUtils {
* @return The rigid body created (note, attachment has already been performed) * @return The rigid body created (note, attachment has already been performed)
*/ */
public static void clientAttachTriGeomRigidBody(Entity terrain, TriGeomData data){ public static void clientAttachTriGeomRigidBody(Entity terrain, TriGeomData data){
CollisionEngine.lockOde();
DBody terrainBody = CollisionBodyCreation.generateBodyFromTerrainData(Globals.clientState.clientSceneWrapper.getCollisionEngine(), data, Collidable.TYPE_STATIC_BIT); DBody terrainBody = CollisionBodyCreation.generateBodyFromTerrainData(Globals.clientState.clientSceneWrapper.getCollisionEngine(), data, Collidable.TYPE_STATIC_BIT);
CollisionBodyCreation.setAutoDisable(Globals.clientState.clientSceneWrapper.getCollisionEngine(), terrainBody, true, LINEAR_THRESHOLD, ANGULAR_THRESHOLD, STEP_THRESHOLD); CollisionBodyCreation.setAutoDisable(Globals.clientState.clientSceneWrapper.getCollisionEngine(), terrainBody, true, LINEAR_THRESHOLD, ANGULAR_THRESHOLD, STEP_THRESHOLD);
Collidable collidable = new Collidable(terrain,Collidable.TYPE_STATIC, false); Collidable collidable = new Collidable(terrain,Collidable.TYPE_STATIC, false);
Globals.clientState.clientSceneWrapper.getCollisionEngine().registerCollisionObject(terrainBody, collidable); Globals.clientState.clientSceneWrapper.getCollisionEngine().registerCollisionObject(terrainBody, collidable);
PhysicsEntityUtils.setDBody(terrain,terrainBody); PhysicsEntityUtils.setDBody(terrain,terrainBody);
CollisionEngine.unlockOde();
terrain.putData(EntityDataStrings.PHYSICS_COLLIDABLE, collidable); terrain.putData(EntityDataStrings.PHYSICS_COLLIDABLE, collidable);
} }
@ -715,10 +717,12 @@ public class PhysicsEntityUtils {
* @return The rigid body created (note, attachment has already been performed) * @return The rigid body created (note, attachment has already been performed)
*/ */
public static void clientAttachTriGeomCollider(Entity terrain, TriGeomData data){ public static void clientAttachTriGeomCollider(Entity terrain, TriGeomData data){
CollisionEngine.lockOde();
DGeom terrainGeom = CollisionBodyCreation.generateGeomFromTerrainData(Globals.clientState.clientSceneWrapper.getCollisionEngine(), data, Collidable.TYPE_STATIC_BIT); DGeom terrainGeom = CollisionBodyCreation.generateGeomFromTerrainData(Globals.clientState.clientSceneWrapper.getCollisionEngine(), data, Collidable.TYPE_STATIC_BIT);
Collidable collidable = new Collidable(terrain,Collidable.TYPE_STATIC, true); Collidable collidable = new Collidable(terrain,Collidable.TYPE_STATIC, true);
PhysicsEntityUtils.setCollidable(terrain, collidable); PhysicsEntityUtils.setCollidable(terrain, collidable);
Globals.clientState.clientSceneWrapper.getCollisionEngine().registerCollisionObject(terrainGeom, collidable); Globals.clientState.clientSceneWrapper.getCollisionEngine().registerCollisionObject(terrainGeom, collidable);
CollisionEngine.unlockOde();
PhysicsEntityUtils.setDGeom(terrain,terrainGeom); PhysicsEntityUtils.setDGeom(terrain,terrainGeom);
} }

View File

@ -563,14 +563,9 @@ public class Mesh {
//buffer model/view/proj matrices //buffer model/view/proj matrices
try(MemoryStack stack = MemoryStack.stackPush()){ try(MemoryStack stack = MemoryStack.stackPush()){
openGLState.getActiveShader().setUniform(openGLState, "model", parent.getModelMatrix()); openGLState.getActiveShader().setUniform(openGLState, "model", parent.getModelMatrix());
openGLState.getActiveShader().setUniform(openGLState, "view", Globals.renderingEngine.getViewMatrix());
openGLState.getActiveShader().setUniform(openGLState, "projection", Globals.renderingEngine.getProjectionMatrix());
openGLState.getActiveShader().setUniform(openGLState, "viewPos", CameraEntityUtils.getCameraEye(Globals.clientState.playerCamera)); openGLState.getActiveShader().setUniform(openGLState, "viewPos", CameraEntityUtils.getCameraEye(Globals.clientState.playerCamera));
Vector3f worldPos = new Vector3f((float)parent.getWorldPos().x,(float)parent.getWorldPos().y,(float)parent.getWorldPos().z); Vector3f worldPos = new Vector3f((float)parent.getWorldPos().x,(float)parent.getWorldPos().y,(float)parent.getWorldPos().z);
openGLState.getActiveShader().setUniform(openGLState, "modelWorldPos", worldPos); openGLState.getActiveShader().setUniform(openGLState, "modelWorldPos", worldPos);
openGLState.getActiveShader().setUniform(openGLState, "lightSpaceMatrix", Globals.renderingEngine.getLightDepthMatrix());
openGLState.getActiveShader().setUniform(openGLState, "frame", (int)Globals.engineState.timekeeper.getNumberOfRenderFramesElapsed());
openGLState.getActiveShader().setUniform(openGLState, "time", (float)Globals.engineState.timekeeper.getCurrentRendererTime());
openGLState.glBindBufferBase(StandardUniformManager.STANDARD_UNIFORM_BUFFER_BIND_POINT, Globals.renderingEngine.getStandardUniformManager().getStandardUnifomSSBO()); openGLState.glBindBufferBase(StandardUniformManager.STANDARD_UNIFORM_BUFFER_BIND_POINT, Globals.renderingEngine.getStandardUniformManager().getStandardUnifomSSBO());
} }
Globals.renderingEngine.checkError(); Globals.renderingEngine.checkError();