remove egl wrapper&fix crash
This commit is contained in:
parent
3b8d071cd6
commit
7c78f047e1
|
@ -7,7 +7,7 @@ import java.io.Serializable;
|
|||
public class FCLConfig implements Serializable {
|
||||
|
||||
public enum Renderer implements Serializable {
|
||||
RENDERER_GL4ES("libgl4es.so:libgl4es_egl.so"),
|
||||
RENDERER_GL4ES("libgl4es.so:libEGL.so"),
|
||||
RENDERER_ZINK("libGL.so:libEGL.so"),
|
||||
RENDERER_ANGLE("libtinywrapper.so:libEGL_angle.so");
|
||||
|
||||
|
|
|
@ -148,168 +148,6 @@ GLFWbool _glfwIsValidContextConfig(const _GLFWctxconfig* ctxconfig)
|
|||
return GLFW_TRUE;
|
||||
}
|
||||
|
||||
// Chooses the framebuffer config that best matches the desired one
|
||||
//
|
||||
const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired,
|
||||
const _GLFWfbconfig* alternatives,
|
||||
unsigned int count)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int missing, leastMissing = UINT_MAX;
|
||||
unsigned int colorDiff, leastColorDiff = UINT_MAX;
|
||||
unsigned int extraDiff, leastExtraDiff = UINT_MAX;
|
||||
const _GLFWfbconfig* current;
|
||||
const _GLFWfbconfig* closest = NULL;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
current = alternatives + i;
|
||||
|
||||
if (desired->stereo > 0 && current->stereo == 0)
|
||||
{
|
||||
// Stereo is a hard constraint
|
||||
continue;
|
||||
}
|
||||
|
||||
// Count number of missing buffers
|
||||
{
|
||||
missing = 0;
|
||||
|
||||
if (desired->alphaBits > 0 && current->alphaBits == 0)
|
||||
missing++;
|
||||
|
||||
if (desired->depthBits > 0 && current->depthBits == 0)
|
||||
missing++;
|
||||
|
||||
if (desired->stencilBits > 0 && current->stencilBits == 0)
|
||||
missing++;
|
||||
|
||||
if (desired->auxBuffers > 0 &&
|
||||
current->auxBuffers < desired->auxBuffers)
|
||||
{
|
||||
missing += desired->auxBuffers - current->auxBuffers;
|
||||
}
|
||||
|
||||
if (desired->samples > 0 && current->samples == 0)
|
||||
{
|
||||
// Technically, several multisampling buffers could be
|
||||
// involved, but that's a lower level implementation detail and
|
||||
// not important to us here, so we count them as one
|
||||
missing++;
|
||||
}
|
||||
|
||||
if (desired->transparent != current->transparent)
|
||||
missing++;
|
||||
}
|
||||
|
||||
// These polynomials make many small channel size differences matter
|
||||
// less than one large channel size difference
|
||||
|
||||
// Calculate color channel size difference value
|
||||
{
|
||||
colorDiff = 0;
|
||||
|
||||
if (desired->redBits != GLFW_DONT_CARE)
|
||||
{
|
||||
colorDiff += (desired->redBits - current->redBits) *
|
||||
(desired->redBits - current->redBits);
|
||||
}
|
||||
|
||||
if (desired->greenBits != GLFW_DONT_CARE)
|
||||
{
|
||||
colorDiff += (desired->greenBits - current->greenBits) *
|
||||
(desired->greenBits - current->greenBits);
|
||||
}
|
||||
|
||||
if (desired->blueBits != GLFW_DONT_CARE)
|
||||
{
|
||||
colorDiff += (desired->blueBits - current->blueBits) *
|
||||
(desired->blueBits - current->blueBits);
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate non-color channel size difference value
|
||||
{
|
||||
extraDiff = 0;
|
||||
|
||||
if (desired->alphaBits != GLFW_DONT_CARE)
|
||||
{
|
||||
extraDiff += (desired->alphaBits - current->alphaBits) *
|
||||
(desired->alphaBits - current->alphaBits);
|
||||
}
|
||||
|
||||
if (desired->depthBits != GLFW_DONT_CARE)
|
||||
{
|
||||
extraDiff += (desired->depthBits - current->depthBits) *
|
||||
(desired->depthBits - current->depthBits);
|
||||
}
|
||||
|
||||
if (desired->stencilBits != GLFW_DONT_CARE)
|
||||
{
|
||||
extraDiff += (desired->stencilBits - current->stencilBits) *
|
||||
(desired->stencilBits - current->stencilBits);
|
||||
}
|
||||
|
||||
if (desired->accumRedBits != GLFW_DONT_CARE)
|
||||
{
|
||||
extraDiff += (desired->accumRedBits - current->accumRedBits) *
|
||||
(desired->accumRedBits - current->accumRedBits);
|
||||
}
|
||||
|
||||
if (desired->accumGreenBits != GLFW_DONT_CARE)
|
||||
{
|
||||
extraDiff += (desired->accumGreenBits - current->accumGreenBits) *
|
||||
(desired->accumGreenBits - current->accumGreenBits);
|
||||
}
|
||||
|
||||
if (desired->accumBlueBits != GLFW_DONT_CARE)
|
||||
{
|
||||
extraDiff += (desired->accumBlueBits - current->accumBlueBits) *
|
||||
(desired->accumBlueBits - current->accumBlueBits);
|
||||
}
|
||||
|
||||
if (desired->accumAlphaBits != GLFW_DONT_CARE)
|
||||
{
|
||||
extraDiff += (desired->accumAlphaBits - current->accumAlphaBits) *
|
||||
(desired->accumAlphaBits - current->accumAlphaBits);
|
||||
}
|
||||
|
||||
if (desired->samples != GLFW_DONT_CARE)
|
||||
{
|
||||
extraDiff += (desired->samples - current->samples) *
|
||||
(desired->samples - current->samples);
|
||||
}
|
||||
|
||||
if (desired->sRGB && !current->sRGB)
|
||||
extraDiff++;
|
||||
}
|
||||
|
||||
// Figure out if the current one is better than the best one found so far
|
||||
// Least number of missing buffers is the most important heuristic,
|
||||
// then color buffer size match and lastly size match for other buffers
|
||||
|
||||
if (missing < leastMissing)
|
||||
closest = current;
|
||||
else if (missing == leastMissing)
|
||||
{
|
||||
if ((colorDiff < leastColorDiff) ||
|
||||
(colorDiff == leastColorDiff && extraDiff < leastExtraDiff))
|
||||
{
|
||||
closest = current;
|
||||
}
|
||||
}
|
||||
|
||||
if (current == closest)
|
||||
{
|
||||
leastMissing = missing;
|
||||
leastColorDiff = colorDiff;
|
||||
leastExtraDiff = extraDiff;
|
||||
}
|
||||
}
|
||||
|
||||
return closest;
|
||||
}
|
||||
|
||||
// Retrieves the attributes of the current context
|
||||
//
|
||||
GLFWbool _glfwRefreshContextAttribs(_GLFWwindow* window,
|
||||
|
@ -393,36 +231,6 @@ GLFWbool _glfwRefreshContextAttribs(_GLFWwindow* window,
|
|||
return GLFW_FALSE;
|
||||
}
|
||||
|
||||
// if (window->context.major < ctxconfig->major ||
|
||||
// (window->context.major == ctxconfig->major &&
|
||||
// window->context.minor < ctxconfig->minor))
|
||||
// {
|
||||
// // The desired OpenGL version is greater than the actual version
|
||||
// // This only happens if the machine lacks {GLX|WGL}_ARB_create_context
|
||||
// // /and/ the user has requested an OpenGL version greater than 1.0
|
||||
//
|
||||
// // For API consistency, we emulate the behavior of the
|
||||
// // {GLX|WGL}_ARB_create_context extension and fail here
|
||||
//
|
||||
// if (window->context.client == GLFW_OPENGL_API)
|
||||
// {
|
||||
// _glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
||||
// "Requested OpenGL version %i.%i, got version %i.%i",
|
||||
// ctxconfig->major, ctxconfig->minor,
|
||||
// window->context.major, window->context.minor);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// _glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
||||
// "Requested OpenGL ES version %i.%i, got version %i.%i",
|
||||
// ctxconfig->major, ctxconfig->minor,
|
||||
// window->context.major, window->context.minor);
|
||||
// }
|
||||
//
|
||||
// glfwMakeContextCurrent((GLFWwindow*) previous);
|
||||
// return GLFW_FALSE;
|
||||
// }
|
||||
|
||||
if (window->context.major >= 3)
|
||||
{
|
||||
// OpenGL 3.0+ uses a different function for extension string retrieval
|
||||
|
|
|
@ -341,8 +341,15 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window,
|
|||
|
||||
eglChooseConfig(_glfw.egl.display, egl_attributes, &config, 1, &num_configs);
|
||||
// eglGetConfigAttrib(_glfw.egl.display, config, EGL_NATIVE_VISUAL_ID, 0);
|
||||
int client=0;
|
||||
const char* render= getenv("LIBGL_NAME");
|
||||
if (strcmp(render,"libgl4es.so")==0){
|
||||
client=0;
|
||||
} else if (strcmp(render,"libtinywrapper.so")==0){
|
||||
client=1;
|
||||
}
|
||||
|
||||
if (ctxconfig->client == GLFW_OPENGL_ES_API)
|
||||
if (client==0)
|
||||
{
|
||||
if (!eglBindAPI(EGL_OPENGL_ES_API))
|
||||
{
|
||||
|
|
|
@ -109,32 +109,6 @@ static int convertToBPE(int bpp) {
|
|||
return bpe;
|
||||
}
|
||||
|
||||
static EGLConfig *chooseVisualEGLFromBPP(JNIEnv *env, EGLDisplay disp, jobject pixel_format, int bpp, int drawable_type) {
|
||||
EGLint egl_attributes[] = {
|
||||
EGL_BLUE_SIZE, 8,
|
||||
EGL_GREEN_SIZE, 8,
|
||||
EGL_RED_SIZE, 8,
|
||||
EGL_ALPHA_SIZE, 8,
|
||||
EGL_DEPTH_SIZE, 24,
|
||||
EGL_SURFACE_TYPE, EGL_WINDOW_BIT|0x0001,
|
||||
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
|
||||
EGL_NONE
|
||||
};
|
||||
EGLint num_configs = 0;
|
||||
if (lwjgl_eglChooseConfig(disp, egl_attributes, NULL, 0, &num_configs)!=EGL_TRUE) {
|
||||
throwException(env, "eglChooseConfig() failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (num_configs == 0) {
|
||||
throwException(env, "eglChooseConfig() found no matching config");
|
||||
return false;
|
||||
}
|
||||
EGLConfig *configs = calloc(num_configs, sizeof(EGLConfig));
|
||||
lwjgl_eglChooseConfig(disp, egl_attributes, configs, 1, &num_configs);
|
||||
return configs;
|
||||
}
|
||||
|
||||
EGLConfig *chooseVisualEGL(JNIEnv *env, EGLDisplay disp, jobject pixel_format, bool use_display_bpp, int drawable_type) {
|
||||
EGLint egl_attributes[] = {
|
||||
EGL_BLUE_SIZE, 8,
|
||||
|
@ -158,6 +132,7 @@ EGLConfig *chooseVisualEGL(JNIEnv *env, EGLDisplay disp, jobject pixel_format, b
|
|||
}
|
||||
EGLConfig *configs = calloc(num_configs, sizeof(EGLConfig));
|
||||
lwjgl_eglChooseConfig(disp, egl_attributes, configs, 1, &num_configs);
|
||||
|
||||
return configs;
|
||||
}
|
||||
|
||||
|
@ -208,22 +183,22 @@ bool initPeerInfo(JNIEnv *env, jobject peer_info_handle, EGLDisplay display, job
|
|||
return false;
|
||||
}
|
||||
|
||||
EGLConfig *configs = chooseVisualEGL(env, display, pixel_format, use_display_bpp, drawable_type);
|
||||
if (configs == NULL) {
|
||||
throwException(env, "Could not choose EGL config");
|
||||
return false;
|
||||
}
|
||||
if (isDebugEnabled()) {
|
||||
dumpVisualInfo(env, display, configs[0]);
|
||||
}
|
||||
EGLint config_id;
|
||||
int result = lwjgl_eglGetConfigAttrib(display, configs[0], EGL_CONFIG_ID, &config_id);
|
||||
free(configs);
|
||||
if (result != EGL_TRUE) {
|
||||
throwException(env, "Could not get EGL_CONFIG_ID from EGLConfig");
|
||||
return false;
|
||||
}
|
||||
peer_info->config_id = config_id;
|
||||
// EGLConfig *configs = chooseVisualEGL(env, display, pixel_format, use_display_bpp, drawable_type);
|
||||
// if (configs == NULL) {
|
||||
// throwException(env, "Could not choose EGL config");
|
||||
// return false;
|
||||
// }
|
||||
// if (isDebugEnabled()) {
|
||||
// dumpVisualInfo(env, display, configs[0]);
|
||||
// }
|
||||
// EGLint config_id;
|
||||
// int result = lwjgl_eglGetConfigAttrib(display, configs[0], EGL_CONFIG_ID, &config_id);
|
||||
// free(configs);
|
||||
// if (result != EGL_TRUE) {
|
||||
// throwException(env, "Could not get EGL_CONFIG_ID from EGLConfig");
|
||||
// return false;
|
||||
// }
|
||||
// peer_info->config_id = config_id;
|
||||
peer_info->display = display;
|
||||
peer_info->drawable = EGL_NO_SURFACE;
|
||||
return true;
|
||||
|
|
|
@ -59,10 +59,10 @@ static void createContextEGL(JNIEnv *env, FCLPeerInfo *peer_info, FCLContext *co
|
|||
EGLConfig *config = getFBConfigFromPeerInfo(env, peer_info);
|
||||
if (config == NULL)
|
||||
return;
|
||||
if (!lwjgl_eglBindAPI(EGL_OPENGL_API)) {
|
||||
throwException(env, "Could not bind OpenGL API");
|
||||
return;
|
||||
}
|
||||
// if (!lwjgl_eglBindAPI(EGL_OPENGL_API)) {
|
||||
// throwException(env, "Could not bind OpenGL API");
|
||||
// return;
|
||||
// }
|
||||
EGLContext context;
|
||||
const EGLint egl_context_attributes[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
|
||||
if (attribs) {
|
||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue