Commit: 7028a11db9ec3d29282739f7ad9a0343711ebc24
Author: Brecht Van Lommel
Date:   Tue Feb 13 19:15:34 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB7028a11db9ec3d29282739f7ad9a0343711ebc24

GPU: don't use multisample for entire window, only for offscreen 3D viewport.

Now that the new 3D viewport draws to a multisample offscreen buffer, there is
no good reason anymore to create an entire multisample window and pay the
performance/memory cost for other regions that don't need it.

GL_MULTISAMPLE now only gets enabled for offscreen buffers, so we don't need
to check for it throughout the UI code anymore.

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

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

M       source/blender/blenloader/intern/readfile.c
M       source/blender/editors/interface/interface.c
M       source/blender/editors/interface/interface_region_tooltip.c
M       source/blender/editors/space_view3d/view3d_draw_legacy.c
M       source/blender/gpu/intern/gpu_draw.c
M       source/blender/makesdna/DNA_windowmanager_types.h
M       source/blender/windowmanager/intern/wm_files.c
M       source/blender/windowmanager/intern/wm_window.c
M       source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c

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

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index c70c4830971..b75a2de935a 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6515,7 +6515,6 @@ static void direct_link_windowmanager(FileData *fd, 
wmWindowManager *wm)
                win->modalcursor  = 0;
                win->grabcursor   = 0;
                win->addmousemove = true;
-               win->multisamples = 0;
                win->stereo3d_format = newdataadr(fd, win->stereo3d_format);
 
                /* multiview always fallback to anaglyph at file opening
diff --git a/source/blender/editors/interface/interface.c 
b/source/blender/editors/interface/interface.c
index 9e6d9f23442..6e86c56fd62 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -1393,7 +1393,6 @@ void UI_block_draw(const bContext *C, uiBlock *block)
        ARegion *ar;
        uiBut *but;
        rcti rect;
-       int multisample_enabled;
        
        /* get menu region or area region */
        ar = CTX_wm_menu(C);
@@ -1403,11 +1402,6 @@ void UI_block_draw(const bContext *C, uiBlock *block)
        if (!block->endblock)
                UI_block_end(C, block);
 
-       /* disable AA, makes widgets too blurry */
-       multisample_enabled = glIsEnabled(GL_MULTISAMPLE);
-       if (multisample_enabled)
-               glDisable(GL_MULTISAMPLE);
-
        /* we set this only once */
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        
@@ -1451,9 +1445,6 @@ void UI_block_draw(const bContext *C, uiBlock *block)
        gpuPopProjectionMatrix();
        gpuPopMatrix();
 
-       if (multisample_enabled)
-               glEnable(GL_MULTISAMPLE);
-       
        ui_draw_links(block);
 }
 
diff --git a/source/blender/editors/interface/interface_region_tooltip.c 
b/source/blender/editors/interface/interface_region_tooltip.c
index 07fbefa42e1..449e783b03e 100644
--- a/source/blender/editors/interface/interface_region_tooltip.c
+++ b/source/blender/editors/interface/interface_region_tooltip.c
@@ -175,12 +175,7 @@ static void ui_tooltip_region_draw_cb(const bContext 
*UNUSED(C), ARegion *ar)
 
        float background_color[3];
        float tone_bg;
-       int i, multisample_enabled;
-
-       /* disable AA, makes widgets too blurry */
-       multisample_enabled = glIsEnabled(GL_MULTISAMPLE);
-       if (multisample_enabled)
-               glDisable(GL_MULTISAMPLE);
+       int i;
 
        wmOrtho2_region_pixelspace(ar);
 
@@ -285,9 +280,6 @@ static void ui_tooltip_region_draw_cb(const bContext 
*UNUSED(C), ARegion *ar)
 
        BLF_disable(data->fstyle.uifont_id, BLF_WORD_WRAP);
        BLF_disable(blf_mono_font, BLF_WORD_WRAP);
-
-       if (multisample_enabled)
-               glEnable(GL_MULTISAMPLE);
 }
 
 static void ui_tooltip_region_free_cb(ARegion *ar)
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c 
b/source/blender/editors/space_view3d/view3d_draw_legacy.c
index 1c6916d3820..5c3a76aa73b 100644
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@ -213,11 +213,10 @@ static void draw_view_icon(RegionView3D *rv3d, rcti *rect)
 
 static void backdrawview3d(
         const struct EvaluationContext *eval_ctx, Scene *scene, ViewLayer 
*view_layer,
-        wmWindow *win, ARegion *ar, View3D *v3d)
+        ARegion *ar, View3D *v3d)
 {
        RegionView3D *rv3d = ar->regiondata;
        struct Base *base = view_layer->basact;
-       int multisample_enabled;
 
        BLI_assert(ar->regiontype == RGN_TYPE_WINDOW);
 
@@ -264,14 +263,13 @@ static void backdrawview3d(
        /* dithering and AA break color coding, so disable */
        glDisable(GL_DITHER);
 
-       multisample_enabled = glIsEnabled(GL_MULTISAMPLE);
-       if (multisample_enabled)
-               glDisable(GL_MULTISAMPLE);
-
-       if (win->multisamples != USER_MULTISAMPLE_NONE) {
+       if (false) {
                /* for multisample we use an offscreen FBO. multisample drawing 
can fail
                 * with color coded selection drawing, and reading back depths 
from such
-                * a buffer can also cause a few seconds freeze on OS X / 
NVidia. */
+                * a buffer can also cause a few seconds freeze on OS X / 
NVidia.
+                *
+                * NOTE: code is no longer used now, but offscreen drawing is 
likely
+                * what we will always want to do for the new viewport. */
                int w = BLI_rcti_size_x(&ar->winrct);
                int h = BLI_rcti_size_y(&ar->winrct);
                char error[256];
@@ -327,8 +325,6 @@ static void backdrawview3d(
        v3d->zbuf = false;
        glDisable(GL_DEPTH_TEST);
        glEnable(GL_DITHER);
-       if (multisample_enabled)
-               glEnable(GL_MULTISAMPLE);
 
        if (rv3d->rflag & RV3D_CLIPPING)
                ED_view3d_clipping_disable();
@@ -358,7 +354,7 @@ static void view3d_opengl_read_Z_pixels(ARegion *ar, int x, 
int y, int w, int h,
 void ED_view3d_backbuf_validate(const struct EvaluationContext *eval_ctx, 
ViewContext *vc)
 {
        if (vc->v3d->flag & V3D_INVALID_BACKBUF) {
-               backdrawview3d(eval_ctx, vc->scene, vc->view_layer, vc->win, 
vc->ar, vc->v3d);
+               backdrawview3d(eval_ctx, vc->scene, vc->view_layer, vc->ar, 
vc->v3d);
        }
 }
 
@@ -2007,11 +2003,6 @@ static void view3d_main_region_draw_objects(
                do_compositing = 
GPU_fx_compositor_initialize_passes(rv3d->compositor, &ar->winrct, 
&ar->drawrct, &fx_settings);
        }
        
-       /* enables anti-aliasing for 3D view drawing */
-       if (win->multisamples != USER_MULTISAMPLE_NONE) {
-               glEnable(GL_MULTISAMPLE);
-       }
-
        /* main drawing call */
        view3d_draw_objects(C, &eval_ctx, scene, v3d, ar, grid_unit, true, 
false, do_compositing ? rv3d->compositor : NULL);
 
@@ -2020,11 +2011,6 @@ static void view3d_main_region_draw_objects(
                GPU_fx_do_composite_pass(rv3d->compositor, rv3d->winmat, 
rv3d->is_persp, scene, NULL);
        }
 
-       /* Disable back anti-aliasing */
-       if (win->multisamples != USER_MULTISAMPLE_NONE) {
-               glDisable(GL_MULTISAMPLE);
-       }
-
        if (v3d->lay_used != lay_used) { /* happens when loading old files or 
loading with UI load */
                /* find header and force tag redraw */
                ScrArea *sa = CTX_wm_area(C);
diff --git a/source/blender/gpu/intern/gpu_draw.c 
b/source/blender/gpu/intern/gpu_draw.c
index fae181138ce..6440e6ebfe3 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -2095,7 +2095,7 @@ int GPU_scene_object_lights(ViewLayer *view_layer, float 
viewmat[4][4], int orth
        return count;
 }
 
-static void gpu_multisample(bool enable)
+static void gpu_disable_multisample()
 {
 #ifdef __linux__
        /* changing multisample from the default (enabled) causes problems on 
some
@@ -2111,16 +2111,10 @@ static void gpu_multisample(bool enable)
        }
 
        if (toggle_ok) {
-               if (enable)
-                       glEnable(GL_MULTISAMPLE);
-               else
-                       glDisable(GL_MULTISAMPLE);
+               glDisable(GL_MULTISAMPLE);
        }
 #else
-       if (enable)
-               glEnable(GL_MULTISAMPLE);
-       else
-               glDisable(GL_MULTISAMPLE);
+       glDisable(GL_MULTISAMPLE);
 #endif
 }
 
@@ -2152,7 +2146,7 @@ void GPU_state_init(void)
        glCullFace(GL_BACK);
        glDisable(GL_CULL_FACE);
 
-       gpu_multisample(false);
+       gpu_disable_multisample();
 }
 
 void GPU_enable_program_point_size(void)
diff --git a/source/blender/makesdna/DNA_windowmanager_types.h 
b/source/blender/makesdna/DNA_windowmanager_types.h
index 698d7dfd621..34f58b23a9c 100644
--- a/source/blender/makesdna/DNA_windowmanager_types.h
+++ b/source/blender/makesdna/DNA_windowmanager_types.h
@@ -197,8 +197,7 @@ typedef struct wmWindow {
        short modalcursor;  /* the current modal cursor */
        short grabcursor;           /* cursor grab mode */
        short addmousemove; /* internal: tag this for extra mousemove event, 
makes cursors/buttons active on UI switching */
-       short multisamples; /* amount of samples for OpenGL FSA the ghost 
window was created with, if zero no FSA */
-       short pad[3];
+       short pad[4];
 
        int winid;                  /* winid also in screens, is for retrieving 
this window after read */
 
diff --git a/source/blender/windowmanager/intern/wm_files.c 
b/source/blender/windowmanager/intern/wm_files.c
index 6a86644da17..0056ef06a29 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -182,7 +182,6 @@ static void wm_window_match_init(bContext *C, ListBase 
*wmlist)
 static void wm_window_substitute_old(wmWindowManager *wm, wmWindow *oldwin, 
wmWindow *win)
 {
        win->ghostwin = oldwin->ghostwin;
-       win->multisamples = oldwin->multisamples;
        win->active = oldwin->active;
        if (win->active)
                wm->winactive = win;
@@ -191,7 +190,6 @@ static void wm_window_substitute_old(wmWindowManager *wm, 
wmWindow *oldwin, wmWi
                GHOST_SetWindowUserData(win->ghostwin, win);    /* pointer back 
*/
 
        oldwin->ghostwin = NULL;
-       oldwin->multisamples = 0;
 
        win->eventstate = oldwin->eventstate;
        oldwin->eventstate = NULL;
diff --git a/source/blender/windowmanager/intern/wm_window.c 
b/source/blender/windowmanager/intern/wm_window.c
index 519e0500b73..0c2ac975ddd 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -175,7 +175,6 @@ static void wm_ghostwindow_destroy(wmWindow *win)
        if (win->ghostwin) {
                GHOST_DisposeWindow(g_system, win->ghostwin);
                win->ghostwin = NULL;
-               win->multisamples = 0;
        }
 }
 
@@ -461,16 +460,8 @@ static void wm_window_ghostwindow_add(wmWindowManager *wm, 
const char *title, wm
 {
        GHOST_WindowHandle ghostwin;
        GHOST_GLSettings glSettings = {0};
-       static int multisamples = -1;
        int scr_w, scr_h, posy;
        
-       /* force setting multisamples only once, it requires restart - and you 
cannot 
-        * mix it, either all windows have it, or none (tested in OSX opengl) */
-       if (multisamples == -1)
-               multisamples = U.ogl_multisamples;
-
-       glSettings.numOfAASamples = multisamples;
-
        /* a new window is created when pageflip mode is required for a window 
*/
        if (win->stereo3d_format->display_mode == S3D_DISPLAY_PAGEFLIP)
                glSettings.flags |= GHOST_glStereoVisual;
@@ -508,9 +499,6 @@ static void wm_window_ghostwindow_add(wmWindowManager *wm, 
const char *title, wm
                if (win->eventstate == NULL)
                        win->eventstate = MEM_callocN(sizeof(wmEvent), "window 
event state");
 
-               /* store multisamples window was created with, in case user 
prefs change */
-               win->multisamples = multisamples;
-               
                /* store actual window size in blender window */
                bounds = GHOST_GetClientBounds(win->ghostwin);
 
diff --git 
a/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c 
b/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to