[Bf-blender-cvs] [ce6418fc161] temp-eeveelightcache: GPUTexture: Add GPU_texture_read
Clément Foucault
noreply at git.blender.org
Fri Jun 22 17:46:27 CEST 2018
Commit: ce6418fc16172b91e705121ad4430f862f9a9936
Author: Clément Foucault
Date: Wed Jun 20 18:31:46 2018 +0200
Branches: temp-eeveelightcache
https://developer.blender.org/rBce6418fc16172b91e705121ad4430f862f9a9936
GPUTexture: Add GPU_texture_read
This is to get the texture content from the GPU memory.
===================================================================
M source/blender/gpu/GPU_texture.h
M source/blender/gpu/intern/gpu_texture.c
===================================================================
diff --git a/source/blender/gpu/GPU_texture.h b/source/blender/gpu/GPU_texture.h
index efe720d5d55..3c93d275892 100644
--- a/source/blender/gpu/GPU_texture.h
+++ b/source/blender/gpu/GPU_texture.h
@@ -168,6 +168,8 @@ GPUTexture *GPU_texture_from_preview(struct PreviewImage *prv, int mipmap);
void GPU_texture_update(GPUTexture *tex, const float *pixels);
+void *GPU_texture_read(GPUTexture *tex, int miplvl);
+
void GPU_invalid_tex_init(void);
void GPU_invalid_tex_bind(int mode);
void GPU_invalid_tex_free(void);
diff --git a/source/blender/gpu/intern/gpu_texture.c b/source/blender/gpu/intern/gpu_texture.c
index cebfe7920bc..dfa9e2365ec 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -913,6 +913,26 @@ void GPU_texture_update(GPUTexture *tex, const float *pixels)
glBindTexture(tex->target, 0);
}
+void *GPU_texture_read(GPUTexture *tex, int miplvl)
+{
+ glBindTexture(tex->target, tex->bindcode);
+
+ size_t buf_size = gpu_texture_memory_footprint_compute(tex);
+ /* We want floats (or ints) */
+ buf_size = tex->components * sizeof(float) * (buf_size / tex->bytesize);
+ void *buf = MEM_mallocN(buf_size, "GPU_texture_read");
+
+ GLenum format, data_format;
+ gpu_texture_get_format(tex->components, tex->format, &format, &data_format,
+ &tex->format_flag, &tex->bytesize);
+
+ glGetTexImage(tex->target, miplvl, format, data_format, buf);
+
+ glBindTexture(tex->target, 0);
+
+ return buf;
+}
+
void GPU_invalid_tex_init(void)
{
memory_usage = 0;
More information about the Bf-blender-cvs
mailing list