Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Fragment and vertex shaders code
- static const GLchar* pszFragShader = "\
- precision mediump float;\
- varying vec4 v_Color;\
- void main (void)\
- {\
- gl_FragColor = v_Color;\
- }";
- static const GLchar* pszVertShader = "\
- varying vec4 v_Color;\
- attribute vec4 a_Color;\
- attribute highp vec4 a_Position;\
- void main(void)\
- {\
- v_Color = a_Color;\
- gl_Position = a_Position;\
- }";
- GLint myglfwGetShaderProgram(const char *vertex_shader_source, const char *fragment_shader_source) {
- enum Consts {INFOLOG_LEN = 512};
- GLchar infoLog[INFOLOG_LEN];
- GLint fragment_shader;
- GLint success;
- GLint vertex_shader;
- const char *pvertex_shader = vertex_shader_source;
- const char *pfragment_shader = fragment_shader_source;
- /* Vertex shader */
- vertex_shader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertex_shader, 1, &pvertex_shader, NULL);
- glCompileShader(vertex_shader);
- glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success);
- if (!success) {
- glGetShaderInfoLog(vertex_shader, INFOLOG_LEN, NULL, infoLog);
- printf("ERROR::SHADER::VERTEX::COMPILATION_FAILED\n%s\n", infoLog);
- }
- /* Fragment shader */
- fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragment_shader, 1, &pfragment_shader, NULL);
- glCompileShader(fragment_shader);
- glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success);
- if (!success) {
- glGetShaderInfoLog(fragment_shader, INFOLOG_LEN, NULL, infoLog);
- printf("ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n%s\n", infoLog);
- }
- /* Link shaders */
- shader_program = glCreateProgram();
- glAttachShader(shader_program, vertex_shader);
- glAttachShader(shader_program, fragment_shader);
- glBindAttribLocation(shader_program, VERTEX_POS_INDX, "a_Position");
- glBindAttribLocation(shader_program, COLOR_POS_INDX, "a_Color");
- glLinkProgram(shader_program);
- glGetProgramiv(shader_program, GL_LINK_STATUS, &success);
- if (!success) {
- glGetProgramInfoLog(shader_program, INFOLOG_LEN, NULL, infoLog);
- printf("ERROR::SHADER::PROGRAM::LINKING_FAILED\n%s\n", infoLog);
- }
- glEnableVertexAttribArray(VERTEX_POS_INDX);
- glEnableVertexAttribArray(COLOR_POS_INDX);
- glUseProgram(shader_program);
- glGenBuffers(1, &vbo_vertex);
- glGenBuffers(1, &vbo_color);
- glDeleteShader(vertex_shader);
- glDeleteShader(fragment_shader);
- return shader_program;
- }
- void DrawArrays(GLenum mode, GLint first, GLsizei count) {
- int vertexLocation = glGetAttribLocation(shader_program, "a_Position");
- int colorLocation = glGetAttribLocation(shader_program, "a_Color");
- glBindBuffer(GL_ARRAY_BUFFER, vbo_vertex);
- glBufferData(GL_ARRAY_BUFFER, (count + first) *
- (sizeof(GLfloat) * 3), vertices, GL_STATIC_DRAW);
- glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, GL_FALSE, 0, 0);
- glBindBuffer(GL_ARRAY_BUFFER, vbo_color);
- glBufferData(GL_ARRAY_BUFFER, (count + first) *
- (sizeof(GLfloat) * 4), colors, GL_STATIC_DRAW);
- glVertexAttribPointer(colorLocation, 4, GL_FLOAT, GL_FALSE, 0, 0);
- glDrawArrays(mode, first, count);
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- }
Add Comment
Please, Sign In to add comment