是否可以使用批处理脚本来获取OpenGL版本?

时间:2016-08-17 04:32:07

标签: windows bash batch-file opengl version

我想知道是否可能,使用批处理脚本或其他Windows(XP,Seven,Eight,Ten)或脚本兼容以获取当前驱动程序OpenGL版本。

我想将部分bash脚本改编为Windows:

#!/bin/bash

# 
# Autor     :   Inukaze ( Venezuela )
# Site      :   http://inukaze.wordpress.com
# E-Mail    :   inukaze.otaku@gmail.com
# License   :   GPL 3
#
#

# Obtener la Architecture
Architecture=$(uname -m)
case "$Architecture" in
    x86)    Architecture="x32"                          ;;
    i?86)   Architecture="x32"                          ;;
    amd64)  Architecture="x64"                          ;;
    x86_64) Architecture="x64"                          ;;
    * ) echo "Your Architecture Detected $Architecture -> Its not supported"    ;;
esac


# Detect OpenGL Version :
OpenGLV=$(glxinfo | grep "OpenGL version" | awk '{ print $4 }' | cut -c 5- | rev)

# Use the version of GzDoom according to the OpenGL version detected
case "$OpenGLV" in
1)
    echo
    echo "OpenGL 1 Detected"
    echo
    echo "Using GzDoom 1.8.6"
    Version=1.8.6
    if  [ "$Architecture" = "x32" ]; then
            LD_LIBRARY_PATH="Gnu/Linux/$Version/lib32"
            export LD_LIBRARY_PATH
            Engine="Gnu/Linux/$Version/gzdoom.$Architecture"
    elif    [ "$Architecture" = "x64" ]; then
            LD_LIBRARY_PATH="Gnu/Linux/$Version/lib64"
            export LD_LIBRARY_PATH
            Engine="Gnu/Linux/$Version/gzdoom.$Architecture"
    else
        echo "Your Architecture Detected $Architecture -> Its not supported"
    fi
    ;;

2) 
    echo
    echo "OpenGL 2 Detected"
    echo
    echo "Using GzDoom GzDoom 1.9.1"
    Version=1.9.1
    if  [ "$Architecture" = "x32" ]; then
            LD_LIBRARY_PATH="Gnu/Linux/$Version/lib32"
            export LD_LIBRARY_PATH
            Engine="Gnu/Linux/$Version/gzdoom.$Architecture"
    elif    [ "$Architecture" = "x64" ]; then
            LD_LIBRARY_PATH="Gnu/Linux/$Version/lib64"
            export LD_LIBRARY_PATH
            Engine="Gnu/Linux/$Version/gzdoom.$Architecture"
    else
        echo "Your Architecture Detected $Architecture -> Its not supported"
    fi
    ;;

3)  
    echo
    echo "OpenGL 3 Detected"
    echo
    echo "Using GzDoom GzDoom 2.1.1"
    Version=2.1.1
    if  [ "$Architecture" = "x32" ]; then
            LD_LIBRARY_PATH="Gnu/Linux/$Version/lib32"
            export LD_LIBRARY_PATH
            Engine="Gnu/Linux/$Version/gzdoom.$Architecture"
    elif    [ "$Architecture" = "x64" ]; then
            LD_LIBRARY_PATH="Gnu/Linux/$Version/lib64"
            export LD_LIBRARY_PATH
            Engine="Gnu/Linux/$Version/gzdoom.$Architecture"
    else
        echo "Your Architecture Detected $Architecture -> Its not supported"
    fi
    ;;

*) 
    echo "OpenGL version not determined"
    ;;
esac

    export Architectures
    for Architectures in $Architecture; do
        test -x ./$Engine || continue
        exec ./$Engine "$@"
    done

echo "Could not start GzDoom" >&2

但我不知道在批处理脚本或其他脚本上获取OpenGL版本的方法。或者,如果有人知道一个简单的命令行工具,我得到它并在新脚本中使用我想适应Windows兼容。

1 个答案:

答案 0 :(得分:0)

GL版本只能在运行时根据硬件/驱动程序功能确定。

同一个驱动程序可能会在一个GPU上报告3.3,因为它不支持所有4.0功能,而是支持另一个GPU上的4.x.如果不运行某些东西,就无法知道这一点。更糟糕的是,驱动程序的版本字符串历来具有误导性,一些驱动程序声称GL 2.0不支持非二次幂纹理。

软件不应该从报告的驱动程序版本推断任何内容,编写良好的软件将在运行时检查扩展支持,并在初始化时使用回退或失败快速。

您可能需要编写一个非常简单的程序来创建上下文并执行此操作,除非您依赖于glxinfo之类的非便携式内容,否则您肯定不会从批处理脚本执行此操作。