Graphics 如何使用随机RGB值填充Direct3D纹理。用于HLSL像素着色器

Graphics 如何使用随机RGB值填充Direct3D纹理。用于HLSL像素着色器,graphics,shader,textures,direct3d,hlsl,Graphics,Shader,Textures,Direct3d,Hlsl,我正在尝试为每个像素在我的像素着色器中添加3个新的随机浮动。根据我读到的内容,我认为我需要生成一个包含随机RGB值的大纹理,然后在每次绘制调用期间随机生成两个纹理坐标偏移值以产生伪随机效果。只有通过LockRect和UnlockRect API才能做到这一点吗?我希望不是 我发现实现这一点的唯一方法是锁定和解锁矩形方法。但这比我最初想的要容易得多。下面是我如何填充纹理的。 '为抖动着色器创建随机纹理 rando=新随机数() randomText=新纹理(设备,1000,1000,1,用法。动态

我正在尝试为每个像素在我的像素着色器中添加3个新的随机浮动。根据我读到的内容,我认为我需要生成一个包含随机RGB值的大纹理,然后在每次绘制调用期间随机生成两个纹理坐标偏移值以产生伪随机效果。只有通过LockRect和UnlockRect API才能做到这一点吗?我希望不是

我发现实现这一点的唯一方法是锁定和解锁矩形方法。但这比我最初想的要容易得多。下面是我如何填充纹理的。 '为抖动着色器创建随机纹理 rando=新随机数() randomText=新纹理(设备,1000,1000,1,用法。动态, 格式A16B16G16R16,Pool.Default) '89599 '89510 Dim数据(1000*1000*8+1000*63+936)作为字节 rando.NextBytes(数据)

正如您从代码中看到的,我必须添加大量额外的字节,以使用随机值完全填充纹理。我使用了1000 x 1000 64位的纹理,所以你可能会认为我需要1000*1000*8字节的数据,但我需要额外的63936字节来填充纹理,我不知道为什么。但它似乎适合我的需要

    Dim dataBox As DataRectangle =
randomText.GetSurfaceLevel(0).LockRectangle(LockFlags.None)
    dataBox.Data.Seek(0, IO.SeekOrigin.Begin)
    dataBox.Data.Write(data, 0, data.Length)
    dataBox.Data.Close()