46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								package kha.compute;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import haxe.io.Bytes;
							 | 
						||
| 
								 | 
							
								import kha.Blob;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@:headerCode("
							 | 
						||
| 
								 | 
							
								#include <kinc/compute/compute.h>
							 | 
						||
| 
								 | 
							
								")
							 | 
						||
| 
								 | 
							
								@:headerClassCode("kinc_compute_shader shader;")
							 | 
						||
| 
								 | 
							
								class Shader {
							 | 
						||
| 
								 | 
							
									public function new(sources: Array<Blob>, files: Array<String>) {
							 | 
						||
| 
								 | 
							
										init(sources[0], files[0]);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function init(source: Blob, file: String): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_compute_shader_init(&shader, source->bytes->b->Pointer(), source->get_length());");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function delete(): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_compute_shader_destroy(&shader);");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function getConstantLocation(name: String): ConstantLocation {
							 | 
						||
| 
								 | 
							
										var location = new ConstantLocation();
							 | 
						||
| 
								 | 
							
										initConstantLocation(location, name);
							 | 
						||
| 
								 | 
							
										return location;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("location->location = kinc_compute_shader_get_constant_location(&shader, name.c_str());")
							 | 
						||
| 
								 | 
							
									function initConstantLocation(location: ConstantLocation, name: String): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function getTextureUnit(name: String): TextureUnit {
							 | 
						||
| 
								 | 
							
										var unit = new TextureUnit();
							 | 
						||
| 
								 | 
							
										initTextureUnit(unit, name);
							 | 
						||
| 
								 | 
							
										return unit;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("unit->unit = kinc_compute_shader_get_texture_unit(&shader, name.c_str());")
							 | 
						||
| 
								 | 
							
									function initTextureUnit(unit: TextureUnit, name: String): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:keep
							 | 
						||
| 
								 | 
							
									function _forceInclude(): Void {
							 | 
						||
| 
								 | 
							
										Bytes.alloc(0);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |