【发布时间】:2013-09-23 08:59:22
【问题描述】:
gDebugger 向我展示了在应用程序中按维度分组创建的纹理。我还想计算在我的应用程序中从一开始创建的纹理数量以检查纹理泄漏。我没有看到任何 OpenGl 函数直接返回创建的纹理 id 的计数;计算应用程序中创建的纹理的最佳方法是什么?
【问题讨论】:
标签: opengl
gDebugger 向我展示了在应用程序中按维度分组创建的纹理。我还想计算在我的应用程序中从一开始创建的纹理数量以检查纹理泄漏。我没有看到任何 OpenGl 函数直接返回创建的纹理 id 的计数;计算应用程序中创建的纹理的最佳方法是什么?
【问题讨论】:
标签: opengl
没有可以批量执行的 GL 函数,但仅出于调试目的,您可以简单地遍历所有“可能”的 id(即数字),并通过 glIsTexture 进行检查:
const unsigned reasonably_big_value = 100000;
for (unsigned i = 0; i < reasonably_big_value; ++i) {
if (glIsTexture(i)) {
// count it somehow
}
}
至少我知道,在运行时获取纹理维度是不可能的。 glGetTexLevelParameter 需要 target 参数,所以你自己来处理。
gDEBugger 充当中间人并跟踪所有 GL 调用 IIRC,因此它可以拥有自己的镜像纹理注册表。
【讨论】:
glIsTexture 将在 3 上返回 false 如果它是空的,但你可以继续检查下一个数字。