2010-08-18 8 views
2

표준 푸시/팝 작업을 사용하여 매트릭스 상태를 저장/복원하는 방법을 알고 있습니다. 나는 glLineWidth() 또는 glColor4ub()를 사용할 때 상태를 저장/복원하기위한 적절한 컨벤션을 찾을 수 없었습니다.OpenGL ES 상태를 저장/복원하는 올바른 방법

아무 것도 그리고 싶지 않을 때마다 선 너비 나 색상을 적절하게 설정하는 한 실제로 필요하지는 않지만 내 자신이 그린 그림의 위치를 ​​볼 수 있습니다. 너의 지식이없는 너 너의 선 너비, 그리고 너가 그리기를 계속할 때 그것이 기대와 다르게 나왔다.

당신이 무엇을하는지 모르는 어떤 함수를 호출 한 후에 선의 너비를 재설정 할 수 있다는 것을 고치려면 그것은 멋지지 않지만 이미 해결책이 있어야한다고 생각합니다.하지만 놓친 것 같습니다. 어떻게 든. 내 자신의 코드에 대한

나는 모든 그리기 함수의 시작 부분에이 일을 봤는데 :

GLfloat savedLineWidth = 1.0f; 
glGetFloatv(GL_LINE_WIDTH, &savedLineWidth); 
glLineWidth(lineWidth); 

그리고 다음과 같이 그리기 함수의 끝에서 상태를 복원 :

glLineWidth(savedLineWidth); 

내 내부를 모르는 모든 드로잉 기능이 훌륭하고 상태를 스스로 복구한다고 가정하지 않으면 그 점이 실제로 도움이되지 않습니다.

내가 그 가정을해야합니까? 또는 나는 무엇인가 놓치고 있냐?

답변

1

이 일반 OpenGL을 (안 ES 변종) 인 경우 다음과 같은 속성이 밀어 수 :

glPushAttrib(GL_LINE_WIDTH); 
glLineWidth(2.0f); 
... etc ... 
glPopAttrib(); 

아아, OpenGL을 ES이 사용할 수 없습니다. 귀하가 얻고 설정하는 방법은 귀하가 얻는만큼 좋습니다.

매우 시간이 많이 소요되는 프로세스이므로 get하는 횟수를 줄이기 위해 노력하십시오. 전송과 달리 버퍼링되지 않습니다.

어쩌면 당신의 접근 방식은 걱정하지 않아야합니다. 선 너비를 설정하고 싶을 때마다 설정하십시오. 선 너비가 너무 많이 영향을 미치지 않아야합니다.

터프한 전화. 이러한 다른 그리기 기능이 무엇인지에 달려 있습니다. 코드가 있습니까? 어쩌면 너 볼 수 있니?

+0

멋진데. 나는 glPushAttrib()와 glPopAttrib()이 OpenGL의 비 ES 변형에서 사용 가능하다는 것을 몰랐다. 나는 또한 요청을 받고 버스를 막히는 것에 대해 생각하지 않았다. 코드가 있습니다. OpenGL ES를 배우려고하는 순간 그저 내가 놀고있는 드로잉 코드 일뿐입니다. 나는 나쁜 습관이 생기기 전에 몇 가지 지침을 찾고있었습니다. – djdrzzy