Exemplo n.º 1
0
//=============================================================================
// リンク解除
//=============================================================================
void DrawList::UnLink(ObjectBase* object)
{
	// 存在チェック
	if(object->drawList(m_shaderPatternId) == nullptr)
		return;

	ObjectBase*	prev	 = object->drawPrev(m_shaderPatternId);
	ObjectBase*	next	 = object->drawNext(m_shaderPatternId);
	int			priority = object->priority(m_shaderPatternId);

	//----------------------------
	// 前オブジェクトの再設定
	//----------------------------
	object->drawPrev(m_shaderPatternId, nullptr);
	if(prev != nullptr)
	{
		// 前オブジェクトに次オブジェクトを連結
		prev->drawNext(m_shaderPatternId, next);
	}
	else
	{
		// 先頭オブジェクトを変更
		m_top[priority] = next;

		if(m_top[priority] != nullptr)
			// 先頭の前をnullptrに
			m_top[priority]->drawPrev(m_shaderPatternId, nullptr);
	}

	//----------------------------
	// 次オブジェクトの再設定
	//----------------------------
	object->drawNext(m_shaderPatternId, nullptr);
	if(next != nullptr)
	{
		// 次オブジェクトに前オブジェクトを連結
		next->drawPrev(m_shaderPatternId, prev);
	}
	else
	{
		// 終端オブジェクトを変更
		m_end[priority] = prev;

		if(m_end[priority] != nullptr)
			// 終端をnullptrに
			m_end[priority]->drawNext(m_shaderPatternId, nullptr);
	}

	//----------------------------
	// 描画リストを解除
	//----------------------------
	object->drawList(nullptr, m_shaderPatternId);
}
Exemplo n.º 2
0
//=============================================================================
// 全オブジェクトの描画
//=============================================================================
void DrawList::AllDraw(LPD3DXCONSTANTTABLE vsc, LPD3DXCONSTANTTABLE psc, D3DXMATRIX vp)
{
	ObjectBase* cur = nullptr;

	for(int cnt = 0; cnt < m_priorityLevel; ++cnt)
	{
		cur = m_top[cnt];

		while(cur)
		{
			cur->Draw(vsc, psc, vp);

			cur = cur->drawNext(m_shaderPatternId);
		}
	}
}