This seems like something Ogre's internal and I am not sure how I can influence the behavior from the app's code. When I resize my window with GL3Plus RS, the function call glInvalidateFramebuffer returns GL_INVALID_ENUM from GL3PlusRenderPassDescriptor::performStoreActions.
Code: Select all
OpenGL:error(high) 1280: GL_INVALID_ENUM error generated. <attachment> does not specify a valid attachment.
Here is the callstack:
Code: Select all
RenderSystem_GL3Plus_d.dll!GLDebugCallback(unsigned int source, unsigned int type, unsigned int id, unsigned int severity, int length, const char * message, const void * userParam) Line 141 C++
nvoglv64.dll!00007ffb62aebb75() Unknown
nvoglv64.dll!00007ffb62aebc25() Unknown
nvoglv64.dll!00007ffb62af3d2c() Unknown
nvoglv64.dll!00007ffb62af91c0() Unknown
RenderSystem_GL3Plus_d.dll!Ogre::GL3PlusRenderPassDescriptor::performStoreActions(bool hasArbInvalidateSubdata, unsigned int entriesToFlush) Line 747 C++
RenderSystem_GL3Plus_d.dll!Ogre::GL3PlusRenderSystem::beginRenderPassDescriptor(Ogre::RenderPassDescriptor * desc, Ogre::TextureGpu * anyTarget, unsigned char mipLevel, const Ogre::Vector4 * viewportSizes, const Ogre::Vector4 * scissors, unsigned int numViewports, bool overlaysEnabled, bool warnIfRtvWasFlushed) Line 943 C++
OgreNextMain_d.dll!Ogre::CompositorPass::setRenderPassDescToCurrent() Line 199 C++
OgreNextMain_d.dll!Ogre::CompositorPassQuad::execute(const Ogre::Camera * lodCamera) Line 296 C++
OgreNextMain_d.dll!Ogre::CompositorNode::_update(const Ogre::Camera * lodCamera, Ogre::SceneManager * sceneManager) Line 836 C++
OgreNextMain_d.dll!Ogre::CompositorWorkspace::_update(const bool bInsideAutoreleasePool) Line 907 C++
OgreNextMain_d.dll!Ogre::RenderSystem::compositorWorkspaceUpdate(Ogre::CompositorWorkspace * workspace) Line 1337 C++
OgreNextMain_d.dll!Ogre::CompositorWorkspace::_update(const bool bInsideAutoreleasePool) Line 815 C++
LavaGpu_d.dll!Lava::GpuCompositorManager::OnUpdateCompositor(const Lava::GpuCompositor & compositor) Line 156 C++
LavaGpu_d.dll!Lava::GpuCompositorManager::UpdateCompositorListener::allWorkspacesBeginUpdate() Line 36 C++
OgreNextMain_d.dll!Ogre::CompositorManager2::_updateImplementation() Line 779 C++
OgreNextMain_d.dll!Ogre::RenderSystem::updateCompositorManager(Ogre::CompositorManager2 * compositorManager) Line 1326 C++
OgreNextMain_d.dll!Ogre::CompositorManager2::_update() Line 713 C++
OgreNextMain_d.dll!Ogre::Root::_updateAllRenderTargets() Line 1582 C++
OgreNextMain_d.dll!Ogre::Root::renderOneFrame() Line 1113 C++
I think it is the first redraw after resizing of the window. My CompositorPassQuad has set the load and store actions to DontCare (I tried all kind of values and combinations here - all with the same GL_INVALID_ENUM error.
The problem is that glInvalidateFramebuffer is called with GL_DRAW_FRAMEBUFFER, but the attachments contains only a single value - GL_DEPTH_ATTACHMENT - so there is no GL_COLOR_ATTACHMENTn value. This generates the error. In the beginRenderPassDescriptor, my input descriptor has the values DontCare for the store and load actions, but the descriptor stored in the render system not. Somehow then this kind of combination invokes this invalid call. Maybe it is just an output, it it disturbs and during resizing I am getting those errors in the log file (and output debug window) a lot.
Is it a misconfiguration on my side or it is a known problem? In the Ogre's examples I am not able to verify the behavior as the windows are not resizable or at least the mouse cursor is always hidden for the camera updates. Note that I don't see any visual problems, however I would like to keep the log clean.