OpenGL在同一内存中编写的两种上下文

时间:2015-06-12 18:20:16

标签: opengl

在两个不同的线程上运行的两个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 ??

的问题

1 个答案:

答案 0 :(得分:0)

我发现了这个错误。这是我的程序中的错误。所以,我有两个线程,每个线程在其上下文中都包含m_transformation_buffer,其中包含转换矩阵。我正在调用函数来更新来自其他线程的每个线程的m_transformation_buffer,这导致编号为m_transformation_buffer的缓冲区的值会变为“m_transformation_buffer”。

因此,只需在主线程中填充该线程中的缓冲区,然后通知该线程使用该缓冲区更新m_transformation_buffer内容。