WebGL 启动加载触发更新流程分析

WebGL 启动加载触发更新流程分析

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

requestAnimFrame(tick);

此命令是 HTML5 中新增的用于替换定时器触发更新的命令,以实现动画更新,其后台实现有一特殊之处,是将页面上的动画进行合并再呈现,提供了很高的执行效率,且当当前页面标签离开未展现在屏幕上时,其自动暂停。

不妨试一试,打开一个 html5 的三维示例,展现的过程中,CPU 风扇在几分钟后会狂转不止;但将页面标签切换到其它页面,再过几分钟,CPU 风扇明显降速,发热也没那么大了。

不过还不清楚是 CPU 还是 GPU发热,如果能找一部台式机来测试,打开机箱盖子,摸一下两者的散热片温度前后变化应该就能很清楚了,或者用温度监测软件也可以查得到。

moonAngle 和 cubeAngle 是两个用于视图模型转换时使用的视角的变化值,这里通过动画更新,使其随时间的流逝,发生一定角度的旋转,以达到动态更新旋转的展示目的。

当仅保留  drawScene(); 这一句时,并不会呈现出内容来,而 animate(); 仅用于更新旋转角度,可以不考虑,那么 requestAnimFrame(tick); 这一句可能是确保其显示的一个必要条件;

然而,requestAnimFrame(tick); 在我的理解中,它仅用于触发执行 tick(); 方法本身,怎么会有这样致命的影响呢?

也许资源的延迟加载,可能需要定时刷新以达到更新各状态的最新结果吧。

这是否对于静态显示来说,资源消耗过大呢?又或者,我们是否可以以另一种方式,即加载完成触发的方式来考虑这个问题进行解决呢?

那么 JS 也许可以有这样的功能吧!也许 JQuery 对 JS 事件的封装可能会很好的解决这些问题,有待进一步研究,后文续补。

var lastTime = 0;

function animate() {
    var timeNow = new Date().getTime();
    if (lastTime != 0) {
        var elapsed = timeNow - lastTime;

        moonAngle += 0.05 * elapsed;
        cubeAngle += 0.01 * elapsed;
    }
    lastTime = timeNow;
}

function tick() {
    requestAnimFrame(tick);
    drawScene();
    animate();
}

function webGLStart() {
    var canvas = document.getElementById("lesson13-canvas");
    initGL(canvas);

    // 清屏并启用深度测试
    gl.clearColor(0.0, 0.0, 0.0, 1.0);
    gl.enable(gl.DEPTH_TEST);

    initShaders();
    initBuffers();
    initTextures();
    tick();
}
时间: 2024-12-08 10:37:50

WebGL 启动加载触发更新流程分析的相关文章

从代码分析Android-Universal-Image-Loader的图片加载、显示流程

从UNIVERSAL IMAGE LOADER. PART 3(四个DisplayImage重载方法详解)中,我们学习了Android-Universal-Image-Loader(以下简称UIL)中四个DisplayImage重载方法的使用,如果你还没有学习,最好先返回去看看,不然可能不理解这篇文章.在这篇文章中我们将主要探讨Android-Universal-Image-Loader的主要流程和这些流程相关的类的分析. 我们先了解一下UIL加载图片的流程(可以通过查看ImageLoader.

VS2012启动/加载项目出问题

VS2012启动/加载项目出问题,未能正确加载"Microsoft.VisualStudio.Editor.Implementation.EditorPackage" 未能正确加载"Microsoft.VisualStudio.Editor.Implementation.EditorPackage, Microsoft.VisualStudio.Editor.Implementation, Version=10.0.0.0, Culture=neutral, PublicKe

android eclipse-关于eclipce启动加载SDK失败的问题

问题描述 关于eclipce启动加载SDK失败的问题 如图,刚刚启动的eclipce,系统显示找不到d盘devices的声明,我的SDK是放在D盘的根目录的android_sdk_window目录下的,请各位大神们帮忙解决下呗 解决方案 为何不下载adt bundle? adt google已经不用了, 早就改成Android Studio 路径尽量不要带中文哈

spring集成velocity,项目启动加载不到vm页面是为什么?

问题描述 spring集成velocity,项目启动加载不到vm页面是为什么? 这是在spring_mvc中的配置: <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename" value="views"></property> </bean> <

spring启动component-scan类扫描加载过程---源码分析

最近因为写书的事情,一段时间没有写博客了,有朋友最近问到了spring加载类的过程,尤其是基于annotation注解的加载过程,有些时候如果由于某些系统部署的问题,加载不到,很是不解!就针对这个问题,我这篇博客说说spring启动过程,用源码来说明,这部分内容也会在书中出现,只是表达方式会稍微有些区别,我将使用spring 3.0的版本来说明(虽然版本有所区别,但是变化并不是特别大),另外,这里会从WEB中使用spring开始,中途会穿插自己通过new ClassPathXmlApplicat

jQuery实现DOM加载方法源码分析

传统的判断dom加载的方法 使用 dom0级 onload事件来进行触发所有浏览器都支持在最初是很流行的写法 我们都熟悉这种写法: window.onload=function(){             ...           }  但是onload事件触发过于缓慢,尤其是在存在很多外部图片或者视频文件的时候,为了更好的了解这一点有必要知道一个html文档是如何进行加载的,这里引用一个园友的表述: 1.用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器

启动加载项减少方法

  许多应用程序在安装时都会自作主张添加至系统启动组,每次启动系统都会自动运行,这不仅延长了启动时间,而且启动完成后系统资源已经被消耗掉! 系统配置实用程序",在"启动"项中列出了系统启动时加载的项目及来源,仔细查看是否需要它自动加载,否则清除项目前的复选框,加载的项目愈少,启动的速度自然愈快.此项需要重新启动方能生效

Android通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

   在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一是通过AsyncTask来实现,另一种方式则是通过ThreadPool来实现,今天我们就通过一个例子来讲解和对比这两种实现方式.     本文原创,如需转载,请注明转载地址http://blog.csdn.net/carrey1989/article/details/12002033     项

Spring Boot 启动加载数据 CommandLineRunner

实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求. 为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现. 很简单,只需要一个类就可以,无需其他配置. 创建实现接口 CommandLineRunner 的类 package org.springboot.sample.runner; import org.springframework.boot.CommandLineRunner; import