bool vogl_display_list::deserialize(const json_node &node, const vogl_blob_manager &blob_manager, const vogl_ctypes *pCtypes) { VOGL_FUNC_TRACER clear(); m_handle = node.value_as_uint32("handle"); m_valid = node.value_as_bool("valid", true); m_generating = node.value_as_bool("generating"); m_xfont = node.value_as_bool("xfont"); if (m_xfont) { m_xfont_glyph = node.value_as_int("xfont_glyph"); m_xfont_name = node.value_as_string("xfont_name"); } const json_node *pPackets_array = node.find_child_array("packets"); if (pPackets_array) { if (!pPackets_array->are_all_children_objects()) { clear(); return false; } vogl_trace_packet packet(pCtypes); m_packets.resize(pPackets_array->size()); for (uint i = 0; i < pPackets_array->size(); i++) { if (!packet.json_deserialize(*pPackets_array->get_child(i), "<display_list>", &blob_manager)) { clear(); return false; } if (!packet.serialize(m_packets.get_packet_buf(i))) { clear(); return false; } } } return true; }
bool vogl_renderbuffer_desc::deserialize(const json_node &node) { VOGL_FUNC_TRACER clear(); m_width = node.value_as_int("width"); m_height = node.value_as_int("height"); m_samples = node.value_as_int("samples"); m_red_size = node.value_as_int("red_size"); m_green_size = node.value_as_int("green_size"); m_blue_size = node.value_as_int("blue_size"); m_alpha_size = node.value_as_int("alpha_size"); m_depth_size = node.value_as_int("depth_size"); m_stencil_size = node.value_as_int("stencil_size"); const char *pFmt = node.value_as_string_ptr("internal_format"); if (!pFmt) { VOGL_ASSERT_ALWAYS; return false; } uint64_t enum_val = g_gl_enums.find_enum(pFmt); VOGL_ASSERT(enum_val != gl_enums::cUnknownEnum); if (enum_val == gl_enums::cUnknownEnum) return false; if (enum_val > cUINT32_MAX) { VOGL_ASSERT_ALWAYS; return false; } m_internal_format = static_cast<GLenum>(enum_val); return true; }