Example #1
0
void GeoSaver::SaveMesh(Scene3DMesh *mesh, BinaryWriter &bw)
{
	bw.Write(mesh ->id);
	bw.Write(mesh ->name);

	for (int i = 0; i < 16; i++)
		bw.Write(mesh->m_worldInverseMatrix.a[i]);

	bw.Write((int)mesh ->meshParts.size());

	for (int i = 0; i < (int)mesh ->meshParts.size(); i++)
		SaveMeshPart(mesh ->meshParts[i], bw);

	SaveProperties(mesh, bw);
}
Example #2
0
BinaryWriter& AFXAPI operator<<(BinaryWriter& wr, const IPAddress& ha) {
	wr << (short)ha.get_AddressFamily();
	switch ((int)ha.get_AddressFamily()) {
	case AF_INET:
		wr.Write(&ha.m_sin.sin_addr, sizeof(ha.m_sin.sin_addr));
		break;
	case AF_INET6:
		wr.Write(&ha.m_sin6.sin6_addr, sizeof(ha.m_sin6.sin6_addr));
		break;
	default:
		wr.Write(&ha.m_sockaddr, sizeof(ha.m_sockaddr));		//!!! unknown size
		break;
	}
	return wr;
}
Example #3
0
void GeoSaver::SaveProperties(Scene3DMesh *mesh, BinaryWriter &bw)
{
	bw.Write((int)mesh->properties.size());

	for (unsigned i = 0; i < mesh->properties.size(); i++)
		SaveProperty(mesh->properties[i], bw);
}
Example #4
0
void Type::Write(BinaryWriter &w) const
{
  Node::Write(w);

  w.WriteID(m_Parent);
  w.WriteAs<uint8_t>(m_Primitive);
  w.WriteID(m_Class);
  w.Write(m_NumDereferences);
  w.Write(m_IsReference);
  w.Write(m_IsConst);
  w.WriteID(m_ParentType);

  w.WriteAs<uint32_t>(m_TemplateArgs.size());
  for (auto &t : m_TemplateArgs)
    t->Write(w);

  w.Write(m_ArraySize);
}
Example #5
0
void GeoSaver::SavePropertiesTxt(Scene3DMesh *mesh, BinaryWriter &bw)
{
	std::stringstream data;

	data << "\n";
	data << "<properties count=\"" << mesh->properties.size() << "\">\n";

	for (unsigned i = 0; i < mesh->properties.size(); i++)
		SavePropertyTxt(mesh->properties[i], bw, data);

	data << "</properties>\n";

	bw.Write(data.str().c_str(), static_cast<uint32_t>(data.str().size()));
}
Example #6
0
void GeoSaver::SaveProperty(Property *prop, BinaryWriter &bw)
{
	bw.Write(prop->GetName());
	bw.Write((BYTE)prop->GetPropertyType());
	bw.Write((BYTE)prop->GetAnimationType());

	if (!prop->IsAnimatable())
	{
		switch (prop->GetPropertyType())
		{
		case Property::PropertyType_Boolean: bw.Write(prop->GetBoolValue()); break;
		case Property::PropertyType_Int: bw.Write(prop->GetIntValue()); break;
		case Property::PropertyType_Float: bw.Write(prop->GetFloatValue()); break;
		case Property::PropertyType_Vector3:
			bw.Write(prop->GetVector3Value().x);
			bw.Write(prop->GetVector3Value().y);
			bw.Write(prop->GetVector3Value().z);
			break;

		case Property::PropertyType_String: bw.Write(prop->GetStringValue()); break;
		}
	}
	else
	{
		if (prop->GetPropertyType() == Property::PropertyType_Float)
		{
			IInterpolator<float> *inter = prop->GetInterpolator<float>();

			bw.Write(inter->GetKeysCount());

			for (unsigned i = 0; i < prop->GetKeysCount(); i++)
			{
				float value;
				float time;
				bool stopKey;
				inter->GetKeyframe(i, time, value, stopKey);

				bw.Write(time);
				bw.Write(value);
			}
		}

		if (prop->GetPropertyType() == Property::PropertyType_Int)
		{
			IInterpolator<int> *inter = prop->GetInterpolator<int>();

			bw.Write(inter->GetKeysCount());

			for (unsigned i = 0; i < prop->GetKeysCount(); i++)
			{
				int value;
				float time;
				bool stopKey;
				inter->GetKeyframe(i, time, value, stopKey);

				bw.Write(time);
				bw.Write(value);
			}
		}
	}
}
Example #7
0
void GeoSaver::SaveMeshPart(Scene3DMeshPart *meshPart, BinaryWriter &bw)
{
	bw.Write(meshPart ->materialName);
	bw.Write(meshPart ->m_vertexChannels);
	bw.Write((int)meshPart ->vertices.size());

	for (int i = 0; i < (int)meshPart ->vertices.size(); i++)
	{
		Scene3DVertex *vert = meshPart ->vertices[i];

		if (meshPart ->m_vertexChannels & VertexChannel_Position)
		{
			bw.Write(vert ->position.x);
			bw.Write(vert ->position.y);
			bw.Write(vert ->position.z);
		}

		if (meshPart ->m_vertexChannels & VertexChannel_Coords1)
		{
			bw.Write(vert ->coords1.x);
			bw.Write(vert ->coords1.y);
		}

		if (meshPart ->m_vertexChannels & VertexChannel_Coords2)
		{
			bw.Write(vert ->coords2.x);
			bw.Write(vert ->coords2.y);
		}
		if (meshPart ->m_vertexChannels & VertexChannel_Coords3)
		{
			bw.Write(vert ->coords3.x);
			bw.Write(vert ->coords3.y);
		}

		if (meshPart ->m_vertexChannels & VertexChannel_Normal)
		{
			bw.Write(vert ->normal.x);
			bw.Write(vert ->normal.y);
			bw.Write(vert ->normal.z);
		}

		if (meshPart ->m_vertexChannels & VertexChannel_Tangent)
		{
			bw.Write(vert ->tangent.x);
			bw.Write(vert ->tangent.y);
			bw.Write(vert ->tangent.z);
		}
	}
}