在一个简单的hello-world OpenGL程序中,它简单地在窗口上绘制一个静态三角形,当我将三角形的3个顶点设置为红色,绿色和蓝色时,三角形用渐变填充.
但是当我使用这样的着色器时:
顶点着色器:
attribute vec4 aVertex;
attribute vec4 aColor;
varying vec4 vColor;
void main(void) {
gl_Position = gl_ModelViewMatrix * gl_ProjectionMatrix * aVertex;
vColor = aColor;
}
Run Code Online (Sandbox Code Playgroud)
其中的属性aVertex和aColor来自一个顶点缓冲,通过调用传递glVertexAttribPointer.
片段着色器:
varying vec4 vColor;
void main(void) {
gl_FragColor = vColor;
}
Run Code Online (Sandbox Code Playgroud)
三角形仍然充满了渐变,这里有一个问题:
如果每个顶点计算顶点着色器,vColor则应为每个实例分配顶点的颜色.并且顶点颜色应该是红色,绿色或蓝色,如顶点缓冲区中设置的那样.
那么渐变来自哪里?
或者,换句话说,什么时候发生在碎片着色器中,vColor结果是插值颜色而不是顶点?
上面的OpenGL 3.3是否有任何综合列表,我可以在哪里找到已弃用/不可用的功能?
说,glLoadIdentity()我不知道它是否被弃用.
我查看了Opengl 4.1参考页面并没有在那里找到它.我可以安全地假设它是一个不推荐使用的功能.这是一种知道它的功能还存在的方法吗?
在参考页面中,它说,这些手册页仅记录核心上下文.这是什么意思?该参考页面中没有的内容是什么.
什么是兼容性配置文件 在特定版本的Opengl上是否有任何全面的功能列表?
对于渲染,我有一个与窗口关联的当前GL上下文.在应用程序呈现多个场景(例如使用累积或不同视口)的情况下,我认为可以重用相同的上下文.
我的问题是,我为什么要使用多个GL上下文?我在ARB_framebuffer_object扩展规范中读到调用MakeCurrent的代价很高,如果存在ARB_framebuffer_object扩展,我可以在不使用MakeCurrent的情况下在通用缓冲区上呈现.
显然,使用多个GL上下文的唯一原因是避免设置上下文状态(像素存储,传输,点大小,多边形点画......)或者具有可用的多个渲染缓冲区配置(一个上下文有累积,另一个没有).我应该如何决定何时使用替代上下文而不是设置上下文状态?