OpenGL 4.0+ と OpenGL 1.x を混在させることはできますか?
いいえ。OpenGL-1/2 互換性プロファイルは、OpenGL-3 でのみ使用できます。
技術的には、実際に利用可能な互換性プロファイルがあります。しかし、誰かがそれを使いたいと思った正当な理由はわかりません。OpenGL-4 機能を使用する場合、プログラムの内部構造の多くを変更する必要があるため、その互換性プロファイルはもはや重要ではありません。
Blender-GUI が OpenGL 1.x を使用していることは知っています
現在、OpenGL-4 互換にするために多くの開発が行われています。
それを達成するために、opengl 1.x (「即時モード」、表示リストなど) で描画を行います。
表示リストと即時モードの両方が、大きな障害になります。頂点配列は、OpenGL-1.1 以降で使用できます。頂点配列をセットアップしたら、OpenGL-4 をサポートするために最小限のコードしか必要ありません。基本的に必要なことは、適切なシェーダーを提供し、頂点配列を適切な属性に関連付けることによって、固定関数パイプラインを複製することだけです。OpenGL-4 の場合、頂点配列の状態を保持するために頂点配列オブジェクトも必要です。
シェーダーが必須でない限り、つまり、固定機能でも可能なことだけを行う限り、ごくわずかなランタイム条件のみで OpenGL-1.1 から OpenGL-4.x の全範囲をサポートする方法でこれを書くことができます。あなたのコードで。
コメントによる更新:
私は次のようなことを考えています: ソースファイルを仮定しましょうguiGL.c
#if GLPATH==2
#define GLPREFIX(x) glpath2_#x
#elif GLPATH==3
#define GLPREFIX(x) glpath3_#x
#endif
void GLPREFIX(draw_button)
{
#if GLPATH==2
/* OpenGL 2 code here */
#endif
#if GLPATH==3
/* OpenGL 3 code here */
#endif
/* common code here */
}
ディスパッチャguiGLcommon.c
void draw_button()
{
if(opengl_major_version <= 2) {
glpath2_draw_button();
} else {
glpath3_draw_button();
}
}
そしてMakefile
guiGL_glpath2.o: guiGL.c
$(CC) -DGLPATH=2 -o guiGL_glpath2.o -c guiGL.c
guiGL_glpath3.o: guiGL.c
$(CC) -DGLPATH=3 -o guiGL_glpath2.o -c guiGL.c
guiGL.o: guiGLcommon.c
$(CC) -o guiGL.o -c guiGLcommon.c
# ...
target: ...
$(CC) -o target guiGL.o guiGL_path2.o guiGL_path3.o ...