小编mva*_*bem的帖子

着色器限制

我一直在为我的笔记本电脑调整我的游戏渲染器,它有一台Radeon HD 3850.这款芯片具有相当大的处理能力,但内存带宽有限,所以我一直试图将更多着色器工作转移到更少的传递.

以前,我使用的是简单的多通道模型:

  • 绑定并清除FP16混合缓冲区(带深度缓冲区)
    • 深度通过
    • 对于每盏灯,进行附加光通过
  • 绑定后备缓冲区,使用混合缓冲区作为纹理
    • 色调映射传递

为了提高这种方法的性能,我编写了一个新的渲染路径,它计算了动态构建自定义GLSL着色器的灯光数量和类型.这些着色器接受所有光参数作为制服,并在一次通过中完成所有照明.我期待遇到某种限制,所以我先用一盏灯测试它.然后三个.然后二十一,没有错误或文物,并有很好的表现.这引出了我的实际问题:

是否可以检索最大制服数量?

这种方法在较旧的硬件上是否可行,或者制服是否更加有限?

如果我把它推得太远,我会在什么时候出错?着色器编译?程序链接?使用该程序?

c++ opengl shader glsl

13
推荐指数
1
解决办法
4940
查看次数

.NET CF 2.0:Stream实现IDisposable ......有点?

我在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)

编译器接受隐式转换.

编辑:这已在问题939124中得到解答.在Stream类实现IDisposable明确.这是我完全忘记的语言功能.

.net c# compact-framework .net-2.0

2
推荐指数
1
解决办法
810
查看次数

标签 统计

.net ×1

.net-2.0 ×1

c# ×1

c++ ×1

compact-framework ×1

glsl ×1

opengl ×1

shader ×1