Ich habe Ubuntu Maschine und eine Befehlszeile in OS X geschrieben, die etwas außerhalb des Bildschirms mit FBOs macht. Dies ist Teil des Codes.Linux Rendern Offscreen mit OpenGL 3.2 + w/FBOs
this->systemProvider->setupContext(); //be careful with this one. to add thingies to identify if a context is set up or not
this->systemProvider->useContext();
glewExperimental = GL_TRUE;
glewInit();
GLuint framebuffer, renderbuffer, depthRenderBuffer;
GLuint imageWidth = _viewPortWidth,
imageHeight = _viewPortHeight;
//Set up a FBO with one renderbuffer attachment
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glGenRenderbuffers(1, &renderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB, imageWidth, imageHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer);
//Now bind a depth buffer to the FBO
glGenRenderbuffers(1, &depthRenderBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthRenderBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, _viewPortWidth, _viewPortHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderBuffer);
Die „Systemanbieter“ ist ein C++ Wrapper um OS X NSOpenGLContext, die gerade verwendet wird, eine Wiedergabe-Kontext zu erstellen und aktuellen machen, ohne es mit einem Fenster zugeordnet wird. Das gesamte Rendering erfolgt in den FBOs.
Ich versuche den gleichen Ansatz für Linux (Ubuntu) mit GLX zu verwenden, aber ich habe es schwer, da ich sehe, dass GLX einen Pixelpuffer benötigt.
Ich versuche, dieses Tutorial zu folgen:
http://renderingpipeline.com/2012/05/windowless-opengl/
Am Ende es wird ein Pixelpuffer den Kontext Strom zu machen, was ich höre, ist veraltet, und wir sollten es für Frame Buffer aufgeben Objekte, ist das richtig (ich kann mich deswegen irren).
Hat jemand einen besseren Ansatz oder eine bessere Idee?
Nun, ja, renderbuffer sind heutzutage nicht von großem Nutzen. –
Können Sie es ausarbeiten? Was meinst du mit Renderpuffern? Haben Sie eine bessere plattformübergreifende Alternative? – csotiriou
Was könnte ich möglicherweise mit "renderbuffer" meinen? Dein Code benutzt sie. –