Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_extra.c')
-rw-r--r--source/blender/draw/engines/overlay/overlay_extra.c83
1 files changed, 51 insertions, 32 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index 15bf26a5fa8..1e766b3cc39 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -53,8 +53,6 @@
#include "ED_view3d.h"
-#include "GPU_draw.h"
-
#include "overlay_private.h"
#include "draw_common.h"
@@ -199,6 +197,9 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
cb->extra_loose_points = grp = DRW_shgroup_create(sh, extra_ps);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+
+ /* Buffer access for drawing isolated points, matching `extra_lines`. */
+ cb->extra_points = BUF_POINT(grp, formats->point_extra);
}
{
format = formats->pos;
@@ -230,6 +231,11 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
}
}
+void OVERLAY_extra_point(OVERLAY_ExtraCallBuffers *cb, const float point[3], const float color[4])
+{
+ DRW_buffer_add_entry(cb->extra_points, point, color);
+}
+
void OVERLAY_extra_line_dashed(OVERLAY_ExtraCallBuffers *cb,
const float start[3],
const float end[3],
@@ -250,7 +256,7 @@ void OVERLAY_extra_line(OVERLAY_ExtraCallBuffers *cb,
OVERLAY_ExtraCallBuffers *OVERLAY_extra_call_buffer_get(OVERLAY_Data *vedata, Object *ob)
{
- bool do_in_front = (ob->dtx & OB_DRAWXRAY) != 0;
+ bool do_in_front = (ob->dtx & OB_DRAW_IN_FRONT) != 0;
OVERLAY_PrivateData *pd = vedata->stl->pd;
return &pd->extra_call_buffers[do_in_front];
}
@@ -1276,6 +1282,19 @@ static void OVERLAY_relationship_lines(OVERLAY_ExtraCallBuffers *cb,
OVERLAY_extra_line_dashed(cb, parent_pos, ob->obmat[3], relation_color);
}
+ /* Drawing the hook lines. */
+ for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
+ if (md->type == eModifierType_Hook) {
+ HookModifierData *hmd = (HookModifierData *)md;
+ float center[3];
+ mul_v3_m4v3(center, ob->obmat, hmd->cent);
+ if (hmd->object) {
+ OVERLAY_extra_line_dashed(cb, hmd->object->obmat[3], center, relation_color);
+ }
+ OVERLAY_extra_point(cb, center, relation_color);
+ }
+ }
+
if (ob->rigidbody_constraint) {
Object *rbc_ob1 = ob->rigidbody_constraint->ob1;
Object *rbc_ob2 = ob->rigidbody_constraint->ob2;
@@ -1318,7 +1337,7 @@ static void OVERLAY_relationship_lines(OVERLAY_ExtraCallBuffers *cb,
else {
const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(curcon);
- if ((cti && cti->get_constraint_targets) && (curcon->flag & CONSTRAINT_EXPAND)) {
+ if ((cti && cti->get_constraint_targets) && (curcon->ui_expand_flag & (1 << 0))) {
ListBase targets = {NULL, NULL};
bConstraintTarget *ct;
@@ -1356,24 +1375,24 @@ static void OVERLAY_volume_extra(OVERLAY_ExtraCallBuffers *cb,
Object *ob,
ModifierData *md,
Scene *scene,
- float *color)
+ const float *color)
{
- FluidModifierData *mmd = (FluidModifierData *)md;
- FluidDomainSettings *mds = mmd->domain;
+ FluidModifierData *fmd = (FluidModifierData *)md;
+ FluidDomainSettings *fds = fmd->domain;
/* Don't show smoke before simulation starts, this could be made an option in the future. */
- const bool draw_velocity = (mds->draw_velocity && mds->fluid &&
- CFRA >= mds->point_cache[0]->startframe);
+ const bool draw_velocity = (fds->draw_velocity && fds->fluid &&
+ CFRA >= fds->point_cache[0]->startframe);
/* Small cube showing voxel size. */
{
float min[3];
- madd_v3fl_v3fl_v3fl_v3i(min, mds->p0, mds->cell_size, mds->res_min);
+ madd_v3fl_v3fl_v3fl_v3i(min, fds->p0, fds->cell_size, fds->res_min);
float voxel_cubemat[4][4] = {{0.0f}};
/* scale small cube to voxel size */
- voxel_cubemat[0][0] = mds->cell_size[0] / 2.0f;
- voxel_cubemat[1][1] = mds->cell_size[1] / 2.0f;
- voxel_cubemat[2][2] = mds->cell_size[2] / 2.0f;
+ voxel_cubemat[0][0] = fds->cell_size[0] / 2.0f;
+ voxel_cubemat[1][1] = fds->cell_size[1] / 2.0f;
+ voxel_cubemat[2][2] = fds->cell_size[2] / 2.0f;
voxel_cubemat[3][3] = 1.0f;
/* translate small cube to corner */
copy_v3_v3(voxel_cubemat[3], min);
@@ -1385,38 +1404,38 @@ static void OVERLAY_volume_extra(OVERLAY_ExtraCallBuffers *cb,
}
if (draw_velocity) {
- const bool use_needle = (mds->vector_draw_type == VECTOR_DRAW_NEEDLE);
+ const bool use_needle = (fds->vector_draw_type == VECTOR_DRAW_NEEDLE);
int line_count = (use_needle) ? 6 : 1;
int slice_axis = -1;
- line_count *= mds->res[0] * mds->res[1] * mds->res[2];
+ line_count *= fds->res[0] * fds->res[1] * fds->res[2];
- if (mds->slice_method == FLUID_DOMAIN_SLICE_AXIS_ALIGNED &&
- mds->axis_slice_method == AXIS_SLICE_SINGLE) {
+ if (fds->slice_method == FLUID_DOMAIN_SLICE_AXIS_ALIGNED &&
+ fds->axis_slice_method == AXIS_SLICE_SINGLE) {
float viewinv[4][4];
DRW_view_viewmat_get(NULL, viewinv, true);
- const int axis = (mds->slice_axis == SLICE_AXIS_AUTO) ? axis_dominant_v3_single(viewinv[2]) :
- mds->slice_axis - 1;
+ const int axis = (fds->slice_axis == SLICE_AXIS_AUTO) ? axis_dominant_v3_single(viewinv[2]) :
+ fds->slice_axis - 1;
slice_axis = axis;
- line_count /= mds->res[axis];
+ line_count /= fds->res[axis];
}
- GPU_create_smoke_velocity(mmd);
+ DRW_smoke_ensure_velocity(fmd);
GPUShader *sh = OVERLAY_shader_volume_velocity(use_needle);
DRWShadingGroup *grp = DRW_shgroup_create(sh, data->psl->extra_ps[0]);
- DRW_shgroup_uniform_texture(grp, "velocityX", mds->tex_velocity_x);
- DRW_shgroup_uniform_texture(grp, "velocityY", mds->tex_velocity_y);
- DRW_shgroup_uniform_texture(grp, "velocityZ", mds->tex_velocity_z);
- DRW_shgroup_uniform_float_copy(grp, "displaySize", mds->vector_scale);
- DRW_shgroup_uniform_float_copy(grp, "slicePosition", mds->slice_depth);
- DRW_shgroup_uniform_vec3_copy(grp, "cellSize", mds->cell_size);
- DRW_shgroup_uniform_vec3_copy(grp, "domainOriginOffset", mds->p0);
- DRW_shgroup_uniform_ivec3_copy(grp, "adaptiveCellOffset", mds->res_min);
+ DRW_shgroup_uniform_texture(grp, "velocityX", fds->tex_velocity_x);
+ DRW_shgroup_uniform_texture(grp, "velocityY", fds->tex_velocity_y);
+ DRW_shgroup_uniform_texture(grp, "velocityZ", fds->tex_velocity_z);
+ DRW_shgroup_uniform_float_copy(grp, "displaySize", fds->vector_scale);
+ DRW_shgroup_uniform_float_copy(grp, "slicePosition", fds->slice_depth);
+ DRW_shgroup_uniform_vec3_copy(grp, "cellSize", fds->cell_size);
+ DRW_shgroup_uniform_vec3_copy(grp, "domainOriginOffset", fds->p0);
+ DRW_shgroup_uniform_ivec3_copy(grp, "adaptiveCellOffset", fds->res_min);
DRW_shgroup_uniform_int_copy(grp, "sliceAxis", slice_axis);
DRW_shgroup_call_procedural_lines(grp, ob, line_count);
- BLI_addtail(&data->stl->pd->smoke_domains, BLI_genericNodeN(mmd));
+ BLI_addtail(&data->stl->pd->smoke_domains, BLI_genericNodeN(fmd));
}
}
@@ -1430,8 +1449,8 @@ static void OVERLAY_volume_free_smoke_textures(OVERLAY_Data *data)
* all viewport in a redraw at least. */
LinkData *link;
while ((link = BLI_pophead(&data->stl->pd->smoke_domains))) {
- FluidModifierData *mmd = (FluidModifierData *)link->data;
- GPU_free_smoke_velocity(mmd);
+ FluidModifierData *fmd = (FluidModifierData *)link->data;
+ DRW_smoke_free_velocity(fmd);
MEM_freeN(link);
}
}