glTexImage2D时,[OpenGL | C#] vhost32.exe停止工作

Kai-Uwe Zimdars

当我尝试加载CubeMap时,我的程序崩溃了。

    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时,它第三次或第四次崩溃。我找不到原因。我使用.NET Image类和在此论坛上其他某个线程上找到的转换器将PNG转换为byte[]

jl47_dev

您没有提供有关崩溃的任何详细信息,因此我只能推测失败的原因。

也许转换器内存不足?

我通常不是使用Image转换为byte []而是使用位图和锁定位...

例如,

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C#中完成“ WithRepeatCount”时如何停止工作

带有C ++的OpenGL:将类数组传递给glTexImage2d时vtable遇到麻烦

C ++中的文件处理使.exe停止工作错误

c__app.exe停止工作了吗?

program.exe(c)(malloc)已停止工作

为什么C程序(.exe)停止工作?

安装 emscripten 时 AppInstallerPythonRedirector.exe 已停止工作

vshost-clr2.exe停止工作

在glTexImage2D()中指定GL_RGBA32F时奇怪的输出

在Visual Studio中出现“ vshost32.exe停止工作”或“致命执行引擎错误”

从Powershell调用.exe时如何防止“程序停止工作”对话框

打开 Word 加载项对话框时,ScriptedSandbox64.exe 已停止工作

Visual Studio Code Intellisense停止工作于C#文件

C#程序已停止工作,Awesomium

任何想法都可能导致Visual Studio 2013中的“ vshost32.exe停止工作”吗?

C#Directory.CreateDirectory停止工作

C ++:程序已停止工作

拔下DisplayPort时HDMI停止工作

添加FORM时JS停止工作

Symfony2登录停止工作

Visual Studio 2015 Cordova工具-启动波纹时出现错误“ scriptedsandbox64.exe已停止工作”

尝试执行命令时出现“xmlsec.exe 停止工作”错误 - 我的 xmlsec 设置有问题吗?

CodeBlocks exe停止工作

C ++程序连续两次尝试运行写循环时显示“ ..停止工作”错误

C#Windows Form App(SQL Server Compact 3.5 SP2的私有部署)错误-停止工作

向后滚动时 Viewpager2 滚动停止工作

升级到fedora 32后,蓝牙停止工作

win32api.keybd_event停止工作

在Mac上更新为VisualStudio 8.1后,注释(C#)中的任务高亮停止工作