Fix reload texture by calling removeTexture...

...and use OUT_BIN in the shell build as the target.
master
poikilos 2021-03-29 14:10:40 -04:00
parent 059b61805f
commit b615b8c314
5 changed files with 24 additions and 12 deletions

1
.gitignore vendored
View File

@ -49,3 +49,4 @@ err.txt
*.blend1 *.blend1
/projects/meshes/penguin-lowpoly-poikilos-redochanges-messupback.blend /projects/meshes/penguin-lowpoly-poikilos-redochanges-messupback.blend
/projects/meshes/penguin-lowpoly-poikilos-redochanges.blend /projects/meshes/penguin-lowpoly-poikilos-redochanges.blend
/build/debug/b3view

View File

@ -716,21 +716,30 @@ bool Engine::reloadTexture()
bool result = false; bool result = false;
if (this->m_LoadedTexturePath.length() > 0) { if (this->m_LoadedTexturePath.length() > 0) {
if (wcslen(this->m_UserInterface->texturePathEditBox->getText()) == 0) if (wcslen(this->m_UserInterface->texturePathEditBox->getText()) == 0)
result = loadTexture(this->m_UserInterface->texturePathEditBox->getText()); result = loadTexture(this->m_UserInterface->texturePathEditBox->getText(), true);
else else
result = loadTexture(this->m_LoadedTexturePath); result = loadTexture(this->m_LoadedTexturePath, true);
} }
return result; return result;
} }
bool Engine::loadTexture(const wstring& fileName) bool Engine::loadTexture(const wstring& fileName, bool reload)
{ {
bool ret = false; bool ret = false;
if (m_LoadedMesh != nullptr) { if (m_LoadedMesh != nullptr) {
ITexture* texture = this->m_Driver->getTexture(fileName.c_str()); ITexture* texture = this->m_Driver->getTexture(fileName.c_str());
if (reload) {
// The texture may already have been read from storage, so:
this->m_Driver->removeTexture(texture);
texture = this->m_Driver->getTexture(fileName.c_str());
}
if (texture != nullptr) { if (texture != nullptr) {
m_LoadedMesh->setMaterialTexture(0, texture); m_LoadedMesh->setMaterialTexture(0, texture);
ret = true; ret = true;
debug() << "* loaded " << "" << std::endl;
}
else {
debug() << "* failed to load " << "" << std::endl;
} }
this->m_LoadedTexturePath = fileName; this->m_LoadedTexturePath = fileName;
std::cerr << "Setting texture path box to " << Utility::toString(this->m_LoadedTexturePath) << std::endl; std::cerr << "Setting texture path box to " << Utility::toString(this->m_LoadedTexturePath) << std::endl;

View File

@ -86,7 +86,7 @@ public:
bool reloadMesh(); bool reloadMesh();
std::wstring saveMesh(const irr::io::path path, const std::string& nameOrBlank, const std::string& extension); std::wstring saveMesh(const irr::io::path path, const std::string& nameOrBlank, const std::string& extension);
bool reloadTexture(); bool reloadTexture();
bool loadTexture(const std::wstring& fileName); bool loadTexture(const std::wstring& fileName, bool reload);
void setMeshDisplayMode(bool wireframe = false, bool lighting = false, bool textureInterpolation = true); void setMeshDisplayMode(bool wireframe = false, bool lighting = false, bool textureInterpolation = true);
bool isAnimating(); bool isAnimating();
void playAnimation(); void playAnimation();

View File

@ -796,11 +796,11 @@ bool UserInterface::loadNextTexture(int direction)
if (lastTexture.length() > 0) { if (lastTexture.length() > 0) {
if (direction < 0) { if (direction < 0) {
cerr << "loading the previous texture..."; cerr << "loading the previous texture...";
ret = this->m_Engine->loadTexture(prevTexture); ret = this->m_Engine->loadTexture(prevTexture, false);
} }
else if (direction > 0) { else if (direction > 0) {
cerr << "loading the next texture..."; cerr << "loading the next texture...";
ret = this->m_Engine->loadTexture(nextTexture); ret = this->m_Engine->loadTexture(nextTexture, false);
} }
else { else {
// If direction is 0 (such as when a model is loaded that has // If direction is 0 (such as when a model is loaded that has
@ -808,12 +808,13 @@ bool UserInterface::loadNextTexture(int direction)
if (this->m_Engine->m_LoadedTexturePath.length() > 0) { if (this->m_Engine->m_LoadedTexturePath.length() > 0) {
cerr << "using a specified texture..."; cerr << "using a specified texture...";
ret = this->m_Engine->loadTexture( ret = this->m_Engine->loadTexture(
this->m_Engine->m_LoadedTexturePath this->m_Engine->m_LoadedTexturePath,
false
); );
} }
else if (this->m_MatchingTextures.size() >= 1) { else if (this->m_MatchingTextures.size() >= 1) {
cerr << "loading matching texture..."; cerr << "loading matching texture...";
ret = this->m_Engine->loadTexture(firstTexture); ret = this->m_Engine->loadTexture(firstTexture, false);
} }
else { else {
ret = true; ret = true;
@ -824,7 +825,8 @@ bool UserInterface::loadNextTexture(int direction)
else if (this->m_Engine->m_LoadedTexturePath.length() > 0) { else if (this->m_Engine->m_LoadedTexturePath.length() > 0) {
cerr << "loading the first texture..."; cerr << "loading the first texture...";
ret = this->m_Engine->loadTexture( ret = this->m_Engine->loadTexture(
this->m_Engine->m_LoadedTexturePath this->m_Engine->m_LoadedTexturePath,
false
); );
} }
} else } else
@ -1156,7 +1158,7 @@ bool UserInterface::OnEvent(const SEvent& event)
case UIE_LOADTEXTUREDIALOG: case UIE_LOADTEXTUREDIALOG:
{ {
IGUIFileOpenDialog* fileOpenDialog = static_cast<IGUIFileOpenDialog*>(ge->Caller); IGUIFileOpenDialog* fileOpenDialog = static_cast<IGUIFileOpenDialog*>(ge->Caller);
m_Engine->loadTexture(fileOpenDialog->getFileName()); m_Engine->loadTexture(fileOpenDialog->getFileName(), true);
} }
break; break;
default: default:
@ -1191,7 +1193,7 @@ bool UserInterface::OnEvent(const SEvent& event)
break; break;
case UIE_TEXTUREPATHEDITBOX: case UIE_TEXTUREPATHEDITBOX:
if (this->m_Engine->m_LoadedMesh != nullptr) { if (this->m_Engine->m_LoadedMesh != nullptr) {
this->m_Engine->loadTexture(texturePathEditBox->getText()); this->m_Engine->loadTexture(texturePathEditBox->getText(), false);
} }
break; break;
case UIE_FPSEDITBOX: case UIE_FPSEDITBOX:

View File

@ -91,7 +91,7 @@ if [ -f "$$OUT_BIN" ]; then
exit 1 exit 1
fi fi
fi fi
g++ -o build/b3view $OBJDIR/main.o $OBJDIR/Engine.o $OBJDIR/EventHandler.o $OBJDIR/UserInterface.o $OBJDIR/Debug.o $OBJDIR/View.o $OBJDIR/CGUITTFont.o $OBJDIR/Utility.o $OBJDIR/settings.o -lIrrlicht -lX11 -lGL -lXxf86vm -lXcursor -lstdc++fs -lfreetype g++ -o $OUT_BIN $OBJDIR/main.o $OBJDIR/Engine.o $OBJDIR/EventHandler.o $OBJDIR/UserInterface.o $OBJDIR/Debug.o $OBJDIR/View.o $OBJDIR/CGUITTFont.o $OBJDIR/Utility.o $OBJDIR/settings.o -lIrrlicht -lX11 -lGL -lXxf86vm -lXcursor -lstdc++fs -lfreetype
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
cat <<END cat <<END
Error: Linking failed. Ensure you have installed: Error: Linking failed. Ensure you have installed: