안드로이드 개발 질문/답변
(글 수 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();