diff --git a/rosen/modules/render_service/core/pipeline/rs_uni_render_virtual_processor.cpp b/rosen/modules/render_service/core/pipeline/rs_uni_render_virtual_processor.cpp index 644d34420cb3c278c719ad7b240ab3308f074e2e..69b75a9d80b806cf12a3c8bdac3dd2e07e0903d6 100644 --- a/rosen/modules/render_service/core/pipeline/rs_uni_render_virtual_processor.cpp +++ b/rosen/modules/render_service/core/pipeline/rs_uni_render_virtual_processor.cpp @@ -60,20 +60,27 @@ bool RSUniRenderVirtualProcessor::Init(RSDisplayRenderNode& node, int32_t offset node.GetScreenId()); return false; } - auto rsSurface = node.GetVirtualSurface(); - if (rsSurface == nullptr) { - RS_LOGD("RSUniRenderVirtualProcessor::Init Make rssurface from producer Screen(id %{public}" PRIu64 ")", - node.GetScreenId()); - rsSurface = renderEngine_->MakeRSSurface(producerSurface_, forceCPU_); - node.SetVirtualSurface(rsSurface); +#ifdef RS_ENABLE_GL + if (RSSystemProperties::GetGpuApiType() == GpuApiType::OPENGL) { + renderFrame_ = renderEngine_->RequestFrame(producerSurface_, renderFrameConfig_, forceCPU_, false); } +#endif + if (renderFrame_ == nullptr) { + auto rsSurface = node.GetVirtualSurface(); + if (rsSurface == nullptr) { + RS_LOGD("RSUniRenderVirtualProcessor::Init Make rssurface from producer Screen(id %{public}" PRIu64 ")", + node.GetScreenId()); + rsSurface = renderEngine_->MakeRSSurface(producerSurface_, forceCPU_); + node.SetVirtualSurface(rsSurface); + } #ifdef NEW_RENDER_CONTEXT - renderFrame_ = renderEngine_->RequestFrame( - std::static_pointer_cast(rsSurface), renderFrameConfig_, forceCPU_, false); + renderFrame_ = renderEngine_->RequestFrame( + std::static_pointer_cast(rsSurface), renderFrameConfig_, forceCPU_, false); #else - renderFrame_ = renderEngine_->RequestFrame( - std::static_pointer_cast(rsSurface), renderFrameConfig_, forceCPU_, false); + renderFrame_ = renderEngine_->RequestFrame( + std::static_pointer_cast(rsSurface), renderFrameConfig_, forceCPU_, false); #endif + } if (renderFrame_ == nullptr) { return false; }