gpu: use optimized scene uploading for dynamic models too
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user