しんさんのブログ

科学や技術のこと読書のことなど

モダンOpenGLで遊んでみる windowが開いた

以下の記事の、”チュートリアル1:ウィンドウを開く”
チュートリアル1:ウィンドウを開く | opengl-tutorial.org
でとりあえずウィンドウが開きました。
何も描画していないので、真っ黒なウィンドウです。

同時にglfwについて、もう少し調べてみました。
床井さんのページにglfwについてまとめた記事がありましたので、それを参考にしました。
床井研究室 - (1) GLFW で OpenGL を使う

大まかなプログラムは以下のような感じです。

#include <stdio.h>
#include <stdlib.h>

// Include GLEW
#include <GL/glew.h>

// Include GLFW
#include <glfw3.h>
GLFWwindow* window;
 
int main(int argc, char *argv[])
{
	// Initialise GLFW
	if( !glfwInit() )
	{
		fprintf( stderr, "Failed to initialize GLFW\n" );
		return -1;
	}

	glfwWindowHint(GLFW_SAMPLES, 4);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

	// Open a window and create its OpenGL context
	window = glfwCreateWindow( 1024, 768, "Tutorial 02 - Red triangle", NULL, NULL);
	if( window == NULL ){
		fprintf( stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n" );
		glfwTerminate();
		return -1;
	} 

	glfwMakeContextCurrent(window);
	do{

		// Clear the screen
		glClear( GL_COLOR_BUFFER_BIT );

		// Draw the triangle
	
		// Swap buffers
		glfwSwapBuffers(window);
		glfwPollEvents();

	} // Check if the ESC key was pressed or the window was closed
	while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS &&
		   glfwWindowShouldClose(window) == 0 );

	// Close OpenGL window and terminate GLFW
	glfwTerminate();

	return 0;
}

glBegin, glEndは使いません。コールバック関数を使わず、do , whileでメインループを書きます。
gameコンソールと同じような書きかたです。
これにより、ユーザーは描画を制御、最適化しやすくなります。