webgl渲染一帧所用时间测试
为了衡量渲染时间,我在开始和结束时都加上了时间戳。
我正在两台计算机上运行它:客户端和服务器
我不知道这种方法是否适合计算渲染时间。即使以某种方式,我仍然感觉到代码已被执行,在硬件级别,渲染的图像尚未显示在浏览器窗口中。如何了解为各个交互更新的各个框架。如果获得该状态,那么也许我可以正确计算渲染时间。
drawVolume = function() { start3 = new Date().getTime(); gl.clearColor(0.0, 0.0, 0.0, 0.0); gl.enable(gl.DEPTH_TEST); gl.bindFramebuffer(gl.FRAMEBUFFER, gl.fboBackCoord); gl.shaderProgram = gl.shaderProgram_BackCoord; gl.useProgram(gl.shaderProgram); gl.clearDepth(-50.0); gl.depthFunc(gl.GEQUAL); drawCube(gl,cube); gl.bindFramebuffer(gl.FRAMEBUFFER, null); gl.shaderProgram = gl.shaderProgram_RayCast; gl.useProgram(gl.shaderProgram); gl.clearDepth(50.0); gl.depthFunc(gl.LEQUAL); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, gl.fboBackCoord.tex); gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, gl.vol_tex); gl.activeTexture(gl.TEXTURE2); gl.bindTexture(gl.TEXTURE_2D, gl.tf_tex); gl.uniform1i(gl.getUniformLocation(gl.shaderProgram,"uBackCoord"), 0); gl.uniform1i(gl.getUniformLocation(gl.shaderProgram,"uVolData"), 1); gl.uniform1i(gl.getUniformLocation(gl.shaderProgram,"uTransferFunction"), 2); //Set Texture drawCube(gl,cube); end3 = new Date().getTime(); render_time=end3-start3; console.log(render_time); }
参考:https://www.codenong.com/39922716/(How to calculate rendering time in WebGL? Looks like I am calculating it wrongly.)
>>Cesium渲染一帧中用到的图形技术:http://www.360doc.com/content/21/1115/20/65839921_1004309620.shtml
本文通过追溯Cesium的Scene.render,解释了Cesium 1.9如何使用其WebGL渲染器渲染每一帧。在Scene.render中放置一 个断点, 运行一个Cesium应用,然后继续。 由于Cesium专注于可视化地理空间内容,因此使用许多不同光源的场景并不常见,因此 Cesium使用传统的前向阴影管线(Forward Rendering)。Cesium的管道之所以独特,是因为它使用了多个视锥体来支持巨大的视距,避免造成Z-fighting现象[Cozzi13]。 译者注:正向渲染/前向渲染(Forward Rendering)与延迟渲染(Deferred Rendering)相对,延迟渲染多用于多光照的场合。参看《正向渲染和延迟渲染彼此之间有什么不同》。
设置
Cesium将具有帧生存期的常量存储在FrameState对象中。在每一帧的开始阶段,将使用诸如相机参数和仿真时间之类的值对其进行初始化。这个FrameState对可用于其他对象, 例如在整个帧周期中生成命令(绘图调用)的图元(primitives) 。
标签:浏览器,render,渲染,WebGL,shaderProgram,计算,Cesium,gl From: https://www.cnblogs.com/2008nmj/p/16888267.html