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. проекционной матрицы в вершинном шейдере и использовать выборочную выборку текстуры выборки в шейдере фрагментов.