prevent buffer flip on position of 0

This commit is contained in:
austin 2024-09-01 19:06:10 -04:00
parent bd41085afa
commit 035a13ae7b
10 changed files with 164 additions and 112 deletions

View File

@ -199,7 +199,9 @@ public class AudioBuffer {
ByteBuffer buffer = MemoryUtil.memAlloc(dataRaw.length);
buffer.order(isBigEndian ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN);
buffer.put(dataRaw);
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
//sanity check
if(this.length > 10 * 60 * 60 * 1000){
@ -269,7 +271,9 @@ public class AudioBuffer {
while(fc.read(buffer) != -1){
}
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
}
} else {
LoggerInterface.loggerFileIO.ERROR("Failed to create audio, file is not readable: " + filepath, new IOException("File access error!"));

View File

@ -40,28 +40,28 @@ public class RenderUtils {
int rVal = glGenVertexArrays();
glBindVertexArray(rVal);
//vertices
FloatBuffer VertexArrayBufferData = BufferUtils.createFloatBuffer(12);
VertexArrayBufferData.put(-1.0f);
VertexArrayBufferData.put( 1.0f);
FloatBuffer vertexArrayBufferData = BufferUtils.createFloatBuffer(12);
vertexArrayBufferData.put(-1.0f);
vertexArrayBufferData.put( 1.0f);
VertexArrayBufferData.put(-1.0f);
VertexArrayBufferData.put(-1.0f);
vertexArrayBufferData.put(-1.0f);
vertexArrayBufferData.put(-1.0f);
VertexArrayBufferData.put( 1.0f);
VertexArrayBufferData.put(-1.0f);
vertexArrayBufferData.put( 1.0f);
vertexArrayBufferData.put(-1.0f);
VertexArrayBufferData.put(-1.0f);
VertexArrayBufferData.put( 1.0f);
vertexArrayBufferData.put(-1.0f);
vertexArrayBufferData.put( 1.0f);
VertexArrayBufferData.put( 1.0f);
VertexArrayBufferData.put(-1.0f);
vertexArrayBufferData.put( 1.0f);
vertexArrayBufferData.put(-1.0f);
VertexArrayBufferData.put( 1.0f);
VertexArrayBufferData.put( 1.0f);
VertexArrayBufferData.flip();
vertexArrayBufferData.put( 1.0f);
vertexArrayBufferData.put( 1.0f);
vertexArrayBufferData.flip();
int vertexBuffer = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
GL15.glBufferData(GL_ARRAY_BUFFER, VertexArrayBufferData, GL_STATIC_DRAW);
GL15.glBufferData(GL_ARRAY_BUFFER, vertexArrayBufferData, GL_STATIC_DRAW);
glVertexAttribPointer(0, 2, GL_FLOAT, false, 0, 0);
glEnableVertexAttribArray(0);
@ -70,28 +70,28 @@ public class RenderUtils {
//texture coords
FloatBuffer TextureArrayBufferData = BufferUtils.createFloatBuffer(12);
TextureArrayBufferData.put(0.0f);
TextureArrayBufferData.put(1.0f);
FloatBuffer textureArrayBufferData = BufferUtils.createFloatBuffer(12);
textureArrayBufferData.put(0.0f);
textureArrayBufferData.put(1.0f);
TextureArrayBufferData.put(0.0f);
TextureArrayBufferData.put(0.0f);
textureArrayBufferData.put(0.0f);
textureArrayBufferData.put(0.0f);
TextureArrayBufferData.put(1.0f);
TextureArrayBufferData.put(0.0f);
textureArrayBufferData.put(1.0f);
textureArrayBufferData.put(0.0f);
TextureArrayBufferData.put(0.0f);
TextureArrayBufferData.put(1.0f);
textureArrayBufferData.put(0.0f);
textureArrayBufferData.put(1.0f);
TextureArrayBufferData.put(1.0f);
TextureArrayBufferData.put(0.0f);
textureArrayBufferData.put(1.0f);
textureArrayBufferData.put(0.0f);
TextureArrayBufferData.put(1.0f);
TextureArrayBufferData.put(1.0f);
TextureArrayBufferData.flip();
textureArrayBufferData.put(1.0f);
textureArrayBufferData.put(1.0f);
textureArrayBufferData.flip();
int textureCoordBuffer = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, textureCoordBuffer);
GL15.glBufferData(GL_ARRAY_BUFFER, TextureArrayBufferData, GL_STATIC_DRAW);
GL15.glBufferData(GL_ARRAY_BUFFER, textureArrayBufferData, GL_STATIC_DRAW);
glVertexAttribPointer(1, 2, GL_FLOAT, false, 0, 0);
glEnableVertexAttribArray(1);
@ -158,16 +158,16 @@ public class RenderUtils {
try {
int vertexCount = vertexcoords.length / 3;
FloatBuffer VertexArrayBufferData = BufferUtils.createFloatBuffer(vertexCount * 3);
FloatBuffer vertexArrayBufferData = BufferUtils.createFloatBuffer(vertexCount * 3);
float[] temp = new float[3];
for (int i = 0; i < vertexCount; i++) {
temp[0] = vertexcoords[i * 3 + 0];
temp[1] = vertexcoords[i * 3 + 1];
temp[2] = vertexcoords[i * 3 + 2];
VertexArrayBufferData.put(temp);
vertexArrayBufferData.put(temp);
}
VertexArrayBufferData.flip();
particleMesh.bufferVertices(VertexArrayBufferData, 3);
vertexArrayBufferData.flip();
particleMesh.bufferVertices(vertexArrayBufferData, 3);
} catch (NullPointerException ex){
ex.printStackTrace();
}

View File

@ -291,39 +291,57 @@ public class InstanceData {
switch(attributeGlBufferMap.get(attribute).getType()){
case VEC3F: {
FloatBuffer buffer = ((FloatBuffer)attributeCpuBufferMap.get(attribute));
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
} break;
case VEC3D: {
DoubleBuffer buffer = ((DoubleBuffer)attributeCpuBufferMap.get(attribute));
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
} break;
case VEC4F: {
FloatBuffer buffer = ((FloatBuffer)attributeCpuBufferMap.get(attribute));
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
} break;
case VEC4D: {
DoubleBuffer buffer = ((DoubleBuffer)attributeCpuBufferMap.get(attribute));
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
} break;
case MAT4F: {
FloatBuffer buffer = ((FloatBuffer)attributeCpuBufferMap.get(attribute));
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
} break;
case MAT4D: {
FloatBuffer buffer = ((FloatBuffer)attributeCpuBufferMap.get(attribute));
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
} break;
case DOUBLE: {
DoubleBuffer buffer = ((DoubleBuffer)attributeCpuBufferMap.get(attribute));
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
} break;
case FLOAT: {
FloatBuffer buffer = ((FloatBuffer)attributeCpuBufferMap.get(attribute));
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
} break;
case INT: {
IntBuffer buffer = ((IntBuffer)attributeCpuBufferMap.get(attribute));
buffer.flip();
if(buffer.position() > 0){
buffer.flip();
}
} break;
}
}

View File

@ -291,7 +291,9 @@ public class LightManager {
dataBuffer.putFloat(0);
}
dataBuffer.flip();
if(dataBuffer.position() > 0){
dataBuffer.flip();
}
// dataBuffer.position(0);

View File

@ -582,8 +582,6 @@ public class FluidChunkModelGeneration {
List<Vector3f> normals = new LinkedList<Vector3f>();
//the list of number of triangles that share a vert
List<Integer> trianglesSharingVert = new LinkedList<Integer>();
//List of elements in order
List<Integer> faceElements = new LinkedList<Integer>();
//List of UVs
List<Float> UVs = new LinkedList<Float>();
@ -696,13 +694,14 @@ public class FluidChunkModelGeneration {
try {
int vertexCount = data.getVertices().size() / 3;
FloatBuffer VertexArrayBufferData = BufferUtils.createFloatBuffer(vertexCount * 3);
float[] temp = new float[3];
FloatBuffer vertexArrayBufferData = BufferUtils.createFloatBuffer(vertexCount * 3);
for(float vertValue : data.getVertices()){
VertexArrayBufferData.put(vertValue);
vertexArrayBufferData.put(vertValue);
}
if(vertexArrayBufferData.position() > 0){
vertexArrayBufferData.flip();
mesh.bufferVertices(vertexArrayBufferData, 3);
}
VertexArrayBufferData.flip();
mesh.bufferVertices(VertexArrayBufferData, 3);
} catch (NullPointerException ex){
ex.printStackTrace();
}
@ -712,16 +711,16 @@ public class FluidChunkModelGeneration {
//
// FACES
//
int faceCount = data.getFaceElements().size() / 3;
int elementCount = data.getFaceElements().size();
try {
IntBuffer elementArrayBufferData = BufferUtils.createIntBuffer(elementCount);
int[] temp = new int[3];
for(int element : data.getFaceElements()){
elementArrayBufferData.put(element);
}
elementArrayBufferData.flip();
mesh.bufferFaces(elementArrayBufferData,elementCount);
if(elementArrayBufferData.position() > 0){
elementArrayBufferData.flip();
mesh.bufferFaces(elementArrayBufferData,elementCount);
}
} catch (NullPointerException ex){
ex.printStackTrace();
}
@ -734,15 +733,16 @@ public class FluidChunkModelGeneration {
//
try {
int normalCount = data.getNormals().size() / 3;
FloatBuffer NormalArrayBufferData;
FloatBuffer normalArrayBufferData;
if(normalCount > 0){
NormalArrayBufferData = BufferUtils.createFloatBuffer(normalCount * 3);
float[] temp = new float[3];
normalArrayBufferData = BufferUtils.createFloatBuffer(normalCount * 3);
for(float normalValue : data.getNormals()){
NormalArrayBufferData.put(normalValue);
normalArrayBufferData.put(normalValue);
}
if(normalArrayBufferData.position() > 0){
normalArrayBufferData.flip();
mesh.bufferNormals(normalArrayBufferData, 3);
}
NormalArrayBufferData.flip();
mesh.bufferNormals(NormalArrayBufferData, 3);
}
} catch (NullPointerException ex){
ex.printStackTrace();
@ -753,15 +753,16 @@ public class FluidChunkModelGeneration {
//
try {
int textureCoordCount = data.getUVs().size() / 2;
FloatBuffer TextureArrayBufferData;
FloatBuffer textureArrayBufferData;
if(textureCoordCount > 0){
TextureArrayBufferData = BufferUtils.createFloatBuffer(textureCoordCount * 2);
float[] temp = new float[2];
textureArrayBufferData = BufferUtils.createFloatBuffer(textureCoordCount * 2);
for(float uvValue : data.getUVs()){
TextureArrayBufferData.put(uvValue);
textureArrayBufferData.put(uvValue);
}
if(textureArrayBufferData.position() > 0){
textureArrayBufferData.flip();
mesh.bufferTextureCoords(textureArrayBufferData, 2);
}
TextureArrayBufferData.flip();
mesh.bufferTextureCoords(TextureArrayBufferData, 2);
}
} catch (NullPointerException ex){
ex.printStackTrace();

View File

@ -86,7 +86,7 @@ public class MeshLoader {
int vertexCount = 0;
try {
vertexCount = mesh.mNumVertices();
FloatBuffer VertexArrayBufferData = BufferUtils.createFloatBuffer(vertexCount * 3);
FloatBuffer vertexArrayBufferData = BufferUtils.createFloatBuffer(vertexCount * 3);
float[] temp = new float[3];
boolean definedDimensions = false;
float minX = 0, maxX = 0, minY = 0, maxY = 0, minZ = 0, maxZ = 0;
@ -120,11 +120,12 @@ public class MeshLoader {
temp[0] = (float)transformedVertex.x;
temp[1] = (float)transformedVertex.y;
temp[2] = (float)transformedVertex.z;
VertexArrayBufferData.put(temp);
vertexArrayBufferData.put(temp);
}
if(vertexArrayBufferData.position() > 0){
vertexArrayBufferData.flip();
rVal.bufferVertices(vertexArrayBufferData, 3);
}
VertexArrayBufferData.flip();
rVal.bufferVertices(VertexArrayBufferData, 3);
} catch (NullPointerException ex){
ex.printStackTrace();
}
@ -134,9 +135,9 @@ public class MeshLoader {
AIVector3D.Buffer normals = mesh.mNormals();
try {
int normalCount = mesh.mNumVertices();
FloatBuffer NormalArrayBufferData;
FloatBuffer normalArrayBufferData;
if(normalCount > 0){
NormalArrayBufferData = BufferUtils.createFloatBuffer(normalCount * 3);
normalArrayBufferData = BufferUtils.createFloatBuffer(normalCount * 3);
float[] temp = new float[3];
for (int i = 0; i < normalCount; i++) {
AIVector3D normal = normals.get(i);
@ -144,10 +145,12 @@ public class MeshLoader {
temp[0] = (float)transformedNormal.x();
temp[1] = (float)transformedNormal.y();
temp[2] = (float)transformedNormal.z();
NormalArrayBufferData.put(temp);
normalArrayBufferData.put(temp);
}
if(normalArrayBufferData.position() > 0){
normalArrayBufferData.flip();
rVal.bufferNormals(normalArrayBufferData, 3);
}
NormalArrayBufferData.flip();
rVal.bufferNormals(NormalArrayBufferData, 3);
}
} catch (NullPointerException ex){
ex.printStackTrace();
@ -166,8 +169,10 @@ public class MeshLoader {
}
elementArrayBufferData.put(face.mIndices());
}
elementArrayBufferData.flip();
rVal.bufferFaces(elementArrayBufferData,elementCount);
if(elementArrayBufferData.position() > 0){
elementArrayBufferData.flip();
rVal.bufferFaces(elementArrayBufferData,elementCount);
}
@ -181,19 +186,21 @@ public class MeshLoader {
try {
if(texturecoords != null){
int textureCoordCount = texturecoords.capacity();
FloatBuffer TextureArrayBufferData;
FloatBuffer textureArrayBufferData;
if(textureCoordCount > 0){
TextureArrayBufferData = BufferUtils.createFloatBuffer(textureCoordCount * 2);
textureArrayBufferData = BufferUtils.createFloatBuffer(textureCoordCount * 2);
float[] temp = new float[2];
for (int i = 0; i < textureCoordCount; i++) {
AIVector3D normal = texturecoords.get(i);
temp[0] = normal.x();
temp[1] = normal.y();
// temp[2] = normal.z();
TextureArrayBufferData.put(temp);
textureArrayBufferData.put(temp);
}
if(textureArrayBufferData.position() > 0){
textureArrayBufferData.flip();
rVal.bufferTextureCoords(textureArrayBufferData, 2);
}
TextureArrayBufferData.flip();
rVal.bufferTextureCoords(TextureArrayBufferData, 2);
}
}
} catch (NullPointerException ex){
@ -299,8 +306,12 @@ public class MeshLoader {
boneIndexDataBuffer.put(index);
boneWeightDataBuffer.put(weight);
}
boneIndexDataBuffer.flip();
boneWeightDataBuffer.flip();
if(boneIndexDataBuffer.position() > 0){
boneIndexDataBuffer.flip();
}
if(boneWeightDataBuffer.position() > 0){
boneWeightDataBuffer.flip();
}
if(!Globals.HEADLESS){
rVal.bufferBoneIndices(boneIndexDataBuffer);

View File

@ -789,38 +789,44 @@ public class TerrainChunkModelGeneration {
//
int elementCount = data.getFaceElements().size();
try {
FloatBuffer VertexArrayBufferData = BufferUtils.createFloatBuffer(elementCount * 3);
FloatBuffer NormalArrayBufferData = BufferUtils.createFloatBuffer(elementCount * 3);
FloatBuffer TextureArrayBufferData = BufferUtils.createFloatBuffer(elementCount * 2);
FloatBuffer vertexArrayBufferData = BufferUtils.createFloatBuffer(elementCount * 3);
FloatBuffer normalArrayBufferData = BufferUtils.createFloatBuffer(elementCount * 3);
FloatBuffer textureArrayBufferData = BufferUtils.createFloatBuffer(elementCount * 2);
for(int element : data.getFaceElements()){
//for each element, need to push vert, normal, etc
//push current vertex
VertexArrayBufferData.put(data.getVertices().get(element*3+0));
VertexArrayBufferData.put(data.getVertices().get(element*3+1));
VertexArrayBufferData.put(data.getVertices().get(element*3+2));
vertexArrayBufferData.put(data.getVertices().get(element*3+0));
vertexArrayBufferData.put(data.getVertices().get(element*3+1));
vertexArrayBufferData.put(data.getVertices().get(element*3+2));
//push current normals
NormalArrayBufferData.put(data.getNormals().get(element*3+0));
NormalArrayBufferData.put(data.getNormals().get(element*3+1));
NormalArrayBufferData.put(data.getNormals().get(element*3+2));
normalArrayBufferData.put(data.getNormals().get(element*3+0));
normalArrayBufferData.put(data.getNormals().get(element*3+1));
normalArrayBufferData.put(data.getNormals().get(element*3+2));
//push current uvs
TextureArrayBufferData.put(data.getUVs().get(element*2+0));
TextureArrayBufferData.put(data.getUVs().get(element*2+1));
textureArrayBufferData.put(data.getUVs().get(element*2+0));
textureArrayBufferData.put(data.getUVs().get(element*2+1));
}
//actually buffer vertices
VertexArrayBufferData.flip();
mesh.bufferVertices(VertexArrayBufferData, 3);
if(vertexArrayBufferData.position() > 0){
vertexArrayBufferData.flip();
mesh.bufferVertices(vertexArrayBufferData, 3);
}
//actually buffer normals
NormalArrayBufferData.flip();
mesh.bufferNormals(NormalArrayBufferData, 3);
if(normalArrayBufferData.position() > 0){
normalArrayBufferData.flip();
mesh.bufferNormals(normalArrayBufferData, 3);
}
//actually buffer UVs
TextureArrayBufferData.flip();
mesh.bufferTextureCoords(TextureArrayBufferData, 2);
if(textureArrayBufferData.position() > 0){
textureArrayBufferData.flip();
mesh.bufferTextureCoords(textureArrayBufferData, 2);
}
} catch (NullPointerException ex){
@ -841,8 +847,10 @@ public class TerrainChunkModelGeneration {
for(float samplerVec : data.getTextureSamplers()){
samplerBuffer.put(samplerVec);
}
samplerBuffer.flip();
mesh.bufferCustomFloatAttribArray(samplerBuffer, 3, SAMPLER_INDEX_ATTRIB_LOC);
if(samplerBuffer.position() > 0){
samplerBuffer.flip();
mesh.bufferCustomFloatAttribArray(samplerBuffer, 3, SAMPLER_INDEX_ATTRIB_LOC);
}
} catch (NullPointerException ex){
ex.printStackTrace();
}
@ -856,8 +864,10 @@ public class TerrainChunkModelGeneration {
for(float samplerVec : data.getTextureRatioVectors()){
samplerBuffer.put(samplerVec);
}
samplerBuffer.flip();
mesh.bufferCustomFloatAttribArray(samplerBuffer, 3, SAMPLER_RATIO_ATTRIB_LOC);
if(samplerBuffer.position() > 0){
samplerBuffer.flip();
mesh.bufferCustomFloatAttribArray(samplerBuffer, 3, SAMPLER_RATIO_ATTRIB_LOC);
}
} catch (NullPointerException ex){
ex.printStackTrace();
}

View File

@ -118,7 +118,9 @@ public class Texture {
}
}
}
data.flip();
if(data.position() > 0){
data.flip();
}
//call if width != height so opengl figures out how to unpack it properly
if(width != height){
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

View File

@ -105,7 +105,9 @@ public class ServerFluidManager {
for(int x = 0; x < model.getElevation().length; x++){
floatView.put(model.getElevation()[x]);
}
floatView.flip();
if(floatView.position() > 0){
floatView.flip();
}
FileUtils.saveBinaryToSavePath(saveName, "./fluid.dat", buffer.array());
FileUtils.serializeObjectToSavePath(saveName, "./fluid.json", model);
}

View File

@ -110,7 +110,9 @@ public class ServerTerrainManager {
for(int x = 0; x < model.getElevation().length; x++){
floatView.put(model.getElevation()[x]);
}
floatView.flip();
if(floatView.position() > 0){
floatView.flip();
}
FileUtils.serializeObjectToSavePath(saveName, "./terrain.json", model);
FileUtils.saveBinaryToSavePath(saveName, "./terrain.dat", buffer.array());
}