Do not crash if nanovg context creation fails

This commit is contained in:
falkTX 2022-07-15 10:27:32 +01:00
parent 541e7dcf69
commit 9274f433cb
2 changed files with 27 additions and 5 deletions

2
dpf

@ -1 +1 @@
Subproject commit 3a6995163a6807d127be76a953b2726726f833ca
Subproject commit 98ecaa0255b1ec55b1d4161470d4969ed2c79d0c

View file

@ -240,6 +240,22 @@ Window::Window() {
void WindowSetPluginUI(Window* const window, DISTRHO_NAMESPACE::UI* const ui)
{
// if nanovg context failed, init only bare minimum
if (window->vg == nullptr)
{
if (ui != nullptr)
{
window->internal->ui = ui;
window->internal->size = rack::math::Vec(ui->getWidth(), ui->getHeight());
}
else
{
window->internal->ui = nullptr;
window->internal->callback = nullptr;
}
return;
}
if (ui != nullptr)
{
const GLubyte* vendor = glGetString(GL_VENDOR);
@ -343,13 +359,16 @@ Window::~Window() {
internal->fontCache.clear();
internal->imageCache.clear();
if (vg != nullptr)
{
#if defined NANOVG_GLES2
nvgDeleteGLES2(internal->o_fbVg != nullptr ? internal->o_fbVg : fbVg);
nvgDeleteGLES2(internal->o_vg != nullptr ? internal->o_vg : vg);
nvgDeleteGLES2(internal->o_fbVg != nullptr ? internal->o_fbVg : fbVg);
nvgDeleteGLES2(internal->o_vg != nullptr ? internal->o_vg : vg);
#else
nvgDeleteGL2(internal->o_fbVg != nullptr ? internal->o_fbVg : fbVg);
nvgDeleteGL2(internal->o_vg != nullptr ? internal->o_vg : vg);
nvgDeleteGL2(internal->o_fbVg != nullptr ? internal->o_fbVg : fbVg);
nvgDeleteGL2(internal->o_vg != nullptr ? internal->o_vg : vg);
#endif
}
}
delete internal;
@ -436,6 +455,9 @@ static void Window__writeImagePNG(void* context, void* data, int size) {
void Window::step() {
DISTRHO_SAFE_ASSERT_RETURN(internal->ui != nullptr,);
if (vg == nullptr)
return;
double frameTime = system::getTime();
double lastFrameTime = internal->frameTime;
internal->frameTime = frameTime;