在一些图形卡的白色OpenGL纹理

时间:2013-07-02 09:32:00

标签: c# opengl opentk

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

          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);

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

某些较旧的图形卡/驱动程序无法正常使用尺寸不是2的纹理。

在你的情况下,你正在创建一个宽度为5的1d纹理,这不是2的幂。所以解决方法是在调用glTexImage1D之前将纹理填充到最接近的2(8)幂。

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);