diff --git a/README.md b/README.md index c962cf0..abf6ff4 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,10 @@ Initially DirectX 12 backend was an exercise to learn this graphics API. It turn #### New cvars: * **r_renderAPI** - 3D API to use: 0 - OpenGL, 1 - Vulkan, 2 - DX12. Requires vid_restart. -* **r_twinMode** - Debug feature to compare rendering output between OpenGL/Vulkan/DX12 APIs. - If enabled, renderer uses multiple APIs and renders current frame to two or three side-by-side windows. Requires vid_restart. +* **r_twinMode** - Debug feature to compare rendering output between OpenGL/Vulkan/DX12 APIs. Requires vid_restart. + * r_twinMode=1 : one additional window is created. If the main window uses graphics API defined by r_renderAPI then the additional window will use graphics API with index (r_renderAPI+1)%3 + * r_twinMode=2 : two additional windows are created and all 3 graphics APIs are active simultaneously. -*r_twinMode* is a bitmask. The following values can be combined to enable additional graphics backends: 1 - OpenGL, 2 - Vulkan, 4 - DX12. For example: r_twinMode=7 (1+2+4) - enables all backends and renders to 3 windows. r_twinMode=1 - enables Vulkan backend in addition to active backend defined by *r_renderAPI*. - #### Additional information: * Q: How to start game with vulkan support? A: `quake3-ke.exe +set r_renderAPI 1`. * Q: How to enable vulkan support from Q3 console? A: `\r_renderAPI 1` then `\vid_restart`. diff --git a/src/engine/platform/win_glimp.c b/src/engine/platform/win_glimp.c index 58f5b69..6d120e6 100644 --- a/src/engine/platform/win_glimp.c +++ b/src/engine/platform/win_glimp.c @@ -494,9 +494,7 @@ static HWND create_twin_window(int width, int height, RenderApi render_api) cvar_t* vid_ypos = ri.Cvar_Get ("vid_ypos", "", 0); int x, y; - bool show_three_windows = (r_twinMode->integer | (1 << get_render_api())) == 7; - - if (!show_three_windows) { // two windows + if (r_twinMode->integer == 1) { // two windows x = vid_xpos->integer + width + 5; // offset to the right of the main window y = vid_ypos->integer; } else { // three windows diff --git a/src/engine/renderer/tr_init.c b/src/engine/renderer/tr_init.c index d67e900..dfb8b9e 100644 --- a/src/engine/renderer/tr_init.c +++ b/src/engine/renderer/tr_init.c @@ -211,7 +211,10 @@ static void InitRenderAPI( void ) #endif // OpenGL - if (get_render_api() == RENDER_API_GL || (r_twinMode->integer&1)) { + if (get_render_api() == RENDER_API_GL || + r_twinMode->integer == 1 && get_render_api() == RENDER_API_DX || + r_twinMode->integer == 2) + { GLimp_Init(); GLint temp; @@ -222,14 +225,20 @@ static void InitRenderAPI( void ) } // VULKAN - if (get_render_api() == RENDER_API_VK || (r_twinMode->integer&2)) { + if (get_render_api() == RENDER_API_VK || + r_twinMode->integer == 1 && get_render_api() == RENDER_API_GL || + r_twinMode->integer == 2) + { vk_imp_init(); vk_initialize(); } // DX12 #ifndef DISABLE_DX12 - if (get_render_api() == RENDER_API_DX || (r_twinMode->integer&4)) { + if (get_render_api() == RENDER_API_DX || + r_twinMode->integer == 1 && get_render_api() == RENDER_API_VK || + r_twinMode->integer == 2) + { dx_imp_init(); dx_initialize(); } diff --git a/src/engine/renderer/tr_local.h b/src/engine/renderer/tr_local.h index ead6f61..69254fc 100644 --- a/src/engine/renderer/tr_local.h +++ b/src/engine/renderer/tr_local.h @@ -958,14 +958,12 @@ RenderApi get_render_api(); // extern cvar_t *r_renderAPI; // 3D API to use: 0 - OpenGL, 1 - Vulkan, 2 - DX12 -extern cvar_t *r_twinMode; // Allows to render the same frame in different windows using different graphics APIs. - // This cvar specifies a bitmask that determines which APIs. - // 0 - regular rendering with single window using the graphics API specified by r_renderAPI. - // bit 0 - enables OpenGL backend - // bit 1 - enables Vulkan backend - // bit 2 - enables DX12 backend - // Combinations of the above values are allowed, for example, r_twinMode=7 creates three diffent - // windows using all the supported APIs. +extern cvar_t *r_twinMode; // Debug feature to compare rendering output between OpenGL/Vulkan/DX12 APIs. + // Possible values: + // r_twinMode=1 : one additional window is created. If the main window uses graphics API + // defined by r_renderAPI then the additional window will use graphics API with index (r_renderAPI+1)%3 + // + // r_twinMode=2 : two additional windows are created and all 3 graphics APIs are active simultaneously. extern cvar_t *r_railWidth; extern cvar_t *r_railCoreWidth;