[Bf-blender-cvs] [35f1b3e43b3] master: Cleanup: GPU: Wrap GL_UNPACK_ROW_LENGTH in GPU_state

Clément Foucault noreply at git.blender.org
Sat Jul 18 03:08:16 CEST 2020


Commit: 35f1b3e43b37006486b94675466cf4260087e269
Author: Clément Foucault
Date:   Fri Jul 17 18:51:26 2020 +0200
Branches: master
https://developer.blender.org/rB35f1b3e43b37006486b94675466cf4260087e269

Cleanup: GPU: Wrap GL_UNPACK_ROW_LENGTH in GPU_state

Also go back to default value of 0 after usage.

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

M	source/blender/editors/screen/glutil.c
M	source/blender/gpu/GPU_state.h
M	source/blender/gpu/intern/gpu_draw.c
M	source/blender/gpu/intern/gpu_state.c

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

diff --git a/source/blender/editors/screen/glutil.c b/source/blender/editors/screen/glutil.c
index 6b7ea447665..5c3b1944164 100644
--- a/source/blender/editors/screen/glutil.c
+++ b/source/blender/editors/screen/glutil.c
@@ -120,9 +120,6 @@ void immDrawPixelsTexScaled_clipping(IMMDrawPixelsTexState *state,
     type = GL_UNSIGNED_BYTE;
   }
 
-  GLint unpack_row_length;
-  glGetIntegerv(GL_UNPACK_ROW_LENGTH, &unpack_row_length);
-
   eGPUTextureFormat gpu_format = (type == GL_FLOAT) ? GPU_RGBA16F : GPU_RGBA8;
   eGPUDataFormat gpu_data = (type == GL_FLOAT) ? GPU_DATA_FLOAT : GPU_DATA_UNSIGNED_BYTE;
   GPUTexture *texture = GPU_texture_create_nD(
@@ -165,7 +162,7 @@ void immDrawPixelsTexScaled_clipping(IMMDrawPixelsTexState *state,
     immUniformColor4fv((color) ? color : white);
   }
 
-  glPixelStorei(GL_UNPACK_ROW_LENGTH, img_w);
+  GPU_unpack_row_length_set(img_w);
 
   for (subpart_y = 0; subpart_y < nsubparts_y; subpart_y++) {
     for (subpart_x = 0; subpart_x < nsubparts_x; subpart_x++) {
@@ -259,7 +256,8 @@ void immDrawPixelsTexScaled_clipping(IMMDrawPixelsTexState *state,
   GPU_texture_unbind(texture);
   GPU_texture_free(texture);
 
-  glPixelStorei(GL_UNPACK_ROW_LENGTH, unpack_row_length);
+  /* Restore default. */
+  GPU_unpack_row_length_set(0);
 }
 
 void immDrawPixelsTexScaled(IMMDrawPixelsTexState *state,
diff --git a/source/blender/gpu/GPU_state.h b/source/blender/gpu/GPU_state.h
index bdff3e66217..36a82e31521 100644
--- a/source/blender/gpu/GPU_state.h
+++ b/source/blender/gpu/GPU_state.h
@@ -69,6 +69,7 @@ void GPU_color_mask(bool r, bool g, bool b, bool a);
 void GPU_depth_mask(bool depth);
 bool GPU_depth_mask_get(void);
 void GPU_stencil_mask(uint stencil);
+void GPU_unpack_row_length_set(uint len);
 
 void GPU_flush(void);
 void GPU_finish(void);
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index 9fdb98cfbf6..e5f49555265 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -683,9 +683,7 @@ static void gpu_texture_update_unscaled(uchar *rect,
 {
   /* Partial update without scaling. Stride and offset are used to copy only a
    * subset of a possible larger buffer than what we are updating. */
-  GLint row_length;
-  glGetIntegerv(GL_UNPACK_ROW_LENGTH, &row_length);
-  glPixelStorei(GL_UNPACK_ROW_LENGTH, tex_stride);
+  GPU_unpack_row_length_set(tex_stride);
 
   if (layer >= 0) {
     if (rect_float == NULL) {
@@ -724,7 +722,8 @@ static void gpu_texture_update_unscaled(uchar *rect,
     }
   }
 
-  glPixelStorei(GL_UNPACK_ROW_LENGTH, row_length);
+  /* Restore default. */
+  GPU_unpack_row_length_set(0);
 }
 
 static void gpu_texture_update_from_ibuf(
diff --git a/source/blender/gpu/intern/gpu_state.c b/source/blender/gpu/intern/gpu_state.c
index b52504eb492..8dc246904df 100644
--- a/source/blender/gpu/intern/gpu_state.c
+++ b/source/blender/gpu/intern/gpu_state.c
@@ -181,6 +181,11 @@ void GPU_finish(void)
   glFinish();
 }
 
+void GPU_unpack_row_length_set(uint len)
+{
+  glPixelStorei(GL_UNPACK_ROW_LENGTH, len);
+}
+
 void GPU_logic_op_xor_set(bool enable)
 {
   if (enable) {
@@ -413,6 +418,7 @@ void GPU_state_init(void)
   glDisable(GL_CULL_FACE);
 
   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+  glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
 
   /* Is default but better be explicit. */
   glEnable(GL_MULTISAMPLE);



More information about the Bf-blender-cvs mailing list