GUI: vendor/device name for render backends
This commit is contained in:
parent
2020aba481
commit
484f6570aa
|
@ -930,7 +930,7 @@ if (WITH_RENDER_DX11)
|
||||||
list(APPEND GUI_SOURCES src/gui/render/renderDX11.cpp)
|
list(APPEND GUI_SOURCES src/gui/render/renderDX11.cpp)
|
||||||
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_dx11.cpp)
|
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_dx11.cpp)
|
||||||
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_DX11)
|
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_DX11)
|
||||||
list(APPEND DEPENDENCIES_LIBRARIES d3d11)
|
list(APPEND DEPENDENCIES_LIBRARIES d3d11 dxgi)
|
||||||
message(STATUS "UI render backend: DirectX 11")
|
message(STATUS "UI render backend: DirectX 11")
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
|
|
10
extern/imgui_software_renderer/imgui_sw.cpp
vendored
10
extern/imgui_software_renderer/imgui_sw.cpp
vendored
|
@ -46,10 +46,14 @@ namespace {
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
struct ColorInt
|
union ColorInt
|
||||||
{
|
{
|
||||||
uint8_t r, g, b, a = 0;
|
struct {
|
||||||
ColorInt(const std::string &) {}
|
uint8_t r, g, b, a;
|
||||||
|
};
|
||||||
|
uint32_t u32;
|
||||||
|
ColorInt():
|
||||||
|
u32(0) {}
|
||||||
|
|
||||||
|
|
||||||
ColorInt &operator*=(const ColorInt &other)
|
ColorInt &operator*=(const ColorInt &other)
|
||||||
|
|
|
@ -1460,6 +1460,12 @@ class FurnaceGUIRender {
|
||||||
virtual bool supportsDrawOsc();
|
virtual bool supportsDrawOsc();
|
||||||
virtual bool getOutputSize(int& w, int& h);
|
virtual bool getOutputSize(int& w, int& h);
|
||||||
virtual int getWindowFlags();
|
virtual int getWindowFlags();
|
||||||
|
virtual int getMaxTextureWidth();
|
||||||
|
virtual int getMaxTextureHeight();
|
||||||
|
virtual const char* getBackendName();
|
||||||
|
virtual const char* getVendorName();
|
||||||
|
virtual const char* getDeviceName();
|
||||||
|
virtual const char* getAPIVersion();
|
||||||
virtual void setSwapInterval(int swapInterval);
|
virtual void setSwapInterval(int swapInterval);
|
||||||
virtual void preInit();
|
virtual void preInit();
|
||||||
virtual bool init(SDL_Window* win, int swapInterval);
|
virtual bool init(SDL_Window* win, int swapInterval);
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
bool FurnaceGUI::initRender() {
|
bool FurnaceGUI::initRender() {
|
||||||
if (rend!=NULL) return false;
|
if (rend!=NULL) return false;
|
||||||
|
|
||||||
|
logV("requested backend: %s",settings.renderBackend);
|
||||||
|
|
||||||
if (safeMode) {
|
if (safeMode) {
|
||||||
renderBackend=GUI_BACKEND_SDL;
|
renderBackend=GUI_BACKEND_SDL;
|
||||||
} else if (settings.renderBackend=="OpenGL" || settings.renderBackend=="OpenGL 3.0" || settings.renderBackend=="OpenGL ES 2.0") {
|
} else if (settings.renderBackend=="OpenGL" || settings.renderBackend=="OpenGL 3.0" || settings.renderBackend=="OpenGL ES 2.0") {
|
||||||
|
|
|
@ -101,6 +101,30 @@ int FurnaceGUIRender::getWindowFlags() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRender::getMaxTextureWidth() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRender::getMaxTextureHeight() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRender::getBackendName() {
|
||||||
|
return "Dummy";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRender::getVendorName() {
|
||||||
|
return "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRender::getDeviceName() {
|
||||||
|
return "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRender::getAPIVersion() {
|
||||||
|
return "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRender::setSwapInterval(int swapInterval) {
|
void FurnaceGUIRender::setSwapInterval(int swapInterval) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <SDL_syswm.h>
|
#include <SDL_syswm.h>
|
||||||
#include "backends/imgui_impl_dx11.h"
|
#include "backends/imgui_impl_dx11.h"
|
||||||
#include "../../ta-log.h"
|
#include "../../ta-log.h"
|
||||||
|
#include "../../utfutils.h"
|
||||||
|
|
||||||
typedef HRESULT (__stdcall *D3DCompile_t)(LPCVOID,SIZE_T,LPCSTR,D3D_SHADER_MACRO*,ID3DInclude*,LPCSTR,LPCSTR,UINT,UINT,ID3DBlob**,ID3DBlob*);
|
typedef HRESULT (__stdcall *D3DCompile_t)(LPCVOID,SIZE_T,LPCSTR,D3D_SHADER_MACRO*,ID3DInclude*,LPCSTR,LPCSTR,UINT,UINT,ID3DBlob**,ID3DBlob*);
|
||||||
|
|
||||||
|
@ -368,6 +369,30 @@ int FurnaceGUIRenderDX11::getWindowFlags() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderDX11::getMaxTextureWidth() {
|
||||||
|
return maxWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderDX11::getMaxTextureHeight() {
|
||||||
|
return maxHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderDX11::getBackendName() {
|
||||||
|
return "DirectX 11";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderDX11::getVendorName() {
|
||||||
|
return vendorName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderDX11::getDeviceName() {
|
||||||
|
return deviceName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderDX11::getAPIVersion() {
|
||||||
|
return apiVersion.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderDX11::setSwapInterval(int swapInt) {
|
void FurnaceGUIRenderDX11::setSwapInterval(int swapInt) {
|
||||||
swapInterval=swapInt;
|
swapInterval=swapInt;
|
||||||
}
|
}
|
||||||
|
@ -393,6 +418,7 @@ bool FurnaceGUIRenderDX11::init(SDL_Window* win, int swapInt) {
|
||||||
}
|
}
|
||||||
HWND window=(HWND)sysWindow.info.win.window;
|
HWND window=(HWND)sysWindow.info.win.window;
|
||||||
|
|
||||||
|
// prepare swapchain
|
||||||
swapInterval=swapInt;
|
swapInterval=swapInt;
|
||||||
|
|
||||||
DXGI_SWAP_CHAIN_DESC chainDesc;
|
DXGI_SWAP_CHAIN_DESC chainDesc;
|
||||||
|
@ -411,12 +437,51 @@ bool FurnaceGUIRenderDX11::init(SDL_Window* win, int swapInt) {
|
||||||
chainDesc.SwapEffect=DXGI_SWAP_EFFECT_DISCARD;
|
chainDesc.SwapEffect=DXGI_SWAP_EFFECT_DISCARD;
|
||||||
chainDesc.Flags=DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
|
chainDesc.Flags=DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
|
||||||
|
|
||||||
|
// initialize
|
||||||
HRESULT result=D3D11CreateDeviceAndSwapChain(NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,0,possibleFeatureLevels,2,D3D11_SDK_VERSION,&chainDesc,&swapchain,&device,&featureLevel,&context);
|
HRESULT result=D3D11CreateDeviceAndSwapChain(NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,0,possibleFeatureLevels,2,D3D11_SDK_VERSION,&chainDesc,&swapchain,&device,&featureLevel,&context);
|
||||||
if (result!=S_OK) {
|
if (result!=S_OK) {
|
||||||
logE("could not create device and/or swap chain! %.8x",result);
|
logE("could not create device and/or swap chain! %.8x",result);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IDXGIDevice* giDevice=NULL;
|
||||||
|
IDXGIAdapter* adapter=NULL;
|
||||||
|
|
||||||
|
result=device->QueryInterface(__uuidof(IDXGIDevice),(void**)&giDevice);
|
||||||
|
if (result==S_OK) {
|
||||||
|
result=giDevice->GetAdapter(&adapter);
|
||||||
|
if (result==S_OK) {
|
||||||
|
DXGI_ADAPTER_DESC adapterDesc;
|
||||||
|
|
||||||
|
result=adapter->GetDesc(&adapterDesc);
|
||||||
|
if (result!=S_OK) {
|
||||||
|
logE("could not get adapter info! %.8x",result);
|
||||||
|
} else {
|
||||||
|
deviceName=utf16To8(adapterDesc.Description);
|
||||||
|
vendorName=fmt::sprintf("%.4x:%.4x",adapterDesc.VendorId,adapterDesc.DeviceId);
|
||||||
|
logV("device: %s",deviceName);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logE("could not get adapter! %.8x",result);
|
||||||
|
logE("won't be able to get adapter info...");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logE("could not query interface! %.8x",result);
|
||||||
|
logE("won't be able to get adapter info...");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (featureLevel>=0xb000) {
|
||||||
|
maxWidth=16384;
|
||||||
|
maxHeight=16384;
|
||||||
|
} else if (featureLevel>=0xa000) {
|
||||||
|
maxWidth=8192;
|
||||||
|
maxHeight=8192;
|
||||||
|
} else {
|
||||||
|
maxWidth=4096;
|
||||||
|
maxHeight=4096;
|
||||||
|
}
|
||||||
|
apiVersion=fmt::sprintf("%d.%d",((int)featureLevel)>>12,((int)featureLevel)>>8);
|
||||||
|
|
||||||
// https://github.com/ocornut/imgui/pull/638
|
// https://github.com/ocornut/imgui/pull/638
|
||||||
D3DCompile_t D3DCompile=NULL;
|
D3DCompile_t D3DCompile=NULL;
|
||||||
char dllBuffer[20];
|
char dllBuffer[20];
|
||||||
|
|
|
@ -56,6 +56,9 @@ class FurnaceGUIRenderDX11: public FurnaceGUIRender {
|
||||||
float padding[7];
|
float padding[7];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int maxWidth, maxHeight;
|
||||||
|
String vendorName, deviceName, apiVersion;
|
||||||
|
|
||||||
bool destroyRenderTarget();
|
bool destroyRenderTarget();
|
||||||
bool createRenderTarget();
|
bool createRenderTarget();
|
||||||
|
|
||||||
|
@ -79,6 +82,12 @@ class FurnaceGUIRenderDX11: public FurnaceGUIRender {
|
||||||
void present();
|
void present();
|
||||||
bool getOutputSize(int& w, int& h);
|
bool getOutputSize(int& w, int& h);
|
||||||
int getWindowFlags();
|
int getWindowFlags();
|
||||||
|
int getMaxTextureWidth();
|
||||||
|
int getMaxTextureHeight();
|
||||||
|
const char* getBackendName();
|
||||||
|
const char* getVendorName();
|
||||||
|
const char* getDeviceName();
|
||||||
|
const char* getAPIVersion();
|
||||||
void setSwapInterval(int swapInterval);
|
void setSwapInterval(int swapInterval);
|
||||||
void preInit();
|
void preInit();
|
||||||
bool init(SDL_Window* win, int swapInterval);
|
bool init(SDL_Window* win, int swapInterval);
|
||||||
|
@ -101,6 +110,8 @@ class FurnaceGUIRenderDX11: public FurnaceGUIRender {
|
||||||
sh_wipe_vertex(NULL),
|
sh_wipe_vertex(NULL),
|
||||||
sh_wipe_fragment(NULL),
|
sh_wipe_fragment(NULL),
|
||||||
sh_wipe_inputLayout(NULL),
|
sh_wipe_inputLayout(NULL),
|
||||||
sh_wipe_uniform(NULL) {
|
sh_wipe_uniform(NULL),
|
||||||
|
maxWidth(8192),
|
||||||
|
maxHeight(8192) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -546,6 +546,30 @@ int FurnaceGUIRenderGL::getWindowFlags() {
|
||||||
return SDL_WINDOW_OPENGL;
|
return SDL_WINDOW_OPENGL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderGL::getMaxTextureWidth() {
|
||||||
|
return maxWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderGL::getMaxTextureHeight() {
|
||||||
|
return maxHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderGL::getBackendName() {
|
||||||
|
return backendName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderGL::getVendorName() {
|
||||||
|
return vendorName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderGL::getDeviceName() {
|
||||||
|
return deviceName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderGL::getAPIVersion() {
|
||||||
|
return apiVersion.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderGL::setSwapInterval(int swapInterval) {
|
void FurnaceGUIRenderGL::setSwapInterval(int swapInterval) {
|
||||||
SDL_GL_SetSwapInterval(swapInterval);
|
SDL_GL_SetSwapInterval(swapInterval);
|
||||||
if (swapInterval>0 && SDL_GL_GetSwapInterval()==0) {
|
if (swapInterval>0 && SDL_GL_GetSwapInterval()==0) {
|
||||||
|
@ -640,8 +664,36 @@ bool FurnaceGUIRenderGL::init(SDL_Window* win, int swapInterval) {
|
||||||
|
|
||||||
#ifndef USE_GLES
|
#ifndef USE_GLES
|
||||||
LOAD_PROC_OPTIONAL(furGetGraphicsResetStatusARB,PFNGLGETGRAPHICSRESETSTATUSARBPROC,"glGetGraphicsResetStatusARB");
|
LOAD_PROC_OPTIONAL(furGetGraphicsResetStatusARB,PFNGLGETGRAPHICSRESETSTATUSARBPROC,"glGetGraphicsResetStatusARB");
|
||||||
|
#else
|
||||||
|
backendName="OpenGL ES 2.0";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// information
|
||||||
|
const char* next=(const char*)glGetString(GL_VENDOR);
|
||||||
|
if (next==NULL) {
|
||||||
|
vendorName="???";
|
||||||
|
} else {
|
||||||
|
vendorName=next;
|
||||||
|
}
|
||||||
|
next=(const char*)glGetString(GL_RENDERER);
|
||||||
|
if (next==NULL) {
|
||||||
|
deviceName="???";
|
||||||
|
} else {
|
||||||
|
deviceName=next;
|
||||||
|
}
|
||||||
|
next=(const char*)glGetString(GL_VERSION);
|
||||||
|
if (next==NULL) {
|
||||||
|
apiVersion="???";
|
||||||
|
} else {
|
||||||
|
apiVersion=next;
|
||||||
|
}
|
||||||
|
|
||||||
|
int maxSize=1024;
|
||||||
|
glGetIntegerv(GL_MAX_TEXTURE_SIZE,&maxSize);
|
||||||
|
|
||||||
|
maxWidth=maxSize;
|
||||||
|
maxHeight=maxSize;
|
||||||
|
|
||||||
// texture for osc renderer
|
// texture for osc renderer
|
||||||
if (glVer==3) {
|
if (glVer==3) {
|
||||||
C(glGenTextures(1,&oscDataTex));
|
C(glGenTextures(1,&oscDataTex));
|
||||||
|
@ -725,4 +777,11 @@ bool FurnaceGUIRenderGL::isDead() {
|
||||||
|
|
||||||
void FurnaceGUIRenderGL::setVersion(unsigned char ver) {
|
void FurnaceGUIRenderGL::setVersion(unsigned char ver) {
|
||||||
glVer=ver;
|
glVer=ver;
|
||||||
|
if (glVer==3) {
|
||||||
|
backendName="OpenGL 3.0";
|
||||||
|
} else if (glVer==2) {
|
||||||
|
backendName="OpenGL 2.0";
|
||||||
|
} else {
|
||||||
|
backendName="OpenGL BUG.REPORT";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,9 @@ class FurnaceGUIRenderGL: public FurnaceGUIRender {
|
||||||
bool swapIntervalSet;
|
bool swapIntervalSet;
|
||||||
unsigned char glVer;
|
unsigned char glVer;
|
||||||
|
|
||||||
|
int maxWidth, maxHeight;
|
||||||
|
String backendName, vendorName, deviceName, apiVersion;
|
||||||
|
|
||||||
bool createShader(const char* vertexS, const char* fragmentS, int& vertex, int& fragment, int& program, const char** attribNames);
|
bool createShader(const char* vertexS, const char* fragmentS, int& vertex, int& fragment, int& program, const char** attribNames);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -72,6 +75,12 @@ class FurnaceGUIRenderGL: public FurnaceGUIRender {
|
||||||
bool getOutputSize(int& w, int& h);
|
bool getOutputSize(int& w, int& h);
|
||||||
bool supportsDrawOsc();
|
bool supportsDrawOsc();
|
||||||
int getWindowFlags();
|
int getWindowFlags();
|
||||||
|
int getMaxTextureWidth();
|
||||||
|
int getMaxTextureHeight();
|
||||||
|
const char* getBackendName();
|
||||||
|
const char* getVendorName();
|
||||||
|
const char* getDeviceName();
|
||||||
|
const char* getAPIVersion();
|
||||||
void setSwapInterval(int swapInterval);
|
void setSwapInterval(int swapInterval);
|
||||||
void preInit();
|
void preInit();
|
||||||
bool init(SDL_Window* win, int swapInterval);
|
bool init(SDL_Window* win, int swapInterval);
|
||||||
|
@ -83,7 +92,11 @@ class FurnaceGUIRenderGL: public FurnaceGUIRender {
|
||||||
FurnaceGUIRenderGL():
|
FurnaceGUIRenderGL():
|
||||||
context(NULL),
|
context(NULL),
|
||||||
sdlWin(NULL),
|
sdlWin(NULL),
|
||||||
swapIntervalSet(true) {
|
swapIntervalSet(true),
|
||||||
|
glVer(3),
|
||||||
|
maxWidth(0),
|
||||||
|
maxHeight(0),
|
||||||
|
backendName("What?") {
|
||||||
memset(quadVertex,0,4*3*sizeof(float));
|
memset(quadVertex,0,4*3*sizeof(float));
|
||||||
memset(oscVertex,0,4*5*sizeof(float));
|
memset(oscVertex,0,4*5*sizeof(float));
|
||||||
memset(oscData,0,2048*sizeof(float));
|
memset(oscData,0,2048*sizeof(float));
|
||||||
|
|
|
@ -211,6 +211,30 @@ int FurnaceGUIRenderGL1::getWindowFlags() {
|
||||||
return SDL_WINDOW_OPENGL;
|
return SDL_WINDOW_OPENGL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderGL1::getMaxTextureWidth() {
|
||||||
|
return maxWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderGL1::getMaxTextureHeight() {
|
||||||
|
return maxHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderGL1::getBackendName() {
|
||||||
|
return "OpenGL 1.1";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderGL1::getVendorName() {
|
||||||
|
return vendorName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderGL1::getDeviceName() {
|
||||||
|
return deviceName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderGL1::getAPIVersion() {
|
||||||
|
return apiVersion.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderGL1::setSwapInterval(int swapInterval) {
|
void FurnaceGUIRenderGL1::setSwapInterval(int swapInterval) {
|
||||||
SDL_GL_SetSwapInterval(swapInterval);
|
SDL_GL_SetSwapInterval(swapInterval);
|
||||||
if (swapInterval>0 && SDL_GL_GetSwapInterval()==0) {
|
if (swapInterval>0 && SDL_GL_GetSwapInterval()==0) {
|
||||||
|
@ -263,6 +287,31 @@ bool FurnaceGUIRenderGL1::init(SDL_Window* win, int swapInterval) {
|
||||||
swapIntervalSet=true;
|
swapIntervalSet=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* next=(const char*)glGetString(GL_VENDOR);
|
||||||
|
if (next==NULL) {
|
||||||
|
vendorName="???";
|
||||||
|
} else {
|
||||||
|
vendorName=next;
|
||||||
|
}
|
||||||
|
next=(const char*)glGetString(GL_RENDERER);
|
||||||
|
if (next==NULL) {
|
||||||
|
deviceName="???";
|
||||||
|
} else {
|
||||||
|
deviceName=next;
|
||||||
|
}
|
||||||
|
next=(const char*)glGetString(GL_VERSION);
|
||||||
|
if (next==NULL) {
|
||||||
|
apiVersion="???";
|
||||||
|
} else {
|
||||||
|
apiVersion=next;
|
||||||
|
}
|
||||||
|
|
||||||
|
int maxSize=1024;
|
||||||
|
glGetIntegerv(GL_MAX_TEXTURE_SIZE,&maxSize);
|
||||||
|
|
||||||
|
maxWidth=maxSize;
|
||||||
|
maxHeight=maxSize;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,9 @@ class FurnaceGUIRenderGL1: public FurnaceGUIRender {
|
||||||
SDL_Window* sdlWin;
|
SDL_Window* sdlWin;
|
||||||
|
|
||||||
bool swapIntervalSet;
|
bool swapIntervalSet;
|
||||||
unsigned char glVer;
|
|
||||||
|
int maxWidth, maxHeight;
|
||||||
|
String vendorName, deviceName, apiVersion;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ImTextureID getTextureID(FurnaceGUITexture* which);
|
ImTextureID getTextureID(FurnaceGUITexture* which);
|
||||||
|
@ -47,6 +49,12 @@ class FurnaceGUIRenderGL1: public FurnaceGUIRender {
|
||||||
void present();
|
void present();
|
||||||
bool getOutputSize(int& w, int& h);
|
bool getOutputSize(int& w, int& h);
|
||||||
int getWindowFlags();
|
int getWindowFlags();
|
||||||
|
int getMaxTextureWidth();
|
||||||
|
int getMaxTextureHeight();
|
||||||
|
const char* getBackendName();
|
||||||
|
const char* getVendorName();
|
||||||
|
const char* getDeviceName();
|
||||||
|
const char* getAPIVersion();
|
||||||
void setSwapInterval(int swapInterval);
|
void setSwapInterval(int swapInterval);
|
||||||
void preInit();
|
void preInit();
|
||||||
bool init(SDL_Window* win, int swapInterval);
|
bool init(SDL_Window* win, int swapInterval);
|
||||||
|
@ -57,6 +65,8 @@ class FurnaceGUIRenderGL1: public FurnaceGUIRender {
|
||||||
FurnaceGUIRenderGL1():
|
FurnaceGUIRenderGL1():
|
||||||
context(NULL),
|
context(NULL),
|
||||||
sdlWin(NULL),
|
sdlWin(NULL),
|
||||||
swapIntervalSet(true) {
|
swapIntervalSet(true),
|
||||||
|
maxWidth(0),
|
||||||
|
maxHeight(0) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -146,6 +146,33 @@ int FurnaceGUIRenderSDL::getWindowFlags() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderSDL::getMaxTextureWidth() {
|
||||||
|
if (!hasInfo) return 2048;
|
||||||
|
return renderInfo.max_texture_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderSDL::getMaxTextureHeight() {
|
||||||
|
if (!hasInfo) return 2048;
|
||||||
|
return renderInfo.max_texture_height;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderSDL::getBackendName() {
|
||||||
|
return "SDL Renderer";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderSDL::getVendorName() {
|
||||||
|
return "SDL";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderSDL::getDeviceName() {
|
||||||
|
if (!hasInfo) return "???";
|
||||||
|
return renderInfo.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderSDL::getAPIVersion() {
|
||||||
|
return "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderSDL::setSwapInterval(int swapInterval) {
|
void FurnaceGUIRenderSDL::setSwapInterval(int swapInterval) {
|
||||||
if (SDL_RenderSetVSync(sdlRend,(swapInterval>=0)?1:0)!=0) {
|
if (SDL_RenderSetVSync(sdlRend,(swapInterval>=0)?1:0)!=0) {
|
||||||
swapIntervalSet=false;
|
swapIntervalSet=false;
|
||||||
|
@ -161,6 +188,13 @@ void FurnaceGUIRenderSDL::preInit() {
|
||||||
bool FurnaceGUIRenderSDL::init(SDL_Window* win, int swapInterval) {
|
bool FurnaceGUIRenderSDL::init(SDL_Window* win, int swapInterval) {
|
||||||
logV("creating SDL renderer...");
|
logV("creating SDL renderer...");
|
||||||
sdlRend=SDL_CreateRenderer(win,-1,SDL_RENDERER_ACCELERATED|((swapInterval>0)?SDL_RENDERER_PRESENTVSYNC:0)|SDL_RENDERER_TARGETTEXTURE);
|
sdlRend=SDL_CreateRenderer(win,-1,SDL_RENDERER_ACCELERATED|((swapInterval>0)?SDL_RENDERER_PRESENTVSYNC:0)|SDL_RENDERER_TARGETTEXTURE);
|
||||||
|
if (sdlRend==NULL) return false;
|
||||||
|
if (SDL_GetRendererInfo(sdlRend,&renderInfo)==0) {
|
||||||
|
hasInfo=true;
|
||||||
|
} else {
|
||||||
|
logE("could not get renderer info! %s",SDL_GetError());
|
||||||
|
hasInfo=false;
|
||||||
|
}
|
||||||
if (SDL_RenderSetVSync(sdlRend,(swapInterval>=0)?1:0)!=0) {
|
if (SDL_RenderSetVSync(sdlRend,(swapInterval>=0)?1:0)!=0) {
|
||||||
swapIntervalSet=false;
|
swapIntervalSet=false;
|
||||||
logW("tried to enable VSync but couldn't!");
|
logW("tried to enable VSync but couldn't!");
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
|
|
||||||
class FurnaceGUIRenderSDL: public FurnaceGUIRender {
|
class FurnaceGUIRenderSDL: public FurnaceGUIRender {
|
||||||
SDL_Renderer* sdlRend;
|
SDL_Renderer* sdlRend;
|
||||||
|
SDL_RendererInfo renderInfo;
|
||||||
|
bool hasInfo;
|
||||||
bool swapIntervalSet;
|
bool swapIntervalSet;
|
||||||
public:
|
public:
|
||||||
ImTextureID getTextureID(FurnaceGUITexture* which);
|
ImTextureID getTextureID(FurnaceGUITexture* which);
|
||||||
|
@ -41,6 +43,12 @@ class FurnaceGUIRenderSDL: public FurnaceGUIRender {
|
||||||
void present();
|
void present();
|
||||||
bool getOutputSize(int& w, int& h);
|
bool getOutputSize(int& w, int& h);
|
||||||
int getWindowFlags();
|
int getWindowFlags();
|
||||||
|
int getMaxTextureWidth();
|
||||||
|
int getMaxTextureHeight();
|
||||||
|
const char* getBackendName();
|
||||||
|
const char* getVendorName();
|
||||||
|
const char* getDeviceName();
|
||||||
|
const char* getAPIVersion();
|
||||||
void setSwapInterval(int swapInterval);
|
void setSwapInterval(int swapInterval);
|
||||||
void preInit();
|
void preInit();
|
||||||
bool init(SDL_Window* win, int swapInterval);
|
bool init(SDL_Window* win, int swapInterval);
|
||||||
|
@ -49,5 +57,6 @@ class FurnaceGUIRenderSDL: public FurnaceGUIRender {
|
||||||
bool quit();
|
bool quit();
|
||||||
FurnaceGUIRenderSDL():
|
FurnaceGUIRenderSDL():
|
||||||
sdlRend(NULL),
|
sdlRend(NULL),
|
||||||
|
hasInfo(false),
|
||||||
swapIntervalSet(true) {}
|
swapIntervalSet(true) {}
|
||||||
};
|
};
|
||||||
|
|
|
@ -118,6 +118,30 @@ int FurnaceGUIRenderSoftware::getWindowFlags() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderSoftware::getMaxTextureWidth() {
|
||||||
|
return 16384;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderSoftware::getMaxTextureHeight() {
|
||||||
|
return 16384;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderSoftware::getBackendName() {
|
||||||
|
return "Software";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderSoftware::getVendorName() {
|
||||||
|
return "emilk, JesusKrists and tildearrow";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderSoftware::getDeviceName() {
|
||||||
|
return "imgui_sw Software Renderer";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderSoftware::getAPIVersion() {
|
||||||
|
return "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderSoftware::setSwapInterval(int swapInterval) {
|
void FurnaceGUIRenderSoftware::setSwapInterval(int swapInterval) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,12 @@ class FurnaceGUIRenderSoftware: public FurnaceGUIRender {
|
||||||
void present();
|
void present();
|
||||||
bool getOutputSize(int& w, int& h);
|
bool getOutputSize(int& w, int& h);
|
||||||
int getWindowFlags();
|
int getWindowFlags();
|
||||||
|
int getMaxTextureWidth();
|
||||||
|
int getMaxTextureHeight();
|
||||||
|
const char* getBackendName();
|
||||||
|
const char* getVendorName();
|
||||||
|
const char* getDeviceName();
|
||||||
|
const char* getAPIVersion();
|
||||||
void setSwapInterval(int swapInterval);
|
void setSwapInterval(int swapInterval);
|
||||||
void preInit();
|
void preInit();
|
||||||
bool init(SDL_Window* win, int swapInterval);
|
bool init(SDL_Window* win, int swapInterval);
|
||||||
|
|
|
@ -456,6 +456,8 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGui::TextWrapped("current backend: %s\n%s\n%s\n%s",rend->getBackendName(),rend->getVendorName(),rend->getDeviceName(),rend->getAPIVersion());
|
||||||
|
|
||||||
bool vsyncB=settings.vsync;
|
bool vsyncB=settings.vsync;
|
||||||
if (ImGui::Checkbox("VSync",&vsyncB)) {
|
if (ImGui::Checkbox("VSync",&vsyncB)) {
|
||||||
settings.vsync=vsyncB;
|
settings.vsync=vsyncB;
|
||||||
|
|
Loading…
Reference in a new issue