LWJGL を使用して OpenGL コンテキストを作成しています。私のマシン (OpenGL 4.2 互換) で実行でき、OpenGL 2.1 でも単純なシェーダーに変更を加えることができます。OpenGL 2.1 と互換性のあるコードを作成する必要があります (シェーダー、またはシェーダーのリンクとコンパイルが問題のようです)。書くのは簡単だと思いました:
Frag シェーダ:
#version 120
in vec4 pass_Color;
out vec4 out_Color;
void main(void) {
out_Color = pass_Color;
}
Vert シェーダー:
#version 120
in vec4 in_Position;
in vec4 in_Color;
out vec4 pass_Color;
uniform mat4 Model;
uniform mat4 View;
uniform mat4 Projection;
void main(void) {
gl_Position = Projection * View * Model * in_Position;
pass_Color = in_Color;
}
私のシェーダーの最初の行として、それを 1 日と呼びます。ただし、OpenGL 3.3 をサポートするグラフィックス カードを搭載した 1 台のマシンでは、これらのシェーダーがリンクおよびコンパイルされませんでした。に変更すると
#version 330
// - or even -
#version 150
それらはリンクしてコンパイルします。私は互換性、コア、および前方互換性について読みましたが、私が理解しているように、コードで互換性コンテキストを実行するように指示されていない限り、OpenGL 3.3 マシンで GLSL 1.20 がサポートされていない可能性があります (言い方が間違っている可能性があります)。 、私を修正してください)。しかし、2.1 は OpenGL プロファイルを認識していないため、コンテキストをセットアップする前にいくつかのチェックを行う必要があることは確かです。
これが事実であるとしても、OpenGL 2.1 (および対応する GLSL バージョン) に限定されたグラフィックス カードを搭載したマシンと、それよりもはるかに新しいバージョン (3.3、4.2 など) を搭載したマシンの両方で、正しいロジックを実行する方法が完全にはわかりません。それも受け入れます (LWJGL を使用)。
コードを可能な限り「最新の OpenGL」に保ちたいことに注意してください。