mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 23:14:34 +02:00
move template functions to header
This commit is contained in:
parent
5fa8571c0b
commit
b4362ea85a
2 changed files with 48 additions and 46 deletions
|
@ -120,50 +120,6 @@ template<> glm::uint32 forEach<glm::vec3>(const gpu::BufferView& view, std::func
|
||||||
return forEachGlmVec<glm::vec3>(view, func);
|
return forEachGlmVec<glm::vec3>(view, func);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
QVariant glmVecToVariant(const T& v, bool asArray /*= false*/) {
|
|
||||||
static const auto len = T().length();
|
|
||||||
if (asArray) {
|
|
||||||
QVariantList list;
|
|
||||||
for (int i = 0; i < len ; i++) {
|
|
||||||
list << v[i];
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
} else {
|
|
||||||
QVariantMap obj;
|
|
||||||
for (int i = 0; i < len ; i++) {
|
|
||||||
obj[XYZW[i]] = v[i];
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
const T glmVecFromVariant(const QVariant& v) {
|
|
||||||
auto isMap = v.type() == (QVariant::Type)QMetaType::QVariantMap;
|
|
||||||
static const auto len = T().length();
|
|
||||||
const auto& components = isMap ? XYZW : ZERO123;
|
|
||||||
T result;
|
|
||||||
QVariantMap map;
|
|
||||||
QVariantList list;
|
|
||||||
if (isMap) map = v.toMap(); else list = v.toList();
|
|
||||||
for (int i = 0; i < len ; i++) {
|
|
||||||
float value;
|
|
||||||
if (isMap) {
|
|
||||||
value = map.value(components[i]).toFloat();
|
|
||||||
} else {
|
|
||||||
value = list.value(i).toFloat();
|
|
||||||
}
|
|
||||||
#ifdef DEBUG_BUFFERVIEW_HELPERS
|
|
||||||
if (value != value) { // NAN
|
|
||||||
qWarning().nospace()<< "vec" << len << "." << components[i] << " NAN received from script.... " << v.toString();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
result[i] = value;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// QVector<T> => BufferView
|
// QVector<T> => BufferView
|
||||||
template <typename T>
|
template <typename T>
|
||||||
gpu::BufferView newFromVector(const QVector<T>& elements, const gpu::Element& elementType) {
|
gpu::BufferView newFromVector(const QVector<T>& elements, const gpu::Element& elementType) {
|
||||||
|
|
|
@ -27,8 +27,54 @@ namespace buffer_helpers {
|
||||||
extern const std::array<const char*, 4> XYZW;
|
extern const std::array<const char*, 4> XYZW;
|
||||||
extern const std::array<const char*, 4> ZERO123;
|
extern const std::array<const char*, 4> ZERO123;
|
||||||
|
|
||||||
template <typename T> QVariant glmVecToVariant(const T& v, bool asArray = false);
|
template <typename T>
|
||||||
template <typename T> const T glmVecFromVariant(const QVariant& v);
|
QVariant glmVecToVariant(const T& v, bool asArray = false) {
|
||||||
|
static const auto len = T().length();
|
||||||
|
if (asArray) {
|
||||||
|
QVariantList list;
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
list << v[i];
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
} else {
|
||||||
|
QVariantMap obj;
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
obj[XYZW[i]] = v[i];
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
const T glmVecFromVariant(const QVariant& v) {
|
||||||
|
auto isMap = v.type() == (QVariant::Type)QMetaType::QVariantMap;
|
||||||
|
static const auto len = T().length();
|
||||||
|
const auto& components = isMap ? XYZW : ZERO123;
|
||||||
|
T result;
|
||||||
|
QVariantMap map;
|
||||||
|
QVariantList list;
|
||||||
|
if (isMap) {
|
||||||
|
map = v.toMap();
|
||||||
|
} else {
|
||||||
|
list = v.toList();
|
||||||
|
}
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
float value;
|
||||||
|
if (isMap) {
|
||||||
|
value = map.value(components[i]).toFloat();
|
||||||
|
} else {
|
||||||
|
value = list.value(i).toFloat();
|
||||||
|
}
|
||||||
|
#ifdef DEBUG_BUFFERVIEW_HELPERS
|
||||||
|
if (value != value) { // NAN
|
||||||
|
qWarning().nospace() << "vec" << len << "." << components[i] << " NAN received from script.... " << v.toString();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
result[i] = value;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
glm::uint32 forEachVariant(const gpu::BufferView& view, std::function<bool(glm::uint32 index, const QVariant& value)> func, const char* hint = "");
|
glm::uint32 forEachVariant(const gpu::BufferView& view, std::function<bool(glm::uint32 index, const QVariant& value)> func, const char* hint = "");
|
||||||
template <typename T> glm::uint32 forEach(const gpu::BufferView& view, std::function<bool(glm::uint32 index, const T& value)> func);
|
template <typename T> glm::uint32 forEach(const gpu::BufferView& view, std::function<bool(glm::uint32 index, const T& value)> func);
|
||||||
|
|
Loading…
Reference in a new issue