[Bf-blender-cvs] [060bf1b] blender2.8: OpenGL: draw empties without GLU
Mike Erwin
noreply at git.blender.org
Thu Aug 25 19:46:20 CEST 2016
Commit: 060bf1bd288dba99f9214099315e4fe64818c56c
Author: Mike Erwin
Date: Thu Aug 25 13:45:39 2016 -0400
Branches: blender2.8
https://developer.blender.org/rB060bf1bd288dba99f9214099315e4fe64818c56c
OpenGL: draw empties without GLU
Also reduced number of matrix ops by generating final positions directly.
Also removed a display list (deprecated in modern GL).
Tried to reuse sinval & cosval tables but those values are skewed (last value repeats first value, middle values are squished to compensate). Went with sinf & cosf instead.
Part of T49042
===================================================================
M source/blender/editors/space_view3d/drawobject.c
===================================================================
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index bec158b..7ac74fb 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -5477,54 +5477,56 @@ static void draw_editfont(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *b
/* draw a sphere for use as an empty drawtype */
static void draw_empty_sphere(float size)
{
- static GLuint displist = 0;
-
- if (displist == 0) {
- GLUquadricObj *qobj;
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- glPushMatrix();
-
- qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
- gluDisk(qobj, 0.0, 1, 16, 1);
-
- glRotatef(90, 0, 1, 0);
- gluDisk(qobj, 0.0, 1, 16, 1);
-
- glRotatef(90, 1, 0, 0);
- gluDisk(qobj, 0.0, 1, 16, 1);
-
- gluDeleteQuadric(qobj);
-
- glPopMatrix();
- glEndList();
+#define NSEGMENTS 16
+ /* a single ring of vertices */
+ float p[NSEGMENTS][2];
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ float angle = 2 * M_PI * ((float)i / (float)NSEGMENTS);
+ p[i][0] = size * cosf(angle);
+ p[i][1] = size * sinf(angle);
}
- glScalef(size, size, size);
- glCallList(displist);
- glScalef(1.0f / size, 1.0f / size, 1.0f / size);
+ glBegin(GL_LINE_LOOP);
+ for (int i = 0; i < NSEGMENTS; ++i)
+ glVertex3f(p[i][0], p[i][1], 0.0f);
+ glEnd();
+ glBegin(GL_LINE_LOOP);
+ for (int i = 0; i < NSEGMENTS; ++i)
+ glVertex3f(p[i][0], 0.0f, p[i][1]);
+ glEnd();
+ glBegin(GL_LINE_LOOP);
+ for (int i = 0; i < NSEGMENTS; ++i)
+ glVertex3f(0.0f, p[i][0], p[i][1]);
+ glEnd();
+#undef NSEGMENTS
}
/* draw a cone for use as an empty drawtype */
static void draw_empty_cone(float size)
{
- const float radius = size;
+#define NSEGMENTS 8
+ /* a single ring of vertices */
+ float p[NSEGMENTS][2];
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ float angle = 2 * M_PI * ((float)i / (float)NSEGMENTS);
+ p[i][0] = size * cosf(angle);
+ p[i][1] = size * sinf(angle);
+ }
- GLUquadricObj *qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
-
- glPushMatrix();
-
- glScalef(radius, size * 2.0f, radius);
- glRotatef(-90.0, 1.0, 0.0, 0.0);
- gluCylinder(qobj, 1.0, 0.0, 1.0, 8, 1);
+ /* cone sides */
+ glBegin(GL_LINES);
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ glVertex3f(0.0f, 2.0f * size, 0.0f);
+ glVertex3f(p[i][0], 0.0f, p[i][1]);
+ }
+ glEnd();
- glPopMatrix();
-
- gluDeleteQuadric(qobj);
+ /* end ring */
+ glBegin(GL_LINE_LOOP);
+ for (int i = 0; i < NSEGMENTS; ++i)
+ glVertex3f(p[i][0], 0.0f, p[i][1]);
+ glEnd();
+#undef NSEGMENTS
}
static void drawspiral(const float cent[3], float rad, float tmat[4][4], int start)
More information about the Bf-blender-cvs
mailing list