api: flatten model uvs
This drastically reduces the number of allocated float arrays on the heap just by flattening the uvs into a single array per model
This commit is contained in:
@@ -72,8 +72,7 @@ public interface Model extends Renderable
|
|||||||
|
|
||||||
short[] getFaceTextures();
|
short[] getFaceTextures();
|
||||||
|
|
||||||
float[][] getFaceTextureUCoordinates();
|
float[] getFaceTextureUVCoordinates();
|
||||||
float[][] getFaceTextureVCoordinates();
|
|
||||||
|
|
||||||
void calculateExtreme(int orientation);
|
void calculateExtreme(int orientation);
|
||||||
|
|
||||||
|
|||||||
@@ -389,8 +389,7 @@ class SceneUploader
|
|||||||
final short[] faceTextures = model.getFaceTextures();
|
final short[] faceTextures = model.getFaceTextures();
|
||||||
final byte[] facePriorities = model.getFaceRenderPriorities();
|
final byte[] facePriorities = model.getFaceRenderPriorities();
|
||||||
|
|
||||||
float[][] u = model.getFaceTextureUCoordinates();
|
float[] uv = model.getFaceTextureUVCoordinates();
|
||||||
float[][] v = model.getFaceTextureVCoordinates();
|
|
||||||
|
|
||||||
int len = 0;
|
int len = 0;
|
||||||
for (int face = 0; face < triangleCount; ++face)
|
for (int face = 0; face < triangleCount; ++face)
|
||||||
@@ -432,7 +431,7 @@ class SceneUploader
|
|||||||
|
|
||||||
if (faceTextures != null)
|
if (faceTextures != null)
|
||||||
{
|
{
|
||||||
pushUvForFace(faceTextures, u, v, face, uvBuffer);
|
pushUvForFace(faceTextures, uv, face, uvBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
len += 3;
|
len += 3;
|
||||||
@@ -559,11 +558,9 @@ class SceneUploader
|
|||||||
|
|
||||||
vertexBuffer.put(a, b, c, packedAlphaPriority | color3);
|
vertexBuffer.put(a, b, c, packedAlphaPriority | color3);
|
||||||
|
|
||||||
float[][] u = model.getFaceTextureUCoordinates();
|
|
||||||
float[][] v = model.getFaceTextureVCoordinates();
|
|
||||||
if (padUvs || faceTextures != null)
|
if (padUvs || faceTextures != null)
|
||||||
{
|
{
|
||||||
pushUvForFace(faceTextures, u, v, face, uvBuffer);
|
pushUvForFace(faceTextures, model.getFaceTextureUVCoordinates(), face, uvBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 3;
|
return 3;
|
||||||
@@ -584,15 +581,15 @@ class SceneUploader
|
|||||||
return alpha | priority;
|
return alpha | priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void pushUvForFace(short[] faceTextures, float[][] u, float[][] v, int face, GpuFloatBuffer uvBuffer)
|
private static void pushUvForFace(short[] faceTextures, float[] uv, int face, GpuFloatBuffer uvBuffer)
|
||||||
{
|
{
|
||||||
float[] uf, vf;
|
if (faceTextures != null && faceTextures[face] != -1 && uv != null)
|
||||||
if (faceTextures != null && u != null && v != null && (uf = u[face]) != null && (vf = v[face]) != null)
|
|
||||||
{
|
{
|
||||||
|
int idx = face * 6;
|
||||||
float texture = faceTextures[face] + 1f;
|
float texture = faceTextures[face] + 1f;
|
||||||
uvBuffer.put(texture, uf[0], vf[0], 0f);
|
uvBuffer.put(texture, uv[idx], uv[idx + 1], 0f);
|
||||||
uvBuffer.put(texture, uf[1], vf[1], 0f);
|
uvBuffer.put(texture, uv[idx + 2], uv[idx + 3], 0f);
|
||||||
uvBuffer.put(texture, uf[2], vf[2], 0f);
|
uvBuffer.put(texture, uv[idx + 4], uv[idx + 5], 0f);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user