]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/xonotic/slider_picmip.qc
Merge branch 'amade/small-fixes' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / slider_picmip.qc
1 #include "slider_picmip.qh"
2
3 entity makeXonoticPicmipSlider()
4 {
5         entity me;
6         me = NEW(XonoticPicmipSlider);
7         me.configureXonoticPicmipSlider(me);
8         return me;
9 }
10 void XonoticPicmipSlider_configureXonoticPicmipSlider(entity me)
11 {
12         me.configureXonoticTextSlider(me, "gl_picmip",
13                 _("Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"));
14         me.autofix(me);
15         me.have_s3tc = GL_Have_TextureCompression();
16 }
17 float texmemsize(float s3tc)
18 {
19         return
20         (
21                   2500 * (0.25 ** max(0, cvar("gl_picmip") + cvar("gl_picmip_other")))
22                 + 1500 * (0.25 ** max(0, cvar("gl_picmip") + cvar("gl_picmip_world")))
23         ) * ((s3tc && (cvar("r_texture_dds_load") || cvar("gl_texturecompression"))) ? 0.2 : 1.0); // TC: normalmaps 50%, other 25%, few incompressible, guessing 40% as conservative average
24 }
25 void XonoticPicmipSlider_autofix(entity me)
26 {
27         float max_hard, max_soft;
28         if(cvar("menu_picmip_bypass"))
29                 return;
30         max_hard = cvar("sys_memsize_virtual");
31         max_soft = cvar("sys_memsize_physical");
32         if(max_hard > 0)
33         {
34                 while(me.value > 0 && texmemsize(me.have_s3tc) > max_hard)
35                         me.setValue(me, me.value - 1);
36         }
37         // TODO also check the soft limit!
38         // TODO better handling than clamping the slider!
39 }
40 void XonoticPicmipSlider_draw(entity me)
41 {
42         me.autofix(me);
43         SUPER(XonoticPicmipSlider).draw(me);
44 }