2014-03-07 3 views
5

나는이 "정확한"문제에 봉착 : 나는 플레이어, 원수가SurfaceView에서 하드웨어 가속을 비활성화하는 방법은 무엇입니까?

setShadowLayer Android API differences

을, 나는 14 API를 사용하여 컴파일하고 있습니다. 문제는 : 14 API on에서 하드웨어 가속이 기본적으로 사용되며 모든 그리기 방법에서 지원되지 않습니다 (예 : 사용하려는 setShadowLayer()). 따라서 솔루션은 위 주제에서 제시된 것과 같이 간단합니다. 문제는 : 그는 View를 사용하고 더 나은 게임 성능을 위해 SurfaceView를 사용합니다.

public class Screen extends SurfaceView implements Runnable { // Code } 

그래서, 난 그냥 생성자에 추가 : 내 표면보기는 다음과 같이 선언 된 내 그림자가 uggly 보지 만들기 위해

public Screen(Context context) { 
    super(context); 
    holder = getHolder(); 
    setLayerType(View.LAYER_TYPE_SOFTWARE, null); // Here. 
} 

내 서피스 뷰 SurfaceView에 하드웨어 가속을 사용하지 않으려면, 그리고 결과 : 전체 SurfaceView가 작동을 멈 춥니 다. 무슨 일이 일어나는지 보여줄 수는 없지만 하드웨어 가속을 사용하지 않으면 아무것도 그려지지 않습니다. SurfaceView 자체는 하드웨어 가속에 달려 있지만 캔버스는 그릴 때 그 그림자가 제대로 작동하지 않을 수 있기 때문에 나는 이것에 대해 매우 비관적입니다.

+1

소프트웨어 렌더링을 사용하는 경우 특히 현대 장치에서 많은 성능을 포기합니다. 어쨌든, SurfaceView 표면의 가속을 불가능하게하는 것은 가능하지 않을 수 있습니다 - http://developer.android.com/guide/topics/graphics/hardware-accel.html에서 윈도우에 대한 가속을 비활성화 할 수 없다고 말합니다 . 전체 활동이나 앱에 대한 가속을 사용 중지 해 보셨습니까? – fadden

+0

예, 그 부분도 사용해 보았습니다. 그것은 쓸모가 없었습니다. 그림자는 여전히 험악했습니다. 나는 그림자 품질을 포기하고 google이 그것을 고칠 때까지 기다리기로 결정했다. –

+0

이전에 작성하신 의견이 잘못되었습니다. @ shelll의 답변에서 언급했듯이, lockView (Surface)의 Surface에서 얻은 캔버스는 하드웨어 가속이 아닙니다. – fadden

답변

5

this에 따르면 SurfaceView은 전혀 가속되지 않으므로 다른 곳의 문제 일 수 있습니다.

+0

쉽게 알 수 있습니다 - 표면을 잠근 후에'Canvas # isHardwareAccelerated()'를 호출하십시오. 나는 지금 단지'SurfaceView'에서 그것을 시험해 보았고 하드웨어 가속화가 아니라고 확인했다. – fadden

관련 문제