2011-03-08 2 views
3

현재 Android 플랫폼에서 내 게임에서 필요한 모든 기능을 테스트하고 있습니다. hello-gl2 샘플 코드 만 수정하고 두 번의 렌더링 패스에서 일부 텍스처, VBO, FBO 및 간단한 쉐이더를 추가했습니다.Android, OpenGL이 화면을 터치 할 때 jni에서 지연됩니다.

내가 앱을 화면을 터치하지 않고 실행하게하면, 약 35-45fps가됩니다. 그러나 화면을 계속 만지기 시작하면 렌더링이 지연되기 시작합니다. 입력과 렌더링이 같은 스레드에 있다고 생각하면 문제가되는 것입니까? (생각한대로?) 수정이 가능합니까? 저 지연을 고칠 수 없다면, 내 게임은 벌을 먹을만큼 잘 뛰지 못할 것입니다. (무언가 무거운 렌더링 물건이 있습니다)

// 미리 감사드립니다!

답변

1

나는 안드로이드 개발에 상당히 익숙하지만 터치 핸들러도 매우 뒤떨어져있는 것으로 나타났습니다. 기본 샘플은 객체를 새로 작성하고이를 상당히 많이 수행합니다. 이것은 가비지 컬렉터를 화나게 만드는 것입니다. 나는 'Thread.sleep (10)'을 호출하여 덜 느린 방식으로 수행되도록했습니다. 실행 기능 내부.

'새로운 Runnable'을 객체의 원형 버퍼로 대체하면 성능이 향상되지만 아직 조사하지 않은 것으로 상상합니다. 나는 터치 이벤트가 별도의 스레드에서 발생하는 것 같고 이것이 합병증을 일으킬 수 있습니다.

Override public boolean onTouchEvent(final MotionEvent event) 
    { 
     queueEvent(


     new Runnable() 
     { 
      public void run() 
      { 

       int action = event.getAction(); 
       //do your handling here 
       try 
       { 
        Thread.sleep(10); 
       } catch (InterruptedException e) 
       { 

        e.printStackTrace(); 
       } 

      } 
     }); 
     return true; 
    } 
+0

아, 나는 당신이 Jni를 언급 한 것을 본다. 죄송합니다.이 대답은 Java 코드만을 나타냅니다. 나는 Jni를 사용하여 전체 게임 루프를 아직 시도하지 않았다. – Luther

+0

글쎄, 당신이 안드로이드 2.3을 사용하지 않는 한, 내가 읽고있는 것, 당신은 jni에서 전체 게임 루프를 할 수 없다. 2.0을 사용하고 있지만, 전체 게임을 C에서하려고하지 않는다. 게임을 시뮬레이트하고 C 코드의 모든 것을 렌더링하는 jni 함수 만 호출합니다. 그럼 정상적인 안드로이드 자바 코드로 돌아갑니다. 나는 자바에서 입력을 가져 와서 jni 호출로 보내고 jni에서 내 게임 전체를 할 계획이다. 그래서 기본적으로 알아야 할 것은 공연을 통해이 문제에 접근하는 것입니다. – Mockarutan

+0

당신의 접근 방식은 광산과 비슷하게 들립니다. 버퍼 처리 루틴에 대한 몇 가지 jni 코드가 있지만 나머지는 현재 Java에 있습니다. 거기에 약간의 지연을 가해 보셨습니까? 그것은 당신의 게임이 터치 메시지에 압도당하는 것을 막을 것입니다. – Luther

관련 문제