2014-09-14 3 views
0

OpenGL을 사용하여 인덱싱 된 GL_LINES를 그리는 중입니다. 두 꼭지점의 조각 쉐이더에서 인덱스에 액세스해야합니다. 따라서 나는 나의 라인이 구성하는 두 개의 인덱스를 알아야한다. gl_VertexID라는 내장 변수에 대해 읽었을 때 유용하지 않을 것입니다. 이미 버퍼에 내 인덱스를 저장 했으므로 속성으로도 전달하려고합니다. 따라서 내 코드처럼 보이는 다음프래그먼트 셰이더에서 버텍스 인덱스에 액세스하는 방법 GLSL

glEnableVertexAttribArray(0); 
glBindBuffer(GL_ARRAY_BUFFER,vertexBuffer); 
glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,(void*)0); 

glEnableVertexAttribArray(1); 
glBindBuffer(GL_ARRAY_BUFFER,indexBuffer); 
glVertexAttribPointer(1,2,GL_UNSIGNED_INT,GL_FALSE,0,(void*)0); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,indexBuffer); 

이 바로 갈 수있는 길을 잘못 것으로 보인다 사용하십니까? 또한 색인을 사용하여 이미지로드 저장소를 통해 일부 정보를 원자 적으로 작성합니다. 불행히도 glGetTexImage를 통해이 이미지를 가져 오면 0 만 생성됩니다. 그래서 내 색인이 통과하거나 내 이미지 쓰기/가져 오기가 잘못되었습니다.

여기에서 어떤 도움을 주셔서 감사합니다.

+0

인덱스 버퍼 내용을 사용하면 속성 데이터가 작동하지 않습니다. 이제 색인이 색인 배열의 색인이기도하므로 완전히 잘못된 색인을 각 꼭지점의 속성으로 사용합니다. – derhass

답변

3

정수형이 버텍스 셰이더에있는 속성의 경우 glVertexAttribPointer() 대신 glVertexAttribIPointer() (추가)을 사용해야합니다. 당신은 단지 정점 당 하나의 인덱스를 가지고 있기 때문에

, 크기입니다 2 번째의 인수가, 호출은 다음과 같이 표시됩니다 1.해야한다 : 당신은 무엇을하고있는 것은 다소 이례적인 것으로 보인다

glVertexAttribIPointer(1, 1, GL_UNSIGNED_INT, 0, (void*)0); 

, 하지만 인덱스 배열을 정점 속성으로 사용하는 것이 불법 일 것이라고 생각할 수는 없습니다.

저는 gl_VertexID이 draw 명령에 의해 생성 된 꼭지점의 순차적 ID라고 생각합니다. 이것은 정점 인덱스와 다릅니다.

+0

이것은 매력처럼 작동합니다. 고마워. – Joe