Объединение ПБО и текстур? - PullRequest
3 голосов
/ 07 февраля 2012

У меня есть приложение, которое выполняет много GPGPU, используя Opengl и Pixel Buffer Objects для передачи и обработки данных.

В настоящее время я использую пул этих ресурсов, в основном у меня есть пул для каждого измерения буфера и использования, которое использует мое приложение. Когда использование ресурса заканчивается, он возвращается в соответствующий пул для повторного использования. Тем не менее, я начинаю задумываться о том, есть ли что-то в этом, так как мне нужно «осиротить» PBO перед повторным использованием, чтобы не мешать текущим передачам.

Мой вопрос заключается в том, есть ли какая-то заслуга в объединении ресурсов, таких как PBO и текстуры, или было бы просто хорошо просто выделять из OpenGL напрямую, когда это необходимо?

Вот пример того, что я делаю. Наоборот с текстурами.

std::shared_ptr<pbo> create_pbo(int size, bool write)
{
    auto pool = pbo_pools[write][size];
    std::shared_ptr<pbo> buffer;
    if(!pool->try_pop(buffer))  
        buffer = ogl_thread_.invoke([=]{return new pbo(size, write);}); 

    return spl::shared_ptr<pbo>(buffer.get(), [=](pbo*) mutable
    {
        ogl_thread_.begin_invoke([=]() mutable
        {       
            if(write)
                buffer->map();
            else // read
                buffer->unmap();

            pool->push(buffer);
        }); 
    });
}

1 Ответ

0 голосов
/ 07 февраля 2012

У меня на секунду возникают мысли о том, есть ли что-то в этом, поскольку мне нужно «осиротить» PBO перед повторным использованием, чтобы не мешать текущим передачам.

Нет, ты не обязан. Это хорошая вещь в PBO: вы можете отправлять в них новые данные, в то время как вызов glTex (Sub) Image, возможно, все еще читает их без повреждения операции чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...