change texture handler to use gl texture ids instead of keeping the data
authorDerek Foreman <manmower@gmail.com>
Thu, 29 May 2003 16:32:58 +0000 (16:32 +0000)
committerDerek Foreman <manmower@gmail.com>
Thu, 29 May 2003 16:32:58 +0000 (16:32 +0000)
render2/texture.c
render2/texture.h

index 4bde977e65bf1cf5f5145ad20b501fd51b3a556a..f766e3bcd3d7a713d39e2c2a731c9d457e726d5c 100644 (file)
@@ -1,3 +1,4 @@
+#include "instance.h"
 #include "texture.h"
 #include "surface.h"
 #include <stdlib.h>
@@ -12,6 +13,7 @@ void RrTextureFreeContents(struct RrTexture *tex)
         free(tex->data.text.string);
         break;
     case RR_TEXTURE_RGBA:
+        glDeleteTextures(1, &tex->data.rgba.texid);
         break;
     }
     tex->type = RR_TEXTURE_NONE;
@@ -25,16 +27,27 @@ void RrTextureSetRGBA(struct RrSurface *sur,
                       int w,
                       int h)
 {
+    unsigned int num;
     struct RrTexture *tex = RrSurfaceTexture(sur, texnum);
 
     if (!tex) return;
     RrTextureFreeContents(tex);
     tex->type = RR_TEXTURE_RGBA;
-    tex->data.rgba.data = data;
     tex->data.rgba.x = x;
     tex->data.rgba.y = y;
     tex->data.rgba.w = w;
     tex->data.rgba.h = h;
+    glGenTextures(1, &num);
+    tex->data.rgba.texid = num;
+    glBindTexture(GL_TEXTURE_2D, num);
+    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND);
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h,
+                 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
 }
 
 void RrTextureSetText(struct RrSurface *sur,
index 3737dd19a9cfcffbbc7ce7aeb8a163bbae2bc132..238805e1507ed13919999aba912550acd67b6a37 100644 (file)
@@ -2,6 +2,7 @@
 #define __render_texture_h
 
 #include "render.h"
+#include <GL/gl.h>
 
 enum RrTextureType {
     RR_TEXTURE_NONE,
@@ -16,7 +17,7 @@ struct RrTextureText {
 };
 
 struct RrTextureRGBA {
-    RrData32 *data;
+    GLuint texid;
     int x;
     int y;
     int w;