Blender  V2.93
draw_common.c
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * Copyright 2016, Blender Foundation.
17  */
18 
23 #include "DRW_render.h"
24 
25 #include "GPU_matrix.h"
26 #include "GPU_shader.h"
27 #include "GPU_texture.h"
28 
29 #include "UI_resources.h"
30 
31 #include "BKE_colorband.h"
32 #include "BKE_global.h"
33 #include "BKE_object.h"
34 
35 #include "draw_common.h"
36 
37 #if 0
38 # define UI_COLOR_RGB_FROM_U8(r, g, b, v4) \
39  ARRAY_SET_ITEMS(v4, (float)r / 255.0f, (float)g / 255.0f, (float)b / 255.0f, 1.0)
40 #endif
41 #define UI_COLOR_RGBA_FROM_U8(r, g, b, a, v4) \
42  ARRAY_SET_ITEMS(v4, (float)r / 255.0f, (float)g / 255.0f, (float)b / 255.0f, (float)a / 255.0f)
43 
44 /* Colors & Constant */
45 struct DRW_Global G_draw = {{{0}}};
46 
47 static bool weight_ramp_custom = false;
49 
51 
53 {
55 
60  UI_COLOR_RGBA_FROM_U8(0x88, 0xFF, 0xFF, 155, gb->colorLibrarySelect);
61  UI_COLOR_RGBA_FROM_U8(0x55, 0xCC, 0xCC, 155, gb->colorLibrary);
71  UI_COLOR_RGBA_FROM_U8(0xB0, 0x00, 0xB0, 0xFF, gb->colorVertexMissingData);
76 
97 
98  /* Custom median color to slightly affect the edit mesh colors. */
100  copy_v3_fl(
102  dot_v3v3(gb->colorEditMeshMiddle, (float[3]){0.3333f, 0.3333f, 0.3333f})); /* Desaturate */
103 
105  /* Was 50% in 2.7x since the background was lighter making it easier to tell the color from
106  * black, with a darker background we need a more faded color. */
107  interp_v4_v4v4(gb->colorDupli, gb->colorBackground, gb->colorWire, 0.3f);
108 
109 #ifdef WITH_FREESTYLE
112 #else
115 #endif
116 
119 
120  /* Bone colors */
127  UI_COLOR_RGBA_FROM_U8(255, 150, 0, 80, gb->colorBonePoseTarget);
128  UI_COLOR_RGBA_FROM_U8(255, 255, 0, 80, gb->colorBonePoseIK);
129  UI_COLOR_RGBA_FROM_U8(200, 255, 0, 80, gb->colorBonePoseSplineIK);
130  UI_COLOR_RGBA_FROM_U8(0, 255, 120, 80, gb->colorBonePoseConstraint);
133  copy_v4_fl4(gb->colorBoneIKLine, 0.8f, 0.5f, 0.0f, 1.0f);
134  copy_v4_fl4(gb->colorBoneIKLineNoTarget, 0.8f, 0.8f, 0.2f, 1.0f);
135  copy_v4_fl4(gb->colorBoneIKLineSpline, 0.8f, 0.8f, 0.2f, 1.0f);
136 
137  /* Curve */
153 
155 
156  /* Metaball */
157  UI_COLOR_RGBA_FROM_U8(0xA0, 0x30, 0x30, 0xFF, gb->colorMballRadius);
158  UI_COLOR_RGBA_FROM_U8(0xF0, 0xA0, 0xA0, 0xFF, gb->colorMballRadiusSelect);
159  UI_COLOR_RGBA_FROM_U8(0x30, 0xA0, 0x30, 0xFF, gb->colorMballStiffness);
160  UI_COLOR_RGBA_FROM_U8(0xA0, 0xF0, 0xA0, 0xFF, gb->colorMballStiffnessSelect);
161 
162  /* Grid */
164  /* Emphasize division lines lighter instead of darker, if background is darker than grid. */
166  TH_GRID,
167  (gb->colorGrid[0] + gb->colorGrid[1] + gb->colorGrid[2] + 0.12f >
168  gb->colorBackground[0] + gb->colorBackground[1] + gb->colorBackground[2]) ?
169  20 :
170  -10,
171  gb->colorGridEmphasis);
172  /* Grid Axis */
176 
180 
181  /* UV colors */
183 
184  gb->sizePixel = U.pixelsize;
185  gb->sizeObjectCenter = (UI_GetThemeValuef(TH_OBCENTER_DIA) + 1.0f) * U.pixelsize;
186  gb->sizeLightCenter = (UI_GetThemeValuef(TH_OBCENTER_DIA) + 1.5f) * U.pixelsize;
187  gb->sizeLightCircle = U.pixelsize * 9.0f;
188  gb->sizeLightCircleShadow = gb->sizeLightCircle + U.pixelsize * 3.0f;
189 
190  /* M_SQRT2 to be at least the same size of the old square */
191  gb->sizeVertex = U.pixelsize *
192  (max_ff(1.0f, UI_GetThemeValuef(TH_VERTEX_SIZE) * (float)M_SQRT2 / 2.0f));
194  gb->sizeFaceDot = U.pixelsize * UI_GetThemeValuef(TH_FACEDOT_SIZE);
195  gb->sizeEdge = U.pixelsize * (1.0f / 2.0f); /* TODO Theme */
196  gb->sizeEdgeFix = U.pixelsize * (0.5f + 2.0f * (2.0f * (gb->sizeEdge * (float)M_SQRT1_2)));
197 
198  const float(*screen_vecs)[3] = (float(*)[3])DRW_viewport_screenvecs_get();
199  for (int i = 0; i < 2; i++) {
200  copy_v3_v3(gb->screenVecs[i], screen_vecs[i]);
201  }
202 
204 
208 
209  /* Color management. */
210  {
211  float *color = gb->UBO_FIRST_COLOR;
212  do {
213  /* TODO more accurate transform. */
214  srgb_to_linearrgb_v4(color, color);
215  color += 4;
216  } while (color <= gb->UBO_LAST_COLOR);
217  }
218 
219  if (G_draw.block_ubo == NULL) {
221  sizeof(GlobalsUboStorage), gb, "GlobalsUboStorage");
222  }
223 
225 
226  if (!G_draw.ramp) {
227  ColorBand ramp = {0};
228  float *colors;
229  int col_size;
230 
231  ramp.tot = 3;
232  ramp.data[0].a = 1.0f;
233  ramp.data[0].b = 1.0f;
234  ramp.data[0].pos = 0.0f;
235  ramp.data[1].a = 1.0f;
236  ramp.data[1].g = 1.0f;
237  ramp.data[1].pos = 0.5f;
238  ramp.data[2].a = 1.0f;
239  ramp.data[2].r = 1.0f;
240  ramp.data[2].pos = 1.0f;
241 
242  BKE_colorband_evaluate_table_rgba(&ramp, &colors, &col_size);
243 
244  G_draw.ramp = GPU_texture_create_1d("ramp", col_size, 1, GPU_RGBA8, colors);
245 
246  MEM_freeN(colors);
247  }
248 
249  /* Weight Painting color ramp texture */
250  bool user_weight_ramp = (U.flag & USER_CUSTOM_RANGE) != 0;
251 
252  if (weight_ramp_custom != user_weight_ramp ||
253  (user_weight_ramp && memcmp(&weight_ramp_copy, &U.coba_weight, sizeof(ColorBand)) != 0)) {
255  }
256 
257  if (G_draw.weight_ramp == NULL) {
258  weight_ramp_custom = user_weight_ramp;
259  memcpy(&weight_ramp_copy, &U.coba_weight, sizeof(ColorBand));
260 
262  }
263 }
264 
265 /* ********************************* SHGROUP ************************************* */
266 
268 {
269 }
270 
272  const RegionView3D *rv3d,
273  float offset)
274 {
275  /* Create view with depth offset */
276  float viewmat[4][4], winmat[4][4];
277  DRW_view_viewmat_get(parent_view, viewmat, false);
278  DRW_view_winmat_get(parent_view, winmat, false);
279 
280  float viewdist = rv3d->dist;
281 
282  /* special exception for ortho camera (`viewdist` isn't used for perspective cameras). */
283  if (rv3d->persp == RV3D_CAMOB && rv3d->is_persp == false) {
284  viewdist = 1.0f / max_ff(fabsf(winmat[0][0]), fabsf(winmat[1][1]));
285  }
286 
287  winmat[3][2] -= GPU_polygon_offset_calc(winmat, viewdist, offset);
288 
289  return DRW_view_create_sub(parent_view, viewmat, winmat);
290 }
291 
292 /* ******************************************** COLOR UTILS ************************************ */
293 
294 /* TODO FINISH */
299 int DRW_object_wire_theme_get(Object *ob, ViewLayer *view_layer, float **r_color)
300 {
301  const DRWContextState *draw_ctx = DRW_context_state_get();
302  const bool is_edit = (draw_ctx->object_mode & OB_MODE_EDIT) && (ob->mode & OB_MODE_EDIT);
303  const bool active = (view_layer->basact && view_layer->basact->object == ob);
304  /* confusing logic here, there are 2 methods of setting the color
305  * 'colortab[colindex]' and 'theme_id', colindex overrides theme_id.
306  *
307  * note: no theme yet for 'colindex' */
308  int theme_id = is_edit ? TH_WIRE_EDIT : TH_WIRE;
309 
310  if (is_edit) {
311  /* fallback to TH_WIRE */
312  }
313  else if (((G.moving & G_TRANSFORM_OBJ) != 0) && ((ob->base_flag & BASE_SELECTED) != 0)) {
314  theme_id = TH_TRANSFORM;
315  }
316  else {
317  /* Sets the 'theme_id' or fallback to wire */
318  if ((ob->base_flag & BASE_SELECTED) != 0) {
319  theme_id = (active) ? TH_ACTIVE : TH_SELECT;
320  }
321  else {
322  switch (ob->type) {
323  case OB_LAMP:
324  theme_id = TH_LIGHT;
325  break;
326  case OB_SPEAKER:
327  theme_id = TH_SPEAKER;
328  break;
329  case OB_CAMERA:
330  theme_id = TH_CAMERA;
331  break;
332  case OB_EMPTY:
333  theme_id = TH_EMPTY;
334  break;
335  case OB_LIGHTPROBE:
336  /* TODO: add light-probe color. */
337  theme_id = TH_EMPTY;
338  break;
339  default:
340  /* fallback to TH_WIRE */
341  break;
342  }
343  }
344  }
345 
346  if (r_color != NULL) {
347  if (UNLIKELY(ob->base_flag & BASE_FROM_SET)) {
348  *r_color = G_draw.block.colorDupli;
349  }
350  else if (UNLIKELY(ob->base_flag & BASE_FROM_DUPLI)) {
351  switch (theme_id) {
352  case TH_ACTIVE:
353  case TH_SELECT:
354  *r_color = G_draw.block.colorDupliSelect;
355  break;
356  case TH_TRANSFORM:
357  *r_color = G_draw.block.colorTransform;
358  break;
359  default:
360  *r_color = G_draw.block.colorDupli;
361  break;
362  }
363  }
364  else {
365  switch (theme_id) {
366  case TH_WIRE_EDIT:
367  *r_color = G_draw.block.colorWireEdit;
368  break;
369  case TH_ACTIVE:
370  *r_color = G_draw.block.colorActive;
371  break;
372  case TH_SELECT:
373  *r_color = G_draw.block.colorSelect;
374  break;
375  case TH_TRANSFORM:
376  *r_color = G_draw.block.colorTransform;
377  break;
378  case TH_SPEAKER:
379  *r_color = G_draw.block.colorSpeaker;
380  break;
381  case TH_CAMERA:
382  *r_color = G_draw.block.colorCamera;
383  break;
384  case TH_EMPTY:
385  *r_color = G_draw.block.colorEmpty;
386  break;
387  case TH_LIGHT:
388  *r_color = G_draw.block.colorLight;
389  break;
390  default:
391  *r_color = G_draw.block.colorWire;
392  break;
393  }
394  }
395  }
396 
397  return theme_id;
398 }
399 
400 /* XXX This is very stupid, better find something more general. */
401 float *DRW_color_background_blend_get(int theme_id)
402 {
403  static float colors[11][4];
404  float *ret;
405 
406  switch (theme_id) {
407  case TH_WIRE_EDIT:
408  ret = colors[0];
409  break;
410  case TH_ACTIVE:
411  ret = colors[1];
412  break;
413  case TH_SELECT:
414  ret = colors[2];
415  break;
416  case TH_TRANSFORM:
417  ret = colors[5];
418  break;
419  case TH_SPEAKER:
420  ret = colors[6];
421  break;
422  case TH_CAMERA:
423  ret = colors[7];
424  break;
425  case TH_EMPTY:
426  ret = colors[8];
427  break;
428  case TH_LIGHT:
429  ret = colors[9];
430  break;
431  default:
432  ret = colors[10];
433  break;
434  }
435 
436  UI_GetThemeColorBlendShade4fv(theme_id, TH_BACK, 0.5, 0, ret);
437 
438  return ret;
439 }
440 
441 bool DRW_object_is_flat(Object *ob, int *r_axis)
442 {
443  float dim[3];
444 
445  if (!ELEM(ob->type,
446  OB_MESH,
447  OB_CURVE,
448  OB_SURF,
449  OB_FONT,
450  OB_MBALL,
451  OB_HAIR,
453  OB_VOLUME)) {
454  /* Non-meshes object cannot be considered as flat. */
455  return false;
456  }
457 
458  BKE_object_dimensions_get(ob, dim);
459  if (dim[0] == 0.0f) {
460  *r_axis = 0;
461  return true;
462  }
463  if (dim[1] == 0.0f) {
464  *r_axis = 1;
465  return true;
466  }
467  if (dim[2] == 0.0f) {
468  *r_axis = 2;
469  return true;
470  }
471  return false;
472 }
473 
475 {
476  float ob_rot[3][3], invviewmat[4][4];
477  DRW_view_viewmat_get(NULL, invviewmat, true);
478  BKE_object_rot_to_mat3(ob, ob_rot, true);
479  float dot = dot_v3v3(ob_rot[axis], invviewmat[2]);
480  if (fabsf(dot) < 1e-3) {
481  return true;
482  }
483 
484  return false;
485 }
486 
487 static void DRW_evaluate_weight_to_color(const float weight, float result[4])
488 {
489  if (U.flag & USER_CUSTOM_RANGE) {
490  BKE_colorband_evaluate(&U.coba_weight, weight, result);
491  }
492  else {
493  /* Use gamma correction to even out the color bands:
494  * increasing widens yellow/cyan vs red/green/blue.
495  * Gamma 1.0 produces the original 2.79 color ramp. */
496  const float gamma = 1.5f;
497  const float hsv[3] = {(2.0f / 3.0f) * (1.0f - weight), 1.0f, pow(0.5f + 0.5f * weight, gamma)};
498 
499  hsv_to_rgb_v(hsv, result);
500 
501  for (int i = 0; i < 3; i++) {
502  result[i] = pow(result[i], 1.0f / gamma);
503  }
504  }
505 }
506 
508 {
509  float pixels[256][4];
510  for (int i = 0; i < 256; i++) {
511  DRW_evaluate_weight_to_color(i / 255.0f, pixels[i]);
512  pixels[i][3] = 1.0f;
513  }
514 
515  return GPU_texture_create_1d("weight_color_ramp", 256, 1, GPU_SRGB8_A8, pixels[0]);
516 }
typedef float(TangentPoint)[2]
bool BKE_colorband_evaluate(const struct ColorBand *coba, float in, float out[4])
void BKE_colorband_evaluate_table_rgba(const struct ColorBand *coba, float **array, int *size)
@ G_TRANSFORM_OBJ
Definition: BKE_global.h:218
General operations, lookup, etc. for blender objects.
void BKE_object_dimensions_get(struct Object *ob, float r_vec[3])
Definition: object.c:3901
void BKE_object_rot_to_mat3(const struct Object *ob, float r_mat[3][3], bool use_drot)
MINLINE float max_ff(float a, float b)
#define M_SQRT2
Definition: BLI_math_base.h:47
#define M_SQRT1_2
Definition: BLI_math_base.h:50
void hsv_to_rgb_v(const float hsv[3], float r_rgb[3])
Definition: math_color.c:68
MINLINE void srgb_to_linearrgb_v4(float linear[4], const float srgb[4])
MINLINE void copy_v4_fl4(float v[4], float x, float y, float z, float w)
void interp_v4_v4v4(float r[4], const float a[4], const float b[4], const float t)
Definition: math_vector.c:58
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void zero_v4(float r[4])
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void invert_v2(float r[2])
#define UNLIKELY(x)
#define ELEM(...)
@ BASE_FROM_DUPLI
@ BASE_FROM_SET
@ BASE_SELECTED
@ OB_MODE_EDIT
@ OB_SPEAKER
@ OB_MBALL
@ OB_EMPTY
@ OB_SURF
@ OB_CAMERA
@ OB_FONT
@ OB_LAMP
@ OB_MESH
@ OB_POINTCLOUD
@ OB_HAIR
@ OB_VOLUME
@ OB_CURVE
@ OB_LIGHTPROBE
@ USER_CUSTOM_RANGE
#define RV3D_CAMOB
#define DRW_TEXTURE_FREE_SAFE(tex)
Definition: DRW_render.h:180
float GPU_polygon_offset_calc(const float(*winmat)[4], float viewdist, float dist)
Definition: gpu_matrix.cc:724
GPUTexture * GPU_texture_create_1d(const char *name, int w, int mip_len, eGPUTextureFormat format, const float *data)
Definition: gpu_texture.cc:237
struct GPUTexture GPUTexture
Definition: GPU_texture.h:33
@ GPU_SRGB8_A8
Definition: GPU_texture.h:122
@ GPU_RGBA8
Definition: GPU_texture.h:88
GPUUniformBuf * GPU_uniformbuf_create_ex(size_t size, const void *data, const char *name)
void GPU_uniformbuf_update(GPUUniformBuf *ubo, const void *data)
@ TH_EDGE_SHARP
Definition: UI_resources.h:217
@ TH_BONE_SOLID
Definition: UI_resources.h:149
@ TH_HANDLE_ALIGN
Definition: UI_resources.h:128
@ TH_NORMAL
Definition: UI_resources.h:108
@ TH_LIGHT
Definition: UI_resources.h:171
@ TH_FACE_BACK
Definition: UI_resources.h:106
@ TH_BACK_GRAD
Definition: UI_resources.h:57
@ TH_LNORMAL
Definition: UI_resources.h:110
@ TH_EDGE_FACESEL
Definition: UI_resources.h:103
@ TH_NURB_SEL_VLINE
Definition: UI_resources.h:122
@ TH_TRANSPARENT_CHECKER_PRIMARY
Definition: UI_resources.h:312
@ TH_BONE_POSE_ACTIVE
Definition: UI_resources.h:151
@ TH_FREESTYLE_FACE_MARK
Definition: UI_resources.h:270
@ TH_FREESTYLE_EDGE_MARK
Definition: UI_resources.h:269
@ TH_GRID
Definition: UI_resources.h:84
@ TH_BACK
Definition: UI_resources.h:55
@ TH_WIRE
Definition: UI_resources.h:85
@ TH_BONE_LOCKED_WEIGHT
Definition: UI_resources.h:152
@ TH_FACEDOT_SIZE
Definition: UI_resources.h:112
@ TH_BONE_POSE
Definition: UI_resources.h:150
@ TH_HANDLE_SEL_AUTO
Definition: UI_resources.h:131
@ TH_SKIN_ROOT
Definition: UI_resources.h:280
@ TH_EDGE_SELECT
Definition: UI_resources.h:101
@ TH_TRANSPARENT_CHECKER_SECONDARY
Definition: UI_resources.h:313
@ TH_HANDLE_SEL_AUTOCLAMP
Definition: UI_resources.h:134
@ TH_ACTIVE_SPLINE
Definition: UI_resources.h:136
@ TH_CAMERA
Definition: UI_resources.h:173
@ TH_TRANSFORM
Definition: UI_resources.h:92
@ TH_EDGE_BEVEL
Definition: UI_resources.h:350
@ TH_HANDLE_AUTO
Definition: UI_resources.h:126
@ TH_NURB_VLINE
Definition: UI_resources.h:120
@ TH_SPEAKER
Definition: UI_resources.h:172
@ TH_VERTEX
Definition: UI_resources.h:93
@ TH_VERTEX_SIZE
Definition: UI_resources.h:97
@ TH_HANDLE_SEL_ALIGN
Definition: UI_resources.h:133
@ TH_GP_VERTEX_SELECT
Definition: UI_resources.h:225
@ TH_OBCENTER_DIA
Definition: UI_resources.h:99
@ TH_UV_SHADOW
Definition: UI_resources.h:267
@ TH_HANDLE_SEL_FREE
Definition: UI_resources.h:130
@ TH_FACE_SELECT
Definition: UI_resources.h:105
@ TH_CFRAME
Definition: UI_resources.h:113
@ TH_NURB_ULINE
Definition: UI_resources.h:119
@ TH_EDGE_SEAM
Definition: UI_resources.h:102
@ TH_AXIS_Y
Definition: UI_resources.h:317
@ TH_AXIS_X
Definition: UI_resources.h:316
@ TH_HANDLE_SEL_VECT
Definition: UI_resources.h:132
@ TH_VERTEX_SELECT
Definition: UI_resources.h:94
@ TH_EMPTY
Definition: UI_resources.h:174
@ TH_FACE_FRONT
Definition: UI_resources.h:107
@ TH_VERTEX_UNREFERENCED
Definition: UI_resources.h:96
@ TH_TRANSPARENT_CHECKER_SIZE
Definition: UI_resources.h:314
@ TH_V3D_CLIPPING_BORDER
Definition: UI_resources.h:345
@ TH_AXIS_Z
Definition: UI_resources.h:318
@ TH_EDITMESH_ACTIVE
Definition: UI_resources.h:218
@ TH_GP_VERTEX_SIZE
Definition: UI_resources.h:226
@ TH_GP_VERTEX
Definition: UI_resources.h:224
@ TH_FACE_DOT
Definition: UI_resources.h:111
@ TH_CAMERA_PATH
Definition: UI_resources.h:254
@ TH_SELECT
Definition: UI_resources.h:88
@ TH_HANDLE_FREE
Definition: UI_resources.h:125
@ TH_HANDLE_AUTOCLAMP
Definition: UI_resources.h:129
@ TH_EDGE_CREASE
Definition: UI_resources.h:234
@ TH_HANDLE_VECT
Definition: UI_resources.h:127
@ TH_TEXT
Definition: UI_resources.h:58
@ TH_WIRE_EDIT
Definition: UI_resources.h:87
@ TH_NURB_SEL_ULINE
Definition: UI_resources.h:121
@ TH_ACTIVE
Definition: UI_resources.h:89
@ TH_FACE
Definition: UI_resources.h:104
@ TH_VNORMAL
Definition: UI_resources.h:109
@ TH_TEXT_HI
Definition: UI_resources.h:59
void UI_GetThemeColorBlendShade4fv(int colorid1, int colorid2, float fac, int offset, float col[4])
Definition: resources.c:1326
void UI_GetThemeColorBlendShade3fv(int colorid1, int colorid2, float fac, int offset, float col[3])
Definition: resources.c:1306
void UI_GetThemeColorShadeAlpha4fv(int colorid, int coloffset, int alphaoffset, float col[4])
Definition: resources.c:1286
void UI_GetThemeColor4fv(int colorid, float col[4])
Definition: resources.c:1199
void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4])
Definition: resources.c:1359
float UI_GetThemeValuef(int colorid)
Definition: resources.c:1164
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
unsigned int U
Definition: btGjkEpa3.h:78
void DRW_globals_update(void)
Definition: draw_common.c:52
float * DRW_color_background_blend_get(int theme_id)
Definition: draw_common.c:401
int DRW_object_wire_theme_get(Object *ob, ViewLayer *view_layer, float **r_color)
Definition: draw_common.c:299
#define UI_COLOR_RGBA_FROM_U8(r, g, b, a, v4)
Definition: draw_common.c:41
static void DRW_evaluate_weight_to_color(const float weight, float result[4])
Definition: draw_common.c:487
struct DRW_Global G_draw
Definition: draw_common.c:45
static ColorBand weight_ramp_copy
Definition: draw_common.c:48
bool DRW_object_is_flat(Object *ob, int *r_axis)
Definition: draw_common.c:441
DRWView * DRW_view_create_with_zoffset(const DRWView *parent_view, const RegionView3D *rv3d, float offset)
Definition: draw_common.c:271
static bool weight_ramp_custom
Definition: draw_common.c:47
void DRW_globals_free(void)
Definition: draw_common.c:267
bool DRW_object_axis_orthogonal_to_view(Object *ob, int axis)
Definition: draw_common.c:474
static struct GPUTexture * DRW_create_weight_colorramp_texture(void)
Definition: draw_common.c:507
#define UBO_LAST_COLOR
Definition: draw_common.h:34
const float * DRW_viewport_pixelsize_get(void)
Definition: draw_manager.c:454
const DRWContextState * DRW_context_state_get(void)
const float * DRW_viewport_size_get(void)
Definition: draw_manager.c:439
const float * DRW_viewport_screenvecs_get(void)
Definition: draw_manager.c:449
void DRW_view_winmat_get(const DRWView *view, float mat[4][4], bool inverse)
DRWView * DRW_view_create_sub(const DRWView *parent_view, const float viewmat[4][4], const float winmat[4][4])
void DRW_view_viewmat_get(const DRWView *view, float mat[4][4], bool inverse)
#define fabsf(x)
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:41
INLINE Rall1d< T, V, S > pow(const Rall1d< T, V, S > &arg, double m)
Definition: rall1d.h:359
bool active
all scheduled work for the GPU.
return ret
struct Object * object
CBData data[32]
eObjectMode object_mode
Definition: DRW_render.h:757
GlobalsUboStorage block
Definition: draw_common.h:208
struct GPUUniformBuf * block_ubo
Definition: draw_common.h:210
struct GPUTexture * weight_ramp
Definition: draw_common.h:213
struct GPUTexture * ramp
Definition: draw_common.h:212
float colorLight[4]
Definition: draw_common.h:50
float colorHandleAuto[4]
Definition: draw_common.h:90
float sizeViewportInv[2]
Definition: draw_common.h:146
float colorBonePoseTarget[4]
Definition: draw_common.h:111
float colorMballRadius[4]
Definition: draw_common.h:126
float colorHandleVect[4]
Definition: draw_common.h:91
float colorGridAxisZ[4]
Definition: draw_common.h:137
float colorBoneSelect[4]
Definition: draw_common.h:116
float colorDupli[4]
Definition: draw_common.h:46
float colorMballRadiusSelect[4]
Definition: draw_common.h:127
float colorEditMeshMiddle[4]
Definition: draw_common.h:87
float colorVertexMissingData[4]
Definition: draw_common.h:58
float colorGridAxisY[4]
Definition: draw_common.h:136
float colorNurbSelUline[4]
Definition: draw_common.h:101
float colorEdgeCrease[4]
Definition: draw_common.h:63
float colorBoneIKLineSpline[4]
Definition: draw_common.h:119
float colorEdgeBWeight[4]
Definition: draw_common.h:64
float colorBoneIKLine[4]
Definition: draw_common.h:117
float colorHandleAlign[4]
Definition: draw_common.h:92
float colorHandleSelFree[4]
Definition: draw_common.h:94
float colorGpencilVertexSelect[4]
Definition: draw_common.h:71
float colorEmpty[4]
Definition: draw_common.h:54
float colorOutline[4]
Definition: draw_common.h:79
float colorBoneIKLineNoTarget[4]
Definition: draw_common.h:118
float colorGridEmphasis[4]
Definition: draw_common.h:134
float colorBonePoseActive[4]
Definition: draw_common.h:106
float colorEdgeSeam[4]
Definition: draw_common.h:61
float colorSkinRoot[4]
Definition: draw_common.h:76
float colorHandleSelAlign[4]
Definition: draw_common.h:97
float colorNurbVline[4]
Definition: draw_common.h:100
float colorLightNoAlpha[4]
Definition: draw_common.h:80
float colorBonePoseIK[4]
Definition: draw_common.h:109
float colorEdgeFreestyle[4]
Definition: draw_common.h:66
float colorHandleFree[4]
Definition: draw_common.h:89
float colorFaceFreestyle[4]
Definition: draw_common.h:69
float colorClippingBorder[4]
Definition: draw_common.h:86
float colorVertex[4]
Definition: draw_common.h:55
float colorNurbUline[4]
Definition: draw_common.h:99
float colorWireEdit[4]
Definition: draw_common.h:42
float colorHandleSelVect[4]
Definition: draw_common.h:96
float colorBonePoseActiveUnsel[4]
Definition: draw_common.h:107
float colorFaceSelect[4]
Definition: draw_common.h:68
float colorBoneLocked[4]
Definition: draw_common.h:113
float colorCameraPath[4]
Definition: draw_common.h:53
float colorVertexSelect[4]
Definition: draw_common.h:56
float colorCamera[4]
Definition: draw_common.h:52
float colorBoneActiveUnsel[4]
Definition: draw_common.h:115
float colorSelect[4]
Definition: draw_common.h:44
float colorSpeaker[4]
Definition: draw_common.h:51
float colorActiveSpline[4]
Definition: draw_common.h:103
float colorBonePoseConstraint[4]
Definition: draw_common.h:108
float colorFaceBack[4]
Definition: draw_common.h:139
float colorUVShadow[4]
Definition: draw_common.h:142
float colorCheckerPrimary[4]
Definition: draw_common.h:84
float colorFaceFront[4]
Definition: draw_common.h:140
float colorEditMeshActive[4]
Definition: draw_common.h:59
float colorGridAxisX[4]
Definition: draw_common.h:135
float colorDeselect[4]
Definition: draw_common.h:78
float screenVecs[2][4]
Definition: draw_common.h:145
float colorBonePose[4]
Definition: draw_common.h:105
float colorText[4]
Definition: draw_common.h:121
float colorTransform[4]
Definition: draw_common.h:49
float colorNormal[4]
Definition: draw_common.h:72
float sizeViewport[2]
Definition: draw_common.h:146
float colorLibrary[4]
Definition: draw_common.h:48
float colorLNormal[4]
Definition: draw_common.h:74
float colorMballStiffness[4]
Definition: draw_common.h:128
float colorFace[4]
Definition: draw_common.h:67
float colorGpencilVertex[4]
Definition: draw_common.h:70
float colorMballStiffnessSelect[4]
Definition: draw_common.h:129
float colorHandleSelAuto[4]
Definition: draw_common.h:95
float colorVNormal[4]
Definition: draw_common.h:73
float colorBoneSolid[4]
Definition: draw_common.h:112
float colorHandleSelAutoclamp[4]
Definition: draw_common.h:98
float colorGrid[4]
Definition: draw_common.h:133
float colorEdgeSharp[4]
Definition: draw_common.h:62
float colorLibrarySelect[4]
Definition: draw_common.h:47
float colorWire[4]
Definition: draw_common.h:41
float colorNurbSelVline[4]
Definition: draw_common.h:102
float colorEdgeFaceSelect[4]
Definition: draw_common.h:65
float colorBackground[4]
Definition: draw_common.h:82
float colorBackgroundGradient[4]
Definition: draw_common.h:83
float colorBonePoseSplineIK[4]
Definition: draw_common.h:110
float colorHandleAutoclamp[4]
Definition: draw_common.h:93
float colorBoneActive[4]
Definition: draw_common.h:114
float colorCheckerSecondary[4]
Definition: draw_common.h:85
float colorTextHi[4]
Definition: draw_common.h:122
float colorEdgeSelect[4]
Definition: draw_common.h:60
float colorFaceDot[4]
Definition: draw_common.h:75
float colorDupliSelect[4]
Definition: draw_common.h:45
float colorVertexUnreferenced[4]
Definition: draw_common.h:57
float colorCurrentFrame[4]
Definition: draw_common.h:131
float sizeLightCircleShadow
Definition: draw_common.h:150
float colorActive[4]
Definition: draw_common.h:43
short base_flag
struct Base * basact
#define G(x, y, z)