Как нарисовать данные (из gleReadPixels) в стандартный (отображаемый) farmebuffer в OpenGLES 2.0 - PullRequest
1 голос
/ 23 апреля 2020

Извините, если я спрашиваю что-то, что уже доступно. До сих пор я не мог отследить. Я прочитал подробности о FBO и получил четкое представление о буферизации вне экрана. http://mattfife.com/?p=2813 - это хорошая небольшая статья о FBO. Во всех примерах, включая этот, я не вижу подробностей о том, как записать данные, полученные с помощью вызова glReadPixels, в стандартный кадровый буфер дисплея. Извините, если я что-то упустил глупо. Я проявил должную осмотрительность, но не смог получить ни одного примера.

Примечание: я использую OpenGLES 2.0, поэтому я не могу использовать такие вызовы, как glDrawPixels и т. Д. c.

По сути, мое требование иметь внеэкранную буферизацию. Потому что я работаю с субтитрами / субтитрами, в которых прокрутка субтитров должна будет повторять рендеринг строк до тех пор, пока эти go не выйдут из области отображения субтитров.

Я получил предложение использовать FBO и связать текстуру создан для основного кадрового буфера по умолчанию.

Моя фактическая потребность - заголовок / субтитры (которые могут быть в режиме прокрутки). Предположим, что в первый раз, когда я показывал это ниже, это номер строки - 1 Это номер строки - 2 Это номер строки - 3

После прокрутки, затем я хочу иметь, Это номер строки - 2 Это номер строки - 3 Это номер строки - 4

Во второй раз, когда Я хочу сделать, мне придется обновить содержимое в закадровом FBO? Это будет переписать строку-2 и строку-3 на новой позиции, удалить строку-1 и добавить строку-4.

1 Ответ

1 голос
/ 23 апреля 2020

Создайте кадровый буфер с вложением текстуры ( см. Прикрепление изображений ). Примечание glFramebufferTexture2D поддерживается OpenGL ES 2.0.
Цветовая плоскость кадрового буфера может быть загружена в ЦП с помощью glReadPixels, так же как и при использовании Renderbuffer . Но рендеринг хранится в 2D Texture .
. Привязка текстуры и кадрового буфера по умолчанию и рендеринг квадрата пространства экрана с текстурой на нем.

Визуализация квадрата (GL_TRIANLGE_FAN) с координатами вершины (-1, -1), (1, -1), (1, 1), (-1, 1) и использование следующего простого Шейдер OpenGL ES 2.0:

Вершинный шейдер

attribute vec2 pos;
varying vec2 uv;

void main()
{
    uv = pos * 0.5 + 0.5;
    gl_Position = vec4(pos, 0.0, 1.0);
}

Фрагментный шейдер

precision mediump float;

varying vec2 uv;
uniform sampler2D u_texture;

void main()
{
    gl_FragColor = texture2D(u_texture, uv);
}
...