Android NDK OpenGL ES 2.0 Шаг текстуры

Есть ли способ сгладить текстуру в opengl es 2.0 с шагом, который отличается от его ширины. Обычно я исправлял это, используя PBO или настраивая GL_PACK_ROW_LENGTH через glPixelStore. Однако, похоже, ни GL_PIXEL_UNPACK_BUFFER для привязки буфера, ни GL_PACK_ROW_LENGTH не существует на платформе Android.

glTex (Sub) Image2D не поддерживает это.

Любые советы?

Ответ 1

Поскольку я ответил на это в комментарии, вот более прямой ответ:

// width and height is 256 and max is 512
// texture coordinates
float uMax = (width / max);
float vMax = (height / max);

_texCoords[0] = 0.0; _texCoords[1] =  vMax;
_texCoords[2] = uMax; _texCoords[3] =  vMax;
_texCoords[4] = 0.0; _texCoords[5] =  0.0;
_texCoords[6] = uMax; _texCoords[7] =  0.0;

Теперь используйте эти texcoords для рендеринга, и вы можете наклеить текстуру 256x256 в буфере 512x512. Ширина и высота, которые вы хотите использовать, могут быть любого размера, равного или меньшего максимального размера.

Ответ 2

Цитата @Halsafar

В некоторых сценариях это можно решить с помощью настройки координат текстуры.


Предположим, что у меня есть текстура 512 x 512, размещенная на 512 * bitdepth

но данные, которые я хочу использовать, разбиты на 256 * bitdepth

Я продолжаю и glSubTexImage2D по-прежнему, но настраиваю текстурные координаты 0 на (256/512)

вместо 0 до 1.

Другими словами удалить часть текстуры, я не использую.

Ответ 3

это может показаться немного излишним (или даже не настолько подходящим для вашего ожидания), но, возможно, вы могли бы просто использовать растеризатор и объекты Frame-buffer: создайте FBO с текстурой в качестве цветового буфера и... нарисуйте в нем несколько текстурированных квадратиков с помощью тривиального шейдера вершин + фрагмента: где вы бы использовали простой Ortho. проекционной матрицы в вершинном шейдере и использовать выборочную выборку текстуры выборки в шейдере фрагментов.