在两个不同的线程上运行的两个opengl上下文是否有可能在内存访问中重叠,因为它们彼此不了解?
目前,我有一个由三个线程组成的代码,每个线程都有自己的opengl上下文,但是当其中一个线程设置了GL_UNIFORM_BUFFER
时,其他线程中的顶点缓冲区的内容被破坏了另一个缓冲区的值。因此,当运行以下代码时,其他上下文中顶点缓冲区的内容将被破坏:
glBindBufferBase(GL_UNIFORM_BUFFER, 0, m_transformation_buffer);
glm::mat4* transform_matrices = (glm::mat4*)glMapBufferRange(GL_UNIFORM_BUFFER, 0, 3 * sizeof(glm::mat4), GL_MAP_WRITE_BIT);
transform_matrices[0] = m_projmat;
transform_matrices[1] = m_viewmat;
transform_matrices[2] = m_worldmat;
glUnmapBuffer(GL_UNIFORM_BUFFER);
这可能是Opengl uniform blocks
??
答案 0 :(得分:0)
我发现了这个错误。这是我的程序中的错误。所以,我有两个线程,每个线程在其上下文中都包含m_transformation_buffer
,其中包含转换矩阵。我正在调用函数来更新来自其他线程的每个线程的m_transformation_buffer
,这导致编号为m_transformation_buffer
的缓冲区的值会变为“m_transformation_buffer”。
因此,只需在主线程中填充该线程中的缓冲区,然后通知该线程使用该缓冲区更新m_transformation_buffer
内容。