2012-02-15 14 views
-1

SDLからOpenGLに切り替え始めたばかりで、SDLを使用していたときにこの問題が発生しています。多くのものが画面に表示されているときにOpenglが遅くなる

画面にたくさんのものがあると、全体がスローモーションになります。そして、私はたくさんの私は200個の以上のオブジェクトを意味すると言うが、これは物事のレンダリング方法である50

から多分顕著になり始めると、私はそのループvoid manage()RenderManagerによって呼び出されvirtual void render()class Renderableを持っています画面上のRenderableごとにrender()と呼び出します。私が使用しているオブジェクトに対して、この

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glLoadIdentity(); 

_renderManager.manage(); 

glFlush(); 
SDL_GL_SwapBuffers(); 

render()は唯一の正方形いるようなメインループに見える

ので

glBegin(GL_QUADS); 
// Draw square with colors 
glEnd(); 

私のCPU使用率やメモリ使用量が高いと思われませんまったく同じように、ゲームは減速しています。

+0

ここでは、実際には何も進んでいないため、コードを絞り込んだり、コードを追加したりする必要があります。 –

+0

個々のコンポーネントのタイミングを調整して、何が最も時間を費やしているのか確認しましたか? – cmannett85

答えて

1

パフォーマンスの問題がある場合は、即時モードを使用しているということがあります。頂点アレイを使用する必要があります。

コードのすべてがわからないので、完全な答えを出すのは難しいですが、頂点配列を使用することは、物事がゆっくり進む場合には確実に行うべき最初のステップです。

こちらをご覧ください:基本的事実は頂点配列で、あなたの形状を事前に計算しながら、glBegin ... glEndであなたはGPUに多くのコールをやってしまうということですhttp://www.songho.ca/opengl/gl_vertexarray.html

、あなたは直接バッファに保存し、それを描画して、かなりの量のコールを減らします。

+0

それは問題を解決しませんでした。 – SpaceFace

+6

あなたは何かを提供しなければなりません。あるいは、私たちはまったく手助けできません。即時配列から頂点配列に10分でどのように切り替えることができましたか? :) – Jack

+0

真実はそれ以上表示されることはありません。画面上にたくさんの矩形を描画するのは今のように簡単です。上のコードは、今すぐ呼び出されている唯一のOpenGL関連のコードです。私は前にopenglを使ったことはありません、ここに足りないステップがありますか?そのため、頂点配列に切り替える時間はありませんでした。 – SpaceFace

0

申し訳ありませんが、私はOpenGLを使用したことはありませんでした。私は何をしているのか全く分かりませんでしたが、解決策を見つけました(そして今、それに取り組んでいます)。また、あなたに感謝してくれてありがとう!私は間違いなく頂点配列を使用しています。glBegin()とglEnd()は推奨されていません。私は頂点バッファオブジェクトを試してみるかもしれません。

各ループはRenderableで、それぞれのループに対してRenderManagerがrender()を呼び出すとglBegin()とglEnd()が呼び出されていました。それはGPUに多くのストレスを与えます。

この回答を書いている時点では、にすべての頂点を追加する私のRenderManagersendVertices(GLfloat vertices[]);があります。 RenderManagerためのループの間、私は、頂点ポインタ

glVertexPointer(2, GL_FLOAT, 0, &vertices[0]);

を作り、それが頂点に基づいて、一度にすべてをレンダリング

glDrawArrays(GL_QUADS, 0, vertices.size()/2);

だからではなく、各オブジェクトのレンダリングを呼び出します。今、私は800以上のオブジェクトで減速し始めます。偉大ではありませんが、まだやるべきことがたくさんあります。現在のところ、verticesベクトルは変更されずに各ループが再作成されるためです。また、これは色を考慮していませんが、正しい軌道に乗っています!

もともと頂点配列に切り替えるのは、それぞれのオブジェクトごとにまだレンダリングされていたためにあまり差がないため、が200+ Renderableのそれぞれに対して呼び出されていました。

EDIT:十分な情報を与えていないため

また申し訳ありませんが、私は問題が明らかであろうと想定思います。私は自分自身にどんな自信を持っていますか?ハハ。

関連する問題