Repe [T3DU] Update - 31f26d171bba0355ce2a77031e3aad4c64dbc7e9
This commit is contained in:
@ -40,6 +40,8 @@ class Geometry {
|
||||
public var instancedVB: VertexBuffer = null;
|
||||
public var instanced = false;
|
||||
public var instanceCount = 0;
|
||||
public var instanceElements: Array<{name: String, data: String}> = [];
|
||||
public var instanceStride: Int = 0;
|
||||
|
||||
public var positions: TVertexArray;
|
||||
public var normals: TVertexArray;
|
||||
@ -130,11 +132,39 @@ class Geometry {
|
||||
structure.add("iscl", kha.graphics4.VertexData.Float3);
|
||||
}
|
||||
|
||||
if (instanceElements != null && instanceElements.length > 0) {
|
||||
for (elem in instanceElements) {
|
||||
if (StringTools.startsWith(elem.name, "i") && elem.name != "ipos" && elem.name != "irot" && elem.name != "iscl") {
|
||||
var vdata = VertexData.Float1;
|
||||
var dataStr: String = Reflect.field(elem, "data");
|
||||
switch (dataStr) {
|
||||
case "float1": vdata = VertexData.Float1;
|
||||
case "float2": vdata = VertexData.Float2;
|
||||
case "float3": vdata = VertexData.Float3;
|
||||
case "float4": vdata = VertexData.Float4;
|
||||
}
|
||||
structure.add(elem.name, vdata);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.instanceStride = Std.int(structure.byteSize() / 4);
|
||||
instanceCount = Std.int(data.length / Std.int(structure.byteSize() / 4));
|
||||
instancedVB = new VertexBuffer(instanceCount, structure, usage, 1);
|
||||
var vertices = instancedVB.lock();
|
||||
for (i in 0...Std.int(vertices.byteLength / 4)) vertices.setFloat32(i * 4, data[i]);
|
||||
instancedVB.unlock();
|
||||
|
||||
}
|
||||
|
||||
public function updateInstanced(data: Float32Array) {
|
||||
if (instancedVB == null) return;
|
||||
|
||||
var vertices = instancedVB.lock();
|
||||
for (i in 0...Std.int(vertices.byteLength / 4)) {
|
||||
vertices.setFloat32(i * 4, data[i]);
|
||||
}
|
||||
instancedVB.unlock();
|
||||
}
|
||||
|
||||
public function copyVertices(vertices: ByteArray, offset = 0, fakeUVs = false) {
|
||||
|
||||
Reference in New Issue
Block a user