How to bind a frameBuffer to an GL_TEXTURE_EXTERNAL_OES texture?

I answered that question here:

While EGLDisplay has “display” in the name of the type, don’t interpret its scope as limited to that.

EGLDisplay is basically your connection to the graphics software or driver underlying EGL (graphics device interface, graphics server, etc.) to which rendering commands are submitted. In cases where rendering is performed by a GPU, it may also imply a specific GPU on which that rendering will be performed.

The analog in X Windows (on UNIX/Linux) is an X Display type:

The analog for MS Windows is a DC (i.e. Device Context):

The EGL Spec’s language is more abstract here, but the concept is the same:

  • EGLDisplay - Most EGL calls include an EGLDisplay parameter. This represents the abstract display on which graphics are drawn. … All EGL objects are associated with an EGLDisplay, and exist in a namespace defined by that display. Objects are always specified by the combination of an EGLDisplay parameter with a parameter representing the handle of the object.

Each of these are needed to create a “GL context” on the associated platforms, with which you can render via OpenGL or OpenGL ES:

  • EGL: EGLDisplay → EGLContext
  • X Windows: Display → GLXContext
  • MS Windows: DC → GLRC

So I get that you don’t want to render on a physical display. However, to use the underlying graphics software/driver (possibly backed by a GPU), you still need a connection to it. Under EGL, that’s an EGLDisplay.

Check out this article for how to obtain an EGLDisplay for offscreen-only rendering only which is backed by the GPU of your choice:

Notice that he says this method does not connect to the X server (which on Linux provides rendering access to physical displays on the system, if any).

As you can see, this demonstrates how to render via EGL and OpenGL (or OpenGL ES) without an EGLSurface (on-screen window, pbuffer, or pixmap), on NVidia drivers at least. But notice that you still need an EGLDisplay and an EGLContext for rendering here, even though there are no physical displays or display server running on the system. This is to provide access to the graphics driver and (behind it) a specific GPU.

Related to your desire to render without an EGLDisplay… In the EGL spec, you do find this footnote under eglMakeCurrent():

So, check your EGL implementation to see if it’s supports this. If not, it probably needs the display for a reason.