草庐IT

c++ - OpenGL 会阻止不必要的 API 调用吗?

目前我的管道中有大约15个渲染channel。对于每一遍,我都会在绘图前设置正确的设置,然后再重新设置。这些设置包括视口(viewport)大小、打开或关闭深度测试、混合功能或关闭、模板功能、模板操作等。我想知道OpenGL是否足够聪明,可以忽略设置已存在状态的API调用。因为否则我会用很多标志跟踪状态,并且在渲染过程之前只在实际需要时设置状态。 最佳答案 简短的回答:这取决于驱动程序。OpenGL本身并没有做很多事情。供应商可以按照他们认为合适的方式实现标准规定的功能。他们通常会测试现有状态以避免不必要地拖延管道吗?也许吧,但如果

c++ - 在 Qt 5.4 中跨类使用最新的 OpenGL 函数

我之前发布了一个关于如何让OpenGL在Qt上工作的问题,但现在我希望能够使用OpenGL的最新功能。在Qt之前,我使用的是glew;但是Qt说glew与其QtOpenGL头文件冲突。我查看了QGLWidget和QGLFunctions,但坦率地说,我很困惑我应该做什么才能简单地访问OpenGL的函数。现在,我使用QtCreator3.3.0获得了Qt5.4,并且正在使用新的QOpenGLWidget;然而,缺乏关于如何使用它的指导让我有点失望:Qt文档在那里并且确实有帮助,但它只演示了如何实例化它,而不是在程序的其他位置使用它。我了解到这个QOpenGLWidget的功能类似于QGL

c++ - 最小无窗口 OpenGL 上下文初始化

如何使用最少的代码初始化无窗口的OpenGL上下文?我读过here您可以使用wglCreateContextAttribsARB来创建无窗口上下文,但是它没有解释如何做? 最佳答案 来自链接:Creatingacontextwithoutawindow,foroff-screenrendering.Thismaynotactuallywork.第二句话很重要。来自WGL_ARB_create_contextspecification:4)Shouldtherebeawaytomakeacontextcurrentwithoutbin

c++ - Android 上的 OpenGL 仅使用 C++

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion我正在为Android2.1开发一个Android应用程序。我正在尝试仅使用C++编写OpenGL的代码。您是否知道有关如何执行此操作的教程或文章?更新:抱歉,我忘了说我将使用Java主页应用程序来启动主要Activity。我想说的是我是否必须在JavaglSurfaceView上编写代码,或者此语句必须在C++代码上。好的,更好的解释:如果我在C++上有一个完整的o

c++ - 如何使用 OpenGL 和 QT?

我正在做一个小项目,我需要使用OpenGL+QT我在这两个方面都是新手。所以我需要一个很好的教程来说明如何与他们一起工作,而不是单独工作在QTCreator上运行OpenGL还是使用QTVisualStudio插件更好? 最佳答案 您将经常使用QGLWidget!给你:http://doc.qt.io/qt-5/examples-widgets-opengl.html在所有这些中,也许这是最好的开始:HelloGLExample.如果您更喜欢使用QtQuick而不是QtWidgets,请查看这些帖子:Integratingcusto

c++ - Qt OpenGL 更新非常慢

我似乎无法让Qt5以有意义的速度更新我的场景。我的场景是一个512x512带纹理的矩形。我得到的速率大约是每秒1帧(!)。在我的构造函数中aTimer.setSingleShot(false);aTimer->setTimerType(Qt::PreciseTimer);connect(&aTimer,SIGNAL(timeout()),this,SLOT(animate()));aTimer.start(50);setAutoFillBackground(false);和voidGLWidget::animate(){//LogicforeverytimestepupdateGL()

c++ - OpenGL - "ultra smooth"简单水平移动对象的动画

我只想为一些移动对象做一个简单的动画(例如在C++中使用OpenGL)——比方说一个正方形从左到右的简单水平移动。在OpenGL中,我可以使用“双缓冲”方法,假设用户(使用动画运行我的应用程序)打开了“垂直同步”——这样每次监视器刷新时我都可以调用一些函数(我可以实现这一点,例如使用Qt工具包及其函数“swapBuffers”)。所以,我认为,我能实现的“最流畅”动画是“每次显示器刷新时将正方形移动例如1个像素(可以是其他值)”,因此在每个“帧”正方形是再往前1个像素-“我已经测试过了,它确实可以正常工作”。但是当我想为“游戏逻辑”(将方block向右移动1个像素)和“动画”(在屏幕上

c++ - 从 OpenGL 切换到 GDI

我们有一个应用程序,我们在其中同时使用GDI和OpenGL来绘制同一个HWND,但排他性。例子:最初我们处于2d模式,因此我们使用GDI在其上绘制然后我们切换到3d模式并使用OpenGL在其上绘制然后我们切换回2d模式并使用GDI在其上绘制当切换到3d模式时,我们只需为该HWND创建一个OpenGL上下文,然后我们就可以使用OpenGL在其上绘制。当切换回2d模式时,我们只需破坏OpenGL上下文,我们就可以使用GDI绘制到HWND。直到最近,这种方法还运行良好。在Windows10上,对于某些NVidia卡,如果驱动程序比382.05更新,这将不再起作用。在这种情况下,当我们删除Op

c++ - 开始学习 OpenGL,需要帮助解决这个问题

于是我开始学习OpenGL,阅读了《OpenGLsuper圣经5版》这本书。它很好地解释了事情,我已经能够自己创建我的第一个gl程序!只是一些简单的东西,一个旋转的3d金字塔。现在由于某种原因,其中一张脸没有渲染。我检查了顶点(首先在纸上绘制),它似乎是正确的。发现如果我更改着色器以绘制循环线,它会渲染。但是它不会呈现三角形。谁能解释一下为什么?voidsetupRC(){glClearColor(0.0f,0.0f,0.0f,1.0f);shaderManager.InitializeStockShaders();M3DVector3fvVerts1[]={-0.5f,0.0f,-0

c++ - 为什么在 OpenGL 上创建着色器后需要分离和删除着色器?

我正在关注thistutorial(link),它说你必须在链接后从程序中分离着色器,并且你必须在之后删除它们。与编译C++并行,直觉上,我认为“链接”是实际创建程序的行为(如,生成可执行文件),-分离意味着以某种方式删除指针着色器对象(我想它类似于.o),在程序中(仍然不是很清楚-程序不是此时已编译可执行文件?它怎么仍然持有指向某物的指针?)-删除就像从文件夹中实际删除那些.o。但这些都是猜测,那么到底发生了什么? 最佳答案 来自glDeleteShader上的OpenGL文档:Ifashaderobjecttobedeleted