gpu: use optimized scene uploading for dynamic models too

This commit is contained in:
Max Weber
2021-11-02 05:20:37 -06:00
parent 5268f2766d
commit 97e5186535
2 changed files with 22 additions and 22 deletions

View File

@@ -1634,16 +1634,9 @@ public class GpuPlugin extends Plugin implements DrawCallbacks
boolean hasUv = model.getFaceTextures() != null;
int faces = Math.min(MAX_TRIANGLE, model.getTrianglesCount());
vertexBuffer.ensureCapacity(12 * faces);
uvBuffer.ensureCapacity(12 * faces);
int len = 0;
for (int i = 0; i < faces; ++i)
{
len += sceneUploader.pushFace(model, i, false, vertexBuffer, uvBuffer, 0, 0, 0, 0);
}
int len = sceneUploader.pushModel(model, vertexBuffer, uvBuffer);
GpuIntBuffer b = bufferForTriangles(faces);
GpuIntBuffer b = bufferForTriangles(len / 3);
b.ensureCapacity(8);
IntBuffer buffer = b.getBuffer();

View File

@@ -147,13 +147,13 @@ class SceneUploader
Renderable renderable1 = wallObject.getRenderable1();
if (renderable1 instanceof Model)
{
uploadModel((Model) renderable1, vertexBuffer, uvBuffer);
uploadSceneModel((Model) renderable1, vertexBuffer, uvBuffer);
}
Renderable renderable2 = wallObject.getRenderable2();
if (renderable2 instanceof Model)
{
uploadModel((Model) renderable2, vertexBuffer, uvBuffer);
uploadSceneModel((Model) renderable2, vertexBuffer, uvBuffer);
}
}
@@ -163,7 +163,7 @@ class SceneUploader
Renderable renderable = groundObject.getRenderable();
if (renderable instanceof Model)
{
uploadModel((Model) renderable, vertexBuffer, uvBuffer);
uploadSceneModel((Model) renderable, vertexBuffer, uvBuffer);
}
}
@@ -173,13 +173,13 @@ class SceneUploader
Renderable renderable = decorativeObject.getRenderable();
if (renderable instanceof Model)
{
uploadModel((Model) renderable, vertexBuffer, uvBuffer);
uploadSceneModel((Model) renderable, vertexBuffer, uvBuffer);
}
Renderable renderable2 = decorativeObject.getRenderable2();
if (renderable2 instanceof Model)
{
uploadModel((Model) renderable2, vertexBuffer, uvBuffer);
uploadSceneModel((Model) renderable2, vertexBuffer, uvBuffer);
}
}
@@ -194,7 +194,7 @@ class SceneUploader
Renderable renderable = gameObject.getRenderable();
if (renderable instanceof Model)
{
uploadModel((Model) gameObject.getRenderable(), vertexBuffer, uvBuffer);
uploadSceneModel((Model) gameObject.getRenderable(), vertexBuffer, uvBuffer);
}
}
}
@@ -350,7 +350,7 @@ class SceneUploader
return cnt;
}
private void uploadModel(Model model, GpuIntBuffer vertexBuffer, GpuFloatBuffer uvBuffer)
private void uploadSceneModel(Model model, GpuIntBuffer vertexBuffer, GpuFloatBuffer uvBuffer)
{
if (model.getSceneId() == sceneId)
{
@@ -368,7 +368,18 @@ class SceneUploader
}
model.setSceneId(sceneId);
final int triangleCount = model.getTrianglesCount();
int len = pushModel(model, vertexBuffer, uvBuffer);
offset += len;
if (model.getFaceTextures() != null)
{
uvoffset += len;
}
}
public int pushModel(Model model, GpuIntBuffer vertexBuffer, GpuFloatBuffer uvBuffer)
{
final int triangleCount = Math.min(model.getTrianglesCount(), GpuPlugin.MAX_TRIANGLE);
vertexBuffer.ensureCapacity(triangleCount * 12);
uvBuffer.ensureCapacity(triangleCount * 12);
@@ -437,11 +448,7 @@ class SceneUploader
len += 3;
}
offset += len;
if (model.getFaceTextures() != null)
{
uvoffset += len;
}
return len;
}
int pushFace(Model model, int face, boolean padUvs, GpuIntBuffer vertexBuffer, GpuFloatBuffer uvBuffer,