Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
 /// <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);
 }
Exemplo n.º 3
0
        public MaskBuffer ScheduleLoadingJob(int2 chunkCoord)
        {
            MaskBuffer mb = new MaskBuffer(GetByteOffset(chunkCoord, terrainMaskCount), size);

            loadingCommandQueue.Add(mb);
            loadingThread.AddMission(loadingThreadExecutor);
            return(mb);
        }
Exemplo n.º 4
0
 public void Dispose()
 {
     if (MaskBuffer.IsCreated)
     {
         MaskBuffer.Dispose();
     }
     if (MaskViews.IsCreated)
     {
         MaskViews.Dispose();
     }
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 private static bool MaskBufferIsFinished(ref MaskBuffer mb)
 {
     return(*mb.isFinished);
 }
Exemplo n.º 7
0
 private void SetBufferData(ref MaskBuffer mb, int localsize, int offset)
 {
     readWriteBuffer.SetDataPtr((mb.bytesData + offset * localsize), localsize * offset, localsize);
 }
Exemplo n.º 8
0
        /// <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);

        }