فهرست منبع

minor optimizations

ncannasse 7 سال پیش
والد
کامیت
ca9e7af8e9
2فایلهای تغییر یافته به همراه17 افزوده شده و 5 حذف شده
  1. 3 2
      h3d/impl/Serializable.hx
  2. 14 3
      h3d/mat/Texture.hx

+ 3 - 2
h3d/impl/Serializable.hx

@@ -20,6 +20,7 @@ class SceneSerializer extends hxbit.Serializer {
 	var shaderIndexes = new Map<hxsl.Shader,Int>();
 	var cachedShaders = new Array<hxsl.Shader>();
 	var cachedTextures = new Map<Int,h3d.mat.Texture>();
+	var texOutputFormat : hxd.PixelFormat = RGBA;
 
 	function addTexture( t : h3d.mat.Texture ) {
 		if( t == null ) {
@@ -41,6 +42,7 @@ class SceneSerializer extends hxbit.Serializer {
 		if( t.flags.has(Serialize) ) {
 			addInt(2);
 			var pix = t.capturePixels();
+			pix.convert(texOutputFormat);
 			addInt(t.width);
 			addInt(t.height);
 			addInt(t.flags.toInt());
@@ -298,8 +300,7 @@ class SceneSerializer extends hxbit.Serializer {
 		addString(null);
 		#end
 
-		var objs = includeRoot ? [obj] : [for( o in obj ) o];
-		objs = [for( o in obj ) if( @:privateAccess !o.flags.has(FNoSerialize) ) o];
+		var objs = includeRoot ? [obj] : [for( o in obj ) if( o.allowSerialize ) o];
 		addInt(objs.length);
 		for( o in objs )
 			addAnyRef(o);

+ 14 - 3
h3d/mat/Texture.hx

@@ -180,16 +180,27 @@ class Texture {
 
 	public function clear( color : Int, alpha = 1. ) {
 		alloc();
-		var p = hxd.Pixels.alloc(width, height, BGRA);
+		var p = hxd.Pixels.alloc(width, height, nativeFormat);
 		var k = 0;
 		var b = color & 0xFF, g = (color >> 8) & 0xFF, r = (color >> 16) & 0xFF, a = Std.int(alpha * 255);
 		if( a < 0 ) a = 0 else if( a > 255 ) a = 255;
+		switch( nativeFormat ) {
+		case RGBA:
+		case BGRA:
+			// flip b/r
+			var tmp = r;
+			r = b;
+			b = tmp;
+		default:
+			throw "TODO";
+		}
 		for( i in 0...width * height ) {
-			p.bytes.set(k++,b);
-			p.bytes.set(k++,g);
 			p.bytes.set(k++,r);
+			p.bytes.set(k++,g);
+			p.bytes.set(k++,b);
 			p.bytes.set(k++,a);
 		}
+		if( nativeFlip ) p.flags.set(FlipY);
 		uploadPixels(p);
 		p.dispose();
 	}