当我使用xcode 8在ios 10中运行我的应用程序时,我在调试控制台中收到以下消息,并且通过UI获取冻结可以让任何人知道为什么会发生这种情况
ERROR
/BuildRoot/Library/Caches/com.apple.xbs/Sources/VectorKit/VectorKit-1228.30.7.17.9/GeoGL/GeoGL/GLCoreContext.cpp
1763: InfoLog SolidRibbonShader: ERROR
/BuildRoot/Library/Caches/com.apple.xbs/Sources/VectorKit/VectorKit-1228.30.7.17.9/GeoGL/GeoGL/GLCoreContext.cpp
1764: WARNING: Output of vertex shader 'v_gradient' not read by
fragment shader
Run Code Online (Sandbox Code Playgroud)
tym*_*mac 50
回答
在Xcode中可能会收到此警告的情况之一是使用使用着色器的应用程序(例如地图应用程序)MKMapView.您会发现地图视图在具有真实硬件/本机操作系统的真实设备上没有该警告的情况下按预期工作.
在sim中,SolidRibbonShader 片段着色器无法读取v_gradient 顶点着色器的输出,可能是因为它处于测试阶段,或者Xcode版本和SIM版本之间可能存在不兼容性.然而,着色器在真实设备上被识别.
说明
这些着色器属于OpenGL渲染管道.渲染管道是OpenGL渲染对象时所采用的步骤序列.
渲染管道负责应用纹理,将顶点转换为右坐标系以及在屏幕上显示字符等内容.
这个管道有六个阶段.
最后,您的设备屏幕上会显示一个图像.这六个阶段称为OpenGL渲染管道,用于渲染的所有数据都必须通过它.
什么是着色器?
着色器是由您开发的一个小程序,位于GPU中.着色器使用称为OpenGL着色语言(GLSL)的特殊图形语言编写.
着色器取代了OpenGL渲染管道中的两个重要阶段:每顶点处理和每片段处理阶段.这两个阶段中的每个阶段都有一个着色器.
最终目标Vertex Shader是提供网格顶点到渲染管道的最终转换.其目标Fragment shader是为每个前往帧缓冲区的像素提供着色和纹理数据.
Vertex shaders将三角形的顶点从局部模型坐标系转换为屏幕位置.Fragment shaders计算屏幕上光栅化的三角形内像素的颜色.
单独的着色器对象加速编译和链接
许多OpenGL ES应用程序使用多个顶点和片段着色器,重复使用具有不同顶点着色器的相同片段着色器通常很有用,反之亦然.由于核心OpenGL ES规范要求在单个着色器程序中将顶点和片段着色器链接在一起,因此混合和匹配着色器会导致大量程序,从而在初始化应用程序时增加着色器编译和链接总时间.
| 归档时间: |
|
| 查看次数: |
16905 次 |
| 最近记录: |