|
|
|
|
|
|
static EGLConfig egl_config_s; |
|
|
|
static EGLSurface surfaces; |
|
|
|
static EGLContext egl_context_s; |
|
|
|
static EGLContext egl_context_s_old; |
|
|
|
void UnitySurfaceManager::SetTextureFromUnity(void *tex, int w, int h) |
|
|
|
void *UnitySurfaceManager::SetTextureFromUnity(void *tex, int w, int h) |
|
|
|
// egl_display_s = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
|
|
|
// FML_CHECK(egl_display_s != EGL_NO_DISPLAY)
|
|
|
|
// << "Renderer type is invalid";
|
|
|
|
|
|
|
|
// // Initialize the display connection.
|
|
|
|
// FML_CHECK(eglInitialize(egl_display_s, nullptr, nullptr) == EGL_TRUE)
|
|
|
|
// << "Renderer type is invalid";
|
|
|
|
|
|
|
|
// bool success = false;
|
|
|
|
|
|
|
|
// std::tie(success, egl_config_s) = ChooseEGLConfiguration(egl_display_s);
|
|
|
|
// FML_CHECK(success) << "Could not choose an EGL configuration.";
|
|
|
|
|
|
|
|
// EGLint attributes[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
|
|
|
|
// egl_context_s = eglCreateContext(egl_display_s, egl_config_s, EGL_NO_CONTEXT, attributes);
|
|
|
|
// auto state = eglMakeCurrent(egl_display_s, EGL_NO_SURFACE, EGL_NO_SURFACE, egl_config_s) == GL_TRUE;
|
|
|
|
// int texture;
|
|
|
|
// glGenTextures()
|
|
|
|
|
|
|
|
// state = eglMakeCurrent(egl_display_s, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT) == GL_TRUE;
|
|
|
|
return nullptr; |
|
|
|
static void createContext() |
|
|
|
{ |
|
|
|
if (egl_display_s != nullptr) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
egl_display_s = eglGetDisplay(EGL_DEFAULT_DISPLAY); |
|
|
|
FML_CHECK(egl_display_s != EGL_NO_DISPLAY) |
|
|
|
<< "Renderer type is invalid"; |
|
|
|
|
|
|
|
// Initialize the display connection.
|
|
|
|
FML_CHECK(eglInitialize(egl_display_s, nullptr, nullptr) == EGL_TRUE) |
|
|
|
<< "Renderer type is invalid"; |
|
|
|
|
|
|
|
bool success = false; |
|
|
|
|
|
|
|
std::tie(success, egl_config_s) = ChooseEGLConfiguration(egl_display_s); |
|
|
|
FML_CHECK(success) << "Could not choose an EGL configuration."; |
|
|
|
|
|
|
|
EGLint attributes[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE}; |
|
|
|
egl_context_s_old = eglGetCurrentContext(); //????? for get context
|
|
|
|
|
|
|
|
egl_context_s = eglCreateContext(egl_display_s, egl_config_s, egl_context_s_old, attributes); |
|
|
|
auto read = eglGetCurrentSurface(EGL_READ); |
|
|
|
auto draw = eglGetCurrentSurface(EGL_DRAW); |
|
|
|
auto state = eglMakeCurrent(egl_display_s, EGL_NO_SURFACE, EGL_NO_SURFACE, egl_context_s) == GL_TRUE; |
|
|
|
unsigned int texture; |
|
|
|
glGenTextures(1, &texture); |
|
|
|
glBindTexture(GL_TEXTURE_2D, texture); |
|
|
|
int rowPitch = wi * 4; |
|
|
|
unsigned char *data = new unsigned char[rowPitch * he]; |
|
|
|
|
|
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, wi, he, 0, GL_RGB, GL_UNSIGNED_BYTE, data); |
|
|
|
state = glGetError(); |
|
|
|
|
|
|
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); |
|
|
|
state = glGetError(); |
|
|
|
state = eglMakeCurrent(egl_display_s, draw, read, egl_context_s_old) == GL_TRUE; |
|
|
|
} |
|
|
|
{ |
|
|
|
{ |
|
|
|
createContext(); |
|
|
|
int width = wi; |
|
|
|
int height = he; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Write the texture pixel
|
|
|
|
ptr[0] = vv; |
|
|
|
ptr[1] = (x+y)%244; |
|
|
|
ptr[2] = (x*y)%244; |
|
|
|
ptr[1] = (x + y) % 244; |
|
|
|
ptr[2] = (x * y) % 244; |
|
|
|
ptr[3] = vv; |
|
|
|
|
|
|
|
// To next pixel (our pixels are 4 bpp)
|
|
|
|
|
|
|
dst += rowPitch; |
|
|
|
} |
|
|
|
GLuint gltex = (GLuint)(size_t)(g_TextureHandle); |
|
|
|
// auto read = eglGetCurrentSurface(EGL_READ);
|
|
|
|
// auto draw = eglGetCurrentSurface(EGL_DRAW);
|
|
|
|
auto state = eglMakeCurrent(egl_display_s, EGL_NO_SURFACE, EGL_NO_SURFACE, egl_context_s) == GL_TRUE; |
|
|
|
glClearColor(1, 0, 0, 1); |
|
|
|
glClear(GL_COLOR_BUFFER_BIT); |
|
|
|
state = eglMakeCurrent(egl_display_s, EGL_NO_SURFACE, EGL_NO_SURFACE, egl_context_s_old) == GL_TRUE; |
|
|
|
|
|
|
|
delete[](unsigned char *) data; |
|
|
|
} |
|
|
|
|