From 6c95e97e64fa9f4490ade0866412482766da002a Mon Sep 17 00:00:00 2001 From: Mike Erwin Date: Wed, 1 Feb 2017 22:42:50 -0500 Subject: OpenGL: convert clip_dopesheet_draw to new imm mode D2486 by @TCMBoby, part of T49043 --- .../editors/space_clip/clip_dopesheet_draw.c | 97 ++++++++++++---------- 1 file changed, 52 insertions(+), 45 deletions(-) (limited to 'source/blender/editors/space_clip/clip_dopesheet_draw.c') diff --git a/source/blender/editors/space_clip/clip_dopesheet_draw.c b/source/blender/editors/space_clip/clip_dopesheet_draw.c index 4bf4c1e7baa..19007702f92 100644 --- a/source/blender/editors/space_clip/clip_dopesheet_draw.c +++ b/source/blender/editors/space_clip/clip_dopesheet_draw.c @@ -54,6 +54,8 @@ #include "RNA_access.h" +#include "GPU_immediate.h" + #include "clip_intern.h" /* own include */ static void track_channel_color(MovieTrackingTrack *track, float default_color[3], float color[3]) @@ -84,32 +86,9 @@ static void draw_keyframe_shape(float x, float y, float xscale, float yscale, bo static GLuint displist1 = 0; static GLuint displist2 = 0; int hsize = STRIP_HEIGHT_HALF; - - /* initialize 2 display lists for diamond shape - one empty, one filled */ - if (displist1 == 0) { - displist1 = glGenLists(1); - glNewList(displist1, GL_COMPILE); - - glBegin(GL_LINE_LOOP); - glVertex2fv(_unit_diamond_shape[0]); - glVertex2fv(_unit_diamond_shape[1]); - glVertex2fv(_unit_diamond_shape[2]); - glVertex2fv(_unit_diamond_shape[3]); - glEnd(); - glEndList(); - } - if (displist2 == 0) { - displist2 = glGenLists(1); - glNewList(displist2, GL_COMPILE); - - glBegin(GL_QUADS); - glVertex2fv(_unit_diamond_shape[0]); - glVertex2fv(_unit_diamond_shape[1]); - glVertex2fv(_unit_diamond_shape[2]); - glVertex2fv(_unit_diamond_shape[3]); - glEnd(); - glEndList(); - } + + VertexFormat *format = immVertexFormat(); + unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT); glPushMatrix(); @@ -120,16 +99,29 @@ static void draw_keyframe_shape(float x, float y, float xscale, float yscale, bo /* anti-aliased lines for more consistent appearance */ glEnable(GL_LINE_SMOOTH); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + /* interior */ if (sel) - UI_ThemeColorShadeAlpha(TH_STRIP_SELECT, 50, -255 * (1.0f - alpha)); + immUniformThemeColorShadeAlpha(TH_STRIP_SELECT, 50, -255 * (1.0f - alpha)); else - glColor4f(0.91f, 0.91f, 0.91f, alpha); + immUniformColor4f(0.91f, 0.91f, 0.91f, alpha); - glCallList(displist2); + immBegin(GL_QUADS, 4); + immVertex2fv(pos, _unit_diamond_shape[0]); + immVertex2fv(pos, _unit_diamond_shape[1]); + immVertex2fv(pos, _unit_diamond_shape[2]); + immVertex2fv(pos, _unit_diamond_shape[3]); + immEnd(); /* exterior - black frame */ - glColor4f(0.0f, 0.0f, 0.0f, alpha); - glCallList(displist1); + immUniformColor4f(0.0f, 0.0f, 0.0f, alpha); + immBegin(GL_LINE_LOOP, 4); + immVertex2fv(pos, _unit_diamond_shape[0]); + immVertex2fv(pos, _unit_diamond_shape[1]); + immVertex2fv(pos, _unit_diamond_shape[2]); + immVertex2fv(pos, _unit_diamond_shape[3]); + immEnd(); + immUnbindProgram(); glDisable(GL_LINE_SMOOTH); @@ -143,7 +135,11 @@ static void clip_draw_dopesheet_background(ARegion *ar, MovieClip *clip) MovieTracking *tracking = &clip->tracking; MovieTrackingDopesheet *dopesheet = &tracking->dopesheet; MovieTrackingDopesheetCoverageSegment *coverage_segment; + + VertexFormat *format = immVertexFormat(); + unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); for (coverage_segment = dopesheet->coverage_segments.first; coverage_segment; coverage_segment = coverage_segment->next) @@ -153,14 +149,15 @@ static void clip_draw_dopesheet_background(ARegion *ar, MovieClip *clip) int end_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, coverage_segment->end_frame); if (coverage_segment->coverage == TRACKING_COVERAGE_BAD) { - glColor4f(1.0f, 0.0f, 0.0f, 0.07f); + immUniformColor4f(1.0f, 0.0f, 0.0f, 0.07f); } else - glColor4f(1.0f, 1.0f, 0.0f, 0.07f); + immUniformColor4f(1.0f, 1.0f, 0.0f, 0.07f); - glRectf(start_frame, v2d->cur.ymin, end_frame, v2d->cur.ymax); + immRectf(pos, start_frame, v2d->cur.ymin, end_frame, v2d->cur.ymax); } } + immUnbindProgram(); } void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene) @@ -178,6 +175,9 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene) float y, xscale, yscale; float strip[4], selected_strip[4]; float height = (dopesheet->tot_channel * CHANNEL_STEP) + (CHANNEL_HEIGHT); + + VertexFormat *format = immVertexFormat(); + unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT); /* don't use totrect set, as the width stays the same * (NOTE: this is ok here, the configuration is pretty straightforward) @@ -218,10 +218,12 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene) float default_color[4] = {0.8f, 0.93f, 0.8f, 0.3f}; track_channel_color(track, default_color, color); - glColor4fv(color); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + immUniformColor4fv(color); - glRectf(v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF, + immRectf(pos, v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF, v2d->cur.xmax + EXTRA_SCROLL_PAD, (float) y + CHANNEL_HEIGHT_HALF); + immUnbindProgram(); } alpha = (track->flag & TRACK_LOCKED) ? 0.5f : 1.0f; @@ -231,18 +233,21 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene) int start_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, channel->segments[2 * i]); int end_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, channel->segments[2 * i + 1]); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); if (sel) - glColor4fv(selected_strip); + immUniformColor4fv(selected_strip); else - glColor4fv(strip); + immUniformColor4fv(strip); if (start_frame != end_frame) { - glRectf(start_frame, (float) y - STRIP_HEIGHT_HALF, + immRectf(pos, start_frame, (float) y - STRIP_HEIGHT_HALF, end_frame, (float) y + STRIP_HEIGHT_HALF); + immUnbindProgram(); draw_keyframe_shape(start_frame, y, xscale, yscale, sel, alpha); draw_keyframe_shape(end_frame, y, xscale, yscale, sel, alpha); } else { + immUnbindProgram(); draw_keyframe_shape(start_frame, y, xscale, yscale, sel, alpha); } } @@ -288,6 +293,9 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar) int height; float y; PropertyRNA *chan_prop_lock; + + VertexFormat *format = immVertexFormat(); + unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT); if (!clip) return; @@ -326,15 +334,14 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar) bool sel = (track->flag & TRACK_DOPE_SEL) != 0; track_channel_color(track, NULL, color); - glColor3fv(color); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + immUniformColor3fv(color); - glRectf(v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF, + immRectf(pos, v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF, v2d->cur.xmax + EXTRA_SCROLL_PAD, (float) y + CHANNEL_HEIGHT_HALF); + immUnbindProgram(); - if (sel) - UI_ThemeColor(TH_TEXT_HI); - else - UI_ThemeColor(TH_TEXT); + UI_ThemeColor(sel ? TH_TEXT_HI : TH_TEXT); font_height = BLF_height(fontid, channel->name, sizeof(channel->name)); BLF_position(fontid, v2d->cur.xmin + CHANNEL_PAD, -- cgit v1.2.3