cuda與opengl互操作之VBO

2021-06-15 05:14:52 字數 2639 閱讀 4875

opengl的緩衝區可以對映到cuda的位址空間,當做global memory被訪問。

這樣做可以使計算得到的資料直接視覺化,提公升速度。

因為資料儲存在裝置端,沒有裝置端到主機端的傳輸耗費,不論計算還是可是化都相當的快。

具體使用步驟:

1、建立vbo

glgenbuffers(1, vbo);

glbindbuffer(gl_array_buffer, *vbo);

glbufferdata(gl_array_buffer, size, 0, gl_dynamic_draw);

glbindbuffer(gl_array_buffer, 0);

2、註冊vbo

struct cudagraphicsresource *cuda_vbo_resource;

cudagraphicsglregisterbuffer(&cuda_vbo_resource, *vbo, cudagraphicsmapflagswritediscard);

3、對映vbo

cudagraphicsmapresources(1, &cuda_vbo_resource, 0);
4、使用

launch_kernel(dptr, mesh_width, mesh_height, animtime);
5、解除對映

cudagraphicsunmapresources(1, &cuda_vbo_resource, 0);
6、解除註冊

cudagraphicsunregisterresource(cuda_vbo_resource);
7、刪除vbo

glbindbuffer(gl_array_buffer, *vbo);

gldeletebuffers(1, vbo);

**:

#include #include #include #include #include #include unsigned int window_width = 512;

unsigned int window_height = 512;

unsigned int mesh_width = 256;

unsigned int mesh_height= 256;

unsigned int timer = 0;

int animflag = 1;

float animtime = 0.0f;

float animinc = 0.01f;

gluint vbo = null;

float rotate_x = 0.0, rotate_y = 0.0;

float translate_z = -3.0;

struct cudagraphicsresource *cuda_vbo_resource;

extern "c" void launch_kernel(float4 *pos, unsigned int mesh_width, unsigned int mesh_height, float time);

void createvbo(gluint *vbo)

}void deletevbo(gluint *vbo)

}void cleanupcuda()

void runcuda()

void initcuda(int argc, char **argv)

void computefps()

}void display()

}void fpsdisplay()

cutboolean initgl(int argc, char **argv)

glclearcolor(0.0, 0.0, 0.0, 1.0);

gldisable(gl_depth_test);

glviewport(0, 0, window_width, window_height);

glmatrixmode(gl_projection);

glloadidentity();

gluperspective(60.0, (glfloat)window_width / (glfloat)window_height, 0.1, 10.0);

return cuttrue;

}int main(int argc, char **argv)

#include __global__ void kernel(float4 *pos, unsigned int width, unsigned int height, float time)

extern "c" void launch_kernel(float4 *pos, unsigned int mesh_width, unsigned int mesh_height, float time)

執行結果:

參考自cuda sdk

hadoop之hive hbase互操作

大家都知道,hive的sql操作非常方便,但是查詢過程中需要啟動mapreduce,無法做到實時響應。hbase是hadoop家族中的分布式資料庫,與傳統關聯式資料庫不同,它底層採用列儲存格式,擴充套件性極高,響應時間也很快,當業務變化大時,可以作為mysql的補充。幸運的是作為hadoop家族中比...

彙編與C互操作

彙編與c互操作 c語言內嵌彙編 c語言呼叫彙編過程 彙編呼叫c語言過程 1 開啟vs2008,建立乙個vc 空工程。2 在solution explorer上右擊工程名,選擇custom build rules 在彈出的對話方塊上勾選microsoft macro assembler。3 在solu...

關於openGl與CUDA協作的具體實現

關於opengl與cuda協作的具體實現 共享緩衝區的使用 乙個在空白opengl螢幕中繪製的例子 先宣告兩個全域性變數 緩衝區物件的id,另乙個用於儲存gl pixel unpack buffer 傳遞給opengl的 資料 gluintbuffer 接下來是cuda對共享緩衝區的 名字 cuda...