OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |