clCreateFromGLBuffer crash - PullRequest
       41

clCreateFromGLBuffer crash

0 голосов
/ 16 октября 2018

Когда я пытался использовать мой vbo с opencl, я получал сбой при вызове clCreateFromGLBuffer

Ниже небольшого кода, который воспроизводит проблему:

инициализация контекста opengl

sf::ContextSettings settings;
settings.depthBits = 24;
settings.stencilBits = 8;
settings.antialiasingLevel = 2;
sf::Window window(sf::VideoMode(2048, 1024), "GAME",
        sf::Style::Fullscreen, settings);
glewInit();

инициализация контекста opencl

cl_platform_id platform_id = NULL;
cl_device_id device_id = NULL;
cl_uint ret_num_devices;
cl_uint ret_num_platforms;
cl_int ret = clGetPlatformIDs(1, &platform_id, &ret_num_platforms);

ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id,
        &ret_num_devices);

cl_context_properties props[] = { CL_GL_CONTEXT_KHR,
        (cl_context_properties) wglGetCurrentContext(), CL_WGL_HDC_KHR,
        (cl_context_properties) wglGetCurrentDC(), CL_CONTEXT_PLATFORM,
        (cl_context_properties) platform_id, 0 };

cl_context context = clCreateContext(props, 1, &device_id, NULL, NULL,
        &ret);

GLuint vboID_m = 0;

Создание объекта буфера вершин

glGenBuffers(1, &vboID_m);
glBindBuffer(GL_ARRAY_BUFFER, vboID_m);
{

    std::vector<float> tmp = { 0., 0., 0., 0., 0., 0., 0., 0., 0. };

    glBufferData(GL_ARRAY_BUFFER, (tmp.size()) * sizeof(float), 0,
    GL_STATIC_DRAW);
    glBufferSubData(GL_ARRAY_BUFFER, 0, tmp.size() * sizeof(float),
            tmp.data());
}
glBindBuffer(GL_ARRAY_BUFFER, 0);

glFlush();

Связь буфера opencl с объектом буфера вершин opengl

cl_int status;
clCreateFromGLBuffer(context, CL_MEM_READ_WRITE, vboID_m, &status);
return 0;

1 Ответ

0 голосов
/ 04 ноября 2018

Когда я проверяю значение ret_num_devices, я получаю 2. Если я изменяю код, чтобы получить идентификатор платформы для второго устройства, все работает нормально.Поэтому мне интересно, если проблема в следующем: контекст opengl создан для второй платформы (моей графической карты), и я пытался получить доступ к графическому процессору моего процессора (первая платформа).

Если это правда,Можете ли вы объяснить мне, как получить платформу, которая соответствует той, что используется opengl?

...