[Bf-blender-cvs] [cc5b831] wiggly-widgets: Use widget library for drawing cube widgets
Julian Eisel
noreply at git.blender.org
Mon Aug 24 00:45:14 CEST 2015
Commit: cc5b831a66e865d67fb6629d00aeedac1dddcf72
Author: Julian Eisel
Date: Mon Aug 24 00:34:43 2015 +0200
Branches: wiggly-widgets
https://developer.blender.org/rBcc5b831a66e865d67fb6629d00aeedac1dddcf72
Use widget library for drawing cube widgets
Meaning we also draw it using buffer drawing.
===================================================================
A source/blender/windowmanager/3d_widgets/cube_widget.c
M source/blender/windowmanager/3d_widgets/ui_widget_library.h
M source/blender/windowmanager/CMakeLists.txt
M source/blender/windowmanager/intern/wm_generic_widgets.c
===================================================================
diff --git a/source/blender/windowmanager/3d_widgets/cube_widget.c b/source/blender/windowmanager/3d_widgets/cube_widget.c
new file mode 100644
index 0000000..3673994
--- /dev/null
+++ b/source/blender/windowmanager/3d_widgets/cube_widget.c
@@ -0,0 +1,39 @@
+int _WIDGET_nverts_cube = 8;
+int _WIDGET_ntris_cube = 12;
+
+float _WIDGET_verts_cube[][3] = {
+ {1.000000, 1.000000, -1.000000},
+ {1.000000, -1.000000, -1.000000},
+ {-1.000000, -1.000000, -1.000000},
+ {-1.000000, 1.000000, -1.000000},
+ {1.000000, 1.000000, 1.000000},
+ {0.999999, -1.000001, 1.000000},
+ {-1.000000, -1.000000, 1.000000},
+ {-1.000000, 1.000000, 1.000000},
+};
+
+float _WIDGET_normals_cube[][3] = {
+ {0.577349, 0.577349, -0.577349},
+ {0.577349, -0.577349, -0.577349},
+ {-0.577349, -0.577349, -0.577349},
+ {-0.577349, 0.577349, -0.577349},
+ {0.577349, 0.577349, 0.577349},
+ {0.577349, -0.577349, 0.577349},
+ {-0.577349, -0.577349, 0.577349},
+ {-0.577349, 0.577349, 0.577349},
+};
+
+unsigned short _WIDGET_indices_cube[] = {
+ 1, 2, 3,
+ 7, 6, 5,
+ 4, 5, 1,
+ 5, 6, 2,
+ 2, 6, 7,
+ 0, 3, 7,
+ 0, 1, 3,
+ 4, 7, 5,
+ 0, 4, 1,
+ 1, 5, 2,
+ 3, 2, 7,
+ 4, 0, 7,
+};
diff --git a/source/blender/windowmanager/3d_widgets/ui_widget_library.h b/source/blender/windowmanager/3d_widgets/ui_widget_library.h
index 6bf7ed6..24dc8c9 100644
--- a/source/blender/windowmanager/3d_widgets/ui_widget_library.h
+++ b/source/blender/windowmanager/3d_widgets/ui_widget_library.h
@@ -7,6 +7,14 @@ extern float _WIDGET_verts_arrow[][3];
extern float _WIDGET_normals_arrow[][3];
extern unsigned short _WIDGET_indices_arrow[];
+/* cube widget */
+extern int _WIDGET_nverts_cube;
+extern int _WIDGET_ntris_cube;
+
+extern float _WIDGET_verts_cube[][3];
+extern float _WIDGET_normals_cube[][3];
+extern unsigned short _WIDGET_indices_cube[];
+
/* dial widget */
extern int _WIDGET_nverts_dial;
extern int _WIDGET_ntris_dial;
diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt
index a9a81ae..8d64a39 100644
--- a/source/blender/windowmanager/CMakeLists.txt
+++ b/source/blender/windowmanager/CMakeLists.txt
@@ -69,6 +69,7 @@ set(SRC
intern/wm_widgets.c
intern/wm_generic_widgets.c
3d_widgets/arrow_widget.c
+ 3d_widgets/cube_widget.c
3d_widgets/dial_widget.c
WM_api.h
diff --git a/source/blender/windowmanager/intern/wm_generic_widgets.c b/source/blender/windowmanager/intern/wm_generic_widgets.c
index 58d18e7..1f6187f 100644
--- a/source/blender/windowmanager/intern/wm_generic_widgets.c
+++ b/source/blender/windowmanager/intern/wm_generic_widgets.c
@@ -95,6 +95,7 @@ typedef struct WidgetDrawInfo {
#ifdef WIDGET_USE_CUSTOM_ARROWS
WidgetDrawInfo arraw_head_draw_info = {0};
#endif
+WidgetDrawInfo cube_draw_info = {0};
#ifdef WIDGET_USE_CUSTOM_DIAS
WidgetDrawInfo dial_draw_info = {0};
#endif
@@ -219,44 +220,10 @@ static void arrow_draw_geom(const ArrowWidget *arrow, const bool select)
if (arrow->style & WIDGET_ARROW_STYLE_BOX) {
const float size = 0.05f;
- static float box[24][3] = {
- /* back */
- {-1.0f, -1.0f, -1.0f},
- {-1.0f, 1.0f, -1.0f},
- { 1.0f, 1.0f, -1.0f},
- { 1.0f, -1.0f, -1.0f},
- /* front */
- {-1.0f, -1.0f, 1.0f},
- {-1.0f, 1.0f, 1.0f},
- { 1.0f, 1.0f, 1.0f},
- { 1.0f, -1.0f, 1.0f},
- /* left */
- {-1.0f, -1.0f, -1.0f},
- {-1.0f, 1.0f, -1.0f},
- {-1.0f, 1.0f, 1.0f},
- {-1.0f, -1.0f, 1.0f},
- /* right */
- { 1.0f, -1.0f, -1.0f},
- { 1.0f, 1.0f, -1.0f},
- { 1.0f, 1.0f, 1.0f},
- { 1.0f, -1.0f, 1.0f},
- /* top */
- {-1.0f, 1.0f, -1.0f},
- { 1.0f, 1.0f, -1.0f},
- { 1.0f, 1.0f, 1.0f},
- {-1.0f, 1.0f, 1.0f},
- /* bottom */
- {-1.0f, -1.0f, -1.0f},
- { 1.0f, -1.0f, -1.0f},
- { 1.0f, -1.0f, 1.0f},
- {-1.0f, -1.0f, 1.0f},
- };
-
- glEnableClientState(GL_VERTEX_ARRAY);
+
+ /* draw cube */
glScalef(size, size, size);
- glVertexPointer(3, GL_FLOAT, 0, box);
- glDrawArrays(GL_QUADS, 0, ARRAY_SIZE(box));
- glDisableClientState(GL_VERTEX_ARRAY);
+ widget_draw_intern(&cube_draw_info, select);
}
else {
GLUquadricObj *qobj = gluNewQuadric();
@@ -543,6 +510,14 @@ wmWidget *WIDGET_arrow_new(wmWidgetGroup *wgroup, const char *name, const int st
arraw_head_draw_info.init = true;
}
#endif
+ if (!cube_draw_info.init) {
+ cube_draw_info.nverts = _WIDGET_nverts_cube,
+ cube_draw_info.ntris = _WIDGET_ntris_cube,
+ cube_draw_info.verts = _WIDGET_verts_cube,
+ cube_draw_info.normals = _WIDGET_normals_cube,
+ cube_draw_info.indices = _WIDGET_indices_cube,
+ cube_draw_info.init = true;
+ }
/* inverted only makes sense in a constrained arrow */
if (real_style & WIDGET_ARROW_STYLE_INVERTED) {
@@ -842,7 +817,6 @@ static void widget_plane_draw(const bContext *UNUSED(C), wmWidget *widget)
widget_plane_draw_intern((PlaneWidget *)widget, false, (widget->flag & WM_WIDGET_HIGHLIGHT));
}
-/* XXX custom drawing */
wmWidget *WIDGET_plane_new(wmWidgetGroup *wgroup, const char *name, const int UNUSED(style))
{
PlaneWidget *plane;
More information about the Bf-blender-cvs
mailing list