Improve handling of rendering startup errors
This commit is contained in:
parent
811ce36c60
commit
32d9c93af3
|
@ -607,6 +607,7 @@ DisplayServerAndroid::DisplayServerAndroid(const String &p_rendering_driver, Dis
|
||||||
ERR_PRINT(vformat("Failed to initialize %s context", rendering_driver));
|
ERR_PRINT(vformat("Failed to initialize %s context", rendering_driver));
|
||||||
memdelete(rendering_context);
|
memdelete(rendering_context);
|
||||||
rendering_context = nullptr;
|
rendering_context = nullptr;
|
||||||
|
r_error = ERR_UNAVAILABLE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -627,6 +628,7 @@ DisplayServerAndroid::DisplayServerAndroid(const String &p_rendering_driver, Dis
|
||||||
ERR_PRINT(vformat("Failed to create %s window.", rendering_driver));
|
ERR_PRINT(vformat("Failed to create %s window.", rendering_driver));
|
||||||
memdelete(rendering_context);
|
memdelete(rendering_context);
|
||||||
rendering_context = nullptr;
|
rendering_context = nullptr;
|
||||||
|
r_error = ERR_UNAVAILABLE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -635,7 +637,13 @@ DisplayServerAndroid::DisplayServerAndroid(const String &p_rendering_driver, Dis
|
||||||
rendering_context->window_set_vsync_mode(MAIN_WINDOW_ID, p_vsync_mode);
|
rendering_context->window_set_vsync_mode(MAIN_WINDOW_ID, p_vsync_mode);
|
||||||
|
|
||||||
rendering_device = memnew(RenderingDevice);
|
rendering_device = memnew(RenderingDevice);
|
||||||
rendering_device->initialize(rendering_context, MAIN_WINDOW_ID);
|
if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) {
|
||||||
|
rendering_device = nullptr;
|
||||||
|
memdelete(rendering_context);
|
||||||
|
rendering_context = nullptr;
|
||||||
|
r_error = ERR_UNAVAILABLE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
rendering_device->screen_create(MAIN_WINDOW_ID);
|
rendering_device->screen_create(MAIN_WINDOW_ID);
|
||||||
|
|
||||||
RendererCompositorRD::make_current();
|
RendererCompositorRD::make_current();
|
||||||
|
|
|
@ -91,6 +91,7 @@ DisplayServerIOS::DisplayServerIOS(const String &p_rendering_driver, WindowMode
|
||||||
ERR_PRINT(vformat("Failed to initialize %s context", rendering_driver));
|
ERR_PRINT(vformat("Failed to initialize %s context", rendering_driver));
|
||||||
memdelete(rendering_context);
|
memdelete(rendering_context);
|
||||||
rendering_context = nullptr;
|
rendering_context = nullptr;
|
||||||
|
r_error = ERR_UNAVAILABLE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +108,13 @@ DisplayServerIOS::DisplayServerIOS(const String &p_rendering_driver, WindowMode
|
||||||
rendering_context->window_set_vsync_mode(MAIN_WINDOW_ID, p_vsync_mode);
|
rendering_context->window_set_vsync_mode(MAIN_WINDOW_ID, p_vsync_mode);
|
||||||
|
|
||||||
rendering_device = memnew(RenderingDevice);
|
rendering_device = memnew(RenderingDevice);
|
||||||
rendering_device->initialize(rendering_context, MAIN_WINDOW_ID);
|
if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) {
|
||||||
|
rendering_device = nullptr;
|
||||||
|
memdelete(rendering_context);
|
||||||
|
rendering_context = nullptr;
|
||||||
|
r_error = ERR_UNAVAILABLE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
rendering_device->screen_create(MAIN_WINDOW_ID);
|
rendering_device->screen_create(MAIN_WINDOW_ID);
|
||||||
|
|
||||||
RendererCompositorRD::make_current();
|
RendererCompositorRD::make_current();
|
||||||
|
|
|
@ -1469,7 +1469,14 @@ DisplayServerWayland::DisplayServerWayland(const String &p_rendering_driver, Win
|
||||||
#ifdef RD_ENABLED
|
#ifdef RD_ENABLED
|
||||||
if (rendering_context) {
|
if (rendering_context) {
|
||||||
rendering_device = memnew(RenderingDevice);
|
rendering_device = memnew(RenderingDevice);
|
||||||
rendering_device->initialize(rendering_context, MAIN_WINDOW_ID);
|
if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) {
|
||||||
|
memdelete(rendering_device);
|
||||||
|
rendering_device = nullptr;
|
||||||
|
memdelete(rendering_context);
|
||||||
|
rendering_context = nullptr;
|
||||||
|
r_error = ERR_UNAVAILABLE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
rendering_device->screen_create(MAIN_WINDOW_ID);
|
rendering_device->screen_create(MAIN_WINDOW_ID);
|
||||||
|
|
||||||
RendererCompositorRD::make_current();
|
RendererCompositorRD::make_current();
|
||||||
|
|
|
@ -6261,8 +6261,14 @@ DisplayServerX11::DisplayServerX11(const String &p_rendering_driver, WindowMode
|
||||||
|
|
||||||
#if defined(RD_ENABLED)
|
#if defined(RD_ENABLED)
|
||||||
if (rendering_context) {
|
if (rendering_context) {
|
||||||
rendering_device = memnew(RenderingDevice);
|
if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) {
|
||||||
rendering_device->initialize(rendering_context, MAIN_WINDOW_ID);
|
memdelete(rendering_device);
|
||||||
|
rendering_device = nullptr;
|
||||||
|
memdelete(rendering_context);
|
||||||
|
rendering_context = nullptr;
|
||||||
|
r_error = ERR_UNAVAILABLE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
rendering_device->screen_create(MAIN_WINDOW_ID);
|
rendering_device->screen_create(MAIN_WINDOW_ID);
|
||||||
|
|
||||||
RendererCompositorRD::make_current();
|
RendererCompositorRD::make_current();
|
||||||
|
|
|
@ -5873,7 +5873,14 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
|
||||||
#if defined(RD_ENABLED)
|
#if defined(RD_ENABLED)
|
||||||
if (rendering_context) {
|
if (rendering_context) {
|
||||||
rendering_device = memnew(RenderingDevice);
|
rendering_device = memnew(RenderingDevice);
|
||||||
rendering_device->initialize(rendering_context, MAIN_WINDOW_ID);
|
if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) {
|
||||||
|
memdelete(rendering_device);
|
||||||
|
rendering_device = nullptr;
|
||||||
|
memdelete(rendering_context);
|
||||||
|
rendering_context = nullptr;
|
||||||
|
r_error = ERR_UNAVAILABLE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
rendering_device->screen_create(MAIN_WINDOW_ID);
|
rendering_device->screen_create(MAIN_WINDOW_ID);
|
||||||
|
|
||||||
RendererCompositorRD::make_current();
|
RendererCompositorRD::make_current();
|
||||||
|
|
|
@ -5507,7 +5507,7 @@ Error RenderingDevice::initialize(RenderingContextDriver *p_context, DisplayServ
|
||||||
for (uint32_t i = 0; i < frames.size(); i++) {
|
for (uint32_t i = 0; i < frames.size(); i++) {
|
||||||
// Staging was never used, create a block.
|
// Staging was never used, create a block.
|
||||||
err = _insert_staging_block();
|
err = _insert_staging_block();
|
||||||
ERR_CONTINUE(err != OK);
|
ERR_FAIL_COND_V(err, FAILED);
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_list = nullptr;
|
draw_list = nullptr;
|
||||||
|
|
Loading…
Reference in New Issue