Pascal Peridont před 6 roky
rodič
revize
69ea33a3d1
2 změnil soubory, kde provedl 55 přidání a 48 odebrání
  1. 1 1
      h3d/mat/Texture.hx
  2. 54 47
      hxsl/GlslOut.hx

+ 1 - 1
h3d/mat/Texture.hx

@@ -12,7 +12,7 @@ class Texture {
 	public static var nativeFormat(default,never) : TextureFormat =
 		#if flash
 			BGRA
-		#elseif (usesys && !hldx && !hlsdl && !usegl)
+		#elseif (usesys && !hldx && !hlsdl && !usegl && !macro)
 			haxe.GraphicsDriver.nativeFormat
 		#else
 			RGBA

+ 54 - 47
hxsl/GlslOut.hx

@@ -45,6 +45,7 @@ class GlslOut {
 	var isES(get,never) : Bool;
 	var isES2(get,never) : Bool;
 	var uniformBuffer : Int = 0;
+	var outIndex : Int = 0;
 	public var varNames : Map<Int,String>;
 	public var glES : Null<Float>;
 	public var version : Null<Int>;
@@ -527,6 +528,58 @@ class GlslOut {
 		}
 	}
 
+	function initVar( v : TVar ){
+		switch( v.kind ) {
+		case Param, Global:
+			if( v.type.match(TBuffer(_)) )
+				add("layout(std140) ");
+			add("uniform ");
+		case Input:
+			add( isES2 ? "attribute " : "in ");
+		case Var:
+			add( isES2 ? "varying " : (isVertex ? "out " : "in "));
+		case Output:
+			if( isES2 ) {
+				outIndexes.set(v.id, outIndex++);
+				return;
+			}
+			if( isVertex ) return;
+			if( isES )
+				add('layout(location=${outIndex++}) ');
+			add("out ");
+		case Function:
+			return;
+		case Local:
+		}
+		if( v.qualifiers != null )
+			for( q in v.qualifiers )
+				switch( q ) {
+				case Precision(p):
+					switch( p ) {
+					case Low: add("lowp ");
+					case Medium: add("mediump ");
+					case High: add("highp ");
+					}
+				default:
+				}
+		addVar(v);
+		add(";\n");
+	}
+
+	function initVars( s : ShaderData ){
+		outIndex = 0;
+		uniformBuffer = 0;
+		outIndexes = new Map();
+		for( v in s.vars ) 
+			initVar(v);
+		add("\n");
+
+		if( outIndex < 2 )
+			outIndexes = null;
+		else if( !isVertex && isES2 )
+			decl("#extension GL_EXT_draw_buffers : enable");
+	}
+
 	public function run( s : ShaderData ) {
 		locals = new Map();
 		decls = [];
@@ -551,53 +604,7 @@ class GlslOut {
 		if( s.funs.length != 1 ) throw "assert";
 		var f = s.funs[0];
 		isVertex = f.kind == Vertex;
-
-		var outIndex = 0;
-		uniformBuffer = 0;
-		outIndexes = new Map();
-		for( v in s.vars ) {
-			switch( v.kind ) {
-			case Param, Global:
-				if( v.type.match(TBuffer(_)) )
-					add("layout(std140) ");
-				add("uniform ");
-			case Input:
-				add( isES2 ? "attribute " : "in ");
-			case Var:
-				add( isES2 ? "varying " : (isVertex ? "out " : "in "));
-			case Output:
-				if( isES2 ) {
-					outIndexes.set(v.id, outIndex++);
-					continue;
-				}
-				if( isVertex ) continue;
-				if( isES )
-					add('layout(location=${outIndex++}) ');
-				add("out ");
-			case Function:
-				continue;
-			case Local:
-			}
-			if( v.qualifiers != null )
-				for( q in v.qualifiers )
-					switch( q ) {
-					case Precision(p):
-						switch( p ) {
-						case Low: add("lowp ");
-						case Medium: add("mediump ");
-						case High: add("highp ");
-						}
-					default:
-					}
-			addVar(v);
-			add(";\n");
-		}
-		add("\n");
-
-		if( outIndex < 2 )
-			outIndexes = null;
-		else if( !isVertex && isES2 )
-			decl("#extension GL_EXT_draw_buffers : enable");
+		initVars(s);
 
 		var tmp = buf;
 		buf = new StringBuf();