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; boolean hasUv = model.getFaceTextures() != null;
int faces = Math.min(MAX_TRIANGLE, model.getTrianglesCount()); int len = sceneUploader.pushModel(model, vertexBuffer, uvBuffer);
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);
}
GpuIntBuffer b = bufferForTriangles(faces); GpuIntBuffer b = bufferForTriangles(len / 3);
b.ensureCapacity(8); b.ensureCapacity(8);
IntBuffer buffer = b.getBuffer(); IntBuffer buffer = b.getBuffer();

View File

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