SOIL OpenGL库在类内部崩溃

时间:2012-08-29 13:47:27

标签: opengl textures texture-mapping soil

我正在使用OpenGL开发一个简单的3D模型加载器,我想添加纹理支持。但是,我不想不必要地重写图像库,我下载了在NeHe纹理映射教程中学到的SOIL(简单OpenGL图像库)。它有一些非常有用的功能,负责多次加载图像并将它们传递给OpenGL。

问题是:在NeHe教程代码中,SOIL函数

SOIL_load_OGL_texture(char *, param,param,param) 
完全按照承诺完成,并用正确的图片映射多边形。但是,我创建了一个加载OBJ和MTL文件(3D模型文件)的类。当我尝试使用SOIL函数在此类中加载纹理时,我的程序崩溃了。

  • 我正在使用GNU C ++和Code :: Blocks(我也在Dev-C ++中尝试过这段代码)
  • 我没有从编译器收到带-g -Wall的错误或警告。
  • 我已经在项目中正确链接并包含了所有内容(如果我复制/粘贴NeHe代码,它运行正常)。
  • SOIL命令在任何类中都不起作用(我尝试创建另一个只执行SOIL函数的类,我遇到了同样的问题)。
  • 传递给函数的文件路径都是正确的。我尝试了相对和绝对,使用所有格式的正斜杠和反斜杠。我将NeHe代码中使用的绝对路径复制并粘贴到我的代码中,但它不起作用。
  • 我的其余代码工作正常 - 我可以使用ambient / diffuse / etc来渲染我的形状。颜色和其他设置正确应用。

1 个答案:

答案 0 :(得分:3)

听起来就像你在调用该函数时没有有效的OpenGL上下文一样。

你确定在初始化你的opengl上下文之后只调用了吗? (例如,没有在程序初始化时构造的对象的静态构造)。检查这个问题的一种快速方法是在opengl初始化时设置一个断点,看看你是否点击了BP,或者你的程序是否首先崩溃。

另外,请确保SOIL调用与opengl上下文位于同一个线程上。