【发布时间】:2016-12-04 12:09:40
【问题描述】:
我正在尝试将单个浮点数传递给我的顶点着色器,以便我可以将 gl_PointSize 设置为该浮点数。但是,它不起作用,我认为这是因为我使用了 glVertexAttribPointer:
glVertexAttribPointer(1, 1, GLenum(GL_FLOAT), GLboolean(GL_FALSE), GLsizei(MemoryLayout<Vertex>.size), BUFFER_OFFSET(2 * MemoryLayout<Float>.size))
我需要缓冲区偏移量,因为在此之前我还使用 glVertexAttribPointer 设置了位置:
glVertexAttribPointer(0, 2, GLenum(GL_FLOAT), GLboolean(GL_FALSE), GLsizei(MemoryLayout<Vertex>.size), BUFFER_OFFSET(0))
这是我的顶点结构:
struct Vertex {
var x, y, size: Float
}
这是顶点着色器:
attribute vec4 Position;
attribute float Size; // I tried vec4, no luck
void main(void) {
gl_PointSize = Size;
gl_Position = Position;
}
任何帮助将不胜感激!
【问题讨论】:
-
是什么让您认为
glVertexAttribPointer电话是罪魁祸首? -
当我尝试传输浮点数时,它的名称中有顶点,我想不出还有什么可能导致问题,因为之后另一部分可以正常使用它
-
嗯,Vertex 并不意味着 Vector。在 GL 中,顶点只是一组 属性,其中每个属性可以是标量或 2 到 4 维向量,因此您可以在这里使用顶点属性。你真的启用顶点属性数组1吗?
-
是的,在一开始。我是否需要在着色器中将其定义为 vec4,即使它不是或什么?
-
不,它在索引 1 处设置属性。但您不知道
Size在索引 1 处,除非您这样设置,例如在链接之前调用glBindAttribLocation()着色器程序。
标签: ios opengl-es vertex-shader