Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 08:53, 9 July 2007.

OpenGL:根据显示模式选择正确的配置信息

From Forum Nokia Wiki

  • 设备, 软件 版本:

S60 3rd Edition and FP1


  • 详细描述:

自从手机支持不同的显示模式后,我们为当前使用的显示模式选择一个适当的EGL帧缓冲就显得尤为重要了。


举例来说,假设目前显示模式为EColor64K,EColor64K显示模式使用的RGBA5650格式,也就是说,每个像素16bit,红色5位,蓝色6位,绿色5位,Alpha透明0位。


如下代码所示,检查一下当前显示模式,然后选择帧缓冲:

TDisplayMode mode = Window().DisplayMode();
 
TInt BufferSize = 0;
 
switch(mode)
{
  case( EColor64K ):
 
   BufferSize = 16;
 
   break;
 
   ...
}


根据相面属性选择适当配置信息:

const EGLint attrib_list[] =
 
        {
 
        EGL_SURFACE_TYPE,   EGL_PBUFFER_BIT,
 
        EGL_BUFFER_SIZE,    BufferSize,
 
        EGL_RED_SIZE,       5,
 
        EGL_GREEN_SIZE,     6,
 
        EGL_BLUE_SIZE,      5,
 
        EGL_ALPHA_SIZE,     0,
 
        EGL_DEPTH_SIZE,     EGL_NONE
 
        };


然后使用:

eglChooseConfig( iEglDisplay, attrib_list, configList, configSize, &numOfConfigs );


可能会返回RGBA8880配置信息,因为结果是被过滤过的,其属性可能等于或大于请求值。如果configList中第一个配置信息被选中,结果可能和当前显示模式不匹配,这种情况下,绘制将会发生错误,导致空白屏幕出现。


  • 解决方案:

使用下列代码来过滤返回的配置信息列表:

for ( TInt i = 0; i < numOfConfigs; i++ )
 
        {
 
        EGLint red, green, blue, alpha;
 
        eglGetConfigAttrib( iEglDisplay, configList[i], EGL_RED_SIZE, &red );
 
        eglGetConfigAttrib( iEglDisplay, configList[i], EGL_GREEN_SIZE, &green );
 
        eglGetConfigAttrib( iEglDisplay, configList[i], EGL_BLUE_SIZE, &blue );
 
        eglGetConfigAttrib( iEglDisplay, configList[i], EGL_ALPHA_SIZE, &alpha );            
 
        if ( red == 5 && green == 6 && blue == 5 && alpha == 0 )
 
            {
 
            iSelectedConfig = configList[i];
 
            break;
 
            }
 
        }
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX