[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