aboutsummaryrefslogtreecommitdiff
path: root/vendor/wgpu/example
diff options
context:
space:
mode:
authorEmir <emircengiz21@gmail.com>2024-07-23 20:37:26 +0300
committerEmir <emircengiz21@gmail.com>2024-07-23 20:37:26 +0300
commitf3f08a4b47ecc2089be616eb9774ac3dd32e8a8d (patch)
tree8a310df65ad2cd22e61d161d8fdf687ed84f29c0 /vendor/wgpu/example
parent65fec9134e662741923fbac24e8906df3cfbd566 (diff)
Add sdl2glue to `vendor:wgpu` package + triangle example
Diffstat (limited to 'vendor/wgpu/example')
-rw-r--r--vendor/wgpu/example/Makefile17
-rw-r--r--vendor/wgpu/example/build.bat12
-rw-r--r--vendor/wgpu/example/main.odin187
-rw-r--r--vendor/wgpu/example/os_glfw.odin55
-rw-r--r--vendor/wgpu/example/os_js.odin60
-rw-r--r--vendor/wgpu/example/web/index.html23
6 files changed, 0 insertions, 354 deletions
diff --git a/vendor/wgpu/example/Makefile b/vendor/wgpu/example/Makefile
deleted file mode 100644
index f19997881..000000000
--- a/vendor/wgpu/example/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-FILES := $(wildcard *)
-
-# NOTE: changing this requires changing the same values in the `web/index.html`.
-INITIAL_MEMORY_PAGES := 2000
-MAX_MEMORY_PAGES := 65536
-
-PAGE_SIZE := 65536
-INITIAL_MEMORY_BYTES := $(shell expr $(INITIAL_MEMORY_PAGES) \* $(PAGE_SIZE))
-MAX_MEMORY_BYTES := $(shell expr $(MAX_MEMORY_PAGES) \* $(PAGE_SIZE))
-
-web/triangle.wasm: $(FILES) ../wgpu.js ../../wasm/js/runtime.js
- odin build . \
- -target:js_wasm32 -out:web/triangle.wasm -o:size \
- -extra-linker-flags:"--export-table --import-memory --initial-memory=$(INITIAL_MEMORY_BYTES) --max-memory=$(MAX_MEMORY_BYTES)"
-
- cp ../wgpu.js web/wgpu.js
- cp ../../wasm/js/runtime.js web/runtime.js
diff --git a/vendor/wgpu/example/build.bat b/vendor/wgpu/example/build.bat
deleted file mode 100644
index cd3ca63ba..000000000
--- a/vendor/wgpu/example/build.bat
+++ /dev/null
@@ -1,12 +0,0 @@
-REM NOTE: changing this requires changing the same values in the `web/index.html`.
-set INITIAL_MEMORY_PAGES=2000
-set MAX_MEMORY_PAGES=65536
-
-set PAGE_SIZE=65536
-set /a INITIAL_MEMORY_BYTES=%INITIAL_MEMORY_PAGES% * %PAGE_SIZE%
-set /a MAX_MEMORY_BYTES=%MAX_MEMORY_PAGES% * %PAGE_SIZE%
-
-call odin.exe build . -target:js_wasm32 -out:web/triangle.wasm -o:size -extra-linker-flags:"--export-table --import-memory --initial-memory=%INITIAL_MEMORY_BYTES% --max-memory=%MAX_MEMORY_BYTES%"
-
-copy "..\wgpu.js" "web\wgpu.js"
-copy "..\..\wasm\js\runtime.js" "web\runtime.js" \ No newline at end of file
diff --git a/vendor/wgpu/example/main.odin b/vendor/wgpu/example/main.odin
deleted file mode 100644
index 39161311c..000000000
--- a/vendor/wgpu/example/main.odin
+++ /dev/null
@@ -1,187 +0,0 @@
-package vendor_wgpu_example_triangle
-
-import "base:runtime"
-
-import "core:fmt"
-
-import "vendor:wgpu"
-
-State :: struct {
- ctx: runtime.Context,
- os: OS,
-
- instance: wgpu.Instance,
- surface: wgpu.Surface,
- adapter: wgpu.Adapter,
- device: wgpu.Device,
- config: wgpu.SurfaceConfiguration,
- queue: wgpu.Queue,
- module: wgpu.ShaderModule,
- pipeline_layout: wgpu.PipelineLayout,
- pipeline: wgpu.RenderPipeline,
-}
-
-@(private="file")
-state: State
-
-main :: proc() {
- state.ctx = context
-
- os_init(&state.os)
-
- state.instance = wgpu.CreateInstance(nil)
- if state.instance == nil {
- panic("WebGPU is not supported")
- }
- state.surface = os_get_surface(&state.os, state.instance)
-
- wgpu.InstanceRequestAdapter(state.instance, &{ compatibleSurface = state.surface }, on_adapter, nil)
-
- on_adapter :: proc "c" (status: wgpu.RequestAdapterStatus, adapter: wgpu.Adapter, message: cstring, userdata: rawptr) {
- context = state.ctx
- if status != .Success || adapter == nil {
- fmt.panicf("request adapter failure: [%v] %s", status, message)
- }
- state.adapter = adapter
- wgpu.AdapterRequestDevice(adapter, nil, on_device)
- }
-
- on_device :: proc "c" (status: wgpu.RequestDeviceStatus, device: wgpu.Device, message: cstring, userdata: rawptr) {
- context = state.ctx
- if status != .Success || device == nil {
- fmt.panicf("request device failure: [%v] %s", status, message)
- }
- state.device = device
-
- width, height := os_get_render_bounds(&state.os)
-
- state.config = wgpu.SurfaceConfiguration {
- device = state.device,
- usage = { .RenderAttachment },
- format = .BGRA8Unorm,
- width = width,
- height = height,
- presentMode = .Fifo,
- alphaMode = .Opaque,
- }
- wgpu.SurfaceConfigure(state.surface, &state.config)
-
- state.queue = wgpu.DeviceGetQueue(state.device)
-
- shader :: `
- @vertex
- fn vs_main(@builtin(vertex_index) in_vertex_index: u32) -> @builtin(position) vec4<f32> {
- let x = f32(i32(in_vertex_index) - 1);
- let y = f32(i32(in_vertex_index & 1u) * 2 - 1);
- return vec4<f32>(x, y, 0.0, 1.0);
- }
-
- @fragment
- fn fs_main() -> @location(0) vec4<f32> {
- return vec4<f32>(1.0, 0.0, 0.0, 1.0);
- }`
-
- state.module = wgpu.DeviceCreateShaderModule(state.device, &{
- nextInChain = &wgpu.ShaderModuleWGSLDescriptor{
- sType = .ShaderModuleWGSLDescriptor,
- code = shader,
- },
- })
-
- state.pipeline_layout = wgpu.DeviceCreatePipelineLayout(state.device, &{})
- state.pipeline = wgpu.DeviceCreateRenderPipeline(state.device, &{
- layout = state.pipeline_layout,
- vertex = {
- module = state.module,
- entryPoint = "vs_main",
- },
- fragment = &{
- module = state.module,
- entryPoint = "fs_main",
- targetCount = 1,
- targets = &wgpu.ColorTargetState{
- format = .BGRA8Unorm,
- writeMask = wgpu.ColorWriteMaskFlags_All,
- },
- },
- primitive = {
- topology = .TriangleList,
-
- },
- multisample = {
- count = 1,
- mask = 0xFFFFFFFF,
- },
- })
-
- os_run(&state.os)
- }
-}
-
-resize :: proc "c" () {
- context = state.ctx
-
- state.config.width, state.config.height = os_get_render_bounds(&state.os)
- wgpu.SurfaceConfigure(state.surface, &state.config)
-}
-
-frame :: proc "c" (dt: f32) {
- context = state.ctx
-
- surface_texture := wgpu.SurfaceGetCurrentTexture(state.surface)
- switch surface_texture.status {
- case .Success:
- // All good, could check for `surface_texture.suboptimal` here.
- case .Timeout, .Outdated, .Lost:
- // Skip this frame, and re-configure surface.
- if surface_texture.texture != nil {
- wgpu.TextureRelease(surface_texture.texture)
- }
- resize()
- return
- case .OutOfMemory, .DeviceLost:
- // Fatal error
- fmt.panicf("[triangle] get_current_texture status=%v", surface_texture.status)
- }
- defer wgpu.TextureRelease(surface_texture.texture)
-
- frame := wgpu.TextureCreateView(surface_texture.texture, nil)
- defer wgpu.TextureViewRelease(frame)
-
- command_encoder := wgpu.DeviceCreateCommandEncoder(state.device, nil)
- defer wgpu.CommandEncoderRelease(command_encoder)
-
- render_pass_encoder := wgpu.CommandEncoderBeginRenderPass(
- command_encoder, &{
- colorAttachmentCount = 1,
- colorAttachments = &wgpu.RenderPassColorAttachment{
- view = frame,
- loadOp = .Clear,
- storeOp = .Store,
- clearValue = { r = 0, g = 1, b = 0, a = 1 },
- },
- },
- )
- defer wgpu.RenderPassEncoderRelease(render_pass_encoder)
-
- wgpu.RenderPassEncoderSetPipeline(render_pass_encoder, state.pipeline)
- wgpu.RenderPassEncoderDraw(render_pass_encoder, vertexCount=3, instanceCount=1, firstVertex=0, firstInstance=0)
- wgpu.RenderPassEncoderEnd(render_pass_encoder)
-
- command_buffer := wgpu.CommandEncoderFinish(command_encoder, nil)
- defer wgpu.CommandBufferRelease(command_buffer)
-
- wgpu.QueueSubmit(state.queue, { command_buffer })
- wgpu.SurfacePresent(state.surface)
-}
-
-finish :: proc() {
- wgpu.RenderPipelineRelease(state.pipeline)
- wgpu.PipelineLayoutRelease(state.pipeline_layout)
- wgpu.ShaderModuleRelease(state.module)
- wgpu.QueueRelease(state.queue)
- wgpu.DeviceRelease(state.device)
- wgpu.AdapterRelease(state.adapter)
- wgpu.SurfaceRelease(state.surface)
- wgpu.InstanceRelease(state.instance)
-}
diff --git a/vendor/wgpu/example/os_glfw.odin b/vendor/wgpu/example/os_glfw.odin
deleted file mode 100644
index 2b1817fa5..000000000
--- a/vendor/wgpu/example/os_glfw.odin
+++ /dev/null
@@ -1,55 +0,0 @@
-//+build !js
-package vendor_wgpu_example_triangle
-
-import "core:time"
-
-import "vendor:glfw"
-import "vendor:wgpu"
-import "vendor:wgpu/glfwglue"
-
-OS :: struct {
- window: glfw.WindowHandle,
-}
-
-os_init :: proc(os: ^OS) {
- if !glfw.Init() {
- panic("[glfw] init failure")
- }
-
- glfw.WindowHint(glfw.CLIENT_API, glfw.NO_API)
- os.window = glfw.CreateWindow(960, 540, "WGPU Native Triangle", nil, nil)
-
- glfw.SetFramebufferSizeCallback(os.window, size_callback)
-}
-
-os_run :: proc(os: ^OS) {
- dt: f32
-
- for !glfw.WindowShouldClose(os.window) {
- start := time.tick_now()
-
- glfw.PollEvents()
- frame(dt)
-
- dt = f32(time.duration_seconds(time.tick_since(start)))
- }
-
- finish()
-
- glfw.DestroyWindow(os.window)
- glfw.Terminate()
-}
-
-os_get_render_bounds :: proc(os: ^OS) -> (width, height: u32) {
- iw, ih := glfw.GetWindowSize(os.window)
- return u32(iw), u32(ih)
-}
-
-os_get_surface :: proc(os: ^OS, instance: wgpu.Instance) -> wgpu.Surface {
- return glfwglue.GetSurface(instance, os.window)
-}
-
-@(private="file")
-size_callback :: proc "c" (window: glfw.WindowHandle, width, height: i32) {
- resize()
-}
diff --git a/vendor/wgpu/example/os_js.odin b/vendor/wgpu/example/os_js.odin
deleted file mode 100644
index 9634f4afe..000000000
--- a/vendor/wgpu/example/os_js.odin
+++ /dev/null
@@ -1,60 +0,0 @@
-package vendor_wgpu_example_triangle
-
-import "vendor:wgpu"
-import "vendor:wasm/js"
-
-OS :: struct {
- initialized: bool,
-}
-
-@(private="file")
-g_os: ^OS
-
-os_init :: proc(os: ^OS) {
- g_os = os
- assert(js.add_window_event_listener(.Resize, nil, size_callback))
-}
-
-// NOTE: frame loop is done by the runtime.js repeatedly calling `step`.
-os_run :: proc(os: ^OS) {
- os.initialized = true
-}
-
-os_get_render_bounds :: proc(os: ^OS) -> (width, height: u32) {
- rect := js.get_bounding_client_rect("body")
- return u32(rect.width), u32(rect.height)
-}
-
-os_get_surface :: proc(os: ^OS, instance: wgpu.Instance) -> wgpu.Surface {
- return wgpu.InstanceCreateSurface(
- instance,
- &wgpu.SurfaceDescriptor{
- nextInChain = &wgpu.SurfaceDescriptorFromCanvasHTMLSelector{
- sType = .SurfaceDescriptorFromCanvasHTMLSelector,
- selector = "#wgpu-canvas",
- },
- },
- )
-}
-
-@(private="file", export)
-step :: proc(dt: f32) -> bool {
- if !g_os.initialized {
- return true
- }
-
- frame(dt)
- return true
-}
-
-@(private="file", fini)
-os_fini :: proc() {
- js.remove_window_event_listener(.Resize, nil, size_callback)
-
- finish()
-}
-
-@(private="file")
-size_callback :: proc(e: js.Event) {
- resize()
-}
diff --git a/vendor/wgpu/example/web/index.html b/vendor/wgpu/example/web/index.html
deleted file mode 100644
index 61872e35a..000000000
--- a/vendor/wgpu/example/web/index.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html lang="en" style="height: 100%;">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>WGPU WASM Triangle</title>
- </head>
- <body id="body" style="height: 100%; padding: 0; margin: 0; overflow: hidden;">
- <canvas id="wgpu-canvas"></canvas>
-
- <script type="text/javascript" src="runtime.js"></script>
- <script type="text/javascript" src="wgpu.js"></script>
- <script type="text/javascript">
- const mem = new WebAssembly.Memory({ initial: 2000, maximum: 65536, shared: false });
- const memInterface = new odin.WasmMemoryInterface();
- memInterface.setMemory(mem);
-
- const wgpuInterface = new odin.WebGPUInterface(memInterface);
-
- odin.runWasm("triangle.wasm", null, { wgpu: wgpuInterface.getInterface() }, memInterface, /*intSize=8*/);
- </script>
- </body>
-</html>