OpenCL 커널을 사용할 때 OpenGL 메서드를 사용할 수있는 방법이 있습니까? GPGPU를 사용하여 보셀 기반 알고리즘을 벡터화하고 싶습니다. 간단한 알고리즘을 붙여서 내 알고리즘의 코드를 붙이면 누군가가이 문제를 해결할 수 있습니다.OpenCL 커널에서 OpenGL 사용
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();
}
3 개의 중첩 루프 대신 하나의 루프 만 있어야한다는 것을 알고 있습니다. 지금의
for(int i = 0; i < voxelWorld->getVoxelsX() * voxelWorld->getVoxelsY() * voxelWorld->getVoxelsZ(); i++)
이의 OpenCL 커널로 데이터를 전달할 수있는 좋은 시작이 될 것입니다,하지만 : 그래서에 코드를 조금 변경해 것? 나는 OpenCL 커널 (모두 glPushMatrix
, glEnable
) 안에서 rendeing을하고 싶다. 그러나 나는 그것이 불가능하다고 생각한다. 아무도 그러한 일을하는 데 어떤 경험이 있습니까?
특히, 현대의 OpenGL을 사용하여 병렬 처리 전역 매트릭스 스택 대신 정점 별 데이터 및 변환을 사용하는 셰이더. – delnan
렌더링을 최적화 할 때 OpenCL을 사용할 수있는 공간이 없습니까? –
OpenGL과 OpenCL간에 버퍼가 공유되는 두 가지를 혼합 할 수 있지만 위의 예에서는 delnan에서 제안한대로 OpenGL 버텍스 쉐이더를 사용합니다. –