Skip to content
This repository was archived by the owner on Apr 29, 2021. It is now read-only.

Commit 5a0a169

Browse files
committed
fix black screen issue (refine)
1 parent 7f7c490 commit 5a0a169

File tree

1 file changed

+61
-54
lines changed

1 file changed

+61
-54
lines changed

Runtime/ui/renderer/cmdbufferCanvas/rendering/canvas_shader_initializer.cs

Lines changed: 61 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,38 @@ static partial class CanvasShader {
1717
const string testShaderName = "UIWidgets/canvas_convexFill_cb";
1818

1919

20-
const bool enableComputeBuffer = false;
20+
const bool enableComputeBuffer = true;
2121

2222
public static bool supportComputeBuffer;
2323

24+
static void DoPrepareDefaultShader() {
25+
supportComputeBuffer = false;
26+
27+
var convexFillShader = GetShader("UIWidgets/canvas_convexFill");
28+
var fill0Shader = GetShader("UIWidgets/canvas_fill0");
29+
var fill1Shader = GetShader("UIWidgets/canvas_fill1");
30+
var stroke0Shader = GetShader("UIWidgets/canvas_stroke0");
31+
var stroke1Shader = GetShader("UIWidgets/canvas_stroke1");
32+
var texShader = GetShader("UIWidgets/canvas_tex");
33+
var stencilShader = GetShader("UIWidgets/canvas_stencil");
34+
var filterShader = GetShader("UIWidgets/canvas_filter");
35+
var shadowBoxShader = GetShader("UIWidgets/ShadowBox");
36+
var shadowRBoxShader = GetShader("UIWidgets/ShadowRBox");
37+
var strokeAlphaShader = GetShader("UIWidgets/canvas_strokeAlpha");
38+
39+
_convexFillMat = new MaterialByBlendModeStencilComp(convexFillShader);
40+
_fill0Mat = new MaterialByStencilComp(fill0Shader);
41+
_fill1Mat = new MaterialByBlendMode(fill1Shader);
42+
_stroke0Mat = new MaterialByBlendModeStencilComp(stroke0Shader);
43+
_stroke1Mat = new Material(stroke1Shader) {hideFlags = HideFlags.HideAndDontSave};
44+
_strokeAlphaMat = new MaterialByBlendModeStencilComp(strokeAlphaShader);
45+
_texMat = new MaterialByBlendModeStencilComp(texShader);
46+
_stencilMat = new Material(stencilShader) {hideFlags = HideFlags.HideAndDontSave};
47+
_filterMat = new Material(filterShader) {hideFlags = HideFlags.HideAndDontSave};
48+
_shadowBox = new Material(shadowBoxShader) {hideFlags = HideFlags.HideAndDontSave};
49+
_shadowRBox = new Material(shadowRBoxShader) {hideFlags = HideFlags.HideAndDontSave};
50+
}
51+
2452
static bool OnNotPrepared() {
2553
initStage = InitStage.Prepared;
2654

@@ -52,77 +80,56 @@ static bool OnNotPrepared() {
5280
}
5381

5482
ObjectUtils.SafeDestroy(material);
55-
56-
return false;
83+
84+
DoPrepareDefaultShader();
85+
return true;
5786
}
5887

5988
static bool OnPrepared(bool forceReady = false) {
6089
D.assert(initStage == InitStage.Prepared);
6190
if (!forceReady && initialFrameCount >= Time.frameCount) {
62-
return false;
91+
initStage = InitStage.Ready;
92+
return true;
6393
}
6494

6595
initStage = InitStage.Ready;
66-
DoPrepare();
96+
DoPrepareComputeBufferShader();
6797
return true;
6898
}
6999

70-
static void DoPrepare() {
100+
static void DoPrepareComputeBufferShader() {
71101
D.assert(testShader != null);
72102
var isShaderSupported = testShader.isSupported;
73103
testShader = null;
74104
supportComputeBuffer = enableComputeBuffer && SystemInfo.supportsComputeShaders && isShaderSupported;
75105

76106
if (!supportComputeBuffer) {
77-
var convexFillShader = GetShader("UIWidgets/canvas_convexFill");
78-
var fill0Shader = GetShader("UIWidgets/canvas_fill0");
79-
var fill1Shader = GetShader("UIWidgets/canvas_fill1");
80-
var stroke0Shader = GetShader("UIWidgets/canvas_stroke0");
81-
var stroke1Shader = GetShader("UIWidgets/canvas_stroke1");
82-
var texShader = GetShader("UIWidgets/canvas_tex");
83-
var stencilShader = GetShader("UIWidgets/canvas_stencil");
84-
var filterShader = GetShader("UIWidgets/canvas_filter");
85-
var shadowBoxShader = GetShader("UIWidgets/ShadowBox");
86-
var shadowRBoxShader = GetShader("UIWidgets/ShadowRBox");
87-
var strokeAlphaShader = GetShader("UIWidgets/canvas_strokeAlpha");
88-
89-
_convexFillMat = new MaterialByBlendModeStencilComp(convexFillShader);
90-
_fill0Mat = new MaterialByStencilComp(fill0Shader);
91-
_fill1Mat = new MaterialByBlendMode(fill1Shader);
92-
_stroke0Mat = new MaterialByBlendModeStencilComp(stroke0Shader);
93-
_stroke1Mat = new Material(stroke1Shader) {hideFlags = HideFlags.HideAndDontSave};
94-
_strokeAlphaMat = new MaterialByBlendModeStencilComp(strokeAlphaShader);
95-
_texMat = new MaterialByBlendModeStencilComp(texShader);
96-
_stencilMat = new Material(stencilShader) {hideFlags = HideFlags.HideAndDontSave};
97-
_filterMat = new Material(filterShader) {hideFlags = HideFlags.HideAndDontSave};
98-
_shadowBox = new Material(shadowBoxShader) {hideFlags = HideFlags.HideAndDontSave};
99-
_shadowRBox = new Material(shadowRBoxShader) {hideFlags = HideFlags.HideAndDontSave};
100-
}
101-
else {
102-
var convexFillShaderCompute = GetShader("UIWidgets/canvas_convexFill_cb");
103-
var fill0ShaderCompute = GetShader("UIWidgets/canvas_fill0_cb");
104-
var fill1ShaderCompute = GetShader("UIWidgets/canvas_fill1_cb");
105-
var stroke0ShaderCompute = GetShader("UIWidgets/canvas_stroke0_cb");
106-
var stroke1ShaderCompute = GetShader("UIWidgets/canvas_stroke1_cb");
107-
var texShaderCompute = GetShader("UIWidgets/canvas_tex_cb");
108-
var stencilShaderCompute = GetShader("UIWidgets/canvas_stencil_cb");
109-
var filterShaderCompute = GetShader("UIWidgets/canvas_filter_cb");
110-
var shadowBoxShaderCompute = GetShader("UIWidgets/ShadowBox_cb");
111-
var shadowRBoxShaderCompute = GetShader("UIWidgets/ShadowRBox_cb");
112-
var strokeAlphaShaderCompute = GetShader("UIWidgets/canvas_strokeAlpha_cb");
113-
114-
_convexFillMat = new MaterialByBlendModeStencilComp(convexFillShaderCompute);
115-
_fill0Mat = new MaterialByStencilComp(fill0ShaderCompute);
116-
_fill1Mat = new MaterialByBlendMode(fill1ShaderCompute);
117-
_stroke0Mat = new MaterialByBlendModeStencilComp(stroke0ShaderCompute);
118-
_stroke1Mat = new Material(stroke1ShaderCompute) {hideFlags = HideFlags.HideAndDontSave};
119-
_strokeAlphaMat = new MaterialByBlendModeStencilComp(strokeAlphaShaderCompute);
120-
_texMat = new MaterialByBlendModeStencilComp(texShaderCompute);
121-
_stencilMat = new Material(stencilShaderCompute) {hideFlags = HideFlags.HideAndDontSave};
122-
_filterMat = new Material(filterShaderCompute) {hideFlags = HideFlags.HideAndDontSave};
123-
_shadowBox = new Material(shadowBoxShaderCompute) {hideFlags = HideFlags.HideAndDontSave};
124-
_shadowRBox = new Material(shadowRBoxShaderCompute) {hideFlags = HideFlags.HideAndDontSave};
107+
return;
125108
}
109+
110+
var convexFillShaderCompute = GetShader("UIWidgets/canvas_convexFill_cb");
111+
var fill0ShaderCompute = GetShader("UIWidgets/canvas_fill0_cb");
112+
var fill1ShaderCompute = GetShader("UIWidgets/canvas_fill1_cb");
113+
var stroke0ShaderCompute = GetShader("UIWidgets/canvas_stroke0_cb");
114+
var stroke1ShaderCompute = GetShader("UIWidgets/canvas_stroke1_cb");
115+
var texShaderCompute = GetShader("UIWidgets/canvas_tex_cb");
116+
var stencilShaderCompute = GetShader("UIWidgets/canvas_stencil_cb");
117+
var filterShaderCompute = GetShader("UIWidgets/canvas_filter_cb");
118+
var shadowBoxShaderCompute = GetShader("UIWidgets/ShadowBox_cb");
119+
var shadowRBoxShaderCompute = GetShader("UIWidgets/ShadowRBox_cb");
120+
var strokeAlphaShaderCompute = GetShader("UIWidgets/canvas_strokeAlpha_cb");
121+
122+
_convexFillMat = new MaterialByBlendModeStencilComp(convexFillShaderCompute);
123+
_fill0Mat = new MaterialByStencilComp(fill0ShaderCompute);
124+
_fill1Mat = new MaterialByBlendMode(fill1ShaderCompute);
125+
_stroke0Mat = new MaterialByBlendModeStencilComp(stroke0ShaderCompute);
126+
_stroke1Mat = new Material(stroke1ShaderCompute) {hideFlags = HideFlags.HideAndDontSave};
127+
_strokeAlphaMat = new MaterialByBlendModeStencilComp(strokeAlphaShaderCompute);
128+
_texMat = new MaterialByBlendModeStencilComp(texShaderCompute);
129+
_stencilMat = new Material(stencilShaderCompute) {hideFlags = HideFlags.HideAndDontSave};
130+
_filterMat = new Material(filterShaderCompute) {hideFlags = HideFlags.HideAndDontSave};
131+
_shadowBox = new Material(shadowBoxShaderCompute) {hideFlags = HideFlags.HideAndDontSave};
132+
_shadowRBox = new Material(shadowRBoxShaderCompute) {hideFlags = HideFlags.HideAndDontSave};
126133
}
127134

128135
public static bool isReady() {

0 commit comments

Comments
 (0)