我的OpenGL学习进阶之旅解决着色器语法错误:The shader uses varying u_Color, but previous shader does not write to it
Posted 字节卷动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的OpenGL学习进阶之旅解决着色器语法错误:The shader uses varying u_Color, but previous shader does not write to it相关的知识,希望对你有一定的参考价值。
一、错误描述
在加载完顶点着色器和片段着色器,然后link生成program的时候,出现了错误,如下所示:
2021-12-31 09:34:01.072 15937-16006/com.oyp.openglesdemo E/NDK_JNI_LOG_TAG: [GLUtils.cpp][createProgram][181]: GLUtils::createProgram error linking program:
The shader uses varying u_Color, but previous shader does not write to it.
Out of resource error.
二、分析错误
这个错误一看就是片段着色器的变量 u_Color
有问题。
片段着色器这个 u_Color变量需要 顶点着色器输出过来
片段着色器代码如下:
- fragment/fragment_shader_air_hockey.glsl
#version 300 es
precision mediump float;
in vec4 u_Color;
out vec4 fragColor;
void main()
fragColor = u_Color;
顶点着色器代码如下:
- vertex/vertex_shader_air_hockey.glsl
#version 300 es
layout(location = 0) in vec4 a_Position;
layout(location = 1) in vec4 a_Color;
out vec4 v_Color;
void main()
v_Color = a_Color;
gl_Position = a_Position;
gl_PointSize = 10.0;
所以原因就是
顶点着色器
输出out
的变量名为v_Color
片段着色器
输入in
的变量名为u_Color
所以对不上,从而导致Link Program 出错!
三、解决问题
将顶点着色器输出的变量名和片段着色器输入的变量名统一,保持一致即可。
修改之后片段着色器代码如下:
- fragment/fragment_shader_air_hockey.glsl
#version 300 es
precision mediump float;
in vec4 v_Color;
out vec4 fragColor;
void main()
fragColor = v_Color;
改完重新编译,正常运行
以上是关于我的OpenGL学习进阶之旅解决着色器语法错误:The shader uses varying u_Color, but previous shader does not write to it的主要内容,如果未能解决你的问题,请参考以下文章
我的OpenGL学习进阶之旅解决着色器语法错误:The shader uses varying u_Color, but previous shader does not write to it
我的OpenGL学习进阶之旅解决着色器语法错误:The shader uses varying u_Color, but previous shader does not write to it
我的OpenGL学习进阶之旅解决着色器语法错误:The shader uses varying u_Color, but previous shader does not write to it
我的OpenGL学习进阶之旅着色器GLSL运行时报错 GLSL compile error: Premature end of line
我的OpenGL学习进阶之旅着色器GLSL运行时报错 GLSL compile error: Premature end of line
我的OpenGL学习进阶之旅解决着色器编译错误:#version directive must occur on the first line of the shader