画面に表示せずにオフラインでレンダリングできることは知っていました。
どうしよう、たぶん
非表示のウィンドウを作成して描画します。
レンダリング時に特定の fbo を使用できますか?
次のようなものを使用して、フレームバッファ オブジェクトを作成できます。
GLint fbo, tex; // "handles" for framebuffer and it's texture
glGenFramebuffersEXT(1, &fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
// setup texture for colour attachment
glGenTextures(1, &tex);
glEnable(GL_TEXTURE_2D);
glDisable(GL_COLOR_MATERIAL);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// set a size fotr the texture, but not any initial data
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, fbo_resX, fbo_resY, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
// You might want a depth attachment here too perhaps?
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex, 0);
const GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
assert(status == GL_FRAMEBUFFER_COMPLETE_EXT);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
次に、次のように使用します。
// specify which FBO to use
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
// glDraw...
// return to the default
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
好きなように複数のフレームバッファを作成し、好きなときにそれらにバインドできます。(ギブオアテイク)。これを使用するには、有効な OpenGL コンテキストが必要です。これは通常、ほとんどのプラットフォームでウィンドウを作成することに似ていますが、そのウィンドウに何かを描画する必要はありません。