2011-04-25 2 views
0

OpenGL 표시 목록에 매개 변수를 전달하는 방법 (표준 또는 영리한 트릭)이 있는지 궁금합니다. 나가 의미하는 것을 명백하게하기 위하여보기를 보여주게하십시오.OpenGL 표시 목록에 매개 변수 전달

한다고 가정 우리는 다음과 같은 코드가 있습니다

GLuint l = glGenLists(1); 
glNewList(l, GL_COMPILE); 
    // ...some OpenGL function calls 
    glBindTexture(GL_TEXTURE_2D, some_texture); // <-- here, I want `some_texture' to be a parameter that I can set when calling the display list 
    //...some more stuff... 
glEndList(); 

내가 원하는 것을 달성 할 수있는 방법이 있나요를?

+0

요즘 누구도 새로운 코드에서 디스플레이 목록을 사용하지 않습니다. 효율적으로 사용하기에는 너무 귀찮습니다. 당신은 방금 특정한 문제 중 하나를 경험했습니다. – datenwolf

답변

3

음, 그렇습니다. 바운드 텍스처는 전역 상태입니다. 텍스처를 바인딩 한 다음 표시 목록을 호출하면 목록이 실행될 때 텍스처가 여전히 바인딩되어 있어야합니다.

하지만 디스플레이 목록 사용을 중단하고 VA/VBO를 사용하는 것이 좋습니다.

0

그럴 수 없습니다. 특히, 신중하게 사양과 FAQ를 모두 읽어 보시기 바랍니다 :

GL의는 가 고유하게 지정하는 번호를 제공하여 (아마도 반복)을 특정 표시 목록을 처리하도록 지시 할 수있다. 이렇게하면 목록에있는 명령은 이 정상적으로 주어진 것처럼 실행되어 이됩니다. 유일한 예외는 클라이언트 상태에 의존하는 명령에 대해 과 관련됩니다. 이 표시 목록 에 누적 된 경우 (즉, 이 실행될 때가 아니라 발행 된 경우) 해당 시점의 클라이언트 상태 인 이 명령에 적용됩니다.

16.010 왜 디스플레이 목록이 너무 많은 메모리를 차지합니까? OpenGL 디스플레이 목록 은 모든 데이터의 사본을 만들어야합니다. 은이를 생성 한 호출 순서 을 재생성하는 데 필요합니다. 나중에 텍스처의 데이터 저장소를 변경하려는 경우는 OpenGL은 정확히 현재 상태였다 무엇이든지 재현 할 수 있도록 자신의 복사본을 유지하기 때문에 즉

그것은, 차이을하지 않습니다.

디스플레이 목록으로 변동 일부 종류를 얻을 수있는 유일한 방법은 중첩 된 디스플레이 트릭을 통해이지만, 마띠 아스 Valdenegro 이미 제안 당신이 그것을 도울 수 있다면, 당신은 모든 디스플레이 목록을 사용할 수 없습니다. 다른 기능 (예 : VBO)은보다 유연하고 동일하거나 더 우수한 성능을 제공합니다.