2011-04-25 4 views
1

glUseProgramObjectARB을 사용할 때 "잘못된 연산"오류가 발생하며 그 이유를 알지 못합니다.glUseProgramObjectARB 잘못된 연산 오류

쉐이더 프로그램이 올바르게로드되고 있습니다. 저는 매우 확신합니다. glGetInfoLogARB에 표시됩니다.

  • Vertex shader가 하드웨어에서 성공적으로 컴파일되도록 컴파일되었습니다.
  • 조각 쉐이더가이 하드웨어에서 성공적으로 컴파일되도록 컴파일되었습니다.

이 명령 이전에 이전의 OpenGL 오류가 없습니다. 그래서이 특정 명령을 가진 무언가가 확실히 문제로 보입니다.

저는 SDL에서 glew를 사용하고 있습니다. 이전에 GLee를 사용하고 있었고 동일한 문제가 발생했습니다.

내가 그것을 가정합니다 documentation 읽기이 오류입니다 :

GL_INVALID_OPERATION is generated if program could not be made part of current state.

하지만 난 그런 일이 발생할 수 정확히 모르겠어요. 이 명령은 이전의 모든 셰이더 명령이 제대로 작동하므로 작업중인 OpenGL 컨텍스트에서 실행됩니다. "시작"과 "끝"블록 사이에 있지 않습니다.

실제로 나는 그것이 의미하는 바가 무엇인지 잘 모르겠다. 명령이 발행 될 수없는 경우가있을 수 있습니다. 누군가가 더 잘 알고 있다면 그것은 위대 할 것입니다.

편집 :

해결 : 지체했다 오 예수, 내 기능 중 하나에 수익을 잃어버린 다른 곳에 그래서 다시 내가 제작했던 프로그램을 통과하지 않은 호출.

+0

정보 기록은 정상이지만 개체/프로그램이 실제로 올바르게 컴파일/링크되어 있습니다. (glGetObjectiv (GL_COMPILE_STATUS), glGetProgramiv (GL_LINK_STATUS)). 나는 그것이 생산하는 "좋은"정보 기록에도 불구하고 링크가 실패한 시나리오를 알고있다. – kvark

답변

3

코드를 보지 않고 그것을 알고 어렵다,하지만 당신은 명시 적으로 glCompileShaderARB (2 배)하지만 glLinkProgramARB의 결과를 언급하기 때문에 나는 당신이 (glLinkProgramARB에 잊어 그런데 한 후, 안전하게 glDeleteObjectARB을 할 수 있다는 생각됩니다 두 개의 쉐이더 객체).

+0

응답 해 주셔서 감사합니다. 나는 문제없이 프로그램을 링크 시켰고, 링크 한 후에 셰이더 오브젝트를 삭제할 수 있다는 것을 몰랐다. 코드는 일부 추가 객체에 상당히 캡슐화되어 있기 때문에 붙여 넣기가 어렵지만 여기서는 실행중인 내용을 간략하게 설명합니다. http://pastebin.com/w9G1KiWd –