When I try to render a model, this appear with a solid color instead the texture.
This is my GLSL fragment code
#version 330
in vec2 in_uv;
out vec3 out_Color;
uniform sampler2D texture0;
void main(void)
{
out_Color = texture( texture0, in_uv).rgb;
}
GLSL vertex code
#version 330
layout(location=0) in vec4 in_Position;
layout(location=1) in vec2 in_TexCoord;
out vec2 out_uv;
uniform mat4 ModelMatrix;
uniform mat4 ViewMatrix;
uniform mat4 ProjectionMatrix;
void main(void)
{
gl_Position = (ProjectionMatrix * ViewMatrix * ModelMatrix) * in_Position;
out_uv = in_TexCoord;
}
I load the texture with SOIL:
GLuint LoadSoilTexture(const char *filename,int w, int h)
{
ifstream in(filename,ios::in);
if(!in)
{
cerr << "No se puede abrir el archivo" << filename << endl;
exit(EXIT_FAILURE);
}
int size = w*h*4;
char* data = new char[size];
in.read(data, size);
in.close();
GLuint textureID = SOIL_load_OGL_texture(
"C:\Crate.bmp",
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y
);
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_BGR, GL_UNSIGNED_BYTE, data);
delete(data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glGenerateMipmap(GL_TEXTURE_2D);
return textureID;
}
I obtain the uniform texture location:
Texture0UniformLocation = glGetUniformLocation(ShaderIds[0],"texture0");
TextureId = LoadSoilTexture("C:/Crate.bmp",256,256);
glBindTexture(GL_TEXTURE_2D, TextureId);
glActiveTexture(GL_TEXTURE0);
glUniform1i(Texture0UniformLocation, 0);
It took several hours looking for the problem and can not find the solution, I hope someone can help me.