Как обработать установку состояний рендеринга перед вызовом отрисовки в системе 3D рендеринга? - PullRequest
0 голосов
/ 10 января 2020

Я использую простой диспетчер компонентов, к которому подключена моя система рендеринга. Прямо сейчас каждая сущность, которую я отрисовываю, имеет идентификатор шейдера, который она использует для рендеринга, и 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();
}

Установка состояний рендеринга в зависимости от того, кажутся ли операторы не очень практичными или эффективными. Есть ли обычный способ установки состояний рендеринга?

...