bool Sprite::save(JsonSerializer& serializer) { if (!isReady()) return false; serializer.beginObject(); serializer.serialize("type", type == PATCH9 ? "patch9" : "simple"); serializer.serialize("top", top); serializer.serialize("bottom", bottom); serializer.serialize("left", left); serializer.serialize("right", right); serializer.serialize("texture", m_texture ? m_texture->getPath().c_str() : ""); serializer.endObject(); return true; }
bool Material::save(JsonSerializer& serializer) { serializer.beginObject(); serializer.serialize("shader", m_shader ? m_shader->getPath().c_str() : ""); for (int i = 0; i < m_texture_count; ++i) { char path[MAX_PATH_LENGTH]; int flags = 0; int atlas_size = -1; if (m_textures[i]) { flags = m_textures[i]->getFlags(); path[0] = '/'; Lumix::copyString(path + 1, MAX_PATH_LENGTH - 1, m_textures[i]->getPath().c_str()); atlas_size = m_textures[i]->getAtlasSize(); } else { path[0] = '\0'; } serializer.beginObject("texture"); serializer.serialize("source", path); if (atlas_size > 0) serializer.serialize("atlas_size", atlas_size); if (flags & BGFX_TEXTURE_U_CLAMP) serializer.serialize("u_clamp", true); if (flags & BGFX_TEXTURE_V_CLAMP) serializer.serialize("v_clamp", true); if (flags & BGFX_TEXTURE_W_CLAMP) serializer.serialize("w_clamp", true); if (flags & BGFX_TEXTURE_MIN_POINT) serializer.serialize("min_filter", "point"); if (flags & BGFX_TEXTURE_MIN_ANISOTROPIC) serializer.serialize("min_filter", "anisotropic"); if (flags & BGFX_TEXTURE_MAG_POINT) serializer.serialize("mag_filter", "point"); if (flags & BGFX_TEXTURE_MAG_ANISOTROPIC) serializer.serialize("mag_filter", "anisotropic"); if (m_textures[i] && m_textures[i]->getData()) serializer.serialize("keep_data", true); serializer.endObject(); } serializer.beginArray("uniforms"); for (int i = 0; i < m_uniforms.size(); ++i) { serializer.beginObject(); serializer.serialize("name", m_uniforms[i].m_name); switch (m_uniforms[i].m_type) { case Uniform::FLOAT: serializer.serialize("float_value", m_uniforms[i].m_float); break; case Uniform::TIME: serializer.serialize("time", m_uniforms[i].m_float); break; case Uniform::INT: serializer.serialize("int_value", m_uniforms[i].m_int); break; case Uniform::MATRIX: serializer.beginArray("matrix_value"); for (int j = 0; j < 16; ++j) { serializer.serializeArrayItem(m_uniforms[i].m_matrix[j]); } serializer.endArray(); break; default: ASSERT(false); break; } serializer.endObject(); } serializer.endArray(); serializer.serialize("backface_culling", isBackfaceCulling()); serializer.serialize("alpha_cutout", isAlphaCutout()); serializer.serialize("shadow_receiver", isShadowReceiver()); serializer.serialize("shininess", m_shininess); serializer.beginArray("specular"); serializer.serializeArrayItem(m_specular.x); serializer.serializeArrayItem(m_specular.y); serializer.serializeArrayItem(m_specular.z); serializer.endArray(); serializer.serialize("z_test", isZTest()); serializer.endObject(); return true; }