renderObject method
Implementation
void renderObject(RenderObject renderObject) {
final matrix = renderObject.transformationMatrix;
final blendMode = renderObject.blendMode;
final alpha = renderObject.alpha;
final filters = renderObject.filters;
final cache = renderObject.cache;
final mask = renderObject.mask;
final cs1 = _currentContextState!;
final cs2 = _currentContextState!.nextContextState;
final maskBefore = mask != null && mask.relativeToParent == true;
final maskAfter = mask != null && mask.relativeToParent == false;
//-----------
if (maskBefore) renderContext.beginRenderMask(this, mask);
cs2.matrix.copyFromAndConcat(matrix, cs1.matrix);
cs2.blendMode = (blendMode is BlendMode) ? blendMode : cs1.blendMode;
cs2.alpha = alpha * cs1.alpha;
if (renderObject is RenderObject3D && renderContext is RenderContextWebGL) {
final renderObject3D = renderObject;
final renderContextWebGL = renderContext as RenderContextWebGL;
cs1.matrix3D.copyFrom(renderContextWebGL.activeProjectionMatrix);
cs2.matrix3D.copyFrom2DAndConcat(cs2.matrix, cs1.matrix3D);
cs2.matrix3D.prepend(renderObject3D.projectionMatrix3D);
cs2.matrix3D.prependInverse2D(cs2.matrix);
renderContextWebGL.activateProjectionMatrix(cs2.matrix3D);
}
_currentContextState = cs2;
//-----------
if (maskAfter) renderContext.beginRenderMask(this, mask);
if (cache != null) {
renderTextureQuad(cache);
} else if (filters.isNotEmpty) {
renderObject.renderFiltered(this);
} else {
renderObject.render(this);
}
if (maskAfter) renderContext.endRenderMask(this, mask);
//-----------
_currentContextState = cs1;
if (renderObject is RenderObject3D && renderContext is RenderContextWebGL) {
final renderContextWebGL = renderContext as RenderContextWebGL;
renderContextWebGL.activateProjectionMatrix(cs1.matrix3D);
}
if (maskBefore) renderContext.endRenderMask(this, mask);
}