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;
 | |
| 	}
 | |
| }
 |