I tried using the eglQuerySurfacePointerANGLE() function to share an OpenGL ES 3.0 texture handle with Direct3D (D3D). However, I noticed that the texture handle returned by this function has the same dimensions as the Pbuffer surface. Therefore, when I resize my D3D rendering window, I also want to dynamically resize my Pbuffer surface.
However, I haven't found a function like eglResizeSurface(), and after searching on Google, it seems that I can only delete the original Pbuffer surface and create a new one. Will this approach have any performance implications?
here is a simple code show how i initialize the opengl surface and context:
display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display, NULL, NULL);
const EGLint configAttributes[] = {EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT,
EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_ALPHA_SIZE, 8,
EGL_DEPTH_SIZE, 16,
EGL_BIND_TO_TEXTURE_RGBA, EGL_TRUE,
EGL_NONE};
EGLConfig config;
EGLint numConfigs;
eglChooseConfig(display, configAttributes, &config, 1, &numConfigs);
winwidth = 800;
winheight = 600;
const EGLint pbufferAttributes[] = {EGL_WIDTH, winwidth,
EGL_HEIGHT, winheight,
EGL_NONE};
pbufferSurface = eglCreatePbufferSurface(display, config, pbufferAttributes);
if (pbufferSurface == EGL_NO_SURFACE) {
std::cerr << "bad surface" << eglGetError() << std::endl;
}
const EGLint contextAttributes[] = {EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE};
EGLContext context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttributes);
eglMakeCurrent(display, pbufferSurface, pbufferSurface, context);
Any help would be greatly appreciated.