【问题标题】:counting textures created grouping by 1d ,2d ,3d in OpenGL在OpenGL中计算按1d、2d、3d分组创建的纹理
【发布时间】:2013-09-23 08:59:22
【问题描述】:

gDebugger 向我展示了在应用程序中按维度分组创建的纹理。我还想计算在我的应用程序中从一开始创建的纹理数量以检查纹理泄漏。我没有看到任何 OpenGl 函数直接返回创建的纹理 id 的计数;计算应用程序中创建的纹理的最佳方法是什么?

【问题讨论】:

    标签: opengl


    【解决方案1】:

    没有可以批量执行的 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,因此它可以拥有自己的镜像纹理注册表。

    【讨论】:

    • Do glGentexture Create texture with minimum free id? this code is used when glGentexture Create texture with minimum free id.
    • 我认为这不是必需,但几乎所有实现都分配从 1 开始的连续数字。
    • 我的问题是:如果我有例如 1、2、3、4、5 和删除 3,我可以确定下一个生成的 id 是 3 吗?
    • 您必须自己检查,但这真的重要吗? glIsTexture 将在 3 上返回 false 如果它是空的,但你可以继续检查下一个数字。
    • 如何测试纹理是什么类型? 2d, 3d 1d?使用这个 glgettexlevelparam 并为每个纹理传递 gl_texture_1d、_2d、_3d 作为目标(并以某种方式处理 gl_invalid_enum/操作错误)?
    猜你喜欢
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2012-03-14
    • 2014-06-17
    相关资源
    最近更新 更多