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?