Duality.Resources.Texture.RetrievePixelData C# (CSharp) Method

RetrievePixelData() public method

Retrieves the pixel data that is currently stored in video memory.
public RetrievePixelData ( ) : Duality.Resources.Pixmap.Layer
return Duality.Resources.Pixmap.Layer
        public Pixmap.Layer RetrievePixelData()
        {
            DualityApp.GuardSingleThreadState();

            int lastTexId;
            GL.GetInteger(GetPName.TextureBinding2D, out lastTexId);
            GL.BindTexture(TextureTarget.Texture2D, this.glTexId);

            byte[] data = new byte[this.texWidth * this.texHeight * 4];
            GL.GetTexImage(TextureTarget.Texture2D, 0,
                GLPixelFormat.Rgba, PixelType.UnsignedByte,
                data);

            GL.BindTexture(TextureTarget.Texture2D, lastTexId);

            Pixmap.Layer result = new Pixmap.Layer();
            result.SetPixelDataRgba(data, this.texWidth, this.texHeight);
            return result;
        }

Usage Example

Ejemplo n.º 1
0
		private Pixmap.Layer RenderToTexture(int width, int height, Action<Canvas> renderMethod)
		{
			Pixmap.Layer pixelData;

			using (Texture texture = new Texture(width, height, Texture.SizeMode.NonPowerOfTwo))
			using (RenderTarget renderTarget = new RenderTarget(AAQuality.Off, texture))
			using (DrawDevice device = new DrawDevice())
			{
				device.Perspective = PerspectiveMode.Flat;
				device.VisibilityMask = VisibilityFlag.AllGroups | VisibilityFlag.ScreenOverlay;
				device.RenderMode = RenderMatrix.OrthoScreen;
				device.Target = renderTarget;
				device.ViewportRect = new Rect(renderTarget.Width, renderTarget.Height);

				device.BeginRendering(ClearFlag.All, ColorRgba.TransparentBlack, 1.0f);
				{
					Canvas canvas = new Canvas(device);
					renderMethod(canvas);
				}
				device.EndRendering();
				
				RenderTarget.Bind(RenderTarget.None);

				pixelData = texture.RetrievePixelData();
			}

			return pixelData;
		}