着色器不工作
Posted
技术标签:
【中文标题】着色器不工作【英文标题】:Shader Not Working 【发布时间】:2013-07-28 20:42:18 【问题描述】:所以我不能让我的着色器用颜色渲染。当我不使用属性颜色设置颜色时,我的着色器工作。 我的顶点代码是:
typedef struct
GLKVector3 Position; //Position
GLKVector4 Color; //32 Bit color
GLKVector3 Normal; //For Lighting
GLKVector2 TexCoord; //For Texturing
Vertex;
我将所有顶点的颜色设为 [1,0,0,1] 我的顶点着色器是这样的:
attribute vec3 Position;
attribute vec4 Color;
attribute vec3 Normal;
attribute vec2 TexCoord;
uniform mat4 ModelViewMatrix;
uniform mat4 ProjectionMatrix;
varying vec4 DestinationColor;
void main(void)
gl_Position = ProjectionMatrix*ModelViewMatrix*vec4(Position,1);
DestinationColor = Color;
我的片段着色器是这样的:
precision mediump float;
varying lowp vec4 DestinationColor;
void main (void)
gl_FragColor =DestinationColor;
它什么也不显示。
如果我将片段着色器更改为 gl_FragColor = vec4(1,0,0,1); 它甚至都不起作用除非我取消注释顶点着色器中设置 DestinationColor 的行。
请帮助我已经坐了一段时间了
【问题讨论】:
我看不出你在做什么有什么问题。您是否正在检查着色器和程序编译中的错误日志? 是的,它没有错误地完成并且运行良好 尝试对两个着色器中的变量使用完全相同的声明(不要在两个着色器中使用不同的精度限定符)。 【参考方案1】:我找到了这个问题的答案,但我无法访问 bobjamin 的旧帐户,所以我正在使用这个新帐户。 解决方案相当简单。 首先我应该提到,drhass 的建议确实有帮助,因为它允许我从顶点着色器设置静态颜色并且它会显示,但是问题是名称 Color 必须是保留关键字并且它会导致问题。
答案是将属性 Color 更改为 SourceColor,一切正常!
【讨论】:
GLSL 中唯一的保留名称是以gl_
为前缀的任何名称,以及第 16 页的khronos.org/registry/gles/specs/2.0/… 中列出的一组关键字和内置插件。您的软件中存在错误,或者您的平台违反了规范。以上是关于着色器不工作的主要内容,如果未能解决你的问题,请参考以下文章