Commit: b91ebca68e4c45574caa24f790e7701003eebecf
Author: Mike Erwin
Date:   Fri Apr 17 01:16:21 2015 -0400
Branches: GPU_data_request
https://developer.blender.org/rBb91ebca68e4c45574caa24f790e7701003eebecf

add to GPUx state: interpolation (smooth shading)

and remove manual calls to glShadeModel.

TODO: interpolation qualifier per attrib (flat/smooth/noperspective)
instead of here.

This requires GLSL 1.3 (OpenGL 3.0) or EXT_gpu_shader4 so we can’t go
down that path yet.

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

M       source/blender/editors/space_view3d/drawobject.c
M       source/blender/gpu/GPUx_state.h
M       source/blender/gpu/intern/gpux_draw.c
M       source/blender/gpu/intern/gpux_state.c

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

diff --git a/source/blender/editors/space_view3d/drawobject.c 
b/source/blender/editors/space_view3d/drawobject.c
index 60c097b..ae22f1c 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -4482,6 +4482,7 @@ static bool draw_mesh_object_new_new(Scene *scene, 
ARegion *ar, View3D *v3d, Reg
                                int i, t, tri_ct = 0;
                                MFace *faces = dm->getTessFaceArray(dm);
                                dm->gpux_batch->state.common.lighting = true;
+                               dm->gpux_batch->state.common.interpolate = true;
                                dm->gpux_batch->state.polygon.draw_back = false;
 
                                GPUx_specify_attrib(verts, 1, GL_NORMAL_ARRAY, 
GL_SHORT, 3, NORMALIZE_INT_TO_FLOAT);
@@ -4501,17 +4502,12 @@ static bool draw_mesh_object_new_new(Scene *scene, 
ARegion *ar, View3D *v3d, Reg
                                                
GPUx_set_triangle_vertices(elem, t++, face->v4, face->v1, face->v3);
                                }
 
-                               /* TODO: update state tracking to handle all 
these */
-//                             glShadeModel(GL_SMOOTH);
-
                                GPUx_vertex_buffer_prime(verts);
                                GPUx_element_list_prime(elem);
 
                                dm->gpux_batch->prim_type = GL_TRIANGLES;
                                dm->gpux_batch->buff = verts;
                                dm->gpux_batch->elem = elem;
-
-//                             glShadeModel(GL_FLAT); /* restore default */
                        }
                        else if (dt == OB_WIRE) {
                                /* draw wireframe */
diff --git a/source/blender/gpu/GPUx_state.h b/source/blender/gpu/GPUx_state.h
index 84fa995..98bacb0 100644
--- a/source/blender/gpu/GPUx_state.h
+++ b/source/blender/gpu/GPUx_state.h
@@ -13,6 +13,9 @@ typedef struct {
        bool depth_test;
        bool depth_write;
        bool lighting;
+       bool interpolate; /* affects lines & polygons, not points */
+       /* TODO: interpolation qualifier per attrib (flat/smooth/noperspective) 
instead of here */
+       /*       requires GLSL 1.3 (OpenGL 3.0) or EXT_gpu_shader4 */
 } CommonDrawState;
 
 typedef struct {
diff --git a/source/blender/gpu/intern/gpux_draw.c 
b/source/blender/gpu/intern/gpux_draw.c
index c26d146..0d0662a 100644
--- a/source/blender/gpu/intern/gpux_draw.c
+++ b/source/blender/gpu/intern/gpux_draw.c
@@ -181,7 +181,6 @@ void GPUx_draw_batch(const GPUxBatch *batch)
                case GL_TRIANGLES:
                        GPUx_set_polygon_state(&batch->state.polygon);
                        vert_per_prim = 3;
-                       glShadeModel(GL_SMOOTH);
                        break;
                default:
 #ifdef TRUST_NO_ONE
@@ -205,9 +204,6 @@ void GPUx_draw_batch(const GPUxBatch *batch)
        else
                glDrawArrays(batch->prim_type, 0, 
chop_to_multiple(GPUx_vertex_ct(batch->buff), vert_per_prim));
 
-       if (batch->prim_type == GL_TRIANGLES)
-               glShadeModel(GL_FLAT);
-
        GPUx_vertex_buffer_done_using(batch->buff);
 #endif /* REALLY_DRAW */
 }
diff --git a/source/blender/gpu/intern/gpux_state.c 
b/source/blender/gpu/intern/gpux_state.c
index c5cef43..37ded07 100644
--- a/source/blender/gpu/intern/gpux_state.c
+++ b/source/blender/gpu/intern/gpux_state.c
@@ -13,7 +13,8 @@ const DrawState default_state = {
                .blend = false,
                .depth_test = true,
                .depth_write = true,
-               .lighting = false
+               .lighting = false,
+               .interpolate = false
        },
        .point = {
                .smooth = false,
@@ -79,6 +80,14 @@ void GPUx_set_common_state(const CommonDrawState *state)
                        glDisable(GL_LIGHTING);
                current.common.lighting = state->lighting;
        }
+
+       if (state->interpolate != current.common.interpolate) {
+               if (state->interpolate)
+                       glShadeModel(GL_SMOOTH);
+               else
+                       glShadeModel(GL_FLAT);
+               current.common.interpolate = state->interpolate;
+       }
 }
 
 void GPUx_set_point_state(const PointDrawState *state)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to