【问题标题】:How to detect quad buffered stereo capability on Mac?如何在 Mac 上检测四缓冲立体声功能?
【发布时间】:2012-04-11 01:57:42
【问题描述】:

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

我这里有两台 Mac 电脑:1) Mac Pro Mac OS 10.6.8 台式机,带有 nvidia Quadro 4000 显卡; 2) MacBook Pro 笔记本电脑 Mac OS 10.6.8,带有两个视频板 a:内置 Intel 高清显卡,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 立体声监视器的立体声工作站上,窗口的背景呈现淡石灰绿色,因为它在 120Hz 的黄色和青色之间切换。在 60Hz 显示器上,可以感知到两种颜色之间引起癫痫发作的闪烁。这种闪烁也出现在笔记本电脑上,这表明它可能真的支持四缓冲立体声?

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

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

【问题讨论】:

    标签: macos opengl stereo-3d


    【解决方案1】:

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

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

    【讨论】:

    • 您能否详细介绍一下您的硬件解决方案?
    • @JWWalker 我们在工作中使用科视Christie 3D 投影仪。这些投影仪接受帧倍增立体声模式。但它们可能超出了消费者的价格范围。 christiedigital.com/en-us/3d/products-and-solutions/projectors/…
    • 是的,他们甚至没有在他们的网站上列出价格,所以这可能超出了我的范围。不过谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2010-12-24
    相关资源
    最近更新 更多