2016-12-29 63 views
0

我嘗試加載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[]的轉換器。

+0

所以,你似乎有一些代碼一些錯誤使用從某處獲取的某個庫。這是否看起來像一個有用的問題陳述?如果沒有,請[修復](http://stackoverflow.com/posts/41371737/edit)你的問題。 – IInspectable

+0

我不明白你的評論,我使用的庫是.NET,這是在問題中陳述。 imageToByteArray在另一個線程中,但你可以看到整個代碼 - 我看不出你的意思。 –

+0

*「我使用的轉換器,我發現在這個論壇上的其他線程」* - 不談,堆棧溢出不是一個論壇(這是一個問答網站),這是沒有任何有用的信息。您還將保持精確的異常(和調用堆棧)爲私有的,以及觸發它的代碼行。請看[問]。 – IInspectable

回答

1

你沒有提供關於崩潰的任何細節,所以我只能推測它爲什麼失敗。

也許轉換器內存不足?

我通常做的圖像轉換,而不是爲byte []是使用位圖和lockbits ...

例如,

using (var bitmap = new Bitmap("path\\to\\file.png")) 
{ 
    var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); 
    GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0); 
    bitmap.UnlockBits(data); 
} 
+0

問題是我不能提供關於崩潰的任何細節,當它說停止工作的小窗口剛剛打開時點...我會明確地嘗試你的想法第二天早上,我現在要睡覺這是凌晨2點我住的地方,我沒有想到答案如此之快^^ –

+0

它的工作原理!感謝您的幫助 –