Metal backend, part 10
This commit is contained in:
parent
53d71c798a
commit
a4fe96954b
|
@ -24,6 +24,7 @@ struct FurnaceGUIRenderMetalPrivate;
|
||||||
class FurnaceGUIRenderMetal: public FurnaceGUIRender {
|
class FurnaceGUIRenderMetal: public FurnaceGUIRender {
|
||||||
SDL_Renderer* sdlRend;
|
SDL_Renderer* sdlRend;
|
||||||
FurnaceGUIRenderMetalPrivate* priv;
|
FurnaceGUIRenderMetalPrivate* priv;
|
||||||
|
bool swapIntervalSet;
|
||||||
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);
|
||||||
|
@ -35,6 +36,7 @@ class FurnaceGUIRenderMetal: public FurnaceGUIRender {
|
||||||
void setBlendMode(FurnaceGUIBlendMode mode);
|
void setBlendMode(FurnaceGUIBlendMode mode);
|
||||||
void clear(ImVec4 color);
|
void clear(ImVec4 color);
|
||||||
bool newFrame();
|
bool newFrame();
|
||||||
|
bool canVSync();
|
||||||
void createFontsTexture();
|
void createFontsTexture();
|
||||||
void destroyFontsTexture();
|
void destroyFontsTexture();
|
||||||
void renderGUI();
|
void renderGUI();
|
||||||
|
@ -42,6 +44,7 @@ class FurnaceGUIRenderMetal: public FurnaceGUIRender {
|
||||||
void present();
|
void present();
|
||||||
bool getOutputSize(int& w, int& h);
|
bool getOutputSize(int& w, int& h);
|
||||||
int getWindowFlags();
|
int getWindowFlags();
|
||||||
|
void setSwapInterval(int swapInterval);
|
||||||
void preInit();
|
void preInit();
|
||||||
bool init(SDL_Window* win, int swapInterval);
|
bool init(SDL_Window* win, int swapInterval);
|
||||||
void initGUI(SDL_Window* win);
|
void initGUI(SDL_Window* win);
|
||||||
|
@ -49,5 +52,6 @@ class FurnaceGUIRenderMetal: public FurnaceGUIRender {
|
||||||
bool quit();
|
bool quit();
|
||||||
FurnaceGUIRenderMetal():
|
FurnaceGUIRenderMetal():
|
||||||
sdlRend(NULL),
|
sdlRend(NULL),
|
||||||
priv(NULL) {}
|
priv(NULL),
|
||||||
|
swapIntervalSet(false) {}
|
||||||
};
|
};
|
||||||
|
|
|
@ -130,6 +130,10 @@ bool FurnaceGUIRenderMetal::newFrame() {
|
||||||
return ImGui_ImplMetal_NewFrame(priv->renderPass);
|
return ImGui_ImplMetal_NewFrame(priv->renderPass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FurnaceGUIRenderMetal::canVSync() {
|
||||||
|
return swapIntervalSet;
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::createFontsTexture() {
|
void FurnaceGUIRenderMetal::createFontsTexture() {
|
||||||
logI("Metal: createFontsTexture()");
|
logI("Metal: createFontsTexture()");
|
||||||
ImGui_ImplMetal_CreateFontsTexture(priv->context.device);
|
ImGui_ImplMetal_CreateFontsTexture(priv->context.device);
|
||||||
|
@ -167,6 +171,15 @@ int FurnaceGUIRenderMetal::getWindowFlags() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FurnaceGUIRenderMetal::setSwapInterval(int swapInterval) {
|
||||||
|
if (SDL_RenderSetVSync(sdlRend,(swapInterval>=0)?1:0)!=0) {
|
||||||
|
swapIntervalSet=false;
|
||||||
|
logW("tried to enable VSync but couldn't!");
|
||||||
|
} else {
|
||||||
|
swapIntervalSet=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::preInit() {
|
void FurnaceGUIRenderMetal::preInit() {
|
||||||
SDL_SetHint(SDL_HINT_RENDER_DRIVER,"metal");
|
SDL_SetHint(SDL_HINT_RENDER_DRIVER,"metal");
|
||||||
priv=new FurnaceGUIRenderMetalPrivate;
|
priv=new FurnaceGUIRenderMetalPrivate;
|
||||||
|
@ -180,6 +193,13 @@ bool FurnaceGUIRenderMetal::init(SDL_Window* win, int swapInterval) {
|
||||||
|
|
||||||
if (sdlRend==NULL) return false;
|
if (sdlRend==NULL) return false;
|
||||||
|
|
||||||
|
if (SDL_RenderSetVSync(sdlRend,(swapInterval>=0)?1:0)!=0) {
|
||||||
|
swapIntervalSet=false;
|
||||||
|
logW("tried to enable VSync but couldn't!");
|
||||||
|
} else {
|
||||||
|
swapIntervalSet=true;
|
||||||
|
}
|
||||||
|
|
||||||
logI("retrieving context...");
|
logI("retrieving context...");
|
||||||
|
|
||||||
priv->context=(__bridge CAMetalLayer*)SDL_RenderGetMetalLayer(sdlRend);
|
priv->context=(__bridge CAMetalLayer*)SDL_RenderGetMetalLayer(sdlRend);
|
||||||
|
|
Loading…
Reference in a new issue