На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> E/libEGL(1551): eglSwapBuffers:1641 error 300d (EGL_BAD_SURFACE) , OpenGL для Android
    Привет коллеги,

    делаю игру под Android 2.3.3, NKD platform-10.

    На эмуляторе все отрабатывает отлично, на планшете (Android 3.2.1) получаю

    E/libEGL(1551): eglSwapBuffers:1641 error 300d (EGL_BAD_SURFACE)
    девайс без рутового доступа.

    Юзаю OpenGL 1.1.


    Help :wall:

    p.s. по ходу наверное ошибся веткой :rtfm:
      I got past the ‘eglSwapBuffers:1380 error 300d (EGL_BAD_SURFACE)’ error by changing the following declaration (note all the sizes are don’t cares – not sure what exactly to use on my Samsung Galaxy S):


      ExpandedWrap disabled
          int[] configSpec = {
            EGL10.EGL_RED_SIZE, EGL10.EGL_DONT_CARE,
            EGL10.EGL_GREEN_SIZE, EGL10.EGL_DONT_CARE,
            EGL10.EGL_BLUE_SIZE, EGL10.EGL_DONT_CARE,
            EGL10.EGL_DEPTH_SIZE, EGL10.EGL_DONT_CARE,
            EGL10.EGL_NONE
          };
      However, then there was a security exception when I tried to set the wallpaper, after previewing it. I fixed that by putting the following in AndroidManifest.xml:


      ExpandedWrap disabled
          <uses-permission android:name="android.permission.BIND_WALLPAPER"/>

      FULL DISCLOSURE: I accidentally cut-and-pasted a uses-permission block with “android.permission.INTERNET” the first time, and that actually fixed the problem too. I suspect it’s a bug in somebody’s security manager; probably Samsung’s. But I re-tested with BIND_WALLPAPER, which is more logical, and it works as expected. :-)

      не помогло

      ExpandedWrap disabled
            status GraphicsService::start()
            {
                EGLint lFormat, lNumConfigs, lErrorResult;
                EGLConfig lConfig;
         
                const EGLint lAttributes[] =
                {
                    EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT,
                    EGL_BLUE_SIZE, 5,
                    EGL_GREEN_SIZE, 6,
                    EGL_RED_SIZE, 5,
                    EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_NONE
                };
         
        //      const EGLint lAttributes[] configSpec = {
        //          EGL_RED_SIZE, EGL_DONT_CARE,
        //          EGL_GREEN_SIZE, EGL_DONT_CARE,
        //          EGL_BLUE_SIZE, EGL_DONT_CARE,
        //          EGL_DEPTH_SIZE, EGL_DONT_CARE,
        //          EGL_NONE
        //        };
         
                mDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
         
                if (mDisplay == EGL_NO_DISPLAY) goto ERROR;
         
                if (!eglInitialize(mDisplay, NULL, NULL)) goto ERROR;
         
                if(!eglChooseConfig(mDisplay, lAttributes, &lConfig, 1,
                    &lNumConfigs) || (lNumConfigs <= 0)) goto ERROR;
         
                if (!eglGetConfigAttrib(mDisplay, lConfig,
                    EGL_NATIVE_VISUAL_ID, &lFormat)) goto ERROR;
         
                ANativeWindow_setBuffersGeometry(mApplication->window, 0, 0,
                    lFormat);
         
                mSurface = eglCreateWindowSurface(mDisplay, lConfig,
                  mApplication->window, NULL);
         
                if (mSurface == EGL_NO_SURFACE) goto ERROR;
                    mContext = eglCreateContext(mDisplay, lConfig,
                           EGL_NO_CONTEXT, NULL);
         
                if (mContext == EGL_NO_CONTEXT) goto ERROR;
                if (!eglMakeCurrent (mDisplay, mSurface,  mSurface, mContext)
                || !eglQuerySurface(mDisplay, mSurface, EGL_WIDTH, &mWidth)
                || !eglQuerySurface(mDisplay, mSurface, EGL_HEIGHT, &mHeight)
                   || (mWidth <= 0) || (mHeight <= 0)) goto ERROR;
                  glViewport(0, 0, mWidth, mHeight);
                  return STATUS_OK;
         
            ERROR:
              Log::error("Error while starting GraphicsService");
              stop();
              return STATUS_KO;
            }
         
         
         
            status GraphicsService::update() {
                float lTimeStep = mTimeService->elapsed();
                static float lClearColor = 0.0f;
                lClearColor += lTimeStep * 0.01f;
         
                glClearColor(lClearColor, lClearColor, lClearColor, 1.0f);
                glClear(GL_COLOR_BUFFER_BIT);
         
                if (eglSwapBuffers(mDisplay, mSurface) != EGL_TRUE) // Падает тут :(
                {
                  Log::error("Error %d swapping buffers.", eglGetError());
                    return STATUS_KO;
                }
                return STATUS_OK;
            }


      Добавлено
      help :wall:
      Сообщение отредактировано: micro -
        По коду - лучше избегать использования goto. Можно сделать, например, так:
        ExpandedWrap disabled
          do {
           
              result = do_something();
              if (result == ERROR)
                  break;
           
              return OK;
          } while (false);
           
          //обработка ошибки


        Добавлено
        Кстати, eglCreateWindowSurface может возвращать много ошибок, вроде. Может возникает какая-то из них?
        Сообщение отредактировано: Хрен -
          Цитата Хрен @
          По коду - лучше избегать использования goto. Можно сделать, например, так:
          ExpandedWrap disabled
            do {
             
                result = do_something();
                if (result == ERROR)
                    break;
             
                return OK;
            } while (false);
             
            //обработка ошибки


          Добавлено
          Кстати, eglCreateWindowSurface может возвращать много ошибок, вроде. Может возникает какая-то из них?

          Спасибо, как вариант заюзаю в проектах. Иногда просто применяю goto с setjmp.

          Получается, что вся инициализация происходит в status GraphicsService::start() без ошибок.

          Падает при обновлении. Есть идея посмотреть в движках типа Cocos2D, реализацию работы с графикой.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0229 ]   [ 15 queries used ]   [ Generated: 27.04.24, 10:36 GMT ]