レンダリングコードをラップトップに移動しましたが、openglとglslで問題が発生しています。
私はこのような頂点シェーダーを持っています(簡略化):
uniform float tile_size;
void main(void) {
gl_PointSize = tile_size;
// gl_PointSize = 12;
}
また、gl_Pointcoordを使用してテクスチャを読み取り、フラグメントの色を設定するフラグメントシェーダー。私のC++プログラムでは、次のようにtile_sizeをバインドしようとしています。
glEnable(GL_TEXTURE_2D);
glEnable(GL_POINT_SPRITE);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
GLint unif_tilesize = glGetUniformLocation(*shader program*, "tile_size");
glUniform1f(unif_tilesize, 12);
(明確にするために、glUseProgramを使用してプログラムを既にセットアップしました。示されているのは、この特定のユニフォームに関するスニペットです)
このように設定すると、1ピクセルのポイントが得られ、openglがunif_tilesizeのバインドに失敗していることがわかりました(-1に設定されます)。
頂点シェーダーでコメントを入れ替えると、12pxのポイントスプライトが正常に表示されます。
奇妙なことに、他のコンピューターのまったく同じコードは完全に正常に機能します。私のラップトップのopenglバージョンは2.1.8304で、ATI radeon x1200を実行しています(デスクトップのnvidia 8800gtを参照)(これが関連する場合...)。
編集私は問題をよりよく反映するために質問のタイトルを変更しました。