Android 有没有办法在AOSP中禁用HWC并在GLES中执行所有操作?

Android 有没有办法在AOSP中禁用HWC并在GLES中执行所有操作?,android,android-source,surfaceflinger,Android,Android Source,Surfaceflinger,在Android 8及以上版本中,有两种处理图形的功能。SurfaceFlinger对某些层使用GLES进行渲染,并将其他层传递给Hardware composer处理。我的问题是,有没有一种方法可以让系统只使用GLES来渲染所有内容,这样我就可以使用着色器(GLSL)代码来正确操作帧缓冲区 项目文件到处都有HWC文件。我正在试图找到一种方法来改变每一帧。在设置->开发人员选项->硬件加速渲染中,有一个名为禁用硬件覆盖的开关。如果打开它,系统将关闭HWC,并使用OpenGLES渲染层。如果要始终

在Android 8及以上版本中,有两种处理图形的功能。SurfaceFlinger对某些层使用GLES进行渲染,并将其他层传递给Hardware composer处理。我的问题是,有没有一种方法可以让系统只使用GLES来渲染所有内容,这样我就可以使用着色器(GLSL)代码来正确操作帧缓冲区


项目文件到处都有HWC文件。我正在试图找到一种方法来改变每一帧。

设置->开发人员选项->硬件加速渲染中,有一个名为
禁用硬件覆盖的开关。如果打开它,系统将关闭
HWC
,并使用
OpenGLES
渲染层。如果要始终关闭它,可以深入代码,找到它设置的标志,然后将其设置为禁用
HWC

更新1:

DevelopmentSettings.java
中,下面的代码将向
SurfaceFlinger
发送标志:

private void writeDisableOverlaysOption(){
试一试{
IBinder flinger=ServiceManager.getService(“SurfaceFlinger”);
if(flinger!=null){
地块数据=地块。获取();
data.writeInterfaceToken(“android.ui.ISurfaceComposer”);
final int disableOverlays=mDisableOverlays.isChecked()?1:0;
数据写入(禁用覆盖);
flinger.transact(1008,数据,null,0);
data.recycle();
UpdateFileGroptions();
}
}catch(RemoteException ex){}
}
SurfaceFlinger.cpp
中,它将此标志保存到
mDebugDisableHWC
,并使用下面的代码通知
使用
OpenGLES
强制渲染:

//构建h/w工作列表
如果(CC_不太可能(mGeometryInvalid)){
mGeometryInvalid=false;
对于(大小dpy=0;dpygetHwcDisplayId();
如果(hwcId>=0){
const向量和currentLayers(
displayDevice->getVisibleLayersSortedByZ());
对于(size_t i=0;ihasHwcLayer(hwcId)){
如果(!layer->createHwcLayer(mHwc.get(),hwcId)){
层->强制客户端合成(hwcId);
持续
}
}
图层->设置几何图形(显示设备,i);
if(mDebugDisableHWC | | mDebugRegion){
层->强制客户端合成(hwcId);
}
}
}
}
}
好的,如果您想通过代码禁用它,您可以编写一个方法,如
writeDisableOverlaysOption
,并在
Settings
中禁用开关,以避免用户使用开关重置状态