안드로이드 개발 질문/답변
(글 수 45,052)
//Activity
@Override public boolean onKeyDown(int keyCode, KeyEvent event){ switch(keyCode) { case KeyEvent.KEYCODE_BACK: android.os.Process.killProcess(android.os.Process.myPid()); break; case KeyEvent.KEYCODE_POWER: android.os.Process.killProcess(android.os.Process.myPid()); break; } return super.onKeyDown(keyCode, event); } @Override public void onResume() { MusicMgr.GetInstance().SetMusic(tempIsMusic); SoundMgr.GetInstance().SetSound(tempIsSound); context = getApplicationContext(); /* if ( AppMain.GetInstance().IsInit() ) { TextureMgr.GetInstance().EraseTexture(); } */ super.onResume(); }
//Renderer
public void onSurfaceCreated(GL10 gl, EGLConfig config) { GLMgr mgr = GLMgr.GetInstance(); mgr.SetGL(gl); m_app = AppMain.GetInstance(); if ( !m_app.IsInit() ) { SoundMgr.GetInstance().CreateSoundPool(); m_app.OnInit(); } } public void onSurfaceChanged(GL10 gl, int width, int height) { // TODO Auto-generated method stub GLMgr mgr = GLMgr.GetInstance(); mgr.SetGL(gl); mgr.SetTextureType(); mgr.SetAlphaBrend(); mgr.SetProjection( width , height); TextureMgr.GetInstance().ReloadTexture(); }
//GLMgr
public boolean SetTextureType(){ if ( null == m_gl ) return false; m_gl.glEnable( GL10.GL_TEXTURE_2D ); m_gl.glEnableClientState( GL10.GL_VERTEX_ARRAY ); m_gl.glEnableClientState( GL10.GL_TEXTURE_COORD_ARRAY ); return true; } public boolean SetAlphaBrend(){ if ( null == m_gl ) return false; m_gl.glEnable( GL10.GL_BLEND ); //m_gl.glBlendFunc( GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA ); m_gl.glBlendFunc( GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA ); return true; } public boolean SetProjection( int width, int height ) { if ( null == m_gl ) return false; m_gl.glViewport(0, 0, width, height); m_gl.glMatrixMode(GL10.GL_PROJECTION); m_gl.glLoadIdentity(); m_gl.glOrthof( -MyView.m_screenGapX, MyView.kVirtualScreenWidth + MyView.m_screenGapX, MyView.kVirtualScreenHeight + MyView.m_screenGapY, -MyView.m_screenGapY, 1.0f, -1.0f ); m_gl.glMatrixMode(GL10.GL_MODELVIEW); m_gl.glLoadIdentity(); //m_gl.glScalef(2, 2, 1); m_gl.glDepthMask(false); return true; }
TextureMgr.GetInstance().ReloadTexture()
란 녀석은 현재 로딩된 해시맵에 담겨있는 텍스쳐를 현재 GL을 사용하여 다시 로딩하는 작업을 하고 있고 제대로 동작하고 있습니다.
뭔가 빼먹은게 있나요?
잠궜다가 해제할때 화면에 텍스쳐들은 출력이 되는데 위치나 회전들이 다 정상이 아닙니다 -_-;
이것땜에 이틀째 고생중입니다.
혹시나 아시는 분이 있다면 꼭좀 도와주십시오...
2011.12.13 18:24:29
안될때는 기본적인것 부터 check 해 보시는 것이 어떤지.
올려놓은 소스를 보면 pause 와 resume 부분이 명확하지 않는 것 같습니다.
API DEMO 를 확인 하면 activity 의 pause 와 resume 을 할 때
GLSurfaceView 에도 pause 와 resume 을 알려 주는 구조로 되어 있습니다.
lock screen 으로 갔다 돌아올때 문제가 생긴다는 것은 pause resume 시 Render 가 정상적으로 동작하지 않아서
이상하게 보이는 경우 인것 같고.
그부분이 구현한 코드가 잘못되어서 이상한 것이 아니고 초기화 문제와 관련이 있다면
code style 을 정상적으로 동작하는 예제와 동일한 형태를 취하는것이 문제 해결에 도움이 되지 않을까 싶네요.
저는 Kube.java 참조 했습니다.
약간의 도움이라도 되었으면 하네요.
좌표계 초기화를 한번 해보세요 ~ !
m_gl.glLoadIdentity();