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:
authorClément Foucault <foucault.clem@gmail.com>2020-09-08 01:30:38 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-09-08 05:15:50 +0300
commit28ea459a61f65de03724db8709271d41f6bf135b (patch)
treeb01a390416b317976227b5b72f25e416b90d445b
parent77f60a09310dad0cb41e2e2ec4a71f9bdb762e67 (diff)
GPUState: Encapsulate glPixelStorei inside the GLStateManager
Part of the Vulkan task T68990 Isolate the last remaining gl functions.
-rw-r--r--source/blender/gpu/GPU_state.h1
-rw-r--r--source/blender/gpu/GPU_texture.h1
-rw-r--r--source/blender/gpu/intern/gpu_state.cc5
-rw-r--r--source/blender/gpu/intern/gpu_state_private.hh2
-rw-r--r--source/blender/gpu/intern/gpu_texture.cc7
-rw-r--r--source/blender/gpu/opengl/gl_state.cc5
-rw-r--r--source/blender/gpu/opengl/gl_state.hh2
7 files changed, 17 insertions, 6 deletions
diff --git a/source/blender/gpu/GPU_state.h b/source/blender/gpu/GPU_state.h
index 869e8c32861..5e872001267 100644
--- a/source/blender/gpu/GPU_state.h
+++ b/source/blender/gpu/GPU_state.h
@@ -128,7 +128,6 @@ void GPU_write_mask(eGPUWriteMask mask);
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_unpack_row_length_set(uint len);
void GPU_shadow_offset(bool enable);
void GPU_clip_distances(int distances_enabled);
bool GPU_mipmap_enabled(void);
diff --git a/source/blender/gpu/GPU_texture.h b/source/blender/gpu/GPU_texture.h
index bae5bfbaae8..b31cb42d38d 100644
--- a/source/blender/gpu/GPU_texture.h
+++ b/source/blender/gpu/GPU_texture.h
@@ -228,6 +228,7 @@ void GPU_texture_update_sub(GPUTexture *tex,
int width,
int height,
int depth);
+void GPU_unpack_row_length_set(uint len);
void *GPU_texture_read(GPUTexture *tex, eGPUDataFormat data_format, int miplvl);
void GPU_texture_clear(GPUTexture *tex, eGPUDataFormat data_format, const void *data);
diff --git a/source/blender/gpu/intern/gpu_state.cc b/source/blender/gpu/intern/gpu_state.cc
index a88dc1beb00..68f0c290bc6 100644
--- a/source/blender/gpu/intern/gpu_state.cc
+++ b/source/blender/gpu/intern/gpu_state.cc
@@ -303,11 +303,6 @@ void GPU_finish(void)
GPU_context_active_get()->finish();
}
-void GPU_unpack_row_length_set(uint len)
-{
- glPixelStorei(GL_UNPACK_ROW_LENGTH, len);
-}
-
/** \} */
/* -------------------------------------------------------------------- */
diff --git a/source/blender/gpu/intern/gpu_state_private.hh b/source/blender/gpu/intern/gpu_state_private.hh
index 6ce240df108..9fee45e7bd4 100644
--- a/source/blender/gpu/intern/gpu_state_private.hh
+++ b/source/blender/gpu/intern/gpu_state_private.hh
@@ -166,6 +166,8 @@ class GPUStateManager {
virtual void texture_bind(Texture *tex, eGPUSamplerState sampler, int unit) = 0;
virtual void texture_unbind(Texture *tex) = 0;
virtual void texture_unbind_all(void) = 0;
+
+ virtual void texture_unpack_row_length_set(uint len) = 0;
};
} // namespace gpu
diff --git a/source/blender/gpu/intern/gpu_texture.cc b/source/blender/gpu/intern/gpu_texture.cc
index 0aa1a6553f9..95f922173b5 100644
--- a/source/blender/gpu/intern/gpu_texture.cc
+++ b/source/blender/gpu/intern/gpu_texture.cc
@@ -380,6 +380,13 @@ void GPU_texture_update(GPUTexture *tex, eGPUDataFormat data_format, const void
reinterpret_cast<Texture *>(tex)->update(data_format, data);
}
+/* Makes data interpretation aware of the source layout.
+ * Skipping pixels correctly when changing rows when doing partial update.*/
+void GPU_unpack_row_length_set(uint len)
+{
+ GPU_context_active_get()->state_manager->texture_unpack_row_length_set(len);
+}
+
void GPU_invalid_tex_init(void)
{
/* TODO remove */
diff --git a/source/blender/gpu/opengl/gl_state.cc b/source/blender/gpu/opengl/gl_state.cc
index b43b01aed4f..6dcb56288e8 100644
--- a/source/blender/gpu/opengl/gl_state.cc
+++ b/source/blender/gpu/opengl/gl_state.cc
@@ -520,6 +520,11 @@ void GLStateManager::texture_bind_apply(void)
}
}
+void GLStateManager::texture_unpack_row_length_set(uint len)
+{
+ glPixelStorei(GL_UNPACK_ROW_LENGTH, len);
+}
+
uint64_t GLStateManager::bound_texture_slots(void)
{
uint64_t bound_slots = 0;
diff --git a/source/blender/gpu/opengl/gl_state.hh b/source/blender/gpu/opengl/gl_state.hh
index d5622b4ab89..db9b9721ad5 100644
--- a/source/blender/gpu/opengl/gl_state.hh
+++ b/source/blender/gpu/opengl/gl_state.hh
@@ -74,6 +74,8 @@ class GLStateManager : public GPUStateManager {
void texture_unbind(Texture *tex) override;
void texture_unbind_all(void) override;
+ void texture_unpack_row_length_set(uint len) override;
+
uint64_t bound_texture_slots(void);
private: