瀏覽代碼

minor fix/workaround for xbo buffers unqueue

Nicolas Cannasse 5 年之前
父節點
當前提交
518acc7646
共有 1 個文件被更改,包括 2 次插入0 次删除
  1. 2 0
      hxd/snd/Manager.hx

+ 2 - 0
hxd/snd/Manager.hx

@@ -297,6 +297,7 @@ class Manager {
 			var count = driver.getProcessedBuffers(s.handle);
 			var count = driver.getProcessedBuffers(s.handle);
 			for (i in 0...count) {
 			for (i in 0...count) {
 				var b = unqueueBuffer(s);
 				var b = unqueueBuffer(s);
+				if( b == null ) continue;
 				lastBuffer = b;
 				lastBuffer = b;
 				if (b.isEnd) {
 				if (b.isEnd) {
 					c.sound           = b.sound;
 					c.sound           = b.sound;
@@ -594,6 +595,7 @@ class Manager {
 
 
 	function unqueueBuffer(s : Source) {
 	function unqueueBuffer(s : Source) {
 		var b = s.buffers.shift();
 		var b = s.buffers.shift();
+		if( b == null ) return null; // some drivers (xbo) might wrongly report ended buffer after source stop, let's ignore
 		driver.unqueueBuffer(s.handle, b.handle);
 		driver.unqueueBuffer(s.handle, b.handle);
 		if (b.isStream) freeStreamBuffers.unshift(b);
 		if (b.isStream) freeStreamBuffers.unshift(b);
 		else if (--b.refs == 0) b.lastStop = haxe.Timer.stamp();
 		else if (--b.refs == 0) b.lastStop = haxe.Timer.stamp();