Articles of opengl

不显示SDL的OpenGL窗口

我正在使用OpenGL / SDL开发一个程序,但窗口不会绘制。 该窗口的条目出现在任务栏和alt +选项卡菜单中,但不显示缩略图。 当我点击它时,它被标记为活动,但屏幕上没有任何变化。 我可以validationglClear(GL_COLOR_BUFFER_BIT)和SDL_GL_SwapBuffers()从我的渲染循环被调用,并且SDL_SetVideoMode成功,但它仍然不会呈现。 这不是共享库问题,因为其他SDL / GL应用程序正常工作。 有任何想法吗? 编辑: 这里是graphics初始化: void GraphicsManager::initGraphics() { // Access prefs PreferencesManager* prefMgr = PreferencesManager::getInstance(); int width = prefMgr->getIntKey("res_width"); int height = prefMgr->getIntKey("res_height"); if(SDL_InitSubSystem(SDL_INIT_VIDEO) != 0) { fprintf(stderr, "Cannot initialize SDL video!\n"); exit(1); } SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); m_screen = SDL_SetVideoMode(width, […]

OpenGL颜色/ alpha输出略微变暗

我在Linux中看到来自OpenGL的颜色/ alpha输出稍微变暗。 而不是看到1.0的红色分量值,我看到〜.96988。 例如,我有一个完全红色的矩形(红色组件= 1.0,alpha = 1.0,绿色和蓝色是零)。 无论是否启用我的顶点/片段着色器,都会发生调光。 照明被禁用,因此在颜色计算中不应包含环境光或其他光。 glBegin(GL_POLYGON); glColor4f(1.0, 0.0, 0.0, 1.0); glVertex2f(0.0, 0.0); glVertex2f(1.0, 0.0); glVertex2f(1.0, 1.0); glVertex2f(0.0, 1.0); glEnd(); 我画出了所得到的窗口的截图,然后将图像加载到绘图程序中,检查任何特定的像素。 我看到一个红色的分量整数值为247而不是255,如我所料。 当我运行这个顶点着色器启用时,我看到gl_Color.r组件已经<1.0,并且gl_Color.a组件也是。 所有的OpenGL状态都是默认值。 我错过了什么? 由于问题编辑:通过在顶点着色器中检查红色分量的粗糙和迭代过程,并确定红色分量的值为〜.96988,并在红色分量高于阈值时更改蓝色分量以发出信号。 我不断降低恒定的价值,直到我不再看到紫色。 这个诀窍: if(gl_Color.r > 0.96988) { gl_Color.b = 1.0; \\ show purple instead of the slightly dimmed red. } 编辑: //VERTEX SHADER varying vec2 texture_coordinate; void […]

创build的窗口不出现

我安装了GLUT,这是我用GCC编译的代码: #include <GL/glut.h> void display() { glClearColor(1.0,1.0,1.0,1.0); glClear(GL_COLOR_BUFFER_BIT); glFlush(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowSize(500,500); glutCreateWindow("test"); glutDisplayFunc(display); glutMainLoop(); return 0; } 这是我如何编译它: gcc -Wall -o test -lGL -lGLU -lglut test.c 我没有得到任何错误/警告。 但是,当我执行它的窗口不会出现。 在下面的面板中,我看到有一个名为“test”的应用程序,但没有窗口。 它冻结壳几秒钟,然后按ctrl + c并杀死它。

OpenGL 2和Primusrun在单个缓冲区上不显示(透明窗口)

我试图通过Bumblebee(Optimus)在我的英特尔芯片组(Mesa)和NVIDIA卡上运行一个简约的OpenGL程序。 我的源代码(使用FreeGLUT): #include <GL/freeglut.h> void display(void); void resized(int w, int h); int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE); glutInitContextVersion(2, 1); glutInitContextProfile(GLUT_CORE_PROFILE); glutInitWindowSize(640, 480); glutCreateWindow("Hello, triangle!"); glutReshapeFunc(resized); glutDisplayFunc(display); glClearColor(0.3, 0.3, 0.3, 1.0); glutMainLoop(); return 0; } void display(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glBegin(GL_TRIANGLES); glVertex3f(0, 0.75, 0.0); glVertex3f(-0.75, -0.75, 0.0); glVertex3f(0.75, -0.75, […]

C + Linux:如何接pipeframebuffer

我有一个直接渲染帧缓冲的OpenGL应用程序。 如果我从terminal启动应用程序,有时我会看到在应用程序后面闪烁的光标。 同样,如果我从X中的terminal模拟器启动它,如果我移动鼠标,我会看到鼠标移动到后面。 我的应用程序目前呈现在45fps如此低的帧率不应该是问题。 我注意到当X开始的时候,似乎在开始渲染之前清除了shell,但是之后当closuresX服务器时,发送到stdout的诊断信息又回来了,所以我怀疑它是发出一个清晰的命令。 我想做什么? 你可以简单地渲染到fb1,并告诉video输出从fb1显示,而不是争取fb0? 那么当你的应用程序死亡,你可以返回到fb0的显示? 编辑: 为了澄清,该应用程序正在开发用于embedded式系统的ARM SoC(飞思卡尔i.MX6)与Vivante GPU和ArchLinux ARM上运行。

OpenCL / OpenGL互操作性纹理segfault

我正在尝试使用OpenCL与OpenGL互操作。 在GPU上计算path追踪algorithm,然后将GL纹理绘制成四边形。 按照英特尔CPU上的预期工作,但是当我尝试在GTX 970上运行时,出现段错误,解锁了GL纹理。 不知道,如果这是原因或正在运行的内核。 我会让代码自己说话。 我正在使用OpenCL C ++包装。 GL纹理创build glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, framebuffer); glBindTexture(GL_TEXTURE_2D, 0); //Unbind texture CL纹理分配 m_textureCL = cl::ImageGL(m_context, CL_MEM_READ_WRITE, GL_TEXTURE_2D, 0, texture, &errCode); RunKernel函数 //—————————————————————————– // Lock texture //—————————————————————————– std::vector<cl::Memory> […]

在Raspberry Pi Jessie上使用OpenGL

我正在尝试使用C ++在Raspberry Pi Jessie上获得一些简单的graphics。 我正在从这个网站得到我的指示。 我已经安装了以下库: apt-get install g++ freeglut3-dev glew1.5-dev libmagick++-dev libassimp-dev libglfw-dev 那里似乎没有错误。 我有以下代码: #include <GL/freeglut.h> static void RenderSceneCB() { glClear(GL_COLOR_BUFFER_BIT); glutSwapBuffers(); } static void InitializeGlutCallbacks() { glutDisplayFunc(RenderSceneCB); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA); glutInitWindowSize(1024, 768); glutInitWindowPosition(100, 100); glutCreateWindow("Tutorial 01"); InitializeGlutCallbacks(); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glutMainLoop(); return 0; } […]

在Linux虚拟机上进行离屏渲染

我目前正在研究没有GPU的Linux虚拟机(Ubuntu 16-04 LTS)(因为它运行的集群没有GPU)。 我正在使用以下简单的C ++代码为.PLY 3D模型生成缩略图,而无需打开窗口并将所有内容都渲染到屏幕上: void produceThumbnail(const char* input, const char* output) { viz::Mesh mesh = viz::Mesh::load(input); viz::WMesh wMesh(mesh); viz::Viz3d window("bunny"); window.showWidget("bunny", wMesh); window.setBackgroundColor(viz::Color::azure()); window.setOffScreenRendering(); window.spinOnce(); Mat3b img = window.getScreenshot(); imwrite(output, img); } 使用OpenCV 3.1.0和VTK 6.3.0一切工作正常在Windows上,但在Linux上我得到不同的行为。 在debugging它的时候, spinOnce()到达时,即使我调用了setOffScreenRendering() ,也会打开一个窗口,并且在控制台中出现这个错误: libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast […]

如何判断一个button是否在OpenGL / Glut中被按下? (Linux)的

这是一个类似的问题: 链接 通过调用GetAsyncKeyState()来解决这个问题。 虽然一切都很好,我需要一个Linux的select。 我需要知道button是否被按下,而不是被按下(因为键盘缓冲延迟)。 在OpenGL / Glut库中是否存在类似这样的事情,还是需要在其他地方看看?

如果我只使用OpenGL ES 1.x调用构build和链接OpenGL应用程序,它仍然可以工作吗?

我正在编写一个OpenGL游戏,希望对于Linux和iPhoneOS都有帮助,我基本上希望能够使用OpenGL ES 1.5头文件构build并在我的Linux桌面上运行它。 我可以这样做吗? IE,我只想使用OpenGL和OpenGL-ES之间通用的API调用子集。 做上面的,并从我的系统链接正常的libGL.a让我的屏幕,但我似乎无能为力,但改变场景的背景颜色。