【问题标题】:SOIL OpenGL Library crashes inside classesSOIL OpenGL 库在类内部崩溃
【发布时间】:2012-08-29 13:47:26
【问题描述】:

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

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

SOIL_load_OGL_texture(char *, param,param,param) 

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

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

【问题讨论】:

  • 我的程序崩溃了。 在 SOiL 调用中?我对此表示高度怀疑。它在哪里崩溃?来自操作系统的任何消息?你试过调试你的程序吗?
  • 对 SOIL 的调用是否导致任何 OpenGL 错误?
  • @BartekBanachewicz 它在 SOIL 通话中。该程序在没有它的情况下运行并与它一起崩溃。评论它使一切正常。当它有一个无效的路径时它也可以工作,现在我明白了,因为它没有得到任何 GL 的东西。

标签: opengl textures texture-mapping soil


【解决方案1】:

在您调用该函数时,听起来您几乎没有有效的 OpenGL 上下文。

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

另外,请确保 SOIL 调用与您的 opengl 上下文在同一线程上。

【讨论】:

  • 圣鳄梨酱就是这样。在我的 gl init 函数之后,我将调用移到了我的加载方法,它可以工作。非常感谢!
猜你喜欢
  • 2011-07-11
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 2021-04-26
相关资源
最近更新 更多