본문 바로가기

전체 글1401

[OpenGL ES] 9. SL, Shader Language (쉐이더 언어) [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.. 2017. 10. 27.
[OpenGL ES] 8. 쉐이더와 프로그램 vsh, fsh (shader, program) [OpenGL ES] 8. 쉐이더와 프로그램 vsh, fsh (shader, program) OpenGL ES Shader id를 생성하고, 소스 코드를 업로드하고 컴파일한다. 이미 소스 코드를 가지고 있는 Shader에 새로운 코드를 업로드하면 기존의 소스 코드는 없어진다. 일단 OpenGL ES shader가 컴파일되면 소스 코드를 바꿀 순 없으며, 각 shader는 컴파일 여부를 알려주는 Glboolean형 상태 값을 가지고 있다. Shader가 성공적으로 컴파일되면 이 상태는 TRUE가 되는데, 디버그 모드에서 유용하게 쓰이기도 한다. 이것과 더불어 glGetShaderiv와 glGetShaderInfoLog 함수를 써서 어디서 오류가 발생했는지도 확인할 수 있다. 여기서 이 함수를 설명하진 않지.. 2017. 10. 26.
[OpenGL ES] 7. 쉐이더와 Per-Fragment 이해하기 [OpenGL ES] 7. 쉐이더와 Per-Fragment 이해하기 Per-Fragment Operations 이제 OpenGL ES, Fragment Shader 작업 이후에 어떤 일이 일어나는지 기술한다. (왼쪽 말고 오른쪽을 기술한다, FULL PIPELINE) 그림에선 OpenGL ES, Fragment Shader와 Scissor Test 사이에 생략된 단계가 하나 있다. "Pixel Ownership Test"라 부르는 내부 단계이지만, 개발자가 내부 단계를 안다 해도 사용할 수 없다. 그러니, 이 단계는 완전히 무시해도 된다. 몰라도 된다. 그림에 보이듯이 접근할 수도, 원하는 대로 설정할 수도 없는 유일한 단계가 Logicop이다(녹색). 우리는 보라색 단계에 집중한다. 어차피 못 건드릴 .. 2017. 10. 25.
[OpenGL ES] 6. Rasterize, Face Culling 3차원 설명 [OpenGL ES] 6. Rasterize, Face Culling 3차원 설명 Rasterize 엄격한 의미로 Rasterize는 OpenGL ES가 3차원 물체를 2차원 이미지로 만드는 수학적 동작을 말한다. 3차원으로 구성되어 있어도 모니터에 보이는 이미지는 어쨌거나 2D다. 눈에 보여야 할 이미지들의 순차적인 영역 조각들은 Fragment shader에 의해 처리된다. OpenGL ES에서 3차원 물체 아래 3가지로 분리된다. 1. 지금 눈에 보이는 것 2. 지금 이후에 보이는 것 3. 지금 이전에 보였던 것 하지만, Programmable pipeline 그림[OpenGL ES 강의 1 참조[링크]]에서 Rasterize는 그래픽 파이프라인의 작은 부분이란 것을 확인할 수 있다. 근데 이게 왜.. 2017. 10. 24.