在几个线程上显示列表

时间:2014-06-08 17:13:16

标签: c++ multithreading opengl 3d parallel-processing

我正在尝试使用并行处理来编程显示列表。到目前为止,该程序在运行时错误上没有错误,但我在屏幕上看不到任何内容。我有一个名为DisplayList的函数。当我使用它而没有并行处理并从主要调用它时程序工作正常。但是通过并行处理,我看不到任何东西。

DWORD WINAPI DisplayList(LPVOID vpParam)
{
    //Some really long code that works 100%
}

以下是main中的一些代码(CPU是我获得的核心数[4]):

GLuint* modelDL = new GLuint[totalMeshNum];
HANDLE *threads = new HANDLE[CPUs];
DWORD_PTR threadID = 0;
DWORD_PTR threadCore = 1;
int *displayListParam = new int[CPUs];
for (int i = 0; i < CPUs; i++)
{
    displayListParam[i] = (totalMeshNum / CPUs) * i;
    threadCore = 1 << i;

    threads[i] = CreateThread(0, 0, DisplayList, &displayListParam[i], 0, &threadID);
    SetThreadAffinityMask(threads[i], threadCore);
}

if (WaitForMultipleObjects(CPUs, threads, true, INFINITE) == WAIT_FAILED)
    sendErrorMessage("Error - Model Loader \nWaiting all handels failed", true);

这是绘图功能:

void modelClass::drawModel()
{
glPushMatrix();

glTranslatef(position.x, position.y, position.z);
glScalef(size.x, size.y, size.z);

glRotatef(angle.x, 1, 0, 0);
glRotatef(angle.y, 0, 1, 0);
glRotatef(angle.z, 0, 0, 1);


glCallLists(totalMeshNum, GL_UNSIGNED_INT, modelDL);

glPopMatrix();
}

DisplayList功能真的很长,我确信问题不存在。我已经多次检查过这个功能是否有效。我没有使用任何锁,因为我没有任何全局变量。但是如果你需要它仍然让我知道。

变量modelDL已完全加载并获得了一些数据。所以我不明白这段代码有什么问题?

0 个答案:

没有答案