2012-01-12 3 views
4

SurfaceView에서 픽셀 포맷을 변경하면 프레임 속도에 큰 영향을줍니다. 그러나 장치별로 최상의 형식을 선택하는 방법을 찾지 못하는 것 같습니다.안드로이드 SurfaceView에서 가장 좋은 PixelFormat을 찾는 방법

예 :이 내 게임은 모토로라 줌 (3.2.1)에 갤럭시 넥서스 (ICS 4.0)하지만 느린에 훨씬 빠르게 실행됩니다

@Override 
public void surfaceCreated(final SurfaceHolder holder) { 
    //This line seems to fix speed issue with his res devices 
    holder.setFormat(PixelFormat.RGBA_8888); 
    androidGame.setSurfaceHolder(holder); 
} 

.

PixelFormat.OPAQUE로 변경하면 상황이 바뀝니다. 넥서스는 느리고 Xoom은 이제 빠릅니다. 그래서 장치마다 최상의 형식을 결정할 수 있어야합니다. getWindow(). getAttributes(). 형식을 사용하여 시도했지만이 항상 -1 (OPAQUE) 반환합니다.

답변

5

업무 시간 중에 Google IO 2012에서 Romain Guy와 대화 할 수있었습니다. 불행히도 사용할 최적의 픽셀 형식을 감지하는 합리적인 방법은 없습니다. 각 장치에서 최상의 형식을 찾기 위해 벤치 마크 테스트를 실행해야합니다.

2

Display.getPixelFormat()은 표시 할 픽셀 형식을 가져옵니다. 그렇게하는 것이 좋습니다.

이 메서드는 더 이상 지원되지 않으며 항상 RGBA_8888을 반환합니다.

/** 
* Gets the pixel format of the display. 
* @return One of the constants defined in {@link android.graphics.PixelFormat}. 
* 
* @deprecated This method is no longer supported. 
* The result is always {@link PixelFormat#RGBA_8888}. 
*/ 
@Deprecated 
public int getPixelFormat() { 
    return PixelFormat.RGBA_8888; 
} 
+0

Display.getPixelFormat()은 Galaxy Nexus에서 5를 반환하며 PixelFormat의 상수와 일치하지 않습니다. – theJosh

+0

장치가 올바른 값을 반환하지 않으면 어떻게 도와 줄지 잘 모름. 나는 당신이 특정한 경우에 그 장치를 탐지하고 그 장치를 위해 가장 빠른 장치를 사용할 수 있다고 생각합니다. – nmjohn

+0

@nmjohn이 게시물에 따르면 반환 된 5는 실제로 BGRA_8888이며,이 제안이 실제로 좋은 실적을 거두는 지 여부는 흥미로울 것입니다. http://stackoverflow.com/questions/11949709/confused-about-pixelformat –

관련 문제