Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/image/image_engine.c
| Show All 31 Lines | |||||
| #include "DNA_screen_types.h" | #include "DNA_screen_types.h" | ||||
| #include "IMB_imbuf.h" | #include "IMB_imbuf.h" | ||||
| #include "IMB_imbuf_types.h" | #include "IMB_imbuf_types.h" | ||||
| #include "ED_image.h" | #include "ED_image.h" | ||||
| #include "GPU_batch.h" | #include "GPU_batch.h" | ||||
| #include "GPU_matrix.h" | |||||
| #include "RE_engine.h" | |||||
| #include "RE_pipeline.h" | |||||
| #include "image_engine.h" | #include "image_engine.h" | ||||
| #include "image_private.h" | #include "image_private.h" | ||||
| #define IMAGE_DRAW_FLAG_SHOW_ALPHA (1 << 0) | #define IMAGE_DRAW_FLAG_SHOW_ALPHA (1 << 0) | ||||
| #define IMAGE_DRAW_FLAG_APPLY_ALPHA (1 << 1) | #define IMAGE_DRAW_FLAG_APPLY_ALPHA (1 << 1) | ||||
| #define IMAGE_DRAW_FLAG_SHUFFLING (1 << 2) | #define IMAGE_DRAW_FLAG_SHUFFLING (1 << 2) | ||||
| #define IMAGE_DRAW_FLAG_DEPTH (1 << 3) | #define IMAGE_DRAW_FLAG_DEPTH (1 << 3) | ||||
| ▲ Show 20 Lines • Show All 345 Lines • ▼ Show 20 Lines | static void image_draw_finish(IMAGE_Data *ved) | ||||
| if (pd->texture && pd->owns_texture) { | if (pd->texture && pd->owns_texture) { | ||||
| GPU_texture_free(pd->texture); | GPU_texture_free(pd->texture); | ||||
| pd->owns_texture = false; | pd->owns_texture = false; | ||||
| } | } | ||||
| pd->texture = NULL; | pd->texture = NULL; | ||||
| } | } | ||||
| // XXX: Somehow fit into more common routine of drawing. | |||||
| static bool draw_render_engine(const bContext *C) | |||||
| { | |||||
| Scene *scene = CTX_data_scene(C); | |||||
| Render *re = RE_GetSceneRender(scene); | |||||
| if (re == NULL) { | |||||
| return false; | |||||
| } | |||||
| RenderEngine *engine = RE_engine_get(re); | |||||
| if (re == NULL || engine == NULL) { | |||||
| return false; | |||||
| } | |||||
| if (scene->r.engine == NULL) { | |||||
| return false; | |||||
| } | |||||
| const RenderEngineType *type = RE_engines_find(scene->r.engine); | |||||
| if (type == NULL || type->draw == NULL) { | |||||
| return false; | |||||
| } | |||||
| Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C); | |||||
| type->draw(engine, C, depsgraph); | |||||
| return true; | |||||
| } | |||||
| static void IMAGE_draw_scene(void *ved) | static void IMAGE_draw_scene(void *ved) | ||||
| { | { | ||||
| IMAGE_Data *vedata = (IMAGE_Data *)ved; | IMAGE_Data *vedata = (IMAGE_Data *)ved; | ||||
| IMAGE_PassList *psl = vedata->psl; | IMAGE_PassList *psl = vedata->psl; | ||||
| IMAGE_PrivateData *pd = vedata->stl->pd; | IMAGE_PrivateData *pd = vedata->stl->pd; | ||||
| DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get(); | DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get(); | ||||
| GPU_framebuffer_bind(dfbl->default_fb); | GPU_framebuffer_bind(dfbl->default_fb); | ||||
| static float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f}; | static float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f}; | ||||
| GPU_framebuffer_clear_color_depth(dfbl->default_fb, clear_col, 1.0); | GPU_framebuffer_clear_color_depth(dfbl->default_fb, clear_col, 1.0); | ||||
| DRW_view_set_active(pd->view); | DRW_view_set_active(pd->view); | ||||
| DRW_draw_pass(psl->image_pass); | DRW_draw_pass(psl->image_pass); | ||||
| DRW_view_set_active(NULL); | DRW_view_set_active(NULL); | ||||
| { | |||||
| const DRWContextState *draw_ctx = DRW_context_state_get(); | |||||
| const DRWView *view = DRW_view_get_active(); | |||||
| float view_matrix[4][4]; | |||||
| DRW_view_viewmat_get(view, view_matrix, false); | |||||
| float projection_matrix[4][4]; | |||||
| DRW_view_winmat_get(view, projection_matrix, false); | |||||
| GPU_matrix_push_projection(); | |||||
| GPU_matrix_push(); | |||||
| GPU_matrix_projection_set(projection_matrix); | |||||
| GPU_matrix_set(view_matrix); | |||||
| draw_render_engine(draw_ctx->evil_C); | |||||
| GPU_matrix_pop(); | |||||
| GPU_matrix_pop_projection(); | |||||
| } | |||||
| image_draw_finish(vedata); | image_draw_finish(vedata); | ||||
| } | } | ||||
| static void IMAGE_engine_free(void) | static void IMAGE_engine_free(void) | ||||
| { | { | ||||
| IMAGE_shader_free(); | IMAGE_shader_free(); | ||||
| } | } | ||||
| Show All 20 Lines | |||||