2
0
ncannasse 7 жил өмнө
parent
commit
8755313e8b
1 өөрчлөгдсөн 49 нэмэгдсэн , 1 устгасан
  1. 49 1
      hide/view/Image.hx

+ 49 - 1
hide/view/Image.hx

@@ -1,15 +1,63 @@
 package hide.view;
 
+private class ChannelSelectShader extends hxsl.Shader {
+
+	static var SRC = {
+
+		@const var channels : Int;
+		var pixelColor : Vec4;
+
+		function fragment() {
+			switch( channels ) {
+			case 0, 15:
+				// nothing
+			case 1:
+				pixelColor = vec4(pixelColor.rrr, 1.);
+			case 2:
+				pixelColor = vec4(pixelColor.ggg, 1.);
+			case 4:
+				pixelColor = vec4(pixelColor.bbb, 1.);
+			case 8:
+				pixelColor = vec4(pixelColor.aaa, 1.);
+			default:
+				if( channels & 1 == 0 ) pixelColor.r = 0;
+				if( channels & 2 == 0 ) pixelColor.g = 0;
+				if( channels & 4 == 0 ) pixelColor.b = 0;
+				if( channels & 8 == 0 ) pixelColor.a = 1;
+			}
+		}
+
+	}
+
+}
+
 class Image extends FileView {
 
 	var bmp : h2d.Bitmap;
 	var scene : hide.comp.Scene;
 
 	override function onDisplay() {
-		scene = new hide.comp.Scene(props, null, element);
+		element.html('
+			<div class="flex vertical">
+				<div class="toolbar"></div>
+				<div class="scene">
+				</div>
+			</div>
+		');
+		var tools = new hide.comp.Toolbar(null,element.find(".toolbar"));
+		var channelSelect = new ChannelSelectShader();
+		for( i in 0...4 ) {
+			var name = "RGBA".charAt(i);
+			tools.addToggle("", "Channel "+name, name, function(b) {
+				channelSelect.channels &= ~(1 << i);
+				if( b ) channelSelect.channels |= 1 << i;
+			});
+		}
+		scene = new hide.comp.Scene(props, null, element.find(".scene"));
 		scene.onReady = function() {
 			scene.loadTexture(state.path, state.path, function(t) {
 				bmp = new h2d.Bitmap(h2d.Tile.fromTexture(t), scene.s2d);
+				bmp.addShader(channelSelect);
 				onResize();
 			});
 		};