我真的被这个愚蠢的事情所困扰。
abstract class Texture
{
static Dictionary<string, int> textures = new Dictionary<string, int>();
public static Dictionary<string, int> Textures { get { return textures; } set { textures = value; } }
public static int GetTexture(string name)
{
return Texture.Textures[name];
}
public static void LoadTexture(string name, string filename)
{
int id = GL.GenTexture();
GL.BindTexture(TextureTarget.Texture2D, id);
Bitmap bmp = new Bitmap(filename);
BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, bmp_data.Width, bmp_data.Height, 0,
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bmp_data.Scan0);
bmp.UnlockBits(bmp_data);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
Textures.Add(name, id);
}
static Texture()
{
LoadTexture("some_name", "some_name.jpg");
}
}
当我尝试从Dictionary获取值时,它会导致错误。访问构建中的某个位置:
textureObjects.Add(name, Texture.GetTexture(name));
错误说我接受了禁止的memmory(受保护)。但我实际上并没有这样做......
答案 0 :(得分:1)
该异常通常意味着在类的静态构造函数(或其中一个静态字段初始值设定项)中抛出错误。我的猜测是在调用GL.GenTexture()
时抛出异常。检查异常的InnerException
属性以查看更多详细信息。
修改强>
并不是说您添加了更多代码我发现有几个地方可能会抛出异常。答案仍然是确定LoadTexture
中抛出异常的位置并修复它。