88 float sca_x = 1.0f, sca_y = 1.0f;
98 const float scale_x_inv = ima_x * sca_x;
99 const float scale_y_inv = ima_y * sca_y;
100 if (scale_x_inv > scale_y_inv) {
101 r_image_aspect[0] = 1.0f;
102 r_image_aspect[1] = scale_y_inv / scale_x_inv;
105 r_image_aspect[0] = scale_x_inv / scale_y_inv;
106 r_image_aspect[1] = 1.0f;
142 bool *r_use_alpha_premult,
143 bool *r_use_view_transform)
151 float aspect_x, aspect_y;
154 *r_use_alpha_premult =
false;
155 *r_use_view_transform =
false;
214 aspect_x = clip->
aspx;
215 aspect_y = clip->
aspy;
216 *r_use_view_transform =
true;
229 *r_aspect = (
width * aspect_x) / (
height * aspect_y);
247 const float image_aspect,
250 float rotate[4][4], scale[4][4], translate[4][4];
257 float cam_corners[4][3];
259 float cam_width =
fabsf(cam_corners[0][0] - cam_corners[3][0]);
260 float cam_height =
fabsf(cam_corners[0][1] - cam_corners[1][1]);
261 float cam_aspect = cam_width / cam_height;
265 if (image_aspect > cam_aspect) {
266 scale[0][0] *= cam_height * image_aspect;
267 scale[1][1] *= cam_height;
270 scale[0][0] *= cam_width;
271 scale[1][1] *= cam_width / image_aspect;
276 if (image_aspect > cam_aspect) {
277 scale[0][0] *= cam_width;
278 scale[1][1] *= cam_width / image_aspect;
281 scale[0][0] *= cam_height * image_aspect;
282 scale[1][1] *= cam_height;
287 scale[0][0] *= cam_width;
288 scale[1][1] *= cam_height;
291 translate[3][0] = bgpic->
offset[0];
292 translate[3][1] = bgpic->
offset[1];
293 translate[3][2] = cam_corners[0][2];
298 translate[3][0] *=
min_ff(1.0f, cam_aspect);
299 translate[3][1] /=
max_ff(1.0f, cam_aspect) * (image_aspect / cam_aspect);
304 translate[3][0] += (cam_corners[0][0] + cam_corners[2][0]) * 0.5f;
305 translate[3][1] += (cam_corners[0][1] + cam_corners[2][1]) * 0.5f;
327 float modelmat[4][4];
336 bool use_alpha_premult;
337 bool use_view_transform =
false;
342 bgpic, draw_ctx, pd, &aspect, &use_alpha_premult, &use_view_transform);
351 const float color_premult_alpha[4] = {1.0f, 1.0f, 1.0f,
MIN2(bgpic->alpha, 0.999999)};
405 float image_aspect[2];
423 switch (depth_mode) {
443 if (show_image &&
tex && ((ob->
color[3] > 0.0f) || !use_alpha_blend)) {
Camera data-block and utility functions.
void BKE_camera_multiview_model_matrix(const struct RenderData *rd, const struct Object *camera, const char *viewname, float r_modelmat[4][4])
void BKE_camera_view_frame(const struct Scene *scene, const struct Camera *camera, float r_vec[4][3])
void BKE_image_multiview_index(struct Image *ima, struct ImageUser *iuser)
void BKE_image_release_ibuf(struct Image *ima, struct ImBuf *ibuf, void *lock)
bool BKE_image_is_stereo(struct Image *ima)
struct ImBuf * BKE_image_acquire_ibuf(struct Image *ima, struct ImageUser *iuser, void **r_lock)
struct GPUTexture * BKE_image_get_gpu_texture(struct Image *image, struct ImageUser *iuser, struct ImBuf *ibuf)
void BKE_image_user_frame_calc(struct Image *ima, struct ImageUser *iuser, int cfra)
void BKE_movieclip_user_set_frame(struct MovieClipUser *user, int framenr)
void BKE_movieclip_get_size(struct MovieClip *clip, struct MovieClipUser *user, int *width, int *height)
struct GPUTexture * BKE_movieclip_get_gpu_texture(struct MovieClip *clip, struct MovieClipUser *cuser)
void BKE_movieclip_free_gputexture(struct MovieClip *clip)
General operations, lookup, etc. for blender objects.
bool BKE_object_empty_image_data_is_visible_in_view3d(const struct Object *ob, const struct RegionView3D *rv3d)
struct MovieClip * BKE_object_movieclip_get(struct Scene *scene, struct Object *ob, bool use_default)
bool BKE_object_empty_image_frame_is_visible_in_view3d(const struct Object *ob, const struct RegionView3D *rv3d)
void * BLI_pophead(ListBase *listbase) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
struct LinkData * BLI_genericNodeN(void *data)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
void unit_m4(float m[4][4])
#define mul_m4_series(...)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void axis_angle_to_mat4_single(float R[4][4], const char axis, const float angle)
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void mul_v2_fl(float r[2], float f)
MINLINE void mul_v3_fl(float r[3], float f)
float DEG_get_ctime(const Depsgraph *graph)
@ CAM_BGIMG_FLAG_CAMERA_CROP
@ CAM_BGIMG_FLAG_CAMERACLIP
@ CAM_BGIMG_FLAG_CAMERA_ASPECT
@ CAM_BGIMG_FLAG_DISABLED
@ CAM_BGIMG_FLAG_FOREGROUND
@ IMA_USER_FRAME_IN_RANGE
#define OB_EMPTY_IMAGE_DEPTH_BACK
#define OB_EMPTY_IMAGE_DEPTH_FRONT
@ OB_EMPTY_IMAGE_USE_ALPHA_BLEND
#define OB_EMPTY_IMAGE_DEPTH_DEFAULT
#define STEREO_RIGHT_NAME
@ DRW_STATE_BLEND_ALPHA_UNDER_PREMUL
@ DRW_STATE_DEPTH_LESS_EQUAL
@ DRW_STATE_BLEND_ALPHA_PREMUL
@ DRW_STATE_DEPTH_GREATER
#define DRW_PASS_CREATE(pass, state)
#define DRW_shgroup_call_obmat(shgroup, geom, obmat)
void GPU_framebuffer_bind(GPUFrameBuffer *fb)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
struct GPUShader GPUShader
struct GPUTexture GPUTexture
int GPU_texture_orig_width(const GPUTexture *tex)
int GPU_texture_orig_height(const GPUTexture *tex)
Contains defines and structs used throughout the imbuf module.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE btVector3 rotate(const btVector3 &wAxis, const btScalar angle) const
Return a rotated version of this vector.
GPUBatch * DRW_cache_quad_get(void)
int DRW_object_wire_theme_get(Object *ob, ViewLayer *view_layer, float **r_color)
DRWView * DRW_view_create_with_zoffset(const DRWView *parent_view, const RegionView3D *rv3d, float offset)
bool DRW_state_is_select(void)
bool DRW_state_is_depth(void)
DefaultFramebufferList * DRW_viewport_framebuffer_list_get(void)
bool DRW_state_is_fbo(void)
const DRWContextState * DRW_context_state_get(void)
void DRW_shgroup_uniform_texture(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex)
const DRWView * DRW_view_default_get(void)
void DRW_pass_sort_shgroup_z(DRWPass *pass)
bool DRW_pass_is_empty(DRWPass *pass)
DRWShadingGroup * DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass)
void DRW_shgroup_uniform_vec4_copy(DRWShadingGroup *shgroup, const char *name, const float *value)
void DRW_shgroup_uniform_bool_copy(DRWShadingGroup *shgroup, const char *name, const bool value)
void DRW_view_set_active(DRWView *view)
void DRW_draw_pass(DRWPass *pass)
void(* MEM_freeN)(void *vmemh)
static eStereoViews camera_background_images_stereo_eye(const Scene *scene, const View3D *v3d)
static void OVERLAY_image_free_movieclips_textures(OVERLAY_Data *data)
void OVERLAY_image_cache_init(OVERLAY_Data *vedata)
void OVERLAY_image_background_draw(OVERLAY_Data *vedata)
void OVERLAY_image_in_front_draw(OVERLAY_Data *vedata)
void OVERLAY_image_scene_background_draw(OVERLAY_Data *vedata)
void OVERLAY_image_camera_cache_populate(OVERLAY_Data *vedata, Object *ob)
void OVERLAY_image_cache_finish(OVERLAY_Data *vedata)
static void overlay_image_calc_aspect(Image *ima, const int size[2], float r_image_aspect[2])
void OVERLAY_image_draw(OVERLAY_Data *vedata)
static void image_camera_background_matrix_get(const Camera *cam, const CameraBGImage *bgpic, const DRWContextState *draw_ctx, const float image_aspect, float rmat[4][4])
void OVERLAY_image_empty_cache_populate(OVERLAY_Data *vedata, Object *ob)
void OVERLAY_image_init(OVERLAY_Data *vedata)
static void camera_background_images_stereo_setup(const Scene *scene, const View3D *v3d, Image *ima, ImageUser *iuser)
static struct GPUTexture * image_camera_background_texture_get(CameraBGImage *bgpic, const DRWContextState *draw_ctx, OVERLAY_PrivateData *pd, float *r_aspect, bool *r_use_alpha_premult, bool *r_use_view_transform)
GPUShader * OVERLAY_shader_image(void)
struct MovieClipUser cuser
struct ListBase bg_images
struct Depsgraph * depsgraph
struct ViewLayer * view_layer
struct RegionView3D * rv3d
struct GPUFrameBuffer * default_fb
OVERLAY_StorageList * stl
DRWPass * image_background_scene_ps
DRWPass * image_empties_front_ps
DRWPass * image_empties_ps
DRWPass * image_foreground_scene_ps
DRWPass * image_background_ps
DRWPass * image_empties_blend_ps
DRWPass * image_foreground_ps
DRWPass * image_empties_back_ps
DRWView * view_reference_images
struct OVERLAY_PrivateData * pd