41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package kha.graphics2; | ||
|  | 
 | ||
|  | import haxe.io.Bytes; | ||
|  | import kha.Canvas; | ||
|  | import kha.Color; | ||
|  | import kha.graphics4.TextureFormat; | ||
|  | import kha.graphics4.Usage; | ||
|  | import kha.Image; | ||
|  | 
 | ||
|  | class Graphics1 implements kha.graphics1.Graphics { | ||
|  | 	var canvas: Canvas; | ||
|  | 	var texture: Image; | ||
|  | 	var pixels: Bytes; | ||
|  | 
 | ||
|  | 	public function new(canvas: Canvas) { | ||
|  | 		this.canvas = canvas; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public function begin(): Void { | ||
|  | 		if (texture == null || (texture.realWidth != canvas.width || texture.realHeight != canvas.height)) { | ||
|  | 			texture = Image.create(canvas.width, canvas.height, TextureFormat.RGBA32, Usage.ReadableUsage); | ||
|  | 		} | ||
|  | 		pixels = texture.lock(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public function end(): Void { | ||
|  | 		texture.unlock(); | ||
|  | 		canvas.g2.begin(false); | ||
|  | 		canvas.g2.drawImage(texture, 0, 0); | ||
|  | 		canvas.g2.end(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public function setPixel(x: Int, y: Int, color: Color): Void { | ||
|  | 		#if (kha_html5 || kha_krom) | ||
|  | 		pixels.setInt32(y * texture.stride + x * 4, Color.fromBytes(color.Bb, color.Gb, color.Rb, color.Ab)); | ||
|  | 		#else | ||
|  | 		pixels.setInt32(y * texture.stride + x * 4, color); | ||
|  | 		#end | ||
|  | 	} | ||
|  | } |