Simplified r_twinMode usage.

This commit is contained in:
Artem Kharytoniuk 2017-12-31 19:48:28 +01:00
parent abe1efe3aa
commit 109a022d7a
4 changed files with 22 additions and 18 deletions

View File

@ -16,10 +16,9 @@ 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* 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*.
* **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.
#### Additional information:
* Q: How to start game with vulkan support? A: `quake3-ke.exe +set r_renderAPI 1`.

View File

@ -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

View File

@ -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();
}

View File

@ -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;