Texture manager
-
void texture::select(void)
{
glBindTexture(GL_TEXTURE_2D, texture_);
}
-
elbst, wenn ich das: glBindTexture(GL_TEXTURE_2D, 1);
aufrufe(vor meiner zu texturierenden Fläche) tritt das Prob wieder auf...
-
Also textures_[] ist ein Array mit Instanzen der Klasse texture. Und jede Instanz hat ihre eigene TextureID texture_ ...nagut.
Dann müsste das eigentlich stimmen.Dann nochmal meine Frage:
Was genau ist das Problem? Es wird immer die zuletzt generierte Textur benutzt?
Also die, die als letztes aus einem bitmap geladen wurde?
-
Ich kann selektieren, was ich will, es kommt immer wieder die letzte und ich sitze schon ne Woche an dem Prob.
Ich schalge mal vor, dass wir lieber ICQ benutzten sollten, statt das Forum zu zu spamen *g*.
mfg
-
gib nummer
-
232-825-830
-
Ich habe jetzt nochmal einen kleinen manager geschrieben und das gleiche Problem...
ABER WARUM??????//*************************************************************************// // // Datei: textureManager.cpp // Autor: TcH // Erstellt: 10.03.2006 // Geändert: 10.03.2006 // //*************************************************************************// //*************************************************************************// // HEADERS //*************************************************************************// #include "textureManager.h" #include "image.h" #include "../file/bmp.h" #include "../utility/logsys.h" //*************************************************************************// // NAMESPACE //*************************************************************************// namespace gfx { //*************************************************************************// // PRIVATE constructor //*************************************************************************// textureManager::textureManager(void) : textures_(0) { } //*************************************************************************// // PRIVATE copy-constructor //*************************************************************************// textureManager::textureManager(const textureManager& other) : textures_(0) { } //*************************************************************************// // PRIVATE destructor //*************************************************************************// textureManager::~textureManager(void) { } //*************************************************************************// // PUBLIC initialize //*************************************************************************// void textureManager::initialize(void) { shutdown(); textures_ = new(unsigned int[maxTextures]); } //*************************************************************************// // PUBLIC restore //*************************************************************************// void textureManager::restore(void) { shutdown(); initialize(); } //*************************************************************************// // PUBLIC shutdown //*************************************************************************// void textureManager::shutdown(void) { if(textures_) { for(unsigned int i = 0; i < maxTextures; i ++) glDeleteTextures(1, &textures_[i]); delete[](textures_); } } //*************************************************************************// // PUBLIC getFreeSpace //*************************************************************************// unsigned int textureManager::getFreeSpace(void) { if(textures_) { for(unsigned int i = 0; i < maxTextures; i ++) if(!glIsTexture(textures_[i])) return(i); } return(-1); } //*************************************************************************// // PUBLIC load //*************************************************************************// unsigned int textureManager::load(const std::basic_string<wchar_t>& filename) { if(textures_) { image tex; file::bmp bmp_; unsigned int ID; if(!bmp_.load(filename, &tex)) { return(-1); } textures_[ID] = ID = getFreeSpace(); uty::log().write(L"load: %s ID: %u", filename.c_str(), textures_[ID]); glGetError(); glGenTextures(1, &textures_[ID]); glBindTexture(GL_TEXTURE_2D, textures_[ID]); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, tex.width_, tex.height_, GL_RGBA, GL_UNSIGNED_BYTE, &tex.rgba_[0]); tex.unload(); if(glGetError() != GL_NO_ERROR) { unload(textures_[ID]); return(-1); } return(textures_[ID]); } return(-1); } //*************************************************************************// // PUBLIC unload //*************************************************************************// void textureManager::unload(unsigned int texture) { if((texture >= 0) && (texture < maxTextures) && (textures_)) { if(glIsTexture(textures_[texture])) glDeleteTextures(1, &textures_[texture]); } } //*************************************************************************// // PUBLIC select //*************************************************************************// void textureManager::select(unsigned int texture) { if((texture >= 0) && (texture < maxTextures) && (textures_)) { if(glIsTexture(textures_[texture])) glBindTexture(GL_TEXTURE_2D, textures_[texture]); } } } //*************************************************************************//
-
Kann das Prob. möglicherweise an den OpenGL Libs bzw. Treibrn liegen? ich habe mal meinen alten Texturenloader gestestet, der früher ging, aber nu tritt das gleiche Problem auf....
-
Vieleicht hat jemand auch mal ein kleines Beispeilprogramm, wo ich es nochmal testen kann, um Fehler meiner Seits auszuschließen.
-
nimm nehe http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17 das sollte laufen.
-
nein, da ich VC++ 2005 benutzte --> stürtzt ab, da Glaux LPSTR(ist ja jetzt wchar_t) will.
-
und ich dachte die hätten auch schon fertigkompilierte.. hmhmhm
-
Ich glaube, dass ich jetzt den Fehler habe:
1. Sehr peinlich
2. sehr lange gebraucht um den zu finden
3. sehr einfach.Ich habe den selectbefehl innerghalb von glBegin aufgerufen...