refactor texture code a bit

This commit is contained in:
Chris Forbes
2011-02-21 22:13:47 +13:00
parent 869448296a
commit b90a90f8cc

View File

@@ -32,6 +32,16 @@ namespace OpenRA.Renderer.Cg
Gl.glGenTextures(1, out texture); Gl.glGenTextures(1, out texture);
GraphicsDevice.CheckGlError(); GraphicsDevice.CheckGlError();
SetData(bitmap); SetData(bitmap);
}
void PrepareTexture()
{
Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture);
GraphicsDevice.CheckGlError();
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();
} }
public void SetData(byte[] colors, int width, int height) public void SetData(byte[] colors, int width, int height)
@@ -43,14 +53,9 @@ namespace OpenRA.Renderer.Cg
{ {
fixed (byte* ptr = &colors[0]) fixed (byte* ptr = &colors[0])
{ {
IntPtr intPtr = new IntPtr((void*)ptr); IntPtr intPtr = new IntPtr((void*)ptr);
Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture); PrepareTexture();
GraphicsDevice.CheckGlError();
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, width, height, Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, width, height,
0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, intPtr); 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, intPtr);
GraphicsDevice.CheckGlError(); GraphicsDevice.CheckGlError();
@@ -71,14 +76,9 @@ namespace OpenRA.Renderer.Cg
{ {
fixed (uint* ptr = &colors[0,0]) fixed (uint* ptr = &colors[0,0])
{ {
IntPtr intPtr = new IntPtr((void *) ptr); IntPtr intPtr = new IntPtr((void *) ptr);
Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture); PrepareTexture();
GraphicsDevice.CheckGlError();
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, width, height, Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, width, height,
0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, intPtr); 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, intPtr);
GraphicsDevice.CheckGlError(); GraphicsDevice.CheckGlError();
@@ -94,18 +94,12 @@ namespace OpenRA.Renderer.Cg
bitmap = new Bitmap(bitmap, new Size(NextPowerOf2(bitmap.Width), NextPowerOf2(bitmap.Height))); bitmap = new Bitmap(bitmap, new Size(NextPowerOf2(bitmap.Width), NextPowerOf2(bitmap.Height)));
} }
Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture);
GraphicsDevice.CheckGlError();
var bits = bitmap.LockBits( var bits = bitmap.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height), new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly, ImageLockMode.ReadOnly,
PixelFormat.Format32bppArgb); PixelFormat.Format32bppArgb);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_BASE_LEVEL, 0); PrepareTexture();
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, Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, bits.Width, bits.Height,
0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, bits.Scan0); // todo: weird strides 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, bits.Scan0); // todo: weird strides
GraphicsDevice.CheckGlError(); GraphicsDevice.CheckGlError();