what is this mess
This commit is contained in:
parent
bb3ccedb29
commit
1189cde072
|
@ -19,8 +19,11 @@
|
||||||
|
|
||||||
#include "../gui.h"
|
#include "../gui.h"
|
||||||
|
|
||||||
class FurnaceGUIRenderSDL: public FurnaceGUIRender {
|
struct FurnaceGUIRenderMetalPrivate;
|
||||||
|
|
||||||
|
class FurnaceGUIRenderMetal: public FurnaceGUIRender {
|
||||||
SDL_Renderer* sdlRend;
|
SDL_Renderer* sdlRend;
|
||||||
|
FurnaceGUIRenderMetalPrivate* priv;
|
||||||
public:
|
public:
|
||||||
ImTextureID getTextureID(FurnaceGUITexture* which);
|
ImTextureID getTextureID(FurnaceGUITexture* which);
|
||||||
bool lockTexture(FurnaceGUITexture* which, void** data, int* pitch);
|
bool lockTexture(FurnaceGUITexture* which, void** data, int* pitch);
|
||||||
|
@ -44,6 +47,7 @@ class FurnaceGUIRenderSDL: public FurnaceGUIRender {
|
||||||
void initGUI(SDL_Window* win);
|
void initGUI(SDL_Window* win);
|
||||||
void quitGUI();
|
void quitGUI();
|
||||||
bool quit();
|
bool quit();
|
||||||
FurnaceGUIRenderSDL():
|
FurnaceGUIRenderMetal():
|
||||||
sdlRend(NULL) {}
|
sdlRend(NULL),
|
||||||
};
|
priv(NULL) {}
|
||||||
|
};
|
||||||
|
|
|
@ -21,9 +21,16 @@
|
||||||
|
|
||||||
#include "renderMetal.h"
|
#include "renderMetal.h"
|
||||||
#include "backends/imgui_impl_metal.h"
|
#include "backends/imgui_impl_metal.h"
|
||||||
|
|
||||||
#include <Metal/Metal.h>
|
#include <Metal/Metal.h>
|
||||||
#include <QuartzCore/QuartzCore.h>
|
#include <QuartzCore/QuartzCore.h>
|
||||||
|
|
||||||
|
struct FurnaceGUIRenderMetalPrivate {
|
||||||
|
CAMetalLayer* context;
|
||||||
|
id<MTLCommandQueue> cmdQueue;
|
||||||
|
MTLRenderPassDescriptor* renderPass;
|
||||||
|
};
|
||||||
|
|
||||||
class FurnaceMetalTexture: public FurnaceGUITexture {
|
class FurnaceMetalTexture: public FurnaceGUITexture {
|
||||||
public:
|
public:
|
||||||
MTLTexture* tex;
|
MTLTexture* tex;
|
||||||
|
@ -70,69 +77,32 @@ bool FurnaceGUIRenderMetal::destroyTexture(FurnaceGUITexture* which) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::setTextureBlendMode(FurnaceGUITexture* which, FurnaceGUIBlendMode mode) {
|
void FurnaceGUIRenderMetal::setTextureBlendMode(FurnaceGUITexture* which, FurnaceGUIBlendMode mode) {
|
||||||
FurnaceSDLTexture* t=(FurnaceSDLTexture*)which;
|
|
||||||
switch (mode) {
|
|
||||||
case GUI_BLEND_MODE_NONE:
|
|
||||||
SDL_SetTextureBlendMode(t->tex,SDL_BLENDMODE_NONE);
|
|
||||||
break;
|
|
||||||
case GUI_BLEND_MODE_BLEND:
|
|
||||||
SDL_SetTextureBlendMode(t->tex,SDL_BLENDMODE_BLEND);
|
|
||||||
break;
|
|
||||||
case GUI_BLEND_MODE_ADD:
|
|
||||||
SDL_SetTextureBlendMode(t->tex,SDL_BLENDMODE_ADD);
|
|
||||||
break;
|
|
||||||
case GUI_BLEND_MODE_MULTIPLY:
|
|
||||||
SDL_SetTextureBlendMode(t->tex,SDL_BLENDMODE_MOD);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::setBlendMode(FurnaceGUIBlendMode mode) {
|
void FurnaceGUIRenderMetal::setBlendMode(FurnaceGUIBlendMode mode) {
|
||||||
switch (mode) {
|
|
||||||
case GUI_BLEND_MODE_NONE:
|
|
||||||
SDL_SetRenderDrawBlendMode(sdlRend,SDL_BLENDMODE_NONE);
|
|
||||||
break;
|
|
||||||
case GUI_BLEND_MODE_BLEND:
|
|
||||||
SDL_SetRenderDrawBlendMode(sdlRend,SDL_BLENDMODE_BLEND);
|
|
||||||
break;
|
|
||||||
case GUI_BLEND_MODE_ADD:
|
|
||||||
SDL_SetRenderDrawBlendMode(sdlRend,SDL_BLENDMODE_ADD);
|
|
||||||
break;
|
|
||||||
case GUI_BLEND_MODE_MULTIPLY:
|
|
||||||
SDL_SetRenderDrawBlendMode(sdlRend,SDL_BLENDMODE_MOD);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::clear(ImVec4 color) {
|
void FurnaceGUIRenderMetal::clear(ImVec4 color) {
|
||||||
SDL_SetRenderDrawColor(sdlRend,color.x*255,color.y*255,color.z*255,color.w*255);
|
|
||||||
SDL_RenderClear(sdlRend);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FurnaceGUIRenderMetal::newFrame() {
|
bool FurnaceGUIRenderMetal::newFrame() {
|
||||||
return ImGui_ImplSDLRenderer2_NewFrame();
|
ImGui_ImplMetal_NewFrame(priv->renderPass);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::createFontsTexture() {
|
void FurnaceGUIRenderMetal::createFontsTexture() {
|
||||||
ImGui_ImplSDLRenderer2_CreateFontsTexture();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::destroyFontsTexture() {
|
void FurnaceGUIRenderMetal::destroyFontsTexture() {
|
||||||
ImGui_ImplSDLRenderer2_DestroyFontsTexture();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::renderGUI() {
|
void FurnaceGUIRenderMetal::renderGUI() {
|
||||||
ImGui_ImplSDLRenderer2_RenderDrawData(ImGui::GetDrawData());
|
ImGui_ImplMetal_RenderDrawData(ImGui::GetDrawData());
|
||||||
}
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::wipe(float alpha) {
|
void FurnaceGUIRenderMetal::wipe(float alpha) {
|
||||||
SDL_SetRenderDrawBlendMode(sdlRend,SDL_BLENDMODE_BLEND);
|
|
||||||
SDL_SetRenderDrawColor(sdlRend,0,0,0,255*alpha);
|
|
||||||
SDL_RenderFillRect(sdlRend,NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::present() {
|
void FurnaceGUIRenderMetal::present() {
|
||||||
SDL_RenderPresent(sdlRend);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FurnaceGUIRenderMetal::getOutputSize(int& w, int& h) {
|
bool FurnaceGUIRenderMetal::getOutputSize(int& w, int& h) {
|
||||||
|
@ -145,22 +115,33 @@ int FurnaceGUIRenderMetal::getWindowFlags() {
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::preInit() {
|
void FurnaceGUIRenderMetal::preInit() {
|
||||||
SDL_SetHint(SDL_HINT_RENDER_DRIVER,"metal");
|
SDL_SetHint(SDL_HINT_RENDER_DRIVER,"metal");
|
||||||
|
priv=new FurnaceGUIRenderMetalPrivate;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FurnaceGUIRenderMetal::init(SDL_Window* win) {
|
bool FurnaceGUIRenderMetal::init(SDL_Window* win) {
|
||||||
SDL_SetHint(SDL_HINT_RENDER_DRIVER,"metal");
|
SDL_SetHint(SDL_HINT_RENDER_DRIVER,"metal");
|
||||||
|
|
||||||
sdlRend=SDL_CreateRenderer(win,-1,SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC|SDL_RENDERER_TARGETTEXTURE);
|
sdlRend=SDL_CreateRenderer(win,-1,SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC|SDL_RENDERER_TARGETTEXTURE);
|
||||||
return (sdlRend!=NULL);
|
|
||||||
|
if (sdlRend==NULL) return NULL;
|
||||||
|
|
||||||
|
priv->context=(__bridge CAMetalLayer*)SDL_RenderGetMetalLayer(sdlRend);
|
||||||
|
priv->context.pixelFormat=MTLPixelFormatBGRA8Unorm;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::initGUI(SDL_Window* win) {
|
void FurnaceGUIRenderMetal::initGUI(SDL_Window* win) {
|
||||||
ImGui_ImplSDL2_InitForSDLRenderer(win,sdlRend);
|
ImGui_ImplMetal_Init(context.device);
|
||||||
ImGui_ImplSDLRenderer2_Init(sdlRend);
|
ImGui_ImplSDL2_InitForMetal(win);
|
||||||
|
|
||||||
|
priv->cmdQueue=[priv->context.device newCommandQueue];
|
||||||
|
priv->renderPass=[MTLRenderPassDescriptor new];
|
||||||
}
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::quitGUI() {
|
void FurnaceGUIRenderMetal::quitGUI() {
|
||||||
ImGui_ImplSDLRenderer2_Shutdown();
|
ImGui_ImplSDLRenderer2_Shutdown();
|
||||||
|
[priv->renderPass release];
|
||||||
|
[priv->cmdQueue release];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FurnaceGUIRenderMetal::quit() {
|
bool FurnaceGUIRenderMetal::quit() {
|
||||||
|
|
Loading…
Reference in New Issue