78 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| package kha.compute;
 | |
| 
 | |
| import kha.graphics4.VertexData;
 | |
| 
 | |
| @:headerCode("
 | |
| #include <kinc/compute/compute.h>
 | |
| ")
 | |
| @:headerClassCode("
 | |
| #ifdef KORE_OPENGL
 | |
| kinc_shader_storage_buffer buffer;
 | |
| #endif")
 | |
| class ShaderStorageBuffer {
 | |
| 	var data: Array<Int>;
 | |
| 	var myCount: Int;
 | |
| 
 | |
| 	public function new(indexCount: Int, type: VertexData) {
 | |
| 		myCount = indexCount;
 | |
| 		data = new Array<Int>();
 | |
| 		data[myCount - 1] = 0;
 | |
| 		init(indexCount, type);
 | |
| 	}
 | |
| 
 | |
| 	@:functionCode("
 | |
| 	#ifdef KORE_OPENGL
 | |
| 	kinc_g4_vertex_data type2;
 | |
| 	switch (type) {
 | |
| 	case 0:
 | |
| 		type2 = KINC_G4_VERTEX_DATA_FLOAT1;
 | |
| 		break;
 | |
| 	case 1:
 | |
| 		type2 = KINC_G4_VERTEX_DATA_FLOAT2;
 | |
| 		break;
 | |
| 	case 2:
 | |
| 		type2 = KINC_G4_VERTEX_DATA_FLOAT3;
 | |
| 		break;
 | |
| 	case 3:
 | |
| 		type2 = KINC_G4_VERTEX_DATA_FLOAT4;
 | |
| 		break;
 | |
| 	case 4:
 | |
| 		type2 = KINC_G4_VERTEX_DATA_FLOAT4X4;
 | |
| 		break;
 | |
| 	}
 | |
| 	kinc_shader_storage_buffer_init(&buffer, indexCount, type2);
 | |
| 	#endif
 | |
| 	")
 | |
| 	function init(indexCount: Int, type: VertexData) {
 | |
| 		myCount = indexCount;
 | |
| 		data = new Array<Int>();
 | |
| 		data[myCount - 1] = 0;
 | |
| 	}
 | |
| 
 | |
| 	@:functionCode("
 | |
| 		#ifdef KORE_OPENGL
 | |
| 		kinc_shader_storage_buffer_destroy(&buffer);
 | |
| 		#endif
 | |
| 	")
 | |
| 	public function delete(): Void {}
 | |
| 
 | |
| 	public function lock(): Array<Int> {
 | |
| 		return data;
 | |
| 	}
 | |
| 
 | |
| 	@:functionCode("
 | |
| 		#ifdef KORE_OPENGL
 | |
| 		int* indices = kinc_shader_storage_buffer_lock(&buffer);
 | |
| 		for (int i = 0; i < myCount; ++i) {
 | |
| 			indices[i] = data[i];
 | |
| 		}
 | |
| 		kinc_shader_storage_buffer_unlock(&buffer);
 | |
| 		#endif
 | |
| 	")
 | |
| 	public function unlock(): Void {}
 | |
| 
 | |
| 	public function count(): Int {
 | |
| 		return myCount;
 | |
| 	}
 | |
| }
 |