| 20 | // |
| 21 | template<typename T> |
| 22 | std::string getFloatString(T v, GpuLanguage lang) |
| 23 | { |
| 24 | static_assert(!std::numeric_limits<T>::is_integer, "Only floating point values"); |
| 25 | |
| 26 | const T value = (lang == GPU_LANGUAGE_CG) ? (T)ClampToNormHalf(v) : v; |
| 27 | |
| 28 | T integerpart = (T)0; |
| 29 | const T fracpart = std::modf(value, &integerpart); |
| 30 | |
| 31 | std::ostringstream oss; |
| 32 | oss.precision(std::numeric_limits<T>::max_digits10); |
| 33 | oss << value << ((fracpart == (T)0) && std::isfinite(value) ? "." : ""); |
| 34 | return oss.str(); |
| 35 | } |
| 36 | |
| 37 | template<int N> |
| 38 | std::string getVecKeyword(GpuLanguage lang) |