| 145 | } |
| 146 | |
| 147 | bool GLProgram::GetBinary(std::vector<u8>* out_data, u32* out_data_format) |
| 148 | { |
| 149 | GLint binary_size = 0; |
| 150 | glGetProgramiv(m_program_id, GL_PROGRAM_BINARY_LENGTH, &binary_size); |
| 151 | if (binary_size == 0) |
| 152 | { |
| 153 | Console.Warning("glGetProgramiv(GL_PROGRAM_BINARY_LENGTH) returned 0"); |
| 154 | return false; |
| 155 | } |
| 156 | |
| 157 | GLenum format = 0; |
| 158 | out_data->resize(static_cast<size_t>(binary_size)); |
| 159 | glGetProgramBinary(m_program_id, binary_size, &binary_size, &format, out_data->data()); |
| 160 | if (binary_size == 0) |
| 161 | { |
| 162 | Console.Warning("glGetProgramBinary() failed"); |
| 163 | return false; |
| 164 | } |
| 165 | else if (static_cast<size_t>(binary_size) != out_data->size()) |
| 166 | { |
| 167 | Console.Warning("Size changed from %zu to %d after glGetProgramBinary()", out_data->size(), binary_size); |
| 168 | out_data->resize(static_cast<size_t>(binary_size)); |
| 169 | } |
| 170 | |
| 171 | *out_data_format = static_cast<u32>(format); |
| 172 | DevCon.WriteLn("Program binary retrieved, %zu bytes, format %u", out_data->size(), *out_data_format); |
| 173 | return true; |
| 174 | } |
| 175 | |
| 176 | void GLProgram::SetBinaryRetrievableHint() |
| 177 | { |