| 79 | } |
| 80 | |
| 81 | bool EnsureProgram() |
| 82 | { |
| 83 | if (s_prog) |
| 84 | return true; |
| 85 | GLuint vs = CompileOne(GL_VERTEX_SHADER, kVS); |
| 86 | GLuint fs = CompileOne(GL_FRAGMENT_SHADER, kFS); |
| 87 | if (!vs || !fs) |
| 88 | return false; |
| 89 | GLuint prog = glCreateProgram(); |
| 90 | glAttachShader(prog, vs); |
| 91 | glAttachShader(prog, fs); |
| 92 | glLinkProgram(prog); |
| 93 | glDeleteShader(vs); |
| 94 | glDeleteShader(fs); |
| 95 | GLint ok = 0; |
| 96 | glGetProgramiv(prog, GL_LINK_STATUS, &ok); |
| 97 | if (!ok) |
| 98 | { |
| 99 | glDeleteProgram(prog); |
| 100 | return false; |
| 101 | } |
| 102 | s_prog = prog; |
| 103 | s_locVP = glGetUniformLocation(prog, "uLightVP"); |
| 104 | return true; |
| 105 | } |
| 106 | |
| 107 | bool EnsureTarget(int res) |
| 108 | { |
no test coverage detected