"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell
[Emscripten] C++ kompilerat till JavaScript.
Visa signatur
Skrivet av gibbon_:
Fråga gärna om det är något ni undrar.
Måste man anpassa projektet något för att kompilera om den eller är det magi som bara fungerar rakt av?
Citera flera
Citera
Skrivet av iXam:
Måste man anpassa projektet något för att kompilera om den eller är det magi som bara fungerar rakt av?
I mitt fall utgick jag ifrån min linux-port, och bland det första jag fick ändra på där var att stega bak till glfw2 hellre än glfw3. Detta för att glfw är något som inte kan bara fungera av magi, någon måste mappa tex mouse events som tricklar ner i DOMen till de event jag sen pollar för när jag använder biblioteket. Lyckligtvis har några redan gjort det jobbet, och man får det med Emscripten, men endast för glfw2 än så länge. Men ja, använder man sig bara av något som stödjs av Emscripten, även något med lite klurigare sidoeffekteer som glfw, då fungerar det bara rakt av. Vidare fick jag dra in en egen version av zlib (som libpng beror på) och kompilera det själv, för det var något jag tidigare berodde på att det fanns tillgängligt i den toolchain man använde. Konstigt nog får man med en header fil för zlib i Emscripten men nej inte resten.. Jag kan ha missat något där.
Det större problemet jag hade var att mitt projekt är multitrådat. Tre trådar, specifikt, (render, main och UI) alla med varsin main loop. Och problemet där är att browsers inte tycker om main loopar i javascript. (javascript måste avsluta sin exekvering) Det jag funderade först på var om jag kunde använda web workers, men även de verkar ganska begränsade. Det går säkert, men skulle vara bra mycket mer jobb. Det jag gjorde istället var att halvt hacka in stöd för att bygga det hela som ett singel-trådat program, vilket gick rätt bra uppenbarligen. Då kunde jag säga till Emscripten att "här är min main loop", sen kunde min (UI) main loop kalla på nästa main loop som kallar på nästa main loop..
Sen stötte jag även in i två mindre men ganska intressanta problem. Det första var att jag hade varit oförsiktig med type casting på ett ställe, som resulterade i läckt minne. Där var det egentligen em++ (C++ kompilatorn i Emscripten) som skälde på mig, något om att den inte viste hur den skulle delete'a min void-pekare. Där var det så enkelt som att Emscripten använder libc++ hellre än libstdc++ som jag använt tidigare för både linux och android. I den implementationen av standard biblioteken hade de helt enkelt varit bättre på att varna för egentligen uppenbara fel. Det andra mindre men intressanta problemet var att jag använde mig av oinitialiserat minne på ett ställe under startup. Jag har inte undersökt det helt och hållet men jag fick åtminstonde inga symptom av det när jag körde på linux eller android.
Annars handlar det egentligen mest om att anpassa ens byggsystem för att använda just Emscripten. Jag tex använder GYP som inte riktigt var ämnat för det, så det gick inte helt smidigt och jag har några hack för att få det att hänga ihop. Allt som allt var det ett relativt smärtfritt två-kvällars-jobb. Du kan se allt som behövdes göras (och lite därtill) i de 3 och 8 sista commitsen på hobo respektive nanaka.
Visa signatur
"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell
Citera flera
Citera
(3)
Hårdvara
- Idag Analytiker: Apple har överskattat intresset för Vision Pro 5
- Igår AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna? 20
- Igår Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz 13
- 23 / 4 Meta öppnar upp Quests OS – vill bli VR-världens Android 12
- 23 / 4 Googles nästa Chromecast får dubblerad lagring 74
Mjukvara
Övrigt
- Idag EU röstar igenom ”rätten att reparera” 45
- Igår Viaplay sätter ner foten mot delade konton 47
- Igår Systembolaget varnar: Dryckesbrist efter hackerattack 78
- Igår Veckans fråga: Hur mycket lagringsutrymme har din dator? 90
- Igår Utfasning av tredjepartskakor skjuts upp – annonsörer behöver mer tid 16
Datorkomponenter
Ljud, bild och kommunikation
- Hur och varför använder du Discord?40
- Microsoft blockerar äldre processorer i Windows 11 24H247
- Viaplay sätter ner foten mot delade konton48
- EU röstar igenom ”rätten att reparera”48
- Hur brukar betalning ske här på Sweclockers?4
- [FAQ] Vilken router ska jag köpa?4271
- Verifiera konto Mejl15
- Vilken bok läste du senast?197
- Webhallen config, kan inte hitta 2 st sata diskar 3,554
- LegoClockers - Samlingstråd för allt med Lego606
- Säljes GeForce RTX 2070 ROG STRIX 8GB
- Säljes RETRO: GeForce 8800 GTS
- Säljes Server - 2x Xeon gold 6138 - 256GB RAM - Nvidia P2000
- Säljes Ryzen 9 3950x Mobo 64gb ram!
- Säljes ASUS TUF F17 - i7 | 16GB | 1TB | RTX 4060
- Säljes ASUS 27" ROG Swift PG27AQDM OLED QHD 240 Hz
- Köpes i7 12th 13 14 gen
- Säljes 64 Gig DDR5 2x32Gig, 6000MT/s CL36-38-38 1.35V EXPO/XMP
- Säljes Gamingdator I9-13900KF - 7800 XT - Z690 - DDR5 32GB - Define 7
- Säljes T700 2TB M2 SSD. Lian Li Strimer 24pin. Vertical mount
- Analytiker: Apple har överskattat intresset för Vision Pro5
- Microsoft rullar ut Startmenyreklam till alla33
- EU röstar igenom ”rätten att reparera”48
- Viaplay sätter ner foten mot delade konton48
- AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna?20
- Systembolaget varnar: Dryckesbrist efter hackerattack79
- Veckans fråga: Hur mycket lagringsutrymme har din dator?90
- Valve täpper till kryphål i Steam-återbetalningar19
- Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz13
- Utfasning av tredjepartskakor skjuts upp – annonsörer behöver mer tid16
Externa nyheter
Spelnyheter från FZ
- Fem japanska minuter från Paper Mario: The Thousand Year Door idag
- USA bannlyser "konkurrensförbjudande" klausuler i anställningsavtal idag
- No Rest for the Wicked idag
- Betygen för actionspelet Another Crab's Treasure är fina fisken idag
- Steams 2-timmarsregel för återbetalningar gäller nu även "advanced access" idag