着色器是一个GL的应用程序的重要组成部分。它们是运行在显卡上并最终决定什么被渲染到屏幕上的程序。请注意,在我们的代码中,我们使用版本410 core。这必须配合我们正在使用的OpenGL版本,它的核心配置文件是4.1版,因此选用410 core。 03 | static const char * vs_source[] = |
05 | "#version 410 core \n" |
09 | " const vec4 vertices[] = vec4[](vec4( 0.25, -0.25, 0.5, 1.0), \n" |
10 | " vec4(-0.25, -0.25, 0.5, 1.0), \n" |
11 | " vec4( 0.25, 0.25, 0.5, 1.0)); \n" |
13 | " gl_Position = vertices[gl_VertexID]; \n" |
18 | static const char * fs_source[] = |
20 | "#version 410 core \n" |
26 | " color = vec4(0.0, 0.8, 1.0, 1.0); \n" |
在渲染我们的着色器之后,我们需要实时的编译他们并绑定他们到我们的GL程序以便于显卡使用他们。 02 | program = glCreateProgram(); |
05 | GLuint fs = glCreateShader(GL_FRAGMENT_SHADER); |
06 | glShaderSource(fs, 1, fs_source, NULL); |
10 | GLuint vs = glCreateShader(GL_VERTEX_SHADER); |
11 | glShaderSource(vs, 1, vs_source, NULL); |
15 | glAttachShader(program, vs); |
16 | glAttachShader(program, fs); |
18 | glLinkProgram(program); |
21 | glGenVertexArrays(1, &vao); |
22 | glBindVertexArray(vao); |
一旦我们告诉显卡利用绑定的着色器来使用我们的程序,那么我们开始绘制东西吧。接下来的代码块是我们的渲染循环。我们不断地画三角形到银幕上,直到该程序存在。 02 | while (!glfwWindowshouldclose(window)) |
05 | static const GLfloat green[]={0.25f,0.0f,1.0f}; |
07 | glDrawBufferfv{GL_TRIANGLES,0,3); |
09 | glfwSwapBuffers(window); |
这是大量的好的代码,如果你没有阅读它或者充分地理解它。我已经评论过它并试图解释,但是某些概念我仍要企图掌握它。有两种主要的外卖,我想在这儿开车回家。
1.有大量设置的代码。 2.也有着色器的源代码。保持他们作为静态的“const char,是粪便。
对于我的下一篇文章,我将详细从我们的c++代码里面来如何移动着色器源代码,以至于它不在那儿纠结,更容易编辑。 着色器是非常重要的图形并且完全不实用,如果他们被卡在我们的c++代码里面。对于以后的帖子,我将表明我已经做了在其他类和模块里面,重构了大量的已经设置的代码。
同样,如果你喜欢看见我最近的源代码,那么它就在Github上面
后会有期!
|