|
52 | 52 |
|
53 | 53 | import * as THREE from 'three';
|
54 | 54 |
|
55 |
| - import WebGPURenderer from '../src/renderers/webgpu/WebGPURenderer.js'; |
56 |
| - import WGSLNodeBuilder from '../src/renderers/webgpu/nodes/WGSLNodeBuilder.js'; |
57 |
| - import GLSLNodeBuilder from '../src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js'; |
58 |
| - |
59 | 55 | import { GUI } from 'three/addons/libs/lil-gui.module.min.js';
|
60 | 56 |
|
61 | 57 | init();
|
|
76 | 72 |
|
77 | 73 | const rendererDOM = document.getElementById( 'renderer' );
|
78 | 74 |
|
79 |
| - const renderer = new WebGPURenderer( { antialias: true } ); |
| 75 | + const renderer = new THREE.WebGPURenderer( { antialias: true } ); |
80 | 76 | renderer.outputColorSpace = THREE.LinearSRGBColorSpace;
|
81 | 77 | renderer.setPixelRatio( window.devicePixelRatio );
|
82 | 78 | renderer.setSize( 200, 200 );
|
|
88 | 84 | const mesh = new THREE.Mesh( new THREE.PlaneGeometry( 1, 1 ), material );
|
89 | 85 | scene.add( mesh );
|
90 | 86 |
|
| 87 | + // |
| 88 | + |
| 89 | + let compiling = false; |
| 90 | + |
91 | 91 | renderer.setAnimationLoop( () => {
|
92 | 92 |
|
| 93 | + if ( compiling ) return; |
| 94 | + |
93 | 95 | renderer.render( scene, camera );
|
94 | 96 |
|
95 | 97 | } );
|
|
108 | 110 | };
|
109 | 111 |
|
110 | 112 | let timeout = null;
|
111 |
| - let nodeBuilder = null; |
| 113 | + let rawShader = null; |
112 | 114 |
|
113 | 115 | const editorDOM = document.getElementById( 'source' );
|
114 | 116 | const resultDOM = document.getElementById( 'result' );
|
|
158 | 160 |
|
159 | 161 | const showCode = () => {
|
160 | 162 |
|
161 |
| - result.setValue( nodeBuilder[ options.shader + 'Shader' ] ); |
| 163 | + result.setValue( rawShader[ options.shader + 'Shader' ] ); |
162 | 164 | result.revealLine( 1 );
|
163 | 165 |
|
164 | 166 | };
|
165 | 167 |
|
166 |
| - const build = () => { |
| 168 | + const webGLRenderer = new THREE.WebGPURenderer( { forceWebGL: true } ); |
| 169 | + |
| 170 | + const build = async () => { |
167 | 171 |
|
168 | 172 | try {
|
169 | 173 |
|
|
173 | 177 | mesh.material.fragmentNode = nodes.output;
|
174 | 178 | mesh.material.needsUpdate = true;
|
175 | 179 |
|
176 |
| - let NodeBuilder; |
| 180 | + compiling = true; |
177 | 181 |
|
178 | 182 | if ( options.output === 'WGSL' ) {
|
179 | 183 |
|
180 |
| - NodeBuilder = WGSLNodeBuilder; |
| 184 | + rawShader = await renderer.debug.getRawShaderAsync( scene, camera, mesh ); |
| 185 | + |
181 | 186 |
|
182 | 187 | } else if ( options.output === 'GLSL ES 3.0' ) {
|
183 | 188 |
|
184 |
| - NodeBuilder = GLSLNodeBuilder; |
| 189 | + rawShader = await webGLRenderer.debug.getRawShaderAsync( scene, camera, mesh ); |
185 | 190 |
|
186 | 191 | }
|
187 | 192 |
|
188 |
| - nodeBuilder = new NodeBuilder( mesh, renderer ); |
189 |
| - nodeBuilder.build(); |
| 193 | + compiling = false; |
190 | 194 |
|
191 | 195 | showCode();
|
192 | 196 |
|
|
195 | 199 | /*const style = 'background-color: #333; color: white; font-style: italic; border: 2px solid #777; font-size: 22px;';
|
196 | 200 |
|
197 | 201 | console.log( '%c [ WGSL ] Vertex Shader ', style );
|
198 |
| - console.log( nodeBuilder.vertexShader ); |
| 202 | + console.log( rawShader.vertexShader ); |
199 | 203 | console.log( '%c [ WGSL ] Fragment Shader ', style );
|
200 |
| - console.log( nodeBuilder.fragmentShader );*/ |
| 204 | + console.log( rawShader.fragmentShader );/**/ |
201 | 205 |
|
202 | 206 | } catch ( e ) {
|
203 | 207 |
|
|
0 commit comments