如何在Mac上检测四路缓冲立体声功能?

时间:2012-03-27 14:06:25

标签: macos opengl stereo-3d

我希望我的应用程序能够正确检测四缓冲视频卡的存在,因此只有在可以进行3D查看时才能启用立体查看。

我这里有两台Mac电脑:1)带有nvidia Quadro 4000显卡的Mac Pro Mac OS 10.6.8桌面; 2)MacBook Pro笔记本电脑Mac OS 10.6.8带有两个视频板a:内置英特尔高清显卡和b:nvidia GeForce 330M。

第一台计算机的卡上有3D眼镜连接器。这是我想要显示立体3D的那个。我认为在第二台笔记本电脑上查看硬件立体声是不可能的。所以我希望我的应用程序检测它所在的计算机,并做出适当的反应。我以为我知道该怎么做。但它没有用。我的应用程序认为四缓冲立体声适用于两台计算机。

见证一个简单的测试程序:

#!/usr/bin/python

"""
Test program to demonstrate apparent quad-
buffered stereo support on Mac laptop
"""

from OpenGL.GL import *
from PySide.QtGui import QMainWindow, QApplication
from PySide.QtOpenGL import QGLWidget, QGLFormat
import sys

class MyGLWidget(QGLWidget):
    "Simple OpenGL canvas to test stereoscopic display capabilities"
    def __init__(self, parent=None):
        # Constructor for QGLWidget grabs a default OpenGL context
        # (which was set up in the main program, below)
        QGLWidget.__init__(self, parent)
        if self.format().stereo():
            # According to Qt docs, this is supposed to be the way to detect
            # quad buffered stereo support
            print "Quad buffered stereo appears to work(2)"
        self.useStereo = self.format().stereo()

    def initializeGL(self):
        "initializeGL is called once, after the OpenGL context is really ready"
        print "initializeGL"
        if glGetBooleanv(GL_STEREO):
            # This is the real OpenGL way to detect quad buffered stereo
            print "Quad buffered stereo appears to work(3)"
        self.useStereo = glGetBooleanv(GL_STEREO)

    def paintGL(self):
        if self.useStereo:
            # Left eye fill with yellow
            glDrawBuffer(GL_BACK_LEFT)
            glClearColor(1, 1, 0, 1)
            glClear(GL_COLOR_BUFFER_BIT)
            # Right eye fill with cyan
            glDrawBuffer(GL_BACK_RIGHT)
            glClearColor(0, 1, 1, 1)
            glClear(GL_COLOR_BUFFER_BIT)
        else:
            # Both eyes fill with green
            glDrawBuffer(GL_BACK) # both left and right
            glClearColor(0, 1, 0, 1)
            glClear(GL_COLOR_BUFFER_BIT)

# Attempt to use stereoscopic QGLFormat OpenGL format
# To work, this must be called before MyGLWidget is constructed.
fmt = QGLFormat.defaultFormat()
fmt.setStereo(True)
if fmt.stereo():
    print "Quad buffered stereo appears to work(1)"
QGLFormat.setDefaultFormat(fmt)

# The usual Qt hello world boilerplate...
app = QApplication(sys.argv)
win = QMainWindow()
win.setCentralWidget(MyGLWidget(win))
win.show()
sys.exit(app.exec_())

在两台计算机上,所有三个“四路缓冲立体声似乎都能正常工作”的信息被打印出来 在带有120Hz立体声监视器的立体声工作站上,窗口的背景呈浅灰绿色,因为它在120 Hz的黄色和青色之间切换。在60Hz监视器上,可以感知两种颜色之间引起癫痫发作的闪烁。这种闪烁也出现在笔记本电脑上,这表明它可能确实支持四缓冲立体声?

最后一个皱纹:如果我将笔记本电脑连接到外接显示器,我会在外接显示器上看到闪烁叠加,但在笔记本电脑屏幕上,窗口是黄色的,即仅有BACK_LEFT缓冲区颜色。只需使用笔记本电脑屏幕或外接显示器,我就会观察到闪烁的表型。

GeForce 330M视频板真的支持Mac上的四路缓冲立体声吗? 有没有更好的方法从我的程序中检测真正的四核板?

1 个答案:

答案 0 :(得分:1)

我测试的所有Mac电脑都支持四缓冲立体声。甚至那些具有所谓的消费级(即非Quadro)视频卡的人。这解释了为什么我的笔记本电脑声称支持立体声。因为它确实如此。

为了证明所有Mac都支持四缓冲立体声,我需要3D硬件,它接受没有同步信号的帧顺序立体声。我现在在工作中有这个。我正在从Mac电脑上观看漂亮的四路缓冲立体声。这太棒了。那么为什么我找不到任何销售面向Mac的立体声3D解决方案的供应商呢?这种美丽的能力潜伏在Macs上,似乎没有人意识到它就在那里。