private void _InternalRender(IVertexSource vertexSource, RGBA_Bytes color) { if (_clipBuffer != null) { // DEBUG_saveImageBuffer(_clipBuffer); // DEBUG_saveImageBuffer(this.imb); IAlphaMask alphaMask = new AlphaMaskByteClipped(_clipBuffer, 1, 0); AlphaMaskAdaptor imageAlphaMaskAdaptor = new AlphaMaskAdaptor(aggGc.DestImage, alphaMask); ImageClippingProxy alphaMaskClippingProxy = new ImageClippingProxy(imageAlphaMaskAdaptor); var scanlineRenderer = new ScanlineRenderer(); var rasterizer = new ScanlineRasterizer(); var scanlineCache = new ScanlineCachePacked8(); VertexSourceApplyTransform trans = new VertexSourceApplyTransform(vertexSource, aggGc.GetTransform()); rasterizer.add_path(trans); scanlineRenderer.render_scanlines_aa_solid(alphaMaskClippingProxy, rasterizer, scanlineCache, color); aggGc.DestImage.MarkImageChanged(); } else { aggGc.Render(vertexSource, color); } }
internal void render_gouraud(IImageByte backBuffer, IScanlineCache sl, IRasterizer ras, RenderPoint[] points) { ImageBuffer image = new ImageBuffer(); image.Attach(backBuffer, new BlenderZBuffer()); ImageClippingProxy ren_base = new ImageClippingProxy(image); MatterHackers.Agg.span_allocator span_alloc = new span_allocator(); span_gouraud_rgba span_gen = new span_gouraud_rgba(); span_gen.colors(points[0].color, points[1].color, points[2].color); span_gen.triangle(points[0].position.x, points[0].position.y, points[1].position.x, points[1].position.y, points[2].position.x, points[2].position.y); ras.add_path(span_gen); ScanlineRenderer scanlineRenderer = new ScanlineRenderer(); scanlineRenderer.GenerateAndRender(ras, sl, ren_base, span_alloc, span_gen); }