BC_WindowBase::get_synchronous()->release_texture(
window_id,
texture_id);
- texture_id = -1;
- window_id = -1;
+ texture_id = -1;
+ window_id = -1;
}
glGenTextures(1, (GLuint*)&texture_id);
glBindTexture(GL_TEXTURE_2D, (GLuint)texture_id);
glEnable(GL_TEXTURE_2D);
- if(texture_components == 4)
- glTexImage2D(GL_TEXTURE_2D, 0, 4, texture_w, texture_h,
+ int internal_format = texture_components == 4 ? GL_RGBA8 : GL_RGB8 ;
+ glTexImage2D(GL_TEXTURE_2D, 0, internal_format, texture_w, texture_h,
0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
- else
- glTexImage2D(GL_TEXTURE_2D, 0, 3, texture_w, texture_h,
- 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
-
window_id = BC_WindowBase::get_synchronous()->current_window->get_id();
BC_WindowBase::get_synchronous()->put_texture(texture_id,
texture_w, texture_h, texture_components);
#endif
}
-void BC_Texture::bind(int texture_unit)
+void BC_Texture::bind(int texture_unit, int nearest)
{
#ifdef HAVE_GL
// Bind the texture
if(texture_unit >= 0) glActiveTexture(GL_TEXTURE0 + texture_unit);
glBindTexture(GL_TEXTURE_2D, texture_id);
glEnable(GL_TEXTURE_2D);
- if(texture_unit >= 0)
- {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ if(texture_unit >= 0) {
+ int filter = nearest ? GL_NEAREST : GL_LINEAR;
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
// GL_REPEAT in this case causes the upper left corners of the masks
// to blur.
}
#endif
-void BC_Texture::write_tex(const char *fn)
+void BC_Texture::write_tex(const char *fn, int id)
{
#ifdef HAVE_GL
int prev_id = -1;
glGetIntegerv(GL_ACTIVE_TEXTURE, &prev_id);
- glActiveTexture(GL_TEXTURE31);
+ glActiveTexture(GL_TEXTURE0+id);
glBindTexture(GL_TEXTURE_2D, texture_id);
glEnable(GL_TEXTURE_2D);
int w = get_texture_w(), h = get_texture_h();
uint8_t *img = new uint8_t[w*h*3];
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, img);
write_ppm(img, w, h, "%s", fn);
- delete img;
+ delete [] img;
glActiveTexture(prev_id);
#endif
}
+void BC_Texture::write_tex(const char *fn)
+{
+#ifdef HAVE_GL
+ write_tex(fn, 31);
+#endif
+}