2011-01-11 13 views
3

PCのOpenGLアプリケーションとiPhone Appを1つのXCodeプロジェクトに移行する可能性を探します(便宜上)。だから私がこれらのソースファイルにチャンスを作ったら、両方のplattformsにこれを適用して、両方のplattformを1つのプロジェクトからコンパイルできるようにしたいと考えています。どのように私はこれを達成することができますか? XCode 4または3.25でこれを行う方法はありますか?どんな助けも高く評価されますこれらのOpenGL関数をOpenGL ESに置き換えますか?

編集:さて、私はこれまでに行きました - すべてで、XCode 4で動作するようです。 私の唯一の問題は、iPhoneで動作していないこれらのOpenGL/

glPushAttrib(GL_DEPTH_BUFFER_BIT | GL_LIGHTING_BIT); 
glPopAttrib(); 
glutGet(GLUT_ELAPSED_TIME); 
glutSwapBuffers(); 

これらの問題を解決する方法はありますか?

+0

ながら特定しないようにOpenGLアプリケーションの場合、この質問には次のような質問があります。[iPhone /デスクトップアプリケーションと同じコードベース](http://stackoverflow.com/questions/4617166/same-code-base-for-iphone-desktop-app) –

+1

GL ESでエンジンを書いたほうがずっと良いですし、PC用のOpenGLに相当するものが登場しました... – Goz

+0

NDAに違反することなく、両方のプラットフォームをターゲットにしたプロジェクトを作成するためにXcode 4の新機能が必要でしたか? –

答えて

3

PushAttrib/PopAttrib手動でそれらの状態を追跡するコードを自分で交換する必要があります、またはあなたはそれらの状態に依存しているものは、それら自体を設定するように、あなたのコードを書き換えることができます。

glutGet(GLUT_ELAPSED_TIME)は、mach_absolute_time(特に簡単ではありませんが、使用する正しいこと)または[NSDate timeIntervalSinceReferenceDate](単調に増加することは保証されていないため、

glutSwapBuffersはEAGLContextに置き換えられます(ただしこれはすでに行っているようですが、そうでなかった場合は何も見えません)。

2

あなたはあなたのデスクトップのOpenGLの実装をラップとOpenGL ES 1.xのインタフェースを提供するために、dglesを使用することができます。

2

私はこのdocumentation onlineは、OpenGL ES 1.0の仕様

に関しては1種類または内部状態の別を動的にする必要がありAP- plication.Theアプリケーションによって照会する必要がありますいくつかの理由がありますが見つかりました実装の限界(ピクセルコンポーネントサイズ、テクスチャディメンションなど)を発見したり、アプリケーションがレイヤードライブラリの一部であり、レンダリングの一部として妨害される状態を保存して復元する必要が生じる場合があります。 PushAttrib andPopAttribはこれを実行するために使用することができますが、彼らは実装して使用しているため、彼らは多くの場合、その動的な状態の異なる種類を分割しようとするよりもperformance.Ratherに有害であると言えば、状態クエリが推奨されerally supported.Gen-ないように高価であり、たとえば、マトリックススタックの最上位を照会することができます。動的状態クエリーはサポートされず、アプリケーションはパイプラインを照会するのではなく、状態の変化をシャドーする必要があります。これは階層化されたライブラリでは困難ですが、属性のプッシュとポップがあります。

これとこのother link hereは、あなた自身でこれらのビットを追跡する必要があると思われるようです。そこにあなたのための助けはありません。

供給過剰はちょうどええ、システムのコードを呼び出しますか? (wglSwapBuffers、glxSwapBuffers)

このhereeglSwapBuffers、多分this book out

は申し訳ありませんが、私はあなたのためのより具体的な答えを持っていないしてみてください。

1

欠如はattribsを押す一見単純な機能によって、非常にイライラが、あなたは、PARAMを設定する前に、あなたが何かの状態を取得するglGetto使用することができます私のために働いている。このような:

Boolean tmpB; 
int tmpSrc,tmpDst; 

glGetBooleanv(GL_BLEND,&tmpB); 
glGetIntegerv(GL_BLEND_SRC_ALPHA,&tmpSrc); 
glGetIntegerv(GL_BLEND_DST_ALPHA,&tmpDst);  


glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
//draw rectangle 
CGSize winSize=[[CCDirector sharedDirector] winSize]; 
CGPoint vertices[] = { ccp(0,0), ccp(winSize.width,0), ccp(winSize.width,20), ccp(0,20) }; 
glColor4ub(255, 0, 255, 55); 
ccFillPoly(vertices, 4, YES); 


if(!tmpB) 
    glDisable(GL_BLEND); 

glBlendFunc(tmpSrc, tmpDst);