|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.04.2013, 23:41 | #1 |
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
Вопросы по ГЛ
Недавно просматривал копипастил код загрузки текстуры и обнаружил вот такой вызов.
glPixelStorei(GL_UNPACK_ALIGNMENT,1 ); Это что и для чего? Что за распаковочное выравнивание для хранящихся пикселей? |
29.04.2013, 00:29 | #2 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
29.04.2013, 07:15 | #3 |
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
я так и думал что это выравнивание, но для чего оно?
pixel row - это три(четыре) байта RGB(A) и их вариации ? почему при загрузке изображения в текстуру выравнивают по байту ? по умолчанию стоит значение 4, да? |
29.04.2013, 08:03 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
выравнивание строки текстуры, по умолчанию стоит 4, и скажем если у нас 24 битная текстура, то надо делать дополнительные телодвижения, чтоб обеспечить выравнивание.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
29.04.2013, 09:06 | #5 | |
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
Цитата:
Смотрите. Файл изображений имеет формат [ R8 G8 B8 ] V для: glPixelStorei(GL_UNPACK_ALIGNMENT,1 ); V имеем плотно упакованные цвета: Текстура в видео памяти [R8 G8 B8] [ R8 G8 B8 ] [ R8 G8 B8 ]... V а если: glPixelStorei(GL_UNPACK_ALIGNMENT,4 ); V то: Текстура в видео памяти [R8 G8 B8 0] [ R8 G8 B8 0] [ R8 G8 B8 0]... Так? Видно что у нас появляется избыточный байт на хранение, если битность не кратна 4 байтам. Но, ядра в гпу оперируют векторами из четырех компонентов float типа. V Вектор4 для счета в гпу имеет вид [ f32 f32 f32 f32] И мне кажется вот это [R8 G8 B8 0] будет куда быстрее ложится в [ f32 f32 f32 f32], чем вот это - [ R8 G8 B8 ] ? |
|
29.04.2013, 10:05 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
вы не знакомы с выравниванием данных в памяти?
вы сейчас привязываетесь к формату пикселя, а он не причем, я говорю о выравнивании начала каждой строки битмапа. скажем одна строчка занимает 3 байт имеем(D данные, X выравнивание), без выравнивания: D D D D D D с выравниванием 2/4: DDDX DDDX с выравниванием 8: DDDXXXXX DDDXXXXX а параметр существует для того чтоб OpenGL знать дают ему данные с выравниванием или без, чтоб коррекно их прочесть. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
29.04.2013, 11:00 | #7 | ||
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
Цитата:
Выравнивание структур описывающие цвет по адресу кратному 1, 4 ? именно его я по-моему и показывал, у вас что-то схожее. У меня 0 – у вас Х. Цитата:
Просто каждый кратный ширине рисунка пиксель есть перенос по Y. Я же говорю о выравнивании именно структур описывающих цвет в битмапе, каждого пикселя. |
||
29.04.2013, 11:13 | #8 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
вы говорите о формате пикселя RGBX. как бы процессор не умеет работать с 3 байтовыми данными(ох вспоминаю работу с FAT12 на асме...), приходится читать 4 байта*, и выделять нужные байты. * причем учтем кратность шины адреса, откуда выравнивание и пошло, а именно что если данные лежат в двух областях согласно кратности, процессор будет вынужден сделать два считывания из памяти вместо одного.(он лишь откидывает не нужное, и берет нужное) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
29.04.2013, 19:35 | #9 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
|
29.04.2013, 19:36 | #10 | |
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
Цитата:
glPixelStorei(GL_UNPACK_ALIGNMENT,1 ); Текстура без альфы RGB выровненная по 1 = 24 бита = 3 байта. Пусть хоть первый пиксель растра и находиться на выровненном адресе, последующие как мне представляется - нет. Я не пойму эта команда это приказ как хранить текстуру или же в каком формате будут предоставлены данные, а хранить ГЛ будет в каком укажешь в переменной интернал формат ? |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопросы | Syltan | Общие вопросы C/C++ | 2 | 13.11.2009 19:32 |
Вопросы по if, else? | molodoyy | Общие вопросы C/C++ | 1 | 25.10.2008 18:55 |
вопросы | MAcK | Win Api | 7 | 21.07.2007 18:08 |