I'm doing a project with assimp.

I got confused with the weird situation for me. I think the both code are exactly same, but the result is different.

Why the codes act differently?

(vertex shader)

#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aNormal;
layout (location = 2) in vec2 aTexCoords;

// declare an interface block; see 'Advanced GLSL' for what these are.
out VS_OUT {
    vec2 TexCoords;
} vs_out;

out vec2 TexCoords;

uniform mat4 model;
uniform mat4 projection;
uniform mat4 view;

void main()
    TexCoords = aTexCoords; ----(1)
    //vs_out.TexCoords = aTexCoords; ----(2) 
    gl_Position = projection * view * model * vec4(aPos, 1.0);

(fragment shader)

#version 330 core
out vec4 FragColor;

in VS_OUT {
    vec2 TexCoords;
} fs_in;

in vec2 TexCoords;

uniform sampler2D texture_diffuse1;
uniform vec3 lightPos;
uniform vec3 viewPos;

void main()
    FragColor = vec4(texture(texture_diffuse1, TexCoords).rgb, 1.0); ----(1)
    //FragColor = vec4(texture(texture_diffuse1, fs_in.TexCoords).rgb, 1.0); ----(2)

If I use the code above, the result is as follows

enter image description here

but, instead of (1) pair, if I use the pair (2), then the result is strange.

enter image description here

Why it happened?

  • 1
    $\begingroup$ if you use (2), do you comment out the first line of your vertex shader (in the main function, the TexCoords assignement)? because if you do, i'm not sure this is legal - you'd have an out variable that never had a value assignment. $\endgroup$ – Tare Dec 15 '17 at 12:23
  • $\begingroup$ I tried both of them. And all result were same. $\endgroup$ – shashack Dec 15 '17 at 12:30
  • $\begingroup$ I added comment the below answer. I'm really sorry about that $\endgroup$ – shashack Dec 15 '17 at 20:58

I don't have enough rep to comment :(


It looks like with (2), fs_in.TexCoords is == vec2(0.0,0.0). Do you keep both in VS_OUT {}/ out VS_OUT {} and out vec2/in vec2 ? If so, it's possible that as both have the same name (TexCoords) the compiler is confused. Try using only one of the two options.

| improve this answer | |
  • $\begingroup$ I tried it, but the result was same. You mentioned fs_in.TexCoords is == vec2(0.0,0.0) but as you can see, the glass color is brown and there are some shading, not perfect black. Maybe it meant that the entire color is darkened by some reason. $\endgroup$ – shashack Dec 15 '17 at 11:46
  • $\begingroup$ To me it looks that there are multiple sub meshes (each one with a set of uvs) Is that right? If that is the case, then you are getting 0,0 but for other reason then. $\endgroup$ – Nacho Dec 15 '17 at 11:56
  • $\begingroup$ You're right. but I don't know the reason. The two pair code are same? no? $\endgroup$ – shashack Dec 15 '17 at 12:09
  • $\begingroup$ Yeah both should work with gl version 330. You could launch your project with RenderDoc or Nvidia Nsight maybe that gives you a clew. $\endgroup$ – Nacho Dec 15 '17 at 12:16
  • $\begingroup$ Oh my god, I found my mistake. I duplicate the same name file other folder, and executed the code. the pairs are same. Sorry to bother you.. $\endgroup$ – shashack Dec 15 '17 at 20:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.