0

これは、バグの可能性があるコードの唯一の部分です。

        GLuint tex_name;
        glGenTextures(1, &tex_name);
        // set id to the gl_texture_id map for later use
        gl_texture_id[t] = tex_name;
        // bind texture
        glBindTexture(GL_TEXTURE_2D, tex_name);
        // set texture filtering parameters
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
        glGenerateMipmap(GL_TEXTURE_2D);
        // load texture data
        glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,t->width(),t->height(),0,GL_BGRA,GL_UNSIGNED_BYTE,t->data());

このコードに何か問題があることがわかりますか? glEnable(GL_TEXTURE_2D) を有効にしても違いはありません。テクスチャ座標は正しく、フラグメントと頂点シェーダーは確かに正しいです。

解決済み それは問題ではありませんでした。glTexImage2D (...) の前に glGenerateMipmap (...) をまだ使用しています。本当の問題は、画像が GL_RGB 形式のときに GL_RGBA 形式として渡したことです。さらに、私の t->data() 配列は height*width*sizeof(GL_FLOAT) の長さで、型パラメーターとして GL_UNSIGNED_BYTE を渡していたため、データが失われていました。これは機能しますが、実際には glTexImage2D を glGenerateMipmap で先行すると、Nvidia ハードウェアに奇妙な効果が生じますが、ATI GPU では (奇妙なことに) 人生は美しいです。

4

1 に答える 1