は、二重使用にclock_gettimeとしての時間を取得し、この機能を取る:シェーダにそれを送信するシェーダ時間の制服 - に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);
}
はfloatに変換する必要があります。仮数はオーバーフローしており、シェーダへの途中で切り捨てられます。
例:floatとしてダブル= 1330579093642.441895
として
= 1330579111936.000000
フロート値による切り捨て長期間単一数で立ち往生。
また、res.tv_secの秒の値が浮動小数点数の場合でも、GPUへの途中で切り捨てられているようです。
アプリケーションが起動してから時間を測定しようとしていて、同じ問題がかなり早く発生します。
シェーダに実行時間の値を入力する最も良い方法は何ですか? Linuxの世界で何かがプラットフォームを超えています(IOS、Android、Linuxなど)。