как использовать glCopyImage2D

Я пробую что-то как

glEnable(texture_2d)
glBindTexture
glCopyTexImage2D
glDisable(GL_TEXTURE_2D);

Я думаю, что glCopyTexImage2D не будет работать с непитанием два, отображают, таким образом, это - одна проблема; я также попробовал glReadPixels, но это слишком медленно в моих целях.

8
задан genpfault 18 February 2018 в 19:25
поделиться

2 ответа

Если glReadPixels слишком медленный для вас, то glCopyTexImage2D и glCopyTexSubImage2D не будут намного быстрее . На платформах с поддержкой объектов фреймбуфера, таких как iOS, рекомендуемый (то есть более быстрый) способ получить данные изображения, обработанные с помощью графического процессора, в текстуру - использовать эту текстуру в качестве цветового присоединения для объекта фреймбуфера и выполнять рендеринг непосредственно в нем. Тем не менее, если вы все еще хотите использовать этот метод, вот что вам нужно сделать, чтобы исправить это:

Во-первых, вы передаете неверные аргументы в glCopyTexImage2D . Третий аргумент, внутренний формат , вероятно, должен быть GL_RGBA вместо 0 . Если бы вы вызвали glGetError после вызова glCopyTexImage2D , вы, вероятно, получили бы GL_INVALID_OPERATION . См. Справочные страницы OpenGL ES 1.1 для glCopyTexImage2D и glCopyTexSubImage2D .

Во-вторых, как вы уже заметили, glCopyTexImage2D требует, чтобы его аргументы ширины и высоты также были степенью двойки.Правильный способ справиться с этим - выделить изображение текстуры с помощью glTexImage2D (здесь можно передать NULL для пикселей ), затем использовать glCopyTexSubImage2D , чтобы скопировать содержимое фреймбуфера в прямоугольник. Обратите внимание, что glCopyTexSubImage2D не принимает аргумент internalformat - поскольку он обновляет подпрямоугольник текстуры, он использует существующий формат текстуры.

Для записи, glGetTexImage не существует в OpenGL ES 1.1 или 2.0, поэтому вы получаете неявное объявление.

9
ответ дан 5 December 2019 в 15:19
поделиться

Вы можете проверить, поддерживает ли видеокарта non-power of 2 текстуры, если она поддерживает расширение ARB_texture_non_power_of_two. См. Здесь для информации.

2
ответ дан 5 December 2019 в 15:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: