Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Erwin <significant.bit@gmail.com>2016-10-25 08:02:41 +0300
committerMike Erwin <significant.bit@gmail.com>2016-10-25 08:02:41 +0300
commitc5072941c3902bd91824a7d8756933dbf97f78cf (patch)
tree87491f54e59c99616b863041e7df5f71c2fe4bcf
parent4d11b2fb9172789cd0171712ae88e6aa98eb3743 (diff)
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.
-rw-r--r--source/blender/editors/space_view3d/drawobject.c4
-rw-r--r--source/blender/gpu/intern/gpu_shader.c11
-rw-r--r--source/blender/gpu/intern/gpu_texture.c50
-rw-r--r--source/blender/gpu/intern/gpu_viewport.c5
-rw-r--r--source/blender/windowmanager/intern/wm_stereo.c16
5 files changed, 38 insertions, 48 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 7426b20fe03..5d7282ce369 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 9d1c3b007c9..21fd5385f79 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 c6cf4dec22e..6956a815ac5 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 6cad0506cf4..ea54f3cc57c 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 3dd6c34bc98..f625423caa8 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)