mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-27 06:53:01 +00:00
GUI: DirectX 11 render backend, part 2
This commit is contained in:
parent
2c912da89a
commit
cf144f4fe9
5 changed files with 33 additions and 5 deletions
|
@ -3420,6 +3420,7 @@ bool FurnaceGUI::loop() {
|
||||||
logV("portrait: %d (%dx%d)",portrait,scrW,scrH);
|
logV("portrait: %d (%dx%d)",portrait,scrW,scrH);
|
||||||
logD("window resized to %dx%d",scrW,scrH);
|
logD("window resized to %dx%d",scrW,scrH);
|
||||||
updateWindow=true;
|
updateWindow=true;
|
||||||
|
rend->resized(ev);
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_MOVED:
|
case SDL_WINDOWEVENT_MOVED:
|
||||||
scrX=ev.window.data1;
|
scrX=ev.window.data1;
|
||||||
|
@ -5824,8 +5825,8 @@ bool FurnaceGUI::loop() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rend->present();
|
|
||||||
drawTimeEnd=SDL_GetPerformanceCounter();
|
drawTimeEnd=SDL_GetPerformanceCounter();
|
||||||
|
rend->present();
|
||||||
if (settings.renderClearPos) {
|
if (settings.renderClearPos) {
|
||||||
rend->clear(uiColors[GUI_COLOR_BACKGROUND]);
|
rend->clear(uiColors[GUI_COLOR_BACKGROUND]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1248,6 +1248,7 @@ class FurnaceGUIRender {
|
||||||
virtual bool destroyTexture(void* which);
|
virtual bool destroyTexture(void* which);
|
||||||
virtual void setTextureBlendMode(void* which, FurnaceGUIBlendMode mode);
|
virtual void setTextureBlendMode(void* which, FurnaceGUIBlendMode mode);
|
||||||
virtual void setBlendMode(FurnaceGUIBlendMode mode);
|
virtual void setBlendMode(FurnaceGUIBlendMode mode);
|
||||||
|
virtual void resized(const SDL_Event& ev);
|
||||||
virtual void clear(ImVec4 color);
|
virtual void clear(ImVec4 color);
|
||||||
virtual bool newFrame();
|
virtual bool newFrame();
|
||||||
virtual void createFontsTexture();
|
virtual void createFontsTexture();
|
||||||
|
|
|
@ -49,6 +49,9 @@ void FurnaceGUIRender::setTextureBlendMode(void* which, FurnaceGUIBlendMode mode
|
||||||
void FurnaceGUIRender::setBlendMode(FurnaceGUIBlendMode mode) {
|
void FurnaceGUIRender::setBlendMode(FurnaceGUIBlendMode mode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FurnaceGUIRender::resized(const SDL_Event& ev) {
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRender::clear(ImVec4 color) {
|
void FurnaceGUIRender::clear(ImVec4 color) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,4 +100,4 @@ void FurnaceGUIRender::quitGUI() {
|
||||||
}
|
}
|
||||||
|
|
||||||
FurnaceGUIRender::~FurnaceGUIRender() {
|
FurnaceGUIRender::~FurnaceGUIRender() {
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,15 @@ bool FurnaceGUIRenderDX11::createRenderTarget() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DXGI_SWAP_CHAIN_DESC chainDesc;
|
||||||
|
memset(&chainDesc,0,sizeof(chainDesc));
|
||||||
|
if (swapchain->GetDesc(&chainDesc)!=S_OK) {
|
||||||
|
logW("createRenderTarget: could not get swapchain desc!");
|
||||||
|
} else {
|
||||||
|
outW=chainDesc.BufferDesc.Width;
|
||||||
|
outH=chainDesc.BufferDesc.Height;
|
||||||
|
}
|
||||||
|
|
||||||
result=swapchain->GetBuffer(0,IID_PPV_ARGS(&screen));
|
result=swapchain->GetBuffer(0,IID_PPV_ARGS(&screen));
|
||||||
if (result!=S_OK) {
|
if (result!=S_OK) {
|
||||||
logW("createRenderTarget: could not get buffer! %.8x",result);
|
logW("createRenderTarget: could not get buffer! %.8x",result);
|
||||||
|
@ -103,6 +112,15 @@ void FurnaceGUIRenderDX11::setTextureBlendMode(void* which, FurnaceGUIBlendMode
|
||||||
void FurnaceGUIRenderDX11::setBlendMode(FurnaceGUIBlendMode mode) {
|
void FurnaceGUIRenderDX11::setBlendMode(FurnaceGUIBlendMode mode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FurnaceGUIRenderDX11::resized(const SDL_Event& ev) {
|
||||||
|
destroyRenderTarget();
|
||||||
|
swapchain->ResizeBuffers(0,0,0,DXGI_FORMAT_UNKNOWN,0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
createRenderTarget();
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderDX11::clear(ImVec4 color) {
|
void FurnaceGUIRenderDX11::clear(ImVec4 color) {
|
||||||
float floatColor[4]={
|
float floatColor[4]={
|
||||||
color.x*color.w,
|
color.x*color.w,
|
||||||
|
@ -141,7 +159,9 @@ void FurnaceGUIRenderDX11::present() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FurnaceGUIRenderDX11::getOutputSize(int& w, int& h) {
|
bool FurnaceGUIRenderDX11::getOutputSize(int& w, int& h) {
|
||||||
return false;
|
w=outW;
|
||||||
|
h=outH;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int FurnaceGUIRenderDX11::getWindowFlags() {
|
int FurnaceGUIRenderDX11::getWindowFlags() {
|
||||||
|
|
|
@ -31,8 +31,8 @@ class FurnaceGUIRenderDX11: public FurnaceGUIRender {
|
||||||
ID3D11DeviceContext* context;
|
ID3D11DeviceContext* context;
|
||||||
ID3D11RenderTargetView* renderTarget;
|
ID3D11RenderTargetView* renderTarget;
|
||||||
IDXGISwapChain* swapchain;
|
IDXGISwapChain* swapchain;
|
||||||
|
int outW, outH;
|
||||||
float quadVertex[4][3];
|
float quadVertex[4][3];
|
||||||
unsigned int quadBuf;
|
|
||||||
|
|
||||||
bool destroyRenderTarget();
|
bool destroyRenderTarget();
|
||||||
bool createRenderTarget();
|
bool createRenderTarget();
|
||||||
|
@ -46,6 +46,7 @@ class FurnaceGUIRenderDX11: public FurnaceGUIRender {
|
||||||
bool destroyTexture(void* which);
|
bool destroyTexture(void* which);
|
||||||
void setTextureBlendMode(void* which, FurnaceGUIBlendMode mode);
|
void setTextureBlendMode(void* which, FurnaceGUIBlendMode mode);
|
||||||
void setBlendMode(FurnaceGUIBlendMode mode);
|
void setBlendMode(FurnaceGUIBlendMode mode);
|
||||||
|
void resized(const SDL_Event& ev);
|
||||||
void clear(ImVec4 color);
|
void clear(ImVec4 color);
|
||||||
bool newFrame();
|
bool newFrame();
|
||||||
void createFontsTexture();
|
void createFontsTexture();
|
||||||
|
@ -64,7 +65,9 @@ class FurnaceGUIRenderDX11: public FurnaceGUIRender {
|
||||||
device(NULL),
|
device(NULL),
|
||||||
context(NULL),
|
context(NULL),
|
||||||
renderTarget(NULL),
|
renderTarget(NULL),
|
||||||
swapchain(NULL) {
|
swapchain(NULL),
|
||||||
|
outW(0),
|
||||||
|
outH(0) {
|
||||||
memset(quadVertex,0,4*3*sizeof(float));
|
memset(quadVertex,0,4*3*sizeof(float));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue