私が知っているように、OpenGLは3.0以降NPOTテクスチャを高度にサポートしています。今、私はNPOTテクスチャを正確に対応するデータで割り当てることができないという奇妙な現象に直面しています。言葉はわかりやすい。私のテストコードは以下の通りです。
glGenTextures(1, &texVoxels);
glBindTexture(GL_TEXTURE_3D, texVoxels);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
int width = 513;
int height = 513;
int depth = 513;
unsigned char *data = new unsigned char[width*height*depth];
memset(data, 0, sizeof(unsigned char)*width*height*depth);
glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE8, width, height,depth, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
delete []data;
data = NULL;
上記のコードのように、2 ^N+1のNPOTキュービックテクスチャを割り当てる必要があります。ただし、プログラムはglTexImage3D()でエラーを終了します。このエラーは、「必要なテクスチャよりも小さいデータのサイズ」が原因だと思います。十分な大きさのデータを割り当てると、プログラムは合格するからです。
どうすればNPOTテクスチャを使用して、このようなデータを割り当てることができますか?データのサイズがプログラムが通過するのに十分な大きさである場合でも、データがテクスチャの場所にどのように正確に対応しているかは本当にわかりません。
PS。私のグラフィックカードは、OpenGL3.3をサポートするquadrofx4800です。