gpt4 book ai didi

c++ - 从并行线程在主 Maya 线程上执行代码

转载 作者:行者123 更新时间:2023-11-28 05:23:16 47 4
gpt4 key购买 nike

在 MacOS 上使用 Maya API 插件,我试图在并行线程中进行一些繁重的计算,然后将结果存储在 OpenGL VBO 中。

线程的创建和执行工作正常,直到我需要执行 GL 操作,当 Maya 崩溃时。

我使用 CGLEnable( CGLGetCurrentContext(), kCGLCEMPEngine); 在 OpenGL 上启用了多线程,但是这没有帮助。因此,我的想法是在并行线程上进行计算,并在完成后在主线程中执行 GL 工作。

如何从并行线程在主线程上执行某些功能?

{ // Main thread
MStatus stat = MThreadAsync::init();
if( MStatus::kSuccess != stat ) {
MString str = MString("Error creating MThreadAsync");
MGlobal::displayError(str);
}
else
{
MThreadAsync::createTask(createOpenGLVBOs, NULL ,NULL);
}
}

void createOpenGLVBOs(void *data) // PARALLEL THREAD
{
...heavy calculations...
GLuint nb;
glGenBuffers(1, &nb); --> CRASH
}

最佳答案

我很确定在后台调用任何 OpenGL 函数都会使应用程序崩溃。

OpenGL 调用只能在主线程中调用。

您可以用您的数据填充共享数据结构,执行并行计算,然后在主线程上执行所有 opengl 调用。

或者,您可以使用 std::condition_variable 从后台线程向主线程发送信号,并让主线程调用 opengl 调用,而后台线程执行工作。您应该使用自旋锁或互斥锁来保护共享数据。

关于c++ - 从并行线程在主 Maya 线程上执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41036170/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com