egl :: EGLDisplay :: choose_configs
attributes
# Returns some configs compatible with the specified `attributes`
fun choose_configs(attribs: Array[Int]): nullable Array[EGLConfig] import Array[Int].length, Array[Int].[], Array[EGLConfig], Array[EGLConfig].add, Array[EGLConfig].as nullable, report_egl_error `{
EGLConfig *configs;
int n_configs;
int n_attribs = Array_of_Int_length(attribs);
int i;
int *c_attribs = malloc(sizeof(int)*n_attribs);
for (i = 0; i < n_attribs; i ++) {
c_attribs[i] = Array_of_Int__index(attribs, i);
}
// get number of configs
EGLBoolean r = eglChooseConfig(self, c_attribs, NULL, 0, &n_configs);
if (r == EGL_FALSE) {
EGLDisplay_report_egl_error(self, "failed to get number of available configs.");
return null_Array_of_EGLConfig();
} else if (n_configs == 0) {
EGLDisplay_report_egl_error(self, "no config available.");
return null_Array_of_EGLConfig();
}
configs = (EGLConfig*)malloc(sizeof(EGLConfig)*n_configs);
r = eglChooseConfig(self, c_attribs, configs, n_configs, &n_configs);
if (r == EGL_FALSE) {
EGLDisplay_report_egl_error(self, "failed to load config.");
return null_Array_of_EGLConfig();
} else {
Array_of_EGLConfig array = new_Array_of_EGLConfig();
for (i=0; i < n_configs; i++)
Array_of_EGLConfig_add(array, configs[i]);
return Array_of_EGLConfig_as_nullable(array);
}
`}
lib/egl/egl.nit:63,2--99,3