Add a function which might return whether a texture is in video memory, delete the texture buffer after sending it to OpenGL and comment out the set/get_pixel functions
This commit is contained in:
@@ -22,18 +22,24 @@
|
||||
#include "colours.h"
|
||||
|
||||
SGTexture::SGTexture()
|
||||
: texture_id(0),
|
||||
texture_data(0)
|
||||
{
|
||||
texture_data = 0;
|
||||
}
|
||||
|
||||
SGTexture::SGTexture(unsigned int width, unsigned int height)
|
||||
: texture_id(0)
|
||||
{
|
||||
texture_data = new GLubyte[ width * height * 3 ];
|
||||
}
|
||||
|
||||
SGTexture::~SGTexture()
|
||||
{
|
||||
delete texture_data;
|
||||
if (texture_data)
|
||||
delete texture_data;
|
||||
|
||||
if (texture_id)
|
||||
free_id();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -323,6 +329,7 @@ SGTexture::read_r8_texture(const char *name)
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
void
|
||||
SGTexture::set_pixel(GLuint x, GLuint y, sgVec3 &c)
|
||||
{
|
||||
@@ -343,6 +350,7 @@ SGTexture::get_pixel(GLuint x, GLuint y)
|
||||
|
||||
return &c;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
SGTexture::ImageRec *
|
||||
|
||||
@@ -61,6 +61,15 @@ protected:
|
||||
void ImageClose(ImageRec *image);
|
||||
void ImageGetRow(ImageRec *image, GLubyte *buf, int y, int z);
|
||||
|
||||
inline void free_id() {
|
||||
#ifdef GL_VERSION_1_1
|
||||
glDeleteTextures(1, &texture_id);
|
||||
#else
|
||||
glDeleteTexturesEXT(1, &texture_id);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
|
||||
SGTexture();
|
||||
@@ -77,6 +86,7 @@ public:
|
||||
|
||||
inline GLuint id() { return texture_id; }
|
||||
inline GLubyte *texture() { return texture_data; }
|
||||
inline void set_data(GLubyte *data) { texture_data = data; }
|
||||
|
||||
inline int width() { return texture_width; }
|
||||
inline int height() { return texture_height; }
|
||||
@@ -88,16 +98,28 @@ public:
|
||||
void prepare(unsigned int width = 256, unsigned int height = 256);
|
||||
void finish(unsigned int width, unsigned int height);
|
||||
|
||||
#if 0
|
||||
// texture pixel manipulation functions.
|
||||
void set_pixel(GLuint x, GLuint y, sgVec3 &c);
|
||||
sgVec3 *get_pixel(GLuint x, GLuint y);
|
||||
#endif
|
||||
|
||||
void bind();
|
||||
inline void select() {
|
||||
// if (texture_data)
|
||||
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB,
|
||||
texture_width, texture_height, 0,
|
||||
GL_RGB, GL_UNSIGNED_BYTE, texture_data );
|
||||
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB,
|
||||
texture_width, texture_height, 0,
|
||||
GL_RGB, GL_UNSIGNED_BYTE, texture_data );
|
||||
|
||||
delete texture_data;
|
||||
}
|
||||
|
||||
// Nowhere does it say that resident textures have to be in video memory!
|
||||
// NVidia's OpenGL drivers implement glAreTexturesResident() correctly,
|
||||
// but the Matrox G400, for example, doesn't.
|
||||
inline bool is_resident() {
|
||||
GLboolean is_res;
|
||||
glAreTexturesResident(1, &texture_id, &is_res);
|
||||
return is_res;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user