Skip to content

Oyun geliştiriciler için WebGPU'ya başlangıç ​

WebGPU, WebGL'nin halefidir. Daha düşük seviyeli, daha açık ve modern GPU'lar için tasarlanmış bir API'dir. 2026'da yeni bir 3D projeye başlıyorsanız WebGPU'yu öğrenmeye değer.

WebGPU Eğitimi: Kurulumdan aydınlatmalı ve animasyonlu 3D işlemeye kadar uzanan 10 proje

1) Tarayıcı desteğini kontrol edin ​

js
if (!navigator.gpu) {
  console.error('WebGPU not supported')
}

2026 itibarıyla WebGPU; Chrome, Edge, Firefox ve Safari'de kullanılabilir.

2) Bir cihaz edinin ​

js
const adapter = await navigator.gpu.requestAdapter()
const device = await adapter.requestDevice()

Bağdaştırıcı, fiziksel GPU'yu temsil eder. Cihaz ise onunla iletişim kurmanızı sağlayan arayüzdür.

Her iki çağrı da başarısız olabilir. Sistemde kullanılabilir bir GPU olmadığında requestAdapter() değeri null döndürür ve requestDevice() çağrısı reddedilebilir; bu nedenle devam etmeden önce bunlara karşı önlem alın:

js
const adapter = await navigator.gpu.requestAdapter()
if (!adapter) throw new Error('No suitable GPU adapter found')
const device = await adapter.requestDevice()

Bir bağdaştırıcıdan cihaz oluşturduğunuzda bağdaştırıcı da tüketilir; bu nedenle başka bir cihaza ihtiyacınız varsa yeni bir bağdaştırıcı isteyin.

3) Tuvali yapılandırın ​

js
const canvas = document.getElementById('game')
const context = canvas.getContext('webgpu')
const format = navigator.gpu.getPreferredCanvasFormat()

context.configure({
  device,
  format,
  alphaMode: 'premultiplied',
})

4) Gölgelendiricileri WGSL ile yazın ​

WebGPU, GLSL yerine WGSL'yi (WebGPU Gölgelendirme Dili) kullanır.

wgsl
@vertex
fn vs_main(@builtin(vertex_index) idx: u32) -> @builtin(position) vec4f {
  var pos = array<vec2f, 3>(
    vec2f( 0.0,  0.5),
    vec2f(-0.5, -0.5),
    vec2f( 0.5, -0.5),
  );
  return vec4f(pos[idx], 0.0, 1.0);
}

@fragment
fn fs_main() -> @location(0) vec4f {
  return vec4f(1.0, 0.5, 0.2, 1.0); // orange
}

5) Bir gölgelendirici modülü oluşturun ​

js
const shaderModule = device.createShaderModule({
  code: wgslSource,
})

6) Bir işleme işlem hattı oluşturun ​

js
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: {
    module: shaderModule,
    entryPoint: 'vs_main',
  },
  fragment: {
    module: shaderModule,
    entryPoint: 'fs_main',
    targets: [{ format }],
  },
})

7) Bir kare işleyin ​

js
function render() {
  const commandEncoder = device.createCommandEncoder()
  const textureView = context.getCurrentTexture().createView()

  const renderPass = commandEncoder.beginRenderPass({
    colorAttachments: [{
      view: textureView,
      clearValue: { r: 0, g: 0, b: 0, a: 1 },
      loadOp: 'clear',
      storeOp: 'store',
    }],
  })

  renderPass.setPipeline(pipeline)
  renderPass.draw(3)
  renderPass.end()

  device.queue.submit([commandEncoder.finish()])
  requestAnimationFrame(render)
}
render()

8) WebGPU'da tamponlar ​

js
const vertices = new Float32Array([
  -0.5, -0.5,
   0.5, -0.5,
   0.0,  0.5,
])

const vertexBuffer = device.createBuffer({
  size: vertices.byteLength,
  usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
})

device.queue.writeBuffer(vertexBuffer, 0, vertices)

9) Tekbiçimli değişkenler için bağlama grupları ​

js
const uniformBuffer = device.createBuffer({
  size: 64,
  usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
})

const bindGroup = device.createBindGroup({
  layout: pipeline.getBindGroupLayout(0),
  entries: [{
    binding: 0,
    resource: { buffer: uniformBuffer },
  }],
})

10) WebGPU ve WebGL karşılaştırması ​

ÖzellikWebGLWebGPU
API tarzıOpenGL benzeri, durum bilgiliModern, açık
GölgelendiricilerGLSLWGSL
HesaplamaSınırlı (uzantılar)Birinci sınıf destek
Çoklu iş parçacığıZorBunun için tasarlandı
Tarayıcı desteğiEvrenselTüm büyük tarayıcılar (Chrome, Edge, Safari 26, Firefox)

WebGPU ne zaman kullanılmalı? ​

  • Modern tarayıcıları hedefleyen yeni projelerde
  • Yoğun hesaplama gerektiren iş yüklerinde (fizik, yapay zekâ, prosedürel üretim)
  • GPU kaynakları üzerinde ayrıntılı denetime ihtiyaç duyduğunuzda

İlgili içerikler ​

Harici Kaynaklar ​