Texture manager
-
Ja, das hatte ich mir auch schon gedacht, aber erstmal muss er ja mal funktionieren.
Gibt es bei VC++ 2005 einen Unterschied zw. GLuint und unsigned int?
-
Tc++H schrieb:
Gibt es bei VC++ 2005 einen Unterschied zw. GLuint und unsigned int?
Fahr mit der Maus einfach drüber oder mach rechte Maustaste auf GLuint und dann Zur Definition springen, dann siehst du es

Und ich würde sogar den Texturemanager einfach nochmal neu schreiben, und zwar auf die andere Variante wie ich es gerade gesagt habe (was du ja anscheinend auch so wolltest). Ist ja keine große Sache. Vielleicht wars einfach nur ein Denkfehler und die sind manchmal verdammt schwer zu finden
Wenn dus neu machst, und du *nichts* kopierst/abschreibst, verschwinden so unbeabsichtigte Fehler meistens.Es sei denn, du willst ihn unbedingt finden.
-
Das ist schon mein zweiter versuch, ich hatte den manager erst andwers gemacht, ohne textureclass, nur ein arry in dem Manager mit den IDs und es klappte trotzdem nicht, der gleiche Fehler.
-
Ist es eventuell auch ein Fehler bezüglich der Funktionalität von OpenGL ?

Du sagst, es wird immer die zuletzte geladene Textur angezeigt?
Ich nehme mal an, du hast dich an den NeHe Codes zum Laden von bmps orientiert.
Und da erstellst du bei jedem Laden eines BMPs eine Texture und bindest diese in GL.Könnte es jetzt sein, dass du in deiner Methode des TextureManagers zum Wählen der Textur, die Textur gar nicht bindest? So bleibt nämlich immer die zuletzt geladene Textur gebindet.
Hört sich doof an, könnt ja aber sein

-
Ich habe NULL von NWHE übernommen.
und gfx::tm().select(t2);??mfg
-
textures_[tex].select();
Poste mal die select() Methode
-
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...