From 23a4e103bb19de4c0c1f8ab6e28ccdc726f52f56 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Mon, 15 Feb 2010 17:37:51 +1300 Subject: [PATCH] texture support --- OpenRa.Gl/GraphicsDevice.cs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/OpenRa.Gl/GraphicsDevice.cs b/OpenRa.Gl/GraphicsDevice.cs index 275587a6d8..d76ce2cfd8 100644 --- a/OpenRa.Gl/GraphicsDevice.cs +++ b/OpenRa.Gl/GraphicsDevice.cs @@ -7,6 +7,7 @@ using Tao.OpenGl; using Tao.Cg; using Tao.Platform.Windows; using System.Runtime.InteropServices; +using System.Drawing.Imaging; namespace OpenRa.GlRenderer { @@ -178,8 +179,32 @@ namespace OpenRa.GlRenderer public class Texture { - public Texture(GraphicsDevice dev, Bitmap bitmap) { } - public void SetData(Bitmap bitmap) { } + internal int texture; + + public Texture(GraphicsDevice dev, Bitmap bitmap) + { + Gl.glGenTextures(1, out texture); + GraphicsDevice.CheckGlError(); + SetData(bitmap); + } + + public void SetData(Bitmap bitmap) + { + var bits = bitmap.LockBits( + new Rectangle(0, 0, bitmap.Width, bitmap.Height), + ImageLockMode.ReadOnly, + PixelFormat.Format32bppArgb); + + Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_BASE_LEVEL, 0); + GraphicsDevice.CheckGlError(); + Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAX_LEVEL, 0); + GraphicsDevice.CheckGlError(); + Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, bits.Width, bits.Height, + 0, Gl.GL_RGBA, Gl.GL_UNSIGNED_BYTE, bits.Scan0); // todo: weird strides + GraphicsDevice.CheckGlError(); + + bitmap.UnlockBits(bits); + } } [Flags]