"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 Cooler Master Ncore 100 Max – lättbyggt minstingchassi 8
- Igår Nytt vetenskapligt genombrott kan lösa OLED-inbränning 45
- Igår Microsoft vill göra handhållen Xbox 41
- 26 / 3 Microsoft patenterar teknik för bättre ray tracing-prestanda 27
- 26 / 3 Intel Battlemage med ordentlig prestandaökning dyker upp i databas 21
Mjukvara
- Idag Så byter du till gamla Notepad i Windows 11 28
- Idag Microsoft Copilot kan snart köras direkt på datorn 13
- Igår Stort steg för Windows på ARM: Google släpper optimerat Chrome 26
- Igår Xbox-chef är öppen för fler spelbutiker på konsol 23
- Igår DirectSR – så fungerar Windows inbyggda uppskalning för spel 21
Övrigt
- Idag Svenska Embracer säljer Gearbox för 4,9 miljarder kronor 6
- Idag Var femte användare har lämnat X sedan Musk tog över 75
- Igår Veckans fråga: Hur gammalt är ditt Steam-konto? 156
- Igår Bluffkampanj sprider sig genom Googles AI-sökfunktion 11
- 26 / 3 82 studenter avstängda för AI-fusk – Uppsala strängast 55
Datorkomponenter
Ljud, bild och kommunikation
- ShikakuOfThe.Day - Dagliga shikaku pussel2191
- Montering av Ryzen: 5800X3D på ett MSI X470 GAMING PRO ( Första gången, rekommentation och tips, så kan förbereda mig, innan sätter igång )2
- Kan ej läsa e-mail via wifi1
- Dags att deklarera, vilka avdrag?4
- Vajande hastighet i ASUS Mesh-nätverk0
- Var femte användare har lämnat X sedan Musk tog över76
- Kan jag byta till SSD?47
- Veckans fråga: Hur gammalt är ditt Steam-konto?158
- EVGA brände Reddit-användares hårddiskar124
- Prisförslag/Värdering - Galaxy S22 Ultra SM-S908B/DS0
- Säljes APPLE MACBOOK PRO 16 M1 MAX 32GB RAM 1TB SSD
- Säljes Apple iPad Pro 11'' 5G (gen 4)
- Säljes Xbox Series S
- Säljes B550-f/5900x/32gb
- Säljes Xbox Series X
- Säljes AMD 7800X3D - Garanti
- Säljes Amiibo, vattenkylning, fläktar
- Säljes Nvidia RTX 4090 FE
- Säljes PowerColor Radeon 7900 XTX Hellhound 24GB - Garanti
- Säljes ITX paket X570/5600
- Svenska Embracer säljer Gearbox för 4,9 miljarder kronor6
- Cooler Master Ncore 100 Max – lättbyggt minstingchassi8
- Var femte användare har lämnat X sedan Musk tog över76
- Så byter du till gamla Notepad i Windows 1128
- Microsoft Copilot kan snart köras direkt på datorn13
- Stort steg för Windows på ARM: Google släpper optimerat Chrome26
- Nytt vetenskapligt genombrott kan lösa OLED-inbränning45
- Xbox-chef är öppen för fler spelbutiker på konsol23
- Veckans fråga: Hur gammalt är ditt Steam-konto?158
- Bluffkampanj sprider sig genom Googles AI-sökfunktion11