如何使用freopen从Shader读取打印流?

时间:2014-05-06 08:11:54

标签: c++ visual-studio opengl

我在C ++中使用此命令,因为我在没有控制台的情况下启动将输出定向到控制台窗口。我想将shader-errors引导到这个控制台。

我需要完成哪些参数?或者我可以读取FILE数据类型吗?

AllocConsole();
freopen("CONIN$", "r", stdin); 
freopen("CONOUT$", "w", stdout); 
freopen("CONOUT$", "w", stderr); 

1 个答案:

答案 0 :(得分:1)

通过glGetShaderInfoLog报告着色器编译错误。您有责任从OpenGL获取日志并将其写入stdio文件流。像这样的东西

GLint shader_status;
glGetShaderiv(shader, GL_COMPILE_STATUS, &shader_status);
if( shader_status == GL_FALSE ) {
    GLint log_length, returned_length;
    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &log_length);

    char *shader_infolog = calloc(log_length);
    if(!shader_infolog) {
        goto alloc_infolog_failed;
    }

    glGetShaderInfoLog(
        shader,
        log_length,
        &returned_length,
        shader_infolog);
    fputs("Shader compilation failed:\n", stderr);
    fwrite(shader_infolog, returned_length, 1, stderr);
    fputc('\n', stderr);

    free(shader_infolog);
    goto failed_compile;
}