您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

93 行
2.6 KiB

using System;
using Unity.UIWidgets.flow;
using Unity.UIWidgets.foundation;
using Unity.UIWidgets.ui;
namespace Unity.UIWidgets.editor {
public class Rasterizer {
Surface _surface;
CompositorContext _compositorContext;
LayerTree _lastLayerTree;
Action _nextFrameCallback;
public Rasterizer() {
this._compositorContext = new CompositorContext();
}
public void setup(Surface surface) {
this._surface = surface;
this._compositorContext.onGrContextCreated(this._surface);
}
public void teardown() {
this._compositorContext.onGrContextDestroyed();
this._surface = null;
this._lastLayerTree = null;
}
public LayerTree getLastLayerTree() {
return this._lastLayerTree;
}
public void drawLastLayerTree() {
if (this._lastLayerTree == null || this._surface == null) {
return;
}
this._drawToSurface(this._lastLayerTree);
}
public void draw(LayerTree layerTree) {
this._doDraw(layerTree);
}
public void setNextFrameCallback(Action callback) {
this._nextFrameCallback = callback;
}
public CompositorContext getCompositorContext() {
return this._compositorContext;
}
void _doDraw(LayerTree layerTree) {
if (layerTree == null || this._surface == null) {
return;
}
if (this._drawToSurface(layerTree)) {
this._lastLayerTree = layerTree;
}
}
bool _drawToSurface(LayerTree layerTree) {
D.assert(this._surface != null);
var frame = this._surface.acquireFrame(
layerTree.frameSize, layerTree.devicePixelRatio, layerTree.antiAliasing);
if (frame == null) {
return false;
}
var canvas = frame.getCanvas();
using (var compositorFrame = this._compositorContext.acquireFrame(canvas, true)) {
if (compositorFrame != null && compositorFrame.raster(layerTree, false)) {
frame.submit();
this._fireNextFrameCallbackIfPresent();
return true;
}
return false;
}
}
void _fireNextFrameCallbackIfPresent() {
if (this._nextFrameCallback == null) {
return;
}
var callback = this._nextFrameCallback;
this._nextFrameCallback = null;
callback();
}
}
}