这是我的秒表课程
public class Benchmark {
static long starttime;
static ArrayList<Long> timeList = new ArrayList<Long>();
public static void start() {
glFinish();
starttime = System.nanoTime();
}
public static void stop() {
glFinish();
timeList.add(System.nanoTime() - starttime);
if(timeList.size() > 10) {
Long total = (long) 0 ;
for(Long time : timeList) {
total += time;
}
System.out.println(((float)total / timeList.size())/1000000 );
timeList.clear();
}
}
这是简单的基准
Benchmark.start();
glBindVertexArray(vao);
Benchmark.stop();
我正在读取1ms的值,这怎么可能?我的秒表坏了吗?我注意到如果我注释掉一些绘制调用,那么它会读取较低的.2ms值,这很奇怪,因为它不应该影响它。
绑定真的很贵或者这里有什么问题?
答案 0 :(得分:3)
由于您拨打glFinish
,您的代码执行时间可能会缩短。
原因是glFinish
导致程序停止,直到所有连接/帧缓冲/状态更改完成为止:这包括任何绘制调用或缓冲区绑定。