openGL ESで、EAGLViewにc言語で描画は可能?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
stormrider

openGL ESで、EAGLViewにc言語で描画は可能?

#1

投稿記事 by stormrider » 13年前

xcode4.2を使って開発しています。
objective-cでopenGL ESの描画をしていたのですが、
これをc言語での記述に書き換えています。
現在、objective-cで完成しているコードを部分的にcに置き換えているところです。

テクスチャの作成(glTexImage2D)まではc言語に置き換えられたのですが、
それ以降のglVertexPointerやglDrawElementsをc言語の関数内で実行すると、画面に表示されません。

http://webos-goodies.jp/archives/gettin ... phone.html
このサイトを参考に、EAGLEViewに設定したframebufferとcolorbuferをc言語の関数に送り、処理の前後で

コード:

glBindFramebufferOES(GL_FRAMEBUFFER_OES, frameBuffer);
 ...
glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorBuffer);
と挟んでみたのですが、やはりうまくいきません。
(openGLはプロパティを内部に保持しているので一度どこかで設定をすればこのような値のやりとりは
必要ないような気もするのですが、obj-cとほぼ同内容のソースをcに持ってくると途端に動かなくなるため、
思いつくことは手当たり次第試しています。)

macでc言語でopenGL ESとなるとネット上にもなかなか情報が見つかりません。
EAGLViewにc言語で描画するには、何が足りていないのでしょうか?

ぬっち
記事: 105
登録日時: 14年前
連絡を取る:

Re: openGL ESで、EAGLViewにc言語で描画は可能?

#2

投稿記事 by ぬっち » 13年前

OpenGLは使用したことがありますが、ESは無いのではっきりしたことは言えませんが、glEnableClientState(GL_VERTEX_ARRAY);
を忘れていたりとかはしませんか?

私はこれが無くて、表示されずちょっと悩んだことがあります。

stormrider

Re: openGL ESで、EAGLViewにc言語で描画は可能?

#3

投稿記事 by stormrider » 13年前

glEnableClientState(GL_VERTEX_ARRAY)はobjective-cの部分でやってます。
念のためcの内部でも呼んでみましたがだめでした。
同じ内容のコード(文法が違うところは直してますが)なのに、
objective-cで書いたものを一部cに持ってきただけで
なぜ表示ができなくなるのか、どなたかおわかりにならないでしょうか。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: openGL ESで、EAGLViewにc言語で描画は可能?

#4

投稿記事 by ISLe » 13年前

スレッドコンテキストが異なるとか。
それで動かなくなるのはウィンドウズ上だけかもしれないですけど。

stomrider

Re: openGL ESで、EAGLViewにc言語で描画は可能?

#5

投稿記事 by stomrider » 13年前

コンテキストというのが何なのかよくわかっておらずおまじない状態なのですが、解決はしました。

コード:

    EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
    self.context = aContext;
    [aContext release];
	
    self.view = [[EAGLView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    [(EAGLView *)self.view setContext:context];
最初は、EAGLViewとviewControllerで上記のようにコンテキストを共有した上で、
viewControllerがEAGLViewのメソッドを呼び出してコンテキストを設定し、
その後ViewControllerからopenGLの関数を呼び出して描画ができていました。

しかし、コンテキストを設定した後viewControllerからc言語の描画関数を呼び出すと、
画像が表示されなくなりました。

最終的に、EAGLViewの中でコンテキストを設定した後、
EAGLViewから直接cの描画関数を呼び出すとうまく行きました。

しかし、なぜこの方法ならよく、間にviewControllerから間接的に呼び出すのではいけないのか、疑問に思っています。
コンテキストはopenGlのClientStateなどのように、グローバルに保存されるものではないのでしょうか?

原理が気になっていますので、この説明で原因がお分かりになる方
いらっしゃいましたら、お教えいただけると助かります。

閉鎖

“C言語何でも質問掲示板” へ戻る