[OpenGL] Framebuffer-Erstellung scheitert
Verfasst: 10.11.2014, 10:34
Mahlzeit.
Ich erstelle eine Textur als Rendertarget...
...und baue die in einen Framebuffer ein, um darin rendern zu können.
Und bekomme dort GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT als Status. Was wohl heißt, dass meine Renderziel-Textur irgendein Problem hat. Wenn ich das Programm in NSight laufen lasse, bekomme ich API-Error-Warnungen für jeden DrawCall in dieses Renderziel, aber ich kriege den Bernd nicht dazu, dass er mir mal den Wortlaut des Fehlers preisgibt. Die Textur existiert anscheinend und wird auch in späteren DrawCalls gebunden, aber wenn ich sie mit NSight anschauen will, stürzt Visual Studio ab.
Detailfrage: woran könnte es liegen, dass ich die Textur nicht in einem Framebuffer verwenden kann.
Allgemeinfrage: wie sichert man sich bei OpenGL allgemein gegen solche Probleme ab? Wie sieht eine vernünftige Fehlerbehandlung bei OpenGL aus? Rückgabewerte gibt es ja keine, und glGetError() soll angeblich einen Sync mit dem Treiberthread auslösen, was jede Performance ruinieren würde.
Ich erstelle eine Textur als Rendertarget...
Code: Alles auswählen
glGenTextures( 1, &mTexturId);
glTextureImage2DEXT( mTexturId, GL_TEXTURE_2D, 0, GL_R32F, 1024, 1024, 0, GL_RED, GL_FLOAT, nullptr);
glTextureParameteriEXT( mTexturId, GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
Code: Alles auswählen
glGenFramebuffers( 1, &mFrameBufferId);
glNamedFramebufferTextureEXT( mFrameBufferId, GL_COLOR_ATTACHMENT0, obigeTexturId, 0);
glNamedFramebufferRenderbufferEXT( mFrameBufferId, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, zBufferId);
GLenum fz = GL_COLOR_ATTACHMENT0;
glFramebufferDrawBuffersEXT( mFrameBufferId, 1, &fz);
auto status = glCheckNamedFramebufferStatusEXT( mFrameBufferId, GL_FRAMEBUFFER);
Detailfrage: woran könnte es liegen, dass ich die Textur nicht in einem Framebuffer verwenden kann.
Allgemeinfrage: wie sichert man sich bei OpenGL allgemein gegen solche Probleme ab? Wie sieht eine vernünftige Fehlerbehandlung bei OpenGL aus? Rückgabewerte gibt es ja keine, und glGetError() soll angeblich einen Sync mit dem Treiberthread auslösen, was jede Performance ruinieren würde.