Articles of opengl

glPopMatrix()在“setup_hardware_state”中喊出“不受支持的纹理格式”

我试图在Linux的私人video播放器中进行一些优化,旨在提高性能,因为播放MP4文件在CPU上很重 ,因为video帧是用YV12编码的,而OpenGL不提供本地方式来显示这种格式。 现在有一个代码在CPU上运行,将图像发送到GPU进行显示之前将YV12转换为RGB,这样就消耗了100%的CPU处理量。 我目前正在研究如何解码YV12帧,而不必编写着色器来执行YV12 – > RGB转换。 据我所知,做到这一点的一种方法是通过GL_MESA_ycbcr_texture ,显然是由我的系统(由glxinfo报告)支持。 在这个Fedora Box中,我有一个ATI Technologies公司的RV610video设备[Radeon HD 2400 PRO] ,这是一个体面的video卡。 然后,我下载了yuvrecttesting,并进行了一些更改,以replace此卡所支持的纹理GL_TEXTURE_RECTANGLE_ARB : GL_TEXTURE_RECTANGLE_ARB 。 但是,当我执行这个修改后的应用程序时,输出: The MESA driver reports *unsupported texture format in setup_hardware_state* 我注意到,这个错误显示当glPopMatrix(); 从Display()callback中执行。 现在, 这似乎不是我的应用程序中的一个错误,因为我在另一个具有不同video卡的Fedora盒(同一系统)上运行完全相同的代码: Intel Corporation Sandy Bridge集成graphics控制器(09版) beatifully。 这两个二进制文件之间唯一可见的区别是它们所链接的库。 在(有问题的)ATI卡ldd报告: linux-gate.so.1 => (0x00da3000) libGL.so.1 => /usr/lib/libGL.so.1 (0x077bd000) libGLU.so.1 => /usr/lib/libGLU.so.1 (0x0783b000) libglut.so.3 => /usr/lib/libglut.so.3 […]

使用xscreensaver编写屏幕保护程序的提示和技巧?

我已经做了几个月的OpenGL编程,现在我想用xscreensaver库编写一个屏幕保护程序。 在问这个问题之前,我看到了如何开发Linux屏幕保护程序 ,但我认为这个问题还不够具体。 我已经做了什么 – 我下载了xscreensaver源文件并阅读了README.hacking。 我在源代码的hacks目录中为greynetic.c(在自述文件中提供了用于理解xscreensaver的屏幕保护程序之一)代码做鬼混。 我阅读这个网页 – http://www.dis.uniroma1.it/~liberato/screensaver/simplesquares.html (从链接问题的答案之一)。 我下载了simplesquares.c代码,我试图运行它。 我的问题是什么 – 我不明白我应该如何编译和执行任何屏保的变化。 用gcc编译前面提到的simplesquares.c并运行可执行文件显示根本没有输出。 难道我做错了什么? 注意 :在编译simplesquares.c时,必须将-lX11添加到gcc命令以便链接X11库。否则,它将返回未定义的引用错误。 编辑 : 在编译屏幕保护程序greynetic.c时,会返回一些错误,其中一些是我在这里转载的: greynetic.c:(.text+0x4f): undefined reference to `XGetWindowAttributes' greynetic.c:(.text+0xa6): undefined reference to `get_boolean_resource' greynetic.c:(.text+0xd9): undefined reference to `get_pixel_resource' greynetic.c:(.text+0x112): undefined reference to `get_pixel_resource' greynetic.c:(.text+0x13e): undefined reference to `get_integer_resource' greynetic.c:(.text+0x185): undefined reference to `XCreateGC' greynetic.c:(.text+0x1dd): undefined reference […]

Qt线程在Linux中的问题

在我的项目中,我一直在用Qt开发一段时间,现在我们开始转向更线程化的devise。 在将一些GL渲染小部件移动到其他线程时,我发现了一些非常奇怪的行为。 看来,如果一个GL Widget从另一个线程(boost线程或QThread)开始更新,然后接受用户input(如QTextEdit)的部件抓住焦点,我会看到如下所示的XCB崩溃: [xcb] Too much data requested from _XRead [xcb] This is most likely caused by a broken X extension library [xcb] Aborting, sorry about that. hypnotizer: ../../src/xcb_io.c:735: _XRead: Assertion '!xcb_xlib_too_much_data_requested' failed. 为了testing这个,我实际上可以对GLHypnotizer演示进行简单的修改来重现崩溃。 该演示可以在这里find: http ://qt-project.org/doc/qt-4.8/demos-glhypnotizer.html [qt-project.org] 如果我添加行“mdiArea.addSubWindow(new QTextEdit(this));' (在调用newThread()之前),然后当演示开始时,将会有一个QTextEdit和一个GL Hypnotizer Widget。 如果我然后点击QTextEdit抓住焦点,我会每次都得到上面的崩溃。 任何人都可以重新使用上述说明在Linux上安装错误? 有没有人在Linux上使用Qt和线程之前遇到这些types的问题? 注意:我正在使用Ubuntu 12,这个崩溃发生在VirtualBox和非VirtualBox Ubuntu安装中

食人魔3D:比RenderWindow更大的RenderTexture

我有两个食人魔应用程序: 1)子应用程序 ,渲染到一个窗口和一个纹理(使用相同的摄像头)。 纹理被“导出”到共享内存(linux中的shm) 2)主应用程序 ,其中一个平面显示(1)“子应用程序”中正在发生的事情,从共享内存中加载纹理。 (1)渲染的纹理与(2)中的平面使用的纹理具有相同的尺寸。 例如:512×512 如果RenderWindow大于或等于RenderTexture, 所有工作正常 。 你在(1)中看到的是反映在(2)飞机体面的fps。 共享内存很强大! 但是如果渲染窗口小于纹理, 则只更新纹理的一部分 。 这就是发生在我身上的事情: 一些例子显示1×1的窗口和大的渲染纹理,所以我想可能有一个比窗口大的渲染纹理。 这是如何创build窗口: window_ = root_->createRenderWindow("blablah"), 256, 256, false); 这是如何创build渲染纹理: TextureManager* tm = TextureManager::getSingletonPtr(); TexturePtr rttTexture = tm->createManual( /**/"MainRTT" /**/, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME /**/, TEX_TYPE_2D /**/, 512 /**/, 512 /**/, 0 /**/, PF_R8G8B8A8 /**/, TU_RENDERTARGET); RenderTexture* renderTarget = rttTexture->getBuffer()->getRenderTarget(); renderTarget->addViewport(camera_); renderTarget->setAutoUpdated(false); […]

为什么glGenVertexArrays是针对C程序而不是Linux上的C ++程序定义的?

考虑下面的文件: #include <SDL.h> #include <GLES2/gl2.h> int main() { SDL_Init(SDL_INIT_VIDEO); SDL_Window *window = SDL_CreateWindow("Test", 0, 0, 200, 200, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN); SDL_GLContext context = SDL_GL_CreateContext(window); GLuint vao; glGenVertexArrays(1, &vao); } 如果上面是test.c,那么下面的行(编译为C代码)完美地工作: gcc test.c -I/usr/include/SDL2 -lGLESv2 -lSDL2 下一个(编译为C ++代码),但是,不: gcc -x c++ test.c -I/usr/include/SDL2 -lGLESv2 -lSDL2 我得到的错误是: test.c: In function 'int main()': test.c:9:27: error: 'glGenVertexArrays' was not […]

如何在Linux上的窗口中显示交互式SVG?

我真的很喜欢SVG,用它绘制是非常好的。 到目前为止,我已经使用Inkscape制作了静态图像。 我想让他们互动。 我做了一些试验,按照这样的教程。 但是我可以看到一个SVG,并且只能在我的Web浏览器中与它进行交互。 我想在桌面上的窗口中做这样的事情。 有像开罗或OpenGL绘图工具包,但我必须从代​​码绘制。 使用SVG(使用Inkscape绘制)似乎更聪明一些。 在普通的桌面窗口/canvas中查看交互/animationSVG需要什么? 我已经看到了一些模块将SVG转换为开罗:但有没有一个直接的SVG intepreter的Linux?

如何使用QT,OpenGL,C ++和Linux更改屏幕分辨率?

我只想做一个全屏游戏。 我知道如何在Windows上更改分辨率,但是如何在Linux下更改分辨率? 有没有跨平台的QT解决scheme呢? 另外我的GLWidget也有边框。 如何使窗口部件覆盖整个窗口? 我只是要发布代码: #include <QtOpenGL> class GLWidget : public QGLWidget { public: void initializeGL() { glClearColor(0.0f, 0.0f, 1.0f, 0.0f); glClearDepth(1.0f); } void paintGL() { glClear(GL_COLOR_BUFFER_BIT); } void resizeGL(int width, int height) { int side = qMin(width, height); glViewport((width – side) / 2, (height – side) / 2, side, side); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-0.5f, […]

Eclipse IDE中的SDLconfiguration

我试图得到在Linux x86环境(ubuntu)上的Eclipse上运行的OpenGL代码: http : //nehe.gamedev.net/tutorial/vertex_buffer_objects/22002/代码将正确运行后,我input命令行 g ++ main.cpp error.cpp lesson45.cpp -o lesson45 -L / usr / X11R6 / lib / -lGL -lGLU sdl-config –cflags –libs 这是来自make文件的指令。 现在我试图让代码在Eclipse上运行,我知道我必须设置链接器库GL和GLU以及链接器库目录/ usr / X11R6 / lib /。 但是,关于sdl-config –cflags –libs ,我不确定如何在Eclipse中进行configuration。

我如何从我的Windows机器上运行安装在Linux机器上的OpenGL应用程序?

本着帮助的精神,这是一个我已经解决的问题,所以我会在这里回答这个问题。 问题 我有: 必须在Redhat或SuSE企业上安装的应用程序。 它有巨大的系统需求,需要OpenGL。 它是需要在一台机器上一起操作的一套工具的一部分。 此应用程序用于在工时方面的时间密集型任务。 我不想坐在这个应用程序的服务器机房工作。 所以,问题出现了…如何从远程Windows机器上运行此应用程序? 我将概述我的解决scheme。 随意评论替代品。 此解决scheme也适用于更简单的环境。 我的情况有点极端。

用于Linux的开源OpenGL剖析器

标题总结了我的问题很好:是否有Linux的开源 OpenGL分析器? 我唯一能find的就是gDEBugger ,但它只有7天的试用期,而且是非常封闭的源代码。 我会免费(如在自由)软件开发,所以付款是不是一种select,虽然我可能会考虑接受免费(如啤酒)的答案,但封闭的应用程序。 奖金点,如果它与开源驱动程序(我的主电脑有一个集成的英特尔graphics卡)的作品。