Up-in-the-Air – commitdiff

You can use Git to clone the repository via the web URL. Download snapshot (zip)
Changing graphics quality now adjusts render target resolution
authorJulian Fietkau <git@fietkau.software>
Sat, 28 Sep 2024 00:47:41 +0000 (02:47 +0200)
committerJulian Fietkau <git@fietkau.software>
Sat, 28 Sep 2024 00:47:41 +0000 (02:47 +0200)
main.js

diff --git a/main.js b/main.js
index 6fd34293ad3f15c2d714031561332bf7377ff01b..6ba62b1e29e894e1db24e7cdcc970d4177756d6f 100644 (file)
--- a/main.js
+++ b/main.js
@@ -125,6 +125,7 @@ function loadAllAssets(game, renderProgressCallback) {
       loader[segments[0]].load(todo, (result) => {
         if(segments[0] == 'textures') {
           result.colorSpace = THREE.SRGBColorSpace;
+          result.minFilter = THREE.NearestFilter;
           result.magFilter = THREE.NearestFilter;
           if(segments[1].split('.')[0].startsWith('feather-')) {
             result.repeat = new THREE.Vector2(1, -1);
@@ -187,9 +188,14 @@ function init(game, canvas) {
   game.view.directionalLight2 = new THREE.DirectionalLight(0xffffff, 1);
   game.view.directionalLight2.position.set(-1, -1, 1);
   scene.add(game.view.directionalLight2);
-  const renderer = new THREE.WebGLRenderer({ canvas: canvas });
-  renderer.setSize(canvas.width, canvas.height);
-  renderer.setClearColor(0x808080, 1);
+  game.view.renderer = new THREE.WebGLRenderer({ canvas: canvas, antialias: false });
+  game.view.renderer.setSize(canvas.width, canvas.height);
+  game.view.renderer.setClearColor(0x808080, 1);
+  let resolution = Math.round(3200 / Math.pow(2, game.settings['graphics']));
+  game.view.canvas.width = resolution;
+  game.view.canvas.height = resolution;
+  game.view.camera.updateProjectionMatrix();
+  game.view.renderer.setSize(game.view.canvas.width, game.view.canvas.height);
   game.view.clock = new THREE.Clock();
   game.view.clock.previousTime = 0;
   game.view.clock.getDeltaTime = () => {
@@ -457,7 +463,7 @@ function init(game, canvas) {
   game.var.endingExitTrajectory = new THREE.Vector3();
   game.var.endingEntryRotation = new THREE.Vector3();
   game.var.endingExitRotation = new THREE.Vector3();
-  renderer.setAnimationLoop(() => { animate(game, renderer, scene); });
+  game.view.renderer.setAnimationLoop(() => { animate(game, scene); });
 }
 
 function prepareWordMesh(game, word) {
@@ -563,7 +569,7 @@ function reset(game) {
   }
 }
 
-function animate(game, renderer, scene) {
+function animate(game, scene) {
   if(!('startTime' in game)) {
     game.startTime = game.view.clock.getElapsedTime();
   }
@@ -811,7 +817,7 @@ function animate(game, renderer, scene) {
     }
     game.view.camera.position.setY(cameraY - game.courseRadius + 0.07 * cameraSwayFactor * Math.sin(game.view.clock.getElapsedTime() * 0.5));
     game.view.camera.position.setX(cameraX + 0.05 * cameraSwayFactor * Math.sin(game.view.clock.getElapsedTime() * 0.7));
-    renderer.render(scene, game.view.camera);
+    game.view.renderer.render(scene, game.view.camera);
     return;
   }
   if(game.ui.root.querySelector('.ui-page.gameplay p')) {
@@ -994,7 +1000,7 @@ function animate(game, renderer, scene) {
     }
   }
 
-  renderer.render(scene, game.view.camera);
+  game.view.renderer.render(scene, game.view.camera);
 }
 
 function loadSettings(game) {
@@ -1136,6 +1142,13 @@ function applySettings(game) {
     setTimeout(() => { game.ui.root.style.fontSize = (game.ui.root.clientWidth / 50) + 'px'; }, timeout);
   }
   game.settings['graphics'] = parseInt(ui.querySelector('input[name="upInTheAirGame-graphics"]:checked').value, 10);
+  if(game.view) {
+    let resolution = Math.round(3200 / Math.pow(2, game.settings['graphics']));
+    game.view.canvas.width = resolution;
+    game.view.canvas.height = resolution;
+    game.view.camera.updateProjectionMatrix();
+    game.view.renderer.setSize(game.view.canvas.width, game.view.canvas.height);
+  }
   for(let audioCategory of ['music', 'sounds']) {
     game.settings['audio'][audioCategory] = parseInt(ui.querySelector('.audio input[type=range].' + audioCategory).value, 10) / 100;
   }