private void btnDrawWithMask_Click(object sender, EventArgs e) { //clear background drawer.Clear(Colors.White); //render hint for mask region DrawMaskRegion(); //create an opacity mask MaskBuffer mask = new MaskBuffer(buffer.Width, buffer.Height); double[] coordinates = TestFactory.Star(); TestFactory.Scale(coordinates, 8.0); Fill fill = Fills.Black; MaskDrawer maskDrawer = new MaskDrawer(mask); maskDrawer.DrawPolygon(fill, coordinates); //render the lion using the opacity mask drawer.Mask = mask; DrawLion(); //show to screen DisplayBuffer(buffer); //reset opacity mask so that other tests aren't afffected drawer.Mask = null; }
/// <summary> /// Preparing buffer and internal data for using /// </summary> /// <param name="buffer">buffer</param> protected virtual void PrepareBuffer(MaskBuffer buffer) { //automatically create a new boundary to match this buffer if (buffer == null) { //mBoundary = Boundary.Empty; DestBufferWidth = 0; DestBufferHeight = 0; //maskst = 0; //BufferStartOffset = 0; //BufferData = null; } else { //mBoundary = new Boundary(mBuffer.Width, mBuffer.Height); DestBufferWidth = buffer.Width; DestBufferHeight = buffer.Height; //BufferStride = mBuffer.Stride; //BufferStartOffset = mBuffer.StartOffset; //BufferData = mBuffer.Data; //mPixelRenderer.PixelBuffer = mBuffer; } if ((Rows == null) || (Rows.Length < DestBufferHeight + 1)) { Rows = new RowData[DestBufferHeight + 1]; } SetClip(0, 0, DestBufferWidth, DestBufferHeight); }
public MaskBuffer ScheduleLoadingJob(int2 chunkCoord) { MaskBuffer mb = new MaskBuffer(GetByteOffset(chunkCoord, terrainMaskCount), size); loadingCommandQueue.Add(mb); loadingThread.AddMission(loadingThreadExecutor); return(mb); }
public void Dispose() { if (MaskBuffer.IsCreated) { MaskBuffer.Dispose(); } if (MaskViews.IsCreated) { MaskViews.Dispose(); } }
public IEnumerator ReadToTexture(RenderTexture rt, int texElement, MaskBuffer mb, int separateFrame) { while (!MaskBufferIsFinished(ref mb)) { yield return(null); } int separateSize = (int)size / separateFrame; for (int i = 0; i < separateFrame; ++i) { SetBufferData(ref mb, separateSize, i); yield return(null); } mb.Dispose(); terrainEditShader.SetInt(ShaderIDs._OffsetIndex, texElement); terrainEditShader.SetInt(ShaderIDs._Count, (int)resolution); terrainEditShader.SetTexture(readPass, ShaderIDs._DestTex, rt); terrainEditShader.SetBuffer(readPass, ShaderIDs._ElementBuffer, readWriteBuffer); int disp = (int)resolution / 16; terrainEditShader.Dispatch(readPass, disp, disp, 1); }
private static bool MaskBufferIsFinished(ref MaskBuffer mb) { return(*mb.isFinished); }
private void SetBufferData(ref MaskBuffer mb, int localsize, int offset) { readWriteBuffer.SetDataPtr((mb.bytesData + offset * localsize), localsize * offset, localsize); }