Commit: c5072941c3902bd91824a7d8756933dbf97f78cf
Author: Mike Erwin
Date:   Tue Oct 25 01:02:41 2016 -0400
Branches: blender2.8
https://developer.blender.org/rBc5072941c3902bd91824a7d8756933dbf97f78cf

OpenGL: clean up glActiveTexture usage

Removed some of my earlier glActiveTexture calls. After reviewing the
code I now trust that GL_TEXTURE0 is active by default. Fewer GL calls,
same results.

Fixed some misuse of glActiveTexture & glUniformi, mostly my fault.
Caught by --debug-gpu on Windows. Don't know why this appeared to be
working previously!

Plus some easy cleanup nearby.

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

M       source/blender/editors/space_view3d/drawobject.c
M       source/blender/gpu/intern/gpu_shader.c
M       source/blender/gpu/intern/gpu_texture.c
M       source/blender/gpu/intern/gpu_viewport.c
M       source/blender/windowmanager/intern/wm_stereo.c

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

diff --git a/source/blender/editors/space_view3d/drawobject.c 
b/source/blender/editors/space_view3d/drawobject.c
index 7426b20..5d7282c 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -652,12 +652,10 @@ static void draw_empty_image(Object *ob, const short 
dflag, const unsigned char
        const float ob_alpha = ob->col[3];
        float width, height;
 
-       const int texUnit = GL_TEXTURE0;
        int bindcode = 0;
 
        if (ima) {
                if (ob_alpha > 0.0f) {
-                       glActiveTexture(texUnit);
                        bindcode = GPU_verify_image(ima, ob->iuser, 
GL_TEXTURE_2D, 0, false, false, false);
                        /* don't bother drawing the image if alpha = 0 */
                }
@@ -694,7 +692,7 @@ static void draw_empty_image(Object *ob, const short dflag, 
const unsigned char
                unsigned texCoord = add_attrib(format, "texCoord", GL_FLOAT, 2, 
KEEP_FLOAT);
                immBindBuiltinProgram(GPU_SHADER_3D_IMAGE_MODULATE_ALPHA);
                immUniform1f("alpha", ob_alpha);
-               immUniform1i("image", texUnit);
+               immUniform1i("image", 0); /* default GL_TEXTURE0 unit */
 
                immBegin(GL_TRIANGLE_FAN, 4);
                immAttrib2f(texCoord, 0.0f, 0.0f);
diff --git a/source/blender/gpu/intern/gpu_shader.c 
b/source/blender/gpu/intern/gpu_shader.c
index 9d1c3b0..21fd538 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -578,7 +578,6 @@ void GPU_shader_geometry_stage_primitive_io(GPUShader 
*shader, int input, int ou
 
 void GPU_shader_uniform_texture(GPUShader *UNUSED(shader), int location, 
GPUTexture *tex)
 {
-       GLenum arbnumber;
        int number = GPU_texture_bound_number(tex);
        int bindcode = GPU_texture_opengl_bindcode(tex);
        int target = GPU_texture_target(tex);
@@ -594,16 +593,18 @@ void GPU_shader_uniform_texture(GPUShader 
*UNUSED(shader), int location, GPUText
        if (location == -1)
                return;
 
-       arbnumber = (GLenum)((GLuint)GL_TEXTURE0 + number);
+       if (number != 0)
+               glActiveTexture(GL_TEXTURE0 + number);
 
-       if (number != 0) glActiveTexture(arbnumber);
        if (bindcode != 0)
                glBindTexture(target, bindcode);
        else
                GPU_invalid_tex_bind(target);
+
        glUniform1i(location, number);
-       glEnable(target);
-       if (number != 0) glActiveTexture(GL_TEXTURE0);
+
+       if (number != 0)
+               glActiveTexture(GL_TEXTURE0);
 }
 
 int GPU_shader_get_attribute(GPUShader *shader, const char *name)
diff --git a/source/blender/gpu/intern/gpu_texture.c 
b/source/blender/gpu/intern/gpu_texture.c
index c6cf4de..6956a81 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -616,15 +616,18 @@ void GPU_texture_bind(GPUTexture *tex, int number)
        if (number < 0)
                return;
 
-       GLenum arbnumber = (GLenum)((GLuint)GL_TEXTURE0 + number);
-       if (number != 0) glActiveTexture(arbnumber);
-       if (tex->bindcode != 0) {
+       if (number != 0)
+               glActiveTexture(GL_TEXTURE0 + number);
+
+       if (tex->bindcode != 0)
                glBindTexture(tex->target_base, tex->bindcode);
-       }
        else
                GPU_invalid_tex_bind(tex->target_base);
-       glEnable(tex->target_base);
-       if (number != 0) glActiveTexture(GL_TEXTURE0);
+
+       glEnable(tex->target_base); /* TODO: remove this line once we're using 
GLSL everywhere */
+
+       if (number != 0)
+               glActiveTexture(GL_TEXTURE0);
 
        tex->number = number;
 }
@@ -639,11 +642,14 @@ void GPU_texture_unbind(GPUTexture *tex)
        if (tex->number == -1)
                return;
 
-       GLenum arbnumber = (GLenum)((GLuint)GL_TEXTURE0 + tex->number);
-       if (tex->number != 0) glActiveTexture(arbnumber);
+       if (tex->number != 0)
+               glActiveTexture(GL_TEXTURE0 + tex->number);
+
        glBindTexture(tex->target_base, 0);
-       glDisable(tex->target_base);
-       if (tex->number != 0) glActiveTexture(GL_TEXTURE0);
+       glDisable(tex->target_base); /* TODO: remove this line */
+
+       if (tex->number != 0)
+               glActiveTexture(GL_TEXTURE0);
 
        tex->number = -1;
 }
@@ -663,25 +669,19 @@ void GPU_texture_filter_mode(GPUTexture *tex, bool 
compare, bool use_filter)
        if (tex->number == -1)
                return;
 
-       GLenum arbnumber = (GLenum)((GLuint)GL_TEXTURE0 + tex->number);
-       if (tex->number != 0) glActiveTexture(arbnumber);
+       if (tex->number != 0)
+               glActiveTexture(GL_TEXTURE0 + tex->number);
 
        if (tex->depth) {
-               if (compare)
-                       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, 
GL_COMPARE_R_TO_TEXTURE);
-               else
-                       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, 
GL_NONE);
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, compare 
? GL_COMPARE_R_TO_TEXTURE : GL_NONE);
        }
 
-       if (use_filter) {
-               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 
GL_LINEAR);
-               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, 
GL_LINEAR);
-       }
-       else {
-               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 
GL_NEAREST);
-               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, 
GL_NEAREST);
-       }
-       if (tex->number != 0) glActiveTexture(GL_TEXTURE0);
+       GLenum filter = use_filter ? GL_LINEAR : GL_NEAREST;
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
+
+       if (tex->number != 0)
+               glActiveTexture(GL_TEXTURE0);
 }
 
 void GPU_texture_free(GPUTexture *tex)
diff --git a/source/blender/gpu/intern/gpu_viewport.c 
b/source/blender/gpu/intern/gpu_viewport.c
index 6cad050..ea54f3c 100644
--- a/source/blender/gpu/intern/gpu_viewport.c
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@ -89,9 +89,6 @@ void GPU_viewport_debug_depth_draw(GPUViewport *viewport, 
const float znear, con
        const float w = (float)GPU_texture_width(viewport->debug_depth);
        const float h = (float)GPU_texture_height(viewport->debug_depth);
 
-       const int activeTex = GL_TEXTURE0;
-       glActiveTexture(activeTex);
-
        VertexFormat *format = immVertexFormat();
        unsigned texcoord = add_attrib(format, "texCoord", GL_FLOAT, 2, 
KEEP_FLOAT);
        unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT);
@@ -102,7 +99,7 @@ void GPU_viewport_debug_depth_draw(GPUViewport *viewport, 
const float znear, con
 
        immUniform1f("znear", znear);
        immUniform1f("zfar", zfar);
-       immUniform1i("image", activeTex);
+       immUniform1i("image", 0); /* default GL_TEXTURE0 unit */
 
        immBegin(GL_QUADS, 4);
 
diff --git a/source/blender/windowmanager/intern/wm_stereo.c 
b/source/blender/windowmanager/intern/wm_stereo.c
index 3dd6c34..f625423 100644
--- a/source/blender/windowmanager/intern/wm_stereo.c
+++ b/source/blender/windowmanager/intern/wm_stereo.c
@@ -173,9 +173,6 @@ static void wm_method_draw_stereo3d_sidebyside(wmWindow 
*win)
        int soffx;
        bool cross_eyed = (win->stereo3d_format->flag & 
S3D_SIDEBYSIDE_CROSSEYED) != 0;
 
-       const int activeTex = GL_TEXTURE0;
-       glActiveTexture(activeTex);
-
        VertexFormat *format = immVertexFormat();
        unsigned texcoord = add_attrib(format, "texCoord", GL_FLOAT, 2, 
KEEP_FLOAT);
        unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT);
@@ -217,7 +214,7 @@ static void wm_method_draw_stereo3d_sidebyside(wmWindow 
*win)
                glBindTexture(triple->target, triple->bind);
 
                immUniform1f("alpha", 1.0f);
-               immUniform1i("image", activeTex);
+               immUniform1i("image", 0); /* default GL_TEXTURE0 unit */
 
                immBegin(GL_QUADS, 4);
 
@@ -249,9 +246,6 @@ static void wm_method_draw_stereo3d_topbottom(wmWindow *win)
        int view;
        int soffy;
 
-       const int activeTex = GL_TEXTURE0;
-       glActiveTexture(activeTex);
-
        VertexFormat *format = immVertexFormat();
        unsigned texcoord = add_attrib(format, "texCoord", GL_FLOAT, 2, 
KEEP_FLOAT);
        unsigned pos = add_attrib(format, "pos", GL_FLOAT, 2, KEEP_FLOAT);
@@ -290,7 +284,7 @@ static void wm_method_draw_stereo3d_topbottom(wmWindow *win)
                glBindTexture(triple->target, triple->bind);
 
                immUniform1f("alpha", 1.0f);
-               immUniform1i("image", activeTex);
+               immUniform1i("image", 0); /* default GL_TEXTURE0 unit */
 
                immBegin(GL_QUADS, 4);
 
@@ -339,9 +333,9 @@ void wm_method_draw_stereo3d(const bContext *UNUSED(C), 
wmWindow *win)
 
 static bool wm_stereo3d_quadbuffer_supported(void)
 {
-       int gl_stereo = 0;
-       glGetBooleanv(GL_STEREO, (GLboolean *)&gl_stereo);
-       return gl_stereo != 0;
+       GLboolean stereo = GL_FALSE;
+       glGetBooleanv(GL_STEREO, &stereo);
+       return stereo == GL_TRUE;
 }
 
 static bool wm_stereo3d_is_fullscreen_required(eStereoDisplayMode 
stereo_display)

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

Reply via email to