added support for textures without premultiplied alpha

This commit is contained in:
Daniel Sperl 2014-11-03 12:19:49 +01:00
parent df792f3d59
commit 0dc21d23c0

View File

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