2017-09-06 20 views
1

나는 과거에 컴파일했지만 현재는 같은 컴퓨터에있을 수없는 특정 OpenGL 응용 프로그램을 가지고 있습니다. 문제는 조각 쉐이더가 올바르게 컴파일되지 않는 것 같습니다.오류 GLSL 부정확 버전 450

내가 사용 :

  • Glew 2.1.0
  • Glfw 3.2.1

또한 필요한 모든 문맥이 프로그램의 시작 부분에 생성되고있다. 내 메인

std::string vSource, fSource; 
try 
{ 
    vSource = getSource(vertexShader, "vert"); 
    fSource = getSource(fragmentShader, "frag"); 
} 
catch (std::runtime_error& e) 
{ 
    std::cout << e.what() << std::endl; 
} 

GLuint vsID, fsID; 
try 
{ 
    vsID = compileShader(vSource.c_str(), GL_VERTEX_SHADER); //Source char* was checked and looking good 
    fsID = compileShader(fSource.c_str(), GL_FRAGMENT_SHADER); 
} 
catch (std::runtime_error& e) 
{ 
    std::cout << e.what() << std::endl; //incorrect glsl version 450 thrown here 
} 
GLuint programID; 
try 
{ 
    programID = createProgram(vsID, fsID); //Debugging fails here 
} 
catch (std::runtime_error& e) 
{ 
    std::cout << e.what() << std::endl; 
} 

glDeleteShader(vsID); 
glDeleteShader(fsID); 

return programID; 

:

여기
/* ---------------------------- */ 
/* OPENGL CONTEXT SET WITH GLEW */ 
/* ---------------------------- */ 
static bool contextFlag = initializer::createContext(vmath::uvec2(1280, 720), "mWs", window); 
std::thread* checkerThread = new std::thread(initializer::checkContext, contextFlag); 

/* --------------------------------- */ 
/* STATIC STATE SINGLETON DEFINITION */ 
/* --------------------------------- */ 
Playing Playing::playingState; //Failing comes from here which tries to create a program 



/* ---- */ 
/* MAIN */ 
/* ---- */ 
int main(int argc, char** argv) 
{ 
    checkerThread->join(); 
    delete checkerThread; 

    Application* app = new Application(); 
    ... 
    return 0; 
} 

이 (가) fragmentShader 파일의 예제의 찾고 :처럼 여기 내 프로그램 작성 기능이 보이는 방법

#version 450 core 

out vec4 fColor; 

void main() 
{ 
    fColor = vec4(0.5, 0.4, 0.8, 1.0); 
} 

그리고 이것이 내가 오류로 포착 :

  • 인텔 HD 4000
  • 엔비디아 지포스 840M

내가 전에이 같은 기계에 쉐이더를 컴파일 할 것을 주장한다 414,내 사양은 다음과 같습니다. 나는 디스크 포맷 후에 더 이상 그것을 할 수 없다. 그러나 모든 드라이버가 업데이트됩니다.

+0

그래픽 드라이버가 최신 버전입니까? 둘 다 GLSL 버전 450을 지원합니다. – Asesh

+1

Intel 카드에 대한 정보를 찾을 수 없었지만, Nvidia는 GLSL 450을 확실히 지원해야합니다. Nvidia 카드로 프로그램을 실행 해 보셨습니까? (보통 Windows는 기본적으로 Intel을 기본으로합니다.) – Banex

+0

@Asesh 어제이 문제가 저를 괴롭히기 시작했을 때 나는 모든 드라이버를 확인했습니다. 나는 심지어 그들을 뒤로 굴려서 최신 것들을 설치하기 위해 nvidia의 패널을 사용했다. – Primemaster

답변

1

의견에서 언급 한 것처럼 문제는 선택한 graphics card을 사용하여 IDE를 실행하는 잘못된 옵션이있는 것 같습니다. Windows가 통합 Intel HD 4000 카드를 기본적으로 사용하기 때문에 OS에서 NVIDIA 카드를 기본 설정으로 바꾸면 문제가 해결됩니다.