使用FreeGLUT和CUDA进行像素绘制时出现空白白屏
Blank white screen while pixel drawing using FreeGLUT and CUDA?
我不知道发生了什么。只有我知道,freeglut出于我不知道的原因丢弃了我的代码。我初始化它:
glutInit(argc, args);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(wnd_width, wnd_height);
glutDisplayFunc(_display);
glutTimerFunc(16, tick, 0);
glutCreateWindow(appName);
glutCloseFunc(close);
glutReshapeFunc(reshape);
if (glewInit() != GLEW_OK) return 2;
glGenBuffersARB(1, &_PBO);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, _PBO);
glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, wnd_width*wnd_height*sizeof(GLubyte)* 4, 0, GL_STREAM_DRAW_ARB);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
cudaGraphicsGLRegisterBuffer(&PBOCUDA, _PBO, cudaGraphicsMapFlagsWriteDiscard);
unsigned int size = wnd_width * wnd_width * 4 * sizeof(float);
glutMainLoop();
然后我用两个函数绘制它:
++timeVar;
cudaGraphicsMapResources(1, &PBOCUDA, 0);
size_t num_bytes;
cudaGraphicsResourceGetMappedPointer((void **)&d_output, &num_bytes, PBOCUDA);
cudaTestWork1(timeVar, d_output, wnd_width, wnd_height);
cudaGraphicsUnmapResources(1, &PBOCUDA, 0);
display(wnd_width, wnd_height, _PBO);
和显示():
glClearColor(0.3f,0.3f,0.3f,0.3f);
glClear(GL_COLOR_BUFFER_BIT);
glDisable(GL_DEPTH_TEST);
glRasterPos2i(0, 0);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, img);
glDrawPixels(x, y, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
glutSwapBuffers();
它甚至在glClearColor上也没有反应,它只是白色的。我可以调整窗口的大小,如果我让它变大,黑场就会消失,如果我让它变小,白色就会被删除。我试图找出为什么它只是白色而什么也没发生,但只有一个顶点绘制问题,他们的解决方案是设置投影矩阵。
为什么它给我一个空白的白屏?
附言 CUDA 代码正在工作,我有经验,所以它必须正常工作。我几乎从它工作的项目中复制粘贴了它。我已经检查了所有内容,但一切都很完美,我什至复制了一个库,所以它是相同的项目,但代码不同。
这是我
见过的最愚蠢的错误。我错过了订单!
我只是像这样制作了过剩的初始化:
glutInit(argc, args);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(wnd_width, wnd_height);
glutCreateWindow(appName); // goes first
glutDisplayFunc(_display); // then functions
glutCloseFunc(close);
glutReshapeFunc(reshape);
现在它起作用了!我们需要首先创建一个窗口,然后对其应用函数。在 display() 中,我添加了 glutPostRedisplay() 以让 glut 在完成后(当它达到这一点时)重绘。
所以现在 display() 看起来像这样:
glClearColor(0.5f,0.5f,0.5f,.0f);
glClear(GL_COLOR_BUFFER_BIT);
glDisable(GL_DEPTH_TEST);
glRasterPos2i(0, 0);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, img);
glDrawPixels(x, y, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
glutSwapBuffers();
glutPostRedisplay();
是的,正如我在有问题时所说,我的 CUDA 代码是有效的......至少以某种方式...
相关文章:
- 无法通过空白将文本文件行分隔为矢量
- 如何在全屏模式下(在OpenGL中)使背景透明
- OpenSSL TLS服务器-使用客户端证书白名单
- 由cin中的字符串中未捕获空白引起的分割错误
- 如何为窗口截屏
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 在打开多个其他窗口时使用全屏窗口时帧速率非常低
- 代码精简版页面变为空白
- Qt QML相机在部署后显示白屏
- OpenGL Glut显示功能在Mojave上显示黑屏
- 在OpenCV C++中创建空白图像
- Gtkmm 窗口为空白,不显示任何小部件或标题
- openGL GLFW 白屏,带加载光标正在运行
- OpenGL显示空白的白屏
- D3D11 着色器编译成功,但出现白屏
- 简单的Qt视频流应用程序,只有声音,没有视频(白屏)
- OpenGL白屏,无响应
- 使用openGL顶点阵列的白屏
- OpenGL 4.4渲染只是白屏
- OpenGL代码在IDE, CodeXL和GPU PerfStudio中完美运行,但如果从Windows启动则给出空白屏