ios::sync_with_stdio(false);
int CEglimage::initEgl()
{
PFNEGLCREATEIMAGEKHRPROC n_eglCreateImageKHR = NULL;
g_glEGLImageTargetTexture2DOES = NULL;
g_eglDisplayHandle = NULL;
LOGI("start open...");
glFinish();
const char* const driver_absolute_path = "/system/lib/egl/libEGL_mali.so";
/*dso = dlopen(driver_absolute_path, RTLD_LAZY);
if (dso != 0)
{
LOGI("dlopen: SUCCEEDED");
n_eglCreateImageKHR = (PFNEGLCREATEIMAGEKHRPROC)dlsym(dso, "eglCreateImageKHR");
g_eglDestroyImageKHR = (PFNEGLDESTROYIMAGEKHRPROC)dlsym(dso,"eglDestroyImageKHR");
}
else*/
TRACE_GL
{
//LOGI("dlopen: FAILED! Loading functions in common way!");
n_eglCreateImageKHR = (PFNEGLCREATEIMAGEKHRPROC) eglGetProcAddress("eglCreateImageKHR");
g_eglDestroyImageKHR = (PFNEGLDESTROYIMAGEKHRPROC) eglGetProcAddress("eglDestroyImageKHR");
}
if(n_eglCreateImageKHR == NULL)
{
LOGE("Error: Failed to find eglCreateImageKHR at %s:%i\n", __FILE__, __LINE__);
return -1;
}
g_glEGLImageTargetTexture2DOES = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) eglGetProcAddress("glEGLImageTargetTexture2DOES");
if(g_glEGLImageTargetTexture2DOES == NULL)
{
LOGE("Error: Failed to find glEGLImageTargetTexture2DOES at %s:%i\n", __FILE__, __LINE__);
return -1;
}
if(g_eglDestroyImageKHR == NULL)
{
LOGE("Error: Failed to find eglDestroyImageKHR at %s:%i\n", __FILE__, __LINE__);
return -1;
}
LOGI("start Create the Android Graphic Buffer...,nWidth=%d,nHeight=%d",nWidth,nHeight);
//step 2. Create the Android Graphic Buffer
buffer = (void*)new GraphicBuffer(nWidth, nHeight,
HAL_PIXEL_FORMAT_RGBA_8888,
GraphicBuffer::USAGE_HW_TEXTURE |
GraphicBuffer::USAGE_HW_2D |
GraphicBuffer::USAGE_SW_READ_OFTEN);
LOGI("start Init the buffer...");
// Init the buffer
status_t err = ((GraphicBuffer*)buffer)->initCheck();
if (err != NO_ERROR)
{
LOGE("InitCheck return error: %s\n", strerror(err));
return -1;
}
// Retrieve andorid native buffer
//step 3. Create the EGLImage
const EGLint attrs[] = {
EGL_IMAGE_PRESERVED_KHR, EGL_TRUE,
EGL_NONE, EGL_NONE
};
g_eglDisplayHandle = eglGetCurrentDisplay();
android_native_buffer_t* clientBuf = ((GraphicBuffer*)buffer)->getNativeBuffer();
if(clientBuf == NULL)
{
LOGE("clientBuf == NULL!");
return -1;
}
LOGI("start eglCreateImageKHR...");
pEGLImage = n_eglCreateImageKHR(g_eglDisplayHandle, eglGetCurrentContext(), EGL_NATIVE_BUFFER_ANDROID,
clientBuf, attrs);
if (pEGLImage == EGL_NO_IMAGE_KHR) {
EGLint error = eglGetError();
//TODO: free GraphicBuffer
LOGE("Error (%#x): Creating EGLImageKHR at %s:%i\n", error, __FILE__, __LINE__);
return -1;
}
LOGE("End init");
return 0;
}