Opengl 将纹理传递到着色器

Opengl 将纹理传递到着色器,opengl,glsl,Opengl,Glsl,我一直在试图弄清楚如何将纹理发送到着色器,但我搞不清楚。我的代码看起来不错,但我的第二个纹理是黑色的 void setShaders() { glEnable (GL_TEXTURE_2D); v2 = glCreateShader(GL_VERTEX_SHADER); f2 = glCreateShader(GL_FRAGMENT_SHADER); load_shader(v2,"a.vert"); load_shader(f2,"a.fr

我一直在试图弄清楚如何将纹理发送到着色器,但我搞不清楚。我的代码看起来不错,但我的第二个纹理是黑色的

void setShaders() {

    glEnable (GL_TEXTURE_2D);
    v2 = glCreateShader(GL_VERTEX_SHADER);
    f2 = glCreateShader(GL_FRAGMENT_SHADER);    


    load_shader(v2,"a.vert");
    load_shader(f2,"a.frag");

    glCompileShader(v2);
    glCompileShader(f2);

    p = glCreateProgram();

    glAttachShader(p,v2);
    glAttachShader(p,f2);

    GLubyte* textura=LoadImageToTexture("d.jpg");
    GLubyte* textura2=LoadImageToTexture("n.jpg");

    GLuint texturaID[2];
    glGenTextures(2, texturaID);

    glBindTexture(GL_TEXTURE_2D, texturaID[0]);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA, w, h, 0, GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)textura );


    glBindTexture(GL_TEXTURE_2D, texturaID[1]);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D,1,GL_RGBA, w, h, 0, GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)textura2 );


    glLinkProgram(p);
    glUseProgram(p);
    GLint baseImageLoc = glGetUniformLocation(p, "tex");
    GLint normImage = glGetUniformLocation(p, "norm");
    glUniform1i(baseImageLoc, 0);
    glUniform1i(normImage, 1);

    glActiveTexture(GL_TEXTURE0 + 0);
    glBindTexture(GL_TEXTURE_2D, texturaID[0]);

    glActiveTexture(GL_TEXTURE0 + 1);
    glBindTexture(GL_TEXTURE_2D, texturaID[1]);

}
着色器 [顶点]

void main()
{

    gl_TexCoord[0] = gl_MultiTexCoord0;
    gl_Position = ftransform();
}

uniform sampler2D tex;
uniform sampler2D norm;

[fragment]
void main()
{
    vec4 color = texture2D(tex,gl_TexCoord[0].st);
    vec4 color2 = texture2D(norm,gl_TexCoord[0].st);
    gl_FragColor = color*color2;
}
编辑魔鬼来了

   glTexImage2D(GL_TEXTURE_2D,**1**,GL_RGBA, w, h, 0, GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)textura2 );

而不是1它应该是0。

您的第二个纹理似乎是以错误的方式创建的:

glTexImage2D(GL_TEXTURE_2D,1,...);
应该是

glTexImage2D(GL_TEXTURE_2D,0,...);
至于你的第二个问题,即使我不确定是否正确;注释行时,实际上将统一值保留为其默认值,即0。因此,净效应与

glUniform1i(baseImageLoc, 0);

你的GLSL
#版本
指令在哪里?那么重要吗?我添加了#版本120,但仍然一无所获