Commit: 13399d471e5a86081de7aba031043ce8f0578fdf
Author: Luca Rood
Date:   Wed Jan 25 22:14:13 2017 -0200
Branches: blender2.8
https://developer.blender.org/rB13399d471e5a86081de7aba031043ce8f0578fdf

OpenGL immediate mode: editmesh_knife.c

Differential Revision: https://developer.blender.org/D2481

Part of T49043

===================================================================

M       source/blender/editors/mesh/editmesh_knife.c

===================================================================

diff --git a/source/blender/editors/mesh/editmesh_knife.c 
b/source/blender/editors/mesh/editmesh_knife.c
index bf59693b85..2250aaab31 100644
--- a/source/blender/editors/mesh/editmesh_knife.c
+++ b/source/blender/editors/mesh/editmesh_knife.c
@@ -57,6 +57,8 @@
 #include "BIF_gl.h"
 #include "BIF_glutil.h" /* for paint cursor */
 
+#include "GPU_immediate.h"
+
 #include "ED_screen.h"
 #include "ED_space_api.h"
 #include "ED_view3d.h"
@@ -1002,12 +1004,18 @@ static void knifetool_draw_angle_snapping(const 
KnifeTool_OpData *kcd)
                copy_v3_v3(v2, ray_hit_best[1]);
        }
 
-       UI_ThemeColor(TH_TRANSFORM);
+       unsigned pos = add_attrib(immVertexFormat(), "pos", GL_FLOAT, 3, 
KEEP_FLOAT);
+
+       immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+       immUniformThemeColor(TH_TRANSFORM);
        glLineWidth(2.0);
-       glBegin(GL_LINES);
-       glVertex3fv(v1);
-       glVertex3fv(v2);
-       glEnd();
+
+       immBegin(GL_LINES, 2);
+       immVertex3fv(pos, v1);
+       immVertex3fv(pos, v2);
+       immEnd();
+
+       immUnbindProgram();
 }
 
 static void knife_init_colors(KnifeColors *colors)
@@ -1038,63 +1046,66 @@ static void knifetool_draw(const bContext *C, ARegion 
*UNUSED(ar), void *arg)
        glPushMatrix();
        glMultMatrixf(kcd->ob->obmat);
 
+       unsigned pos = add_attrib(immVertexFormat(), "pos", GL_FLOAT, 3, 
KEEP_FLOAT);
+
+       immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
        if (kcd->mode == MODE_DRAGGING) {
                if (kcd->is_angle_snapping)
                        knifetool_draw_angle_snapping(kcd);
 
-               glColor3ubv(kcd->colors.line);
-               
+               immUniformColor3ubv(kcd->colors.line);
                glLineWidth(2.0);
 
-               glBegin(GL_LINES);
-               glVertex3fv(kcd->prev.cage);
-               glVertex3fv(kcd->curr.cage);
-               glEnd();
+               immBegin(GL_LINES, 2);
+               immVertex3fv(pos, kcd->prev.cage);
+               immVertex3fv(pos, kcd->curr.cage);
+               immEnd();
        }
 
        if (kcd->prev.vert) {
-               glColor3ubv(kcd->colors.point);
+               immUniformColor3ubv(kcd->colors.point);
                glPointSize(11);
 
-               glBegin(GL_POINTS);
-               glVertex3fv(kcd->prev.cage);
-               glEnd();
+               immBegin(GL_POINTS, 1);
+               immVertex3fv(pos, kcd->prev.cage);
+               immEnd();
        }
 
        if (kcd->prev.bmface) {
-               glColor3ubv(kcd->colors.curpoint);
+               immUniformColor3ubv(kcd->colors.curpoint);
                glPointSize(9);
 
-               glBegin(GL_POINTS);
-               glVertex3fv(kcd->prev.cage);
-               glEnd();
+               immBegin(GL_POINTS, 1);
+               immVertex3fv(pos, kcd->prev.cage);
+               immEnd();
        }
 
        if (kcd->curr.edge) {
-               glColor3ubv(kcd->colors.edge);
+               immUniformColor3ubv(kcd->colors.edge);
                glLineWidth(2.0);
 
-               glBegin(GL_LINES);
-               glVertex3fv(kcd->curr.edge->v1->cageco);
-               glVertex3fv(kcd->curr.edge->v2->cageco);
-               glEnd();
+               immBegin(GL_LINES, 2);
+               immVertex3fv(pos, kcd->curr.edge->v1->cageco);
+               immVertex3fv(pos, kcd->curr.edge->v2->cageco);
+               immEnd();
        }
        else if (kcd->curr.vert) {
-               glColor3ubv(kcd->colors.point);
+               immUniformColor3ubv(kcd->colors.point);
                glPointSize(11);
 
-               glBegin(GL_POINTS);
-               glVertex3fv(kcd->curr.cage);
-               glEnd();
+               immBegin(GL_POINTS, 1);
+               immVertex3fv(pos, kcd->curr.cage);
+               immEnd();
        }
 
        if (kcd->curr.bmface) {
-               glColor3ubv(kcd->colors.curpoint);
+               immUniformColor3ubv(kcd->colors.curpoint);
                glPointSize(9);
 
-               glBegin(GL_POINTS);
-               glVertex3fv(kcd->curr.cage);
-               glEnd();
+               immBegin(GL_POINTS, 1);
+               immVertex3fv(pos, kcd->curr.cage);
+               immEnd();
        }
 
        if (kcd->totlinehit > 0) {
@@ -1105,26 +1116,35 @@ static void knifetool_draw(const bContext *C, ARegion 
*UNUSED(ar), void *arg)
                glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
                /* draw any snapped verts first */
-               glColor4ubv(kcd->colors.point_a);
+               immUniformColor4ubv(kcd->colors.point_a);
                glPointSize(11);
-               glBegin(GL_POINTS);
+
+               immBeginAtMost(GL_POINTS, kcd->totlinehit);
+
                lh = kcd->linehits;
                for (i = 0; i < kcd->totlinehit; i++, lh++) {
-                       if (lh->v)
-                               glVertex3fv(lh->cagehit);
+                       if (lh->v) {
+                               immVertex3fv(pos, lh->cagehit);
+                       }
                }
-               glEnd();
+
+               immEnd();
 
                /* now draw the rest */
-               glColor4ubv(kcd->colors.curpoint_a);
+               immUniformColor4ubv(kcd->colors.curpoint_a);
                glPointSize(7);
-               glBegin(GL_POINTS);
+
+               immBeginAtMost(GL_POINTS, kcd->totlinehit);
+
                lh = kcd->linehits;
                for (i = 0; i < kcd->totlinehit; i++, lh++) {
-                       if (!lh->v)
-                               glVertex3fv(lh->cagehit);
+                       if (!lh->v) {
+                               immVertex3fv(pos, lh->cagehit);
+                       }
                }
-               glEnd();
+
+               immEnd();
+
                glDisable(GL_BLEND);
        }
 
@@ -1132,43 +1152,45 @@ static void knifetool_draw(const bContext *C, ARegion 
*UNUSED(ar), void *arg)
                BLI_mempool_iter iter;
                KnifeEdge *kfe;
 
+               immUniformColor3ubv(kcd->colors.line);
                glLineWidth(1.0);
-               glBegin(GL_LINES);
+
+               immBeginAtMost(GL_LINES, BLI_mempool_count(kcd->kedges) * 2);
 
                BLI_mempool_iternew(kcd->kedges, &iter);
                for (kfe = BLI_mempool_iterstep(&iter); kfe; kfe = 
BLI_mempool_iterstep(&iter)) {
                        if (!kfe->is_cut)
                                continue;
 
-                       glColor3ubv(kcd->colors.line);
-
-                       glVertex3fv(kfe->v1->cageco);
-                       glVertex3fv(kfe->v2->cageco);
+                       immVertex3fv(pos, kfe->v1->cageco);
+                       immVertex3fv(pos, kfe->v2->cageco);
                }
 
-               glEnd();
+               immEnd();
        }
 
        if (kcd->totkvert > 0) {
                BLI_mempool_iter iter;
                KnifeVert *kfv;
 
+               immUniformColor3ubv(kcd->colors.point);
                glPointSize(5.0);
 
-               glBegin(GL_POINTS);
+               immBeginAtMost(GL_POINTS, BLI_mempool_count(kcd->kverts));
+
                BLI_mempool_iternew(kcd->kverts, &iter);
                for (kfv = BLI_mempool_iterstep(&iter); kfv; kfv = 
BLI_mempool_iterstep(&iter)) {
                        if (!kfv->is_cut)
                                continue;
 
-                       glColor3ubv(kcd->colors.point);
-
-                       glVertex3fv(kfv->cageco);
+                       immVertex3fv(pos, kfv->cageco);
                }
 
-               glEnd();
+               immEnd();
        }
 
+       immUnbindProgram();
+
        glPopMatrix();
 
        if (v3d->zbuf) glEnable(GL_DEPTH_TEST);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to