fix texture compression preference

This commit is contained in:
Garux 2023-07-21 11:05:11 +06:00
parent 4d870a381f
commit 7cefa2bae3

View File

@ -763,6 +763,9 @@ void TextureModeExport( ETexturesMode& self, const IntImportCallback& importer )
} }
typedef ReferenceCaller1<ETexturesMode, const IntImportCallback&, TextureModeExport> TextureModeExportCaller; typedef ReferenceCaller1<ETexturesMode, const IntImportCallback&, TextureModeExport> TextureModeExportCaller;
#include <QComboBox>
#include <QEvent>
void Textures_constructPreferences( PreferencesPage& page ){ void Textures_constructPreferences( PreferencesPage& page ){
{ {
const char* percentages[] = { "100%", "50%", "25%", "12.5%", }; const char* percentages[] = { "100%", "50%", "25%", "12.5%", };
@ -790,6 +793,14 @@ void Textures_constructPreferences( PreferencesPage& page ){
); );
} }
{ {
//. note workaround: openGL is initialised after prefs dlg is constructed
//. solution for now is to defer dependent preference construction
class Filter : public QObject
{
using QObject::QObject;
protected:
bool eventFilter( QObject *obj, QEvent *event ) override {
if( event->type() == QEvent::Polish ) {
const char* compression_none[] = { "None" }; const char* compression_none[] = { "None" };
const char* compression_opengl[] = { "None", "OpenGL ARB" }; const char* compression_opengl[] = { "None", "OpenGL ARB" };
const char* compression_s3tc[] = { "None", "S3TC DXT1", "S3TC DXT3", "S3TC DXT5" }; const char* compression_s3tc[] = { "None", "S3TC DXT1", "S3TC DXT3", "S3TC DXT5" };
@ -803,12 +814,22 @@ void Textures_constructPreferences( PreferencesPage& page ){
? StringArrayRange( compression_s3tc ) ? StringArrayRange( compression_s3tc )
: StringArrayRange( compression_none ) : StringArrayRange( compression_none )
); );
page.appendCombo( QComboBox *combo = static_cast<QComboBox *>( obj );
for( const char *c : compression )
combo->addItem( c );
obj->removeEventFilter( this );
}
return QObject::eventFilter( obj, event ); // standard event processing
}
};
QComboBox *combo = page.appendCombo(
"Hardware Texture Compression", "Hardware Texture Compression",
compression, StringArrayRange(),
TextureCompressionImportCaller( g_texture_globals.m_nTextureCompressionFormat ), TextureCompressionImportCaller( g_texture_globals.m_nTextureCompressionFormat ),
IntExportCaller( reinterpret_cast<int&>( g_texture_globals.m_nTextureCompressionFormat ) ) IntExportCaller( reinterpret_cast<int&>( g_texture_globals.m_nTextureCompressionFormat ) )
); );
combo->installEventFilter( new Filter( combo ) );
} }
page.appendCheckBox( "", "Anisotropy", page.appendCheckBox( "", "Anisotropy",
FreeCaller1<bool, Textures_SetAnisotropy>(), FreeCaller1<bool, Textures_SetAnisotropy>(),