草庐IT

c++ - OpenGL 上的多线程渲染

我有一个多线程应用程序,我正在尝试使用不同的线程进行渲染。首先,我尝试在所有线程之间使用相同的渲染上下文,但我得到了其他线程的NULL当前上下文。我在互联网上读到,一个上下文一次只能在一个线程中处于当前状态。所以我决定做一些不同的事情。我创建一个窗口,从中获取HDC并创建第一个RC。之后,我在线程之间共享这个HDC,并且在我创建的每个新线程中,我都从同一个HDC获得一个新的RC,并使其成为该线程的最新版本。每次我这样做时,返回的RC总是不同的(通常是前一个值+1)。我做了一个断言来检查wglGetCurrentContext()是否返回一个RC,看起来它返回了刚刚创建的那个。但是在进行

c++ - 您如何测量 OpenGL 中的峰值内存带宽?

为了了解我应该期待什么样的速度,我一直在尝试对全局内存和着色器之间的传输进行基准测试,而不是依赖GPU规范表。但是我无法接近理论最大值。事实上,我已经出局了50!。我使用的是GTXTitanX,它是saidtohave336.5GB/s.Linuxx64驱动程序352.21。我找到了一个CUDA基准here这给了我约240–250GB/s(这是我所期望的更多)。我正在尝试完全匹配他们对着色器所做的事情。我尝试过顶点着色器、计算着色器、通过image_load_store访问缓冲区对象和NV_shader_buffer_store,使用floats、vec4s、着色器内的循环(在工作组内

c++ - 使用四元数进行OpenGL旋转

Thisquestionalreadyhasanswershere:QuaternionrotationwithoutEulerangles(3个答案)2年前关闭。因此,我正在编写一个程序,其中对象围绕spacesim样式移动,以便学习如何在3D空间中平稳地移动事物。在稍微弄乱了欧拉角之后,看来它们实际上并不适合在任意方向上进行自由形式的3D移动,因此我决定着手研究似乎最适合这种工作的四元数。我打算让该对象始终绕其局部X-Y-Z轴旋转,而不是绕全局X-Y-Z轴旋转。我尝试使用四元数实现旋转系统,但是某些方法不起作用。沿单个轴旋转对象时,如果之前未进行任何旋转,则物体沿给定轴旋转得很好。

c++ - C++ RAII 类中的 OpenGL 对象不再有效

我在C++类中有一个OpenGL对象。由于我使用的是RAII,我想让析构函数删除它。所以我的课看起来像:classBufferObject{private:GLuintbuff_;public:BufferObject(){glGenBuffers(1,&buff_);}~BufferObject(){glDeleteBuffers(1,&buff_);}//Othermembers.};这似乎有效。但是每当我执行以下任何操作时,我都会在使用它时遇到各种OpenGL错误:vectorbufVec;{BufferObjectsome_buffer;//Initializesome_buf

c++ - 为 OpenGL 纹理加载带有 stb_image 的 PNG 会给出错误的颜色

我正在使用stb_image加载一个32位PNG文件(RGBA),并使用它创建一个OpenGL纹理。它适用于24位PNG文件(没有alphachannel),但是当我使用32位PNG文件时,出现问题。纹理应该是这样的:这是使用OpenGL渲染时的样子(黑色部分是透明的,当我启用混合时):这是我加载纹理的方式:intw;inth;intcomp;unsignedchar*image=stbi_load(filename.c_str(),&w,&h,&comp,STBI_rgb);if(image==nullptr)throw(std::string("Failedtoloadtextur

c++ - 在 Windows 上开始使用 OpenGL ES 2.0

这是一个关于在Windows平台上构建简单的OpenGLES2.0程序所需步骤的非常具体的问题。环境是带有非托管C++的VisualStudio。我访问了Khronos.org网站,坦率地说,发现它有点不透明,因为它读起来像是由标准机构编写的东西。我不想下载“引用”或“规范”等。我正在寻找的只是将我从A带到B的链接和步骤。换句话说,“下载这些文件或在此URL上运行此设置。使用对这些库的引用创建一个新的VisualStudio项目。包括这个头文件。”再说一次,我对ES2.0很感兴趣。 最佳答案 我一直在使用谷歌AngleProject

c++ - 在练习 TDD(单元测试)的同时学习 OpenGL

我开始了一个新的游戏项目,并决定为此学习和使用OpenGL(项目正在Windows和Linux上同时开发)。同时,我对测试驱动开发也很感兴趣,并且正在尽最大努力编写单元测试,以便在任何实际代码之前引导设计。但是,我认为我缺乏知识可能会绊倒我,我在尝试为代码库的“渲染”部分编写单元测试时一直碰壁。我希望有人能给我一些关于如何继续的见解。我知道我需要对与OpenGL的交互进行单元测试,而不是OpenGL本身。我能看到的唯一方法是在某种程度上将OpenGL从我的其余代码中抽象出来,或者通过拦截OpenGL函数调用,或者通过创建一个全新的类接口(interface),允许我创建该类的模拟版本用

c++ - 有没有办法在 GTK3 应用程序中拥有 OpenGL 上下文?

我查看了GtkGlExt,但它仅适用于GTK2。不幸的是,经过几个小时的搜索,似乎没有人关心拥有像OpenGLDrawingArea这样的东西......欢迎提供任何信息。哪怕是“暂时不可能”。 最佳答案 看起来你有几个选择。使用开发中的portofgtkglexttogtk3通过设置SDL_WINDOWID环境变量,使用SDL绘制到您的GTK应用程序中自行管理GLX,为您的GTK应用创建OpenGL上下文。我找到了一个应用程序spectrum3d它实现了前两个替代方案。第三个选项会相当复杂,可能不值得追求。

c++ - 如何在 C++ 中使用 GLUT/OpenGL 绘制文本?

如何使用GLUT/OpenGL绘图函数在屏幕上绘制文本字符串? 最佳答案 使用GLUT绘制字符串有两种方法glutStrokeString将在3D中绘制文本(来源:uwa.edu.au)和glutBitmapString将绘制文本面向用户(来源:sourceforge.net) 关于c++-如何在C++中使用GLUT/OpenGL绘制文本?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

python - Python中的Tkinter OpenGL上下文

我需要在Tkinker中创建一个OpenGL上下文,以便将它与PyOpenGLPython模块一起使用。Tkinker本身并不支持OpenGL上下文,但我在PyOpenGL文档上找到了这个页面,解释了如何为此使用模块中包含的包装器:http://pyopengl.sourceforge.net/documentation/context/我尝试运行提供的代码,但收到一条消息,提示找不到TOGL模块。我从http://togl.sourceforge.net/下载了模块,但无法让它工作。PS。我使用virtualenv在MacOSX上使用Python3.2进行了测试。