diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2021-05-18 16:01:29 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2021-05-18 16:01:29 +0300 |
commit | 2b660e825b46131789d67a730773c8d56be4c229 (patch) | |
tree | da39ac5ce3e9ad7081054ff1e567d49a97beeb67 /source/blender/python/gpu/gpu_py_texture.c | |
parent | ea7b00c64fcd3bcff4a4d1455e0ef334bdd6a6ec (diff) |
Fix T88365: GPUTexture.read returning a buffer with wrong size
The pixel components were not being considered.
Diffstat (limited to 'source/blender/python/gpu/gpu_py_texture.c')
-rw-r--r-- | source/blender/python/gpu/gpu_py_texture.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/source/blender/python/gpu/gpu_py_texture.c b/source/blender/python/gpu/gpu_py_texture.c index 4df61d35d4c..2181c09b537 100644 --- a/source/blender/python/gpu/gpu_py_texture.c +++ b/source/blender/python/gpu/gpu_py_texture.c @@ -349,11 +349,12 @@ PyDoc_STRVAR(pygpu_texture_read_doc, static PyObject *pygpu_texture_read(BPyGPUTexture *self) { BPYGPU_TEXTURE_CHECK_OBJ(self); + eGPUTextureFormat tex_format = GPU_texture_format(self->tex); /* #GPU_texture_read is restricted in combining 'data_format' with 'tex_format'. * So choose data_format here. */ eGPUDataFormat best_data_format; - switch (GPU_texture_format(self->tex)) { + switch (tex_format) { case GPU_DEPTH_COMPONENT24: case GPU_DEPTH_COMPONENT16: case GPU_DEPTH_COMPONENT32F: @@ -389,8 +390,12 @@ static PyObject *pygpu_texture_read(BPyGPUTexture *self) } void *buf = GPU_texture_read(self->tex, best_data_format, 0); - const Py_ssize_t shape[2] = {GPU_texture_height(self->tex), GPU_texture_width(self->tex)}; - return (PyObject *)BPyGPU_Buffer_CreatePyObject(best_data_format, shape, ARRAY_SIZE(shape), buf); + const Py_ssize_t shape[3] = {GPU_texture_height(self->tex), + GPU_texture_width(self->tex), + GPU_texture_component_len(tex_format)}; + + int shape_len = (shape[2] == 1) ? 2 : 3; + return (PyObject *)BPyGPU_Buffer_CreatePyObject(best_data_format, shape, shape_len, buf); } #ifdef BPYGPU_USE_GPUOBJ_FREE_METHOD |