Этот вызов:
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)));
… переопределяет предыдущий вызов и привязывает атрибут 0
(атрибут позиции) к вашим данным цвета. У первого аргумента 1
должна быть правильная привязка.
«При вызове в Python мне может потребоваться удерживать те же блокировки, например, потому что я могу перебирать некоторые объекты».
Это часто указывает на то, что один процесс с несколькими потоками не подходит. Возможно, это ситуация, когда несколько процессов - каждый с определенным объектом из коллекции - имеет больше смысла.
Независимый процесс - каждый со своим собственным пулом потоков - может быть проще в управлении.
Недавно в списке pyopenssl обсуждалась похожая проблема. Боюсь, если я попытаюсь объяснить это, я пойму неправильно, поэтому вместо этого я отсылаю вас к рассматриваемой проблеме .
The code that is called by python should release the GIL before taking any of your locks. That way I believe it can't get into the dead-lock.