62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								package kha.graphics4;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import kha.arrays.Float32Array;
							 | 
						||
| 
								 | 
							
								import kha.arrays.Int16Array;
							 | 
						||
| 
								 | 
							
								import kha.graphics4.Usage;
							 | 
						||
| 
								 | 
							
								import kha.graphics4.VertexStructure;
							 | 
						||
| 
								 | 
							
								import kha.graphics4.VertexData;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class VertexBuffer {
							 | 
						||
| 
								 | 
							
									public var buffer: Dynamic;
							 | 
						||
| 
								 | 
							
									public var _data: Float32Array;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									var vertexCount: Int;
							 | 
						||
| 
								 | 
							
									var structure: VertexStructure;
							 | 
						||
| 
								 | 
							
									var mySize: Int;
							 | 
						||
| 
								 | 
							
									var lockStart: Int = 0;
							 | 
						||
| 
								 | 
							
									var lockEnd: Int = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function new(vertexCount: Int, structure: VertexStructure, usage: Usage, instanceDataStepRate: Int = 0, canRead: Bool = false) {
							 | 
						||
| 
								 | 
							
										this.vertexCount = vertexCount;
							 | 
						||
| 
								 | 
							
										this.structure = structure;
							 | 
						||
| 
								 | 
							
										mySize = vertexCount;
							 | 
						||
| 
								 | 
							
										buffer = Krom.createVertexBuffer(vertexCount, structure.elements, usage, instanceDataStepRate);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function delete() {
							 | 
						||
| 
								 | 
							
										Krom.deleteVertexBuffer(buffer);
							 | 
						||
| 
								 | 
							
										buffer = null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function lock(?start: Int, ?count: Int): Float32Array {
							 | 
						||
| 
								 | 
							
										lockStart = start != null ? start : 0;
							 | 
						||
| 
								 | 
							
										lockEnd = count != null ? start + count : mySize;
							 | 
						||
| 
								 | 
							
										_data = new kha.arrays.ByteArray(Krom.lockVertexBuffer(buffer, lockStart, lockEnd));
							 | 
						||
| 
								 | 
							
										return _data;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function lockInt16(?start: Int, ?count: Int): Int16Array {
							 | 
						||
| 
								 | 
							
										return new Int16Array(untyped lock(start, count).buffer);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function unlock(?count: Int): Void {
							 | 
						||
| 
								 | 
							
										if (count != null) {
							 | 
						||
| 
								 | 
							
											lockEnd = lockStart + count;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										Krom.unlockVertexBuffer(buffer, lockEnd);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function stride(): Int {
							 | 
						||
| 
								 | 
							
										return structure.byteSize();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function count(): Int {
							 | 
						||
| 
								 | 
							
										return vertexCount;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function set(offset: Int): Int {
							 | 
						||
| 
								 | 
							
										Krom.setVertexBuffer(buffer);
							 | 
						||
| 
								 | 
							
										return 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |