Skip to content

[Note] Program 2.2

Juhwi Eden Kim edited this page Oct 13, 2019 · 4 revisions
  • glDrawArrays(GLenum mode, Glint first, GLsize count); : ์ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ, pipeline์— ์žˆ๋Š” GLSL ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰

  • GLuint๋Š” unsigned int

  • init() ํ•จ์ˆ˜๋Š” createShaderProgram()๋ฅผ ํ˜ธ์ถœ
  • createShaderProgram()์€ vShaderSource์™€ fShaderSource๋กœ ์‰์ด๋” ์ฝ”๋“œ๋ฅผ ์ŠคํŠธ๋ง ํ˜•ํƒœ๋กœ ๋ฐ›์Œ
  • glCreateShader()์€ GL_VERTEX_SHADER์™€ GL_FRAGMENT_SHADER ํ˜•์˜ ์‰์ด๋” ๋‘๊ฐœ๋ฅผ ์ƒ์„ฑ, OpenGL์ด ๋‘๊ฐœ์˜ ๋นˆ ์‰์ด๋” ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๋‚˜๋ฉด ์ •์ˆ˜ํ˜• ID ๋ฐ˜ํ™˜, ์ด๊ฒƒ์„ vShader์™€ fShader์— ์ €์žฅ
  • glShaderSource()๋Š” vShaderSource์™€ fShaderSource์— ์ €์žฅ๋œ ์‰์ด๋” ์ŠคํŠธ๋ง์„ ๋นˆ ์‰์ด๋” ๊ฐœ์ฒด์— ๋กœ๋“œ (์‰์ด๋”๋ฅผ ๋กœ๋“œํ•  ์‰์ด๋” ๊ฐœ์ฒด, ์‰์ด๋” ์†Œ์Šค์ฝ”๋“œ์˜ ์ŠคํŠธ๋ง ๊ฐœ์ˆ˜(๊ฐ ์‰์ด๋”์˜ ์ŠคํŠธ๋ง ๊ฐœ์ˆ˜๊ฐ€ 1), ์†Œ์Šค์ฝ”๋“œ ์ŠคํŠธ๋ง ํฌ์ธํ„ฐ ๋ฐฐ์—ด๊ณผ ์—ฌ๊ธฐ์„  nullptr๋ฅผ parameter๋กœ ๋ฐ›์Œ)
  • glCompileShader()๋Š” ์‰์ด๋”๋ฅผ ์ปดํŒŒ์ผ

  • vfProgram์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑ, ์ •์ˆ˜ํ˜• ID ์ €์žฅ : ์ด ๊ฐœ์ฒด๋Š” ์ปดํŒŒ์ผ๋œ ์‰์ด๋”๋ฅผ ์ €์žฅ
  • glCreateProgram() : ํ”„๋กœ๊ทธ๋žจ ๊ฐœ์ฒด ์ƒ์„ฑ
  • glAttachShader() : ์‰์ด๋”๋ฅผ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ์ฒด์— ์—ฐ๊ฒฐ
  • glLinkProgram() : GLSL ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ compatible ์—ฌ๋ถ€ ํ™•์ธ -> ์กฐ๊ฑด๋ฌธ์—์„œ ํ™•์ธ

  • glUseProgram() : ์ปดํŒŒ์ผ๋œ ์‰์ด๋”๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐœ์ฒด๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ ์Šคํ…Œ์ด์ง€๋กœ ๋กœ๋“œ (GPU๋กœ ์ „๋‹ฌ), ์‰์ด๋”๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ์ „๋‹ฌ๋งŒ ํ•จ
  • glDrawArray() : ์ด ์˜ˆ์ œ์—์„  ์  ํ•˜๋‚˜๋ฅผ ์ฐ์Œ

  • vertex shader : vertex ์‰์ด๋”๋Š” ์ •์ (vertex)๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ์— ๋‚ด๋ ค๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•จ
  • gl_Position : 3D ๊ณต๊ฐ„์— ์ •์ ์˜ ์ขŒํ‘œ ์œ„์น˜๋ฅผ ์„ค์ •ํ•˜๋Š”๋ฐ ์“ฐ์ด๋Š” built-in ๋ณ€์ˆ˜, ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋ณด๋‚ด์ง, XYZ ์ขŒํ‘œ์™€ 1.0 vec4 ๊ฐ’์„ ๋ฐ›์Œ

  • fragment shader : ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฑฐ์ณ rasterize์— ๋„์ฐฉํ•œ ์ •์ ๋“ค์„ ํ”ฝ์…€(์ •ํ™•ํžˆ๋Š” fragment) location์œผ๋กœ ๋ณ€ํ™˜์‹œ์ผœ์คŒ, display๋  ํ”ฝ์…€์˜ RGB ๊ณ„์‚ฐ
  • out : color ๋ณ€์ˆ˜๋ฅผ ์•„์›ƒํ’‹์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ํƒœ๊ทธ, gl_Position์€ ์• ์ดˆ์— ์•„์›ƒํ’‹ ๋ณ€์ˆ˜์—ฌ์„œ out ํƒœ๊ทธ๊ฐ€ ํ•„์š” ์—†์Œ

  • ๋ฐ์ดํ„ฐ ์„ธํŠธ๋“ค์€ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋‚ด๋ ค๋ณด๋‚ด์ง€๋ ค๋ฉด buffer ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•จ. ์ด ๋ฒ„ํผ๋“ค์€ ๋‹ค์‹œ Vertex Array Objects (VAO)๋กœ ๊ตฌ์„ฑ๋จ. ๋ฒ„ํผ๋ฅผ ์“ฐ์ง€ ์•Š์•„๋„ ์ตœ์†Œ 1๊ฐœ์˜ VAO ํ•„์š”

  • vertex processing -> rasterization -> fragment processing
  • rasterization: primitive(triangle, ์—ฌ๊ธฐ์„  point)๊ฐ€ ํ”ฝ์…€๋กœ ๋ณ€ํ™˜

Clone this wiki locally