Получить текстурные координаты от шейдера до стороны процессора - PullRequest
0 голосов
/ 11 июня 2018

Я ищу решение для извлечения текстурных кордов, которые хранятся на стороне GPU.

, который является атрибутом (in) - текстурные корды, которые передаются в шейдер через плавающий буфер

  mCubeTextureCoordinates.position(0);
  GLES20.glVertexAttribPointer(mTextureCoordinateHandle, GLfields.TEXTURE_COORD_DATASIZE, GLES20.GL_FLOAT, false,
            0, mCubeTextureCoordinates);

в glsl-программе

attribute vec2 a_TexCoordinate;

Могу ли я получить vec2-данные на стороне процессора на каком-то этапе, например ..

int textAttr = GLES20.glGetAttribLocation(mProgramHandle, "a_TexCoordinate");

GLES20.glGetFloatv(textAttr, xy, 0);

, где xy - этоa float-vector (float [] xy = new ...)

Всего лишь предположение, что массив не заполнен какими-либо данными в соответствии с отладчиком, но я думаю, вы поняли - получите текстуру-вектор-координатуот графического процессора

1 Ответ

0 голосов
/ 11 июня 2018

Вы используете glVertexAttribPointer с массивами вершин на стороне клиента .Насколько мне известно, это не обеспечивает способ считывания данных.

Однако этот режим использования долгое время считался устаревшим в пользу объектов буфера вершин объекты массива вершин ).Грубо говоря, шаблон использования таков:

  • Создание VBO (это выделяет память на GPU)
  • Заполнение VBO данными вершин
  • Использование glVertexAttribPointer и glEnableVertexAttribArray для привязки данных VBO к атрибуту вершины

VBO позволяет читать его содержимое через glGetBufferSubData.

Посмотрите на этидругие вопросы для получения дополнительной информации:

Кроме того, getFloatv и друзья используются для получения значений параметров OpenGL (например, текущего режима наложения), а не значений атрибутов вершин.

...