I am pretty perplexed. The code below draws a triangle in the center of the screen on my NVidia GEForce 9800. With my ATI Radeon 3870 I just get a blank blue viewport:
looking more into the samples, I would say that attribute setup may be the culprit; there has been reports of issues when nvidia/amd differed in the sorting of input attributes location (with apps not querying/setting it up)
No, it doesn’t. There is an implicit vertex array object with ID 0 that is used by default.
You are (mostly) wrong in this regard. This is what the GL3.0 specs say in section “E.1 Profiles and Deprecated Features of OpenGL 3.0”:
Client vertex arrays - all vertex array attribute pointers must refer to buffer
objects (section 2.9.1). The default vertex array object (the name zero) is
also deprecated. Calling VertexAttribPointer when no buffer object or no
vertex array object is bound will generate an INVALID OPERATION error,
as will calling any array drawing command when no vertex array object is
bound.
So, any GL version >3.0 or a forward compatible GL3.0 will require an application generated VAO.
GL3 (may) require this even if you didn’t use MRT (only single frag out).
It does not. It specifically states that if there is only one output, it will automatically be bound to location 0. Assuming you don’t override it explicitly.
Sorry, you are right. My problem was that it is nowhere mentioned in the chapters about vertex array objects and draw commands. I think it should be stated there as well as currently it is listed only in the deprecated feature list.
Apparently, wglShareLists() does not share vertex array objects.
In general, any “pure state objects” are not shared by share lists. While textures and renderbuffers are shared, actual FBOs are not. The same goes for feedback objects and sampler objects.