Ejemplo n.º 1
0
void InnerGlowStyle::operator() (Pixels destPixels, Pixels maskPixels)
{
  if (!active)
    return;

  SharedTable <Colour> table;
  
  if (reverse)
    table = colours.withReversedStops().createLookupTable ();
  else
    table = colours.createLookupTable ();

#if 1
  // Anti-Aliased
  //
  DistanceTransform::Meijster::calculateAntiAliased (
    RenderPixelAntiAliased (
      destPixels,
      opacity,
      choke,
      size,
      table),
    GetMask (maskPixels),
    maskPixels.getWidth (),
    maskPixels.getHeight (),
    DistanceTransform::Meijster::EuclideanMetric ());
#else
  // Regular
  //
  DistanceTransform::Meijster::calculate (
    RenderPixel (
      destPixels,
      opacity,
      choke,
      size,
      table),
    TestMask (maskPixels),
    maskPixels.getWidth (),
    maskPixels.getHeight (),
    DistanceTransform::Meijster::EuclideanMetric ());
#endif
}
Ejemplo n.º 2
0
void GPUDrawScanlineCodeGenerator::Generate()
{
	push(esi);
	push(edi);

	Init();

	align(16);

L("loop");

	// GSVector4i test = m_test[7 + (steps & (steps >> 31))];

	mov(edx, ecx);
	sar(edx, 31);
	and(edx, ecx);
	shl(edx, 4);

	movdqa(xmm7, ptr[edx + (size_t)&m_test[7]]);

	// movdqu(xmm1, ptr[edi]);

	movq(xmm1, qword[edi]);
	movhps(xmm1, qword[edi + 8]);

	// ecx = steps
	// esi = tex (tme)
	// edi = fb
	// xmm1 = fd
	// xmm2 = s
	// xmm3 = t
	// xmm4 = r
	// xmm5 = g
	// xmm6 = b
	// xmm7 = test

	TestMask();

	SampleTexture();

	// xmm1 = fd
	// xmm3 = a
	// xmm4 = r
	// xmm5 = g
	// xmm6 = b
	// xmm7 = test
	// xmm0, xmm2 = free

	ColorTFX();

	AlphaBlend();

	Dither();

	WriteFrame();

L("step");

	// if(steps <= 0) break;

	test(ecx, ecx);
	jle("exit", T_NEAR);

	Step();

	jmp("loop", T_NEAR);

L("exit");

	pop(edi);
	pop(esi);

	ret(8);
}