3

Mac OS X用のドキュメントベースのアプリケーションを開発しています。これは一種のメディアプレーヤーですが、オーディオまたはビデオファイルを再生する代わりに、OpenGLアニメーションを指定するメタデータを含むテキストファイルを開くことになっています。ApplesQuickTimeXウィンドウスタイルを模倣したいと思います。つまり、Cocoaには適切なウィンドウスタイルがないため、すべてのウィンドウ描画を自分で行う必要があります。

私に頭痛の種を与えることが1つあります。それは、MacOSXウィンドウで通常見られる丸い角です。ボーダレスウィンドウマスクを使用して、CGSの魔法を使ってみました。ウィンドウの整形を可能にするプライベートAppleヘッダーがいくつかありますが、もちろんそれらは文書化されていません。窓の端に長方形の穴を開けることはできたが、Appleがどのようにして角を丸くしたのか理解できなかった。

OpenGLビューポートは常に長方形であるため、透明なウィンドウを作成して自分でフレームを描画することはできません。これを変更する唯一の方法は、アルファ透明度のNSOpenGLCPSurfaceOpacityをオンにし、ステンシルバッファまたはシェーダーを使用してエッジを切り取る方法です。かなりのオーバーヘッドの地獄のようです。

OpenGLViewをタイトルバー付きの標準のCocoaウィンドウに配置すると、下端が丸くなります。これは、ビュー階層のNSThemeFrameステージで発生しているようです。これがどのように行われるかについてのアイデアはありますか?

4

2 に答える 2

1

レイヤーバックビューを使用して、非CALayer表示のウィンドウで描画を行います。レイヤーには、丸みを帯びたコーナーとボーダーの自動処理が含まれます。


の背景CALayerは、CoreAnimationプログラミングガイドにあります。のレイヤーを作成するにはNSView、を呼び出す必要があります[view setWantsLayer:YES]。を作成し、CAOpenGLLayerを使用してビューに割り当てますsetLayer:

他のレイヤータイプの中で使用する方法を示すサンプルコードについては、 CALayerEssentialsを参照してください。CAOpenGLLayer

于 2011-12-07T13:47:14.600 に答える
0

Robsの提案は機能せず、他の誰も議論に貢献しなかったので、私はステンシルバッファを使用してウィンドウの隅を切り抜くことに決めました。これを行うには、Windowsの背景からテクスチャを作成し、それをステンシルバッファにレンダリングして、すべての透明なピクセルを破棄します。見た目は問題ありませんが、ウィンドウのサイズを変更すると遅くなります:/

于 2011-12-08T21:51:07.310 に答える