Current implementation has a minor issue, when "Hide Fallback" option is
disabled, the fallback image does not appear in texture browser before radiant
makes use of it (for example creating a brush before selecting a texture).
Since "Hide Fallback" option is enabled by default and it never makes sense
to apply those fallback intentionally, I don't care for the moment.
I would like to see a better implementation that would work for all
editor images (like the one set with `qer_editorImage` shader keyword).
#include "os/path.h"
#include "stream/stringstream.h"
#include "os/path.h"
#include "stream/stringstream.h"
typedef Modules<_QERPlugImageTable> ImageModules;
ImageModules& Textures_getImageModules();
typedef Modules<_QERPlugImageTable> ImageModules;
ImageModules& Textures_getImageModules();
+ImageModules& Textures_getFallbackImageModules();
/// \brief Returns a new image for the first file matching \p name in one of the available texture formats, or 0 if no file is found.
Image* QERApp_LoadImage( void* environment, const char* name ){
/// \brief Returns a new image for the first file matching \p name in one of the available texture formats, or 0 if no file is found.
Image* QERApp_LoadImage( void* environment, const char* name ){
Textures_getImageModules().foreachModule( LoadImageVisitor( name, image ) );
Textures_getImageModules().foreachModule( LoadImageVisitor( name, image ) );
+ // Games can provide their own fallback, so only do this when previous
+ // loading attempt did not work.
+ if ( image == 0 && !!string_compare_nocase( name, "textures/radiant" ) )
+ {
+ Textures_getFallbackImageModules().foreachModule( LoadImageVisitor( name, image ) );
+ }
+
public GlobalPreferenceSystemModuleRef
{
ImageModulesRef m_image_modules;
public GlobalPreferenceSystemModuleRef
{
ImageModulesRef m_image_modules;
+ImageModulesRef m_fallback_image_modules;
public:
TexturesDependencies() :
public:
TexturesDependencies() :
- m_image_modules( GlobalRadiant().getRequiredGameDescriptionKeyValue( "texturetypes" ) ){
+ m_image_modules( GlobalRadiant().getRequiredGameDescriptionKeyValue( "texturetypes" ) ),
+ m_fallback_image_modules( "png" ){
}
ImageModules& getImageModules(){
return m_image_modules.get();
}
}
ImageModules& getImageModules(){
return m_image_modules.get();
}
+ImageModules& getFallbackImageModules(){
+ return m_fallback_image_modules.get();
+}
ImageModules& Textures_getImageModules(){
return StaticTexturesModule::instance().getDependencies().getImageModules();
}
ImageModules& Textures_getImageModules(){
return StaticTexturesModule::instance().getDependencies().getImageModules();
}
+ImageModules& Textures_getFallbackImageModules(){
+ return StaticTexturesModule::instance().getDependencies().getFallbackImageModules();
+}