| 1348 | } |
| 1349 | |
| 1350 | function applyBloom (source, destination) { |
| 1351 | if (bloomFramebuffers.length < 2) |
| 1352 | return; |
| 1353 | |
| 1354 | let last = destination; |
| 1355 | |
| 1356 | gl.disable(gl.BLEND); |
| 1357 | bloomPrefilterProgram.bind(); |
| 1358 | let knee = config.BLOOM_THRESHOLD * config.BLOOM_SOFT_KNEE + 0.0001; |
| 1359 | let curve0 = config.BLOOM_THRESHOLD - knee; |
| 1360 | let curve1 = knee * 2; |
| 1361 | let curve2 = 0.25 / knee; |
| 1362 | gl.uniform3f(bloomPrefilterProgram.uniforms.curve, curve0, curve1, curve2); |
| 1363 | gl.uniform1f(bloomPrefilterProgram.uniforms.threshold, config.BLOOM_THRESHOLD); |
| 1364 | gl.uniform1i(bloomPrefilterProgram.uniforms.uTexture, source.attach(0)); |
| 1365 | blit(last); |
| 1366 | |
| 1367 | bloomBlurProgram.bind(); |
| 1368 | for (let i = 0; i < bloomFramebuffers.length; i++) { |
| 1369 | let dest = bloomFramebuffers[i]; |
| 1370 | gl.uniform2f(bloomBlurProgram.uniforms.texelSize, last.texelSizeX, last.texelSizeY); |
| 1371 | gl.uniform1i(bloomBlurProgram.uniforms.uTexture, last.attach(0)); |
| 1372 | blit(dest); |
| 1373 | last = dest; |
| 1374 | } |
| 1375 | |
| 1376 | gl.blendFunc(gl.ONE, gl.ONE); |
| 1377 | gl.enable(gl.BLEND); |
| 1378 | |
| 1379 | for (let i = bloomFramebuffers.length - 2; i >= 0; i--) { |
| 1380 | let baseTex = bloomFramebuffers[i]; |
| 1381 | gl.uniform2f(bloomBlurProgram.uniforms.texelSize, last.texelSizeX, last.texelSizeY); |
| 1382 | gl.uniform1i(bloomBlurProgram.uniforms.uTexture, last.attach(0)); |
| 1383 | gl.viewport(0, 0, baseTex.width, baseTex.height); |
| 1384 | blit(baseTex); |
| 1385 | last = baseTex; |
| 1386 | } |
| 1387 | |
| 1388 | gl.disable(gl.BLEND); |
| 1389 | bloomFinalProgram.bind(); |
| 1390 | gl.uniform2f(bloomFinalProgram.uniforms.texelSize, last.texelSizeX, last.texelSizeY); |
| 1391 | gl.uniform1i(bloomFinalProgram.uniforms.uTexture, last.attach(0)); |
| 1392 | gl.uniform1f(bloomFinalProgram.uniforms.intensity, config.BLOOM_INTENSITY); |
| 1393 | blit(destination); |
| 1394 | } |
| 1395 | |
| 1396 | function applySunrays (source, mask, destination) { |
| 1397 | gl.disable(gl.BLEND); |