forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			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;
 | 
						|
	}
 | 
						|
}
 |