Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/view3d_gizmo_ruler.c
| Show First 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | |||||
| #include "WM_api.h" | #include "WM_api.h" | ||||
| #include "WM_toolsystem.h" | #include "WM_toolsystem.h" | ||||
| #include "WM_types.h" | #include "WM_types.h" | ||||
| #include "view3d_intern.h" /* own include */ | #include "view3d_intern.h" /* own include */ | ||||
| #include "GPU_immediate.h" | #include "GPU_immediate.h" | ||||
| #include "GPU_immediate_util.h" | #include "GPU_immediate_util.h" | ||||
| #include "GPU_matrix.h" | |||||
| #include "GPU_state.h" | #include "GPU_state.h" | ||||
| #include "BLF_api.h" | #include "BLF_api.h" | ||||
| static const char *view3d_gzgt_ruler_id = "VIEW3D_GGT_ruler"; | static const char *view3d_gzgt_ruler_id = "VIEW3D_GGT_ruler"; | ||||
| #define MVAL_MAX_PX_DIST 12.0f | #define MVAL_MAX_PX_DIST 12.0f | ||||
| ▲ Show 20 Lines • Show All 498 Lines • ▼ Show 20 Lines | #define ARC_STEPS 24 | ||||
| /* Avoid white on white text. (TODO Fix by using theme) */ | /* Avoid white on white text. (TODO Fix by using theme) */ | ||||
| if ((int)color_text[0] + (int)color_text[1] + (int)color_text[2] > 127 * 3 * 0.6f) { | if ((int)color_text[0] + (int)color_text[1] + (int)color_text[2] > 127 * 3 * 0.6f) { | ||||
| copy_v3_fl(color_back, 0.0f); | copy_v3_fl(color_back, 0.0f); | ||||
| } | } | ||||
| const bool is_act = (ruler_info->item_active == ruler_item); | const bool is_act = (ruler_info->item_active == ruler_item); | ||||
| float dir_ruler[2]; | float dir_ruler[2]; | ||||
| float co_ss[3][2]; | float co_ss[3][2]; | ||||
| bool proj_ok[3]; | |||||
| int j; | int j; | ||||
| /* should these be checked? - ok for now not to */ | /* Check if each corner is behind the near plane. If it is, we do not draw certain lines. */ | ||||
| for (j = 0; j < 3; j++) { | for (j = 0; j < 3; j++) { | ||||
| ED_view3d_project_float_global(region, ruler_item->co[j], co_ss[j], V3D_PROJ_TEST_NOP); | eV3DProjStatus status = ED_view3d_project_float_global( | ||||
| region, ruler_item->co[j], co_ss[j], V3D_PROJ_TEST_CLIP_NEAR); | |||||
| proj_ok[j] = (status == V3D_PROJ_RET_OK); | |||||
| } | } | ||||
| /* 3d drawing. */ | |||||
| GPU_matrix_push_projection(); | |||||
| GPU_matrix_push(); | |||||
| GPU_matrix_projection_set(rv3d->winmat); | |||||
| GPU_matrix_set(rv3d->viewmat); | |||||
| GPU_blend(true); | GPU_blend(true); | ||||
| const uint shdr_pos = GPU_vertformat_attr_add( | const uint shdr_pos_3d = GPU_vertformat_attr_add( | ||||
| immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); | immVertexFormat(), "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); | ||||
| if (ruler_item->flag & RULERITEM_USE_ANGLE) { | if (ruler_item->flag & RULERITEM_USE_ANGLE) { | ||||
| immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR); | immBindBuiltinProgram(GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR); | ||||
| float viewport_size[4]; | float viewport_size[4]; | ||||
| GPU_viewport_size_get_f(viewport_size); | GPU_viewport_size_get_f(viewport_size); | ||||
| immUniform2f("viewport_size", viewport_size[2], viewport_size[3]); | immUniform2f("viewport_size", viewport_size[2], viewport_size[3]); | ||||
| immUniform1i("colors_len", 2); /* "advanced" mode */ | immUniform1i("colors_len", 2); /* "advanced" mode */ | ||||
| const float *col = is_act ? color_act : color_base; | const float *col = is_act ? color_act : color_base; | ||||
| immUniformArray4fv( | immUniformArray4fv( | ||||
| "colors", | "colors", | ||||
| (float *)(float[][4]){{0.67f, 0.67f, 0.67f, 1.0f}, {col[0], col[1], col[2], col[3]}}, | (float *)(float[][4]){{0.67f, 0.67f, 0.67f, 1.0f}, {col[0], col[1], col[2], col[3]}}, | ||||
| 2); | 2); | ||||
| immUniform1f("dash_width", 6.0f); | immUniform1f("dash_width", 6.0f); | ||||
| immUniform1f("dash_factor", 0.5f); | immUniform1f("dash_factor", 0.5f); | ||||
| immBegin(GPU_PRIM_LINE_STRIP, 3); | immBegin(GPU_PRIM_LINE_STRIP, 3); | ||||
| immVertex2fv(shdr_pos, co_ss[0]); | immVertex3fv(shdr_pos_3d, ruler_item->co[0]); | ||||
| immVertex2fv(shdr_pos, co_ss[1]); | immVertex3fv(shdr_pos_3d, ruler_item->co[1]); | ||||
| immVertex2fv(shdr_pos, co_ss[2]); | immVertex3fv(shdr_pos_3d, ruler_item->co[2]); | ||||
| immEnd(); | immEnd(); | ||||
| immUnbindProgram(); | immUnbindProgram(); | ||||
| immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); | immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR); | ||||
| /* arc */ | /* arc */ | ||||
| { | { | ||||
| float dir_tmp[3]; | float dir_tmp[3]; | ||||
| float co_tmp[3]; | float ar_coord[3]; | ||||
| float arc_ss_coord[2]; | |||||
| float dir_a[3]; | float dir_a[3]; | ||||
| float dir_b[3]; | float dir_b[3]; | ||||
| float quat[4]; | float quat[4]; | ||||
| float axis[3]; | float axis[3]; | ||||
| float angle; | float angle; | ||||
| const float px_scale = (ED_view3d_pixel_size_no_ui_scale(rv3d, ruler_item->co[1]) * | const float px_scale = (ED_view3d_pixel_size_no_ui_scale(rv3d, ruler_item->co[1]) * | ||||
| min_fff(arc_size, | min_fff(arc_size, | ||||
| Show All 12 Lines | /* arc */ | ||||
| copy_v3_v3(dir_tmp, dir_a); | copy_v3_v3(dir_tmp, dir_a); | ||||
| immUniformColor3ubv(color_wire); | immUniformColor3ubv(color_wire); | ||||
| immBegin(GPU_PRIM_LINE_STRIP, arc_steps + 1); | immBegin(GPU_PRIM_LINE_STRIP, arc_steps + 1); | ||||
| for (j = 0; j <= arc_steps; j++) { | for (j = 0; j <= arc_steps; j++) { | ||||
| madd_v3_v3v3fl(co_tmp, ruler_item->co[1], dir_tmp, px_scale); | madd_v3_v3v3fl(ar_coord, ruler_item->co[1], dir_tmp, px_scale); | ||||
| ED_view3d_project_float_global(region, co_tmp, arc_ss_coord, V3D_PROJ_TEST_NOP); | |||||
| mul_qt_v3(quat, dir_tmp); | mul_qt_v3(quat, dir_tmp); | ||||
| immVertex2fv(shdr_pos, arc_ss_coord); | immVertex3fv(shdr_pos_3d, ar_coord); | ||||
| } | } | ||||
| immEnd(); | immEnd(); | ||||
| } | } | ||||
| immUnbindProgram(); | |||||
| } | |||||
| else { | |||||
| immBindBuiltinProgram(GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR); | |||||
| float viewport_size[4]; | |||||
| GPU_viewport_size_get_f(viewport_size); | |||||
| immUniform2f("viewport_size", viewport_size[2], viewport_size[3]); | |||||
| immUniform1i("colors_len", 2); /* "advanced" mode */ | |||||
| const float *col = is_act ? color_act : color_base; | |||||
| immUniformArray4fv( | |||||
| "colors", | |||||
| (float *)(float[][4]){{0.67f, 0.67f, 0.67f, 1.0f}, {col[0], col[1], col[2], col[3]}}, | |||||
| 2); | |||||
| immUniform1f("dash_width", 6.0f); | |||||
| immUniform1f("dash_factor", 0.5f); | |||||
| immBegin(GPU_PRIM_LINES, 2); | |||||
| immVertex3fv(shdr_pos_3d, ruler_item->co[0]); | |||||
| immVertex3fv(shdr_pos_3d, ruler_item->co[2]); | |||||
| immEnd(); | |||||
| immUnbindProgram(); | |||||
| } | |||||
| /* 2d drawing. */ | |||||
| GPU_matrix_pop(); | |||||
| GPU_matrix_pop_projection(); | |||||
| const uint shdr_pos_2d = GPU_vertformat_attr_add( | |||||
| immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); | |||||
| if (ruler_item->flag & RULERITEM_USE_ANGLE) { | |||||
| immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); | |||||
| /* capping */ | /* capping */ | ||||
| { | { | ||||
| float rot_90_vec_a[2]; | float rot_90_vec_a[2]; | ||||
| float rot_90_vec_b[2]; | float rot_90_vec_b[2]; | ||||
| float cap[2]; | float cap[2]; | ||||
| sub_v2_v2v2(dir_ruler, co_ss[0], co_ss[1]); | sub_v2_v2v2(dir_ruler, co_ss[0], co_ss[1]); | ||||
| rot_90_vec_a[0] = -dir_ruler[1]; | rot_90_vec_a[0] = -dir_ruler[1]; | ||||
| rot_90_vec_a[1] = dir_ruler[0]; | rot_90_vec_a[1] = dir_ruler[0]; | ||||
| normalize_v2(rot_90_vec_a); | normalize_v2(rot_90_vec_a); | ||||
| sub_v2_v2v2(dir_ruler, co_ss[1], co_ss[2]); | sub_v2_v2v2(dir_ruler, co_ss[1], co_ss[2]); | ||||
| rot_90_vec_b[0] = -dir_ruler[1]; | rot_90_vec_b[0] = -dir_ruler[1]; | ||||
| rot_90_vec_b[1] = dir_ruler[0]; | rot_90_vec_b[1] = dir_ruler[0]; | ||||
| normalize_v2(rot_90_vec_b); | normalize_v2(rot_90_vec_b); | ||||
| GPU_blend(true); | GPU_blend(true); | ||||
| if (is_act && (ruler_item->flag & RULERITEM_USE_ANGLE_ACTIVE)) { | if (proj_ok[1] && is_act && (ruler_item->flag & RULERITEM_USE_ANGLE_ACTIVE)) { | ||||
| GPU_line_width(3.0f); | GPU_line_width(3.0f); | ||||
| immUniformColor3fv(color_act); | immUniformColor3fv(color_act); | ||||
| immBegin(GPU_PRIM_LINES, 4); | immBegin(GPU_PRIM_LINES, 4); | ||||
| /* angle vertex */ | /* angle vertex */ | ||||
| immVertex2f(shdr_pos, co_ss[1][0] - cap_size, co_ss[1][1] - cap_size); | immVertex2f(shdr_pos_2d, co_ss[1][0] - cap_size, co_ss[1][1] - cap_size); | ||||
| immVertex2f(shdr_pos, co_ss[1][0] + cap_size, co_ss[1][1] + cap_size); | immVertex2f(shdr_pos_2d, co_ss[1][0] + cap_size, co_ss[1][1] + cap_size); | ||||
| immVertex2f(shdr_pos, co_ss[1][0] - cap_size, co_ss[1][1] + cap_size); | immVertex2f(shdr_pos_2d, co_ss[1][0] - cap_size, co_ss[1][1] + cap_size); | ||||
| immVertex2f(shdr_pos, co_ss[1][0] + cap_size, co_ss[1][1] - cap_size); | immVertex2f(shdr_pos_2d, co_ss[1][0] + cap_size, co_ss[1][1] - cap_size); | ||||
| immEnd(); | immEnd(); | ||||
| GPU_line_width(1.0f); | GPU_line_width(1.0f); | ||||
| } | } | ||||
| immUniformColor3ubv(color_wire); | immUniformColor3ubv(color_wire); | ||||
| immBegin(GPU_PRIM_LINES, 8); | if (proj_ok[0] || proj_ok[2] || proj_ok[1]) { | ||||
| immBegin(GPU_PRIM_LINES, proj_ok[0] * 2 + proj_ok[2] * 2 + proj_ok[1] * 4); | |||||
| if (proj_ok[0]) { | |||||
| madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec_a, cap_size); | madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec_a, cap_size); | ||||
| immVertex2fv(shdr_pos, cap); | immVertex2fv(shdr_pos_2d, cap); | ||||
| madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec_a, -cap_size); | madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec_a, -cap_size); | ||||
| immVertex2fv(shdr_pos, cap); | immVertex2fv(shdr_pos_2d, cap); | ||||
| } | |||||
| if (proj_ok[2]) { | |||||
| madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec_b, cap_size); | madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec_b, cap_size); | ||||
| immVertex2fv(shdr_pos, cap); | immVertex2fv(shdr_pos_2d, cap); | ||||
| madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec_b, -cap_size); | madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec_b, -cap_size); | ||||
| immVertex2fv(shdr_pos, cap); | immVertex2fv(shdr_pos_2d, cap); | ||||
| } | |||||
| /* angle vertex */ | /* angle vertex */ | ||||
| immVertex2f(shdr_pos, co_ss[1][0] - cap_size, co_ss[1][1] - cap_size); | if (proj_ok[1]) { | ||||
| immVertex2f(shdr_pos, co_ss[1][0] + cap_size, co_ss[1][1] + cap_size); | immVertex2f(shdr_pos_2d, co_ss[1][0] - cap_size, co_ss[1][1] - cap_size); | ||||
| immVertex2f(shdr_pos, co_ss[1][0] - cap_size, co_ss[1][1] + cap_size); | immVertex2f(shdr_pos_2d, co_ss[1][0] + cap_size, co_ss[1][1] + cap_size); | ||||
| immVertex2f(shdr_pos, co_ss[1][0] + cap_size, co_ss[1][1] - cap_size); | immVertex2f(shdr_pos_2d, co_ss[1][0] - cap_size, co_ss[1][1] + cap_size); | ||||
| immVertex2f(shdr_pos_2d, co_ss[1][0] + cap_size, co_ss[1][1] - cap_size); | |||||
| } | |||||
| immEnd(); | immEnd(); | ||||
| } | |||||
| GPU_blend(false); | GPU_blend(false); | ||||
| } | } | ||||
| /* text */ | /* text */ | ||||
| char numstr[256]; | char numstr[256]; | ||||
| float numstr_size[2]; | float numstr_size[2]; | ||||
| float posit[2]; | float posit[2]; | ||||
| const int prec = 2; /* XXX, todo, make optional */ | const int prec = 2; /* XXX, todo, make optional */ | ||||
| ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec); | ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec); | ||||
| BLF_width_and_height(blf_mono_font, numstr, sizeof(numstr), &numstr_size[0], &numstr_size[1]); | BLF_width_and_height(blf_mono_font, numstr, sizeof(numstr), &numstr_size[0], &numstr_size[1]); | ||||
| posit[0] = co_ss[1][0] + (cap_size * 2.0f); | posit[0] = co_ss[1][0] + (cap_size * 2.0f); | ||||
| posit[1] = co_ss[1][1] - (numstr_size[1] / 2.0f); | posit[1] = co_ss[1][1] - (numstr_size[1] / 2.0f); | ||||
| /* draw text (bg) */ | /* draw text (bg) */ | ||||
| { | if (proj_ok[1]) { | ||||
| immUniformColor4fv(color_back); | immUniformColor4fv(color_back); | ||||
| GPU_blend(true); | GPU_blend(true); | ||||
| immRectf(shdr_pos, | immRectf(shdr_pos_2d, | ||||
| posit[0] - bg_margin, | posit[0] - bg_margin, | ||||
| posit[1] - bg_margin, | posit[1] - bg_margin, | ||||
| posit[0] + bg_margin + numstr_size[0], | posit[0] + bg_margin + numstr_size[0], | ||||
| posit[1] + bg_margin + numstr_size[1]); | posit[1] + bg_margin + numstr_size[1]); | ||||
| GPU_blend(false); | GPU_blend(false); | ||||
| } | } | ||||
| immUnbindProgram(); | immUnbindProgram(); | ||||
| /* draw text */ | /* draw text */ | ||||
| { | if (proj_ok[1]) { | ||||
| BLF_color3ubv(blf_mono_font, color_text); | BLF_color3ubv(blf_mono_font, color_text); | ||||
| BLF_position(blf_mono_font, posit[0], posit[1], 0.0f); | BLF_position(blf_mono_font, posit[0], posit[1], 0.0f); | ||||
| BLF_rotation(blf_mono_font, 0.0f); | BLF_rotation(blf_mono_font, 0.0f); | ||||
| BLF_draw(blf_mono_font, numstr, sizeof(numstr)); | BLF_draw(blf_mono_font, numstr, sizeof(numstr)); | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR); | |||||
| float viewport_size[4]; | |||||
| GPU_viewport_size_get_f(viewport_size); | |||||
| immUniform2f("viewport_size", viewport_size[2], viewport_size[3]); | |||||
| immUniform1i("colors_len", 2); /* "advanced" mode */ | |||||
| const float *col = is_act ? color_act : color_base; | |||||
| immUniformArray4fv( | |||||
| "colors", | |||||
| (float *)(float[][4]){{0.67f, 0.67f, 0.67f, 1.0f}, {col[0], col[1], col[2], col[3]}}, | |||||
| 2); | |||||
| immUniform1f("dash_width", 6.0f); | |||||
| immUniform1f("dash_factor", 0.5f); | |||||
| immBegin(GPU_PRIM_LINES, 2); | |||||
| immVertex2fv(shdr_pos, co_ss[0]); | |||||
| immVertex2fv(shdr_pos, co_ss[2]); | |||||
| immEnd(); | |||||
| immUnbindProgram(); | |||||
| immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); | immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); | ||||
| sub_v2_v2v2(dir_ruler, co_ss[0], co_ss[2]); | sub_v2_v2v2(dir_ruler, co_ss[0], co_ss[2]); | ||||
| /* capping */ | /* capping */ | ||||
| { | { | ||||
| float rot_90_vec[2] = {-dir_ruler[1], dir_ruler[0]}; | float rot_90_vec[2] = {-dir_ruler[1], dir_ruler[0]}; | ||||
| float cap[2]; | float cap[2]; | ||||
| normalize_v2(rot_90_vec); | normalize_v2(rot_90_vec); | ||||
| GPU_blend(true); | GPU_blend(true); | ||||
| immUniformColor3ubv(color_wire); | immUniformColor3ubv(color_wire); | ||||
| immBegin(GPU_PRIM_LINES, 4); | if (proj_ok[0] || proj_ok[2]) { | ||||
| immBegin(GPU_PRIM_LINES, proj_ok[0] * 2 + proj_ok[2] * 2); | |||||
| if (proj_ok[0]) { | |||||
| madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec, cap_size); | madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec, cap_size); | ||||
| immVertex2fv(shdr_pos, cap); | immVertex2fv(shdr_pos_2d, cap); | ||||
| madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec, -cap_size); | madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec, -cap_size); | ||||
| immVertex2fv(shdr_pos, cap); | immVertex2fv(shdr_pos_2d, cap); | ||||
| } | |||||
| if (proj_ok[2]) { | |||||
| madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec, cap_size); | madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec, cap_size); | ||||
| immVertex2fv(shdr_pos, cap); | immVertex2fv(shdr_pos_2d, cap); | ||||
| madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec, -cap_size); | madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec, -cap_size); | ||||
| immVertex2fv(shdr_pos, cap); | immVertex2fv(shdr_pos_2d, cap); | ||||
| } | |||||
| immEnd(); | immEnd(); | ||||
| } | |||||
| GPU_blend(false); | GPU_blend(false); | ||||
| } | } | ||||
| /* text */ | /* text */ | ||||
| char numstr[256]; | char numstr[256]; | ||||
| float numstr_size[2]; | float numstr_size[2]; | ||||
| const int prec = 6; /* XXX, todo, make optional */ | const int prec = 6; /* XXX, todo, make optional */ | ||||
| float posit[2]; | float posit[2]; | ||||
| ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec); | ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec); | ||||
| BLF_width_and_height(blf_mono_font, numstr, sizeof(numstr), &numstr_size[0], &numstr_size[1]); | BLF_width_and_height(blf_mono_font, numstr, sizeof(numstr), &numstr_size[0], &numstr_size[1]); | ||||
| mid_v2_v2v2(posit, co_ss[0], co_ss[2]); | mid_v2_v2v2(posit, co_ss[0], co_ss[2]); | ||||
| /* center text */ | /* center text */ | ||||
| posit[0] -= numstr_size[0] / 2.0f; | posit[0] -= numstr_size[0] / 2.0f; | ||||
| posit[1] -= numstr_size[1] / 2.0f; | posit[1] -= numstr_size[1] / 2.0f; | ||||
| /* draw text (bg) */ | /* draw text (bg) */ | ||||
| { | if (proj_ok[0] && proj_ok[2]) { | ||||
| immUniformColor4fv(color_back); | immUniformColor4fv(color_back); | ||||
| GPU_blend(true); | GPU_blend(true); | ||||
| immRectf(shdr_pos, | immRectf(shdr_pos_2d, | ||||
| posit[0] - bg_margin, | posit[0] - bg_margin, | ||||
| posit[1] - bg_margin, | posit[1] - bg_margin, | ||||
| posit[0] + bg_margin + numstr_size[0], | posit[0] + bg_margin + numstr_size[0], | ||||
| posit[1] + bg_margin + numstr_size[1]); | posit[1] + bg_margin + numstr_size[1]); | ||||
| GPU_blend(false); | GPU_blend(false); | ||||
| } | } | ||||
| immUnbindProgram(); | immUnbindProgram(); | ||||
| /* draw text */ | /* draw text */ | ||||
| { | if (proj_ok[0] && proj_ok[2]) { | ||||
| BLF_color3ubv(blf_mono_font, color_text); | BLF_color3ubv(blf_mono_font, color_text); | ||||
| BLF_position(blf_mono_font, posit[0], posit[1], 0.0f); | BLF_position(blf_mono_font, posit[0], posit[1], 0.0f); | ||||
| BLF_draw(blf_mono_font, numstr, sizeof(numstr)); | BLF_draw(blf_mono_font, numstr, sizeof(numstr)); | ||||
| } | } | ||||
| } | } | ||||
| GPU_line_smooth(false); | GPU_line_smooth(false); | ||||
| ▲ Show 20 Lines • Show All 367 Lines • Show Last 20 Lines | |||||