forked from LeenkxTeam/LNXSDK
Deinterleaved Vertex Buffer Update
This commit is contained in:
@ -14,6 +14,7 @@ import iron.math.Vec4;
|
||||
import iron.math.Mat4;
|
||||
import iron.data.SceneFormat;
|
||||
import iron.data.MeshData;
|
||||
import iron.data.ShaderData;
|
||||
|
||||
class Geometry {
|
||||
#if lnx_deinterleaved
|
||||
@ -208,7 +209,7 @@ class Geometry {
|
||||
for (v in 0...vertexBuffers.length)
|
||||
if (vertexBuffers[v].name == e.name) {
|
||||
vbs.push(vertexBuffers[v].buffer);
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
if (e.name == "ipos" && instancedVB != null) {
|
||||
vbs.push(instancedVB);
|
||||
@ -264,7 +265,7 @@ class Geometry {
|
||||
for (i in 0...vaLength)
|
||||
vertexBuffers[i] = {
|
||||
name: vertexArrays[i].attrib,
|
||||
buffer: makeDeinterleavedVB(vertexArrays[i].values, vertexArrays[i].attrib, vertexArrays[i].size)
|
||||
buffer: makeDeinterleavedVB(vertexArrays[i])
|
||||
};
|
||||
#else
|
||||
|
||||
@ -295,14 +296,20 @@ class Geometry {
|
||||
}
|
||||
|
||||
#if lnx_deinterleaved
|
||||
function makeDeinterleavedVB(data: ByteArray, name: String, structLength: Int): VertexBuffer {
|
||||
function makeDeinterleavedVB(va: TVertexArray): VertexBuffer {
|
||||
var struct = new VertexStructure();
|
||||
struct.add(name, structLength == 2 ? VertexData.Short2Norm : VertexData.Short4Norm);
|
||||
struct.add(va.attrib, ShaderContext.parseData(va.data));
|
||||
|
||||
var vertexBuffer = new VertexBuffer(Std.int(data.byteLength / 2 / structLength), struct, usage);
|
||||
var vcount = verticesCount(va);
|
||||
var vertexBuffer = new VertexBuffer(vcount, struct, usage);
|
||||
|
||||
var stride = Std.int(struct.byteSize() / 2);
|
||||
var vertices = vertexBuffer.lock();
|
||||
for (i in 0...Std.int(vertices.byteLength / 2)) vertices.setInt16(i * 2, data.getInt16(i * 2));
|
||||
var di = -1;
|
||||
for (i in 0...vcount) {
|
||||
for (o in 0...va.size) vertices.setInt16(++di * 2, va.values[i * va.size + o]);
|
||||
for (o in va.size...stride) vertices.setInt16(++di * 2, 0);
|
||||
}
|
||||
vertexBuffer.unlock();
|
||||
|
||||
return vertexBuffer;
|
||||
|
||||
Reference in New Issue
Block a user