WebAssembly (WASM) voor performante toepassingen · Les

WASM- en WebGL/WebGPU-integratie

Leer hoogwaardige WASM-logica te verbinden met grafische API's in de browser, zoals WebGL en het opkomende WebGPU.

Les 1 van 411 stappen

WASM- en WebGL/WebGPU-integratie is een gratis WebAssembly (WASM) voor performante toepassingen-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject WebAssembly (WASM) voor performante toepassingen. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus WebAssembly (WASM) voor performante toepassingen bevat in totaal 4 lessen.

Grafische toepassingen met hoge prestaties

Heb je je ooit afgevraagd hoe complexe 3D-games of gegevensvisualisaties soepel in je webbrowser worden uitgevoerd? WebAssembly (WASM) speelt hierin een belangrijke rol!

In deze les ontdek je hoe WASM samenwerkt met grafische API's van browsers, zoals WebGL en WebGPU, om indrukwekkende visuele ervaringen te bieden.

Geef je graphics een boost

Grafische toepassingen vereisen vaak intensieve berekeningen:

  • Fysicasimulaties: De bewegingen en interacties van objecten berekenen.
  • Vertextransformaties: Punten van 3D-modellen in de ruimte bewerken.
  • Beeldverwerking: Filters of effecten in realtime toepassen.

WASM biedt bijna systeemeigen snelheid, waardoor deze rekenintensieve taken veel sneller worden uitgevoerd dan met alleen traditionele JavaScript.

Grafische API's van browsers

Om iets visueel op een webpagina te tekenen, gebruik je het HTML-element <canvas>. Maar hoe teken je complexe 3D-scènes?

  • WebGL: Een gevestigde API voor het weergeven van interactieve 2D- en 3D-graphics in elke compatibele webbrowser, zonder plug-ins. Deze is gebaseerd op OpenGL ES.
  • WebGPU: Een nieuwere, modernere API voor graphics en berekeningen met hoge prestaties op het web, met directere toegang tot GPU-functies.

De rol van JavaScript

Hoewel WASM het zware rekenwerk uitvoert, speelt JavaScript een cruciale rol als 'coördinator'.

JavaScript is verantwoordelijk voor:

  • Het instellen van het HTML-element <canvas>.
  • Het laden van de WASM-module in het geheugen.
  • Het aanroepen van geëxporteerde functies uit de WASM-module.
  • De door WASM geproduceerde gegevens aan WebGL/WebGPU doorgeven voor de daadwerkelijke weergave.

Een WebGL-context ophalen

Voordat je iets kunt tekenen, moet je een verwijzing naar het element <canvas> ophalen en vervolgens een WebGL-weergavecontext aanvragen. Deze context geeft je toegang tot tekenopdrachten.

Probeer dit eenvoudige JavaScript-fragment uit te voeren:

function setupWebGL() {
  const canvas = document.createElement('canvas');
  canvas.id = 'myCanvas';
  canvas.width = 400;
  canvas.height = 300;
  document.body.appendChild(canvas); // Add to DOM for context

  const gl = canvas.getContext('webgl');

  if (!gl) {
    console.error('WebGL not supported!');
    return null;
  }
  console.log('WebGL context obtained successfully!');
  // You could now start drawing with 'gl'
  return gl;
}

setupWebGL();

WASM genereert gegevens

Stel dat je de posities (vertices) van een complex 3D-model moet berekenen of deeltjes moet simuleren. Dit zijn ideale taken voor WASM.

In plaats van rechtstreeks te tekenen, berekent WASM onbewerkte numerieke gegevens, zoals lijsten met coördinaten, kleuren of normalen, en plaatst die in het lineaire geheugen. JavaScript leest deze gegevens vervolgens uit.

Voorbeeld van WASM-gegevens (C)

Dit is een conceptuele C-functie die, wanneer deze naar WASM wordt gecompileerd, een eenvoudige set 2D-coördinaten voor een driehoek kan genereren. JavaScript zou deze functie vervolgens aanroepen en de gegevens uit het WASM-geheugen lezen.

Let op: deze C-code is illustratief en zou met tools zoals Emscripten worden gecompileerd naar een .wasm-module.

// This is C code that would be compiled to WASM.
// It defines a function to get triangle vertex data.

// Assume 'memory' is shared with JS
// For simplicity, we'll just return a pointer
// to a static array for this example.

float g_vertices[6]; // 3 vertices * 2 components (x, y)

// Function to fill the array and return its start address
// This function would be exported from the WASM module.
float* getTriangleData() {
    g_vertices[0] = -0.5f; g_vertices[1] = -0.5f; // Vertex 1 (x, y)
    g_vertices[2] =  0.5f; g_vertices[3] = -0.5f; // Vertex 2 (x, y)
    g_vertices[4] =  0.0f; g_vertices[5] =  0.5f; // Vertex 3 (x, y)
    return g_vertices; // Return pointer to start of data
}

JS leest WASM-geheugen

Nadat WASM gegevens heeft berekend en in het geheugen heeft opgeslagen, moet JavaScript deze kunnen benaderen. WASM-geheugen wordt in JavaScript beschikbaar gesteld als een SharedArrayBuffer (of ArrayBuffer).

Vervolgens kun je getypeerde arrayweergaven, zoals Float32Array, boven op deze buffer maken om de numerieke gegevens efficiënt te lezen.

Zo zou JS conceptueel toegang kunnen krijgen tot gegevens uit een geladen WASM-module:

// Assume 'wasmInstance' is a loaded WebAssembly instance
// and 'getTriangleData' is an exported WASM function.

function renderWasmData(wasmInstance) {
  // In a real scenario, you'd get these from the WASM instance
  const mockDataPtr = 0; // Simulate pointer to start of data
  const mockMemoryBuffer = new ArrayBuffer(6 * Float32Array.BYTES_PER_ELEMENT);
  const mockWasmExports = {
    getTriangleData: () => mockDataPtr,
    memory: { buffer: mockMemoryBuffer }
  };

  // Simulate filling the WASM memory (e.g., by WASM code)
  new Float32Array(mockMemoryBuffer).set([-0.5, -0.5, 0.5, -0.5, 0.0, 0.5]);

  // Get the pointer (memory address) to the data from WASM
  const dataPtr = mockWasmExports.getTriangleData();

  // Access WASM's linear memory
  const memory = mockWasmExports.memory;

  // Create a Float32Array view over the WASM memory
  // starting at 'dataPtr' for 6 floats (3 vertices * 2 components)
  const vertices = new Float32Array(
    memory.buffer, dataPtr, 6
  );

  console.log('Vertices from WASM:', vertices);
  // Now 'vertices' can be passed to WebGL for drawing!
}

// Call the function with a simulated WASM instance
renderWasmData({});

WASM- en WebGL-pijplijn

De volledige pijplijn ziet er als volgt uit:

  1. HTML: Definieert het element <canvas>.
  2. JavaScript: Laadt WASM en haalt de WebGL-context op.
  3. WASM: Voert rekenintensieve taken uit, zoals het genereren van vertexgegevens.
  4. JavaScript: Leest de uitvoer van WASM uit het lineaire geheugen.
  5. JavaScript (WebGL): Uploadt gegevens naar GPU-buffers en geeft tekenopdrachten uit.
  6. Browser: Geeft de scène weer op het element <canvas>.

Controle van de integratie van graphics

Welk onderdeel is voornamelijk verantwoordelijk voor het instellen van het HTML-canvas en het doorgeven van de uitvoergegevens van WASM aan WebGL voor de weergave?

Samenvatting: de kracht van graphics

Je hebt geleerd hoe WebAssembly integreert met grafische API's van browsers om graphics met hoge prestaties te maken:

  • WASM versnelt rekenintensieve taken, zoals vertexberekeningen.
  • WebGL en WebGPU zijn de API's van de browser voor 2D- en 3D-weergave.
  • JavaScript fungeert als de essentiële brug: het laadt WASM, coördineert aanroepen en geeft gegevens door aan de grafische API's.

Deze krachtige combinatie maakt complexe games, simulaties en gegevensvisualisaties rechtstreeks in de browser mogelijk!

Gratis beginnen

Leer WebAssembly (WASM) voor performante toepassingen met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “WASM- en WebGL/WebGPU-integratie” gratis?

Ja — de volledige tekst van “WASM- en WebGL/WebGPU-integratie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus WebAssembly (WASM) voor performante toepassingen wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus WebAssembly (WASM) voor performante toepassingen bevat in totaal 4 lessen.

Wat leer ik in “WASM- en WebGL/WebGPU-integratie”?

Leer hoogwaardige WASM-logica te verbinden met grafische API's in de browser, zoals WebGL en het opkomende WebGPU. Je oefent met WebAssembly (WASM) voor performante toepassingen door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met WebAssembly (WASM) voor performante toepassingen te beginnen?

Ervaring vooraf is niet nodig. WebAssembly (WASM) voor performante toepassingen op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “WASM- en WebGL/WebGPU-integratie”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over WebAssembly (WASM) voor performante toepassingen?

Ja. Elke les over WebAssembly (WASM) voor performante toepassingen bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. WASM- en WebGL/WebGPU-integratie
  2. Realtime 2D/3D-rendering
  3. Games ontwikkelen met WebAssembly
  4. Audiobewerking en assetstreaming in WASM
← Terug naar WebAssembly (WASM) voor performante toepassingen