gpt4 book ai didi

c++ - 在 OpenCL 内核中使用 OpenGL

转载 作者:行者123 更新时间:2023-11-30 04:09:12 25 4
gpt4 key购买 nike

在使用 OpenCL 内核时有什么方法可以使用 OpenGL 方法吗?我想使用 GPGPU 对基于体素的算法进行矢量化。举一个简单的例子,粘贴我算法的当前代码,也许有人可以帮助我解决这个问题。

for(int x = 0; x < voxelWorld->getVoxelsX(); x++)
for(int y = 0; y < voxelWorld->getVoxelsY(); y++)
for(int z = 0; z < voxelWorld->getVoxelsZ(); z++)
{
glPushMatrix();
glTranslatef((x - voxelWorld->offsetX())*voxelWorld->getVoxelSize(),
(y - voxelWorld->offsetY())*voxelWorld->getVoxelSize(),
(z - voxelWorld->offsetZ())*voxelWorld->getVoxelSize());
if(this->doRenderWireframeWorld)
{
glDisable(GL_LIGHTING);
glColor3f(1.0f, 1.0f, 1.0f);
this->renderVoxel(false);
glEnable(GL_LIGHTING);
}

if(voxelWorld->getVoxel(x, y, z) && this->doRenderVoxels)
{
glColor3f(0.0f, 1.0f, 0.0f);
this->renderVoxel(true);
}
glPopMatrix();
}

我知道应该只有一个循环而不是三个嵌套循环。所以我将代码稍微更改为:

for(int i = 0; i < voxelWorld->getVoxelsX() * voxelWorld->getVoxelsY() * voxelWorld->getVoxelsZ(); i++)

将数据传递给 OpenCL 内核是一个好的开始,但现在呢?我想在 OpenCL 内核中进行渲染(所有 glPushMatrixglEnable ),但我认为这是不可能的。有没有人有做这样的事情的经验?

最佳答案

使用 OpenGL 进行渲染已由 GPU 并行化,您无需对其进行任何进一步操作,只需进行 OpenGL 绘图调用即可。 OpenGL 实现将它们排队成批发送给 GPU,GPU 将并行处理顶点和片段(因为这就是 GPU 所做的)。

当然,要真正释放 GPU 的力量,您必须停止使用已弃用的、过时的、过时的、废弃的即时模式来让 GPU 挨饿。 IE。不要使用 glBegin、glVertex、glEnd。使用顶点缓冲区对象中包含的顶点数组。

(全面披露:如果您使用显示列表,您甚至可以使用即时模式来利用 GPU 的并行化能力。但不建议新程序这样做。)

关于c++ - 在 OpenCL 内核中使用 OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21417184/

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