Создание структур OpenGL в многопоточной программе?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Создание структур OpenGL в многопоточной программе?

Сообщение Anonymous »

Я пытаюсь сделать следующее в физическом двигателе, который я строю: < /p>

Иметь 2 потока, одна для мировой логики, одна для рендеринга. < /p>

Основной поток (поток, из которого создаются другие потоки) - это нить рендеринга, а затем поток мира раздвоен от него. < /p>

В потоке рендеринга существует глобальная структура данных, называемая обработчиком рендеринга, объявленная как: < /p>

Код: Выделить всё

 class Renderer
{
private:
/*
shader stuff
*/
mutex busy_queue;
vector render_queue;

public:
/*
Bunch of methods
*/
void add_data(Render_Info*);
void render();
};
< /code>

и структура render_info объявляется как: < /p>

struct Render_Info
{
mutex info_lock;
GLuint VAO;
vector VBOs;
vector types;
uint layouts;
uint render_instances;
Mesh* geometry;
};

extern Renderer *Rendering_Handler;
< /code>

Идея здесь была следующей. Любой поток, который желает что -то отобразить, должен обрабатывать свои собственные данные, положив его в примитивы OpenGL. Затем он помещает эту информацию в объект render_info 
, который действует как сообщение между потоком и потоком рендеринга.

Затем поток использует метод add_data () , чтобы отправить указатель на сообщение данных, которое добавляется к render_queue как: < /p>

void Renderer::add_data(Render_Info* data)
{
busy_queue.lock();
render_queue.push_back(data);
busy_queue.unlock();
}
< /code>

и, наконец, когда рендеринг решит что -то рендерировать, это заблокировало бы очередь (предотвращая что -либо из добавления в очередь), а затем очистите очередь Полем < /p>

Теперь, конечно, требуется дополнительная координация потока, но это суть идеи. < /p>

Проблема Я получаю недостатки сегментации только от попытки создать VAOS и VBO OpenGL, не говоря уже о том, чтобы наполнять их данными. Нить безопасна как
Giraffe от того, чтобы быть дельфином. < /p>

и причина проблемы, по -видимому, заключается в том, что контекст Opengl принадлежит к основному потоку, поэтому, когда я пытаюсь создать Vaos и Vbos на мировом потоке Opengl просто сбои, так как это понятия не имеет, что происходит. P> Я хотел бы остаться так близко к дизайну, который я описал, если кто -то не дает хорошего оправдания того, почему это не сработает.

Подробнее здесь: https://stackoverflow.com/questions/479 ... ed-program
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»