Як завантажити зображення BACK з OpenGL?

Мені вдалося завантажити зображення в OpenGL як текстуру (я використовую Gdk :: Pixbuf з бібліотеки GTKmm), але я не знаю, як отримати модифіковане зображення з OpenGL і завантажити його в Gdk :: Pixbuf ...

Я хочу змінити зображення в OpenGL і зберегти їх на жорсткому диску.

Є код:

Glib::RefPtr pixmap = Gdk::Pixbuf::create_from_file("image.jpg");
GLuint texture[1];
glBindTexture(GL_TEXTURE_2D, texture[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pixmap->get_width(), pixmap->get_height(), 0,      GL_RGB, GL_UNSIGNED_BYTE, pixmap->get_pixels() );
4
Ласкаво просимо до StackOverflow, сподіваюсь, ви прочитали FAQ .
додано Автор Christian Rau, джерело

3 Відповіді

Поки ви не використовуєте OpenGL ES, але справжній робочий стіл OpenGL, ви можете просто скористатися glGetTexImage .

4
додано

Поверніть текстурований квадрат до фреймбуфера, а потім glReadPixels() .

4
додано
@Damon Дані текстури можна змінити, використовуючи рендеринг до текстури, тобто візуалізацію до буферу з доданою текстурою. Тому в деяких випадках зчитування даних текстури має сенс.
додано Автор Gigo, джерело
Оскільки він не позначив його OpenGL ES, нанесення текстурированного квадрата не є гарною альтернативою просто використанню glGetTexImage .
додано Автор Christian Rau, джерело
@Damon Можливо.
додано Автор Christian Rau, джерело
@ ChristianRau: Але оскільки OP заявив, що "хочемо змінити зображення в OpenGL", glGetTexImage, ймовірно, не те, що потрібно, тому що він просто буде переглянути раніше завантажене текстурне зображення (це одна з функцій, про яку я ніколи не зрозумів чому вони існують)? Щоб прочитати щось "модифіковане", то, як запропонував genpfault, потрібно щось на зразок нанесення текстурованого кваду (з якоюсь "операцією", мабуть, шейдером).
додано Автор Damon, джерело
@Gigo: Може бути, це важко сказати, оскільки ми не знаємо, що точно бажає OP ("модифікувати" не дуже конкретно). Звичайно, ви могли б, наприклад, малювати геометрію поверх існуючого зображення, це добре. Але звичайна ідея "модифікувати зображення" - це щось інше, це, як правило, передбачає читання зображення та застосування певного згортка. Читання та запис до одного зображення невизначено (за винятком використання атомних операцій, які є повільними або використовують синхронізацію залежності з розширенням постачальника). Що зазвичай означає, що ви захочете переглянути текстуру різної , а не одну.
додано Автор Damon, джерело

Якщо ви хочете уникнути дзвінка, ви можете створити буфер і прикріпити текстуру до вкладки кольору, а потім скористатися glReadPixels

0
додано
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147