gpt4 book ai didi

opengl - 调用 glGetTexImage (atioglxx.dll) 时出错

转载 作者:行者123 更新时间:2023-12-04 21:50:37 25 4
gpt4 key购买 nike

我在某些 ATI 卡(Radeon X1650、X1550 + 等)上遇到了难题。

消息是:“模块'atioglxx.dll'中地址6959DD46的访问冲突。读取地址00000000”

它发生在这一行:

glGetTexImage(GL_TEXTURE_2D,0,GL_RGBA,GL_FLOAT,P);

笔记:
  • 安装了最新的图形驱动程序。
  • 它在其他卡上完美运行。

  • 这是我迄今为止尝试过的(在代码中带有断言):
  • 指针 P 有效并分配了足够的内存来保存图像
  • 启用纹理:glIsEnabled(GL_TEXTURE_2D)
  • 测试当前绑定(bind)的纹理是我期望的:glGetIntegerv(GL_TEXTURE_2D_BINDING)
  • 测试当前绑定(bind)的纹理是否具有我期望的尺寸: glGetTexLevelParameteriv( GL_TEXTURE_WIDTH/HEIGHT )
  • 测试没有报错:glGetError

  • 它通过了所有这些测试,然后仍然失败并显示消息。

    我觉得我已经尝试了一切,没有更多的想法。我真的希望这里的一些GL-guru可以提供帮助!

    编辑:

    在得出结论后,这可能是我在这里发布的驱动程序错误: http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=295137#Post295137

    我也试过 GL_PACK_ALIGNMENT 并没有帮助。

    通过更多调查,我发现它只发生在我之前使用调用 glCopyTexSubImage2D 填充像素的纹理上。因此,我可以通过将 glCopyTexSubImage2d 调用替换为调用 glReadPixels 和 glTexImage2D 来产生解决方法。

    这是我更新的代码:
    {
    glCopyTexSubImage2D cannot be used here because the combination of calling
    glCopyTexSubImage2D and then later glGetTexImage on the same texture causes
    a crash in atioglxx.dll on ATI Radeon X1650 and X1550.
    Instead we copy to the main memory first and then update.
    }
    // glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, PixelWidth, PixelHeight); //**
    GetMem(P, PixelWidth * PixelHeight * 4);
    glReadPixels(0, 0, PixelWidth, PixelHeight, GL_RGBA, GL_UNSIGNED_BYTE, P);
    SetMemory(P,GL_RGBA,GL_UNSIGNED_BYTE);

    最佳答案

    您可能会照顾 GL_PACK_ALIGNEMENT。这个参数告诉你最接近的字节数来打包纹理。即,如果您有 645 像素的图像:

  • 将 GL_PACK_ALIGNEMENT 设置为 4(默认值),您将拥有 648 个像素。
  • 将 GL_PACK_ALIGNEMENT 设置为 1,您将拥有 645 个像素。

  • 因此,通过执行以下操作确保包值正常:
    glPixelStorei(GL_PACK_ALIGNMENT, 1)

    在你的 glGetTexImage() 之前,或者在 GL_PACK_ALIGNEMENT 上对齐你的内存纹理。

    关于opengl - 调用 glGetTexImage (atioglxx.dll) 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5564233/

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