Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iphone opengl es 2.0项目上更改xcode中的着色器代码会导致错误_Iphone_Xcode_Opengl Es_Shader - Fatal编程技术网

在iphone opengl es 2.0项目上更改xcode中的着色器代码会导致错误

在iphone opengl es 2.0项目上更改xcode中的着色器代码会导致错误,iphone,xcode,opengl-es,shader,Iphone,Xcode,Opengl Es,Shader,我是着色器新手,我正在努力学习基础知识。 但每次我在顶点着色器中更改某些代码时,都会导致错误 “验证失败:程序未成功链接。” 我使用iphone的标准openGL项目作为Xcode的启动程序(2d立方体在y位置移动) 从一开始,着色器如下所示: attribute vec4 position; attribute vec4 color; varying vec4 colorVarying; void main() { gl_Position = position

我是着色器新手,我正在努力学习基础知识。 但每次我在顶点着色器中更改某些代码时,都会导致错误

“验证失败:程序未成功链接。”

我使用iphone的标准openGL项目作为Xcode的启动程序(2d立方体在y位置移动)

从一开始,着色器如下所示:

attribute vec4 position;  
attribute vec4 color;  

varying vec4 colorVarying;  

void main()  
{  
     gl_Position = position;  
     gl_Position.y += sin(translate) / 2.0;  
     colorVarying = color;  
}  
我想把它改成:

uniform mat4 gl_ProjectionMatrix;  
uniform mat4 gl_ModelViewMatrix;  

attribute vec4 gl_Vertex;  

void main()  
{  
     gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;  
}  
我得到的只是一个白色的屏幕和上面提到的错误

有什么问题吗


/Niclas

请注意,您使用的是一个“可变”参数。这需要为顶点和片段着色器定义。由于您似乎只更改了顶点着色器,我猜这会导致链接问题,因为颜色变化可能仍在片段着色器中。尝试将“颜色变化”的逻辑放回顶点着色器中。比如:

uniform mat4 gl_ProjectionMatrix;   
uniform mat4 gl_ModelViewMatrix;   

attribute vec4 gl_Vertex;   

attribute vec4 color;
varying vec4 colorVarying;

void main()   
{   
    gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;  
    colorVarying = color; 
}

请注意,您使用的是“可变”参数。这需要为顶点和片段着色器定义。由于您似乎只更改了顶点着色器,我猜这会导致链接问题,因为颜色变化可能仍在片段着色器中。尝试将“颜色变化”的逻辑放回顶点着色器中。比如:

uniform mat4 gl_ProjectionMatrix;   
uniform mat4 gl_ModelViewMatrix;   

attribute vec4 gl_Vertex;   

attribute vec4 color;
varying vec4 colorVarying;

void main()   
{   
    gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;  
    colorVarying = color; 
}

你尝试过清理你的项目吗?是的,我现在尝试过,但结果仍然相同。你尝试过清理你的项目吗?是的,我现在尝试过,但结果仍然相同。然后它工作了。例如,如果我改变gl_位置,y+=sin(translate)/2.0;到gl_位置。y+=sin(平移)/4.0;我的行为改变了,酷。现在慢慢地一次换一行,直到我们找到问题。首先添加制服,然后添加属性。然后更改gl_位置计算。然后去掉你不需要的线。你会在某个地方碰到问题的。如果我只添加统一的mat4 gl_投影矩阵;它会坏的……)尝试将gl_ProjectionMatrix更改为myProjectionMatrix。谜团已解开。我们都在为OpenGL的完整版本研究着色器。OpenGLES2.0是一个更加条状化的版本。查看语言摘要(着色器位于底部)。我们看到了一些问题,因为在移动版OpenGL着色器语言中,许多gl_*术语没有定义为桌面版OpenGL包含的术语。然后它就可以工作了。例如,如果我改变gl_位置,y+=sin(translate)/2.0;到gl_位置。y+=sin(平移)/4.0;我的行为改变了,酷。现在慢慢地一次换一行,直到我们找到问题。首先添加制服,然后添加属性。然后更改gl_位置计算。然后去掉你不需要的线。你会在某个地方碰到问题的。如果我只添加统一的mat4 gl_投影矩阵;它会坏的……)尝试将gl_ProjectionMatrix更改为myProjectionMatrix。谜团已解开。我们都在为OpenGL的完整版本研究着色器。OpenGLES2.0是一个更加条状化的版本。查看语言摘要(着色器位于底部)。我们之所以看到这些问题,是因为在OpenGL着色器语言的移动版本中,许多gl_*术语没有定义为桌面版OpenGL包含的术语。