【问题标题】:Corrupted Textures with OpenGL 4.1 on Mac OS在 Mac OS 上使用 OpenGL 4.1 损坏的纹理
【发布时间】:2023-03-29 02:15:02
【问题描述】:

我正在尝试使用 OpenGL 4.1 着色器语言绘制纹理。 它在 Windows 上工作得非常好,所以我很肯定着色器或坐标没有问题。 但是,在 Mac 上,纹理已损坏,如图片所示:





如果你注意到 - 有两个小纹理看起来不错。它们的独特之处在于一个是 16 像素,第二个是 32 像素宽(2 的幂)。因此,它必须是配置或像素存储中的某些东西。不可能不支持不是 2 的幂的纹理,因为它们位于旧版 openGL 上下文(不是 GLSL)上。这是我的纹理生成示例:

    unsigned char* pixels = convertedImage->m_pixelbufs.at(0);
    GLuint imageDepth = convertedImage->GetBitsPerPixel() == 24 ? GL_RGB : GL_RGBA;

    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);

    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_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, convertedImage->GetWidth(), convertedImage->GetHeight(), 0, imageDepth, GL_UNSIGNED_BYTE, pixels);

    glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
    glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
    glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
    glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
    glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

    glBindTexture(GL_TEXTURE_2D, 0);

我尝试使用其他 glPixelStorei 参数,但纹理总是损坏。有什么线索吗?

【问题讨论】:

    标签: c++ macos opengl glsl


    【解决方案1】:

    问题出在另一个地方。在将 PNG 文件实际提取到内存并采取相应措施之前,有一段旧代码检查扩展名 GL_ARB_texture_non_power_of_two。在 Windows 上,尽管它被移至核心答案是 - TRUE,因此行为符合预期。在 mac 上,由于它移动到 cere 答案是 - FALSE,所以行为是错误的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多