| 48 | } |
| 49 | |
| 50 | int Init () |
| 51 | { |
| 52 | const char* vShaderStr = |
| 53 | "attribute vec4 vPosition; \n" |
| 54 | "void main() \n" |
| 55 | "{ \n" |
| 56 | " gl_Position = vPosition; \n" |
| 57 | "} \n"; |
| 58 | |
| 59 | const char* fShaderStr = |
| 60 | "precision mediump float;\n"\ |
| 61 | "void main() \n" |
| 62 | "{ \n" |
| 63 | " gl_FragColor = vec4 ( 0.0, 0.0, 1.0, 1.0 );\n" |
| 64 | "} \n"; |
| 65 | |
| 66 | GLuint vertexShader; |
| 67 | GLuint fragmentShader; |
| 68 | GLint linked; |
| 69 | |
| 70 | vertexShader = LoadShader ( GL_VERTEX_SHADER, vShaderStr ); |
| 71 | fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, fShaderStr ); |
| 72 | |
| 73 | programObject = glCreateProgram ( ); |
| 74 | if ( programObject == 0 ) |
| 75 | return 0; |
| 76 | |
| 77 | glAttachShader ( programObject, vertexShader ); |
| 78 | glAttachShader ( programObject, fragmentShader ); |
| 79 | glBindAttribLocation ( programObject, 0, "vPosition" ); |
| 80 | glLinkProgram ( programObject ); |
| 81 | glGetProgramiv ( programObject, GL_LINK_STATUS, &linked ); |
| 82 | if ( !linked ) |
| 83 | { |
| 84 | GLint infoLen = 0; |
| 85 | glGetProgramiv ( programObject, GL_INFO_LOG_LENGTH, &infoLen ); |
| 86 | if ( infoLen > 1 ) |
| 87 | { |
| 88 | char* infoLog = malloc (sizeof(char) * infoLen ); |
| 89 | glGetProgramInfoLog ( programObject, infoLen, NULL, infoLog ); |
| 90 | printf ( "Error linking program:\n%s\n", infoLog ); |
| 91 | free ( infoLog ); |
| 92 | } |
| 93 | glDeleteProgram ( programObject ); |
| 94 | return GL_FALSE; |
| 95 | } |
| 96 | |
| 97 | glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f ); |
| 98 | return GL_TRUE; |
| 99 | } |
| 100 | |
| 101 | /// |
| 102 | // Draw a triangle using the shader pair created in Init() |
no test coverage detected