UNPKG

simple-nvk

Version:

Graphic libary, using Javascript and Node-Vulkan.<br> It has similarities to WebGPU in some places.<br> ## Features Abstractions of Vulkan features like staged buffers.<br> Much shorter to write than Vulkan.<br> ## Install ````console npm install s

47 lines (41 loc) 1.43 kB
import { assertVulkan } from "../utils.mjs"; import Handle from "./handle.mjs"; import essentials from "nvk-essentials"; import snvk from "../index.mjs"; const { GLSL } = essentials; export default class ShaderHandle extends Handle { constructor(owner, { source, format, stage }) { super(owner); let byteCode = null if (format === snvk.SHADER_SRC_GLSL) { let extension = ""; switch (stage) { case snvk.SHADER_STAGE_VERTEX: extension = "vert"; break; case snvk.SHADER_STAGE_FRAGMENT: extension = "frag"; break; case snvk.SHADER_STAGE_COMPUTE: extension = "comp"; break; case snvk.SHADER_STAGE_GEOMETRY: extension = "geom"; break; } let spirvCode = GLSL.toSPIRVSync({ source: source, extension: extension }).output; byteCode = new Uint8Array(spirvCode); } else { byteCode = new Uint8Array(source); } let shaderModuleCreateInfo = new VkShaderModuleCreateInfo({ codeSize: byteCode.length, pCode: byteCode, }); let shaderModule = new VkShaderModule(); let result = vkCreateShaderModule(this.device, shaderModuleCreateInfo, null, shaderModule) assertVulkan(result); this.stage = stage; this.vkShader = shaderModule; } destroy() { this.super_destroy(); vkDestroyShaderModule(this.device, this.vkShader, null); } }