FAST vqa render

This commit is contained in:
Paul Chote
2010-08-11 19:54:24 +12:00
parent 96f9f33776
commit 514c92a998
5 changed files with 71 additions and 38 deletions

View File

@@ -12,6 +12,8 @@ using System.Drawing;
using System.Drawing.Imaging;
using OpenRA.FileFormats.Graphics;
using Tao.OpenGl;
using System.IO;
using System;
namespace OpenRA.GlRenderer
{
@@ -26,6 +28,33 @@ namespace OpenRA.GlRenderer
SetData(bitmap);
}
// An array of Color.ToARGB()'s
public void SetData(int[,] colors)
{
int width = colors.GetUpperBound(0) + 1;
int height = colors.GetUpperBound(1) + 1;
if (!IsPowerOf2(width) || !IsPowerOf2(height))
throw new InvalidDataException("Non-power-of-two array {0}x{1}".F(width,height));
IntPtr intPtr;
unsafe
{
fixed (int* ptr = colors)
intPtr = new IntPtr((void *) ptr);
}
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();
Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, width, height,
0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, intPtr);
GraphicsDevice.CheckGlError();
}
public void SetData(Bitmap bitmap)
{
if (!IsPowerOf2(bitmap.Width) || !IsPowerOf2(bitmap.Height))