glTexImage2D-为相同的纹理ID上传新图像

尔比斯

这是示例代码:

//img1 2048x2048
//img2 1024x1024

glGenTextures(1, &texId);

glBindTexture(GL_TEXTURE_2D, texId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img1.getWidth(), img1.getHeight(), 0, GL_BGR, GL_UNSIGNED_BYTE, img1.accessPixels());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, 0);

//in  other function
glBindTexture(GL_TEXTURE_2D, texId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img2.getWidth(), img2.getHeight(), 0, GL_BGR, GL_UNSIGNED_BYTE, img2.accessPixels());
glBindTexture(GL_TEXTURE_2D, 0);

如您所见,我使用相同的纹理ID来上传两个不同的图像。我使用nvidia-smi监视gpu内存使用情况。纹理使用的内存等于20 MiB。首先上传哪个图像都没有关系。如果我在第一个glTexImage2D之后调用第二个glTexImage2D而没有重新绑定纹理,则内存使用量等于4 MiB:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img1.getWidth(), img1.getHeight(), 0, GL_BGR, GL_UNSIGNED_BYTE, img1.accessPixels());
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img2.getWidth(), img2.getHeight(), 0, GL_BGR, GL_UNSIGNED_BYTE, img2.accessPixels());

重新绑定纹理后,使用相同的纹理ID上传其他图像时,opengl不会释放内存吗?

数据狼

纹理名称(= ID)只是抽象句柄。同步点之间,单个纹理名称实际上可以指代任意数量的图像。

考虑以下操作顺序:

glBindTexture(GL_TEXTURE_2D, the_texture);

glTexImage2D(…);
glDraw…();

glTexImage2D(…);
glDraw…();

glTexImage2D(…);
glDraw…();

由于AS-如果规则,每个glDraw…操作必须与已上载最近的纹理数据得出。但是,由于OpenGL的异步特性,实际绘图操作可能会延迟到(很晚)以后。因此,与此同时,OpenGL实现必须保留各种纹理图像,直到绘制完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

glTexImage2D - 通道计为内部格式

在LWJGL中将glTexImage2D与ByteBuffer一起使用时纹理为空

GLES2:带有GL_LUMINANCE的glTexImage2D给我黑屏/纹理

OpenGL ES 3.1-无法使用glTexImage2D创建IMMUTABLE纹理

通过将RGB浮点像素数据传递到glTexImage2D来加载纹理

glTexImage2D不起作用,但是将FragColor设置为vec4(1.0,0,0,1.0)会给我红色图像

glTexImage2D崩溃程序

glTexImage2d中的border参数

glTexImage2D读取越界

glTexImage2D'目标无效'

glTexImage2D访问冲突

glTexImage2D的GL_INVALID_VALUE

使用pyopengl glTexImage2D时出现OSError

glTexImage2D数据未按预期填充

关于使用gl_luminance的glteximage2d的拼图

glTexImage2D() 参数和生成帧缓冲区

将glTexImage2D保存到文件系统以进行检查

iPhone 6s / RoboVM(?)GLTexImage2D渲染问题

在glTexImage2D()中指定GL_RGBA32F时奇怪的输出

glTexImage2D切片和对齐问题出现在窗口中

将`GL_UNSIGNED_INT_24_8`与`glTexImage2D`一起使用

Android12 opengles3.0 glTexImage2D 0x502 錯誤

glTexImage2D时,[OpenGL | C#] vhost32.exe停止工作

我是否将错误的数据传递给 glTexImage2D?

iOS和android之间的glTexImage2D错误细微之处-不一致的文档

带有C ++的OpenGL:将类数组传递给glTexImage2d时vtable遇到麻烦

返回stbi_load函数的结果并将其用于glTexImage2D会导致内存冲突

当我在glTexImage2D中选择与着色器中采样方式不同的内部格式时,情况会如何?

(LWJGL3)使用glTexSubImage3D上传图像数据后,OpenGL 2D纹理阵列保持为空