使用clock_gettime将此函数获取时间作为双倍:
// return current time in milliseconds
static double time_get_ms(void)
{
struct timespec res;
#ifdef ANDROID
clock_gettime(CLOCK_REALTIME_HR, &res);
#else
clock_gettime(CLOCK_REALTIME, &res);
#endif
return (double)(1000.0*res.tv_sec + res.tv_nsec/1e6);
}
将其发送到着色器需要转换为浮点数。尾数溢出并在通往着色器的途中被截断。
例子:
作为双 = 1330579093642.441895
作为浮点数 = 1330579111936.000000
由于截断,浮点值长时间停留在单个数字上。
似乎 res.tv_sec 中的秒值对于浮点数来说也太大了,它也在通往 GPU 的途中被截断。
试图测量自应用程序启动以来的时间,我很快遇到了同样的问题。
那么将运行时间值放入着色器的最佳方法是什么?linux 世界中的跨平台(如 IOS、Android、Linux)。