本文整理汇总了C++中XMLNodePtr::NextSibling方法的典型用法代码示例。如果您正苦于以下问题:C++ XMLNodePtr::NextSibling方法的具体用法?C++ XMLNodePtr::NextSibling怎么用?C++ XMLNodePtr::NextSibling使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XMLNodePtr
的用法示例。
在下文中一共展示了XMLNodePtr::NextSibling方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PackJTML
void PackJTML(std::string const & jtml_name)
{
Timer timer;
ResIdentifierPtr jtml = ResLoader::Instance().Open(jtml_name);
KlayGE::XMLDocument doc;
XMLNodePtr root = doc.Parse(jtml);
uint32_t n = root->AttribInt("num_tiles", 2048);
uint32_t num_tiles = 1;
while (num_tiles * 2 <= n)
{
num_tiles *= 2;
}
uint32_t tile_size = root->AttribInt("tile_size", 128);
std::string fmt_str = root->AttribString("format", "");
ElementFormat format = EF_ARGB8;
if ("ARGB8" == fmt_str)
{
format = EF_ARGB8;
}
else if ("ABGR8" == fmt_str)
{
format = EF_ABGR8;
}
uint32_t pixel_size = NumFormatBytes(format);
JudaTexturePtr juda_tex = MakeSharedPtr<JudaTexture>(num_tiles, tile_size, format);
uint32_t level = juda_tex->TreeLevels() - 1;
RenderFactory& rf = Context::Instance().RenderFactoryInstance();
uint32_t attr = 0;
for (XMLNodePtr node = root->FirstNode("image"); node; node = node->NextSibling("image"), ++ attr)
{
timer.restart();
std::string name = node->AttribString("name", "");
int32_t x = node->AttribInt("x", 0);
int32_t y = node->AttribInt("y", 0);
std::string address_u_str = node->AttribString("address_u", "wrap");
std::string address_v_str = node->AttribString("address_v", "wrap");
Color border_clr;
border_clr.r() = node->AttribFloat("border_r", 0.0f);
border_clr.g() = node->AttribFloat("border_g", 0.0f);
border_clr.b() = node->AttribFloat("border_b", 0.0f);
border_clr.a() = node->AttribFloat("border_a", 0.0f);
uint32_t border_clr_u8;
switch (format)
{
case EF_ARGB8:
border_clr_u8 = border_clr.ARGB();
break;
case EF_ABGR8:
border_clr_u8 = border_clr.ABGR();
break;
default:
border_clr_u8 = 0;
break;
}
TexAddressingMode addr_u, addr_v;
std::shared_ptr<address_calculator> calc_u, calc_v;
if ("mirror" == address_u_str)
{
addr_u = TAM_Mirror;
calc_u = address_calculators[TAM_Mirror];
}
else if ("clamp" == address_u_str)
{
addr_u = TAM_Clamp;
calc_u = address_calculators[TAM_Clamp];
}
else if ("border" == address_u_str)
{
addr_u = TAM_Border;
calc_u = address_calculators[TAM_Border];
}
else
{
addr_u = TAM_Wrap;
calc_u = address_calculators[TAM_Wrap];
}
if ("mirror" == address_v_str)
{
addr_v = TAM_Mirror;
calc_v = address_calculators[TAM_Mirror];
}
else if ("clamp" == address_v_str)
{
addr_v = TAM_Clamp;
calc_v = address_calculators[TAM_Clamp];
}
else if ("border" == address_v_str)
{
addr_v = TAM_Border;
//.........这里部分代码省略.........
示例2: SubThreadStage
//.........这里部分代码省略.........
min_pos[i] = 0;
}
}
}
ps_desc_.ps_data->min_pos = min_pos;
float3 max_pos(0, 0, 0);
attr = pos_node->Attrib("max");
if (attr)
{
std::vector<std::string> strs;
boost::algorithm::split(strs, attr->ValueString(), boost::is_any_of(" "));
for (size_t i = 0; i < 3; ++ i)
{
if (i < strs.size())
{
boost::algorithm::trim(strs[i]);
max_pos[i] = static_cast<float>(atof(strs[i].c_str()));
}
else
{
max_pos[i] = 0;
}
}
}
ps_desc_.ps_data->max_pos = max_pos;
}
XMLNodePtr vel_node = emitter_node->FirstNode("vel");
if (vel_node)
{
XMLAttributePtr attr = vel_node->Attrib("min");
ps_desc_.ps_data->min_vel = attr->ValueFloat();
attr = vel_node->Attrib("max");
ps_desc_.ps_data->max_vel = attr->ValueFloat();
}
XMLNodePtr life_node = emitter_node->FirstNode("life");
if (life_node)
{
XMLAttributePtr attr = life_node->Attrib("min");
ps_desc_.ps_data->min_life = attr->ValueFloat();
attr = life_node->Attrib("max");
ps_desc_.ps_data->max_life = attr->ValueFloat();
}
}
{
XMLNodePtr updater_node = root->FirstNode("updater");
XMLAttributePtr type_attr = updater_node->Attrib("type");
if (type_attr)
{
ps_desc_.ps_data->updater_type = type_attr->ValueString();
}
else
{
ps_desc_.ps_data->updater_type = "polyline";
}
if ("polyline" == ps_desc_.ps_data->updater_type)
{
for (XMLNodePtr node = updater_node->FirstNode("curve"); node; node = node->NextSibling("curve"))
{
std::vector<float2> xys;
for (XMLNodePtr ctrl_point_node = node->FirstNode("ctrl_point"); ctrl_point_node; ctrl_point_node = ctrl_point_node->NextSibling("ctrl_point"))
{
XMLAttributePtr attr_x = ctrl_point_node->Attrib("x");
XMLAttributePtr attr_y = ctrl_point_node->Attrib("y");
xys.push_back(float2(attr_x->ValueFloat(), attr_y->ValueFloat()));
}
XMLAttributePtr attr = node->Attrib("name");
size_t const name_hash = RT_HASH(attr->ValueString().c_str());
if (CT_HASH("size_over_life") == name_hash)
{
ps_desc_.ps_data->size_over_life_ctrl_pts = xys;
}
else if (CT_HASH("mass_over_life") == name_hash)
{
ps_desc_.ps_data->mass_over_life_ctrl_pts = xys;
}
else if (CT_HASH("opacity_over_life") == name_hash)
{
ps_desc_.ps_data->opacity_over_life_ctrl_pts = xys;
}
}
}
}
RenderFactory& rf = Context::Instance().RenderFactoryInstance();
RenderDeviceCaps const & caps = rf.RenderEngineInstance().DeviceCaps();
if (caps.multithread_res_creating_support)
{
this->MainThreadStage();
}
}