gpt4 book ai didi

android - HTC Desire 上的 EGLConfig,可用配置挂起设备

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:01 25 4
gpt4 key购买 nike

我正在实现自己的 EGLConfigChooser 以传递给 setEGLConfigChooser() 以便根据我的需求为当前设备选择最佳可用配置申请。

更具体地说,我正在查询所有可用的配置并选择具有最大深度缓冲区大小的配置(并且在具有相同深度缓冲区大小的配置之间我想要具有最大颜色深度的配置),代码墙如下:

 @Override
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display)
{
//Querying number of configurations
int[] num_conf = new int[1];
egl.eglGetConfigs(display, null, 0, num_conf); //if configuration array is null it still returns the number of configurations
int configurations = num_conf[0];

//Querying actual configurations
EGLConfig[] conf = new EGLConfig[configurations];
egl.eglGetConfigs(display, conf, configurations, num_conf);

EGLConfig result = null;

for(int i = 0; i < configurations; i++)
{
Log.v("EGLConfigChooser", "Configuration #" + i );
print(egl, display, conf[i]);
result = better(result, conf[i], egl, display);
}

Log.v("EGLConfigChooser", "Chosen EGLConfig:");
print(egl, display, result);

return result;
}

/**
* Returns the best of the two EGLConfig passed according to depth and colours
* @param a The first candidate
* @param b The second candidate
* @return The chosen candidate
*/
private EGLConfig better(EGLConfig a, EGLConfig b, EGL10 egl, EGLDisplay display)
{
if(a == null) return b;

EGLConfig result = null;

int[] value = new int[1];

egl.eglGetConfigAttrib(display, a, EGL10.EGL_DEPTH_SIZE, value);
int depthA = value[0];

egl.eglGetConfigAttrib(display, b, EGL10.EGL_DEPTH_SIZE, value);
int depthB = value[0];

if(depthA > depthB)
result = a;
else if(depthA < depthB)
result = b;
else //if depthA == depthB
{
egl.eglGetConfigAttrib(display, a, EGL10.EGL_RED_SIZE, value);
int redA = value[0];

egl.eglGetConfigAttrib(display, b, EGL10.EGL_RED_SIZE, value);
int redB = value[0];

if(redA > redB)
result = a;
else if(redA < redB)
result = b;
else //if redA == redB
{
//Don't care
result = a;
}
}

return result;
}

(print 方法将 EGLConfig 值打印到 Logger)

现在,它似乎工作正常,它选择了以下配置:

01-30 18:57:04.424: VERBOSE/EGLConfigChooser(1093): Chosen EGLConfig:
01-30 18:57:04.424: VERBOSE/EGLConfigChooser(1093): EGL_RED_SIZE = 8
01-30 18:57:04.424: VERBOSE/EGLConfigChooser(1093): EGL_BLUE_SIZE = 8
01-30 18:57:04.424: VERBOSE/EGLConfigChooser(1093): EGL_GREEN_SIZE = 8
01-30 18:57:04.424: VERBOSE/EGLConfigChooser(1093): EGL_ALPHA_SIZE = 8
01-30 18:57:04.424: VERBOSE/EGLConfigChooser(1093): EGL_DEPTH_SIZE = 24
01-30 18:57:04.424: VERBOSE/EGLConfigChooser(1093): EGL_ALPHA_FORMAT = 24
01-30 18:57:04.424: VERBOSE/EGLConfigChooser(1093): EGL_ALPHA_MASK_SIZE = 0
01-30 18:57:04.424: VERBOSE/EGLConfigChooser(1093): EGL_STENCIL_SIZE = 8

问题是,当使用此配置时,手机屏幕变成绿色并带有紫色伪像(场景应该是黑色的,有一张木 table ),它完全挂起并停止响应任何类型的输入,我所能做的就是是通过调试器终止我的进程,当我这样做时设备重新启动(?!!)。

为什么 eglGetConfigs 会返回导致此类问题的配置?你们有没有人经历过类似的事情或者能在我的代码中找到某种缺陷?我仔细检查了一下,但对我来说没问题(它的灵感来自 http://brandnewreality.com/blog/android-egl-querying-your-gl-driver )

感谢您的帮助。

最佳答案

尝试添加:

getHolder( ).setFormat( PixelFormat.RGBA_8888 );

在设置 GL 配置选择器之后,到你的表面构造器。基本上我在选择格式 8,8,8,0,0,0 (R8, G8, B8, A0, Z0, Stencil0) 时遇到了崩溃,直到我添加了那一行...

史蒂夫

关于android - HTC Desire 上的 EGLConfig,可用配置挂起设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4844711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com