diff --git a/src/main/java/electrosphere/audio/AudioBuffer.java b/src/main/java/electrosphere/audio/AudioBuffer.java index 41a17e3e..b8321906 100644 --- a/src/main/java/electrosphere/audio/AudioBuffer.java +++ b/src/main/java/electrosphere/audio/AudioBuffer.java @@ -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!")); diff --git a/src/main/java/electrosphere/renderer/RenderUtils.java b/src/main/java/electrosphere/renderer/RenderUtils.java index 5c4fd055..ed2d33fc 100644 --- a/src/main/java/electrosphere/renderer/RenderUtils.java +++ b/src/main/java/electrosphere/renderer/RenderUtils.java @@ -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(); } diff --git a/src/main/java/electrosphere/renderer/actor/instance/InstanceData.java b/src/main/java/electrosphere/renderer/actor/instance/InstanceData.java index e8ac44ab..15874a83 100644 --- a/src/main/java/electrosphere/renderer/actor/instance/InstanceData.java +++ b/src/main/java/electrosphere/renderer/actor/instance/InstanceData.java @@ -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; } } diff --git a/src/main/java/electrosphere/renderer/light/LightManager.java b/src/main/java/electrosphere/renderer/light/LightManager.java index c1761992..d8df7501 100644 --- a/src/main/java/electrosphere/renderer/light/LightManager.java +++ b/src/main/java/electrosphere/renderer/light/LightManager.java @@ -291,7 +291,9 @@ public class LightManager { dataBuffer.putFloat(0); } - dataBuffer.flip(); + if(dataBuffer.position() > 0){ + dataBuffer.flip(); + } // dataBuffer.position(0); diff --git a/src/main/java/electrosphere/renderer/meshgen/FluidChunkModelGeneration.java b/src/main/java/electrosphere/renderer/meshgen/FluidChunkModelGeneration.java index 63ff5ad5..dec18092 100644 --- a/src/main/java/electrosphere/renderer/meshgen/FluidChunkModelGeneration.java +++ b/src/main/java/electrosphere/renderer/meshgen/FluidChunkModelGeneration.java @@ -582,8 +582,6 @@ public class FluidChunkModelGeneration { List normals = new LinkedList(); //the list of number of triangles that share a vert List trianglesSharingVert = new LinkedList(); - //List of elements in order - List faceElements = new LinkedList(); //List of UVs List UVs = new LinkedList(); @@ -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(); diff --git a/src/main/java/electrosphere/renderer/meshgen/MeshLoader.java b/src/main/java/electrosphere/renderer/meshgen/MeshLoader.java index 06d26976..c9c7113a 100644 --- a/src/main/java/electrosphere/renderer/meshgen/MeshLoader.java +++ b/src/main/java/electrosphere/renderer/meshgen/MeshLoader.java @@ -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); diff --git a/src/main/java/electrosphere/renderer/meshgen/TerrainChunkModelGeneration.java b/src/main/java/electrosphere/renderer/meshgen/TerrainChunkModelGeneration.java index 27eae355..87c9a07b 100644 --- a/src/main/java/electrosphere/renderer/meshgen/TerrainChunkModelGeneration.java +++ b/src/main/java/electrosphere/renderer/meshgen/TerrainChunkModelGeneration.java @@ -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(); } diff --git a/src/main/java/electrosphere/renderer/texture/Texture.java b/src/main/java/electrosphere/renderer/texture/Texture.java index 7267da62..b8a4ff43 100644 --- a/src/main/java/electrosphere/renderer/texture/Texture.java +++ b/src/main/java/electrosphere/renderer/texture/Texture.java @@ -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); diff --git a/src/main/java/electrosphere/server/fluid/manager/ServerFluidManager.java b/src/main/java/electrosphere/server/fluid/manager/ServerFluidManager.java index 73870c3d..fbacd15b 100644 --- a/src/main/java/electrosphere/server/fluid/manager/ServerFluidManager.java +++ b/src/main/java/electrosphere/server/fluid/manager/ServerFluidManager.java @@ -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); } diff --git a/src/main/java/electrosphere/server/terrain/manager/ServerTerrainManager.java b/src/main/java/electrosphere/server/terrain/manager/ServerTerrainManager.java index 20ef9d8a..0ad76a49 100644 --- a/src/main/java/electrosphere/server/terrain/manager/ServerTerrainManager.java +++ b/src/main/java/electrosphere/server/terrain/manager/ServerTerrainManager.java @@ -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()); }