62 std::unique_ptr<AbstractSpaceAccessor> space;
63 DrawingMode drawing_mode;
76 drawing_mode.begin_sync(vedata);
80 float winmat[4][4], viewmat[4][4];
81 orthographic_m4(viewmat, 0.0, region->winx, 0.0, region->winy, 0.0, 1.0);
90 instance_data->
image = space->get_image(bmain);
91 if (instance_data->
image ==
nullptr) {
96 space->use_tile_drawing();
98 ImBuf *image_buffer = space->acquire_image_buffer(instance_data->
image, &
lock);
101 float image_resolution[2] = {image_buffer ? image_buffer->
x : 1024.0f,
102 image_buffer ? image_buffer->
y : 1024.0f};
103 space->init_ss_to_texture_matrix(draw_ctx->
region,
104 instance_data->
image->runtime.backdrop_offset,
110 space->release_buffer(instance_data->
image, image_buffer,
lock);
112 ImageUser *iuser = space->get_image_user();
113 if (instance_data->
image->rr !=
nullptr) {
119 drawing_mode.image_sync(vedata, instance_data->
image, iuser);
124 drawing_mode.draw_finish(vedata);
127 instance_data->
image =
nullptr;
132 drawing_mode.draw_viewport(vedata);
144 vedata->
instance_data = MEM_new<IMAGE_InstanceData>(__func__);
177 MEM_delete(instance_data);
Main * CTX_data_main(const bContext *C)
RenderPass * BKE_image_multilayer_index(RenderResult *rr, ImageUser *iuser)
void BKE_image_multiview_index(const Image *ima, ImageUser *iuser)
General operations, lookup, etc. for blender objects.
#define BLI_assert_unreachable()
void orthographic_m4(float mat[4][4], float left, float right, float bottom, float top, float nearClip, float farClip)
void unit_m4(float m[4][4])
#define DRW_VIEWPORT_DATA_SIZE(ty)
Contains defines and structs used throughout the imbuf module.
virtual ~ImageEngine()=default
ImageEngine(const DRWContextState *draw_ctx, IMAGE_Data *vedata)
const DRWContextState * DRW_context_state_get()
DRWView * DRW_view_create(const float viewmat[4][4], const float winmat[4][4], const float(*culling_viewmat)[4], const float(*culling_winmat)[4], DRWCallVisibilityFn *visibility_fn)
DrawEngineType draw_engine_image_type
static void IMAGE_engine_free()
static void IMAGE_cache_init(void *vedata)
static void IMAGE_cache_populate(void *, Object *)
static void IMAGE_instance_free(void *_instance_data)
static void IMAGE_draw_scene(void *vedata)
static void IMAGE_engine_init(void *ved)
static std::unique_ptr< AbstractSpaceAccessor > space_accessor_from_context(const DRWContextState *draw_ctx)
static const DrawEngineDataSize IMAGE_data_size
IMAGE_InstanceData * instance_data
struct blender::draw::image_engine::IMAGE_InstanceData::@205 flags
bool do_tile_drawing
should we perform tiled drawing (wrap repeat).
ShaderParameters sh_params
float ss_to_texture[4][4]
Transform matrix to convert a normalized screen space coordinates to texture space.
void update(AbstractSpaceAccessor *space, const Scene *scene, Image *image, ImBuf *image_buffer)