refactor texture code a bit
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user