I'm writing GL application that uses external libs, which print errors to the console. I want to catch that and print in the in-game console.
PS: Sorry, for my bad english....
I'm writing GL application that uses external libs, which print errors to the console. I want to catch that and print in the in-game console.
PS: Sorry, for my bad english....
There are two basic approaches you could take to this:
If the libraries all use std::cout
for the IO you want to capture you can write your own basic_streambuf
. You can then just call std::cout.rdbuf(mybufinst);
to replace the streambuffer, for example using the std::basic_stringbuf
:
#include <sstream>
#include <iostream>
int main() {
static std::basic_stringbuf<std::ostream::char_type> buf;
std::cout.rdbuf(&buf);
std::cout << "Hello captured world!\n";
std::cerr << "Stole: " << buf.str() << std::endl;
}
You can use a platform specific approach, e.g. on POSIX systems dup2()
will allow you to replace a file descriptor with another one, or on Windows with SetStdHandle()
. You'd want to use pipes rather than just another file probably and you'd need to be really careful about blocking (so probably want a dedicated thread)