Fix #33417: add back GPU Mipmap Generation option, apparently with this disabled

it takes up less memory on some cards, still unclear why.
This commit is contained in:
Brecht Van Lommel 2012-12-05 11:46:13 +00:00
parent 690359eb8d
commit 5bb576e8e4
6 changed files with 24 additions and 6 deletions

@ -437,6 +437,7 @@ class USERPREF_PT_system(Panel):
col.label(text="OpenGL:") col.label(text="OpenGL:")
col.prop(system, "gl_clip_alpha", slider=True) col.prop(system, "gl_clip_alpha", slider=True)
col.prop(system, "use_mipmaps") col.prop(system, "use_mipmaps")
col.prop(system, "use_gpu_mipmap")
col.prop(system, "use_16bit_textures") col.prop(system, "use_16bit_textures")
col.label(text="Anisotropic Filtering") col.label(text="Anisotropic Filtering")
col.prop(system, "anisotropic_filter", text="") col.prop(system, "anisotropic_filter", text="")

@ -116,7 +116,7 @@ void GPU_set_anisotropic(float value);
float GPU_get_anisotropic(void); float GPU_get_anisotropic(void);
/* enable gpu mipmapping */ /* enable gpu mipmapping */
void GPU_set_gpu_mipmapping(void); void GPU_set_gpu_mipmapping(int gpu_mipmap);
/* Image updates and free /* Image updates and free
* - these deal with images bound as opengl textures */ * - these deal with images bound as opengl textures */

@ -240,10 +240,16 @@ static struct GPUTextureState {
/* Mipmap settings */ /* Mipmap settings */
void GPU_set_gpu_mipmapping() void GPU_set_gpu_mipmapping(int gpu_mipmap)
{ {
/* always enable if it's supported */ int old_value = GTS.gpu_mipmap;
GTS.gpu_mipmap = GLEW_EXT_framebuffer_object;
/* only actually enable if it's supported */
GTS.gpu_mipmap = gpu_mipmap && GLEW_EXT_framebuffer_object;
if (old_value != GTS.gpu_mipmap) {
GPU_free_images();
}
} }
void GPU_set_mipmap(int mipmap) void GPU_set_mipmap(int mipmap)

@ -144,6 +144,12 @@ static void rna_userdef_anisotropic_update(Main *bmain, Scene *scene, PointerRNA
rna_userdef_update(bmain, scene, ptr); rna_userdef_update(bmain, scene, ptr);
} }
static void rna_userdef_gl_gpu_mipmaps(Main *bmain, Scene *scene, PointerRNA *ptr)
{
GPU_set_gpu_mipmapping(U.use_gpu_mipmap);
rna_userdef_update(bmain, scene, ptr);
}
static void rna_userdef_gl_texture_limit_update(Main *bmain, Scene *scene, PointerRNA *ptr) static void rna_userdef_gl_texture_limit_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{ {
GPU_free_images(); GPU_free_images();
@ -3218,6 +3224,11 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "16 Bit Float Textures", "Use 16 bit per component texture for float images"); RNA_def_property_ui_text(prop, "16 Bit Float Textures", "Use 16 bit per component texture for float images");
RNA_def_property_update(prop, 0, "rna_userdef_gl_use_16bit_textures"); RNA_def_property_update(prop, 0, "rna_userdef_gl_use_16bit_textures");
prop = RNA_def_property(srna, "use_gpu_mipmap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "use_gpu_mipmap", 1);
RNA_def_property_ui_text(prop, "GPU Mipmap Generation", "Generate Image Mipmaps on the GPU");
RNA_def_property_update(prop, 0, "rna_userdef_gl_gpu_mipmaps");
prop = RNA_def_property(srna, "use_vertex_buffer_objects", PROP_BOOLEAN, PROP_NONE); prop = RNA_def_property(srna, "use_vertex_buffer_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "gameflags", USER_DISABLE_VBO); RNA_def_property_boolean_negative_sdna(prop, NULL, "gameflags", USER_DISABLE_VBO);
RNA_def_property_ui_text(prop, "VBOs", RNA_def_property_ui_text(prop, "VBOs",

@ -183,7 +183,7 @@ void WM_init(bContext *C, int argc, const char **argv)
GPU_extensions_init(); GPU_extensions_init();
GPU_set_mipmap(!(U.gameflags & USER_DISABLE_MIPMAP)); GPU_set_mipmap(!(U.gameflags & USER_DISABLE_MIPMAP));
GPU_set_anisotropic(U.anisotropic_filter); GPU_set_anisotropic(U.anisotropic_filter);
GPU_set_gpu_mipmapping(); GPU_set_gpu_mipmapping(U.use_gpu_mipmap);
UI_init(); UI_init();
} }

@ -756,7 +756,7 @@ int main(int argc, char** argv)
} }
GPU_set_anisotropic(U.anisotropic_filter); GPU_set_anisotropic(U.anisotropic_filter);
GPU_set_gpu_mipmapping(); GPU_set_gpu_mipmapping(U.use_gpu_mipmap);
// Create the system // Create the system
if (GHOST_ISystem::createSystem() == GHOST_kSuccess) if (GHOST_ISystem::createSystem() == GHOST_kSuccess)