[OpenGL ES] 13. 버퍼 오브젝트, Rendering, Pre-Render Using the OpenGL ES Buffer ObjectsBuffer Object를 쓰는 것은 간단하다. Buffer Object를 다시 bind 하면 된다. OpenGL ES Buffer Object는 2개를 bind 할 수 있다는 것이 기억나는가? GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER를 동시에 bind 할 수 있다. bind하고 나선 OpenGL ES glDraw*를 이용하여 buffer object의 시작 index를 알려주면 된다. 배열 데이터 대신에 시작 index를 줘야 하므로, 시작 번호는 void형 pointer가 된다. 시작 index는 반드시 byte여야 한다. 위..
[OpenGL ES] 12. Uniform, attribute 활성화, 비활성화 OpenGL ES 배열을 설정하려면 마지막 추론 과정에서 "v(vector)"만 붙여주면 된다(glUniform{1234}{if}v). Shader의 uniform에 값을 설정하는 방법은 이게 끝이다. OpenGL ES에서 2가지 중요한 사실을 기억해라) 같은 uniform이 2개의 shader에서 사용될 수 있다는 것(양쪽에 다 선언해서)과 uniform은 현재의 program object에 설정된다는 것, 이 두 가지 말이다. 그래서 uniform과 attribute를 설정하기 전에 program 사용을 시작해야 한다. OpenGL ES, program object를 사용하려면 glUseProgram을 호출한다. 자 이제..
[OpenGL ES] 9. SL, Shader Language (쉐이더 언어) Shader Language(이하 SL)OpenGL ES, shader 언어는 표준 c와 비슷하다. 변수 선언과 함수 문법도 같고, if-then-else, 반복문도 같다. 심지어 #if, #ifdef, #define과 같은 매크로도 있다. OpenGL ES, shader language는 가능한 한 빠르게 실행되도록 만들어야 하니, 반복문이나 조건문 사용에 신중히 처리해야 한다. Shader는 GPU가 처리하고, 부동 소수점(float) 계산에 최적화되어 있다는 것을 기억해라. OpenGL ES, SL은 고유한 데이터 타입을 가지고 있다. SL's Data Type Same as C Description void void C..
[OpenGL ES] 8. 쉐이더와 프로그램 vsh, fsh (shader, program) OpenGL ES Shader id를 생성하고, 소스 코드를 업로드하고 컴파일한다. 이미 소스 코드를 가지고 있는 Shader에 새로운 코드를 업로드하면 기존의 소스 코드는 없어진다. 일단 OpenGL ES shader가 컴파일되면 소스 코드를 바꿀 순 없으며, 각 shader는 컴파일 여부를 알려주는 Glboolean형 상태 값을 가지고 있다. Shader가 성공적으로 컴파일되면 이 상태는 TRUE가 되는데, 디버그 모드에서 유용하게 쓰이기도 한다. 이것과 더불어 glGetShaderiv와 glGetShaderInfoLog 함수를 써서 어디서 오류가 발생했는지도 확인할 수 있다. 여기서 이 함수를 설명하진 않지..