戻る トップ

OpenGL AUXによるフレームバッファ描画ウインドウ

glDrawPixels()によるフレームバッファとAUXのウインドウ

VC++には、標準でOpenGLとその補助ライブラリAUXの開発環境が入っています。これらの実行環境は、Windowsにも標準で入っているので、ちょっとした画像ソフトを作るときなどは重宝しそうですね。OpenGLというと3Dグラフィックスのライブラリ、という印象が強いですが、2Dグラフィック用の機能も充実しています。
今回は、OpenGLのフレームバッファ描画機能とAUXのウインドウ作成機能で、「640*480ピクセルの32ビットフルカラーフレームバッファを描画するウインドウ」を作成してみました。

プログラムソース
#include <windows.h>
#include <GL/gl.h>
#include <GL/glaux.h>

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glaux.lib")

/* フレームバッファ */
unsigned int adwPixel[640 * 480];

GLvoid CALLBACK draw(void) {

	glClear(GL_COLOR_BUFFER_BIT);

	/* フレームバッファを描画 */
	glDrawPixels(640, 480, GL_RGBA ,GL_UNSIGNED_BYTE ,adwPixel);

	glFlush();

}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow) {

	int x, y;
	unsigned int dwR, dwG, dwB, dwA;

	/* フレームバッファ設定 */
	for (x = 0;x < 640;x++) {
		for (y = 0;y < 480;y++) {

			dwR = y / 2;
			dwG = 255 - (y / 2);
			dwB = 128 - (y / 4);

			dwA = 255;

			/* 各値はABGRになる? */
			adwPixel[x + y * 640] = (dwA << 24) + (dwB << 16) + (dwG << 8) + dwR;

		}
	}

	auxInitDisplayMode(AUX_SINGLE | AUX_RGBA | AUX_DEPTH);

	auxInitPosition(0, 0, 640, 480);

	auxInitWindow(szCmdLine);

	auxMainLoop(draw);

	return 0;

}

VC++では、Win32プロジェクトでそのままコンパイルできると思います(Borland C++やC++ Builderでは、#pragma文を削除してライブラリのリンク設定が必要かも)。Linuxなどその他のOpen GL+AUXの環境でも、少しの修正(#pragma文の削除やmain関数への修正)でビルドできる……のかな?

AUXではマウスも使えますから、フルカラーの画像をマウス操作でいじるようなちょっとした画像ソフトならOpenGL+AUXだけで作れそうですね。まあ、普通はGLUTを使うんでしょうけど。


トップ 戻る