我有一个项目,使用花车工作正常,我已经改变它使用双打而不是花车,它不再工作。我感觉它可能是我的Vertex的布局,现在Vertex有3个位置双打,3个普通双打和2个texCoord浮点数。下面的图像看起来像是顶点布局/步幅/尺寸问题吗?对我来说很奇怪。
这是我的Vertex结构:
struct Vertex
{
glm::dvec3 position; // 24 bytes
glm::dvec3 normal; // 24 bytes
glm::vec2 texCoords; // 8 bytes
}; On the CPU there is no padding. Shader side there would be for a block, but for attributes I don't think it matters.
我的顶点着色器看起来像这样:
layout (location = 0) in dvec3 position;
layout (location = 2) in dvec3 vertNormal;
layout (location = 4) in vec2 vertTexCoords;
layout (location = 0) out dvec3 fragWorldPos;
layout (location = 2) out dvec3 fragNormal;
layout (location = 4) out vec2 fragTexCoords;
我的片段着色器:
layout (location = 0) flat in dvec3 fragWorldPos;
layout (location = 2) flat in dvec3 fragNormal;
layout (location = 4) in vec2 fragTexCoords;
layout (location = 5) out vec4 outFragColour;
我的顶点属性:
glVertexAttribPointer(0, 3, GL_DOUBLE, GL_FALSE, 56, (void*)nullptr);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1 (should be 2?), 3, GL_DOUBLE, GL_FALSE, 56, (void*)(3 * sizeof(double)));
glEnableVertexAttribArray(1); //Should be ?
glVertexAttribPointer(2 (should be 4?), 2, GL_FLOAT, GL_FALSE, 56, (void*)(48));
glEnableVertexAttribArray(2); //Should be ?
它基本上看起来当你的显卡即将死亡时会发生什么。它闪烁了很多。
答案 0 :(得分:0)
location
必须与glVertexAttribPointer
和glEnableVertexAttribArray
匹配。因此,必须编辑顶点着色器。
afaik,你不应该在顶点着色器中为out
参数指定位置,对于片段着色器中的任何参数,它们应该按原样按名称传递。