这看起来像顶点属性/布局问题吗?

时间:2016-11-28 10:08:45

标签: c++ opengl glsl shader vertex

我有一个项目,使用花车工作正常,我已经改变它使用双打而不是花车,它不再工作。我感觉它可能是我的Vertex的布局,现在Vertex有3个位置双打,3个普通双打和2个texCoord浮点数。下面的图像看起来像是顶点布局/步幅/尺寸问题吗?对我来说很奇怪。

enter image description here

这是我的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 ? 

它基本上看起来当你的显卡即将死亡时会发生什么。它闪烁了很多。

1 个答案:

答案 0 :(得分:0)

    顶点着色器中的
  1. location必须与glVertexAttribPointerglEnableVertexAttribArray匹配。因此,必须编辑顶点着色器。

  2. afaik,你不应该在顶点着色器中为out参数指定位置,对于片段着色器中的任何参数,它们应该按原样按名称传递。