Я использую простой диспетчер компонентов, к которому подключена моя система рендеринга. Прямо сейчас каждая сущность, которую я отрисовываю, имеет идентификатор шейдера, который она использует для рендеринга, и int32, который содержит флаги рендеринга.
enum RenderSystemFlag
{
NONE = 0,
BLEND = 1 << 1,
DEPTH_TEST = 1 << 2,
ADDITIVE_BLEND = 1 << 3,
OPAQUE = 1 << 4
};
Система рендеринга содержит сущности в std :: unordered_map, где ключ - пара ShaderID и состояние рендеринга. , Он создает простые партии объектов с одинаковыми состояниями рендеринга и шейдерами. Перед рендерингом каждого пакета я вызываю функцию setRenderStates
void RenderSystem::setRenderStates(int32_t states)
{
if (states & BLEND)
RenderCommand::EnableBlend();
if (states & DEPTH_TEST)
RenderCommand::EnableDepthTest();
if (states & ADDITIVE_BLEND)
RenderCommand::EnableAdditiveBlend();
}
Установка состояний рендеринга в зависимости от того, кажутся ли операторы не очень практичными или эффективными. Есть ли обычный способ установки состояний рендеринга?