线程中目标的opengl绑定失败
我试图通过线程更新顶点缓冲区的内容。 在线程函数内部,无法绑定缓冲区 指向目标,或通过glMapBufferRange检索指针。 我总是得到错误1282。线程外的所有功能 很好线程中目标的opengl绑定失败,opengl,Opengl,我试图通过线程更新顶点缓冲区的内容。 在线程函数内部,无法绑定缓冲区 指向目标,或通过glMapBufferRange检索指针。 我总是得到错误1282。线程外的所有功能 很好 while( t_con->out_loop ) { Sleep( t_con->sleep_time ); if( t_con->in_loop ) { t_con->count++;
while( t_con->out_loop )
{
Sleep( t_con->sleep_time );
if( t_con->in_loop )
{
t_con->count++; // thread counter up
EnterCriticalSection( &__cr_sec );
/*******************************************/
/* create the strings for the variables */
/*******************************************/
str_run = sfs_p->str_ptr;
sprintf( str_run, "%4.0f / %4.0f", __mou.pos.x, __mou.pos.y ); // actual mouse position
str_run += sfs_p->str_size;
sprintf( str_run, "%4.0f / %4.0f", __mou.old_pos.x, __mou.old_pos.y ); // old mouse position
str_run += sfs_p->str_size;
sprintf( str_run, "%4.0f / %4.0f", __mou.travel.x, __mou.travel.y ); // mouse travel delta
str_run += sfs_p->str_size;
sprintf( str_run, "%d", __mou.but_l ); // mouse button left
str_run += sfs_p->str_size;
sprintf( str_run, "%d", __mou.but_m ); // mouse button center
str_run += sfs_p->str_size;
sprintf( str_run, "%d", __mou.but_r ); // mouse buttom right
str_run += sfs_p->str_size;
sprintf( str_run, "%f", __mou.speed ); // mouse speed
/******************************************************************/
/* create a Vertex_Buffer_Struct with the chars geometry data */
/******************************************************************/
vx = SFS_to_Vx_Buf( sfs_p );
glBindBuffer( GL_ARRAY_BUFFER, m_dbg->vao->vx_b->id );
G_E_C;
// bind the buffer
gl_ptr = glMapBufferRange( GL_ARRAY_BUFFER, 0, 300, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT ); // get the pointer
G_E_C;
Destroy_Vertex_Buffer_Struct( vx );
LeaveCriticalSection( &__cr_sec );
}
}
任何建议?在执行任何gl命令之前,必须将使用这些gl命令的线程的gl上下文设置为当前 只需在线程中调用
SetCurrent()
命令或类似命令。
记住,主线程(应用程序启动的地方)也是一个线程。因此,如果它使用任何gl命令,它还需要SetCurrent()
。此外,必须注意的是,gl上下文在任何时候都最多可以是线程上的当前上下文。实际上,在任何工作线程使其成为当前上下文之前,必须先释放主线程上的上下文。因此,在大多数情况下,在多个线程中使用单个OpenGL上下文既不方便也不高效
我试图通过线程更新顶点缓冲区的内容。在线程函数中,无法将缓冲区绑定到目标,也无法通过glMapBufferRange
检索指针
有更好的选择,尤其是:
glMapBufferRange
。在映射缓冲区时,整个进程都可以写入缓冲区,因此任何其他线程都可以填充缓冲区在任何情况下,您都需要在这些线程之间进行适当的同步,这可能会有所帮助。谢谢您,我的朋友