views:

30

answers:

1

I'm having issues trying to get a texture loaded into VRAM. I'm using OpenGL on Mac OS X. I have geometry that I've successfully renderer by passing a color into my fragment shader. However, as soon as I try to load a texture, no geometry gets rendered and I can only see the background color. Here's my texture loading code:

char imageData[27] = {
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
};

glActiveTexture(GL_TEXTURE0);
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 3, 3, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);

GLint uniform_location = glGetUniformLocation(bundle->GetShaderProgramID(), "texture");
std::cout << uniform_location <<std::endl;
glUniform1i(uniform_location, 0);

glEnable(GL_TEXTURE_2D);

And here's my fragment shader code:

uniform sampler2D texture;

void main()
{
    vec2 coord = vec2(0.5, 0.5);

    //gl_FragColor = vec4(coord, 0.0, 1.0);

    gl_FragColor = vec4(texture2D(texture, coord).rgb, 1.0);
}

I realize some of this code probably isn't necessary, but I've been trying everything I can think of.

Thanks.

+4  A: 

The most likely cause is that you don't have mipmapping off, and you did not specify mipmapping levels. So your texture is incomplete.

To turn it off on this texture object (to be done around the glTexImage2D call)

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

You do however realize that "everything breaks down" does not help at all figuring out what you see ? In general, a screenshot is worth a thousand words, but short of that, at least describing how it fails would help.

Bahbar
That's exactly my problem. I can't believe it was that simple. I've been working at this for two days now. What I meant to say above is that the render window only displays the background color and nothing else, and I'll keep your suggestion in mind next time I ask a question. Oh, and you might want to edit your answer so it has GL_TEXTURE_2D as the first argument. Thanks again.
helixed
@helixed: you're right. done.
Bahbar
@helixed: also, only the background color is weird, as when you have incomplete textures, you should see the polygons as if the texture was not enabled. Was the background color black ? (it's also a good idea to pick a visibly different background colors)
Bahbar
Yes, the background color was black. I didn't realize the default line color was black in OpenGL. I'll change the background color the next time I have a problem.
helixed