我一直在为我的笔记本电脑调整我的游戏渲染器,它有一台Radeon HD 3850.这款芯片具有相当大的处理能力,但内存带宽有限,所以我一直试图将更多着色器工作转移到更少的传递.
以前,我使用的是简单的多通道模型:
为了提高这种方法的性能,我编写了一个新的渲染路径,它计算了动态构建自定义GLSL着色器的灯光数量和类型.这些着色器接受所有光参数作为制服,并在一次通过中完成所有照明.我期待遇到某种限制,所以我先用一盏灯测试它.然后三个.然后二十一,没有错误或文物,并有很好的表现.这引出了我的实际问题:
是否可以检索最大制服数量?
这种方法在较旧的硬件上是否可行,或者制服是否更加有限?
如果我把它推得太远,我会在什么时候出错?着色器编译?程序链接?使用该程序?
我在Pocket PC 2003(Visual Studio 2005)的.NET CF 2.0项目中遇到了一些奇怪的事情.我正在处理一个System.IO.Stream对象,发现IDE不会自动完成该Dispose()方法.我手动输入并收到:
由于其保护级别,'System.IO.Stream.Dispose(bool)'无法访问
错误是指受保护的Dispose(bool)方法.Dispose()是私人的还是不存在的.
问题1:这怎么可能?Stream实施IDisposable:
public abstract class Stream : MarshalByRefObject, IDisposable
Run Code Online (Sandbox Code Playgroud)
......并且IDisposable需要一种Dispose()方法:
public interface IDisposable
{
void Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我知道编译器不会让我在我的代码中侥幸逃脱.
问题2:我是否会通过直接处理我的流来解决问题?
IDisposable idisp = someStream;
idisp.Dispose();
Run Code Online (Sandbox Code Playgroud)
编译器接受隐式转换.