I have 2 device vectors that contain some data:
thrust::device_vector<float> A(3); // { 0, 2, 4 }
thrust::device_vector<float> B(3); // { 1, 3, 5 }
Is there a way to map these vectors to a single OpenGL vertex buffer so that the data gets organized like this (without having to launch a kernel every time the data gets updated):
OGL BUFFER [0, 1, 2, 3, 4, 5]
so the layout of the vertex buffer looks something like this:
OGL BUFFER {float a, float b}
Note that I’ve also been having trouble mapping the vectors to OpenGL buffers. I know how to map a float*, but I wasn’t able to map a device_vector so far. My best attempt at making this work was this:
// the sizes of the device_vectors
const int N = 3;
// create the device_vectors
thrust::device_vector<float> A(N);
thrust::device_vector<float> B(N);
// fill the device_vectors with data
A[0] = 0;
A[1] = 2;
A[2] = 4;
B[0] = 1;
B[1] = 3;
B[2] = 5;
// create a buffer to hold the data from the device_vectors
float* buffer = new float[N * 2];
// copy the data from the device_vectors into the buffer
thrust::copy(A.begin(), A.end(), buffer);
thrust::copy(B.begin(), B.end(), buffer + N);
// map the buffer to an OpenGL vertex buffer
GLuint vertex_buffer;
glGenBuffers(1, &vertex_buffer);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glBufferData(GL_ARRAY_BUFFER, N * 2 * sizeof(float), buffer, GL_STATIC_DRAW);
cudaGLRegisterBufferObject(vertex_buffer);
TestKernel << <1, 3 >> > (buffer);
delete[] buffer;
But this produces an unhandled exception. (The TestKernel is a basic kernel that just prints 3 values at indexes 0, 1, and 2)