2012-08-13 76 views
1

以下是错误消息我从VS2010 recieving: 0000005:访问冲突写入位置0x00000014OpenGL的土壤质地

在0x77358dc9在AzimuthalEqui.e​​xe未处理的异常。

的码产生该错误的行是:

texture[1] = SOIL_load_OGL_texture 
    (
     texture_filename, 
     SOIL_LOAD_AUTO, 
     SOIL_CREATE_NEW_ID, // create ID automatically 
     SOIL_flags 
    ); 

输入此功能之前:

texture_filename = “数据/ texture.jpg”

SOIL_LOAD_AUTO(= 0 )

SOIL_CREATE_NEW_ID(= 0)

SOIL_flags = 16(= SOIL_FLAG_INVERT_Y)

的问题是,当我包括文件我已经写来解析在文本一些信息文件中产生错误,否则纹理加载并显示。这个概率很可能是由一个函数引起的,因为当这个特定的函数被移除时,代码将加载并显示纹理。 这里是功能,当添加到我的项目,使发生错误:

[CODE] 
void get_user_points(double *lats, double *longs){ 

    char buffer[BUFFSIZE_PARSE]; 
    char *p_buff = buffer; 
    FILE *fp; 
    const char *filename = "Points.txt"; 
    double temp; 
    double *tmp_p = &temp; 


    fp = fopen(filename,"r+"); 
    if (fp == NULL) 
    { 
     sprintf(buffer, "Can't Find File: %s", filename); 
     MessageBoxA(NULL, buffer, "ERROR", MB_OK|MB_ICONEXCLAMATION); 
     exit(0); 
    } 

    fgets(buffer, BUFFSIZE_PARSE, fp); 

    while (*(p_buff+1) != '\0'){ 

     p_buff = get_next_letter(p_buff); 

     switch (tolower(*p_buff)){ 
      case 'n': 
       putchar(*p_buff); 
       p_buff++; 
       p_buff=get_next_double(lats, p_buff); 
       printf(" = %f\n", *lats); 
       break; 
      case 's': 
       ... 
       ... 
     } 
    } 
    putchar('\n'); 
    fclose(fp); 
} 

它是与打开文件进行读取...如果我注释掉这些行的纹理加载正确:

//fpr = fopen(filename2,"rb"); 
... 
... 
... 
//fclose(fpr); 

这是我缩减的代码(我不认为这是问题,但以防万一)。 [有可能是我的全部代码一些remanants]:

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 

    { 
     printf("Initialising...\n"); 
     glutInitWindowSize(700, 700); 
     glutInitWindowPosition(0, 0); 
     glutCreateWindow ("SOIL Texture Test"); 
    } 

    InitGL(); 
    glutDisplayFunc(DrawGLScene); 
    glutReshapeFunc(ReSizeGLScene); 

    glutMainLoop(); 

    return 0; 
} 

int InitGL(GLvoid) // Setup OpenGL 
{ 
    //Load textures 
    if (!LoadGLTextures())        // Jump To Texture Loading Routine (NEW) 
    { 
     MessageBox(NULL,TEXT("Cannot Load Image for Texture Map"),TEXT("Error!"),MB_OK | MB_ICONINFORMATION); 
     //return false;         // If Texture Didn't Load Return FALSE (NEW) 
    } 
    else 
     glEnable(GL_TEXTURE_2D);      // Enable texture mapping 


    glShadeModel(GL_SMOOTH);       // Enable Smooth Shading 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);    // Set the background colour (to black) 

    glClearDepth(1.0f);         // Depth Buffer Setup 
    glEnable(GL_DEPTH_TEST);       // Enables Depth Testing 
    glDepthFunc(GL_LEQUAL);        // Select testing type 


    //get_user_points(&user_lat[0], &user_long[0]); 

    return true;          // Initialization went OK 
} 


void DrawGLScene(GLvoid) // OpenGL drawing function 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the Screen and the Depth Buffer 

    glLoadIdentity(); 
    glTranslatef(0.0f,0.0f,z); 

    glBindTexture (GL_TEXTURE_2D, texture[filter]); 
    glBegin (GL_QUADS); 
     glNormal3f(0, 0, 1); 

     glTexCoord2f (0,0); 
     glVertex3f (-3,-3 ,0); 
     glTexCoord2f (1,0); 
     glVertex3f (3,-3 , 0); 
     glTexCoord2f (1, 1); 
     glVertex3f (3,3 , 0); 
     glTexCoord2f (0,1); 
     glVertex3f (-3,3 ,0); 
    glEnd(); 

    glFlush(); 
} 

void ReSizeGLScene(int w, int h) // Code to resize (and initialise) the OpenGL scene (run once when in fullscreen mode) 
{ 
    // Set up perspective view matrix 
    glViewport(0, 0, w, h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0f, (GLfloat)w/(GLfloat)h, 0.1f, 100.0f); 
    //glOrtho(-50.0, 50.0, -50.0, 50.0, -50.0, 50.0); 

    // Set up modelview matrix 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 

int LoadGLTextures(void) // Load Bitmaps And Convert To Textures 
{ 
    unsigned int SOIL_flags; 
    GLint mag_param; 
    GLint min_param; 

    printf("Loading Textures... "); 

    SOIL_flags = SOIL_FLAG_INVERT_Y; 
    mag_param = GL_NEAREST; 
    min_param = GL_NEAREST; 


    texture[1] = SOIL_load_OGL_texture 
    (
     texture_filename, 
     SOIL_LOAD_AUTO, 
     SOIL_CREATE_NEW_ID, // create ID automatically 
     SOIL_flags 
    ); 

    if(texture[1] == 0) 
     return false; 

    glBindTexture(GL_TEXTURE_2D, texture[1]); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,mag_param); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,min_param); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

    printf("Textures Loaded\n"); 
    return true; 
} 
+0

你的变量“纹理”是如何定义和初始化的,我在发布的代码中看不到。在我看来,因为它设置为NULL或者未能正确初始化它,所以它是NULL – jcoder 2012-08-13 16:18:27

+0

嘿John。这是如何定义的: GLuint纹理[3]; \t \t //存储纹理 它在函数int LoadGLTextures(void)(包含上面)中初始化 – user1595346 2012-08-14 02:27:42

+0

将.c文件包含在我的项目中而不是解决问题的.lib文件。我将尝试编译我自己的.lib文件,看看是否有帮助。 – user1595346 2012-08-14 03:30:44

回答

0

包括在我的项目,而不是固定的问题的.lib文件的.c文件。