Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Side by Side Diff: samples/beachdemo/beachdemo.js

Issue 147258: Add a utility to adjust rendering quality based on rendering performance. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: Fixed the last few comments and added js_list.scons. Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « plugin/idl/pack.idl ('k') | samples/o3djs/js_list.scons » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2009, Google Inc. 2 * Copyright 2009, Google Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 o3djs.require('o3djs.quaternions'); 42 o3djs.require('o3djs.quaternions');
43 o3djs.require('o3djs.dump'); 43 o3djs.require('o3djs.dump');
44 o3djs.require('o3djs.camera'); 44 o3djs.require('o3djs.camera');
45 o3djs.require('o3djs.primitives'); 45 o3djs.require('o3djs.primitives');
46 o3djs.require('o3djs.loader'); 46 o3djs.require('o3djs.loader');
47 o3djs.require('o3djs.picking'); 47 o3djs.require('o3djs.picking');
48 o3djs.require('o3djs.canvas'); 48 o3djs.require('o3djs.canvas');
49 o3djs.require('o3djs.fps'); 49 o3djs.require('o3djs.fps');
50 o3djs.require('o3djs.debug'); 50 o3djs.require('o3djs.debug');
51 o3djs.require('o3djs.particles'); 51 o3djs.require('o3djs.particles');
52 o3djs.require('o3djs.performance');
52 53
53 var RENDER_TARGET_WIDTH = 256;
54 var RENDER_TARGET_HEIGHT = 256;
55 var PROXY_HEIGHT = 5150; 54 var PROXY_HEIGHT = 5150;
56 55
57 // client.root 56 // client.root
58 // | 57 // |
59 // g_mainRoot 58 // g_mainRoot
60 // | 59 // |
61 // +-----+--------+----------------+ 60 // +-----+--------+----------------+
62 // | | | 61 // | | |
63 // g_baseRoot g_waterTransform g_skyDomeTransform 62 // g_baseRoot g_waterTransform g_skyDomeTransform
64 // | 63 // |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 var g_loadInfo; 120 var g_loadInfo;
122 var g_reflectionClipState; 121 var g_reflectionClipState;
123 var g_refractionClipState; 122 var g_refractionClipState;
124 var g_mainRenderGraphRoot; 123 var g_mainRenderGraphRoot;
125 var g_reflectionSurfaceSet; 124 var g_reflectionSurfaceSet;
126 var g_refractionSurfaceSet; 125 var g_refractionSurfaceSet;
127 var g_skyDomeTransform; 126 var g_skyDomeTransform;
128 var g_waterTransform; 127 var g_waterTransform;
129 var g_reflectionTexture; 128 var g_reflectionTexture;
130 var g_refractionTexture; 129 var g_refractionTexture;
130 var g_reflectionImage;
131 var g_refrectionImage;
132 var g_depthSurface;
131 var g_globalParams; 133 var g_globalParams;
132 var g_globalClockParam; 134 var g_globalClockParam;
133 var g_clipHeightParam; 135 var g_clipHeightParam;
134 var g_lightPositionParam; 136 var g_lightPositionParam;
135 var g_lightDirectionParam; 137 var g_lightDirectionParam;
136 var g_lightColorParam; 138 var g_lightColorParam;
137 var g_proxyOffsetParam; 139 var g_proxyOffsetParam;
138 var g_originalLightColor; 140 var g_originalLightColor;
139 var g_viewPositionParam; 141 var g_viewPositionParam;
140 var g_underwaterMaterials; 142 var g_underwaterMaterials;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 var g_waterColor = [0.13, 0.19, 0.22, 1]; 175 var g_waterColor = [0.13, 0.19, 0.22, 1];
174 var g_hudQuad; 176 var g_hudQuad;
175 var g_fpsManager; 177 var g_fpsManager;
176 var g_fpsVisible = false; 178 var g_fpsVisible = false;
177 var g_particleSystem; 179 var g_particleSystem;
178 var g_particleLoader; 180 var g_particleLoader;
179 var g_downloadPercent = -1; 181 var g_downloadPercent = -1;
180 var g_showError = false; 182 var g_showError = false;
181 var g_sceneEffects = []; 183 var g_sceneEffects = [];
182 var g_sceneTexturesByURI; 184 var g_sceneTexturesByURI;
185 var g_renderTargetWidth = 256;
186 var g_renderTargetHeight = 256;
187 var g_perfMon;
183 188
184 var g_camera = { 189 var g_camera = {
185 farPlane: 80000, 190 farPlane: 80000,
186 nearPlane: 10, 191 nearPlane: 10,
187 up: [0, 0, 1], 192 up: [0, 0, 1],
188 fieldOfView: Math.PI / 4, // 45 degrees 193 fieldOfView: Math.PI / 4, // 45 degrees
189 eye: [-9662, -10927, 1920], 194 eye: [-9662, -10927, 1920],
190 targetVector: [0.43, 0.90, 0.02], 195 targetVector: [0.43, 0.90, 0.02],
191 xAxis: [0.8335, -0.5522, -0.0157], 196 xAxis: [0.8335, -0.5522, -0.0157],
192 minFieldOfView: 5 * Math.PI / 180, 197 minFieldOfView: 5 * Math.PI / 180,
(...skipping 1341 matching lines...) Expand 10 before | Expand all | Expand 10 after
1534 1539
1535 o3djs.dump.dump('---dump g_scenePack effects---\n'); 1540 o3djs.dump.dump('---dump g_scenePack effects---\n');
1536 var effects = g_scenePack.getObjectsByClassName('o3d.Effect'); 1541 var effects = g_scenePack.getObjectsByClassName('o3d.Effect');
1537 for (var t = 0; t < effects.length; t++) { 1542 for (var t = 0; t < effects.length; t++) {
1538 o3djs.dump.dump (' ' + t + ' : ' + effects[t].className + 1543 o3djs.dump.dump (' ' + t + ' : ' + effects[t].className +
1539 ' : "' + effects[t].name + '"\n'); 1544 ' : "' + effects[t].name + '"\n');
1540 o3djs.dump.dumpParams(effects[t], ' '); 1545 o3djs.dump.dumpParams(effects[t], ' ');
1541 } 1546 }
1542 } 1547 }
1543 } 1548 }
1549 g_perfMon = o3djs.performance.createPerformanceMonitor(
1550 25, 35, increaseRenderTargetResolution, decreaseRenderTargetResolution);
1544 } 1551 }
1545 1552
1546 try { 1553 try {
1547 // We need to make a subloader because we can't make the particles 1554 // We need to make a subloader because we can't make the particles
1548 // until both the scene and the particle textures are loaded. 1555 // until both the scene and the particle textures are loaded.
1549 g_loadInfo = g_loader.loadInfo; 1556 g_loadInfo = g_loader.loadInfo;
1550 g_particleLoader = g_loader.createLoader(setupParticles); 1557 g_particleLoader = g_loader.createLoader(setupParticles);
1551 g_particleLoader.loadTexture( 1558 g_particleLoader.loadTexture(
1552 g_mainPack, 1559 g_mainPack,
1553 o3djs.util.getAbsoluteURI('assets/pe_fire.jpg'), 1560 o3djs.util.getAbsoluteURI('assets/pe_fire.jpg'),
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
1808 setSpeedTransforms(true, false, false); 1815 setSpeedTransforms(true, false, false);
1809 g_clipHeightParam.value = g_mainClipHeight; 1816 g_clipHeightParam.value = g_mainClipHeight;
1810 g_client.root.identity(); 1817 g_client.root.identity();
1811 g_client.renderTree(g_mainViewInfo.root); 1818 g_client.renderTree(g_mainViewInfo.root);
1812 1819
1813 // Render the HUD. 1820 // Render the HUD.
1814 g_client.renderTree(g_hudViewInfo.root); 1821 g_client.renderTree(g_hudViewInfo.root);
1815 1822
1816 // Render the FPS display. 1823 // Render the FPS display.
1817 g_client.renderTree(g_fpsManager.viewInfo.root); 1824 g_client.renderTree(g_fpsManager.viewInfo.root);
1825
1826 if (g_perfMon) {
1827 g_perfMon.onRender(renderEvent.elapsedTime);
1828 }
1818 } 1829 }
1819 1830
1820 function onAllLoadingFinished() { 1831 function onAllLoadingFinished() {
1821 g_loader = null; 1832 g_loader = null;
1822 g_animateCamera = true; 1833 g_animateCamera = true;
1823 1834
1824 showHint(); 1835 showHint();
1825 1836
1826 window.g_finished = true; // for selenium testing. 1837 window.g_finished = true; // for selenium testing.
1827 } 1838 }
1828 1839
1829 /** 1840 /**
1830 * Creates the client area. 1841 * Creates the client area.
1831 */ 1842 */
1832 function init() { 1843 function init() {
1833 // These are here so they are shared by both V8 and the browser. 1844 // These are here so they are shared by both V8 and the browser.
1834 window.g_finished = false; // for selenium 1845 window.g_finished = false; // for selenium
1835 window.g_timeMult = 1; 1846 window.g_timeMult = 1;
1836 window.g_clock = 0; 1847 window.g_clock = 0;
1837 1848
1838 // Comment out the line below to run the sample in the browser JavaScript 1849 // Comment out the line below to run the sample in the browser JavaScript
1839 // engine. This may be helpful for debugging. 1850 // engine. This may be helpful for debugging.
1840 o3djs.util.setMainEngine(o3djs.util.Engine.V8); 1851 o3djs.util.setMainEngine(o3djs.util.Engine.V8);
1841 1852
1842 o3djs.util.addScriptUri(''); 1853 o3djs.util.addScriptUri('');
1843 o3djs.util.makeClients(initStep2, 'LargeGeometry'); 1854 o3djs.util.makeClients(initStep2, 'LargeGeometry');
1844 } 1855 }
1845 1856
1857 function setupRenderTargets() {
1858 var oldReflectionTexture;
1859 var oldRefractionTexture;
1860 var oldDepthSurface;
1861
1862 if (g_reflectionTexture) {
1863 g_mainPack.removeObject(g_reflectionSurfaceSet.renderSurface);
1864 g_mainPack.removeObject(g_refractionSurfaceSet.renderSurface);
1865 g_mainPack.removeObject(g_reflectionTexture);
1866 g_mainPack.removeObject(g_refractionTexture);
1867 g_mainPack.removeObject(g_depthSurface);
1868 } else {
1869 // First time only.
1870 g_reflectionSurfaceSet = g_mainPack.createObject('RenderSurfaceSet');
1871 g_refractionSurfaceSet = g_mainPack.createObject('RenderSurfaceSet');
1872 }
1873
1874 // Create Render Targets for the reflection and refraction.
1875 g_reflectionTexture = g_mainPack.createTexture2D(g_renderTargetWidth,
1876 g_renderTargetHeight,
1877 g_o3d.Texture.ARGB8, 1,
1878 true);
1879 var reflectionSurface = g_reflectionTexture.getRenderSurface(0, g_mainPack);
1880 g_refractionTexture = g_mainPack.createTexture2D(g_renderTargetWidth,
1881 g_renderTargetHeight,
1882 g_o3d.Texture.XRGB8, 1,
1883 true);
1884 var refractionSurface = g_refractionTexture.getRenderSurface(0, g_mainPack);
1885 g_depthSurface = g_mainPack.createDepthStencilSurface(g_renderTargetWidth,
1886 g_renderTargetHeight);
1887
1888 // Set up the render graph to generate them.
1889 g_reflectionSurfaceSet.renderSurface = reflectionSurface;
1890 g_reflectionSurfaceSet.renderDepthStencilSurface = g_depthSurface;
1891
1892 g_refractionSurfaceSet.renderSurface = refractionSurface;
1893 g_refractionSurfaceSet.renderDepthStencilSurface = g_depthSurface;
1894
1895 g_updateRenderTargets = true;
1896
1897 if (g_waterMaterial) { // Every time after the first.
1898 var sampler = g_waterMaterial.getParam('reflectionSampler').value;
1899 sampler.texture = g_reflectionTexture;
1900 sampler = g_waterMaterial.getParam('refractionSampler').value;
1901 sampler.texture = g_refractionTexture;
1902 g_reflectionImage.sampler.texture = g_reflectionTexture;
1903 g_refractionImage.sampler.texture = g_refractionTexture;
1904 }
1905 }
1906
1907 function increaseRenderTargetResolution() {
1908 var changed;
1909 if (g_renderTargetWidth < 2048) {
1910 g_renderTargetWidth <<= 1;
1911 changed = true;
1912 }
1913 if (g_renderTargetHeight < 2048) {
1914 g_renderTargetHeight <<= 1;
1915 changed = true;
1916 }
1917 setupRenderTargets();
1918 }
1919
1920 function decreaseRenderTargetResolution() {
1921 var changed;
1922 if (g_renderTargetWidth > 256) {
1923 g_renderTargetWidth >>= 1;
1924 changed = true;
1925 }
1926 if (g_renderTargetHeight > 256) {
1927 g_renderTargetHeight >>= 1;
1928 changed = true;
1929 }
1930 setupRenderTargets();
1931 }
1932
1846 /** 1933 /**
1847 * Initializes O3D and loads the scene into the transform graph. 1934 * Initializes O3D and loads the scene into the transform graph.
1848 * @param {Array} clientElements Array of o3d object elements. 1935 * @param {Array} clientElements Array of o3d object elements.
1849 */ 1936 */
1850 function initStep2(clientElements) { 1937 function initStep2(clientElements) {
1851 g_materialPanelElement = o3djs.util.getElementById('materialpanel'); 1938 g_materialPanelElement = o3djs.util.getElementById('materialpanel');
1852 g_propPanelElement = o3djs.util.getElementById('proppanel'); 1939 g_propPanelElement = o3djs.util.getElementById('proppanel');
1853 g_effectPanelElement = o3djs.util.getElementById('effectpanel'); 1940 g_effectPanelElement = o3djs.util.getElementById('effectpanel');
1854 g_upperPanelElement = o3djs.util.getElementById('upperpanel'); 1941 g_upperPanelElement = o3djs.util.getElementById('upperpanel');
1855 g_effectTabsElement = o3djs.util.getElementById('effecttabs'); 1942 g_effectTabsElement = o3djs.util.getElementById('effecttabs');
1856 g_effectTextAreaElement = o3djs.util.getElementById('effecttextarea'); 1943 g_effectTextAreaElement = o3djs.util.getElementById('effecttextarea');
1857 g_sceneElement = o3djs.util.getElementById('o3d'); 1944 g_sceneElement = o3djs.util.getElementById('o3d');
1858 1945
1859 g_o3dElement = clientElements[0]; 1946 g_o3dElement = clientElements[0];
1860 g_o3d = g_o3dElement.o3d; 1947 g_o3d = g_o3dElement.o3d;
1861 g_math = o3djs.math; 1948 g_math = o3djs.math;
1862 g_quaternions = o3djs.quaternions; 1949 g_quaternions = o3djs.quaternions;
1863 window.g_client = g_client = g_o3dElement.client; 1950 window.g_client = g_client = g_o3dElement.client;
1864 1951
1865 g_mainPack = g_client.createPack(); 1952 g_mainPack = g_client.createPack();
1866 g_scenePack = g_client.createPack(); 1953 g_scenePack = g_client.createPack();
1867 1954
1868 // Create Render Targets for the reflection and refraction.
1869 g_reflectionTexture = g_mainPack.createTexture2D(RENDER_TARGET_WIDTH,
1870 RENDER_TARGET_HEIGHT,
1871 g_o3d.Texture.ARGB8, 1,
1872 true);
1873 var reflectionSurface = g_reflectionTexture.getRenderSurface(0, g_mainPack);
1874 g_refractionTexture = g_mainPack.createTexture2D(RENDER_TARGET_WIDTH,
1875 RENDER_TARGET_HEIGHT,
1876 g_o3d.Texture.XRGB8, 1,
1877 true);
1878 var refractionSurface = g_refractionTexture.getRenderSurface(0, g_mainPack);
1879 var depthSurface = g_mainPack.createDepthStencilSurface(RENDER_TARGET_WIDTH,
1880 RENDER_TARGET_HEIGHT);
1881
1882 g_mainRoot = g_mainPack.createObject('Transform'); 1955 g_mainRoot = g_mainPack.createObject('Transform');
1883 g_baseRoot = g_scenePack.createObject('Transform'); 1956 g_baseRoot = g_scenePack.createObject('Transform');
1884 g_baseRoot.parent = g_mainRoot; 1957 g_baseRoot.parent = g_mainRoot;
1885 g_sceneRoot = g_scenePack.createObject('Transform'); 1958 g_sceneRoot = g_scenePack.createObject('Transform');
1886 g_sceneRoot.parent = g_baseRoot; 1959 g_sceneRoot.parent = g_baseRoot;
1887 g_mainRoot.parent = g_client.root; 1960 g_mainRoot.parent = g_client.root;
1888 g_sceneRoot.translate(0, 0, -g_waterLevel); 1961 g_sceneRoot.translate(0, 0, -g_waterLevel);
1889 1962
1890 // Setup the render graph to generate them. 1963 setupRenderTargets();
1891 g_reflectionSurfaceSet = g_mainPack.createObject('RenderSurfaceSet');
1892 g_reflectionSurfaceSet.renderSurface = reflectionSurface;
1893 g_reflectionSurfaceSet.renderDepthStencilSurface = depthSurface;
1894
1895 g_refractionSurfaceSet = g_mainPack.createObject('RenderSurfaceSet');
1896 g_refractionSurfaceSet.renderSurface = refractionSurface;
1897 g_refractionSurfaceSet.renderDepthStencilSurface = depthSurface;
1898 1964
1899 // Create states to set clipping. 1965 // Create states to set clipping.
1900 g_reflectionClipState = g_mainPack.createObject('State'); 1966 g_reflectionClipState = g_mainPack.createObject('State');
1901 g_reflectionClipState.getStateParam('AlphaTestEnable').value = true; 1967 g_reflectionClipState.getStateParam('AlphaTestEnable').value = true;
1902 g_reflectionClipState.getStateParam('AlphaComparisonFunction').value = 1968 g_reflectionClipState.getStateParam('AlphaComparisonFunction').value =
1903 g_o3d.State.CMP_GREATER; 1969 g_o3d.State.CMP_GREATER;
1904 var reflectionStateSet = g_mainPack.createObject('StateSet'); 1970 var reflectionStateSet = g_mainPack.createObject('StateSet');
1905 reflectionStateSet.state = g_reflectionClipState; 1971 reflectionStateSet.state = g_reflectionClipState;
1906 reflectionStateSet.parent = g_reflectionSurfaceSet; 1972 reflectionStateSet.parent = g_reflectionSurfaceSet;
1907 1973
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after
2533 var backTexture = g_mainPack.createTexture2D( 2599 var backTexture = g_mainPack.createTexture2D(
2534 1, 1, g_o3d.Texture.XRGB8, 1, false); 2600 1, 1, g_o3d.Texture.XRGB8, 1, false);
2535 backTexture.set(0, [1, 1, 1]); 2601 backTexture.set(0, [1, 1, 1]);
2536 2602
2537 g_whiteTexture = backTexture; 2603 g_whiteTexture = backTexture;
2538 g_whiteSampler = g_mainPack.createObject('Sampler'); 2604 g_whiteSampler = g_mainPack.createObject('Sampler');
2539 g_whiteSampler.texture = g_whiteTexture; 2605 g_whiteSampler.texture = g_whiteTexture;
2540 2606
2541 // Make images to show the render targets. 2607 // Make images to show the render targets.
2542 for (var ii = 0; ii < 2; ++ii) { 2608 for (var ii = 0; ii < 2; ++ii) {
2609 var textureDisplaySquareSize = 256;
2543 var renderTargetTexture = (ii == 0) ? g_reflectionTexture : 2610 var renderTargetTexture = (ii == 0) ? g_reflectionTexture :
2544 g_refractionTexture; 2611 g_refractionTexture;
2545 var scale = 1;
2546 var x = 10; 2612 var x = 10;
2547 var y = 10 + ii * (g_reflectionTexture.height * scale + 10); 2613 var y = 10 + ii * (textureDisplaySquareSize + 10);
2548 var borderSize = 2; 2614 var borderSize = 2;
2549 var image; 2615 var image;
2550 // make a back image to create a border around render target. 2616 // make a back image to create a border around render target.
2551 image = new Image(g_renderTargetDisplayRoot, backTexture, true); 2617 image = new Image(g_renderTargetDisplayRoot, backTexture, true);
2552 image.transform.translate(x - borderSize, y - borderSize, -3); 2618 image.transform.translate(x - borderSize, y - borderSize, -3);
2553 image.transform.scale(renderTargetTexture.width * scale + borderSize * 2, 2619 image.transform.scale(textureDisplaySquareSize + borderSize * 2,
2554 renderTargetTexture.height * scale + borderSize * 2, 2620 textureDisplaySquareSize + borderSize * 2,
2555 1); 2621 1);
2556 image = new Image(g_renderTargetDisplayRoot, renderTargetTexture, true); 2622 image = new Image(g_renderTargetDisplayRoot, renderTargetTexture, true);
2557 image.transform.translate(x, y, -2); 2623 image.transform.translate(x, y, -2);
2558 image.transform.scale(scale, scale, 1); 2624 image.transform.scale(textureDisplaySquareSize / g_renderTargetWidth,
2625 textureDisplaySquareSize / g_renderTargetHeight, 1);
2626 if (ii == 0) {
2627 g_reflectionImage = image;
2628 } else {
2629 g_refractionImage = image;
2630 }
2559 } 2631 }
2560 2632
2561 // Make a fader plane. 2633 // Make a fader plane.
2562 { 2634 {
2563 var image = new Image(g_hudRoot, backTexture, true); 2635 var image = new Image(g_hudRoot, backTexture, true);
2564 g_faderTransform = image.transform; 2636 g_faderTransform = image.transform;
2565 g_faderTransform.visible = false; 2637 g_faderTransform.visible = false;
2566 g_faderColorParam = image.colorParam; 2638 g_faderColorParam = image.colorParam;
2567 updateFaderPlane(); 2639 updateFaderPlane();
2568 } 2640 }
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
2654 2726
2655 /** 2727 /**
2656 * Removes any callbacks so they don't get called after the page has unloaded. 2728 * Removes any callbacks so they don't get called after the page has unloaded.
2657 */ 2729 */
2658 function uninit() { 2730 function uninit() {
2659 if (g_client) { 2731 if (g_client) {
2660 g_client.cleanup(); 2732 g_client.cleanup();
2661 } 2733 }
2662 } 2734 }
2663 2735
OLDNEW
« no previous file with comments | « plugin/idl/pack.idl ('k') | samples/o3djs/js_list.scons » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698