草庐IT

c++ - Windows 上的 CMake - 使用导入的目标 OpenGL::GLU 时 FindOpenGL.cmake 中的错误?

所以我尝试在Windows上使用cmake来构建OpenGL应用程序,但我在链接到GLU时遇到了问题。具体来说,我正在使用cmake3.11的FindOpenGL.cmake尝试引入OpenGL::GLU作为导入目标,因为我想使用“现代”cmake最佳实践。我的CMakeLists.txt有这个部分:find_package(OpenGLREQUIRED)if(NOTTARGETOpenGL::GLU)message(FATAL_ERROR"GLUcouldnotbefound")endif(NOTTARGETOpenGL::GLU)message(STATUS"glu:${OPENG

windows - 为 OpenGL 渲染枚举设备和显示模式

我目前正在编写一个OpenGL渲染器,并且正在编写一些类来枚举在下拉列表中使用的显示适配器、设备和模式。我正在使用EnumDisplayDevices获取适配器,然后为每个设备获取EnumDisplaySettings,为我提供bpp、宽度、高度和刷新率。但是我不确定如何找出哪些模式可用全屏(在DEVMODE结构中似乎没有它的标志)。我可以假设列出的所有模式原则上都可以全屏实例化吗?作为后续问题,这种设备枚举方法通常是在Windows上获取所需信息的最佳方式吗? 最佳答案 OpenGL在窗口模式和全屏模式之间没有这种区别。如果您希望

windows - 如果您使用使用 OpenGL 的库,您在 Windows PC 上需要什么?

我正在考虑将3D功能添加到我的应用程序中。为此,我可能会使用QtOpenGl库,但尚不完全清楚这是否需要在我客户的PC上进行任何特殊操作。我的客户需要OpenGL视频卡吗?我的客户需要OpenGL驱动程序吗?是否需要最低Windows版本?或者是否需要在客户的PC上安装其他东西(除了Qt本身)还是开箱即用?谢谢 最佳答案 WillmycustomersneedanOpenGLvideocard?不一定,总有软件光栅化器回退。WillmycustomersneedanOpenGLdriver?最好。但总有软件光栅化器回退。Isamin

c++ - OpenGL 不让我画东西

我的代码中出现了这个奇怪的错误,它不允许我绘制任何东西...voidrender(void){glClear(GL_COLOR_BUFFER_BIT);glLineWidth(4.0);glPointSize(4.0);glColor3i(0,1,1);glBegin(GL_POINTS);glVertex2i(0,0);glVertex2i(2,2);glVertex2i(3,3);glEnd();glutSwapBuffers();}intmain(intargc,char**argv){intLargura,Altura;//widthLargura=(abs(Plano::Mi

c++ - 在 AMD CCC 中启用 OpenGL 三重缓冲 + vsync 会破坏我们的应用程序

我们有一个用C++编写的桌面Windows应用程序,它使用OpenGL渲染View。在某些AMD卡上,如果您打开CatalystControlCenter并强制启用三重缓冲和垂直同步,它会破坏我们的应用程序:根本没有任何渲染,它只是一个灰色屏幕(在其他一些驱动程序版本上,它会在创建时崩溃而不是上下文)。关闭三重缓冲或V-sync将其恢复正常。我们使用wglSwapIntervalEXT在我们的应用程序中启用垂直同步。认为它可能会冲突,我删除了它的代码;没有变化。这绝对是一个驱动程序错误,还是我们必须做一些不同的事情来处理三重缓冲? 最佳答案

c++ - 为什么在三角形带opengl中使用z坐标

我刚刚开始使用openGL,这是我从一本书中自学的。在我的书中,我被告知要使用三角形strip构建四边形,因为它更有效。本书使用这些顶点来创建四边形。vertices.push_back(-0.5f);vertices.push_back(0.0f);vertices.push_back(0.0f);vertices.push_back(0.5f);vertices.push_back(0.0f);vertices.push_back(0.0f);vertices.push_back(-0.5f);vertices.push_back(0.0f);vertices.push_back(

c - OpenGL 默认帧缓冲区内容在最小化/恢复周期后消失了吗?

此程序每帧绘制一个点,直到屏幕上布满点为止。#include#includeintSCREEN_WIDTH=500,SCREEN_HEIGHT=500;intmain(intargc,char**argv){SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,3);SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,3);SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,SDL_GL_CONTEXT_PROFILE_CORE);SDL_GL_SetA

windows - 更新显卡不更新opengl32.dll

上周我一直在尝试在正方形上绘制纹理,但无济于事。正方形绘制但没有纹理。我正在使用OpenGL、DelphiXE3和Windows10。问题是glGenerateMipmap函数。我的旧版opengl没有MipMap函数。所以我用更新的东西(OGL4.6)替换了我的卡,它现在具有这些功能。但它仍然不起作用。问题是,旧的opengl32.dll没有改变,它仍然没有这些功能。所以问题是:程序如何找到MipMap函数?是否有可能以某种方式使用新功能更新opengl32.dll?或者我的程序是否需要引用其他一些dll?还是应该更新winapi.opengl单元?根据khronos,除非设置了Mi

c++ - OpenGL:如何控制我的窗口将使用哪种缓冲方法?

我想让用户能够选择双缓冲和三缓冲,因为在某些卡(或操作系统?)上默认启用三缓冲,这会导致一些性能问题。我该怎么做? 最佳答案 您不能从OpenGL本身执行此操作,因为OpenGL仅处理绘图调用等。您需要为此使用供应商特定的调用。在Windows中,有用于处理上下文创建等的WGL。 关于c++-OpenGL:如何控制我的窗口将使用哪种缓冲方法?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/quest

c++ - 在 OpenGL 中使用过剩的 vsync 问题

我拼命地想让Vsync在我的OpenGL应用程序中工作。这是重要的统计数据:我使用的是Windows,使用C++OpenGL进行编码,并且我将FreeGLUT用于我的OpenGL上下文(双缓冲)。我知道要让交换缓冲区在Windows中等待垂直同步,您需要调用wglSwapIntervalEXT()。我的代码确实调用了它(正如您将在下面看到的),但我仍然在垂直撕裂。我设法阻止它的唯一方法是调用glFinish(),这当然会带来显着的性能损失。我的main()函数的相关部分如下所示://InitiatingglutwindowglutInit(&argc,argv);glutInitDis