58 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| if ( self.GPUShaderStage === undefined ) {
 | |
| 
 | |
| 	self.GPUShaderStage = { VERTEX: 1, FRAGMENT: 2, COMPUTE: 4 };
 | |
| 
 | |
| }
 | |
| 
 | |
| // statics
 | |
| 
 | |
| let isAvailable = navigator.gpu !== undefined;
 | |
| 
 | |
| 
 | |
| if ( typeof window !== 'undefined' && isAvailable ) {
 | |
| 
 | |
| 	isAvailable = await navigator.gpu.requestAdapter();
 | |
| 
 | |
| }
 | |
| 
 | |
| class WebGPU {
 | |
| 
 | |
| 	static isAvailable() {
 | |
| 
 | |
| 		return Boolean( isAvailable );
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	static getStaticAdapter() {
 | |
| 
 | |
| 		return isAvailable;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	static getErrorMessage() {
 | |
| 
 | |
| 		const message = 'Your browser does not support <a href="https://gpuweb.github.io/gpuweb/" style="color:blue">WebGPU</a> yet';
 | |
| 
 | |
| 		const element = document.createElement( 'div' );
 | |
| 		element.id = 'webgpumessage';
 | |
| 		element.style.fontFamily = 'monospace';
 | |
| 		element.style.fontSize = '13px';
 | |
| 		element.style.fontWeight = 'normal';
 | |
| 		element.style.textAlign = 'center';
 | |
| 		element.style.background = '#fff';
 | |
| 		element.style.color = '#000';
 | |
| 		element.style.padding = '1.5em';
 | |
| 		element.style.maxWidth = '400px';
 | |
| 		element.style.margin = '5em auto 0';
 | |
| 
 | |
| 		element.innerHTML = message;
 | |
| 
 | |
| 		return element;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| export default WebGPU;
 |