コード例 #1
0
ファイル: main.cpp プロジェクト: WendyHanzer/4s
int main(int argc, char** argv)
{
	--argc;
	++argv;

	const int WIDTH = 800;
	const int HEIGHT = 600;

	/*
	*	Create window
	*/
	sf::RenderWindow window(sf::VideoMode(WIDTH, HEIGHT), "Window", sf::Style::Default, sf::ContextSettings(32));
	
	/*
	*	Initialize GLEW
	*/
	GLenum status = glewInit();
	if(status != GLEW_OK)
	{
		std::cerr << "[F] GLEW NOT INITIALIZED: ";
		std::cerr << glewGetErrorString(status) << std::endl;
	
		window.close();
	
		return -1;
	}
	
	glEnable(GL_TEXTURE_2D);
	glEnable(GL_DEPTH_TEST);
	glDepthMask(GL_TRUE);
	//glFrontFace(GL_CW);
   	//glCullFace(GL_BACK);
	//glEnable(GL_CULL_FACE);
	glClearDepth(1.f);
	glShadeModel(GL_SMOOTH);

	/*
	*	Create GUI
	*/
	tgui::Gui gui(window);
	tgui::Gui gui2(window);
	gui.setGlobalFont("fonts/DejaVuSans.ttf");
	loadWidgets(gui, gui2, window);
	
	char* args[argc + 1];
	
	/*
	*	load geometry
	*/
	Model cube;
	getArgs(argc, argv, ".obj", args);
	
	if (!args[0])
	{
		std::cerr << "[F] MUST SUPPLY 1+ OBJ FILES IN COMMAND LINE ARGS <filename.obj>" << std::endl;
		exit(-1);
	} //if
	
	cube.mesh = loadMesh(args[0]);
	if (!cube.mesh)
	{
		exit(-1);
	} //if
	
	getArgs(argc, argv, ".scale", args);
	if (args[0])
	{
		cube.scale = glm::vec3(strtof(args[0], NULL));
	} //if
	else
	{
		cube.scale = glm::vec3(1.0f);
	} //else
	
	/*
	*	load shaders
	*/
	Shader vertexShader(GL_VERTEX_SHADER);
	getArgs(argc, argv, ".vs", args);
	vertexShader.loadFromFile(args[0]? args[0] : ".vs");
	vertexShader.compile();
	
	Shader fragmentShader(GL_FRAGMENT_SHADER);
	getArgs(argc, argv, ".fs", args);
	fragmentShader.loadFromFile(args[0]? args[0] : ".fs");
	fragmentShader.compile();
	
	/*
	*	create program
	*/
	ShaderProgram program;
	
	program.attachShader(vertexShader);
	program.attachShader(fragmentShader);
	program.linkProgram();
	
	program.addAttribute("vertexPosition_modelspace");
	program.addAttribute("vertexUV");
	//program.addAttribute("vertexNormal_modelspace");
	
	program.addUniform("MVP");
	program.addUniform("sampler");

	Camera camera;
	
	sf::Event event;
	tgui::Callback callback;
	
	Planet p(&cube);
	
	/*
	*	main loop
	*/
	
	while (window.isOpen())
	{
		while (window.pollEvent(event))
		{
			switch (event.type)
			{
				case sf::Event::Closed:
					window.close();
				
					break;
				case sf::Event::Resized:
					glViewport(0, 0, event.size.width, event.size.height);
					camera.projection = glm::perspective(45.0f, float(event.size.width)/float(event.size.height), 0.01f, 100.0f);
					
					break;
				default:
					break;
			} //switch
			
			gui.handleEvent(event);
		} //if
		
		while (gui.pollCallback(callback))
		{
			gui.handleEvent(event);
		} //if
		
		window.clear();
		guiDraw(window, gui2);
		glClear(GL_DEPTH_BUFFER_BIT); 
		
		/*
		*	render OpenGL here
		*/
		//glValidateProgram(program.program);
		
		for (Planet* planet : planets)
		{
			render(*planet, camera, program);
		} //for
		
		guiDraw(window, gui);
		
		window.display();
	} //while

	// Clean up after ourselves
	if (window.isOpen())
	{
		window.close();
	} //if
	
	return EXIT_SUCCESS;
} //main
コード例 #2
0
void eoMainLoop()
{

  while ( ! engVarDone )
  {
    tickStartFrame(); //Keep track of time
    SDL_Event event;

    while ( SDL_PollEvent(&event) )
    {
      switch(event.type)
      {
        case SDL_QUIT:
          engVarDone = 1;
        break;
        case SDL_KEYDOWN:
          inputKeyDown( event.key.keysym );
        break;
        case SDL_KEYUP:
          inputKeyUp( event.key.keysym );
        break;
        case SDL_MOUSEMOTION:
          inputMouseMove( event.motion );
        break;
        case SDL_MOUSEBUTTONDOWN:
          inputMouseButton( event.button );
        break;
        case SDL_MOUSEBUTTONUP:
          inputMouseButton( event.button );
        break;
        case SDL_JOYAXISMOTION:
          inputJoyMove( event.jaxis );
        break;
        case SDL_JOYBUTTONDOWN:
          inputJoyButton( event.jbutton );
        break;
        case SDL_JOYBUTTONUP:
          inputJoyButton( event.jbutton );
        break;
      }
    }

  //Run keys
  inputRunKeys();

  engRender();

  gameRun();

  //Render 2D overlays.
  guiDraw();

  //Music
  sndRun();

  tickStopLogic();
  SDL_GL_SwapBuffers();

  //If we don't have vsync on, or if we are above 60 fps.
  int dt = ticksLogic();
  if( !(dt>0 && dt < 16) ) dt=0;
  #ifndef WIN32
    usleep(16666-dt*1000);
  #else
    Sleep(16-dt);
  #endif
  if( engVarShowTimes )
    eoPrint("Frame time: %i ms. Code time: %i ms.", eoTicks(), dt );
  }
}