0

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

我使用 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.

任何帮助表示赞赏。谢谢你。

4

2 回答 2

0

我所做的只是确保在尝试使用 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;
}
于 2013-05-12T13:43:07.323 回答
0

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

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

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

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

file:///C:/Users/User/Pictures/texture.JPG
于 2014-07-14T09:21:59.357 回答