我有一個項目使用浮動工作正常,我已經改變它使用雙打而不是浮動,它不再工作。我覺得這可能是我的頂點佈局,現在頂點有3個位置雙打,3個正常雙打和2個texCoord浮點數。下圖是否看起來像是頂點佈局/步幅/尺寸問題?對我來說看起來很奇怪。這看起來像是一個頂點屬性/佈局問題嗎?
這裏是我的頂點結構:
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;
而且我VERT ex屬性:
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 ?
它基本上看起來像是什麼時候發生,當你的顯卡即將死亡。它閃爍很多。
Offtopic - 這個奇特的調試GUI是什麼? – Starl1ght
@ Starl1ght它被稱爲ImGUI,它是更受歡迎的即時模式GUI之一,相當簡單,並且對於它的功能非常好,但我不是整個即時模式的粉絲。你能推薦一些好的嗎?我還沒有試過AntTweak吧。最終我會想要一些更漂亮的遊戲,並有更多的功能。 – Zebrafish
@TitoneMaurice:你沒有向着色器發送任何64位浮點數,你告訴GL將其轉換爲首先浮動,並將其作爲'dvec'訪問只是未定義的行爲。見例如[這個問題](http://stackoverflow.com/questions/10823811/glsl-double-precision-vertex-buffer)和[這個問題](http://stackoverflow.com/questions/28014864/why-詳細信息請參閱glvertexattribpointer-do-exist的不同變體)。 – derhass