【问题标题】:SOIL Unhandled exception at 0x585727FF土壤 0x585727FF 处未处理的异常
【发布时间】:2013-05-12 12:28:42
【问题描述】:

我有一个错误,我不知道如何解决。

我创建了一个简单的程序,使用 VS2012 来测试 SOIL(来自 SOIL 网站的示例代码):

#include "SOIL.h"
#include <iostream>
#include <glew.h>
#include <freeglut.h>

int main() {
std::cout << "Started" << std::endl;

/* load an image file directly as a new OpenGL texture */
GLuint tex_2d = SOIL_load_OGL_texture
    (
    "img.png",
    SOIL_LOAD_AUTO,
    SOIL_CREATE_NEW_ID,
    SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
    );

/* check for an error during the load process */
if( 0 == tex_2d )
{
    printf( "SOIL loading error: '%s'\n", SOIL_last_result() );
}
}

我得到错误:

Unhandled exception at 0x585727FF (msvcr110d.dll) in imageLib.exe: 0xC0000005: Access violation reading location 0x00000000.

感谢任何帮助。谢谢。

【问题讨论】:

  • 打开“抛出异常时中断”(在内存中的调试/异常菜单中),您可以获得堆栈跟踪,它应该提供更多信息。
  • 只需单步执行代码。断点应该将您带到问题发生的确切位置..
  • 感谢您的回复。好的,我想我打开了它。这是堆栈跟踪吗? docs.google.com/file/d/0B36QIOj3F-a3TzRVVEE3blNYYjg/…
  • @Attaque: 似乎土没能得到 gl ext 字符串,如果你在线程上创建上下文之前使用 OGL,通常会发生这种情况。
  • 谢谢 Necrolis。我将这段代码包含在另一个项目中,它按预期工作。

标签: c++ visual-studio soil


【解决方案1】:

我所做的只是确保在按照 Necrolis 的建议尝试使用 GLuint 之前已加载 GL。

如果你正确加载了库,这个小例子应该可以正常运行(不显示任何内容,但显示 GL 和 SOIL 的顺序:

#include "SOIL.h"
#include <iostream>
#include <glew.h>
#include <freeglut.h>

#define WINDOW_WIDTH  800
#define WINDOW_HEIGHT 600

void LoadTexture() {
/* load an image file directly as a new OpenGL texture */
GLuint tex_2d = SOIL_load_OGL_texture
    (
    "Data/img.png",
    SOIL_LOAD_AUTO,
    SOIL_CREATE_NEW_ID,
    SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
    );

/* check for an error during the load process */
if( 0 == tex_2d )
{
    printf( "SOIL loading error: '%s'\n", SOIL_last_result() );
}

// Typical Texture Generation Using Data From The Bitmap
glBindTexture(GL_TEXTURE_2D, tex_2d);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}

int main(int argc, char** argv) {
std::cout << "Started" << std::endl;

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
glutInitWindowPosition(100, 100);
glutCreateWindow("Tutorial 15");

glutSwapBuffers();

LoadTexture();

glEnable(GL_TEXTURE_2D);                            // Enable Texture Mapping ( NEW )
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

glutMainLoop();

return 0;
}

【讨论】:

    【解决方案2】:

    我多次遇到这些问题。我认为这是由于缺少错误处理 SOIL 库造成的。

    加载图像数据时,路径可能不正确。在我的情况下,我以这种形式编写路径;

    C:/Users/User/Pictures/texture.JPG
    

    但是当我这样改变这条路径时,构建项目时没有错误;)

    file:///C:/Users/User/Pictures/texture.JPG
    

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多