【问题标题】:OpenGl 2d Texture repeat (different results on different devices)OpenGL 2d 纹理重复(不同设备上的不同结果)
【发布时间】:2014-02-19 07:04:42
【问题描述】:

在我的笔记本电脑(英特尔高清显卡)上,当我尝试绘制纹理时,它会正确包裹。但是,当我将台式机与 nvidia 显卡一起使用时,它将不再包裹,并且会钳制到 0..1。我的图像加载编码发布在下面。如您所见,我明确地将纹理包装设置为重复。

int x, y, comp;
GLuint texID;
unsigned char* data = stbi_load(filename, &x, &y, &comp, 0);
glGenTextures(1, &texID); 
glBindTexture(GL_TEXTURE_2D, texID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, x, y, 0, (comp == 3) ? GL_RGB : GL_RGBA, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
stbi_image_free(data);
m_resourceMap[resID] = texID;

【问题讨论】:

    标签: c++ opengl nvidia


    【解决方案1】:

    已解决 它与 Intel HD Graphics 和 Nvidia 实施 GLSL 的方式有关。出于某种原因,它的英特尔实现不喜欢我的着色器程序,它将顶点坐标转换为纹理坐标。但是英特尔不喜欢这样,除非我使用 gltexcoordpointer 映射 tex 坐标,否则它不会工作。因此,当我在 nvidia 上对其进行测试时,映射纹理坐标的旧着色器程序运行良好,而 nvidia 的实现忽略了我的 gltexcoordpointer 映射。我只是通过正确传递一个属性来解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2012-03-13
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多