EGL函数翻译--eglChooseConfig

EGL函数翻译–eglChooseConfig

函数名

EGLBoolean eglChooseConfig(	EGLDisplay display,
 							EGLint const* attrib_list,
 							EGLConfig* configs,
 							EGLint config_size,
 							EGLint* num_config);

参数描述

参数display: EGLDisplay的显示连接。
参数attrib_list: 指定"frame Buffer(帧缓冲)"配置所匹配的属性列表。
参数configs: 输出满足参数“attrib_list(属性列表)”的“farme buffer(帧缓冲)”配置数组。
参数config_size:指定要返回帧缓冲配置数字的大小。
参数num_config:输出满足“属性列表”的帧缓冲配置数组的数量。

详细描述

eglChooseConfig()函数输入由用户指定的“属性列表”和想要的EGLConfig“配置数量”返回与“属性列表”匹配的“帧缓冲”的EGLConfig配置数组。返回的 EGLConfig 对象可被用于所有需要“帧缓冲”配置的EGL函数。
如果参数“configs”不为NULL,则参数“configs”指向的数组中数量最多“config_size”个。实际"configs"指向的数组中EGLConfig对象数量为“num_config”个。EGLConfig 为一个 void* 类型的指针,参数configs 是一个指向指针的指针。
如果参数“configs”为NULL,则参数“config”中不会有任何值,但与属性列表匹配的EGLConfig 数量会返回到参数“num_config”中。在这种情况下,一般忽略参数“config_size”,可以先通过参数“configs”为空,获取匹配参数“attrib_list”属性列表的EGLConfig 数组的数量,然后分配一个匹配数量的EGLConfig数组,其它参数不变情况传给一个新的eglChooseConfig()函数。
属性列表(attrib_list)中所有属性,包括boolean属性,后面紧跟相应的所需值。该列表以EGL_NONE结束。如果属性列表中没有指定某属性,则使用默认值(则某属性为被认为是隐式指定的)。例如属性"EGL_DEPTH_SIZE"值未指定,则默认值是零;对于某些属性其默认值为“EGL_DONT_CARE”,这意味着该属性的任何值都可以,因此不会检查该属性。
如果与给定属性列表匹配的“帧缓冲”配置对象(EGLConfig)大于1个,则根据“最佳”匹配标准排序EGLConfig对象列表;每个属性的匹配条件和确切的排序顺序如下:
对于位掩码属性EGL_CONFORMANT、EGL_RENDERABLE_TYPE和EGL_SURFACE_TYPE,匹配时仅考虑掩码的非零位。指定的位掩码属性值中为零的任何位都可以是零,也可以是结果配置的属性值中的一。
属性列表(attrib_list)中可能的属性、属性描述和对应属性值如下:

属性:EGL_ALPHA_MASK_SIZE
描述:值为非负整数,以位为单位,指示所需的alpha掩码缓冲区大小。默认值为零。

属性:EGL_ALPHA_SIZE
描述:值为非负整数,指定颜色缓冲区中alpha通道的大小;值为零,则选alpha通道位数最小的颜色缓冲区,否则选择具有至少指定大小的
alpha通道的颜色缓冲区;默认值为零。

属性:EGL_BIND_TO_TEXTURE_RGB
描述:值只能为EGL_DONT_CARE,EGL_TRUE,EGL_FALSE三者之一。如果值为 EGL_TRUE,则只支持将“帧缓区”中“颜色缓冲区”绑定到 
OpenGL ES的RGB纹理上。目前只支持“pBuffer”类型的帧缓冲区。默认值为EGL_DONT_CARE。

属性:EGL_BIND_TO_TEXTURE_RGBA
描述:值只能为EGL_DONT_CARE,EGL_TRUE,EGL_FALSE三者之一。如果值为 EGL_TRUE,则只支持将“帧缓区”中“颜色缓冲区”绑定到
OpenGL ES的RGBA纹理上。目前只支持“pBuffer”类型的帧缓冲区。默认值为EGL_DONT_CARE。

属性:EGL_BLUE_SIZE
描述:值为非负整数,指定颜色缓冲中蓝色分量的位数(RGBA颜色模型,B 所占位数)。如果该值为零,则首选蓝色分量最小的颜色缓冲区,否则
选择具有至少指定大小的蓝色分量的颜色缓冲区;默认值为零。

属性:EGL_BUFFER_SIZE
描述:值为非负整数,以位为单位指定颜色缓冲区的大小;优先选择至少具有指定大小的最小颜色缓冲区。默认值为零。颜色缓冲区大小是
EGL_RED_SIZE、EGL_GREEN_SIZE、EGL_BLUE_SIZE、EGL_ALPHA_SIZE的总和,并且不包括可能存在于像素格式中的任何填充位。通常
优先选择的是为这些颜色分量单独指定所需的大小。

属性:EGL_COLOR_BUFFER_TYPE
描述:值为EGL_RGB_BUFFER 或 EGL_LUMINANCE_BUFFER之一;
值为EGL_RGB_BUFFER,则颜色缓冲为RGB颜色缓冲,在这种情况下则属性EGL_RED_SIZE、EGL_GREEN_SIZE、EGL_BLUE_SIZE必须为非零,
且EGL_LUMINAACE_SIZE必须为零。
值为EGL_LUMINANCE_BUFFER,则颜色缓冲区为亮度颜色缓冲,在这种情况下则属性EGL_RED_SIZE、EGL_GREEN_SIZE、EGL_BLUE_SIZE
必须为零,且EGL_LUMINAACE_SIZE必须为非零。
对于RGB颜色缓冲区或者亮度颜色缓冲区,属性EGL_ALPHA_SIZE的值没有限制,可为零或非零

属性:EGL_CONFIG_CAVEAT:
描述:值只能为:EGL_DONT_CARE、EGL_NONE、EGL_SLOW_CONFIG或 EGL_NON_CONFORMANT_CONFIG 之一。默认为EGL_DONT_CARE
如果值为EGL_DONA_CARE,不用关心此属性的配置。
如果值为EGL_NONE,则会为此属性匹配不带警告的配置
如果值为EGL_SLOW_CONFIG
如果值为EGL_CONFORMANT_CONFIG,则匹配不支持OpenGL ES 上下文的配置。
如果EGL版本大于等于1.3,则EGL_CONFORMANT_CONFIG以过时,因为可以在每个客户端API的基础上通过EGL_CONFORMANT属性指定
相同的信息,而不仅仅是针对OpenGL ES。

属性:EGL_CONFORMANT
描述:帧缓冲区配置支持哪种类型的客户端API上下文。默认值为零。(大多数时候不用关心此配置)
值为:EGL_OPENGL_BIT,配置支持创建OpenGL 上下文。
值为:EGL_OPENGL_ES_BIT,配置支持创建OpenGL ES 1.0或1.1 上下文。
值为:EGL_OPENGL_ES2_BIT,配置支持创建OpenGL ES 2.0的上下文。
值为:EGL_OPENVG_BIT,配置支持创建OPenVG 的上下文。
比如,如果值为EGL_OPENGL_ES_BIT,只有支持创建符合OpenGL ES 1.0或1.1上下文的帧缓冲配置才会被匹配。

属性:EGL_DEPTH_SIZE
描述:值为非负整数,指定深度缓冲区大小;优先选择至少具有指定大小的最小深度缓冲区。
如果值为零,优先选择不具有深度缓冲区的帧缓冲区配置。 默认值为零。

属性:EGL_GREEN_SIZE
描述:值为非负整数,指定颜色缓冲中绿色分量的位数(RGBA颜色模型,G 所占位数)。如果该值为零,则首选绿色分量最小的颜色缓冲区,否则
选择具有至少指定大小的蓝色分量的颜色缓冲区;默认值为零。

属性:EGL_LEVEL(暂未翻译)
属性:EGL_LUMINANCE_SIZE(暂未翻译)
属性:EGL_MATCH_NATIVE_PIXMAP(暂未翻译)
属性:EGL_NATIVE_RENDERABLE(暂未翻译)

属性:EGL_MAX_SWAP_INTERVAL
描述:值为整数,该整数指示可以传递给eglSwapInterval()函数的最大值,默认值为EGL_DONT_CARE。

属性:EGL_MIN_SWAP_INTERVAL
描述:值为整数,该整数指示可以传递给eglSwapInterval()函数的最小值,默认值为EGL_DONT_CARE。

属性:EGL_RED_SIZE
描述:值为非负整数,指定颜色缓冲中红色分量的位数(RGBA颜色模型,R 所占位数)。如果该值为零,则首选红色分量最小的颜色缓冲区,否则
选择具有至少指定大小的红色分量的颜色缓冲区;默认值为零。

属性:EGL_SAMPLE_BUFFERS(暂未翻译)

属性:EGL_SAMPLES
描述:多重采样最小样本数。

属性:EGL_STENCIL_SIZE
描述:值为非负整数,以位为单位,指定模板缓冲区大小。优先选择至少具有指定大小的最小模板缓冲区配置。默认值为0。
注意:模板缓冲区仅支持OpenGL 或 OpenGL ES API

属性:EGL_RENDERABLE_TYPE
描述:值为位掩码,指示帧缓冲区配置必现支持使用eglCreateContext()创建哪些类型的客户端上下文API。
掩码位 与属性EGL_CONFORMENT的掩码位相同。默认值为:EGL_OPENGL_ES_BIT。

属性:EGL_SURFACE_TYPE
描述:帧缓冲区配置 支持的EGL表面类型,值为掩码位。掩码位包括:
EGL_MULTISAMPLE_RESOLVE_BOX_BIT:
EGL_PBUFFER_BIT:帧缓冲区配置 支持创建PBuffer(Pixel Buffer) surfaces
EGL_PIXMAP_BIT:帧缓冲区配置支持创建pixmap Buffer surfaces
EGL_SWAP_BEHAVIOR_PRESERVED_BIT:
EGL_VG_ALPHA_FORMAT_PRE_BIT:
EGL_VG_COLORSPACE_LINEAR_BIT:
EGL_WINDOW_BIT:帧缓冲区配置支持创建window surfaces( 默认值)

属性:EGL_TRANSPARENT_TYPE(暂未翻译)
属性:EGL_TRANSPARENT_RED_VALUE(暂未翻译)
属性:EGL_TRANSPARENT_GREEN_VALUE(暂未翻译)
属性:EGL_TRANSPARENT_GREEN_VALUE(暂未翻译)

错误码

返回值:GL_FALSE 函数调用失败。GL_TRUE 返回可用的配置,和可用配置数量
eglGetError()值
EGL_BAD_DISPLAY :参数display 不是一个有效的EGLDisplay 对象
EGL_BAD_ATTRIBUTE :参数attrib_list中数据有错误
EGL_NOT_INITIALIZED :参数display 没有被初始化
EGL_BAD_PARAMETER :参数num_config是个空指针

实例

选择一个渲染API使用OpenGL ES 3、颜色缓冲区为RGBA:8888的PBuffer

实例代码
 EGLDislay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
 if(display == EGL_NO_DISPLAY)
 {
 	std::cout<<"eglGetDisplay failed" << std::endl;
 	return;
 }
 EGLInt major;
 EGLIint minor;
 EGLBoolean init=  eglInitialize(display,&major,&minor);  
 if(!init)				//返回失败												
 {
 	std::cout<<"eglInitializeFailed" << std::endl;	
 	int errCode = eglGetError();
 	if(errCode == EGL_BAD_DISPLAY)
 	{	
	}
	else if(errCode == EGL_NOT_INITIALIZED)
	{
	}
 	return;
 } 
 
 EGLint cfgAttrList[] = 
 {
 	EGL_SURFACE_TYPE,EGL_PBUFFER_BIT,			//surface 类型 PBuffer,
	EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT,
	EGL_COLOR_BUFFER_TYPE,EGL_RGB_BUFFER,
	EGL_BIND_TO_TEXTURE_RGBA,EGL_TRUE,	//为true,支持将Surface 的颜色缓冲区 绑定到OpenGL ES RGBA纹理的帧缓冲区配置
	EGL_RED_SIZE,8,
	EGL_GREEN_SIZE,8,
	EGL_BLUE_SIZE,8,
	EGL_ALPHA_SIZE,8,
	EGL_NONE,EGL_NONE		
 }
 EGLConfig config;
 EGLint numberCfgs = 0;
if (!eglChooseConfig(dPtr->mDisplay, cfgAttrList, &config, 1, &numberCfgs))
	{
			std::cout << " eglChooseConfig failed" <<std::endl;
			return;
	}
英文连接

链接: https://registry.khronos.org/EGL/sdk/docs/man/

声明

由于英语水平有限,可能有些翻译或者理解不是特别到位,有错误之处,希望大家指出,本人及时矫正。此函数只翻译了一些常用的属性,有些属性由于本人也没怎么使用过,固暂未翻译。

你可能感兴趣的:(EGL/OPenGL,函数翻译,windows)