Проблема текстуры OpenGL ES, 4 повторяющихся столбца и горизонтальные линии (Android) - PullRequest
2 голосов
/ 29 января 2011

У меня есть буфер с текстурой изображения RGB (или RGBA), и я хочу отобразить его на моем устройстве Android со следующим кодом. Я использую OpenGL от NDK.

glTexImage2D(GL_TEXTURE_2D,
             0,
             GL_RGBA,
             256,
             256,
             0,
             GL_RGBA,
             GL_UNSIGNED_BYTE,
             this->pBuffer);

Я также установил PixelFormat со стороны Java с помощью:

this.getHolder().setFormat(PixelFormat.RGBA_8888);
this.setEGLConfigChooser(8, 8, 8, 8, 0, 0);
setRenderer(new MyRenderer());

Изображение отображается, но в нем есть четыре столбца (идентичных и содержащих распознаваемые части исходного изображения), и по всему изображению горизонтальные линии.

В чем может быть проблема?

Исходное изображение:

Original Image

Как это выглядит с моим кодом:

How it looks with my code

1 Ответ

2 голосов
/ 30 января 2011

Похоже, что размер изображения не 256 на 256, а около 150 пикселей в ширину.Ваша текстура должна иметь степень 2 больших, но если вам нужно загрузить меньшую текстуру, вы можете использовать glTexSubImage2D :

glTexSubImage2D(GL_TEXTURE_2D,  /* target */
            0,      /* level */
            0,      /* xoffset */
            0,      /* yoffset */
            150,        /* width */
            256,        /* height */
            GL_RGBA,    /* format */
            GL_UNSIGNED_BYTE,   /* type */
            this->pBuffer); /* data */

В начальном вызове glTexImage2D просто передайте NULL вместопиксельного буфера.Попробуйте что-то вроде этого, посмотрите, имеет ли это значение.

Если вы используете glDrawTexiOES для рисования текстуры, то для обрезки меньшей текстуры используйте GL_TEXTURE_CROP_RECT_OES:

int rect[4] = {0, imageHeight, imageWidth, -imageHeight};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);
glDrawTexiOES(0, 0, 0, windowWidth, windowHeight);
...