1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-06-25 22:09:35 +00:00

StarCraft fix.

This commit is contained in:
Sergey Lipskiy 2018-12-01 23:03:20 +07:00
parent 2decda55f3
commit 729bf94c5a
2 changed files with 16 additions and 0 deletions

View File

@ -98,3 +98,14 @@ Blast Corps:
Решение: При вызове setcolorimage, если color image == depth image, вызывать depthBufferList().saveBuffer, который
при необходимости пересоздаст depth buffer.
StarCraft:
Выяснял причину страшных глюков в LLE. Обнаружил прекрасное.
Игра выделяет текущий буфер кадра по адресу 0x00176540. Конец буфера 0x0019bd3f
Запускается BgCopy, которая рисует подложку на весь экран. Адрес 8 битной картинки для отрисовки 0x00189140
Т.е. картинка находится посреди буфера, который команда BgCopy должна заполнить этой картинкой.
Поскольку картинка 8 битная а буфер 16 битный, на консоли всё работает: читаем картинку из середины буфера и рисуем ее же в начале.
При отрисовке картинка конечно же затирается, но консоль читает и рисует ее по частям и затираемые данные на этот момент уже не нужны.
Плагину сносит крышу проверка на валидность буфера. В HLE CheckForFrameBufferTexture для задников не вызывается,
а _loadBGImage игнорирует попадание адреса картинки в буфер если картинка 8 битная.

View File

@ -351,6 +351,11 @@ bool CheckForFrameBufferTexture(u32 _address, u32 _width, u32 _bytes)
}
}
if (gDP.otherMode.textureLUT == G_TT_RGBA16) {
bRes = false;
break;
}
if (pBuffer->m_cfb) {
fbList.removeBuffer(pBuffer->m_startAddress);
bRes = false;