Hi! I draw entities using glDrawArraysInstanced but when I use a geometry shader, vertices positions are not multiplied by the world matrix and everything is drawn at the same place.
Here is the vertex shader code :
const std::string linkedListVertexShader = R"(#version 460 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec4 color;
layout (location = 2) in vec2 texCoords;
layout (location = 3) in vec3 normals;
layout (location = 4) in mat4 worldMat;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 textureMatrix;
out vec4 vColor;
out vec2 vTexCoord;
void main() {
gl_Position = projectionMatrix * viewMatrix * worldMat * vec4(position, 1.f);
vTexCoord = (textureMatrix * vec4(texCoords, 1.f, 1.f)).xy;
vColor = color;
}
)";
And here is the geometry shader code :
const std::string geometryShader = R"(#version 460 core
#extension GL_EXT_geometry_shader4 : enable
layout (triangles) in;
layout (triangle_strip, max_vertices = 4) out;
uniform int layer;
in vec4 vColor[];
in vec2 vTexCoord[];
out vec4 frontColor;
out vec2 fTexCoords;
void main() {
/*gl_Layer = layer;*/
gl_Position = gl_in[0].gl_Position;
frontColor = vColor[0];
fTexCoords = vTexCoord[0];
EmitVertex();
gl_Position = gl_in[1].gl_Position;
frontColor = vColor[1];
fTexCoords = vTexCoord[1];
EmitVertex();
gl_Position = gl_in[2].gl_Position;
frontColor = vColor[2];
fTexCoords = vTexCoord[2];
EmitVertex();
EndPrimitive();
}
)";
Why are alla my entities drawn at the same place ?
Doesn’t the geometry shader perform the matrix multiplication with instanced rendering ?