Author Topic: OR code change  (Read 12752 times)

Patrice Terrier

  • Administrator
  • *****
  • Posts: 1980
    • zapsolution
OR code change
« on: November 25, 2019, 05:00:39 pm »
I am adding selection of a specific animation directly from the .mtl file.
And now we can play directly a specific audio file using drag and drop.

Could you check them?

Search // PAT: 11-25-2019  and // PAT: 11-26-2019 for the code changes

And check with the attached robots2 project that requires version #2.82
« Last Edit: November 26, 2019, 03:21:03 pm by Patrice Terrier »
Patrice
(Always working with the latest Windows version available...)

Patrice Terrier

  • Administrator
  • *****
  • Posts: 1980
    • zapsolution
Re: OR code change
« Reply #1 on: November 25, 2019, 09:59:58 pm »
And for the fun, try with this material

#Light frontAmbient 0 0 0
#Light frontDiffuse 165 165 165
#Light frontSpecular 127 127 121

#Light leftAmbient 0 0 0
#Light leftDiffuse 127 127 121
#Light leftSpecular 47 79 79

#Light rightAmbient 0 0 0
#Light rightDiffuse 127 127 121
#Light rightSpecular 112 128 144

#Light topAmbient 0 0 0
#Light topDiffuse 25 25 112
#Light topSpecular 1 0 0

#multilight
#straylight 65
#wallpaper AniLights.fs
#playaudio Light-Years_V001_Looping.mp3 15 loop
#demo

newmtl mat_01
#rotate 0.05 0 0 1 359 361 0
Ka 0.01 0.01 0.01
Kd 0.40000000596046 0.40000000596046 0.40000000596046
Ks 1 1 1
Ke 0.4 0.4 0.4
map_Ka mat_01_AO.png
map_Kd mat_01_ALB.png
map_bump mat_01_NRM.png
map_Ke mat_01_EMS.png
map_Ns mat_01_roughness.png
Ns 512
illum 2

newmtl mat_02
#rotate 0.05 0 0 1 359 361 0
Ka 0.01 0.01 0.01
Kd 0.40000000596046 0.40000000596046 0.40000000596046
Ks 1 1 1
map_Ka mat_02_AO.png
map_Kd mat_02_ALB.png
map_bump mat_02_NRM.png
map_Ns mat_02_roughness.png
Ns 512
illum 2

newmtl mat_03
#rotate -0.12 0 1 0 0 0 0 1
Ka 0.01 0.01 0.01
Kd 0.39235669374466 0.39235669374466 0.39235669374466
Ks 1 1 1
map_Ka mat_03_AO.png
map_Kd mat_03_ALB.png
map_bump mat_03_NRM.png
Ns 512
illum 2

newmtl mat_04
#rotate -0.12 0 1 0 0 0 0 1
Ka 0.01 0.01 0.01
Kd 0.35159236192703 0.35159236192703 0.35159236192703
Ks 1 1 1
Ke 0.4 0.4 0.4
map_Ka mat_04_AO.png
map_Kd mat_04_ALB.png
map_bump mat_04_NRM.png
map_Ke mat_04_EMS.png
Ns 512
illum 2


Note: try also with light rotation...
« Last Edit: November 25, 2019, 10:06:50 pm by Patrice Terrier »
Patrice
(Always working with the latest Windows version available...)

Patrice Terrier

  • Administrator
  • *****
  • Posts: 1980
    • zapsolution
Re: OR code change
« Reply #2 on: November 26, 2019, 03:19:57 pm »
The new official Version 2.82 has been released.
http://www.objreader.com/index.php?topic=2.msg2#msg2
« Last Edit: November 26, 2019, 03:22:37 pm by Patrice Terrier »
Patrice
(Always working with the latest Windows version available...)

Michael Lobko-Lobanovsky

  • Administrator
  • *****
  • Posts: 1481
Re: OR code change
« Reply #3 on: December 03, 2019, 04:13:14 am »
Patrice,

Answering your email, yes, I merged your latest mods with my sources and your Robots2 model displays fine in my OR.

However I have five issues to note:

1. What is the #define for IDC_AUDIO in your constants.h? (you didn't send me that file)

2. As you can remember, we used to have problems with the texture files whose names began with commonly used Tr/tr because they clashed with the Tr parameter abbreviation and thus crashed OR at model load time. To protect against such crashes, the following code was agreed upon in the Mobj_importMaterials() function in mobj.h:

........
        case 't': // Tr
            switch (szBuffer[1]) {
            case 'r': // Tr
                if (szBuffer[2] == 32 || szBuffer[2] == 9) { // MLL 10-10-2019: Tr should always be followed by a space or tab
                    if (pMaterial->alpha == 1.0f) { // 12-06-2015 ML: only if alpha is still default
                        fscanf(pFile, "%f", &pMaterial->alpha);
                        if (pMaterial->alpha > 0.0f) {
                            pMaterial->alpha = 1.0f - pMaterial->alpha; // 12-06-2015 ML: follow OBJ specs
                        }
                        if (pMaterial->alpha == 0.0f) { pMaterial->alpha = 1.0f; } // 02-05-2016
                    } else {
                        fgets(szBuffer, sizeof(szBuffer), pFile); // 12-06-2015 ML: ignore
                    }
                }
                break;
........


Please fix your sources.

3. The new Play audio checkbox appears with an approx. 5 second delay after the model is loaded and the sound begins to play.

4. Ticking/unticking the Play audio checkbox does not toggle the sound for me.

5. The Play audio checkbox does not get hidden on clicking the File->Close all and clear scene menu.

Can you fix those issues, please?
Mike
(3.6GHz Intel Core i5 Quad w/ 16GB RAM, nVidia GTX 1060Ti w/ 6GB VRAM, Windows 7 Ultimate Sp1)

Patrice Terrier

  • Administrator
  • *****
  • Posts: 1980
    • zapsolution
Re: OR code change
« Reply #4 on: December 03, 2019, 01:35:42 pm »
Quote
1. What is the #define for IDC_AUDIO in your constants.h?
#define IDC_AUDIO               123 // PAT: 11-05-2019
#define IDC_ANIMATION           124 // PAT: 06-08-2018
#define IDC_DEMO_MODE           125 // PAT: 12-30-2017
#define IDC_BRIGHT_CONTROL      126 // ML 01-02-2018: scene brightness
//#define IDC_BTN_TOAST           127 // PAT: Test purpose only
#define IDC_GRAPHIC_CARD        128 // PAT: 02-17-2018


Quote
2. As you can remember, we used to have problems with the texture files whose names began with commonly used Tr/tr because they clashed with the Tr parameter abbreviation and thus crashed OR at model load time.

I added your change, but the code is already protected by the change done at line 1123 into mobj.h

Quote
3. The new Play audio checkbox appears with an approx. 5 second delay after the model is loaded and the sound begins to play.
This is because WM_PAINT is a low priority message, to solve this add a windowredraw at the end of gl_LoadModel, like this
    SetWindowPos(gP.hSplitter, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); // PAT: 02-20-2019

    WindowRedraw(gP.hMain); // PA: 12-03-2019, force immediate redraw, to work around the low priority of the WM_PAINT message
}


Quote
4. Ticking/unticking the Play audio checkbox does not toggle the sound for me.
I am unable to reproduce this behavior, it works perfectly well by me :(
Make sure that i goes to BASS_ChannelPause.


Quote
5. The Play audio checkbox does not get hidden on clicking the File->Close all and clear scene menu.
    case MENU_FILE_CLOSE: // MLL 12-20-2018:
        if (gP.bObjectLoaded) { // PAT: 02-27-2019
            gl_CloseAll();
            BassCloseChannel();
            HWND hCtrl = GetDlgItem(gP.hMain, IDC_AUDIO);        // PAT: 12-03-2019
            if (IsWindow(hCtrl)) { ShowWindow(hCtrl, SW_HIDE); } // PAT: 12-03-2019

//TOR            ResetTorControls();
//TOR            MoveTorWindows(FALSE);
        }
        break;


and add this in gl_CloseAll

void gl_CloseAll() { // MLL 12-20-2018: unload model and reset viewport
    RECT vr = { 0 };

    if (gP.bObjectLoaded) {
        ClearMemory(&gP.wModelPath, sizeof(gP.wModelPath));

        if (IsWindowVisible(gP.hOverlay))
            ShowWindow(gP.hOverlay, SW_HIDE);

        HWND hCheckList = GetDlgItem(gP.hMain, IDC_CHECKLIST);
        if (IsWindow(hCheckList)) {
            ListView_DeleteAllItems(hCheckList);
            ZI_UpdateWindow(hCheckList, 0);
        }
        SetWindowText(GetDlgItem(gP.hMain, IDC_VERTICES), $NULL);
        SetWindowText(GetDlgItem(gP.hMain, IDC_TRIANGLES), $NULL);
        SetWindowText(GetDlgItem(gP.hMain, IDC_INDICES), $NULL);
        SetWindowText(GetDlgItem(gP.hMain, IDC_MESHES), $NULL);
        SetWindowText(GetDlgItem(gP.hMain, IDC_MATERIALS), $NULL);
        SetWindowText(GetDlgItem(gP.hMain, IDC_OBJ_SIZE), $NULL);
        SetWindowText(GetDlgItem(gP.hMain, IDC_LOAD_TIME), $NULL);
        SetWindowText(gP.hMain, MAIN_CAPTION);

        if (Mobj_getNumberOfVertices())
            Mobj_destroy();

        gP.frontAmbient = gP.frontDiffuse = gP.frontSpecular = 0;
        gP.leftAmbient = gP.leftDiffuse = gP.leftSpecular = 0;
        gP.rightAmbient = gP.rightDiffuse = gP.rightSpecular = 0;
        gP.topAmbient = gP.topDiffuse = gP.topSpecular = 0;
        gP.nSplitXoffset = 0;

        if (gP.bGiration) { // PAT: 12-03-2019
            gP.bGiration = FALSE;
            SendMessage(GetDlgItem(gP.hMain, IDC_DEMO_MODE), BM_SETCHECK, MF_UNCHECKED, 0); // hack: reuse MF_ flags as BST_ flags
            CheckMenuItem(gR.hAniMenu, MENU_ANI_MODEL, MF_UNCHECKED);
        }


#ifdef MLL_DEV
        HideHelp();
#endif

        GetViewRect(gP.hMain, &vr);
        MoveWindow(gP.hGL, 0, 0, gP.glWidth, gP.glHeight, TRUE);
        MoveWindow(gP.hSplitter, vr.right, vr.top, SPLITTER_WIDTH, gP.glHeight, TRUE);

        ResetCamera();
        gl_DestroyObjTextures();

        backToStaticBkgnd(); // MLL 06-10-2019:

        gl_InitRenderProps(); // ... and redraw the viewport
    }
}
« Last Edit: December 03, 2019, 01:39:51 pm by Patrice Terrier »
Patrice
(Always working with the latest Windows version available...)

Michael Lobko-Lobanovsky

  • Administrator
  • *****
  • Posts: 1481
Re: OR code change
« Reply #5 on: December 03, 2019, 04:28:06 pm »
Okay Patrice,

1./4. Setting a correct #define for IDC_AUDIO (rather than an arbitrary number higher than 59902) fixed the both issues.

2. I'm still in favor of my solution because it does the same but works faster; it checks the space/tab character only if the line begins with a T or t while your solution checks every line in the file for the presence of a rather long string char sequence #playaudio, which is objectively slower. If you've put in my code, you can safely delete yours from line 1123 to 1127. There is no point in checking a global #meta in a local material section.

3. The forced redraw really did the trick.

5. Now both audio and demo check boxes behave as expected at all times.

Thank you!
Mike
(3.6GHz Intel Core i5 Quad w/ 16GB RAM, nVidia GTX 1060Ti w/ 6GB VRAM, Windows 7 Ultimate Sp1)

Patrice Terrier

  • Administrator
  • *****
  • Posts: 1980
    • zapsolution
Re: OR code change
« Reply #6 on: December 04, 2019, 07:36:49 pm »
Mike

I find that:
AnimateWindow(gP.hInfoTip, 200, AW_BLEND); // emulate genuine tooltip default behavior
is a nuisance when OR is running itself in animated mode.

I would rather use
ShowWindow(gP.hInfoTip, SW_SHOWNOACTIVATE);
to keep the OR animation smooth rather than being interrupted by the tooltip display effect.
Patrice
(Always working with the latest Windows version available...)

Michael Lobko-Lobanovsky

  • Administrator
  • *****
  • Posts: 1481
Re: OR code change
« Reply #7 on: December 04, 2019, 08:23:15 pm »
You're probably right.

Let's do it that way: if both the background and model are static, we use AnimateWindow(). But if at least one or the other is dynamic, then we use ShowWindow().

An alternative approach would be to create the tooltip window in a separate thread, in which case its animation won't block the rendering process. The same concerns the toast window whose animation also stalls rotation. (if only GDImage controls support multithreading)
Mike
(3.6GHz Intel Core i5 Quad w/ 16GB RAM, nVidia GTX 1060Ti w/ 6GB VRAM, Windows 7 Ultimate Sp1)

Patrice Terrier

  • Administrator
  • *****
  • Posts: 1980
    • zapsolution
Re: OR code change
« Reply #8 on: December 05, 2019, 10:55:34 am »
Please, fix this:

void ToggleFullScreen() {
    static DWORD savedExStyle, savedStyle, screenWidth, screenHeight;
    static long OverLayVisible, AnimationVisible, AudioVisible; // PAT: 12-05-2019
    static RECT rcSaved;
    static HRGN oldRgn = 0, newRgn = 0;
    long K = 0, nLeft = 0, nTop = 0;
    WINDOWPLACEMENT wp = { 0 };

    gP.bIsFullScreen = !gP.bIsFullScreen;

    if (GetWindowPlacement(gP.hMain, &wp)) { // 04-20-2015
        if (wp.showCmd == SW_SHOWMAXIMIZED) {
            //ShowWindow(gP.hMain, SW_RESTORE);
            skRestore(gP.hMain);
        }
    }

    if (gP.bIsFullScreen) { // Moving to full screen mode.
        long wasFPS = gP.bUseFPS; if (gP.bUseFPS) { gP.bUseFPS = FALSE; }

        GetWindowRgn(gP.hMain, oldRgn);

        GetWindowRect(gP.hMain, &rcSaved);

        AnimationVisible = IsWindowVisible(GetDlgItem(gP.hMain, IDC_ANIMATION));
        AudioVisible = IsWindowVisible(GetDlgItem(gP.hMain, IDC_AUDIO)); // PAT: 12-05-2019

        if (IsWindowVisible(gP.hHelp)) { HideHelp(); } // PAT: 12-28-2018

        for (K = IDC_FIRST; K <= IDC_LAST; K++) {
            ShowWindow(GetDlgItem(gP.hMain, K), SW_HIDE);
        }
        ShowWindow(gP.hSplitter, SW_HIDE); // PAT: 16-12-2018
        OverLayVisible = IsWindowVisible(gP.hOverlay);

        MONITORINFO tmi = { 0 };
        RECT rw = { 0 };
        HMONITOR hMonitor = MonitorFromWindow(gP.hMain, MONITOR_DEFAULTTONEAREST);
        tmi.cbSize = sizeof(tmi);
        GetWindowRect(gP.hMain, &rw);
        GetMonitorInfo(hMonitor, &tmi);
        screenWidth = abs(tmi.rcMonitor.right - tmi.rcMonitor.left);
        screenHeight = abs(tmi.rcMonitor.bottom - tmi.rcMonitor.top);
        nLeft = skGetSystemMetrics(SK_CXFRAMELEFT);
        nTop = skGetSystemMetrics(SK_CYCAPTION) + skGetSystemMetrics(SK_CYMENU);
        //rw.left = tmi.rcMonitor.left - nLeft + 1; // Pat: 01-05-2016
        rw.left = tmi.rcMonitor.left - nLeft; // Pat: 03-23-2016
        rw.top = tmi.rcMonitor.top - nTop; // Pat: 01-05-2016
        long RightPanelSize = ClientW - ClientWGL;

        // PAT: 02-06-2018 without minus Overlay, no way to let it work correctly
        // Windows do not like when an application take full control of the whole view port...
        rw.right = screenWidth + nLeft + skGetSystemMetrics(SK_CXFRAMERIGHT) + RightPanelSize; //- OverLayVisible; // PAT: 02-12-2018
        rw.bottom = screenHeight + nTop + skGetSystemMetrics(SK_CYFRAMEBOTTOM);
        MoveWindow(gP.hMain, rw.left, rw.top, rw.right, rw.bottom, FALSE);

        // PAT: 02-12-2018
        SetWindowLongPtr(gP.hGL, GWL_STYLE, WS_POPUP | WS_VISIBLE);                                          // PAT: 02-12-2018
        MoveWindow(gP.hGL, 0, 0, screenWidth, screenHeight + 1, FALSE);                                      // PAT: 02-12-2018
        SetWindowPos(gP.hOverlay, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);                        // PAT: 02-12-2018
        if (IsWindow(go.hTip)) { SetWindowPos(go.hTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } // PAT: 02-12-2018

        //newRgn = CreateRectRgn(nLeft - 1, nTop, nLeft + screenWidth - OverLayVisible, nTop + screenHeight); // Pat: 01-05-2016
        newRgn = CreateRectRgn(nLeft, nTop, nLeft + screenWidth, nTop + screenHeight); // PAT: 02-06-2018
        if (newRgn) { SetWindowRgn(gP.hMain, newRgn, TRUE); }

        gP.bUseFPS = wasFPS;
        CheckMenuItem(gP.hSubMenu, MENU_VIEW_FULLSCREEN, MF_CHECKED); // MLL 10-28-2018:

        popupToastWindow(L"Full Screen", L"Press ESC or SPACEBAR to exit the full screen mode."); // MLL 11-15-2018:

    } else { // Moving back to windowed mode.
        HideToast(); // MLL 11-15-2018:

        // PAT: 02-12-2018
        SetWindowLongPtr(gP.hGL, GWL_STYLE, WS_CHILD | WS_VISIBLE);                     // PAT: 02-12-2018
        SetWindowPos(gP.hOverlay, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // PAT: 02-12-2018

        for (K = IDC_FIRST; K <= IDC_LAST; K++) {
            if ((K == IDC_ANIMATION) && (!AnimationVisible)) { continue; }
            if ((K == IDC_AUDIO) && (!AudioVisible)) { continue; } // PAT: 12-05-2019
            ShowWindow(GetDlgItem(gP.hMain, K), SW_SHOW);
        }
        ShowWindow(gP.hSplitter, SW_SHOW); // PAT: 16-12-2018
        if (OverLayVisible) { ShowWindow(gP.hOverlay, SW_SHOW); }

        screenWidth = rcSaved.right - rcSaved.left;
        screenHeight = rcSaved.bottom - rcSaved.top;
        SetWindowRgn(gP.hMain, oldRgn, FALSE);
        SetWindowPos(gP.hMain, HWND_NOTOPMOST, rcSaved.left, rcSaved.top, screenWidth, screenHeight, SWP_SHOWWINDOW);
        if (oldRgn) { SetWindowRgn(gP.hMain, oldRgn, TRUE); }
        if (newRgn) { DeleteObject(newRgn); }
        PostMessage(gP.hMain, WM_SIZE, 0, MAKLNG(screenWidth, screenHeight));
        CheckMenuItem(gP.hSubMenu, MENU_VIEW_FULLSCREEN, MF_UNCHECKED); // MLL 10-28-2018:
    }
    SetFocus(gP.hGL); // MLL 10-28-2018: Z rotation support
}
Patrice
(Always working with the latest Windows version available...)

Michael Lobko-Lobanovsky

  • Administrator
  • *****
  • Posts: 1481
Re: OR code change
« Reply #9 on: December 05, 2019, 12:53:05 pm »
Done as requested, Patrice!

And you, in your turn, please add the following fixes to Infotip.h:

void showTip(IN POINT & pos) {
    SIZE txtsize;
    HDC hDC, hDCompat;
    HWND hWnd;
    HGDIOBJ hObj;
    POINT p;
    int x, y, txtx, txty, dx, dy;

    p.x = pos.x; p.y = pos.y + 18;

    hDCompat = CreateCompatibleDC(hDC = GetDC(hWnd = GetDesktopWindow()));
    ReleaseDC(hWnd, hDC);
    hObj = SelectObject(hDCompat, GetStockObject(DEFAULT_GUI_FONT));
    GetTextExtentPoint32(hDCompat, infoTipText, lstrlen(infoTipText), &txtsize);
    SelectObject(hDCompat, hObj); // restore original font
    DeleteDC(hDCompat);
    x = GetSystemMetrics(SM_CXVIRTUALSCREEN);
    y = GetSystemMetrics(SM_CYVIRTUALSCREEN);
    dx = txtsize.cx + 8; dy = txtsize.cy + 7;
    txtx = p.x + dx; txty = p.y + dy;
    if (txtx > x)
        p.x -= (txtx - x);
    if (txty > y)
        p.y -= (dy + 20);
    SetWindowPos(gP.hInfoTip, HWND_TOP, p.x, p.y, dx, dy, SWP_NOACTIVATE);
    if (gP.bGiration || gP.bRotation || gP.bAniBkgnd)
        ShowWindow(gP.hInfoTip, SW_SHOWNOACTIVATE);
    else

        AnimateWindow(gP.hInfoTip, 200, AW_BLEND); // emulate genuine tooltip default behavior
}

void hideTip() {
    if (gP.bGiration || gP.bRotation || gP.bAniBkgnd)
        ShowWindow(gP.hInfoTip, SW_HIDE);
    else

        AnimateWindow(gP.hInfoTip, 100, AW_BLEND | AW_HIDE); // emulate genuine tooltip default behavior
    infoTipText = TipFormat(L"Background");
    //infoTipMeshID = -1;
}


to implement your earlier suggestion to unblock animation while showing/hiding the info tip.
Mike
(3.6GHz Intel Core i5 Quad w/ 16GB RAM, nVidia GTX 1060Ti w/ 6GB VRAM, Windows 7 Ultimate Sp1)

Patrice Terrier

  • Administrator
  • *****
  • Posts: 1980
    • zapsolution
Re: OR code change
« Reply #10 on: December 05, 2019, 01:37:23 pm »
Looks like we have done twice almost the same change(s).

See in the attachment the new IsAnimated() function (in ToastWindow.h),
used both in HideToast/ShowToast and HideTip/ShowTip.

Added:
I need to make more room on the right pannel to add a new gauge control  ???

...
« Last Edit: December 05, 2019, 02:51:56 pm by Patrice Terrier »
Patrice
(Always working with the latest Windows version available...)

Michael Lobko-Lobanovsky

  • Administrator
  • *****
  • Posts: 1481
Re: OR code change
« Reply #11 on: December 05, 2019, 05:24:56 pm »
Re: render blockers
Well, they say "great minds think alike". ;) I added your function in place of my duplicate ORs.

Re: gl_CloseAll()
There were times when audio used to not stop in response to clicking the Close all and clear screen menu; so my function (in Main.cpp) now begins with

void gl_CloseAll() { // MLL 12-20-2018: unload model and reset viewport
    RECT vr = { 0 };

    if (gP.bObjectLoaded) {
        BassCloseChannel();
        ClearMemory(&gP.wModelPath, sizeof(gP.wModelPath));
........


Is your OR audio responsive to this menu? If not, please add that line to your function.

Re: right panel size
Can you also make it autohide (automatically slide away to the right completely out of view leaving only the splitter visible) when the cursor is not close to the right border of main window? If you could, then we would have a much broader view of completely unobscured OpenGL view of the scene... ::)
Mike
(3.6GHz Intel Core i5 Quad w/ 16GB RAM, nVidia GTX 1060Ti w/ 6GB VRAM, Windows 7 Ultimate Sp1)

Patrice Terrier

  • Administrator
  • *****
  • Posts: 1980
    • zapsolution
Re: OR code change
« Reply #12 on: December 05, 2019, 06:35:38 pm »
When starting in demo mode with a background animation, it takes several seconds before the mouse click get responsive, any thought on how to fix this?

(Cursor stay in hour glass mode for a while)

That is what causes the slowdown at startup, and the reason why i had to force a WindowRedraw at the end of gl_LoadModel (check it with ROBOTS2).

Added:
Here is a screen shot of the new GUI
with the new audio volume level gauge.

More:
I may have found a solution to work around the slowdown...
« Last Edit: December 05, 2019, 07:56:22 pm by Patrice Terrier »
Patrice
(Always working with the latest Windows version available...)

Patrice Terrier

  • Administrator
  • *****
  • Posts: 1980
    • zapsolution
Re: OR code change
« Reply #13 on: December 05, 2019, 08:38:55 pm »
Here is the sync version, sorry for the extra work.  :-\

volume.png is to copy into the reader skin folder.
Patrice
(Always working with the latest Windows version available...)

Michael Lobko-Lobanovsky

  • Administrator
  • *****
  • Posts: 1481
Re: OR code change
« Reply #14 on: December 05, 2019, 09:02:35 pm »
Patrice,

Thank you for the mods but I will only give you my feedback tomorrow.

I can only tell you now that I wouldn't mind if you could replace the alpha threshold knob and illumination slider too with buttons like that of audio. The panel would then look more uniform and less crowded with dissimilar controls...
Mike
(3.6GHz Intel Core i5 Quad w/ 16GB RAM, nVidia GTX 1060Ti w/ 6GB VRAM, Windows 7 Ultimate Sp1)