Java VBO在尝试将颜色数据从顶点传递到片段着色器时绘制黑色

Java VBO在尝试将颜色数据从顶点传递到片段着色器时绘制黑色,java,opengl,shader,lwjgl,Java,Opengl,Shader,Lwjgl,尝试将vec4(颜色数据)从顶点着色器传递到片段着色器时,片段着色器的结果输出绘制黑色vbo 我尝试过改变绑定程序的位置,使用flat并添加更多的glfwWindow提示。更奇怪的是,着色器和着色器程序没有编译或链接错误 我还直接测试了片段着色器,发现它可以工作,以及绑定数据和绘制网格 渲染: GL45.glBindVertexArray(vao); program.bind(); GL45.glEnableVertexAttribArray(

尝试将vec4(颜色数据)从顶点着色器传递到片段着色器时,片段着色器的结果输出绘制黑色vbo

我尝试过改变绑定程序的位置,使用flat并添加更多的glfwWindow提示。更奇怪的是,着色器和着色器程序没有编译或链接错误

我还直接测试了片段着色器,发现它可以工作,以及绑定数据和绘制网格

渲染:

        GL45.glBindVertexArray(vao);

        program.bind();

        GL45.glEnableVertexAttribArray(0);
        GL45.glEnableVertexAttribArray(1);

        meshes.forEach(mesh -> mesh.draw(vao));

        GL45.glDisableVertexAttribArray(0);
        GL45.glDisableVertexAttribArray(1);

        program.unbind();

        GL45.glBindVertexArray(0);
绘制网格:

        bindData(vao);

        if(beforeDraw != null)
            beforeDraw.call();

        GL45.glDrawElements(GL45.GL_TRIANGLES, num_vertecies,  GL45.GL_UNSIGNED_INT, 0);

        if(afterDraw != null)
            afterDraw.call();
创建着色器程序:

/*Called by constructor where it chooses to detach and delete the previous shaders after this is called*/

        this.program = glCreateProgram();

        for(Shader s : shaders) glAttachShader(program, s.get());

        glLinkProgram(program);

        glValidateProgram(program);

        if(validateProgram(program) == GL_FALSE)
            printProgramErrorLog(program);
创建着色器:

       shader = glCreateShader(getShaderType());

        glShaderSource(shader, source);

        glCompileShader(shader);

        if(validateShader(shader) == GL_FALSE) {
            printShaderErrorLog(shader);
            delete();
        }
顶点着色器:

#version 330 core

layout(location = 0) in vec3 vertex;
layout(location = 1) in float data;

out vec4 object_color;

void main(void){

    gl_Position = vec4(vertex, 1.0f);

    object_color = vec4(0.f, data, 1.0f, 1.0f);

}
片段着色器:

#version 330 core

in vec4 object_color;

out vec4 FragColor;

void main(void){

    FragColor = object_color;

}

预期结果是带有颜色的vbo的输出。

如何指定顶点属性数据的数组?@rabbi76我在draw调用之前调用lambda,该调用执行
GL45.glvertexattributepointer(0,3,GL45.glu FLOAT,false,4*4,0);GL45.glvertexattributepointer(1,1,GL45.GL_FLOAT,false,4*4,2)如果已绑定命名缓冲区对象,则的最后一个参数将被视为该缓冲区中的字节偏移量。因此,对于属性
“data”
来说,参数必须是3*4非常感谢,我想知道,但我不知道它是否通过类型参数自动做到这一点。当然,这并没有解决黑屏问题。顶点坐标的所有分量都在[-1.0,1.0]范围内吗?