Answer
您可能在 Xcode 中收到此警告的情况之一是使用使用着色器的应用程序,例如Maps应用程序与MKMapView
。您会发现地图视图可以按预期工作,而不会在具有真实硬件/本机操作系统的真实设备上发出警告。
在模拟中SolidRibbonShader
片段着色器无法读取的输出v_gradient
顶点着色器可能是因为它处于测试阶段,或者 Xcode 版本和 SIM 版本之间可能不兼容。然而,着色器可以在真实设备上识别。
解释
这些着色器属于OpenGL 渲染管线。渲染管线是 OpenGL 渲染对象时所采取的一系列步骤。
渲染管道负责应用纹理、将顶点转换到正确的坐标系以及在屏幕上显示角色等。
该管道有六个阶段。
- 每顶点操作
- 原始装配
- 原始加工
- 光栅化
- 片段处理
- 每个片段的操作
最后,您设备的屏幕上会出现一个图像。这六个阶段被称为OpenGL 渲染管线所有用于渲染的数据都必须经过它。
什么是着色器?
着色器是您开发的驻留在 GPU 中的小程序。着色器是用一种特殊的图形语言编写的,称为OpenGL 着色语言(GLSL).
着色器占据了 OpenGL 渲染管线中的两个重要阶段:每顶点处理 and 每个片段处理阶段。这两个阶段各有一个着色器。
该项目的最终目标是Vertex Shader
就是向渲染管线提供网格顶点的最终变换。的目标Fragment shader
是为帧缓冲区的每个像素提供着色和纹理数据。
Vertex shaders
将三角形的顶点从局部模型坐标系变换到屏幕位置。Fragment shaders
计算屏幕上光栅化的三角形内像素的颜色。
单独的着色器对象可加快编译和链接速度
许多 OpenGL ES 应用程序使用多种vertex and fragment着色器,并且重复使用相同的着色器通常很有用片段着色器与不同的顶点着色器或相反亦然。因为核心 OpenGL ES 规范需要vertex and fragment如果着色器要在单个着色器程序中链接在一起,则混合和匹配着色器会产生大量程序,从而增加初始化应用程序时的总着色器编译和链接时间。