OpenGL纹理偏移问题

时间:2014-11-09 19:54:22

标签: c opengl 3d textures sdl-2

我遇到了纹理行被偏移的问题。作为测试,我从/向GL_RGBA创建512x4纹理。 sizeof(_color)输出4.它应该是X上从黑色到蓝色的渐变。它看起来像是从偏移中读取的,因为它有时以损坏的结果结束,持续约1/3一排(宽度)。

如果我更改片段着色器以在红色和绿色通道上输出UV坐标,我会得到看起来正确设置的UV坐标,例如0,0(TL)1,0(TR), 0,1(BL)和1,1(BR)。无论如何,我无法看到这是一个紫外线问题。

我在OSX上使用SDL2,这可能是问题的根源。结果在Linux / SDL2上很好,所以我对于什么状态变量可能导致这种情况完全无能为力。

OpenGL texture offset

typedef struct {
    unsigned char r,g,b,a;
} _color;

glGenTextures(1, &self->id);
glBindTexture(GL_TEXTURE_2D, self->id);

_color* c = (_color*)malloc(sizeof(_color) * 512 * 4);
_color* pc = c;
for( int y = 0; y < 4; y++ )
    for( int x = 0; x < 512; x++ ) {
        pc->r = 0;
        pc->g = 0;
        pc->b = (u_char)((float)x / (float)512 * 255.0);
        pc->a = 255;
        pc++;
    }

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, (void *)c);

printf("glGetError = %d\n", glGetError()); // Outputs no error

free(c);

UV映射到gl_FragColor(红色= U,绿色= V) UV output

纹理查找更改为:texture2D(u_texture,vec2(v_uv.x,0.0)); (被迫为0) V (or UV.y) coordinate set to 0

1 个答案:

答案 0 :(得分:1)

可能是对齐问题。在上传纹理数据之前,使用glPixelStore设置正确的GL_UNPACK_ ...参数。