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-20 17:03:47 +0300 |
commit | 92178c7e0ebf3bcf4dd5474eac0f9e768822820c (patch) | |
tree | 46c6cb0542532251e7b6d7d417200e092804ecef /source/blender/python | |
parent | 729c579030aef61602e1bac043322da6ccb2279b (diff) |
Fix T88365: GPUTexture.read returning a buffer with wrong size
The pixel components were not being considered.
Diffstat (limited to 'source/blender/python')
-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 1ae65c1dd11..257c6d773eb 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 |