- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了一个 OpenGL 应用程序,它会在某些机器上崩溃(在我自己的测试机器上运行:Windows 8、Windows 7、Windows Vista (x86) - 但在某些装有 Windows Vista (x86) 的客户端机器上它会崩溃) - 我还不知 Prop 体原因,但我将应用程序降级为一个空框架,它只会执行 glClear()
。然后应用程序运行至少没有崩溃(可以创建 OpenGL 上下文,可以加载 glew),但屏幕不会以指定的 glClearColor
颜色清除。我怀疑我的 PIXELFORMATDESCRIPTOR
或 SwapBuffer
中的某些问题没有按预期工作。
我的代码(为简单起见,我省略了窗口创建和 main()
):
hdc = GetDC(hWnd);
int pf;
PIXELFORMATDESCRIPTOR pfd;
memset(&pfd, 0, sizeof(pfd));
pfd.nSize = sizeof(pfd);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pf = ChoosePixelFormat(hdc, &pfd);
if (pf == 0) {
MessageBox(NULL, "ChoosePixelFormat() failed: "
"Cannot find a suitable pixel format.", "Error", MB_OK);
}
if (SetPixelFormat(hdc, pf, &pfd) == FALSE) {
MessageBox(NULL, "SetPixelFormat() failed: "
"Cannot set format specified.", "Error", MB_OK);
}
DescribePixelFormat(hdc, pf, sizeof(PIXELFORMATDESCRIPTOR), &pfd);
hglrc = wglCreateContext(hdc);
if(!wglMakeCurrent(hdc, hglrc)){
MessageBox(NULL, "wglMakeCurrent() failed: "
"Cannot make context current.", "Error", MB_OK);
}
GLenum err = glewInit();
if (GLEW_OK != err){
/* Problem: glewInit failed, something is seriously wrong. */
fprintf(stdout, "Error: %s\n", glewGetErrorString(err));
}
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
此代码输出:“状态:使用 GLEW 1.10.0”然后我的主循环:
while(true){
timeDuration = std::chrono::duration_cast<std::chrono::duration<double> >(std::chrono::high_resolution_clock::now() - lastTime);
lastTime = std::chrono::high_resolution_clock::now();
time += timeDuration.count();
glClearColor(0.7f, 0.7f, 0.7f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
SwapBuffers(hdc);
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
在我自己的机器上,我收到一个灰色屏幕(如预期的那样)——但在我的原始程序崩溃的机器上,屏幕只是黑色的(但没有出现任何消息框,输出也是:“状态:使用 GLEW 1.10.0”)。所以我看不到任何错误的证据 - 但输出不同并且 glClearColor()
似乎被忽略了。
关于如何进一步解决这个问题有什么想法吗?
最佳答案
好吧,我仍然不确定为什么它之前确实在我的机器上运行过,但问题是:
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
将其更改为:
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
它确实在任何地方运行。我没有在 PIXELFORMATDESCRIPTOR
中指定双缓冲,这似乎带来了奇怪的问题(出于某种原因在我的机器上工作 - 但在其他机器上没有)。
关于c++ - 某些机器上 OpenGL 中的黑屏(PIXELFORMATDESCRIPTOR/SwapBuffer?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24228500/
我正在使用多线程 OpenGL 渲染到一个窗口中。如果我按下一个按钮,模型将旋转 5 秒。轮换后,我打印出 FPS。其余时间 OpenGL 什么都不做。模型不会随着时间的推移而改变,所有线程在旋转时都
我有一个 OpenGL 程序可以在我所有的计算机上运行,但只有一台。这是一款配备 Vista 64 和 Radeon HD4850 的台式机。问题似乎出在我对 SwapBuffers(hdc) 的
我正在主窗口中使用 OpenGL 创建一个 Win32 应用程序(不使用 GLUT)。我现在在 WM_PAINT 中有我的绘图代码,当我调用 swapBuffers 时,它必须使自己失效,因为它不断地
我发现 OpenGL 中的 SwapBuffers 将忙于等待,只要显卡未完成渲染或正在等待 V-Sync。 这对我来说是个问题,因为我不想在等待卡完成时浪费 100% 的 CPU 内核。我不是在写游
我正在寻找一种可移植方法来制作非阻塞 SwapBuffers(),即使 VSync 已激活。 换句话说,是否有可能收到事件通知或知道下一个 VSync 之前的延迟? 最佳答案 IIRC 此扩展可帮助:
Vsync 阻塞 SwapBuffers(),这正是我想要的。我的问题是,由于输入消息转到拥有窗口的同一个线程,因此在 SwapBuffers() 被阻止时进入的任何消息都不会立即处理,但只有在 vs
想象这样一种情况: 我使用双缓冲 我可以通过不调用 glClear() 来优化我的绘图代码,如果我假设后台缓冲区的状态与我离开它两个时的状态相同 swapBuffers()前。 我可以依赖这个假设吗?
我正在尝试以 60Fps 而不是 30Fps 运行游戏。游戏锁定为 30fps,因此我可以达到 60fps 的唯一方法是帧插值。 对于插值部分,我将使用 OpenCV,我找到了 this pretty
注意到 WebGL 中不存在 SwapBuffer 功能,如果是这种情况,我们如何在绘制调用中更改状态并在 WebGL 中绘制多个对象,WebGL 在什么时间点在内部调用 swapBuffer? 最佳
我编写了一个 OpenGL 应用程序,它会在某些机器上崩溃(在我自己的测试机器上运行:Windows 8、Windows 7、Windows Vista (x86) - 但在某些装有 Windows
我已经实现了GPUImage framework在我的 cocos2d 项目中,GPUImage 框架是一个 BSD 许可的 iOS 库,可让您将 GPU 加速滤镜和其他效果应用于图像、实时摄像机视频
好的,所以我在 Windows 上遇到了一些与 OpenGL 相关的线程问题。我正在使用 C# .NET 来包装 GL。我在 Windows7 x64 上。 所以我尝试了两种不同的测试。在每次测试中,
我是一名优秀的程序员,十分优秀!