2013-06-22 6 views
0

나는이 오류를 받고 있어요 나는 몇 가지의 OpenGL 코드를 컴파일 할 트링있어이 컴파일 오류를 해결하는 방법

1>c:\users\student\documents\visual studio 2012\projects\openglproject1\openglproject1\initshader.h(10): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 이 프로그램은 내가 수정해야하는

#include "Angel.h" 

namespace Angel { 

// Create a NULL-terminated string by reading the provided file 
static char* 
readShaderSource(const char* shaderFile) 
{ 
    FILE* fp = fopen(shaderFile, "r"); 

    if (fp == NULL) { return NULL; } 

    fseek(fp, 0L, SEEK_END); 
    long size = ftell(fp); 

    fseek(fp, 0L, SEEK_SET); 
    char* buf = new char[size + 1]; 
    fread(buf, 1, size, fp); 

    buf[size] = '\0'; 
    fclose(fp); 

    return buf; 
} 


// Create a GLSL program object from vertex and fragment shader files 
GLuint 
InitShader(const char* vShaderFile, const char* fShaderFile) 
{ 
    struct Shader { 
    const char* filename; 
    GLenum  type; 
    GLchar*  source; 
    } shaders[2] = { 
    { vShaderFile, GL_VERTEX_SHADER, NULL }, 
    { fShaderFile, GL_FRAGMENT_SHADER, NULL } 
    }; 

    GLuint program = glCreateProgram(); 


    for (int i = 0; i < 2; ++i) { 
    Shader& s = shaders[i]; 
    s.source = readShaderSource(s.filename); 
    if (shaders[i].source == NULL) { 
     std::cerr << "Failed to read " << s.filename << std::endl; 
     exit(EXIT_FAILURE); 
    } 

    GLuint shader = glCreateShader(s.type); 

    glShaderSource(shader, 1, (const GLchar**) &s.source, NULL); 
    glCompileShader(shader); 

    GLint compiled; 
    glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); 
    if (!compiled) { 
     std::cerr << s.filename << " failed to compile:" << std::endl; 
     GLint logSize; 
     glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logSize); 
     char* logMsg = new char[logSize]; 
     glGetShaderInfoLog(shader, logSize, NULL, logMsg); 
     std::cerr << logMsg << std::endl; 
     delete [] logMsg; 

     exit(EXIT_FAILURE); 
    } 

    delete [] s.source; 

    glAttachShader(program, shader); 
    } 

    /* link and error check */ 
    glLinkProgram(program); 

    GLint linked; 
    glGetProgramiv(program, GL_LINK_STATUS, &linked); 
    if (!linked) { 
    std::cerr << "Shader program failed to link" << std::endl; 
    GLint logSize; 
    glGetProgramiv(program, GL_INFO_LOG_LENGTH, &logSize); 
    char* logMsg = new char[logSize]; 
    glGetProgramInfoLog(program, logSize, NULL, logMsg); 
    std::cerr << logMsg << std::endl; 
    delete [] logMsg; 

    exit(EXIT_FAILURE); 
    } 

    /* use program object */ 
    glUseProgram(program); 

    return program; 
} 

} // Close namespace Angel block 

당신이 말해 줄 수있다 프로그램?

+0

참조 : http://stackoverflow.com/q/2575116/10077 –

답변

3

헤더 파일을 포함하기 전에 헤더 파일에 _CRT_SECURE_NO_WARNINGS을 정의하거나 "프로젝트 -> 등록 정보 -> 구성 등록 정보 -> C/등록 정보"의 프로젝트 설정에 헤더 파일을 추가하여 전체 프로젝트에 적용 할 수 있습니다. C++ -> 전처리 기 -> 전 처리기 정의 "를 참조하십시오.

#define _CRT_SECURE_NO_WARNINGS 
#include "initshader.h" 

//... your code here 

당신이 미리 컴파일 된 헤더와는 전술 한 바와 같이 프로젝트 설정에서 stdafx.h 헤더에 추가하거나 추가해야합니다 stdafx.h에 포함되어있는 오류를 생성 헤더를 사용하는 경우.

관련 문제