314 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			314 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								package kha.graphics4;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import kha.graphics4.FragmentShader;
							 | 
						||
| 
								 | 
							
								import kha.graphics4.VertexData;
							 | 
						||
| 
								 | 
							
								import kha.graphics4.VertexElement;
							 | 
						||
| 
								 | 
							
								import kha.graphics4.VertexShader;
							 | 
						||
| 
								 | 
							
								import kha.graphics4.VertexStructure;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@:headerCode("
							 | 
						||
| 
								 | 
							
								#include <kinc/graphics4/graphics.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/graphics4/pipeline.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/graphics4/vertexstructure.h>
							 | 
						||
| 
								 | 
							
								#include <khalib/g4.h>
							 | 
						||
| 
								 | 
							
								")
							 | 
						||
| 
								 | 
							
								@:cppFileCode("
							 | 
						||
| 
								 | 
							
								static kinc_g4_compare_mode_t convertCompareMode(int mode) {
							 | 
						||
| 
								 | 
							
									switch (mode) {
							 | 
						||
| 
								 | 
							
									case 0:
							 | 
						||
| 
								 | 
							
										return KINC_G4_COMPARE_ALWAYS;
							 | 
						||
| 
								 | 
							
									case 1:
							 | 
						||
| 
								 | 
							
										return KINC_G4_COMPARE_NEVER;
							 | 
						||
| 
								 | 
							
									case 2:
							 | 
						||
| 
								 | 
							
										return KINC_G4_COMPARE_EQUAL;
							 | 
						||
| 
								 | 
							
									case 3:
							 | 
						||
| 
								 | 
							
										return KINC_G4_COMPARE_NOT_EQUAL;
							 | 
						||
| 
								 | 
							
									case 4:
							 | 
						||
| 
								 | 
							
										return KINC_G4_COMPARE_LESS;
							 | 
						||
| 
								 | 
							
									case 5:
							 | 
						||
| 
								 | 
							
										return KINC_G4_COMPARE_LESS_EQUAL;
							 | 
						||
| 
								 | 
							
									case 6:
							 | 
						||
| 
								 | 
							
										return KINC_G4_COMPARE_GREATER;
							 | 
						||
| 
								 | 
							
									case 7:
							 | 
						||
| 
								 | 
							
									default:
							 | 
						||
| 
								 | 
							
										return KINC_G4_COMPARE_GREATER_EQUAL;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static kinc_g4_stencil_action_t convertStencilAction(int action) {
							 | 
						||
| 
								 | 
							
									switch (action) {
							 | 
						||
| 
								 | 
							
									case 0:
							 | 
						||
| 
								 | 
							
										return KINC_G4_STENCIL_KEEP;
							 | 
						||
| 
								 | 
							
									case 1:
							 | 
						||
| 
								 | 
							
										return KINC_G4_STENCIL_ZERO;
							 | 
						||
| 
								 | 
							
									case 2:
							 | 
						||
| 
								 | 
							
										return KINC_G4_STENCIL_REPLACE;
							 | 
						||
| 
								 | 
							
									case 3:
							 | 
						||
| 
								 | 
							
										return KINC_G4_STENCIL_INCREMENT;
							 | 
						||
| 
								 | 
							
									case 4:
							 | 
						||
| 
								 | 
							
										return KINC_G4_STENCIL_INCREMENT_WRAP;
							 | 
						||
| 
								 | 
							
									case 5:
							 | 
						||
| 
								 | 
							
										return KINC_G4_STENCIL_DECREMENT;
							 | 
						||
| 
								 | 
							
									case 6:
							 | 
						||
| 
								 | 
							
										return KINC_G4_STENCIL_DECREMENT_WRAP;
							 | 
						||
| 
								 | 
							
									case 7:
							 | 
						||
| 
								 | 
							
									default:
							 | 
						||
| 
								 | 
							
										return KINC_G4_STENCIL_INVERT;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static kinc_g4_render_target_format_t convertColorAttachment(int format) {
							 | 
						||
| 
								 | 
							
									switch (format) {
							 | 
						||
| 
								 | 
							
									case 0:
							 | 
						||
| 
								 | 
							
										return KINC_G4_RENDER_TARGET_FORMAT_32BIT;
							 | 
						||
| 
								 | 
							
									case 1:
							 | 
						||
| 
								 | 
							
										return KINC_G4_RENDER_TARGET_FORMAT_8BIT_RED;
							 | 
						||
| 
								 | 
							
									case 2:
							 | 
						||
| 
								 | 
							
										return KINC_G4_RENDER_TARGET_FORMAT_128BIT_FLOAT;
							 | 
						||
| 
								 | 
							
									case 3:
							 | 
						||
| 
								 | 
							
										return KINC_G4_RENDER_TARGET_FORMAT_16BIT_DEPTH;
							 | 
						||
| 
								 | 
							
									case 4:
							 | 
						||
| 
								 | 
							
										return KINC_G4_RENDER_TARGET_FORMAT_64BIT_FLOAT;
							 | 
						||
| 
								 | 
							
									case 5:
							 | 
						||
| 
								 | 
							
										return KINC_G4_RENDER_TARGET_FORMAT_32BIT_RED_FLOAT;
							 | 
						||
| 
								 | 
							
									case 6:
							 | 
						||
| 
								 | 
							
									default:
							 | 
						||
| 
								 | 
							
										return KINC_G4_RENDER_TARGET_FORMAT_16BIT_RED_FLOAT;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								")
							 | 
						||
| 
								 | 
							
								@:headerClassCode("kinc_g4_pipeline_t pipeline;")
							 | 
						||
| 
								 | 
							
								@:keep
							 | 
						||
| 
								 | 
							
								class PipelineState extends PipelineStateBase {
							 | 
						||
| 
								 | 
							
									public function new() {
							 | 
						||
| 
								 | 
							
										super();
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_g4_pipeline_init(&pipeline);");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function delete(): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_g4_pipeline_destroy(&pipeline);");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("
							 | 
						||
| 
								 | 
							
										pipeline.vertex_shader = &vertexShader->shader;
							 | 
						||
| 
								 | 
							
										pipeline.fragment_shader = &fragmentShader->shader;
							 | 
						||
| 
								 | 
							
										if (geometryShader != null()) pipeline.geometry_shader = &geometryShader->shader;
							 | 
						||
| 
								 | 
							
										if (tessellationControlShader != null()) pipeline.tessellation_control_shader = &tessellationControlShader->shader;
							 | 
						||
| 
								 | 
							
										if (tessellationEvaluationShader != null()) pipeline.tessellation_evaluation_shader = &tessellationEvaluationShader->shader;
							 | 
						||
| 
								 | 
							
										kinc_g4_vertex_structure_t s0, s1, s2, s3;
							 | 
						||
| 
								 | 
							
										kinc_g4_vertex_structure_t* structures2[4] = { &s0, &s1, &s2, &s3 };
							 | 
						||
| 
								 | 
							
										::kha::graphics4::VertexStructure* structures[4] = { &structure0, &structure1, &structure2, &structure3 };
							 | 
						||
| 
								 | 
							
										for (int i1 = 0; i1 < size; ++i1) {
							 | 
						||
| 
								 | 
							
											kinc_g4_vertex_structure_init(structures2[i1]);
							 | 
						||
| 
								 | 
							
											structures2[i1]->instanced = (*structures[i1])->instanced;
							 | 
						||
| 
								 | 
							
											for (int i2 = 0; i2 < (*structures[i1])->size(); ++i2) {
							 | 
						||
| 
								 | 
							
												kinc_g4_vertex_data_t data = kha_convert_vertex_data((*structures[i1])->get(i2)->data);
							 | 
						||
| 
								 | 
							
												pipeline.input_layout[i1] = structures2[i1];
							 | 
						||
| 
								 | 
							
												kinc_g4_vertex_structure_add(pipeline.input_layout[i1], (*structures[i1])->get(i2)->name, data);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										for (int i = size; i < 16; ++i) {
							 | 
						||
| 
								 | 
							
											pipeline.input_layout[i] = nullptr;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										kinc_g4_pipeline_compile(&pipeline);
							 | 
						||
| 
								 | 
							
									")
							 | 
						||
| 
								 | 
							
									function linkWithStructures2(structure0: VertexStructure, structure1: VertexStructure, structure2: VertexStructure, structure3: VertexStructure,
							 | 
						||
| 
								 | 
							
										size: Int): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									static function getDepthBufferBits(depthAndStencil: DepthStencilFormat): Int {
							 | 
						||
| 
								 | 
							
										return switch (depthAndStencil) {
							 | 
						||
| 
								 | 
							
											case NoDepthAndStencil: 0;
							 | 
						||
| 
								 | 
							
											case DepthOnly: 24;
							 | 
						||
| 
								 | 
							
											case DepthAutoStencilAuto: 24;
							 | 
						||
| 
								 | 
							
											case Depth24Stencil8: 24;
							 | 
						||
| 
								 | 
							
											case Depth32Stencil8: 32;
							 | 
						||
| 
								 | 
							
											case Depth16: 16;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									static function getStencilBufferBits(depthAndStencil: DepthStencilFormat): Int {
							 | 
						||
| 
								 | 
							
										return switch (depthAndStencil) {
							 | 
						||
| 
								 | 
							
											case NoDepthAndStencil: 0;
							 | 
						||
| 
								 | 
							
											case DepthOnly: 0;
							 | 
						||
| 
								 | 
							
											case DepthAutoStencilAuto: 8;
							 | 
						||
| 
								 | 
							
											case Depth24Stencil8: 8;
							 | 
						||
| 
								 | 
							
											case Depth32Stencil8: 8;
							 | 
						||
| 
								 | 
							
											case Depth16: 0;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function compile(): Void {
							 | 
						||
| 
								 | 
							
										var stencilReferenceValue = switch (this.stencilReferenceValue) {
							 | 
						||
| 
								 | 
							
											case Static(value): value;
							 | 
						||
| 
								 | 
							
											default: 0;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										setStates(cullMode, depthMode, stencilFrontMode, stencilFrontBothPass, stencilFrontDepthFail, stencilFrontFail, stencilBackMode, stencilBackBothPass,
							 | 
						||
| 
								 | 
							
											stencilBackDepthFail, stencilBackFail, depthWrite, stencilReferenceValue, getBlendFactor(blendSource), getBlendFactor(blendDestination),
							 | 
						||
| 
								 | 
							
											getBlendOperation(blendOperation), getBlendFactor(alphaBlendSource), getBlendFactor(alphaBlendDestination),
							 | 
						||
| 
								 | 
							
											getBlendOperation(alphaBlendOperation), getDepthBufferBits(depthStencilAttachment), getStencilBufferBits(depthStencilAttachment));
							 | 
						||
| 
								 | 
							
										linkWithStructures2(inputLayout.length > 0 ? inputLayout[0] : null, inputLayout.length > 1 ? inputLayout[1] : null,
							 | 
						||
| 
								 | 
							
											inputLayout.length > 2 ? inputLayout[2] : null, inputLayout.length > 3 ? inputLayout[3] : null, inputLayout.length);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function getConstantLocation(name: String): kha.graphics4.ConstantLocation {
							 | 
						||
| 
								 | 
							
										var location = new kha.kore.graphics4.ConstantLocation();
							 | 
						||
| 
								 | 
							
										initConstantLocation(location, name);
							 | 
						||
| 
								 | 
							
										return location;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("location->location = kinc_g4_pipeline_get_constant_location(&pipeline, name.c_str());")
							 | 
						||
| 
								 | 
							
									function initConstantLocation(location: kha.kore.graphics4.ConstantLocation, name: String): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function getTextureUnit(name: String): kha.graphics4.TextureUnit {
							 | 
						||
| 
								 | 
							
										var unit = new kha.kore.graphics4.TextureUnit();
							 | 
						||
| 
								 | 
							
										initTextureUnit(unit, name);
							 | 
						||
| 
								 | 
							
										return unit;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("unit->unit = kinc_g4_pipeline_get_texture_unit(&pipeline, name.c_str());")
							 | 
						||
| 
								 | 
							
									function initTextureUnit(unit: kha.kore.graphics4.TextureUnit, name: String): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									static function getBlendFactor(factor: BlendingFactor): Int {
							 | 
						||
| 
								 | 
							
										switch (factor) {
							 | 
						||
| 
								 | 
							
											case BlendOne, Undefined:
							 | 
						||
| 
								 | 
							
												return 0;
							 | 
						||
| 
								 | 
							
											case BlendZero:
							 | 
						||
| 
								 | 
							
												return 1;
							 | 
						||
| 
								 | 
							
											case SourceAlpha:
							 | 
						||
| 
								 | 
							
												return 2;
							 | 
						||
| 
								 | 
							
											case DestinationAlpha:
							 | 
						||
| 
								 | 
							
												return 3;
							 | 
						||
| 
								 | 
							
											case InverseSourceAlpha:
							 | 
						||
| 
								 | 
							
												return 4;
							 | 
						||
| 
								 | 
							
											case InverseDestinationAlpha:
							 | 
						||
| 
								 | 
							
												return 5;
							 | 
						||
| 
								 | 
							
											case SourceColor:
							 | 
						||
| 
								 | 
							
												return 6;
							 | 
						||
| 
								 | 
							
											case DestinationColor:
							 | 
						||
| 
								 | 
							
												return 7;
							 | 
						||
| 
								 | 
							
											case InverseSourceColor:
							 | 
						||
| 
								 | 
							
												return 8;
							 | 
						||
| 
								 | 
							
											case InverseDestinationColor:
							 | 
						||
| 
								 | 
							
												return 9;
							 | 
						||
| 
								 | 
							
											default:
							 | 
						||
| 
								 | 
							
												return 0;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									static function getBlendOperation(factor: BlendingOperation): Int {
							 | 
						||
| 
								 | 
							
										switch (factor) {
							 | 
						||
| 
								 | 
							
											case Add:
							 | 
						||
| 
								 | 
							
												return 0;
							 | 
						||
| 
								 | 
							
											case Subtract:
							 | 
						||
| 
								 | 
							
												return 1;
							 | 
						||
| 
								 | 
							
											case ReverseSubtract:
							 | 
						||
| 
								 | 
							
												return 2;
							 | 
						||
| 
								 | 
							
											case Min:
							 | 
						||
| 
								 | 
							
												return 3;
							 | 
						||
| 
								 | 
							
											case Max:
							 | 
						||
| 
								 | 
							
												return 4;
							 | 
						||
| 
								 | 
							
											default:
							 | 
						||
| 
								 | 
							
												return 0;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("
							 | 
						||
| 
								 | 
							
										switch (cullMode) {
							 | 
						||
| 
								 | 
							
										case 0:
							 | 
						||
| 
								 | 
							
											pipeline.cull_mode = KINC_G4_CULL_CLOCKWISE;
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
										case 1:
							 | 
						||
| 
								 | 
							
											pipeline.cull_mode = KINC_G4_CULL_COUNTER_CLOCKWISE;
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
										case 2:
							 | 
						||
| 
								 | 
							
											pipeline.cull_mode = KINC_G4_CULL_NOTHING;
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										pipeline.depth_mode = convertCompareMode(depthMode);
							 | 
						||
| 
								 | 
							
										pipeline.depth_write = depthWrite;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										pipeline.stencil_front_mode = convertCompareMode(stencilFrontMode);
							 | 
						||
| 
								 | 
							
										pipeline.stencil_front_both_pass = convertStencilAction(stencilFrontBothPass);
							 | 
						||
| 
								 | 
							
										pipeline.stencil_front_depth_fail = convertStencilAction(stencilFrontDepthFail);
							 | 
						||
| 
								 | 
							
										pipeline.stencil_front_fail = convertStencilAction(stencilFrontFail);
							 | 
						||
| 
								 | 
							
										pipeline.stencil_back_mode = convertCompareMode(stencilBackMode);
							 | 
						||
| 
								 | 
							
										pipeline.stencil_back_both_pass = convertStencilAction(stencilBackBothPass);
							 | 
						||
| 
								 | 
							
										pipeline.stencil_back_depth_fail = convertStencilAction(stencilBackDepthFail);
							 | 
						||
| 
								 | 
							
										pipeline.stencil_back_fail = convertStencilAction(stencilBackFail);
							 | 
						||
| 
								 | 
							
										pipeline.stencil_reference_value = stencilReferenceValue;
							 | 
						||
| 
								 | 
							
										pipeline.stencil_read_mask = stencilReadMask;
							 | 
						||
| 
								 | 
							
										pipeline.stencil_write_mask = stencilWriteMask;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										pipeline.blend_source = (kinc_g4_blending_factor_t)blendSource;
							 | 
						||
| 
								 | 
							
										pipeline.blend_destination = (kinc_g4_blending_factor_t)blendDestination;
							 | 
						||
| 
								 | 
							
										pipeline.blend_operation = (kinc_g4_blending_operation_t)blendOperation;
							 | 
						||
| 
								 | 
							
										pipeline.alpha_blend_source = (kinc_g4_blending_factor_t)alphaBlendSource;
							 | 
						||
| 
								 | 
							
										pipeline.alpha_blend_destination = (kinc_g4_blending_factor_t)alphaBlendDestination;
							 | 
						||
| 
								 | 
							
										pipeline.alpha_blend_operation = (kinc_g4_blending_operation_t)alphaBlendOperation;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										for (int i = 0; i < 8; ++i) {
							 | 
						||
| 
								 | 
							
											pipeline.color_write_mask_red[i] = colorWriteMasksRed[i];
							 | 
						||
| 
								 | 
							
											pipeline.color_write_mask_green[i] = colorWriteMasksGreen[i];
							 | 
						||
| 
								 | 
							
											pipeline.color_write_mask_blue[i] = colorWriteMasksBlue[i];
							 | 
						||
| 
								 | 
							
											pipeline.color_write_mask_alpha[i] = colorWriteMasksAlpha[i];
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										pipeline.color_attachment_count = colorAttachmentCount;
							 | 
						||
| 
								 | 
							
										for (int i = 0; i < 8; ++i) {
							 | 
						||
| 
								 | 
							
											pipeline.color_attachment[i] = convertColorAttachment(colorAttachments[i]);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										pipeline.depth_attachment_bits = depthAttachmentBits;
							 | 
						||
| 
								 | 
							
										pipeline.stencil_attachment_bits = stencilAttachmentBits;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										pipeline.conservative_rasterization = conservativeRasterization;
							 | 
						||
| 
								 | 
							
									")
							 | 
						||
| 
								 | 
							
									function setStates(cullMode: Int, depthMode: Int, stencilFrontMode: Int, stencilFrontBothPass: Int, stencilFrontDepthFail: Int, stencilFrontFail: Int,
							 | 
						||
| 
								 | 
							
										stencilBackMode: Int, stencilBackBothPass: Int, stencilBackDepthFail: Int, stencilBackFail: Int, depthWrite: Bool, stencilReferenceValue: Int,
							 | 
						||
| 
								 | 
							
										blendSource: Int, blendDestination: Int, blendOperation: Int, alphaBlendSource: Int, alphaBlendDestination: Int, alphaBlendOperation: Int,
							 | 
						||
| 
								 | 
							
										depthAttachmentBits: Int, stencilAttachmentBits: Int): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("kinc_g4_set_pipeline(&pipeline);")
							 | 
						||
| 
								 | 
							
									function set2(): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function set(): Void {
							 | 
						||
| 
								 | 
							
										set2();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:noCompletion
							 | 
						||
| 
								 | 
							
									public static function _unused1(): VertexElement {
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:noCompletion
							 | 
						||
| 
								 | 
							
									public static function _unused2(): VertexData {
							 | 
						||
| 
								 | 
							
										return VertexData.Float32_1X;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:noCompletion
							 | 
						||
| 
								 | 
							
									public static function _unused3(): VertexShader {
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:noCompletion
							 | 
						||
| 
								 | 
							
									public static function _unused4(): FragmentShader {
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:noCompletion
							 | 
						||
| 
								 | 
							
									public static function _unused5(): GeometryShader {
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:noCompletion
							 | 
						||
| 
								 | 
							
									public static function _unused6(): TessellationControlShader {
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:noCompletion
							 | 
						||
| 
								 | 
							
									public static function _unused7(): TessellationEvaluationShader {
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |