Exemplo n.º 1
0
static bool
parse_bool(const int32_t attrib_list[],
		   int32_t attrib_name,
		   bool *value,
		   bool default_value)
{
	int32_t raw_value;

	wcore_attrib_list_get_with_default(attrib_list, attrib_name,
                                       &raw_value, default_value);

	if (raw_value == WAFFLE_DONT_CARE) {
		*value = default_value;
	} else if (raw_value == true || raw_value == false) {
		*value = raw_value;
	} else {
		wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
					 "%s has bad value 0x%x. "
					 "Must be true(1), false(0), or WAFFLE_DONT_CARE(-1)",
					 wcore_enum_to_string(attrib_name), raw_value);
		return false;
	}

    return true;
}
Exemplo n.º 2
0
WAFFLE_API bool
waffle_attrib_list_get_with_default(
        const int32_t attrib_list[],
        int32_t key,
        int32_t *value,
        int32_t default_value)
{
    wcore_error_reset();
    return wcore_attrib_list_get_with_default(attrib_list, key, value,
                                               default_value);
}
Exemplo n.º 3
0
static bool
parse_context_profile(struct wcore_config_attrs *attrs,
                      const int32_t attrib_list[])
{
    wcore_attrib_list_get_with_default(attrib_list,
                                       WAFFLE_CONTEXT_PROFILE,
                                       &attrs->context_profile,
                                       attrs->context_profile);

    switch (attrs->context_api) {
        case WAFFLE_CONTEXT_OPENGL:
            if (attrs->context_full_version >= 32
                && attrs->context_profile != WAFFLE_CONTEXT_CORE_PROFILE
                && attrs->context_profile != WAFFLE_CONTEXT_COMPATIBILITY_PROFILE) {
                wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                             "for OpenGL >= 3.2,"
                             "WAFFLE_CONTEXT_PROFILE must be either "
                             "WAFFLE_CONTEXT_CORE_PROFILE or "
                             "WAFFLE_CONTEXT_COMPATIBILITY_PROFILE");
                return false;
            }
            else if (attrs->context_full_version < 32
                     && attrs->context_profile != WAFFLE_NONE) {
                wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                             "for OpenGL < 3.2, WAFFLE_CONTEXT_PROFILE must be "
                             "WAFFLE_NONE");
                return false;
            }
            break;
        case WAFFLE_CONTEXT_OPENGL_ES1:
        case WAFFLE_CONTEXT_OPENGL_ES2:
        case WAFFLE_CONTEXT_OPENGL_ES3:
            if (attrs->context_profile != WAFFLE_NONE) {
                wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                             "for OpenGL ES, WAFFLE_CONTEXT_PROFILE must be "
                             "WAFFLE_NONE");
                return false;
            }
            break;
        default:
            assert(false);
            return false;
    }

    return true;
}
Exemplo n.º 4
0
static bool
parse_context_version(struct wcore_config_attrs *attrs,
                      const int32_t attrib_list[])
{
    wcore_attrib_list_get_with_default(attrib_list,
                                       WAFFLE_CONTEXT_MAJOR_VERSION,
                                       &attrs->context_major_version,
                                       attrs->context_major_version);
    wcore_attrib_list_get_with_default(attrib_list,
                                       WAFFLE_CONTEXT_MINOR_VERSION,
                                       &attrs->context_minor_version,
                                       attrs->context_minor_version);

    if (attrs->context_major_version < 1) {
        wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                     "WAFFLE_CONTEXT_MAJOR_VERSION must be >= 1");
        return false;
    }

    if (attrs->context_minor_version < 0) {
        wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                     "WAFFLE_CONTEXT_MINOR_VERSION must be >= 0");
        return false;
    }

    attrs->context_full_version =
            10 * attrs->context_major_version
            + attrs->context_minor_version;

    switch (attrs->context_api) {
        case WAFFLE_CONTEXT_OPENGL:
            if (attrs->context_full_version < 10) {
                wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                             "for OpenGL, the requested context version "
                             "must be >= 1.0");
                return false;
            }
            break;

        case WAFFLE_CONTEXT_OPENGL_ES1:
            if (attrs->context_full_version != 10 &&
                attrs->context_full_version != 11) {
                wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                             "for OpenGL ES1, the requested context version "
                             "must be 1.0 or 1.1");
                return false;
            }
            break;

        case WAFFLE_CONTEXT_OPENGL_ES2:
            if (attrs->context_major_version != 2) {
                wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                             "for OpenGL ES2, the requested major context "
                             "version must be 2");
                return false;
            }
            break;

        case WAFFLE_CONTEXT_OPENGL_ES3:
            if (attrs->context_major_version != 3) {
                wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                             "for OpenGL ES3, the requested major context "
                             "version must be 3");
                return false;
            }
            break;

        default:
            wcore_error_internal("attrs->context_api has bad value 0x%x",
                                 attrs->context_api);
            return false;
    }

    return true;
}