2012-04-21 2 views
0

고정 VBO 배열로 쉐이더 프로그램 런타임을 전환하고 싶습니다. 나는 고정 정점으로 다음과 같은 기능보다는 더 이상 필요하지 thik셰이더에 대한 버텍스 속성을 알려주는 방법은 무엇입니까?

인덱스 속성 내가 모든 것을 유선

glEnableVertexAttribArray 
glVertexAttribPointer 
glGetAttribLocation 
glBindAttribLocation 

(I 0 원하는 위치를, 질감 1 좌표), 그러나 아무 것도 그려 없다 FBO. 프로그램에서 찾은 정점 속성 색인 (glVertexAttribPointer에서)을 사용하면 제대로 작동하지만 고정 된 속성 색인과 함께 사용할 수 없습니다.

누군가가 나에게 나에게 위의 기능의 올바른 사용/실행 순서를 보여줍니다 간단한 샘플 코드를 게재 할 수 있습니까? 누락 된 단계는

있습니까?

+3

-1 : "누군가가 나에게 위의 나에게 기능의 올바른 사용/실행 순서를 보여줍니다 간단한 샘플 코드를 표시 할 수 있습니다" 이것은 끔찍한 질문입니다. 이러한 기능의 순서를 알지 못하는 유일한 방법은 해당 기능이 무엇인지 알지 못하는 경우입니다. 따라서 이러한 함수가 어떻게 작동하는지 묻는 것이 필요합니다. 그렇지 않으면 복사 및 붙여 넣기 코딩 일뿐입니다. –

+0

@Nicol : 이와 비슷한 것들 - http://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocation.xml - 정말 훌륭하지만 실행 명령에 대해서는 아무것도 말하지 않습니다. – Geri

+0

정말 glBindAttribLocation이하는 일을 알고 있지만, 프로그램을 연결 한 후에 사용했기 때문에 작동하지 않을 때는 어디로 갈지 잘 모릅니다. – Geri

답변

3

요점은 : 프로그램을 연결하기 전에 glBindAttribLocation을 호출해야한다는 것입니다. 같은 인덱스가 단순한 정수

glEnableVertexAttribArray(ATTRIBUTE_POSITION); 
glEnableVertexAttribArray(ATTRIBUTE_TEXTURE_COORDINATES);  
glVertexAttribPointer(ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, _positionStride, (void*)0);  
glVertexAttribPointer(ATTRIBUTE_TEXTURE_COORDINATES, 2, GL_FLOAT, GL_FALSE, _positionStride, (void*)_textureCoordinatesOffset); 

이 :

//Vertex attributes. 
enum 
{ 
    ATTRIBUTE_POSITION,   //0 
    ATTRIBUTE_TEXTURE_COORDINATES //1 
}; 

그것은 지금 작동

glBindAttribLocation(program, ATTRIBUTE_POSITION, "position"); 
glBindAttribLocation(program, ATTRIBUTE_TEXTURE_COORDINATES, "textureCoordinates");  
glLinkProgram(program); 

그럼 당신처럼, 고정 지수와 배열 기능을 속성 사용할 수 있습니다. 그리기 호출 전에 glVertexAttribPointer를 호출 할 필요가 없습니다.

+0

도움이되었습니다. http : //samplecodebank.blogspot.co.kr/2011/05/glbindattriblocation-example-c-c-objc.html – Geri

0

사이먼이 말한대로 (http://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocation.xml) : A의

속성 변수 이름 - 일반적인 속성 인덱스 바인딩 glBindAttribLocation을 호출하여 언제든지 프로그램 개체를 명시 적으로 할당 할 수 있습니다. 속성 바인딩은 glLinkProgram이 호출 될 때까지 적용되지 않습니다. 프로그램 오브젝트가 에 성공적으로 링크 된 후, 다음 속성 명령이 _ 생할 때까지 일] 속성에 대한 색인 값은 (그 값을 조회 할 수 있음)으로 고정됩니다.

응용 프로그램은 이 필요할 때 자동으로 바인딩되므로이 명령을 사용하여 표준 OpenGL 정점 속성을 바인딩 할 수 없습니다. 프로그램 오브젝트가 프로그램 객체가 연결되어 다음 번까지 효과을하지 않습니다 연결 한 후 그 바인딩 어떤 속성이 발생합니다.

관련 문제