258 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			258 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								package kha.graphics2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import kha.Color;
							 | 
						||
| 
								 | 
							
								import kha.FastFloat;
							 | 
						||
| 
								 | 
							
								import kha.Font;
							 | 
						||
| 
								 | 
							
								import kha.graphics4.PipelineState;
							 | 
						||
| 
								 | 
							
								import kha.Image;
							 | 
						||
| 
								 | 
							
								import kha.math.FastMatrix3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Graphics {
							 | 
						||
| 
								 | 
							
									public function begin(clear: Bool = true, clearColor: Color = null): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function end(): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function flush(): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// scale-filtering
							 | 
						||
| 
								 | 
							
									// draw/fillPolygon
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function clear(color: Color = null): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function drawImage(img: Image, x: FastFloat, y: FastFloat): Void {
							 | 
						||
| 
								 | 
							
										drawSubImage(img, x, y, 0, 0, img.width, img.height);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * `sx, sy, sw, sh` arguments is the sub-rectangle of the source `img` image
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function drawSubImage(img: Image, x: FastFloat, y: FastFloat, sx: FastFloat, sy: FastFloat, sw: FastFloat, sh: FastFloat): Void {
							 | 
						||
| 
								 | 
							
										drawScaledSubImage(img, sx, sy, sw, sh, x, y, sw, sh);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * `dx, dy, dw, dh` arguments is the rectangle to draw into the destination context
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function drawScaledImage(img: Image, dx: FastFloat, dy: FastFloat, dw: FastFloat, dh: FastFloat): Void {
							 | 
						||
| 
								 | 
							
										drawScaledSubImage(img, 0, 0, img.width, img.height, dx, dy, dw, dh);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * `sx, sy, sw, sh` arguments is the sub-rectangle of the source `img` image
							 | 
						||
| 
								 | 
							
									 * `dx, dy, dw, dh` arguments is the rectangle to draw into the destination context
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function drawScaledSubImage(img: Image, sx: FastFloat, sy: FastFloat, sw: FastFloat, sh: FastFloat, dx: FastFloat, dy: FastFloat, dw: FastFloat,
							 | 
						||
| 
								 | 
							
										dh: FastFloat): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function drawRect(x: Float, y: Float, width: Float, height: Float, strength: Float = 1.0): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function fillRect(x: Float, y: Float, width: Float, height: Float): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Draw a single line of text with the current `color`, `font` and `fontSize` properties.
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * When drawing into rendertargets, you might have to use a different shader than the default one
							 | 
						||
| 
								 | 
							
									 *  - use the default shader when drawing into a transparent section of your rendertarget
							 | 
						||
| 
								 | 
							
									 *  - use a shader with `alphaBlendSource = BlendOne` when drawing into a non-transparent section of your rendertarget
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function drawString(text: String, x: Float, y: Float): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Draw a single line of characters with the current `color`, `font` and `fontSize` properties.
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * When drawing into rendertargets, you might have to use a different shader than the default one
							 | 
						||
| 
								 | 
							
									 *  - use the default shader when drawing into a transparent section of your rendertarget
							 | 
						||
| 
								 | 
							
									 *  - use a shader with `alphaBlendSource = BlendOne` when drawing into a non-transparent section of your rendertarget
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function drawCharacters(text: Array<Int>, start: Int, length: Int, x: Float, y: Float): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function drawLine(x1: Float, y1: Float, x2: Float, y2: Float, strength: Float = 1.0): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function drawVideo(video: Video, x: Float, y: Float, width: Float, height: Float): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function fillTriangle(x1: Float, y1: Float, x2: Float, y2: Float, x3: Float, y3: Float): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var imageScaleQuality(get, set): ImageScaleQuality;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var mipmapScaleQuality(get, set): ImageScaleQuality;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function get_imageScaleQuality(): ImageScaleQuality {
							 | 
						||
| 
								 | 
							
										return ImageScaleQuality.Low;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function set_imageScaleQuality(value: ImageScaleQuality): ImageScaleQuality {
							 | 
						||
| 
								 | 
							
										return ImageScaleQuality.High;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function get_mipmapScaleQuality(): ImageScaleQuality {
							 | 
						||
| 
								 | 
							
										return ImageScaleQuality.Low;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function set_mipmapScaleQuality(value: ImageScaleQuality): ImageScaleQuality {
							 | 
						||
| 
								 | 
							
										return ImageScaleQuality.High;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
										The color value is used for geometric primitives, images, and text. Remember to set it back to white to draw images unaltered.
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public var color(get, set): Color;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function get_color(): Color {
							 | 
						||
| 
								 | 
							
										return Color.Black;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function set_color(color: Color): Color {
							 | 
						||
| 
								 | 
							
										return Color.Black;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var font(get, set): Font;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function get_font(): Font {
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function set_font(font: Font): Font {
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var fontSize(get, set): Int;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function get_fontSize(): Int {
							 | 
						||
| 
								 | 
							
										return myFontSize;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function set_fontSize(value: Int): Int {
							 | 
						||
| 
								 | 
							
										return myFontSize = value;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static var fontGlyphs: Array<Int> = [for (i in 32...256) i];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// works on the top of the transformation stack
							 | 
						||
| 
								 | 
							
									public var transformation(get, set): FastMatrix3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									inline function get_transformation(): FastMatrix3 {
							 | 
						||
| 
								 | 
							
										return transformations[transformationIndex];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									inline function set_transformation(transformation: FastMatrix3): FastMatrix3 {
							 | 
						||
| 
								 | 
							
										setTransformation(transformation);
							 | 
						||
| 
								 | 
							
										transformations[transformationIndex].setFrom(transformation);
							 | 
						||
| 
								 | 
							
										return transformation;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public inline function pushTransformation(trans: FastMatrix3): Void {
							 | 
						||
| 
								 | 
							
										transformationIndex++;
							 | 
						||
| 
								 | 
							
										if (transformationIndex == transformations.length) {
							 | 
						||
| 
								 | 
							
											transformations.push(FastMatrix3.identity());
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										transformations[transformationIndex].setFrom(trans);
							 | 
						||
| 
								 | 
							
										setTransformation(get_transformation());
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function popTransformation(): FastMatrix3 {
							 | 
						||
| 
								 | 
							
										transformationIndex--;
							 | 
						||
| 
								 | 
							
										if (transformationIndex == -1)
							 | 
						||
| 
								 | 
							
											throw "There is no transformation matrix to remove, check your push/popTransformation code";
							 | 
						||
| 
								 | 
							
										setTransformation(get_transformation());
							 | 
						||
| 
								 | 
							
										return transformations[transformationIndex + 1];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function scale(x: FastFloat, y: FastFloat): Void {
							 | 
						||
| 
								 | 
							
										transformation.setFrom(kha.math.FastMatrix3.scale(x, y).multmat(transformation));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function pushScale(x: FastFloat, y: FastFloat): Void {
							 | 
						||
| 
								 | 
							
										final mat = FastMatrix3.scale(x, y).multmat(transformation);
							 | 
						||
| 
								 | 
							
										pushTransformation(mat);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									inline function translation(tx: FastFloat, ty: FastFloat): FastMatrix3 {
							 | 
						||
| 
								 | 
							
										return FastMatrix3.translation(tx, ty).multmat(transformation);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function translate(tx: FastFloat, ty: FastFloat): Void {
							 | 
						||
| 
								 | 
							
										transformation.setFrom(translation(tx, ty));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function pushTranslation(tx: FastFloat, ty: FastFloat): Void {
							 | 
						||
| 
								 | 
							
										pushTransformation(translation(tx, ty));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									inline function rotation(angle: FastFloat, centerx: FastFloat, centery: FastFloat): FastMatrix3 {
							 | 
						||
| 
								 | 
							
										return FastMatrix3.translation(centerx, centery)
							 | 
						||
| 
								 | 
							
											.multmat(FastMatrix3.rotation(angle))
							 | 
						||
| 
								 | 
							
											.multmat(FastMatrix3.translation(-centerx, -centery))
							 | 
						||
| 
								 | 
							
											.multmat(transformation);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function rotate(angle: FastFloat, centerx: FastFloat, centery: FastFloat): Void {
							 | 
						||
| 
								 | 
							
										transformation.setFrom(rotation(angle, centerx, centery));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function pushRotation(angle: FastFloat, centerx: FastFloat, centery: FastFloat): Void {
							 | 
						||
| 
								 | 
							
										pushTransformation(rotation(angle, centerx, centery));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var opacity(get, set): Float; // works on the top of the opacity stack
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function pushOpacity(opacity: Float): Void {
							 | 
						||
| 
								 | 
							
										setOpacity(opacity);
							 | 
						||
| 
								 | 
							
										opacities.push(opacity);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function popOpacity(): Float {
							 | 
						||
| 
								 | 
							
										var ret = opacities.pop();
							 | 
						||
| 
								 | 
							
										setOpacity(get_opacity());
							 | 
						||
| 
								 | 
							
										return ret;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function get_opacity(): Float {
							 | 
						||
| 
								 | 
							
										return opacities[opacities.length - 1];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function set_opacity(opacity: Float): Float {
							 | 
						||
| 
								 | 
							
										setOpacity(opacity);
							 | 
						||
| 
								 | 
							
										return opacities[opacities.length - 1] = opacity;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function scissor(x: Int, y: Int, width: Int, height: Int): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function disableScissor(): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									#if sys_g4
							 | 
						||
| 
								 | 
							
									private var pipe: PipelineState;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var pipeline(get, set): PipelineState;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									private function get_pipeline(): PipelineState {
							 | 
						||
| 
								 | 
							
										return pipe;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									private function set_pipeline(pipeline: PipelineState): PipelineState {
							 | 
						||
| 
								 | 
							
										setPipeline(pipeline);
							 | 
						||
| 
								 | 
							
										return pipe = pipeline;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									#end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									var transformations: Array<FastMatrix3>;
							 | 
						||
| 
								 | 
							
									var transformationIndex: Int;
							 | 
						||
| 
								 | 
							
									var opacities: Array<Float>;
							 | 
						||
| 
								 | 
							
									var myFontSize: Int;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function new() {
							 | 
						||
| 
								 | 
							
										transformations = [FastMatrix3.identity()];
							 | 
						||
| 
								 | 
							
										transformationIndex = 0;
							 | 
						||
| 
								 | 
							
										opacities = [1];
							 | 
						||
| 
								 | 
							
										myFontSize = 12;
							 | 
						||
| 
								 | 
							
										#if sys_g4
							 | 
						||
| 
								 | 
							
										pipe = null;
							 | 
						||
| 
								 | 
							
										#end
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function setTransformation(transformation: FastMatrix3): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function setOpacity(opacity: Float): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function setPipeline(pipeline: PipelineState): Void {}
							 | 
						||
| 
								 | 
							
								}
							 |