1
A
回答
5
取決於你想什麼來實現的,什麼是您當前的知識,你可以採取不同的方法。
如果您在學習GLSL的同時學習OpenGL 2.0,我建議您將Red book和Orange book作爲一個集合,因爲它們並駕齊驅。
如果你需要一個不太全面的指南,只是讓你開始,請查看OpenGL bible。
如果我誤解了你的問題,並且你已經知道OpenGL,並且想特別研究GLSL,下面是一個很好的phong shading示例,它顯示了基本知識。
編譯着色器源是非常簡單的,
首先,你需要分配一個着色器插槽爲源,就像你分配一個紋理,使用glCreateShader
:
GLuint vtxShader = glCreateShader(GL_VERTEX_SHADER);
GLuint pxlShader = glCreateShader(GL_FRAGMENT_SHADER);
之後,你需要以某種方式加載您的源代碼。由於這是一個真正依賴於平臺的解決方案,因此這取決於您。
獲取源後,將其設置使用glShaderSource
:
glShaderSource(vtxShader, 1, &vsSource, 0);
glShaderSource(pxlShader, 1, &psSource, 0);
然後你glCompileShader
編譯來源:
glCompileShader(vtxShader);
glCompileShader(pxlShader);
鏈接着色器給對方,首先分配使用glCreateProgram
程序,使用glAttachShader
將着色器附加到程序中,並使用glLinkProgram
鏈接它們:
GLuint shaderId = glCreateProgram();
glAttachShader(shaderId, vtxShader);
glAttachShader(shaderId, pxlShader);
glLinkProgram(shaderId);
然後,就像一個紋理,你把它綁定到使用glUseProgram
當前呈現階段:
glUseProgram(shaderId);
要解除綁定,使用0的ID或其他着色器ID。
對於清理:
glDetachShader(shaderId, vtxShader);
glDetachShader(shaderId, pxlShader);
glDeleteShader(vtxShader);
glDeleteShader(pxlShader);
glDeleteProgram(shaderId);
而這大多是一切,你可以一起使用glUniform
功能的家庭與glGetUniform
設置參數爲好。
相關問題
- 1. GLSL - 設置統一問題
- 2. LWJGL渲染器需要GLSL和OpenGL2
- 3. GLSL設置紋理單元統一問題
- 4. virtualenvwrapper設置有問題
- 5. GLSL - 設置頂點顏色
- 6. GLSL 2.0屬性問題
- 7. GLSL Shader類幀率問題
- 8. GLSL着色器問題
- 9. GLSL 4.3紋理問題
- 10. GLSL齊次轉換問題
- 11. OpenGL ATI與NVIDIA GLSL問題
- 12. ATI glsl點精靈問題
- 13. glsl佈局與glvertexattribpointer問題
- 14. GLSL法線貼圖問題
- 15. GLSL兼容性問題
- 16. 帶有註釋問題的MKMapView問題
- 17. 耙設計有問題:設置
- 18. 帶有vec3數組的GLSL統一塊
- 19. 帶有Firebase問題的facebookLogin.logInWithReadPermissions
- 20. 帶有註釋的問題
- 21. Hyperledger的設置有什麼問題?
- 22. 有問題的屬性設置
- 23. 有關iPhone SDK設置包的問題
- 24. 預定義變量的GLSL設置值
- 25. GLSL透明度問題上的iOS
- 26. 設置問題找到在沒有設置案例的贏家
- 27. 設置elasticsearch問題
- 28. eclipse設置問題
- 29. 設置gettext問題()
- 30. Shoes設置問題