Как определить возможность стерео с четырьмя буферами на Mac? - PullRequest
1 голос
/ 27 марта 2012

Я хочу, чтобы мое приложение правильно обнаруживало наличие видеокарты с четырьмя буферами, поэтому я могу включить стереофонический просмотр, только если возможен 3D-просмотр.

У меня здесь два компьютера Mac: 1) рабочий стол Mac Pro Mac OS 10.6.8 с видеокартой nvidia Quadro 4000; 2) Ноутбук MacBook Pro Mac OS 10.6.8 с двумя видеокартами a: встроенная графика Intel HD и 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_())

На обоих компьютерах печатаются все три сообщения "Quad Buffered Stereo работает".
На рабочей станции, готовой к работе со стереозвуком, со стереомонитором с частотой 120 Гц фон окна выглядит бледно-зеленым, поскольку при 120 Гц он переключается между желтым и голубым цветами. На мониторе с частотой 60 Гц можно почувствовать мерцание, вызывающее судороги, между двумя цветами. Это мерцание также появляется на ноутбуке, предполагая, что, возможно, он действительно поддерживает стерео с четырьмя буферами?

Одна последняя морщина: если я подключаю ноутбук к внешнему монитору, я вижу мерцающую суперпозицию на внешнем мониторе, но на экране ноутбука окно имеет желтый цвет, то есть только цвет буфера BACK_LEFT. Я вижу только мерцающий фенотип только на экране ноутбука или только на внешнем мониторе.

Действительно ли видеокарта GeForce 330M поддерживает стерео с четырьмя буферами на Mac? Есть ли лучший способ обнаружить настоящую плату Quadro из моей программы?

1 Ответ

1 голос
/ 07 сентября 2012

Все компьютеры Mac, которые я тестировал, поддерживают стерео с четырьмя буферами.Даже с так называемыми видеокартами потребительского уровня (т.е. не Quadro).Это объясняет, почему даже мой ноутбук утверждает, что поддерживает стерео.Потому что это так.

Чтобы доказать, что все Mac поддерживают стерео с четырьмя буферами, мне потребовалось 3D-оборудование, которое принимает стереофонический последовательный кадр без сигнала синхронизации.Теперь у меня есть это на работе.И я смотрю красивое стерео с четырьмя буферами на компьютерах Mac.Это круто.Так почему же я не могу найти продавца, который продает Mac-ориентированные стерео-решения?Эта прекрасная возможность скрыта на Mac, и никто, кажется, не понимает, что она там есть.

...