このルーチンでは、優先順位の高い順に条件集合を指定することができます。すなわち、単一の呼び出しで複数の条件集合が指定できます。まず、最初の条件集合に合致するビジュアルの探索がルーチンにより行われ、最初の条件集合のすべてのハード条件を満たすビジュアルが見つかると、そのビジュアルが選択されます。そのようなビジュアルが見つからない場合は、2 番目の条件集合を使用して探索が続けられます。このような手続きは、特定の条件集合のすべてのハード条件を満たすビジュアルが見つかるか、すべての条件集合のテストが終了するまで続けられます。すなわち、この優先順位の仕組みでは、もっとも望ましいビジュアルを最初の条件集合として指定し、それより優先度の低いビジュアルについては 2 番目以降の条件集合として指定すればよいわけです。この仕組みにより、単一のサブルーチン呼び出しで、ビジュアルに関するユーザーの要求を優先順位の高い順に探索することができます。
特定の条件集合では、任意の条件をハード条件またはソフト条件として指定することができます。特定の条件の hardCriteriaMask は、探索時にハード条件として指定する条件ビットマスクの論理和です。同様に、softCriteriaMask はソフト条件ビットマスクの論理和です。
条件の中には特定の値を取るものがあります。これらの値は、XSolarisOvlVisualCriteria 構造体の他のデータメンバによって提供されます。以下の条件の説明では、これらのデータメンバを必要に応じて取り上げます。
XSolarisOvlVisualClass は、選択されたビジュアルが特定のビジュアルクラスを持つことを指定します。そのビジュアルクラスは c_class で指定します。
XSolarisOvlDepth, XSolarisOvlMinColors, XSolarisOvlMinRed, XSolarisOvlMinGreen, XSolarisOvlMinBlue の各条件は、相互に関連があります。通常は、これらの条件の一部だけを指定します。
XSolarisOvlDepth は、選択されたビジュアルのデプスが depth に等しくなることを指定します。
XSolarisOvlMinColors は、選択されたビジュアルで表示可能なカラーの総数が少なくとも minColors 個であることを指定します。
XSolarisOvlMinRed、XSolarisOvlMinGreen、XSolarisOvlMinBlue を使用すれば、DirectColor ビジュアルまたは TrueColor ビジュアルについて詳細なカラー条件を指定することができます。各条件に対応する値はそれぞれ、minRed、minGreen、minBlue で指定します。これらのデータメンバの値は、選択されたビジュアルの赤、緑、青の要素値の下限を指定するものです。
XSolarisOvlMinBitsPerRGB は、選択されたビジュアル上で作成されるカラーマップからのカラーチャネル出力が少なくとも minBitsPerRGB であることを指定します。
XSolarisOvlMinBuffers は、選択されたビジュアルに少なくとも minBuffers 個の高速 MBX イメージバッファを割り当てることを指定します。
XSolarisOvlUnsharedPixels は、引数のビジュアル vid のウィンドウピクセルとは異なる描画プレーングループ内に存在するウィンドウピクセルを持つパートナビジュアルを選択します。この条件下では、引数のビジュアルと同じ描画プレーングループを使用するビジュアルは選択されません。
XSolarisOvlUnsharedColors は、オーバーレイ/アンダーレイのウィンドウペアがカラーマップのフォーカスを保持しているときに、ウィンドウピクセルのカラーを同時に表示できるようなパートナビジュアルを選択します。この条件下では、ビジュアルが単一のカラー LUT プールを共有し、そのプール内に引数のビジュアルと同じカラー LUT が 1 個しか存在しない場合、そのビジュアルは選択されません。
条件集合の hardCriteriaMask をゼロに設定すると、任意のビジュアルがその条件集合のハード条件を満たすことになります。同様に、条件集合の softCriteriaMask をゼロに設定すると、その条件集合のソフト条件は必ず満たされることになります。