在GLSL中,整数都是0

时间:2014-06-30 21:42:25

标签: java opengl integer lwjgl zero

奇怪的是,我传递给GLSL的每个整数都是0,我发送了一个填充了2s和1s的数组但是全部读了0.整数被发送到OpenGL来选择纹理所以我只得到与0相对应的纹理。这里是我的顶点着色器:

String vertexshader = "#version 330 core"
        + System.getProperty("line.separator")
        + "in vec4 vertexin;"
        + "in vec2 textcoords;"
        + " in int yup;"
        + "uniform mat4 orthogonal;"
        + "out vec2 supertextcoords;"
        + "out int yup1;"
        + "void main(){"
        + "gl_Position = orthogonal * vertexin ;"
        + "supertextcoords = textcoords;"
        + "yup1=yup;"
        + "}";

这是片段着色器:

String fragmentshader="#version 330 core"
        + System.getProperty("line.separator")
        +"out vec4 outcolor;"
        +"flat in int yup;"
        +"in vec2 supertextcoords;"
        +"uniform sampler2D texture1;"
        +"uniform sampler2D texture2;"       
        +"void main(){"
        +"vec4 texturev1=texture2D(texture1, supertextcoords);"
        +"vec4 texturev2=texture2D(texture2, supertextcoords);"
        +"vec4 final=texture2D(texture2, supertextcoords);"
        + "if(yup==1){final=texturev1; outcolor=final;}else if(yup==0){"
        +"final=texturev2; outcolor=final;}else{"
        + "final=vec4(0,1,0,0); outcolor=final;}"

我发送整数的方式是

glEnableVertexAttribArray(2);
glVertexAttribIPointer(2,1,GL_INT,0,(vertices.length+textcoord.length)*4);
glDrawArrays(GL_TRIANGLES, 0, vertices.length/4);
glDisableVertexAttribArray(2);

应该将10个数字发送到OpenGL以获取多维数据集。每个三角形1个数字(缺少背面)来决定每个尺寸的纹理。每隔一个数字与第一个数字相同,以使纹理相等。但是只使用了texturev2。我想要进行这个实验的纹理是vec4(0,1,0,0);因为数字是2并且落在映射范围之外。为什么?如果您需要更多来源请求。

1 个答案:

答案 0 :(得分:1)

在您的顶点着色器中,您有yup1作为输出,但在片段着色器中没有相应的yup1作为输入。

除了精确的符号匹配之外,OpenGL没有办法在程序部分之间链接非块in / out声明。未链接的输入在运行时没有任何特别有用的东西。

在片段着色器更改

flat in int yup;

flat in int yup1;

以便它匹配顶点着色器中的out int yup1声明。