Download Game! Currently 116 players. Last logged in:SetutuUrsaSirdaFloppy

Blitzer's Blog >> 73122

Back to blogs index
Posted: 01 Nov 2026 21:15 [ permalink ]
Loogisin ja turhautumista parhaiten estC$vC$ jC$rjestys on rakentaa
arkkitehtuuri alimmasta abstraktiotasosta ylC6spC$in. Et voi testata QuickJS:n
piirtorutiineja, jos OpenGL-putki ei ole pystyssC$, etkC$ voi testata
OpenGL:C$C$, jos C++-kC$C$ntC$jC$ ja JNI-silta sakkaavat.
TC$ssC$ on ehdottamani 5-vaiheinen taistelusuunnitelma MVP:n rakentamiseen:
1. Perustus ja JNI-silta (CMake + NDK + GLSurfaceView)
 * Luodaan uusi hakemistorakenne ja tC$ysin minimaalinen Android-projekti,
jossa on vain yksi Activity ja GLSurfaceView.
 * MC$C$ritetC$C$n CMakeLists.txt ja NDK CI-konttisi Gradle-kC$C$nnC6stC$
varten.
 * Rakennetaan C++ -puolelle natiivifunktiot (JNI), jotka reagoivat Androidin
elinkaareen (onSurfaceCreated, onDrawFrame). Varmistetaan, ettC$ C++ saa
yksinkertaisen OpenGL-tyhjennysvC$rin (esim. punaisen ruudun) nC$kymC$C$n
puhelimessa. TC$mC$ todistaa, ettC$ tyC6kaluputkesi on ehjC$.
2. RenderC6intimoottori (OpenGL ES 2.0 & C-Framebuffer)
 * Varataan C++-puolella kiinteC$ raakamuistialue (esim. uint32_t*
framebuffer), joka edustaa virtuaalista nC$yttC6C$.
 * Kirjoitetaan minimaaliset vertex- ja fragment-shaderit.
 * Luodaan OpenGL-tekstuuri, jota pC$ivitetC$C$n glTexSubImage2D -kutsulla
suoraan tuosta C-puskurista joka framella. Testataan moottoria generoimalla
C++:lla puskuriin staattista kohinaa ja katsotaan, ettC$ se renderC6ityy 60fps
ilman muistivuotoja.
3. Aivot (MQUICKJS-NDK-RUNTIME)
 * Ladataan QuickJS:n C-lC$hdekoodit ja kytketC$C$n ne mukaan
CMake-kC$C$nnC6kseen.
 * Alustetaan JSRuntime ja JSContext suoraan C++-koodin sisC$llC$.
 * Exposetetaan JS-kontekstiin natiivi "Hauki-rajapinta" (esim.
display.setPixel(x, y, color)), joka manipuloi suoraan vaiheen 2 C-puskuria.
 * Ajetaan kovaakoodattu JS-skripti, joka animoi ruutua. Nyt meillC$ on
toimiva, JNI:n yli kulkeva nollariippuvainen JS-grafiikkakone.
4. Hermosto (CONCURRENCY-PIPELINE)
 * Koska emme saa blokata renderC6intisC$iettC$, luodaan taustalle erillinen
POSIX-tyC6lC$issC$ie (std::thread).
 * Toteutetaan C++11 std::atomic -pohjainen SPSC-jonorakenne (Single-Producer,
Single-Consumer).
 * Ohjataan Androidin kosketustapahtumat (panorointi, zoomaus) lock-free
-jonon lC$pi taustasC$ikeen QuickJS-moottorille.
5. Muisti ja Avaruus (SQLITE-STATE-STORE & INFINITE-WORKSPACE-ENGINE)
 * KC$C$nnetC$C$n SQLite mukaan NDK-kirjastona.
 * Rakennetaan taustasC$ikeeseen logiikka, joka lukee viewportin
Z/X/Y-koordinaattien perusteella tietokannasta oikeat "chunkit".
 * YhdistetC$C$n tC$mC$ LRU-vC$limuistiin: kun ruutua raahataan, uudet chunkit
ladataan SQLitestC$ taustalla, puretaan JS-tilaan, ja pusketaan lopuksi
rengaspuskurin kautta pC$C$sC$ikeen OpenGL-tekstuuriin.
Aloitetaanko vaiheesta 1, eli luodaan puhtaalta pC6ydC$ltC$ JNI- ja
CMake-rakenteet sisC$ltC$vC$ projekti CI-konttiisi?