关于opengles中egl的问题

lich_x 2010-03-19 03:21:51
在初始化egl时我打算用eglCreatePixmapSurface来把一个Pixmap设置为Surface。但是在eglChooseConfig时,将Config Attribs中的EGL_SURFACE_TYPE改为EGL_PIXMAP_BIT后,eglChooseConfig的返回值为EGL_TRUE,但eglConfig和iConfigs的值为0,请问是哪里出错了呢?代码如下

EGLDisplay eglDisplay= 0;
EGLConfig eglConfig = 0;
EGLSurface eglSurface= 0;
EGLContext eglContext= 0;
EGLNativeWindowType eglWindow = 0;
EGLNativePixmapType system_pixmap = 0;
void initEGL(){
eglDisplay = eglGetDisplay(NULL);
EGLint iMajorVersion, iMinorVersion;
eglInitialize(eglDisplay, NULL,NULL);
eglBindAPI(EGL_OPENGL_ES_API);
EGLint pi32ConfigAttribs[] =
{
EGL_ALPHA_SIZE, 0,
EGL_RED_SIZE, 5,
EGL_GREEN_SIZE, 6,
EGL_BLUE_SIZE, 5,
EGL_DEPTH_SIZE, 16,
EGL_SURFACE_TYPE, EGL_PIXMAP_BIT,
EGL_NONE
};
int iConfigs;
eglChooseConfig(eglDisplay, pi32ConfigAttribs, &eglConfig, 1, &iConfigs);
eglSurface = eglCreatePixmapSurface(eglDisplay, eglConfig, system_pixmap,NULL);
EGLint ai32ContextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
eglContext = eglCreateContext(eglDisplay, eglConfig, NULL, ai32ContextAttribs);
eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
}
...全文
722 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
venuslijinxing 2011-12-31
  • 打赏
  • 举报
回复
eglConfig和iConfigs的值如果为0,可能是由于你的config list中有一些属性不正确,或者找不到与你想要的config匹配的surface。目前我也在做这方面的工作,也遇到过类似这样的问题。我的pbuffer就是申请不成功,因为我把R,G,B,A都设置为8。可能是由于模拟器或者相关硬件不支持。愁人啊~~~
joniy 2011-11-20
  • 打赏
  • 举报
回复
我也正在整这个问题!我好期待有牛人来这里说两句!看我回帖的时间就知道我有多纠结了!
chinawwj2003 2011-05-31
  • 打赏
  • 举报
回复
有没有这方面的代码?可以共享一下。。。主要是创建pixmap和pbuffer方面的 我的程序一直创建不成功。。。
lich_x 2010-03-19
  • 打赏
  • 举报
回复
eglInitialize返回正确
将EGL_SURFACE_TYPE改为EGL_WINDOW_BIT或EGL_PBUFFER_BIT,eglChooseConfig就能正常执行,但是用EGL_PIXMAP_BIT就有问题。
fandh 2010-03-19
  • 打赏
  • 举报
回复
http://blog.csdn.net/shenbin1430/archive/2009/06/29/4306633.aspx
fandh 2010-03-19
  • 打赏
  • 举报
回复
eglInitialize返回正确了?
EGLConfig *configs_list;

EGLint num_configs;

// Main Display

m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);

if( m_eglDisplay == EGL_NO_DISPLAY || eglGetError() != EGL_SUCCESS )

return FALSE;

if( eglInitialize( m_eglDisplay, NULL, NULL ) == EGL_FALSE || eglGetError() != EGL_SUCCESS )

return FALSE;

// find out how many configurations are supported

if ( eglGetConfigs( m_eglDisplay, NULL, 0, &num_configs)

== EGL_FALSE || eglGetError() != EGL_SUCCESS )

return FALSE;

configs_list = malloc(num_configs * sizeof(EGLConfig));

if (configs_list == (EGLConfig *)0)

return FALSE;

// Get Configurations

if( eglGetConfigs( m_eglDisplay, configs_list, num_configs, &num_configs)

== EGL_FALSE || eglGetError() != EGL_SUCCESS )

return FALSE;

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧