我嘗試加載CubeMap時程序崩潰。[OpenGL | C#] vhost32.exe在glTexImage2D停止工作
public static int LoadCubemap(string name, int size)
{
string folder = @"Resources\Textures\" + name + @"\";
int returnInt = GL.GenTexture();
GL.BindTexture(TextureTarget.TextureCubeMap, returnInt);
//bytesPerPixel * width * (height \ 6) * faceIndex
updloadTexture(TextureTarget.TextureCubeMapPositiveX, Image.FromFile(folder + "xpos.png"), size);
updloadTexture(TextureTarget.TextureCubeMapNegativeX, Image.FromFile(folder + "xneg.png"), size);
updloadTexture(TextureTarget.TextureCubeMapPositiveY, Image.FromFile(folder + "ypos.png"), size);
updloadTexture(TextureTarget.TextureCubeMapNegativeY, Image.FromFile(folder + "yneg.png"), size);
updloadTexture(TextureTarget.TextureCubeMapPositiveZ, Image.FromFile(folder + "zpos.png"), size);
updloadTexture(TextureTarget.TextureCubeMapNegativeZ, Image.FromFile(folder + "zneg.png"), size);
int nearest = (int)TextureMagFilter.Nearest;
GL.TexParameterI(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, ref nearest);
GL.TexParameterI(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, ref nearest);
GL.BindTexture(TextureTarget.TextureCubeMap, 0);
return returnInt;
}
private static void updloadTexture(TextureTarget target, Image texture, int size)
{
GL.TexImage2D(TextureTarget.TextureCubeMapNegativeZ, 0, PixelInternalFormat.Rgb, size, size, 0, PixelFormat.Rgb, PixelType.UnsignedByte, imageToByteArray(texture));
}
public static byte[] imageToByteArray(Image image)
{
ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(image, typeof(byte[]));
}
當GL.TexImage2D被調用時它崩潰了第3或第4次。我無法找到它爲什麼這樣做。我使用.NET Image類和一個轉換器,我在此論壇的其他一些主題上找到了將PNG轉換爲byte[]
的轉換器。
所以,你似乎有一些代碼一些錯誤使用從某處獲取的某個庫。這是否看起來像一個有用的問題陳述?如果沒有,請[修復](http://stackoverflow.com/posts/41371737/edit)你的問題。 – IInspectable
我不明白你的評論,我使用的庫是.NET,這是在問題中陳述。 imageToByteArray在另一個線程中,但你可以看到整個代碼 - 我看不出你的意思。 –
*「我使用的轉換器,我發現在這個論壇上的其他線程」* - 不談,堆棧溢出不是一個論壇(這是一個問答網站),這是沒有任何有用的信息。您還將保持精確的異常(和調用堆棧)爲私有的,以及觸發它的代碼行。請看[問]。 – IInspectable