OpenGLからイメージBACKをロードするには?

私はGTKmmライブラリからGdk :: Pixbufを使ってテクスチャとしてOpenGLにイメージをロードするのに成功しましたが、OpenGLからイメージを変更してGdk :: Pixbufにロードする方法はわかりません。

私はOpenGLで画像を修正し、ハードディスクに保存したい。

いくつかのコードがあります:

Glib::RefPtr pixmap = Gdk::Pixbuf::create_from_file("image.jpg");
GLuint texture[1];
glBindTexture(GL_TEXTURE_2D, texture[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pixmap->get_width(), pixmap->get_height(), 0,      GL_RGB, GL_UNSIGNED_BYTE, pixmap->get_pixels() );
4
StackOverflowへようこそ。あなたはよくある質問を読んでください。
追加された 著者 Christian Rau,

3 答え

OpenGL ESを使わず、実際のデスクトップOpenGLを使用している限り、 glGetTexImage をクリックします。

4
追加された

テクスチャ付きクワッドをフレームバッファにレンダリングし、 glReadPixels()

4
追加された
@Damonテクスチャデータは、テクスチャへのレンダリング、つまりテクスチャを付けたフレームバッファへのレンダリングを使用して変更できます。したがって、テクスチャデータを読み返すことは場合によっては意味をなさない。
追加された 著者 Gigo,
彼はOpenGL ESにタグを付けていないので、テクスチャ付きクワッドを描画することは、単に glGetTexImage を使うだけの良い方法ではありません。
追加された 著者 Christian Rau,
@Damonおそらく。
追加された 著者 Christian Rau,
@ChristianRau:しかし、OPは "OpenGLで画像を変更したい"と言っていたので、glGetTexImageは以前にアップロードされたテクスチャ画像を読み込むだけなので、おそらく必要ではありません(これは私が理解できなかった機能の1つですなぜ存在するのか)。 「変更された」ものを読み返すために、genpfaultが示唆しているように、テクスチャ付きのクワッド(何らかの「操作」、おそらくシェーダ)を描くようなものが必要です。
追加された 著者 Damon,
@ギーゴ:OPが望んでいる正確に(「変更」はあまり具体的ではない)ものがわからないので、わかりにくいかもしれません。確かに、あなたはそうすることができます。既存の画像の上にいくつかのジオメトリを描画しても問題ありません。しかし、「イメージを修正する」という通常の考え方は異なるものです。イメージを読み込んで、何らかの畳み込みなどを適用することが普通です。同じイメージへの読み書きは未定義です(アトミック操作は遅いですが、ベンダー拡張機能との間では明示的な同期を使用します)。これは通常、同じものではなく異なる異なるテクスチャを読み込むことを意味します。
追加された 著者 Damon,

描画呼び出しを避けたい場合は、フレームバッファを作成してテクスチャをカラーアタッチメントに貼り付けてから、glReadPixels

0
追加された