I am trying to use a cmem -- backed texture to share image data between processes.
So far I've been able to get a cmem backed framebuffer (pbuffer) to work OK, but I've not been able to get a texture to work. Is it supported?
The only example of this use case I've found is from sgxperf2.c that I found. When I try this in my own test, it returns error 500 and 502.
EGL_VERSION = 1.4 build 1.4.14.2616
EGL_VENDOR = Imagination Technologies
EGL_EXTENSIONS = EGL_KHR_image EGL_KHR_image_base EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_gl_renderbuffer_image EGL_KHR
EGL_CLIENT_APIS = OpenGL_ES OpenVG
It is doing the mapping like so ( and I copied this in my test):
-----
eglImage = peglCreateImageKHR(
eglDisplay,
EGL_NO_CONTEXT, //eglContext,
EGL_NATIVE_PIXMAP_KHR, //EGL_GL_TEXTURE_2D_KHR,
pNativePixmap, //(void*)textureId0,//
NULL //miplevel 0 is fine, thank you
);
SGX_PERF_printf("peglCreateImageKHR returned %x\n", eglImage);
if((err = eglGetError()) != EGL_SUCCESS)
{
SGX_PERF_printf("Error after peglCreateImageKHR!, error = %x\n", err);
return 3;
}
//bind this to a texture
pFnEGLImageTargetTexture2DOES =
(PFNGLEGLIMAGETARGETTEXTURE2DOES)eglGetProcAddress("glEGLImageTargetTexture2DOES");
if(pFnEGLImageTargetTexture2DOES == NULL)
SGX_PERF_printf("pFnEGLImageTargetTexture2DOES not found!\n");
pFnEGLImageTargetTexture2DOES(GL_TEXTURE_2D, eglImage);
if((err = glGetError()) != 0)
{
SGX_PERF_printf("Error after glEGLImageTargetTexture2DOES!, error = %x\n", err);
return 4;
}
SGX_PERF_printf("Destroying eglimage!\n");
pEGLDestroyImage = (PEGLDESTROYIMAGE)eglGetProcAddress("eglDestroyImageKHR");
//destroy the eglimage
pEGLDestroyImage(eglDisplay, eglImage);
if((err = eglGetError()) != EGL_SUCCESS)
{
SGX_PERF_printf("Error after pEGLDestroyImage!, error = %x\n", err);
return 5;
}