93 lines
2.3 KiB
Haxe
93 lines
2.3 KiB
Haxe
package kha.graphics5;
|
|
|
|
import kha.arrays.Float32Array;
|
|
import kha.graphics5.VertexData;
|
|
import kha.graphics5.VertexElement;
|
|
import kha.graphics5.VertexStructure;
|
|
|
|
@:headerCode('
|
|
#include <Kore/Graphics5/Graphics.h>
|
|
')
|
|
@:headerClassCode("Kore::Graphics5::VertexBuffer* buffer;")
|
|
class VertexBuffer {
|
|
private var data: Float32Array;
|
|
|
|
public function new(vertexCount: Int, structure: VertexStructure, usage: Usage, instanceDataStepRate: Int = 0, canRead: Bool = false) {
|
|
init(vertexCount, structure, usage, instanceDataStepRate);
|
|
data = new Float32Array();
|
|
}
|
|
|
|
public function delete(): Void {
|
|
untyped __cpp__('delete buffer; buffer = nullptr;');
|
|
}
|
|
|
|
@:functionCode("
|
|
Kore::Graphics4::VertexStructure structure2;
|
|
for (int i = 0; i < structure->size(); ++i) {
|
|
Kore::Graphics4::VertexData data;
|
|
switch (structure->get(i)->data) {
|
|
case 0:
|
|
data = Kore::Graphics4::Float1VertexData;
|
|
break;
|
|
case 1:
|
|
data = Kore::Graphics4::Float2VertexData;
|
|
break;
|
|
case 2:
|
|
data = Kore::Graphics4::Float3VertexData;
|
|
break;
|
|
case 3:
|
|
data = Kore::Graphics4::Float4VertexData;
|
|
break;
|
|
case 4:
|
|
data = Kore::Graphics4::Float4x4VertexData;
|
|
break;
|
|
}
|
|
structure2.add(structure->get(i)->name, data);
|
|
}
|
|
buffer = new Kore::Graphics5::VertexBuffer(vertexCount, structure2, false);
|
|
")
|
|
private function init(vertexCount: Int, structure: VertexStructure, usage: Int, instanceDataStepRate: Int) {}
|
|
|
|
@:functionCode('
|
|
data->self.data = buffer->lock() + start * buffer->stride() / 4;
|
|
data->self.myLength = count * buffer->stride() / 4;
|
|
return data;
|
|
')
|
|
private function lock2(start: Int, count: Int): Float32Array {
|
|
return data;
|
|
}
|
|
|
|
public function lock(?start: Int, ?count: Int): Float32Array {
|
|
if (start == null)
|
|
start = 0;
|
|
if (count == null)
|
|
count = this.count();
|
|
return lock2(start, count);
|
|
}
|
|
|
|
@:functionCode('buffer->unlock();')
|
|
public function unlock(): Void {}
|
|
|
|
@:functionCode("return buffer->stride();")
|
|
public function stride(): Int {
|
|
return 0;
|
|
}
|
|
|
|
@:functionCode("return buffer->count();")
|
|
public function count(): Int {
|
|
return 0;
|
|
}
|
|
|
|
@:noCompletion
|
|
@:keep
|
|
public static function _unused1(): VertexElement {
|
|
return null;
|
|
}
|
|
|
|
@:noCompletion
|
|
@:keep
|
|
public static function _unused2(): VertexData {
|
|
return Float1;
|
|
}
|
|
}
|