来自C++,返回一个局部变量是一个坏主意(当在堆栈上分配内存时).
现在使用C#我得到的印象不是一个坏主意(返回值时,而不是引用).
这是为什么?我理解C#使用GC,但我不确定在这种情况下会产生什么不同.
最终编辑:
已解决...只需深入了解 alpha 混合如何工作。我应该有: oBlendStateDesc.RenderTarget[a].DestBlendAlpha = D3D11_BLEND_ZERO; ...设置为 D3D11_BLEND_ONE 以保留 Alpha。
当渲染到后台缓冲区时,问题不会被注意到,因为颜色混合正常,这就是最终输出。当渲染到纹理时,同样的情况也适用,然后将纹理渲染到后缓冲区,不正确的 alpha 会导致错误地将纹理混合到后缓冲区。
然后我遇到了另一个问题,阿尔法似乎在减少。这是因为颜色混合了两次,例如......
Source.RBGA = 1.0f, 0.0f, 0.0f, 0.5f
Dest.RGBA = 0.0f, 0.0f, 0.0f, 0.0f
Run Code Online (Sandbox Code Playgroud)
渲染成纹理...
Result.RGB = Source.RBG * Source.A + Dest.RGB * (1 - Source.A) = 0.5f, 0.0f, 0.0f
Result.A = Source.A * 1 + Dest.A * 1 = 0.5f
Run Code Online (Sandbox Code Playgroud)
现在...
Source.RBGA = 0.5f, 0.0f, 0.0f, 0.5f
Dest.RGBA = 0.0f, 0.0f, 0.0f, 0.0f
Run Code Online (Sandbox Code Playgroud)
渲染到后台缓冲区...
Result.RGB = Source.RBG * Source.A + Dest.RGB * (1 - Source.A) = …Run Code Online (Sandbox Code Playgroud) 如果我不关心同时的变化是否会Thread1发生变化,除了逻辑错误还有什么可担心的吗?如果:它会导致崩溃等:Flag1Thread2Flag1
Thread1并在同一时间Thread2阅读Flag1?Thread1正在读书Flag1的同时写信?Thread2Flag1在这些例子中,Flag1是一个bool.
编辑:在C++如果我有,我需要测试8个标志.哪个在处理速度方面更有效:
在单个if语句中检查8个bool变量或者使用表示标志的char,每个标志使用1位并在单个if语句中使用单个按位运算?
如果我有1个标志要测试,那会有所作为吗?