renderTriangle method

void renderTriangle(
  1. RenderState renderState,
  2. num x1,
  3. num y1,
  4. num x2,
  5. num y2,
  6. num x3,
  7. num y3,
  8. int color,
)

Implementation

void renderTriangle(RenderState renderState, num x1, num y1, num x2, num y2,
    num x3, num y3, int color) {
  final matrix = renderState.globalMatrix;
  final alpha = renderState.globalAlpha;
  const indexCount = 3;
  const vertexCount = 3;

  // check buffer sizes and flush if necessary

  final ixData = renderBufferIndex.data;
  final ixPosition = renderBufferIndex.position;
  if (ixPosition + indexCount >= ixData.length) flush();

  final vxData = renderBufferVertex.data;
  final vxPosition = renderBufferVertex.position;
  if (vxPosition + vertexCount * 6 >= vxData.length) flush();

  final ixIndex = renderBufferIndex.position;
  final vxIndex = renderBufferVertex.position;
  final vxCount = renderBufferVertex.count;

  // fill index buffer

  ixData[ixIndex + 0] = vxCount + 0;
  ixData[ixIndex + 1] = vxCount + 1;
  ixData[ixIndex + 2] = vxCount + 2;

  renderBufferIndex.position += indexCount;
  renderBufferIndex.count += indexCount;

  // fill vertex buffer

  final ma = matrix.a;
  final mb = matrix.b;
  final mc = matrix.c;
  final md = matrix.d;
  final mx = matrix.tx;
  final my = matrix.ty;

  const colorScale = 1 / 255.0;
  final colorA = colorScale * colorGetA(color) * alpha;
  final colorR = colorScale * colorGetR(color) * colorA;
  final colorG = colorScale * colorGetG(color) * colorA;
  final colorB = colorScale * colorGetB(color) * colorA;

  vxData[vxIndex + 00] = x1 * ma + y1 * mc + mx;
  vxData[vxIndex + 01] = x1 * mb + y1 * md + my;
  vxData[vxIndex + 02] = colorR;
  vxData[vxIndex + 03] = colorG;
  vxData[vxIndex + 04] = colorB;
  vxData[vxIndex + 05] = colorA;

  vxData[vxIndex + 06] = x2 * ma + y2 * mc + mx;
  vxData[vxIndex + 07] = x2 * mb + y2 * md + my;
  vxData[vxIndex + 08] = colorR;
  vxData[vxIndex + 09] = colorG;
  vxData[vxIndex + 10] = colorB;
  vxData[vxIndex + 11] = colorA;

  vxData[vxIndex + 12] = x3 * ma + y3 * mc + mx;
  vxData[vxIndex + 13] = x3 * mb + y3 * md + my;
  vxData[vxIndex + 14] = colorR;
  vxData[vxIndex + 15] = colorG;
  vxData[vxIndex + 16] = colorB;
  vxData[vxIndex + 17] = colorA;

  renderBufferVertex.position += vertexCount * 6;
  renderBufferVertex.count += vertexCount;
}