小编Orb*_*den的帖子

浏览器刷新不做垃圾收集

我在所有测试的浏览器上都找到了这个 - 在Apple上的Window sand Safari上的IE,Firefox,Chrome和Safari.

据称,浏览器刷新,后退按钮或前向链接应该转储浏览器节点和javascript变量和对象等.这似乎不是WebGL的情况.我在开发一个需要大约100MB到200MB内存的复杂WebGL应用程序时首先注意到它.在开发过程中,我必须进行大量的刷新,并且在5-10次刷新后我的计算机将开始减速并冻结.

经过一些研究,我意识到这不应该.内存泄漏所接受的解决方案是刷新页面,该页面释放所有javascript对象和变量以及dom节点.但请看下面的图片:

那么这里的交易是什么?在小型应用程序上它没有被注意到,但是对于像我这样的大型WebGL应用程序(orbitingeden.com)来说,这是一个真正的问题,我的用户会认为该软件比实际上更加耗费资源.下图显示了这些刷新吞噬了所有可用内存,因此垃圾收集无法正常工作和/或JS和DOM对象未被释放:

http://orbitingeden.com/images/big_memory_after.png

有人知道强制浏览器进行真正的内存转储的技巧吗?为什么所有文件都错了?

javascript dom memory-leaks webgl page-refresh

9
推荐指数
1
解决办法
3572
查看次数

将夜间灯光添加到WebGL/Three.js地球

我正在使用Three.js作为开发空间模拟器的框架,我正在尝试,但没有让夜间灯工作.

可以在这里访问模拟器:

orbitingeden.com

并且可以在此处找到运行下面代码段的页面:

orbitingeden.com/orrery/soloearth.html

示例页面的代码在这里.我甚至不知道从哪里开始.我尝试将两个球体分开几个单位,一个接近太阳(白天版本)和另一个(夜间版本),但是存在许多问题,其中最重要的是它们开始在奇怪的十二面体中相互重叠方法.我从这个orrery采用了tDiffuse2的想法,但无法使它工作.

<!doctype html>
<html lang="en">
    <head>
        <title>three.js webgl - earth</title>
        <meta charset="utf-8">
        <script src="three.js/Detector.js"></script>
        <script src="three.js/Three.js"></script>
    </head>
    <body>
        <script>
            if ( ! Detector.webgl ) Detector.addGetWebGLMessage();

            var radius = 6371;
            var tilt = 0.41;
            var rotationSpeed = 0.02;
            var cloudsScale = 1.005;
            var SCREEN_HEIGHT = window.innerHeight;
            var SCREEN_WIDTH  = window.innerWidth;
            var container, camera, scene, renderer;
            var meshPlanet, meshClouds, dirLight, ambientLight;
            var clock = new THREE.Clock();

            init();
            animate();

            function init() {
                container = document.createElement( 'div' …
Run Code Online (Sandbox Code Playgroud)

webgl three.js

4
推荐指数
1
解决办法
5302
查看次数

将int16_t转换为uint_8t*

我有一个库驱动的结果存储为int16_t值(它是一个负数,我可以使用绝对值)和另一个库函数,需要这个值几步之后,形式为uin8_t*.如何在不使用String的情况下完成此操作?

以下代码有效,但使用了可怕的字符串.有没有办法在不调用String或std :: string的情况下执行此操作?

 void setup() {
      Serial.begin(9600);
    }

    void loop() {
      delay(5000);
      String initialVal= String(-fetchInt()); 
      Serial.print("Initial value is: ");Serial.println(initialVal);//prints "76"
      uint8_t medianVal[sizeof(initialVal);
      medianVal.getBytes(medianVal, sizeof(initialVal));
      Serial.print("median value is: ");Serial.println(medianVal);//prints "76"
      uint8_t* finalVal = medianVal;
      Serial.print("final value is: ");Serial.println((char*)finalVal);//prints "76"
      }

    int16_t fetchInt(){
      return -76;
    }
Run Code Online (Sandbox Code Playgroud)

那么,如何将int16_t转换为uint8_t*

在下面的评论中已经指出它 Serial.println(static_cast<unsigned>(*finalVal));可行,但是这个解决方案将uint8_t转换为unsigned int,并且该方法需要uint8_t*.

我来自Java之类,似乎很难将整数转换为字符串.

c++ int arduino uint16 uint8t

3
推荐指数
1
解决办法
139
查看次数

标签 统计

webgl ×2

arduino ×1

c++ ×1

dom ×1

int ×1

javascript ×1

memory-leaks ×1

page-refresh ×1

three.js ×1

uint16 ×1

uint8t ×1