OpenGL ES 2.0: Shader链接失败
OpenGL ES 2.0: Shader Linking Fail
我正在尝试制作一个使用openGL的简单android程序。到目前为止,着色器链接失败,日志信息是,
日志Link info
---------
OpenGL ES programs must have both a vertex and a fragment shader or a compute shader.
着色器编译工作良好。下面是着色器代码:
顶点着色器
attribute vec4 a_Position;
void main() {
gl_Position = a_Position;
gl_PointSize = 10.0;
}
片段着色器
uniform vec4 u_Color;
void main()
{
gl_FragColor = u_Color;
}
我正在采取的步骤是,
final int programObjectId = glCreateProgram();
if(programObjectId == 0)
return 0;
glAttachShader(programObjectId, vertexShaderId);
glAttachShader(programObjectId, fragmentShaderId);
glLinkProgram(programObjectId);
编译代码
public static int compileShader(int type, String code) {
final int shaderObjectId = glCreateShader(type);
glShaderSource(shaderObjectId, code);
glCompileShader(shaderObjectId);
int compilationStatus[] = new int[1];
glGetShaderiv(shaderObjectId, GL_COMPILE_STATUS, compilationStatus, 0);
if(compilationStatus[0] == 0)
glDeleteShader(shaderObjectId);
return shaderObjectId & compilationStatus[0];
}
我不知道如何解决这个问题。
问题在于compileShader
的最后一行:这里您对shaderObjectId(任意数字> 0)和compilationStatus (GL_TRUE或GL_FALSE)执行位和操作。由于GL_TRUE = 1, GL_FALSE = 0,因此该操作的结果只能是0或1。
让我们看看GL_TRUE的情况,因为GL_FALSE的结果无论如何都是0。
For every even number x:
x & 1 == 1
For every odd number x:
x & 1 == 0
这意味着,如果shaderObjectId = 3(例如),该函数将返回1。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 下面是我为检测链接列表中的循环而制作的代码
- 有了gcc,是否可以链接库,但前提是它存在
- 使用C链接在函数内部创建C++模板
- Visual Studio mkl_link_tool.exe链接错误
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- OpenGL ES 2.0: Shader链接失败