Как определить возможность стереобуферизации с четырьмя буферами на Mac?

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

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

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

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

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


person Christopher Bruns    schedule 27.03.2012    source источник


Ответы (1)


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

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

person Christopher Bruns    schedule 07.09.2012
comment
Не могли бы вы дать более подробную информацию о вашем аппаратном решении? - person JWWalker; 07.09.2012
comment
@JWWalker Мы используем на работе 3D-проектор Christie. Эти проекторы поддерживают стереофонический режим с удвоением кадров. Но они, вероятно, находятся за пределами потребительского ценового диапазона. christiedigital.com/en-us/ 3D/продукты и решения/проекторы/ - person Christopher Bruns; 07.09.2012
comment
Да, они даже не указывают цены на своем веб-сайте, так что это, вероятно, выходит за рамки моего диапазона. Но спасибо. - person JWWalker; 07.09.2012