gpt4 book ai didi

c++ - 如何增长 GL_TEXTURE_2D_ARRAY?

转载 作者:行者123 更新时间:2023-11-28 02:15:14 25 4
gpt4 key购买 nike

我已经创建了这样的二维纹理数组

glTexImage3D(GL_TEXTURE_2D_ARRAY,
0, // No mipmaps
GL_RGBA8, // Internal format
width, height, 100, // width,height,layer count
0, // border?
GL_RGBA, // format
GL_UNSIGNED_BYTE, // type
0); // pointer to data

例如,如何将其大小从 100 增加到 200?我想我必须创建一个大小为 200 的新二维数组并使用 glCopyTexSubImage3D 复制图像?

glBindTexture(GL_TEXTURE_2D_ARRAY, texture_id);
glCopyTexSubImage3D(GL_TEXTURE_2D_ARRAY,
0,
0, 0, 0,
0, 0,
width, height
);
glDeleteTextures(1, &texture_id);

GLuint new_tex_id;
glGenTextures(1, &new_tex_id);
glBindTexture(GL_TEXTURE_2D_ARRAY, new_tex_id);

glTexImage3D(GL_TEXTURE_2D_ARRAY,
0,
GL_RGBA8,
width, height, 200,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
0);

//How do I get the data in `GL_READ_BUFFER` into my newly bound texture?

texture_id = new_tex_id;

但是我实际上如何从 GL_READ_BUFFER 中获取数据?

最佳答案

glCopyTexSubImage 从帧缓冲区复制数据,而不是从纹理复制数据。这就是复制时不需要两个纹理对象的原因。

从一个纹理复制到另一个纹理需要 glCopyImageSubData .这是来自 ARB_copy_image 的 OpenGL 4.3 函数。在 NV_copy_image 中也可以找到类似的功能,可能会得到更广泛的支持。

顺便说一句,您通常应该完全避免执行此操作。如果您需要一个 200 元素数组纹理,您应该在第一时间分配它。

关于c++ - 如何增长 GL_TEXTURE_2D_ARRAY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34239049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com