参考 https://computergraphics.stackexchange.com/questions/6256/double-precision-in-shader
GLuint VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(color), color, GL_STATIC_DRAW);
glVertexAttribLPointer(1, 1, GL_DOUBLE, sizeof(GLdouble), (void*)0);
glEnableVertexAttribArray(1);
注意要用glVertexAttribLPointer,而不是glVertexAttribPointer(会导致传递无效)。
vertex shader:
#version 460 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in double V;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
out vec4 pcolor;
void main()
{
gl_Position = projection * view * model * vec4(aPos, 1.0f);
pcolor = vec4(vec3(V), 1.0);
}
另外,传递int类型数据需要用 glVertexAttribIPointer。