diff --git a/config.cpp b/config.cpp index 28f80651..d872ae27 100644 --- a/config.cpp +++ b/config.cpp @@ -1974,11 +1974,7 @@ EX void showCustomizeChar() { int firsty = dialog::items[0].position / 2; int scale = firsty - 2 * vid.fsize; - dynamicval pm(pmodel, flat_model()); - glClear(GL_DEPTH_BUFFER_BIT); - dynamicval va(pconf.alpha, 1); - dynamicval vs(pconf.scale, 1); - dynamicval vc(pconf.camera_angle, 0); + flat_model_enabler fme; initquickqueue(); transmatrix V = atscreenpos(vid.xres/2, firsty, scale); diff --git a/hud.cpp b/hud.cpp index fcdf1887..ba3a0adf 100644 --- a/hud.cpp +++ b/hud.cpp @@ -401,20 +401,12 @@ EX void drawStats() { if(geometry == gRotSpace || geometry == gProduct) rots::draw_underlying(!cornermode); { - dynamicval pm(pmodel, flat_model()); - glClear(GL_DEPTH_BUFFER_BIT); - // dynamicval v(vid, vid); - // pconf.alpha = vid.scale = 1; - dynamicval va(pconf.alpha, 1); - dynamicval vs(pconf.scale, 1); - dynamicval vc(pconf.camera_angle, 0); - if(prod) pconf.alpha = 30, pconf.scale = 30; auto& cd = current_display; auto xc = cd->xcenter; auto yc = cd->ycenter; - calcparam(); + flat_model_enabler fme; if(crosshair_color && crosshair_size > 0) { initquickqueue(); diff --git a/hypgraph.cpp b/hypgraph.cpp index d1fdd783..231648e3 100644 --- a/hypgraph.cpp +++ b/hypgraph.cpp @@ -1518,6 +1518,27 @@ transmatrix screenpos(ld x, ld y) { EX eModel flat_model() { return MDIM == 4 ? mdPixel : mdDisk; } +/** \brief enable the 'flat' model for drawing HUD. See hr::flat_model_enabler */ +EX void enable_flat_model() { + glClear(GL_DEPTH_BUFFER_BIT); + pmodel = flat_model(); + pconf.alpha = 1; + pconf.scale = 1; + pconf.camera_angle = 0; + pconf.stretch = 1; + if(prod) pconf.alpha = 30, pconf.scale = 30; + calcparam(); + } + +#if HDR +/** \brief enable the 'flat' model for drawing HUD. Use RAII so it will be switched back later */ +struct flat_model_enabler { + projection_configuration bak; + flat_model_enabler() { bak = pconf; enable_flat_model(); } + ~flat_model_enabler() { pconf = bak; calcparam(); } + }; +#endif + EX transmatrix atscreenpos(ld x, ld y, ld size) { transmatrix V = Id; diff --git a/inventory.cpp b/inventory.cpp index d5cd770f..436e6e5e 100644 --- a/inventory.cpp +++ b/inventory.cpp @@ -513,14 +513,7 @@ EX namespace inv { int j = 0, oc = 6; if(1) { - dynamicval pm(pmodel, flat_model()); - glClear(GL_DEPTH_BUFFER_BIT); - // dynamicval v(vid, vid); - // pconf.alpha = vid.scale = 1; - dynamicval va(pconf.alpha, 1); - dynamicval vs(pconf.scale, 1); - dynamicval vc(pconf.camera_angle, 0); - calcparam(); + flat_model_enabler fme; for(int i=0; i pm(pmodel, flat_model()); - glClear(GL_DEPTH_BUFFER_BIT); + flat_model_enabler fme; initquickqueue(); int bsize = vid.fsize * 2;