我使用以下代码渲染一维纹理。但在某些图形卡中,它只呈现纯白色。我注意到有时它会在安装卡的驱动程序后修复。
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);
有人可以帮忙吗?
答案 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);