View Issue Details

IDProjectCategoryView StatusLast Update
0005314The Dark ModGraphicspublic27.11.2022 14:03
Reporterwesp5 Assigned Tostgatilov  
PrioritynormalSeveritynormalReproducibilitysometimes
Status resolvedResolutionfixed 
Product VersionTDM 2.08 
Target VersionTDM 2.11Fixed in VersionTDM 2.11 
Summary0005314: While loading a game there are weird texts or graphics displayed in the first second
DescriptionThe summary says it all, I would guess the screen replays a cache of some earlier readable or similar. Again this could probably be hidden by setting everything to be completely black while loading.
Steps To ReproduceJust save and load a game.
TagsNo tags attached.

Relationships

related to 0004623 new Tweak the "Click when ready" screen rendered views order 
related to 0006149 resolvedstgatilov Quick loading graphics glitch 
related to 0005595 resolvedcabalistic Black screen temporarily shown while mission loading GUI is active 

Activities

stgatilov

stgatilov

05.12.2020 05:11

administrator   ~0013092

Last edited: 05.12.2020 05:12

Another problem is that player can run around for some more time after triggering load. With increased speed =)

I bumped into some code which is intended to freeze picture during map change or load process.
The entry point is idSessionLocal::StartWipe.
Basically, the current frame is captured to "_scratch" internal image.
Then the full-screen quad with material "wipeMaterial" is drawn on top of the window (idSessionLocal::DrawWipeModel).
Obviously, the material gets time parameter and can even do some fading (probably was used in Doom 3).

Right now the wipe material is simply missing, that's why player view continues to be shown.
In order to restore it, add this material to tdm_internal_engine.mtr:
  wipeMaterial
  {
    {
       map _scratch
    }
  }
Unfortunately, it gets upside-down for some reason.
I guess some magic line about texcoords can fix it.

The reason for removal was probably "optimization" =(
When wipe starts, the whole game is paused for com_wipeSeconds = 1 seconds, after which the loading actually starts.
The wipe material remains until loading ends.
I think this pause time was used to fade from screenshot into load image in Doom 3.
Anyway, instead of removing the material, better set com_wipeSeconds to something like 0.1.

Unfortunately, wipe material is not enough to restore clean visual behavior of game load.
Some random pictures popup at the moment I hit "quickload" key.
I hope Cabalistic can look into it at some moment.
nbohr1more

nbohr1more

05.12.2020 05:38

developer   ~0013093

May be related to 0004623
stgatilov

stgatilov

12.09.2021 05:47

administrator   ~0014356

In svn rev 9589, I reduced com_wipeSeconds to 0.1.

This is discussed here:
  https://forums.thedarkmod.com/index.php?/topic/21089-wipe-time-on-map-start/

By the way, I cannot reproduce the problem originally reported here.
But if I add wipe material, then I start seeing a glimpse of random letters when I start game from the menu (fullscreen),
stgatilov

stgatilov

27.11.2022 13:58

administrator   ~0015485

Last edited: 27.11.2022 13:59

The issue is fixed with 0006149 and svn rev 10182.

Regarding "wipe" feature.
This feature triggers when:
  1) player loads game (in-game / menu, quick / normal --- does not matter)
  2) player starts new game or restarts existing one

StartWipe captures current frame into _scratch texture.
Then for com_wipeSeconds duration, the game continues playing, but wipeMaterial is drawn as overlay on top of everything.
Function DrawWipeModel renders the overlay, which makes it clear that "alpha" color is set to the fade ratio.

So the simplest way to fade to a still image is to have something like this:
  wipeMaterial {
    {
        blend gl_src_alpha, gl_one_minus_src_alpha
        colored
        map guis/assets/splash/launch // the target image
    }
  }
Here "colored" allows render to use the fade alpha, and "blend" enabled proper blending mode.

Another option is to read "_scratch" image, which contains still image captured when wipe sequence started:
  wipeMaterial {
    {
        map _scratch
        scale 1, -1
          translate 0, -1
    }
  }
Here scale + translate is required because otherwise screenshot will be flipped by Y coordinate.

Note that while wipe sequence is in process:
1) actual game loading is NOT done.
  So the time specified in com_wipeSeconds is additional useless waiting.
2) game continues playing: player moves, objects move, AIs move, etc.
  This can be avoided by having two-stage wipeMaterial: the first one overdraws everything with _scratch contents, the second one applies fading over it.
  Basically, just use both of the sample materials shown above in one material in correct order.

Issue History

Date Modified Username Field Change
30.07.2020 18:52 wesp5 New Issue
05.12.2020 05:11 stgatilov Note Added: 0013092
05.12.2020 05:12 stgatilov Note Edited: 0013092
05.12.2020 05:13 stgatilov Assigned To => cabalistic
05.12.2020 05:13 stgatilov Status new => assigned
05.12.2020 05:13 stgatilov Product Version => TDM 2.08
05.12.2020 05:13 stgatilov Target Version => TDM 2.10
05.12.2020 05:37 nbohr1more Relationship added related to 0004623
05.12.2020 05:38 nbohr1more Note Added: 0013093
23.04.2021 06:55 stgatilov Relationship added related to 0005595
12.09.2021 05:47 stgatilov Note Added: 0014356
28.12.2021 04:06 nbohr1more Target Version TDM 2.10 => TDM 2.11
11.11.2022 18:54 stgatilov Relationship added related to 0006149
15.11.2022 00:36 nbohr1more Target Version TDM 2.11 => TDM 2.12
27.11.2022 13:58 stgatilov Note Added: 0015485
27.11.2022 13:59 stgatilov Note Edited: 0015485
27.11.2022 14:03 stgatilov Target Version TDM 2.12 => TDM 2.11
27.11.2022 14:03 stgatilov Assigned To cabalistic => stgatilov
27.11.2022 14:03 stgatilov Status assigned => resolved
27.11.2022 14:03 stgatilov Resolution open => fixed
27.11.2022 14:03 stgatilov Fixed in Version => TDM 2.11