Add direct conversion to map for xml nodes
This commit is contained in:
parent
eea6196231
commit
f70af4677c
@ -321,7 +321,7 @@ core::stringc ListUserConfigParam<T, U>::toString() const
|
|||||||
return "";
|
return "";
|
||||||
} // toString
|
} // toString
|
||||||
|
|
||||||
// ============================================================================
|
// ----------------------------------------------------------------------------
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||||
const char* comment)
|
const char* comment)
|
||||||
@ -331,7 +331,7 @@ MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
|||||||
if (comment != NULL) m_comment = comment;
|
if (comment != NULL) m_comment = comment;
|
||||||
} // MapUserConfigParam
|
} // MapUserConfigParam
|
||||||
|
|
||||||
// ============================================================================
|
// ----------------------------------------------------------------------------
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||||
const char* comment,
|
const char* comment,
|
||||||
@ -356,7 +356,7 @@ MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
|||||||
va_end(arguments); // Cleans up the list
|
va_end(arguments); // Cleans up the list
|
||||||
} // MapUserConfigParam
|
} // MapUserConfigParam
|
||||||
|
|
||||||
// ============================================================================
|
// ----------------------------------------------------------------------------
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||||
GroupUserConfigParam* group,
|
GroupUserConfigParam* group,
|
||||||
@ -367,7 +367,7 @@ MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
|||||||
if (comment != NULL) m_comment = comment;
|
if (comment != NULL) m_comment = comment;
|
||||||
} // MapUserConfigParam
|
} // MapUserConfigParam
|
||||||
|
|
||||||
// ============================================================================
|
// ----------------------------------------------------------------------------
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||||
GroupUserConfigParam* group,
|
GroupUserConfigParam* group,
|
||||||
@ -385,27 +385,22 @@ MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
|||||||
|
|
||||||
struct pair_type { T key; U value; };
|
struct pair_type { T key; U value; };
|
||||||
|
|
||||||
for (int i = 0; i < nb_elements; i++) {
|
for (int i = 0; i < nb_elements; i++)
|
||||||
|
{
|
||||||
pair_type key_value_pair = va_arg(arguments, pair_type);
|
pair_type key_value_pair = va_arg(arguments, pair_type);
|
||||||
m_elements.insert(std::pair<T, U>(key_value_pair.key, key_value_pair.value));
|
m_elements.insert(std::pair<T, U>(key_value_pair.key, key_value_pair.value));
|
||||||
}
|
}
|
||||||
va_end(arguments); // Cleans up the list
|
va_end(arguments); // Cleans up the list
|
||||||
} // MapUserConfigParam
|
} // MapUserConfigParam
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
void MapUserConfigParam<T, U>::write(std::ofstream& stream) const
|
void MapUserConfigParam<T, U>::write(std::ofstream& stream) const
|
||||||
{
|
{
|
||||||
const int elts_amount = m_elements.size();
|
|
||||||
|
|
||||||
// comment
|
// comment
|
||||||
if (m_comment.size() > 0) stream << " <!-- " << m_comment.c_str();
|
if (m_comment.size() > 0) stream << " <!-- " << m_comment.c_str();
|
||||||
stream << " -->\n <" << m_param_name.c_str() << "\n";
|
stream << " -->\n <" << m_param_name.c_str() << "\n";
|
||||||
|
|
||||||
stream << " Size=\"" << elts_amount << "\"\n";
|
|
||||||
// actual elements
|
|
||||||
//for (int n = 0; n<elts_amount; n++)
|
|
||||||
|
|
||||||
for (const auto& kv : m_elements)
|
for (const auto& kv : m_elements)
|
||||||
{
|
{
|
||||||
stream << " " << kv.first << "=\"" << kv.second << "\"\n";
|
stream << " " << kv.first << "=\"" << kv.second << "\"\n";
|
||||||
@ -414,7 +409,7 @@ void MapUserConfigParam<T, U>::write(std::ofstream& stream) const
|
|||||||
stream << " </" << m_param_name.c_str() << ">\n\n";
|
stream << " </" << m_param_name.c_str() << ">\n\n";
|
||||||
} // write
|
} // write
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
void MapUserConfigParam<T, U>::findYourDataInAChildOf(const XMLNode* node)
|
void MapUserConfigParam<T, U>::findYourDataInAChildOf(const XMLNode* node)
|
||||||
@ -425,56 +420,30 @@ void MapUserConfigParam<T, U>::findYourDataInAChildOf(const XMLNode* node)
|
|||||||
//Log::error("User Config", "Couldn't find parameter group %s", m_param_name.c_str());
|
//Log::error("User Config", "Couldn't find parameter group %s", m_param_name.c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
child->get(&m_elements);
|
||||||
int attr_count = 0;
|
|
||||||
child->get("Size", &attr_count);
|
|
||||||
|
|
||||||
for (const auto& kv : m_elements)
|
|
||||||
{
|
|
||||||
std::pair<T,U> elt;
|
|
||||||
elt.first = kv.first;
|
|
||||||
elt.second = kv.second;
|
|
||||||
|
|
||||||
|
|
||||||
bool there = false;
|
|
||||||
|
|
||||||
for (const auto& kvRHS : m_elements)
|
|
||||||
{
|
|
||||||
if (elt.second == kvRHS.second)
|
|
||||||
{
|
|
||||||
there = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
if (!there)
|
|
||||||
{
|
|
||||||
m_elements.insert(elt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // findYourDataInAChildOf
|
} // findYourDataInAChildOf
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
void MapUserConfigParam<T, U>::findYourDataInAnAttributeOf(const XMLNode* node)
|
void MapUserConfigParam<T, U>::findYourDataInAnAttributeOf(const XMLNode* node)
|
||||||
{
|
{
|
||||||
} // findYourDataInAnAttributeOf
|
} // findYourDataInAnAttributeOf
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
void MapUserConfigParam<T, U>::addElement(T element, U value)
|
void MapUserConfigParam<T, U>::addElement(T element, U value)
|
||||||
{
|
{
|
||||||
m_elements[element] = value;
|
m_elements[element] = value;
|
||||||
} // findYourDataInAnAttributeOf
|
} // findYourDataInAnAttributeOf
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
core::stringc MapUserConfigParam<T, U>::toString() const
|
core::stringc MapUserConfigParam<T, U>::toString() const
|
||||||
{
|
{
|
||||||
return "";
|
return "";
|
||||||
} // toString
|
} // toString
|
||||||
|
|
||||||
// ============================================================================
|
// ----------------------------------------------------------------------------
|
||||||
IntUserConfigParam::IntUserConfigParam(int default_value,
|
IntUserConfigParam::IntUserConfigParam(int default_value,
|
||||||
const char* param_name,
|
const char* param_name,
|
||||||
const char* comment)
|
const char* comment)
|
||||||
|
@ -166,7 +166,9 @@ void SolidCommandBuffer::fill(MeshMap *mesh_map)
|
|||||||
|
|
||||||
fillInstanceData<InstanceDataFourTex, MeshMap>
|
fillInstanceData<InstanceDataFourTex, MeshMap>
|
||||||
(mesh_map, four_tex_material_list, InstanceTypeFourTex);
|
(mesh_map, four_tex_material_list, InstanceTypeFourTex);
|
||||||
|
/* glBindBuffer(GL_DRAW_INDIRECT_BUFFER, m_draw_indirect_cmd_id);
|
||||||
|
glFlushMappedBufferRange(GL_DRAW_INDIRECT_BUFFER, 0,10000 * 20);
|
||||||
|
glBindBuffer(GL_DRAW_INDIRECT_BUFFER,0);*/
|
||||||
if (!CVS->supportsAsyncInstanceUpload())
|
if (!CVS->supportsAsyncInstanceUpload())
|
||||||
glUnmapBuffer(GL_DRAW_INDIRECT_BUFFER);
|
glUnmapBuffer(GL_DRAW_INDIRECT_BUFFER);
|
||||||
} //SolidCommandBuffer::fill
|
} //SolidCommandBuffer::fill
|
||||||
|
@ -218,7 +218,10 @@ protected:
|
|||||||
mesh_map,
|
mesh_map,
|
||||||
instance_buffer);
|
instance_buffer);
|
||||||
}
|
}
|
||||||
|
/*glBindBuffer(GL_ARRAY_BUFFER,
|
||||||
|
VAOManager::getInstance()->getInstanceBuffer(instance_type));
|
||||||
|
glFlushMappedBufferRange(GL_ARRAY_BUFFER, 0,10000 * sizeof(InstanceDataThreeTex));
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER,0);*/
|
||||||
if (!CVS->supportsAsyncInstanceUpload())
|
if (!CVS->supportsAsyncInstanceUpload())
|
||||||
{
|
{
|
||||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||||
|
@ -721,8 +721,8 @@ void DrawCalls::prepareDrawCalls( ShadowMatrices& shadow_matrices,
|
|||||||
solid_poly_count = m_solid_cmd_buffer->getPolyCount();
|
solid_poly_count = m_solid_cmd_buffer->getPolyCount();
|
||||||
shadow_poly_count = m_shadow_cmd_buffer->getPolyCount();
|
shadow_poly_count = m_shadow_cmd_buffer->getPolyCount();
|
||||||
|
|
||||||
if (CVS->supportsAsyncInstanceUpload())
|
//if (CVS->supportsAsyncInstanceUpload())
|
||||||
glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
|
// glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
|
||||||
#endif // !defined(USE_GLES2)
|
#endif // !defined(USE_GLES2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
#include "io/file_manager.hpp"
|
#include "io/file_manager.hpp"
|
||||||
#include "io/xml_node.hpp"
|
#include "io/xml_node.hpp"
|
||||||
#include "utils/string_utils.hpp"
|
|
||||||
#include "utils/interpolation_array.hpp"
|
#include "utils/interpolation_array.hpp"
|
||||||
#include "utils/vec3.hpp"
|
#include "utils/vec3.hpp"
|
||||||
|
|
||||||
|
@ -33,9 +33,11 @@ using namespace irr;
|
|||||||
|
|
||||||
#include "utils/leak_check.hpp"
|
#include "utils/leak_check.hpp"
|
||||||
#include "utils/no_copy.hpp"
|
#include "utils/no_copy.hpp"
|
||||||
|
#include "utils/string_utils.hpp"
|
||||||
#include "utils/time.hpp"
|
#include "utils/time.hpp"
|
||||||
#include "utils/types.hpp"
|
#include "utils/types.hpp"
|
||||||
|
|
||||||
|
|
||||||
class InterpolationArray;
|
class InterpolationArray;
|
||||||
class Vec3;
|
class Vec3;
|
||||||
|
|
||||||
@ -95,6 +97,27 @@ public:
|
|||||||
int getHPR(core::vector3df *value) const;
|
int getHPR(core::vector3df *value) const;
|
||||||
int getHPR(Vec3 *value) const;
|
int getHPR(Vec3 *value) const;
|
||||||
|
|
||||||
|
template<typename T, typename U>
|
||||||
|
int get(std::map<T, U>* out_map) const
|
||||||
|
{
|
||||||
|
using namespace StringUtils;
|
||||||
|
for (auto& p : m_attributes)
|
||||||
|
{
|
||||||
|
T val_1;
|
||||||
|
if (!fromString(p.first, val_1))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
U val_2;
|
||||||
|
if (!fromString(wideToUtf8(p.second), val_2))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
(*out_map)[val_1] = val_2;
|
||||||
|
}
|
||||||
|
return (int)m_attributes.size();
|
||||||
|
}
|
||||||
|
|
||||||
bool hasChildNamed(const char* name) const;
|
bool hasChildNamed(const char* name) const;
|
||||||
|
|
||||||
/** Handy functions to test the bit pattern returned by get(vector3df*).*/
|
/** Handy functions to test the bit pattern returned by get(vector3df*).*/
|
||||||
|
Loading…
Reference in New Issue
Block a user