opengl-es - OpenGL ES 2 : Are vertex and fragment shaders necessary for simple drawing?

标签 opengl-es opengl-es-2.0 shader

我目前正在使用运行时生成的几何图形处理一些绘图例程,并且只使用平面颜色。在寻找最小的 GL 设置来进行绘图时(我匹配屏幕分辨率并且我使用的是 iOS,但问题也适用于其他 ES 2 平台),我看到大多数示例都使用顶点和片段着色器,但不是全部。

如果我不打算使用任何纹理或照明(只是直接颜色复制/混合),并且我不打算进行任何无法通过操作 View 矩阵完成的转换,我是否真的需要设置顶点和/或片段着色器?如果不是,与无着色器方法相比,使用着色器有什么优势吗?

最佳答案

据我所知,是的,它们是必要的。 OpenGL ES 2.0 不向后兼容 OpenGL ES 1.x,两者之间的主要区别在于自定义着色器。

使用着色器 (2.0) 与否 (1.x) 的优势取决于您的应用程序当前和长期的功能,但 1.x 的固定功能管道正在迅速成为过去。最近发布的 OpenGL ES 3.0 规范向后兼容 2.0,但不兼容 1.x。

OpenGL ES 2.0 使用可编程管道,因此您必须始终声明顶点和片段着色器。您可以为几何 + 颜色声明的最简单的有:

// Vertex Shader

attribute vec3 position;

void main(void)
{
     gl_Position = vec4(position, 1.0);
}

和:
// Fragment Shader

uniform lowp vec3 color;

void main(void)
{
     gl_FragColor = vec4(color, 1.0);
}

来源:Khronos Website & Docs

"The significant change in the OpenGL ES 2.0 specification is that the OpenGL fixed function transformation and fragment pipeline is not supported."

关于opengl-es - OpenGL ES 2 : Are vertex and fragment shaders necessary for simple drawing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15513414/

相关文章:

iphone - 在iPhone上将OpenGL调用与更新分开

objective-c - 适用于 iOS 的 GluUnProject

opengl - 太阳着色器不工作

OpenGL 着色语言向后兼容性

c++ - glShaderSource() 上的段错误

opengl-es - OpenGL ES 2.0 中的 GLSL 是否支持 gl_Normal gl_Vertex 等内置变量?

iPhone。粒子系统性能

c++ - SDL 2.0 Sprite 在 OpenGL 绘制后绘制倾斜(转换)

ios - 多采样渲染到纹理

ios - 将部分纹理( Sprite 表/纹理贴图)应用于 iOS OpenGL ES 2.0 中的点 Sprite