EEVEE: Test maximum texture size before render.

This will catch any non renderable size.
This commit is contained in:
Clément Foucault 2020-01-30 15:06:56 +01:00
parent 8285a12f4e
commit 8c5cb8359a
2 changed files with 23 additions and 2 deletions

View File

@ -483,6 +483,10 @@ static void eevee_render_to_image(void *vedata,
const DRWContextState *draw_ctx = DRW_context_state_get();
EEVEE_render_init(vedata, engine, draw_ctx->depsgraph);
if (RE_engine_test_break(engine)) {
return;
}
DRW_render_object_iter(vedata, engine, draw_ctx->depsgraph, EEVEE_render_cache);
/* Actually do the rendering. */

View File

@ -30,6 +30,7 @@
#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "BKE_global.h"
#include "BKE_object.h"
#include "BLI_rand.h"
@ -38,6 +39,7 @@
#include "DEG_depsgraph_query.h"
#include "GPU_framebuffer.h"
#include "GPU_extensions.h"
#include "GPU_state.h"
#include "RE_pipeline.h"
@ -91,9 +93,24 @@ void EEVEE_render_init(EEVEE_Data *ved, RenderEngine *engine, struct Depsgraph *
copy_v4_fl4(camtexcofac, 1.0f, 1.0f, 0.0f, 0.0f);
}
int final_res[2] = {size_orig[0] + g_data->overscan_pixels * 2.0f,
size_orig[1] + g_data->overscan_pixels * 2.0f};
int max_dim = max_ii(final_res[0], final_res[1]);
if (max_dim > GPU_max_texture_size()) {
char error_msg[128];
BLI_snprintf(error_msg,
sizeof(error_msg),
"Error: Reported texture size limit (%dpx) is lower than output size (%dpx).",
GPU_max_texture_size(),
max_dim);
RE_engine_set_error_message(engine, error_msg);
G.is_break = true;
return;
}
/* XXX overriding viewport size. Simplify things but is not really 100% safe. */
DRW_render_viewport_size_set((int[2]){size_orig[0] + g_data->overscan_pixels * 2.0f,
size_orig[1] + g_data->overscan_pixels * 2.0f});
DRW_render_viewport_size_set(final_res);
/* TODO 32 bit depth */
DRW_texture_ensure_fullscreen_2d(&dtxl->depth, GPU_DEPTH24_STENCIL8, 0);