0

我正在使用以下代码来渲染一维纹理。但在某些图形卡中,它仅呈现纯白色。我注意到有时它在安装卡的驱动程序后被修复。

          byte[,] Texture8 = new byte[,]
        {
            { 000, 000, 255 },   
            { 000, 255, 255 },   
            { 000, 255, 000 },   
            { 255, 255, 000 },   
            { 255, 000, 000 }   
        };

        GL.Enable(EnableCap.Texture1D);

        // Set pixel storage mode 
        GL.PixelStore(PixelStoreParameter.UnpackAlignment, 1);

        // Generate a texture name
        texture = GL.GenTexture();

        // Create a texture object
        GL.BindTexture(TextureTarget.ProxyTexture1D, texture);
        GL.TexParameter(TextureTarget.Texture1D, 
                        TextureParameterName.TextureMagFilter, 
                        (int)All.Nearest);
        GL.TexParameter(TextureTarget.Texture1D, 
                        TextureParameterName.TextureMinFilter, 
                        (int)All.Nearest);
        GL.TexImage1D(TextureTarget.Texture1D, 0, 
                      PixelInternalFormat.Three, /*with*/5, 0, 
                      PixelFormat.Rgb, 
                      PixelType.UnsignedByte, Texture8);

有人可以帮忙吗?

4

1 回答 1

3

一些较旧的显卡/驱动程序无法正常处理尺寸不是 2 次方的纹理。

在您的情况下,您正在创建宽度为 5 的 1d 纹理,这不是 2 的幂。因此,解决方案是在调用glTexImage1D.

byte[,] Texture8 = new byte[,]
{
    { 000, 000, 255 },
    { 000, 255, 255 },
    { 000, 255, 000 },
    { 255, 255, 000 },
    { 255, 000, 000 },
    { 000, 000, 000 },
    { 000, 000, 000 },
    { 000, 000, 000 }
};

// ...

GL.TexImage1D(TextureTarget.Texture1D, 0, 
              PixelInternalFormat.Three, /*with*/8, 0, 
              PixelFormat.Rgb, 
              PixelType.UnsignedByte, Texture8);
于 2013-07-02T09:56:02.133 回答