我可以将 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 ...