glXChooseVisual - поертає візуальний компонент, який співпадає з вказаними атрибутами.

C-специфікація

XVisualInfo* glXChooseVisual (Display * dpy, 
                              int screen, 
                              int* attribList) ;

 

Параметри

dpy вказує підключення до X-сервера.

screen вказує номер екрану.

attribList вказує список булевих атрибутів і цілочисельні пари атрибут/значення. Останній атрибут повинен містити значення None.

Опис

Функція glXChooseVisual повертає вказівник на структуру XVisualInfo, яка описує візуальний компонент, який найкраще співпадає мінімальну специфікацію. Булеві атрибути GLX візуального компоненту, які повертаються будуть співпадати з вказаними значеннями, і цілочисельні атрибути GLX будуть співпадати або перевищувати вказані мінімальні значення. Якщо усі інші атрибути являються еквівалентними, тоді візуальні компоненти TrueColor і PseudoColor мають пріоритет над DirectColor і StaticColor відповідно. Якщо не існує відповідного візуального компоненту, повертається значення NULL. Для того щоб вивільнити отримані за допомогою даної функції дані, використовуйте XFree.

Усі булеві атрибути GLX мають значення за умовчанням False, окрім GLX_USE_GL, який має значення True. Усі цілочисельні атрибути GLX мають нульове значення за умовчанням. Атрибути за умовчанням витісняються атрибутами вказаними у параметрі attribList. Булеві атрибути вказані у attribList вважаються з значенням True. За цілочисельними атрибутами і пронумерованими типами абтрибутів одразу вказуються відповідні бажані або мінімальні значення. Список повинен закінчуватися значенням None.

Інтерпретація деяких візуальних компонентів GLX наступна:

  • GLX_USE_GL. Ігнорується. Розглядаються тільки візуальні компоненти, які можуть малювати за допомогою GLX.
  • GLX_BUFFER_SIZE. Повинне вказуватися разом з позитивним цілим числом, яке індику бажаний розмір буферу колірного індексу. Обирається найменший індексний буфер мінімального вказаного розміру. Ігнорується при використанні компоненту GLX_RGBA.
  • GLX_LEVEL. Повинен вказуватися разом з цілочисельним значенням специфікації рівня буферу. Дана специфікація повинна трактуватись точно. Рівень буферу нуль відповідає головному буферу кадру дисплея. Перший рівень буферу відповідає першому вищестоячому буферу кадру, другий рівень - другому вищестоячому буферу кадру, і т.д. Негативні значення рівнів буферу відповідають нижчестоячим буферам кадрів.
  • GLX_RGBA. Якщо присутні, розглядаються тільки візуальні компоненти TrueColor і DirectColor. В іншому випадку, розглядаються тільки PseudoColor і StaticColor.
  • GLX_DOUBLEBUFFER. Якщо присутні, розглядаються тільки компоненти з подвійним буфером. В іншому випадку, розглядаються тільки візуальні компоненти з одинарним буфером.
  • GLX_STEREO. Якщо присутні, розглядаються подвійні візуальні компоненти. В іншому випадку, розглядаються тільки односкопічні візуальні компоненти.
  • GLX_AUX_BUFFERS. Повинен вказуватися разом з позитивним цілим числом, яке вказує бажане число допоміжних буферів. Надається перевага візуальним компонентам з меншим числом допоміжних буферів, які відповідають або перевищубть вказані параметри.
  • GLX_RED_SIZE. Повинен вказуватися разом з позитивним числом мінімального розміру . Якщо це значення 0, надається перевага найменшому доступному буферу червоного компоненту кольору. В іншому випадку, обирається буфер з найбільшим доступним розміром для червоного компоненту кольору, або хоча-б вказаного розміру.
  • GLX_GREEN_SIZE. Повинен вказуватися разом з позитивним числом мінімального розміру . Якщо це значення 0, надається перевага найменшому доступному буферу зеленого компоненту кольору. В іншому випадку, обирається буфер з найбільшим доступним розміром для зеленого компоненту кольору, або хоча-б вказаного розміру.
  • GLX_BLUE_SIZE. Повинен вказуватися разом з позитивним числом мінімального розміру. Якщо це значення 0, надається перевага найменшому доступному буферу синього компоненту кольору. В іншому випадку, обирається буфер з найбільшим доступним розміром для синього компоненту кольору, або хоча-б вказаного розміру.
  • GLX_ALPHA_SIZE. Повинен вказуватися разом з позитивним цілим числом мінімального розміру. Якщо це значення 0, надається перевага найменшому доступному буферу компоненту прозорості кольору. В іншому випадку, обирається буфер з найбільшим доступним розміром для компоненту прозорості кольору, або хоча-б вказаного розміру.
  • GLX_DEPTH_SIZE. Повинен вказуватися разом з позитивним числом мінімального розміру. Якщо вкзане значення 0, обираються візуальні елементи без буферу глибини. В іншому випадку, обирається буфер глибини з найбільшим або хоча-б вказаним розміром.
  • GLX_STENCIL_SIZE. Повинен вказуватися разом з позитивним цілим числом, яке вказує бажану кількість комірок трафарету. Надається перевага найменшому буферу трафарету, або хоча-б з вказаним розміром. Якщо вказане значення 0, обираються візуальні компоненти без буферу трафарету.
  • GLX_ACCUM_RED_SIZE. Повинне вказуватися разом з позитивним цілим числом розміру. Якщо вказане значення 0 - обираються візуальні компоненти без буферу накопичення червоного кольору. В іншому випадку, обирається буфер з найбільним розміром, або хоча-б з вказаним розміром.
  • GLX_ACCUM_GREEN_SIZE. Повинне вказуватися з позитивним числом мінімального розміру. Якщо вказано значення 0 - обираються візуальні компоненти без буферу накопичення червоного компоненту. В іншому випадку, обирається найбільший з можливих буферів, або хоча-б з вказаним розміром.
  • GLX_ACCUM_BLUE_SIZE. Повинен вказуватися разом з позитивним цілим числом мінімального розміру. Якщо вказане значення 0, обираються компоненти без буферу накопичення зеленого копоненту. В іншому випадку, обирається найбільший можливий буфер накопичення, або хоча-б з вказаним розміром.
  • GLX_ACCUM_ALPHA_SIZE. Повинен вказуватися з позитивним цілим числом мінімального розміру. Якщо вказане значення 0, обираються компоненти без буферу накопичення компоненту прозорості. В іншому випадку, обирається буфер з найбільним розміром, або хоча-б з вказаним розміром.

Приклади

attribList =

    {GLX_RGBA, GLX_RED_SIZE, 4, GLX_GREEN_SIZE, 4, GLX_BLUE_SIZE, 4, None} ;

Позначає однобуферний RGB візуальний компонент в звичайному буфері кадру, а не верхньо розміщений або нижчестоячий буфер. Отриманий візуальний компонент підтримує хоча-б чотири біти для червоного, зеленого і синього, і можливо жодні біти для компоненту прозорості. Він не підтримує режим колірного індексу, подвійну буферизацію, або стереодисплеї. Він може або не може мати один або більше допоміжних колірних буферів, буфер глибини, буфер трафарету, або буфер накопичення.

Нотатки

Структура XVisualInfo визначена у Xutil.h. Це є структура, яка включає елементи visual, visualID, screen і depth.

Функція glXChooseVisual реалізовується у якості утиліти клієнтської сторони, використовуючи тільки XGetVisualInfo і glXGetConfig. Виклики до цих двох підпрограм можна використати для реалізації алгоритмів обрання відмінних від загальної реалізації у функції glXChooseVisual.

Реалізаціям GLX не рекомендується, але не забороняється, змінювати алгоритм обрирання, який використовується у функції glXChooseVisual. Отже, спосіб обирання може змінюватися між випусками у бібліотеці клієнтської сторони.

Немає прямого фільтру для обирання тільки візуальних компонентів, які підтримують GLXPixmaps. GLXPixmaps підтримуються для візуальних компонентів, яких GLX_BUFFER_SIZE являється одним з картів пікселів глибини, яку підтримує X-сервер.

Помилки

NULL повертається, якщо вказаний невизначений атрибут GLX у attribList.

Перегляньте також

glXCreateContext, glXGetConfig

Оригінал

https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glXChooseVisual.xml