瀏覽代碼

Merge pull request #318 from PrimaryFeather/atf-support

[Starling] added support for textures without premultiplied alpha
Nathan Sweet 11 年之前
父節點
當前提交
e1599143b5
共有 1 個文件被更改,包括 10 次插入5 次删除
  1. 10 5
      spine-starling/spine-starling/src/spine/starling/PolygonBatch.as

+ 10 - 5
spine-starling/spine-starling/src/spine/starling/PolygonBatch.as

@@ -63,6 +63,7 @@ internal class PolygonBatch {
 	private var _programBits:uint;
 	private var _blendMode:String;
 	private var _additive:Boolean;
+	private var _alpha:Number;
 
 	private var _verticesCount:int;
 	private var _vertices:Vector.<Number> = new <Number>[];
@@ -85,18 +86,15 @@ internal class PolygonBatch {
 
 	public function begin (support:RenderSupport, alpha:Number, blendMode:String) : void {
 		_support = support;
-		_renderAlpha[3] = alpha;
+		_alpha = alpha;
 		_programBits = 0xffffffff;
+		_additive = false;
 
 		support.finishQuadBatch();
-
 		support.blendMode = blendMode;
-		support.applyBlendMode(true);
 		_blendMode = support.blendMode;
-		_additive = false;
 
 		var context:Context3D = Starling.context;
-		context.setProgramConstantsFromVector(Context3DProgramType.VERTEX, 0, _renderAlpha, 1);
 		context.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 1, support.mvpMatrix3D, true);
 
 		var verticesBuffer:VertexBuffer3D = _verticesBuffer;
@@ -217,6 +215,13 @@ internal class PolygonBatch {
 			_trianglesBuffer.uploadFromVector(_triangles, 0, _trianglesCount);
 		}
 
+		var pma:Boolean = _texture ? _texture.premultipliedAlpha : true;
+		_renderAlpha[0] = _renderAlpha[1] = _renderAlpha[2] = pma ? _alpha : 1.0;
+		_renderAlpha[3] = _alpha;
+
+		_support.applyBlendMode(pma);
+		context.setProgramConstantsFromVector(Context3DProgramType.VERTEX, 0, _renderAlpha, 1);
+
 		setProgram(context);
 		context.setTextureAt(0, _texture.base);
 		context.drawTriangles(_trianglesBuffer, 0, _trianglesCount / 3);