Esempio n. 1
0
	void RenderLayout::BindVertexStream(GraphicsBufferPtr const & buffer, ArrayRef<VertexElement> vet,
		stream_type type, uint32_t freq)
	{
		BOOST_ASSERT(buffer);

		uint32_t size = 0;
		for (size_t i = 0; i < vet.size(); ++ i)
		{
			size += vet[i].element_size();
		}

		if (ST_Geometry == type)
		{
			for (size_t i = 0; i < vertex_streams_.size(); ++ i)
			{
				if (ArrayRef<VertexElement>(vertex_streams_[i].format) == vet)
				{
					vertex_streams_[i].stream = buffer;
					vertex_streams_[i].vertex_size = size;
					vertex_streams_[i].type = type;
					vertex_streams_[i].freq = freq;

					streams_dirty_ = true;
					return;
				}
			}

			StreamUnit vs;
			vs.stream = buffer;
			vs.format = vet.ToVector();
			vs.vertex_size = size;
			vs.type = type;
			vs.freq = freq;
			vertex_streams_.push_back(vs);
		}
		else
		{
			instance_stream_.stream = buffer;
			instance_stream_.format = vet.ToVector();
			instance_stream_.vertex_size = size;
			instance_stream_.type = type;
			instance_stream_.freq = freq;
		}

		streams_dirty_ = true;
	}