瀏覽代碼

refactor shader buffers (screenfx now uses ctx buffers)

Nicolas Cannasse 1 年之前
父節點
當前提交
de955267fd
共有 6 個文件被更改,包括 17 次插入26 次删除
  1. 3 5
      h2d/RenderContext.hx
  2. 3 2
      h3d/impl/RenderContext.hx
  3. 1 4
      h3d/pass/Output.hx
  4. 2 5
      h3d/pass/ScreenFx.hx
  5. 0 1
      h3d/scene/RenderContext.hx
  6. 8 9
      h3d/shader/Buffers.hx

+ 3 - 5
h2d/RenderContext.hx

@@ -82,7 +82,6 @@ class RenderContext extends h3d.impl.RenderContext {
 	var baseShader : h3d.shader.Base2d;
 	var baseShader : h3d.shader.Base2d;
 	var output : h3d.pass.OutputShader;
 	var output : h3d.pass.OutputShader;
 	var compiledShader : hxsl.RuntimeShader;
 	var compiledShader : hxsl.RuntimeShader;
-	var buffers : h3d.shader.Buffers;
 	var fixedBuffer : h3d.Buffer;
 	var fixedBuffer : h3d.Buffer;
 	var pass : h3d.mat.Pass;
 	var pass : h3d.mat.Pass;
 	var currentShaders : hxsl.ShaderList;
 	var currentShaders : hxsl.ShaderList;
@@ -211,10 +210,8 @@ class RenderContext extends h3d.impl.RenderContext {
 	function initShaders( shaders ) {
 	function initShaders( shaders ) {
 		currentShaders = shaders;
 		currentShaders = shaders;
 		compiledShader = output.compileShaders(globals, shaders);
 		compiledShader = output.compileShaders(globals, shaders);
-		if( buffers == null )
-			buffers = new h3d.shader.Buffers(compiledShader);
-		else
-			buffers.grow(compiledShader);
+		var buffers = shaderBuffers;
+		buffers.grow(compiledShader);
 		fillGlobals(buffers, compiledShader);
 		fillGlobals(buffers, compiledShader);
 		engine.selectShader(compiledShader);
 		engine.selectShader(compiledShader);
 		engine.uploadShaderBuffers(buffers, Globals);
 		engine.uploadShaderBuffers(buffers, Globals);
@@ -612,6 +609,7 @@ class RenderContext extends h3d.impl.RenderContext {
 					pass.blendSrc = One;
 					pass.blendSrc = One;
 			}
 			}
 		}
 		}
+		var buffers = shaderBuffers;
 		fillParams(buffers, compiledShader, currentShaders);
 		fillParams(buffers, compiledShader, currentShaders);
 		engine.selectMaterial(pass);
 		engine.selectMaterial(pass);
 		engine.uploadShaderBuffers(buffers, Params);
 		engine.uploadShaderBuffers(buffers, Params);

+ 3 - 2
h3d/impl/RenderContext.hx

@@ -10,6 +10,7 @@ class RenderContext {
 	public var frame : Int;
 	public var frame : Int;
 	public var textures : h3d.impl.TextureCache;
 	public var textures : h3d.impl.TextureCache;
 	public var globals : hxsl.Globals;
 	public var globals : hxsl.Globals;
+	public var shaderBuffers = new h3d.shader.Buffers();
 
 
 	function new() {
 	function new() {
 		engine = h3d.Engine.getCurrent();
 		engine = h3d.Engine.getCurrent();
@@ -213,7 +214,7 @@ class RenderContext {
 			}
 			}
 		}
 		}
 		fill(buf.vertex, s.vertex);
 		fill(buf.vertex, s.vertex);
-		fill(buf.fragment, s.fragment);
+		if( s.fragment != null ) fill(buf.fragment, s.fragment);
 	}
 	}
 
 
 	public function fillParams( buf : h3d.shader.Buffers, s : hxsl.RuntimeShader, shaders : hxsl.ShaderList ) {
 	public function fillParams( buf : h3d.shader.Buffers, s : hxsl.RuntimeShader, shaders : hxsl.ShaderList ) {
@@ -281,7 +282,7 @@ class RenderContext {
 			}
 			}
 		}
 		}
 		fill(buf.vertex, s.vertex);
 		fill(buf.vertex, s.vertex);
-		fill(buf.fragment, s.fragment);
+		if( s.fragment != null ) fill(buf.fragment, s.fragment);
 	}
 	}
 
 
 	static var inst : RenderContext;
 	static var inst : RenderContext;

+ 1 - 4
h3d/pass/Output.hx

@@ -98,10 +98,7 @@ class Output {
 				} else {
 				} else {
 					ctx.engine.selectShader(p.shader);
 					ctx.engine.selectShader(p.shader);
 				}
 				}
-				if( buf == null )
-					buf = ctx.shaderBuffers = new h3d.shader.Buffers(p.shader);
-				else
-					buf.grow(p.shader);
+				buf.grow(p.shader);
 				ctx.fillGlobals(buf, p.shader);
 				ctx.fillGlobals(buf, p.shader);
 				ctx.engine.uploadShaderBuffers(buf, Globals);
 				ctx.engine.uploadShaderBuffers(buf, Globals);
 			}
 			}

+ 2 - 5
h3d/pass/ScreenFx.hx

@@ -8,7 +8,6 @@ class ScreenFx<T:h3d.shader.ScreenShader> {
 	var output : OutputShader;
 	var output : OutputShader;
 	var _engine : h3d.Engine;
 	var _engine : h3d.Engine;
 	var engine(get,never) : h3d.Engine;
 	var engine(get,never) : h3d.Engine;
-	var buffers : h3d.shader.Buffers;
 
 
 	public function new(shader, ?output) {
 	public function new(shader, ?output) {
 		this.shader = shader;
 		this.shader = shader;
@@ -54,10 +53,8 @@ class ScreenFx<T:h3d.shader.ScreenShader> {
 		var rts = output.compileShaders(ctx.globals, shaders);
 		var rts = output.compileShaders(ctx.globals, shaders);
 		engine.selectMaterial(pass);
 		engine.selectMaterial(pass);
 		engine.selectShader(rts);
 		engine.selectShader(rts);
-		if( buffers == null )
-			buffers = new h3d.shader.Buffers(rts);
-		else
-			buffers.grow(rts);
+		var buffers = ctx.shaderBuffers;
+		buffers.grow(rts);
 		ctx.fillGlobals(buffers, rts);
 		ctx.fillGlobals(buffers, rts);
 		ctx.fillParams(buffers, rts, shaders);
 		ctx.fillParams(buffers, rts, shaders);
 		engine.uploadShaderBuffers(buffers, Globals);
 		engine.uploadShaderBuffers(buffers, Globals);

+ 0 - 1
h3d/scene/RenderContext.hx

@@ -23,7 +23,6 @@ class RenderContext extends h3d.impl.RenderContext {
 	public var visibleFlag : Bool;
 	public var visibleFlag : Bool;
 	public var debugCulling : Bool;
 	public var debugCulling : Bool;
 	public var wasContextLost : Bool;
 	public var wasContextLost : Bool;
-	public var shaderBuffers : h3d.shader.Buffers;
 	public var cullingCollider : h3d.col.Collider;
 	public var cullingCollider : h3d.col.Collider;
 
 
 	@global("camera.view") var cameraView : h3d.Matrix;
 	@global("camera.view") var cameraView : h3d.Matrix;

+ 8 - 9
h3d/shader/Buffers.hx

@@ -16,11 +16,10 @@ class ShaderBuffers {
 	public var tex : haxe.ds.Vector<h3d.mat.Texture>;
 	public var tex : haxe.ds.Vector<h3d.mat.Texture>;
 	public var buffers : haxe.ds.Vector<h3d.Buffer>;
 	public var buffers : haxe.ds.Vector<h3d.Buffer>;
 
 
-	public function new( s : hxsl.RuntimeShader.RuntimeShaderData ) {
-		globals = new ShaderBufferData(s.globalsSize<<2);
-		params = new ShaderBufferData(s.paramsSize<<2);
-		tex = new haxe.ds.Vector(s.texturesCount);
-		buffers = s.bufferCount > 0 ? new haxe.ds.Vector(s.bufferCount) : null;
+	public function new() {
+		globals = new ShaderBufferData(0);
+		params = new ShaderBufferData(0);
+		tex = new haxe.ds.Vector(0);
 	}
 	}
 
 
 	public function grow( s : hxsl.RuntimeShader.RuntimeShaderData ) {
 	public function grow( s : hxsl.RuntimeShader.RuntimeShaderData ) {
@@ -41,14 +40,14 @@ class Buffers {
 	public var vertex : ShaderBuffers;
 	public var vertex : ShaderBuffers;
 	public var fragment : ShaderBuffers;
 	public var fragment : ShaderBuffers;
 
 
-	public function new( s : hxsl.RuntimeShader ) {
-		vertex = new ShaderBuffers(s.vertex);
-		fragment = new ShaderBuffers(s.fragment);
+	public function new() {
+		vertex = new ShaderBuffers();
+		fragment = new ShaderBuffers();
 	}
 	}
 
 
 	public inline function grow( s : hxsl.RuntimeShader ) {
 	public inline function grow( s : hxsl.RuntimeShader ) {
 		vertex.grow(s.vertex);
 		vertex.grow(s.vertex);
-		fragment.grow(s.fragment);
+		if( s.fragment != null ) fragment.grow(s.fragment);
 	}
 	}
 }
 }