문제

매트릭스 스택과 같이 작동하는 환경 설정 (블렌딩, 스텐실 링, 깊이 등)의 OpenGL에서 추상화를 만들고 싶습니다. 스택을 밀고, 필요한 변경을하고, 객체를 그리운 다음 스택을 팝하고 이전 설정으로 돌아갑니다.

예를 들어, 현재 다음과 같은 코드를 그리는 것일 수 있습니다.

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND); 

그러나 환경 스택을 사용하면 다음과 같습니다.

glPushEnv();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glPopEnv(); 

내가 알 수 있듯이 이것을하는 방법은 두 가지뿐입니다.

  1. 각 환경 설정 기능의 내 자신의 '풍미'를 만들어 호출하십시오. 현재 현재 Envstack 데이터 구조를 업데이트하고 OpenGL 환경 기능을 호출합니다.
  2. OpenGL 환경 기능을 가리 킵니다 나의 환경 기능은 현재 Envstack 데이터 구조를 다시 업데이트하고 원래 OpenGL 환경 기능을 호출합니다.

따라서 옵션 1은 분명히 훨씬 간단합니다. 그러나 다른 사람들 코드를 사용하는 경우 문제가 발생하여 환경에 대한 변경 사항을 반드시 알지 못하며 데이터 구조가 동기화되지 않을 것입니다. 그리고 요점은 환경 설정이 올바른지 확인하는 간단한 방법을 갖는 것이기 때문에 이것은 시원하지 않습니다.

따라서 내 질문은 이러한 맥락에서 OpenGL 환경에서 기능하는 기능을 어떻게 변경합니까?

도움이 되었습니까?

해결책

OpenGL에는 이미이 기능이 포함되어 있습니다. 당신은 원합니다 glPushAttrib(GL_ALL_ATTRIB_BITS); 그리고 glPopAttrib();. 보다 http://opengl.org/documentation/specs/man_pages/hardcopy/gl/html/gl/pushattrib.html 이상.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top