3

編集:この質問はコメントで間接的に回答されています(GLUTを使用していずれかの必要性を回避しています)が、回答として投稿されていないため、問題は解決しましたが「受け入れる」ことはできません。

C++ で記述されたクロスプラットフォームの OpenGL アプリケーションがあります。これは (Mac OS X 上で) ウィンドウの作成とメッセージ ポンプに Carbon を使用します (Think...NeHe レッスン 1)。C++11 機能を利用する私のコードへの最近の変更により、XCode にバンドルされている GCC と互換性がなくなりました。

MacPorts、HomeBrew などのシステムを使おうとする私の試みはすべて、さまざまな理由で失敗しました (主に、Carbon をサポートするために 32 ビットをコンパイルする必要があるためです)。私は当初、Mac OS X 10.8 に更新された G++ をインストールするためのより良い解決策があるかどうかを尋ねるつもりでした。

それは近視眼的な解決策のように思えます (ある時点で、Cocoa と 64 ビットにアップグレードする必要があります)。そのため、私の質問は、既存の (非常に大きな) アプリケーションでこのタスクに Cocoa を利用させる最も簡単な方法は何かという質問に発展しました。むしろカーボン?

私はすべての「Carbon Code」を独自の個別の .cpp/.h ファイルに入れています。このファイルには、OpenGL ウィンドウを作成する機能と、ReceiveNextEvent を使用するメッセージ ポンプの機能の 2 つしかありません。


編集: より明確にするために、既存のCarbonウィンドウの作成とメッセージポンプ機能の代わりに(多かれ少なかれ)ドロップを設計する最良の方法を探していますが、Cocoaで。異なる API であり、異なる言語概念を使用しているため、単純な 1 対 1 のコマンド置換では不十分であることを理解しています。私の既存のコードには、InitWindow と DoEvents というコア タスクを (Carbon で) 実行する 2 つの関数を含む Mac 用のソース コード ファイルがあります。これらはウィンドウを作成し、保留中のイベントをそれぞれ循環します。私の目標は、このソース コード ファイルを Cocoa を使用するものに置き換えて、同じ機能を公開することで、私のコア コードをほとんどまたはまったく変更しないようにすることです。

私の目標を達成するための最良の方法は何ですか? 私は Cocoa に慣れていないので、Obj-C は私にとってなじみがありません。

4

1 に答える 1

0

Cocoa 64 ビットへの移行は、間違いなく素晴らしいアイデアのように思えます。また、ユーザーを満足させたい場合は、ネイティブ UI を使用することをお勧めします。

最も簡単な方法は、 を含む を作成するNSWindowことNSOpenGLViewです。これは、Interface Builder またはコードで行うことができます。おそらく、Xcode のテンプレート ([ファイル] > [新しいプロジェクト] > [Cocoa アプリ]) を使用して新しい Cocoa アプリを作成するのが最善の方法です。これにより、デフォルトでウィンドウが表示されます。これを Interface Builder で開き、 を追加できNSOpenGLViewます。ビューを のカスタム サブクラスにしてNSOpenGLView、それにイベント処理を追加できます。NSResponderCocoa がイベントをディスパッチする方法の詳細については、ドキュメントを参照してください。

于 2012-09-14T05:17:21.687 に答える