]> git.mxchange.org Git - simgear.git/blobdiff - simgear/screen/texture.hxx
Oops, it doesn't do much good to declare a function as "static" in the .hxx
[simgear.git] / simgear / screen / texture.hxx
index 00ce0e1c3027c5f257b692ab859aae67d6f0ce14..05fa393d897f5c9b7136a32b6b312af83f91d2d2 100644 (file)
@@ -31,6 +31,7 @@ private:
 
     GLsizei texture_width;
     GLsizei texture_height;
+    GLsizei num_colors;
 
     void resize(unsigned int width = 256, unsigned int height = 256);
 
@@ -55,6 +56,8 @@ protected:
     void ConvertUint(unsigned *array, unsigned int length);
     void ConvertShort(unsigned short *array, unsigned int length);
     void rgbtorgb(GLubyte *r, GLubyte *g, GLubyte *b, GLubyte *l, int n);
+    void rgbatorgba(GLubyte *r, GLubyte *g, GLubyte *b, GLubyte *a,
+                    GLubyte *l, int n);
 
     ImageRec *ImageOpen(const char *fileName);
     ImageRec *RawImageOpen(const char *fileName);
@@ -80,6 +83,7 @@ public:
     /* Copyright (c) Mark J. Kilgard, 1997.  */
     void read_alpha_texture(const char *name);
     void read_rgb_texture(const char *name);
+    void read_rgba_texture(const char *name);
     void read_raw_texture(const char *name);
     void read_r8_texture(const char *name);
 
@@ -101,13 +105,18 @@ public:
 
     // texture pixel manipulation functions.
     void set_pixel(GLuint x, GLuint y, sgVec3 &c);
-    sgVec3 *get_pixel(GLuint x, GLuint y);
+    float *get_pixel(GLuint x, GLuint y);
 
     void bind();
-    inline void select() {
+    inline void select(bool keep_data = false) {
         glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB,
                       texture_width, texture_height, 0,
                       GL_RGB, GL_UNSIGNED_BYTE, texture_data );
+
+        if (!keep_data) {
+            delete[] texture_data;
+            texture_data = 0;
+        }
     }
 
     // Nowhere does it say that resident textures have to be in video memory!