73 float sca_x = 1.0f, sca_y = 1.0f;
83 const float scale_x_inv = ima_x * sca_x;
84 const float scale_y_inv = ima_y * sca_y;
85 if (scale_x_inv > scale_y_inv) {
86 r_image_aspect[0] = 1.0f;
87 r_image_aspect[1] = scale_y_inv / scale_x_inv;
90 r_image_aspect[0] = scale_x_inv / scale_y_inv;
91 r_image_aspect[1] = 1.0f;
127 bool *r_use_alpha_premult,
128 bool *r_use_view_transform)
136 float aspect_x, aspect_y;
139 *r_use_alpha_premult =
false;
140 *r_use_view_transform =
false;
199 aspect_x = clip->
aspx;
200 aspect_y = clip->
aspy;
201 *r_use_view_transform =
true;
214 *r_aspect = (
width * aspect_x) / (
height * aspect_y);
232 const float image_aspect,
235 float rotate[4][4], scale[4][4], translate[4][4];
242 float cam_corners[4][3];
244 float cam_width =
fabsf(cam_corners[0][0] - cam_corners[3][0]);
245 float cam_height =
fabsf(cam_corners[0][1] - cam_corners[1][1]);
246 float cam_aspect = cam_width / cam_height;
250 if (image_aspect > cam_aspect) {
251 scale[0][0] *= cam_height * image_aspect;
252 scale[1][1] *= cam_height;
255 scale[0][0] *= cam_width;
256 scale[1][1] *= cam_width / image_aspect;
261 if (image_aspect > cam_aspect) {
262 scale[0][0] *= cam_width;
263 scale[1][1] *= cam_width / image_aspect;
266 scale[0][0] *= cam_height * image_aspect;
267 scale[1][1] *= cam_height;
272 scale[0][0] *= cam_width;
273 scale[1][1] *= cam_height;
276 translate[3][0] = bgpic->
offset[0];
277 translate[3][1] = bgpic->
offset[1];
278 translate[3][2] = cam_corners[0][2];
283 translate[3][0] *=
min_ff(1.0f, cam_aspect);
284 translate[3][1] /=
max_ff(1.0f, cam_aspect) * (image_aspect / cam_aspect);
289 translate[3][0] += (cam_corners[0][0] + cam_corners[2][0]) * 0.5f;
290 translate[3][1] += (cam_corners[0][1] + cam_corners[2][1]) * 0.5f;
312 float modelmat[4][4];
321 bool use_alpha_premult;
322 bool use_view_transform =
false;
327 bgpic, draw_ctx, pd, &aspect, &use_alpha_premult, &use_view_transform);
336 const float color_premult_alpha[4] = {1.0f, 1.0f, 1.0f,
MIN2(bgpic->alpha, 0.999999)};
390 float image_aspect[2];
408 switch (depth_mode) {
428 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_release_ibuf(struct Image *ima, struct ImBuf *ibuf, void *lock)
struct ImBuf * BKE_image_acquire_ibuf(struct Image *ima, struct ImageUser *iuser, void **r_lock)
bool BKE_image_is_stereo(const struct Image *ima)
void BKE_image_multiview_index(const struct Image *ima, struct ImageUser *iuser)
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], char axis, 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
@ OB_EMPTY_IMAGE_USE_ALPHA_BLEND
#define OB_EMPTY_IMAGE_DEPTH_BACK
#define OB_EMPTY_IMAGE_DEPTH_FRONT
#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 height
_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
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.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
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_draw_pass(DRWPass *pass)
void DRW_view_set_active(const DRWView *view)
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx in_weight_img image(1, GPU_R32F, Qualifier::WRITE, ImageType::FLOAT_2D_ARRAY, "out_weight_img") .image(3
ccl_gpu_kernel_postfix ccl_global float int int int int sh
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