Тема: raycasting
Показать сообщение отдельно
Старый 30.12.2013, 21:55   #60
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: raycasting

В режиме VGA ничего перебрасывать не надо, точней там идет отображение адресного пространства, ты пишешь в определенные адреса как в обычное ОЗУ, а система сама перегоняет это в видеопамять.

Ты видимо неправильно SDL использовал. Нужно создать фрейм буфер в ОЗУ через обычный malloc например и обращаться к нему как к двумерному массиву:
uint32_t* buffer = ( uint32_t* )malloc( 320 * 240 * sizeof( uint32_t ) );
buffer[ 100 ][ 200 ] = 0xaabbccdd; // обращение как в 2д массиву (порядок: высота, ширина)
*( buffer + 100 * 320 + 201 ) = 0xaabbccdd; // обращение посредством адресной арифметики (тоже самое по сути)
И затем достаточно сделать только ОДИН вызов SDL чтобы он весь буфер скопировал в видеопамять и вывел на экран. Если ты будешь вызывать каждый раз чтобы записать по одному пикселу то конечно всё будет очень медленно.

Вот я у себя целый класс FrameBuffer сделал чтобы работать с фреймами внутри ОЗУ.

ЗЫ: Размеры массивов в С++ ограничены, поэтому именно через malloc / free лучше с буферами работать.
(Offline)
 
Ответить с цитированием