MSI AB / RTSS development news thread

Discussion in 'MSI AfterBurner Application Development Forum' started by Unwinder, Feb 20, 2017.

  1. Granacks

    Granacks Member

    Messages:
    11
    Likes Received:
    5
    GPU:
    RTX 3060 TI EX 8GB
    Cowards, sick in the head.
    The work you do for the PC gamer community is unique and gigantic, those kind of people who hide in the anonymity of the internet to act like an asshole are everywhere and don't contribute to anything or anyone.
     
  2. tsunami231

    tsunami231 Ancient Guru

    Messages:
    14,267
    Likes Received:
    1,638
    GPU:
    EVGA 1070Ti Black
    im sure they didnt last long here.

    RTSS is must have on system and will always be. seriously though i dont understand why this sub form isnt like locked so only account with like 100+ see it let alone post it would cut down crap posts, atlest in this sub forum.
     
  3. Klaus Luppert

    Klaus Luppert Active Member

    Messages:
    60
    Likes Received:
    14
    GPU:
    RTX 4090 FE
    I beg to continue development on both RTSS and Afterburner :)
    I will support as much as I can.
     
    SpajdrEX, Rand, SanokKule and 2 others like this.
  4. xgiovio

    xgiovio Member

    Messages:
    28
    Likes Received:
    5
    GPU:
    evga 3090 hybrid
    Unwinder please ignore bad people. A moderator should simply ban them. This is a forum and anyone can write something. Ignore them. Like in the real world.
     
    Aserback likes this.

  5. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    16,751
    Likes Received:
    5,510
    I’m afraid you’re underestimating the level of humankind degradation. That’s not a single drunk punk that can be ignored to move on, nationalistic posts recently became more the rule than exception. That’s something I cannot change and have no wish to deal with, so the only effective way to ignore bad people sharing sick nationalistic ideas is to cut contacts with new users to minimum possible level.

    Anyway, reduced support in the forum cannot and will not stop development – I work on new builds in my normal rhythm (next RTSS beta with the next portion of OverlayEditor enhancements is around the corner) and will release them or post news about new builds here. This thread will be also periodically cleaned, I’ll keep it as read only info source for those who track development related news.
     
    Granacks, Spyke8x, lionhad and 20 others like this.
  6. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    16,751
    Likes Received:
    5,510
    I almost finished working on the next RTSS beta, so now I can happily announce the primary feature I was brainstorming and developing during the last couple months. This time I focused development on something, which was requested and discussed before. As I mentioned in that linked post, it is a functionality which I initially planned and wanted to add myself since introducing OverlayEditor plugin. This new feature is conditional layers, which allow you to add programmability to your overlays and make them look different depending on some conditions, which you can program yourself. For example, you may create differently looking overlay on AMD and NVIDIA GPUs, you may create different representation of CPU usage bars depending on logical CPU count, add special layers displaying thermal alerts when either CPU or GPU is overheating, add layers visible depending on PTT-styled keyboard polling, etc, etc. The most experienced users probably noticed that some very basic form of conditional layers was already available via dynamic colors, allowing you to map linked data source range to a color with fully transparent alpha channel and this way make the layer invisible depending on some simple condition (e.g. benchmark.ovl layout included in distributive uses this technique to hide some layers when benchmark mode is inactive and min/avg/max framerate values are not available). However, it didn’t provide too much flexibility and functionality was pretty limited, new conditional layers are much more powerful and programmable. So, new OverlayEditor’s conditional layers consist of two key components:

    - Seriously improved correction formula parser in data source settings window, which is allowing you to program complex logical conditions and create so called boolean data sources, which report true (1) or false (0) depending on condition you define.
    - New layer setting, which allows you to make whole layer visible/invisible depending on selected boolean data source. Alternately, new hypertext extension allows power users to embed conditional block directly into layer’s hypertext.

    Improved correction formula parser provides the following functionality:

    - Relational operators support: <,>,<=,>=,== and !=. Result is boolean true (1) or false (0). For example, you may define boolean data source called IsGpuOverheating with correction formula “GPU1 temperature” >= 80, which will return 1 when GPU temperature is above or equal 80C, otherwise it will return 0.
    - Logical operators support: ||, &&, !. Result is boolean true (1) or false (0). Logical operators allow you to combine multiple conditions, for example you may define boolean data source called IsGpuFanFail with correction formula (“GPU1 temperature” >= 80) && (“GPU1 fan tachometer” == 0), which will return 1 when GPU fan is not spinning AND temperature is critical (so it is not an idle fan stop case).
    - Bitwise operators support: &, |, ^, ~, << and >>. Please take a note that ^ was used for power operator before, however I see no practical use for power operators in correction formulas so it is no longer supported. ^ is used for bitwise XOR operator now.
    - Ternary conditional operator support: condition ? expression1 : expression2. Result is expression1 if condition is true, otherwise it is expression2. Please take a note that Basic styled syntax for ternary conditional operator syntax is also supported, so you can also use if(condition, expression1, expression2) syntax depending on your preferences.
    - Hexadecimal const values support. C-styled syntax with 0x prefix is supported, for example x+10 formula can be also represented as x+0xa
    - New cpuvendor, gpuvendor and cpucount variables support allow you to check CPU/GPU vendor identifiers or logical CPU count and use it in your overlay. For example, you may define IsNVIDIAGpu boolean data source and set correction formula to gpuvendor == 0x10de, then use it to display NVIDIA logo in your overlay only when NVIDIA GPU is installed on end user’s PC. Modified sample.ovl overlay layout demonstrates this technique to display AMD/Intel CPU logos depending on CPU vendor id and use different CPU usage bars layouts depending on logicial CPU count.
    - New rtssflags variable support allows you to check some global RTSS flags. It allows you to check if framerate limiter, video capture or benchmark mode is currently active. For example, you may define boolean data source called IsBenchmarkActive and set correction formula to (rtssflags & 0x100) != 0 to check state of benchmark mode activity bit
    - New validate(expression) function returns boolean true (1) when expression result is valid, otherwise it returns 0. For example, you may use it to check if some data source if physically supported on your system (unsupported values are invalid and reported as N/A). If you’re importing a data source from external provider, e.g. HwInfo, data can be invalid and reported as N/A when provider application is not running, so you may also effectively use validate() function to check if data is currently available. This function is useful when you combine it with ternary conditional operator, for example you may define formula validate(x) ? x : 0 for a data source importing data from HwInfo to make sensor report 0 when HwInfo is not running.
    - New key(vkcode) functions allows to poll keyboard and return key press counter and current key up/down state bit. Please take a note that OverlayEditor uses new dedicated HotkeyHandler’s interface to access its low-latency keyboard polling status, so HotkeyHandler must be also active for this function to work. For example, you may define boolean data source called IsKeyDown and set correction formula to (key(0x41) & 0x80000000) != 0 to report 1 when keyboard key ‘A’ is down, then use it to apply PTT-styled visibility to show some specific layer. Alternately, you may define boolean data source called IsKeyToggled and set correction formula to (key(0x41) & 1) != 0 to check bit 0 of key press counter, which is incremented each time you press it. This way you can effectively implement some layer visibility toggle depending of this pre-programmed key in your overlay

    The rest is pretty easy, once you defined all boolean data sources representing desired logical conditions for your overlay, you may simply attach them to desired layers in each layer’s properties. If the is no binding in new “Visibility source” setting, the layer will be always visible as before. Otherwise it will be visible only when visibility source reports a value different from zero.

    To demonstrate it I modified sample.ovl layout included in distributive and defined a few helper boolean data sources there. IsIntelCpu data source, which is currently open on my screenshot, returns 1 when CPU vendor ID matches with Intel’s one (0x8086):

    upload_2023-8-13_17-6-41.png

    Then I simply attach it as visibility source to my layer displaying Intel logo. I did the same for AMD CPU logo, but attached it to different visibility source, which returns 1 for AMD’s vendor ID (0x1022). Similar technique is also applied to display different layouts of vertical CPU usage bars on CPUs with <=8 and >8 cores.


    upload_2023-8-13_17-7-24.png
     
    Last edited: Aug 13, 2023
  7. xV_Slayer

    xV_Slayer Member Guru

    Messages:
    108
    Likes Received:
    49
    GPU:
    RTX 3090 FE
    Hey man glad to see you are still working on these wonderful programs. By chance is this bug fixed in the next version you are planning to relase soon?
     
  8. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    16,751
    Likes Received:
    5,510
    Yes, it is fixed in this build.
     
    SanokKule likes this.
  9. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    16,751
    Likes Received:
    5,510
    In the previous post announcing new conditional layers functionality I mentioned that there will be two alternate ways to use it:

    "New layer setting, which allows you to make whole layer visible/invisible depending on selected boolean data source. Alternately, new hypertext extension allows power users to embed conditional block directly into layer’s hypertext."

    However, I completely forgot to document the second way, i.e. hypertext extension syntax in my announce. So I do it now. New hypertext extension tags, allowing you to implement conditional blocks directly into the layer, are <IF> and <ELSE>. For example, if you defined boolean data source IsGpuOverheating in your overlay like in my example (using the formula “GPU1 temperature” >= 80), you may embed it in directly in hypertext following way:

    My GPU temperature is <IF IsGpuOverheating>too hot<ELSE>fine<IF> now

    Such layer will display "My GPU temperature is fine now" when GPU temperature is below 80C and "My GPU temperature is too hot now" when it is above or equal 80C.

    Please take a note that nested conditional blocks are not supported, so new <IF> tag always closes the previous open conditional block or immediately opens new one. Also, more complex expressions are not allowed into hypertext too, you can only use boolean data sources there. The only exception is ! (NOT) symbol, which is allowing you to invert value reported by boolean data source. So exactly the same conditional layer can be programmed this way:

    My GPU temperature is <IF !IsGpuOverheating>fine<ELSE>too hot<IF> now

    Also, please take a note that <IF>/<ELSE> tags are extenstion tags parsed at OverlayEditor plugin level. They are not native hypertext tags, so you cannot use them to format hypertext inside external applications like CapFrameX or AIDA.
     
    SanokKule, yen1co, lionhad and 8 others like this.
  10. Dan Longman

    Dan Longman Master Guru

    Messages:
    203
    Likes Received:
    144
    GPU:
    STRIX 3080
    Can't wait to try out the new build, I already have some cool ideas how to utilize the new features, thanks for your continued work Unwinder!
     
    eGGroLLiO and Unwinder like this.

  11. ParKur

    ParKur Member

    Messages:
    37
    Likes Received:
    4
    GPU:
    RTX 4090
    Is it possible to add the function of adding the logo of a running game?
    For example, game logos are stored in a specific system folder where you can add game logos. The comparison of the application and the logo goes by the name of the running application (the logo of the game will need to be named the same as the name of the running application).
     
    SpajdrEX likes this.
  12. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    16,751
    Likes Received:
    5,510
    Cannot promise that, but I'll think about it.
     
    yen1co, ParKur, fantaskarsef and 5 others like this.
  13. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    16,751
    Likes Received:
    5,510
    Good news, after brainstorming it a bit I see quick and elegant solution allowing me to implement it pretty fast. And it is already done and will be available in upcoming beta. The implementation is pretty simple, hypertext parser's embedded image loader supports optional application specific embedded images now. For example, if you embed sample.png texture atlas into your overlay and launch EscapeFromTarkov.exe, the parser will first try to load embeded image for this process from sample.png.EscapeFromTarkov then fall back to default sample.png if sample.png.EscapeFromTarkov is missing. So you'll be able to use some part of this image for dedicated game logos or even use game specific stylization for hardware logos etc.
     
    SyntaX, lionhad, tomcat66 and 12 others like this.
  14. ParKur

    ParKur Member

    Messages:
    37
    Likes Received:
    4
    GPU:
    RTX 4090
    As always, you are on top. Quick implementation of the idea.

    Is it possible to disable overlay output in windowed applications using the switch? So that when the overlay output is activated, only applications that work in full-screen mode work. Or is it possible to disable via config?
    Do I understand correctly that the overlay is applied in all applications, and not just in the currently active one, or am I wrong?
    I apologize if these questions are not relevant in this topic.
     
  15. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    16,751
    Likes Received:
    5,510
    I've seen this discussion @ overclockers.ru and it is a complete nonsense, sorry. Overlay will never be forcibly disabled for windowed applications. The person who requested it should RTFM instead and discover <Shift> + "Add profile" click functionality, he clearly has no ideas about it.
     

  16. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    16,751
    Likes Received:
    5,510
    To demonstrate this technique, sample.ovl layout included into distributive will contain two application specific versions of embedded image for Escape From Tarkov and Forza Horizon 5, which will display EFT and FH5 logos inside those games instead of MSI AB logo in overlay:

    [​IMG]
     
    yen1co, EDK-Rise, lionhad and 3 others like this.
  17. rab3072

    rab3072 Member Guru

    Messages:
    133
    Likes Received:
    8
    GPU:
    EVGA RTX 3080 ULTRA
    The new game that just launched - The Texas Chainsaw Massacre - Rivatuner crashes the game. FYI.
     
  18. aufkrawall2

    aufkrawall2 Ancient Guru

    Messages:
    3,237
    Likes Received:
    1,260
    GPU:
    KFA2 4070
    These imho would make sense on the RTSS inject blacklist:
    blender.exe (Blender)
    CrashReportClient.exe (Unreal Engine crash reporting tool)
    FortniteClient-Win64-Shipping_BE.exe
    FortniteClient-Win64-Shipping_EAC.exe
    FortniteClient-Win64-Shipping_EAC_EOS.exe
    FortniteLauncher.exe (Fortnite launcher and anti-cheat launchers, not the actual game process)
    mpv.exe (mpv video player)
    ow-obs.exe
    ow-overlay.exe (Overwolf Outplayed, can lead to blank screenshots with that process name instead of game process screenshot)
     
  19. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    16,751
    Likes Received:
    5,510
    I had to buy the next game I dislike and will never play just to see that it actually works fine. It is not fun, guys. And please do not use this thread for reports like that.

    [​IMG]
     
    eewqtw, yen1co, zebez and 2 others like this.
  20. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    16,751
    Likes Received:
    5,510
    Update on The Texas Chainsaw Massacre:

    Ah, it was not a completely useless purchase. I had a luck to crash it due to overlay. The reason why it works on my system is that I disable delayed injection on my side. The game uses its own delayed injection of EGS overlay (even invisible one, on Steam version) which can cause issues if RTSS injection is also delayed. To bypass it either create a profile for this game and set injection delay to 0ms for it in general properties of RTSS, or create the following profile template which will force alternate D3D12 command queue detection implementation abd can also address that problem:

    BBQClient-Win64-Shipping.exe.cfg

    Code:
    [RendererDirect3D12]
    QueueDetection = 1
    
    Probably besides such built-in application profile I'll also add unified workaround for other future applications with such behaviour.
     
    Last edited: Aug 18, 2023
    eewqtw, rab3072, SanokKule and 5 others like this.

Share This Page