Размышляя о том как организовать рендер с двойной буферизацией родил вот такой псевдокод ниже. Сильно смущают большие накладные расчеты. Можно конечно попробовать заменить tileGfxBuffer на связный список чтобы при отрисовке пропускать незадействованные тайлы, но не уверен что это сильно поможет.
Возможно есть элегантный и быстрый способ оргинизовать тайловый рендер, поделитесь знанием.
- - - Добавлено - - -Код:; ===================================================================== ; data ; a pointer to tileGfx in the tileGfxBuffer currentTileGfxPtr: .word TEMP_ADDR ; a table of tileGfx pointers tileGfxPtrTable: .storage ROOM_TILES_W * ROOM_TILES_H * ADDR_LEN, 0 ; an array of tileGfx tileGfxBuffer: .storage TILE_GFX_MAX * TILE_GFX_LEN, 0 ; struct tileGfx: ; tilePtr - a pointer to a tile in tileGfxPtrTable. if it's 0, that means tileGfx is vacant ; tileGfxData - graphics data. if it's empty, that means this tile needs to be erased from the screen. ; ===================================================================== ; tile rendering routine currentTileGfxPtr = an address of the first tileGfx in tileGfxBuffer that has tilePtr = 0 for every visible sprite for an every sprite tile calculate a tile index N in tileGfxPtrTable if tileGfxPtrTable[N] == 0: tileGfxPtrTable[N] = currentTileGfxPtr currentTileGfxPtr->tilePtr = &tileGfxPtrTable[N] draw a tile w/o a mask into currentTileGfxPtr->tileGfxData currentTileGfxPtr = an address of the next tileGfx in tileGfxBuffer that has tilePtr = 0 else: draw a tile with a mask into currentTileGfxPtr->tileGfxData for every tileGfx in tileGfxBuffer if tileGfx.tilePtr == 0: continue if tileGfx.tileGfxData is not empty: draw tileGfxData on the screen. tileGfx.tileGfxData = empty else: erase tile on the screen. tileGfx->tilePtr = 0 ; set 0 a tileGfx pointer in tileGfxPtrTable tileGfx.tilePtr = 0
Уточню что tileGfx.tileGfxData = empty не означает стирание данных, а только маркировка их как стертых.
Структуру tileGfxData не привожу так как до конца ещё не определился, но там как минимум есть флаг говорящий что данные есть или данных нет.
- - - Добавлено - - -
Поясню как это работает если код выше не очень понятен.
У нас есть таблица адресов на структуры tileGfx.
Эта таблица имеет столько элементов сколько нужно тайлов на экране.
У нас есть массив tileGfxBuffer из элементов tileGfx.
Отрисовка состоит из двух этапов.
Первый это заполнить массив tileGfxBuffer данными спрайтов которые хотим отрисовать.
На втором этапе мы копируем данные из tileGfxBuffer на экран, или стираем с экрана старые спрайты.
Таблица tileGfxPtrTable нужна что быстрее найти элемент tileGfx в массиве tileGfxBuffer в который нужно скопировать данные спрайта.




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
