Commit: 4493debf558e34c23f75af90124ebb704433a2ef
Author: Luca Rood
Date:   Tue Feb 7 03:27:03 2017 -0200
Branches: temp-blender2.8-stable
https://developer.blender.org/rB4493debf558e34c23f75af90124ebb704433a2ef

OpenGL immediate mode: clip_graph_draw.c

Part of T49043 and T49042

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

M       source/blender/editors/space_clip/clip_graph_draw.c

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

diff --git a/source/blender/editors/space_clip/clip_graph_draw.c 
b/source/blender/editors/space_clip/clip_graph_draw.c
index 424d25defd..b5e37f56ee 100644
--- a/source/blender/editors/space_clip/clip_graph_draw.c
+++ b/source/blender/editors/space_clip/clip_graph_draw.c
@@ -42,7 +42,10 @@
 #include "ED_screen.h"
 #include "ED_clip.h"
 
-#include "BIF_gl.h"
+#include "BIF_glutil.h"
+
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
 
 #include "WM_types.h"
 
@@ -53,52 +56,30 @@
 
 #include "clip_intern.h"    // own include
 
-static void draw_curve_knot(float x, float y, float xscale, float yscale, 
float hsize)
-{
-       static GLuint displist = 0;
-
-       /* initialize round circle shape */
-       if (displist == 0) {
-               GLUquadricObj *qobj;
-
-               displist = glGenLists(1);
-               glNewList(displist, GL_COMPILE);
-
-               qobj = gluNewQuadric();
-               gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
-               gluDisk(qobj, 0,  0.7, 8, 1);
-               gluDeleteQuadric(qobj);
-
-               glEndList();
-       }
-
-       glPushMatrix();
-
-       glTranslatef(x, y, 0.0f);
-       glScalef(1.0f / xscale * hsize, 1.0f / yscale * hsize, 1.0f);
-       glCallList(displist);
-
-       glPopMatrix();
-}
+typedef struct TrackMotionCurveUserData {
+       MovieTrackingTrack *act_track;
+       bool sel;
+       float xscale, yscale, hsize;
+       unsigned int pos;
+} TrackMotionCurveUserData;
 
-static void tracking_segment_point_cb(void *UNUSED(userdata), 
MovieTrackingTrack *UNUSED(track),
+static void tracking_segment_point_cb(void *userdata, MovieTrackingTrack 
*UNUSED(track),
                                       MovieTrackingMarker *UNUSED(marker), int 
UNUSED(coord),
                                       int scene_framenr, float val)
 {
-       glVertex2f(scene_framenr, val);
+       TrackMotionCurveUserData *data = (TrackMotionCurveUserData *) userdata;
+
+       immVertex2f(data->pos, scene_framenr, val);
 }
 
 static void tracking_segment_start_cb(void *userdata, MovieTrackingTrack 
*track, int coord)
 {
-       const float colors[2][3] = {
-           {1.0f, 0.0f, 0.0f},
-           {0.0f, 1.0f, 0.0f},
-       };
-       float col[4];
+       TrackMotionCurveUserData *data = (TrackMotionCurveUserData *) userdata;
+       float col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
 
-       copy_v3_v3(col, colors[coord]);
+       col[coord] = 1.0f;
 
-       if (track == userdata) {
+       if (track == data->act_track) {
                col[3] = 1.0f;
                glLineWidth(2.0f);
        }
@@ -107,22 +88,17 @@ static void tracking_segment_start_cb(void *userdata, 
MovieTrackingTrack *track,
                glLineWidth(1.0f);
        }
 
-       glColor4fv(col);
+       immUniformColor4fv(col);
 
-       glBegin(GL_LINE_STRIP);
+       /* Graph can be composed of smaller segments, if any marker is disabled 
*/
+       immBeginAtMost(GL_LINE_STRIP, track->markersnr);
 }
 
 static void tracking_segment_end_cb(void *UNUSED(userdata), int UNUSED(coord))
 {
-       glEnd();
+       immEnd();
 }
 
-typedef struct TrackMotionCurveUserData {
-       MovieTrackingTrack *act_track;
-       bool sel;
-       float xscale, yscale, hsize;
-} TrackMotionCurveUserData;
-
 static void tracking_segment_knot_cb(void *userdata, MovieTrackingTrack *track,
                                      MovieTrackingMarker *marker, int coord, 
int scene_framenr, float val)
 {
@@ -136,16 +112,25 @@ static void tracking_segment_knot_cb(void *userdata, 
MovieTrackingTrack *track,
        sel = (marker->flag & sel_flag) ? 1 : 0;
 
        if (sel == data->sel) {
-               if (sel)
-                       UI_ThemeColor(TH_HANDLE_VERTEX_SELECT);
-               else
-                       UI_ThemeColor(TH_HANDLE_VERTEX);
+               if (sel) {
+                       immUniformThemeColor(TH_HANDLE_VERTEX_SELECT);
+               }
+               else {
+                       immUniformThemeColor(TH_HANDLE_VERTEX);
+               }
+
+               glPushMatrix();
+               glTranslatef(scene_framenr, val, 0.0f);
+               glScalef(1.0f / data->xscale * data->hsize, 1.0f / data->yscale 
* data->hsize, 1.0f);
+               gpuMatrixUpdate_legacy();
+
+               imm_draw_lined_circle(data->pos, 0, 0, 0.7, 8);
 
-               draw_curve_knot(scene_framenr, val, data->xscale, data->yscale, 
data->hsize);
+               glPopMatrix();
        }
 }
 
-static void draw_tracks_motion_curves(View2D *v2d, SpaceClip *sc)
+static void draw_tracks_motion_curves(View2D *v2d, SpaceClip *sc, unsigned int 
pos)
 {
        MovieClip *clip = ED_space_clip_get_clip(sc);
        MovieTracking *tracking = &clip->tracking;
@@ -162,18 +147,21 @@ static void draw_tracks_motion_curves(View2D *v2d, 
SpaceClip *sc)
        userdata.hsize = UI_GetThemeValuef(TH_HANDLE_VERTEX_SIZE);
        userdata.sel = false;
        userdata.act_track = act_track;
+       userdata.pos = pos;
        UI_view2d_scale_get(v2d, &userdata.xscale, &userdata.yscale);
        clip_graph_tracking_values_iterate(sc,
                                           (sc->flag & SC_SHOW_GRAPH_SEL_ONLY) 
!= 0,
                                           (sc->flag & SC_SHOW_GRAPH_HIDDEN) != 
0,
                                           &userdata, tracking_segment_knot_cb, 
NULL, NULL);
 
+       gpuMatrixUpdate_legacy();
+
        /* draw graph lines */
        glEnable(GL_BLEND);
        clip_graph_tracking_values_iterate(sc,
                                           (sc->flag & SC_SHOW_GRAPH_SEL_ONLY) 
!= 0,
                                           (sc->flag & SC_SHOW_GRAPH_HIDDEN) != 
0,
-                                          act_track, 
tracking_segment_point_cb, tracking_segment_start_cb,
+                                          &userdata, 
tracking_segment_point_cb, tracking_segment_start_cb,
                                           tracking_segment_end_cb);
        glDisable(GL_BLEND);
 
@@ -183,6 +171,8 @@ static void draw_tracks_motion_curves(View2D *v2d, 
SpaceClip *sc)
                                           (sc->flag & SC_SHOW_GRAPH_SEL_ONLY) 
!= 0,
                                           (sc->flag & SC_SHOW_GRAPH_HIDDEN) != 
0,
                                           &userdata, tracking_segment_knot_cb, 
NULL, NULL);
+
+       gpuMatrixUpdate_legacy();
 }
 
 typedef struct TrackErrorCurveUserData {
@@ -195,6 +185,7 @@ typedef struct TrackErrorCurveUserData {
        float projection_matrix[4][4];
        int width, height;
        float aspy;
+       unsigned int pos;
 } TrackErrorCurveUserData;
 
 static void tracking_error_segment_point_cb(void *userdata,
@@ -230,7 +221,7 @@ static void tracking_error_segment_point_cb(void *userdata,
                sub_v2_v2v2(delta, reprojected_position, marker_position);
                reprojection_error = len_v2(delta) * weight;
 
-               glVertex2f(scene_framenr, reprojection_error);
+               immVertex2f(data->pos, scene_framenr, reprojection_error);
        }
 }
 
@@ -249,20 +240,21 @@ static void tracking_error_segment_start_cb(void 
*userdata, MovieTrackingTrack *
                        glLineWidth(1.0f);
                }
 
-               glColor4fv(col);
+               immUniformColor4fv(col);
 
-               glBegin(GL_LINE_STRIP);
+               /* Graph can be composed of smaller segments, if any marker is 
disabled */
+               immBeginAtMost(GL_LINE_STRIP, track->markersnr);
        }
 }
 
 static void tracking_error_segment_end_cb(void *UNUSED(userdata), int coord)
 {
        if (coord == 1) {
-               glEnd();
+               immEnd();
        }
 }
 
-static void draw_tracks_error_curves(SpaceClip *sc)
+static void draw_tracks_error_curves(SpaceClip *sc, unsigned int pos)
 {
        MovieClip *clip = ED_space_clip_get_clip(sc);
        MovieTracking *tracking = &clip->tracking;
@@ -273,6 +265,7 @@ static void draw_tracks_error_curves(SpaceClip *sc)
        data.tracking_object = BKE_tracking_object_get_active(tracking);
        data.active_track = BKE_tracking_track_get_active(tracking);
        data.matrix_initialized = false;
+       data.pos = pos;
        BKE_movieclip_get_size(clip, &sc->user, &data.width, &data.height);
        data.aspy = 1.0f / tracking->camera.pixel_aspect;
 
@@ -289,37 +282,38 @@ static void draw_tracks_error_curves(SpaceClip *sc)
                                           tracking_error_segment_end_cb);
 }
 
-static void draw_frame_curves(SpaceClip *sc)
+static void draw_frame_curves(SpaceClip *sc, unsigned int pos)
 {
        MovieClip *clip = ED_space_clip_get_clip(sc);
        MovieTracking *tracking = &clip->tracking;
        MovieTrackingReconstruction *reconstruction = 
BKE_tracking_get_active_reconstruction(tracking);
        int i, lines = 0, prevfra = 0;
 
-       glColor3f(0.0f, 0.0f, 1.0f);
+       immUniformColor3f(0.0f, 0.0f, 1.0f);
 
        for (i = 0; i < reconstruction->camnr; i++) {
                MovieReconstructedCamera *camera = &reconstruction->cameras[i];
                int framenr;
 
                if (lines && camera->framenr != prevfra + 1) {
-                       glEnd();
+                       immEnd();
                        lines = 0;
                }
 
                if (!lines) {
-                       glBegin(GL_LINE_STRIP);
+                       immBeginAtMost(GL_LINE_STRIP, reconstruction->camnr);
                        lines = 1;
                }
 
                framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, 
camera->framenr);
-               glVertex2f(framenr, camera->error);
+               immVertex2f(pos, framenr, camera->error);
 
                prevfra = camera->framenr;
        }
 
-       if (lines)
-               glEnd();
+       if (lines) {
+               immEnd();
+       }
 }
 
 void clip_draw_graph(SpaceClip *sc, ARegion *ar, Scene *scene)
@@ -334,17 +328,26 @@ void clip_draw_graph(SpaceClip *sc, ARegion *ar, Scene 
*scene)
        UI_view2d_grid_draw(v2d, grid, V2D_GRIDLINES_ALL);
        UI_view2d_grid_free(grid);
 
+       unsigned int pos = add_attrib(immVertexFormat(), "pos", GL_FLOAT, 2, 
KEEP_FLOAT);
+
+       immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
        if (clip) {
-               if (sc->flag & SC_SHOW_GRAPH_TRACKS_MOTION)
-                       draw_tracks_motion_curves(v2d, sc);
+               if (sc->flag & SC_SHOW_GRAPH_TRACKS_MOTION) {
+                       draw_tracks_motion_curves(v2d, sc, pos);
+               }
 
-               if (sc->flag & SC_SHOW_GRAPH_TRACKS_ERROR)
-                       draw_tracks_error_curves(sc);
+               if (sc->flag & SC_SHOW_GRAPH_TRACKS_ERROR) {
+                       draw_tracks_error_curves(sc, pos);
+               }
 
-               if (sc->flag & SC_SHOW_GRAPH_FRAMES)
-                       draw_frame_curves(sc);
+               if (sc->flag & SC_SHOW_GRAPH_FRAMES) {
+                       draw_frame_curves(sc, pos);
+               }
        }
 
+       immUnbindProgram();
+
        /* frame range */
        clip_draw_sfra_efra(v2d, scene);

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

Reply via email to