Esempio n. 1
0
void display()
{
	if(lastTime == 0)
	{
		lastTime = glutGet(GLUT_ELAPSED_TIME);
	}
	now = glutGet(GLUT_ELAPSED_TIME);

	delta_t = (now - lastTime) / 1000.0f;
	//lastTime = now; //1 / delta_t here means the frame rate.

	fpsTracker.timestamp();
	//update camera information per frame
	updateCamera();
	checkClear();
	if(moved)
		lastTime = now;
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	//do raytrace
	raytrace();
	
	//render result as texture
	displayTexture();
	//draw tool bar
	TwDraw();
	drawFps();

	glutSwapBuffers();
	glutPostRedisplay();
}
Esempio n. 2
0
void NativeRenderLogic::draw(WorldModel::WorldAccess *worldAccess,
    render::Drawer *drawer)
{
    if(!worldAccess || !drawer)
        return;

    if(shaderProgram.get())
        shaderProgram->use();

    const ViewAngle &viewAngle = worldAccess->getViewAngle();
    drawer->rotateProjection(-viewAngle[2].getDegrees(), .0f, .0f, 1.0f);
    drawer->rotateProjection(-viewAngle[0].getDegrees(), 1.0f, .0f, .0f);
    drawer->rotateProjection(-viewAngle[1].getDegrees(), .0f, 1.0f, .0f);

    const ViewPos &viewPos = worldAccess->getViewPos();
    drawer->translateProjection(-viewPos[0], -viewPos[1], -viewPos[2]);

    const size_t objectsCount = worldAccess->objectsCount();
    for(size_t i = 0; i < objectsCount; ++i)
        (*worldAccess)[i]->draw(drawer);

    if(shaderProgram.get())
        shaderProgram->reset();

    fps = fpsCounter.frame();

    drawFps(drawer);
}
Esempio n. 3
0
void debug::run()
{
	mr_ConsoleRect.x = gfx::getScreenWidth() / 2 - gfx::getScreenWidth() / 2 / 2;
	mr_ConsoleRect.y = gfx::getScreenHeight() - gfx::getScreenHeight() / 12;
	mr_ConsoleRect.w = gfx::getScreenWidth() / 2;
	mr_ConsoleRect.h = gfx::getScreenHeight() / 10;

	if (input::keyHeld(SDLK_F3))
	{
		mb_active = !mb_active;
	}

	if (input::chord(SDLK_LCTRL, SDLK_TAB) || input::chord(SDLK_RCTRL, SDLK_TAB))
	{
		if (mb_ConsoleActive)
		{
			mb_ConsoleActive = false;
		}
		else
		{
			mb_ConsoleActive = true;
		}
	}

	while (moss_CoutString.str().length())
	{
		if (moss_CoutString.str().find('\n') != string::npos && moss_CoutString.str().length() > 1)
		{
			mls_CoutList.push_front(moss_CoutString.str().substr(0, moss_CoutString.str().find('\n')));
			moss_CoutString.str(moss_CoutString.str().substr(moss_CoutString.str().find('\n') + 1, moss_CoutString.str().length() - 1));
		}
		else if (moss_CoutString.str().find('\n') != string::npos)
		{
			moss_CoutString.str("");
		}
		else
		{
			mls_CoutList.push_front(moss_CoutString.str());
			moss_CoutString.str("");
		}
	}
	moss_CoutString.clear();

	if (mb_active)
	{
		drawFps();
	}
	if (mb_ConsoleActive)
	{
		drawConsole();
	}
}
Esempio n. 4
0
void draw(void)
{
    glClear(GL_COLOR_BUFFER_BIT);

    if(redrawflag && glutGet(GLUT_ELAPSED_TIME) - lastchange > 500)
    {
        redraw();
        redrawflag = 0;
    }

    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, gltex);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, screenW, screenH, 0, GL_RGB, GL_UNSIGNED_BYTE, tex);

    glBegin(GL_TRIANGLE_STRIP);
    glTexCoord2d(0,0);
    glVertex2d(0,0);
    glTexCoord2d(1,0);
    glVertex2d(screenW,0);
    glTexCoord2d(0,1);
    glVertex2d(0,screenH);
    glTexCoord2d(1,1);
    glVertex2d(screenW,screenH);
    glEnd();

    glDisable(GL_TEXTURE_2D);

    if(mpress)
    {
        glColor3f(1.0, 1.0, 1.0);
        glBegin(GL_LINE_LOOP);
        glVertex2d(mpressx1, mpressy1);
        glVertex2d(mpressx1, mpressy2);
        glVertex2d(mpressx2, mpressy2);
        glVertex2d(mpressx2, mpressy1);
        glEnd();
    }

    drawFps();
    drawIter();

    glutSwapBuffers();
}
Esempio n. 5
0
void Debug::run()
{
	if (Input::keyHeld(SDLK_F3))
	{
		if (mb_active)
		{
			mb_active = false;
		}
		else
		{
			mb_active = true;
		}
	}

	if (mb_active)
	{
		drawFps();
	}
}
Esempio n. 6
0
int main(int argc, char **argv) {
	srand(static_cast<unsigned int>(time(nullptr))); //seed random number generator with the current time

	if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
		logSDLError("SDL_Init");
	}

	if ((IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG) != IMG_INIT_PNG) {
		logSDLError("IMG_Init");
	}

	if (TTF_Init() == -1) {
		logSDLError("TTF_Init");
	}

	SDL_Window *window = SDL_CreateWindow("Pong", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
			SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
	if (window == nullptr) {
		logSDLError("CreateWindow");
	}
	//SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
	SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
	if (renderer == nullptr) {
		logSDLError("CreateRenderer");
	}

	FpsTracker fpsTracker(100);

	WorldState currentWorldState;
	World *world = new World(renderer, SCREEN_WIDTH, SCREEN_HEIGHT, currentWorldState);
	world->startRound(currentWorldState);
	WorldState previousWorldState=currentWorldState;

	Hud *hud = new Hud(renderer, SCREEN_WIDTH, SCREEN_HEIGHT);
	drawUI(hud, currentWorldState);

	float dt = PHYSICS_TIMESTEP;

	Uint64 currentTime = SDL_GetPerformanceCounter();
	float accumulator = 0;

	bool quit = false;
	SDL_Event event;
	while (!quit) {
		const Uint64 newTime = SDL_GetPerformanceCounter();
		float deltaTime = static_cast<float>(newTime - currentTime) / SDL_GetPerformanceFrequency(); //aka time for this frame
		currentTime = newTime;

		if (deltaTime > 0.25f) {
			std::cout << "limiting delta time to 0.25f" << std::endl;
			deltaTime = 0.25f; // anti "spiral of death" / breakpoints
		}

		accumulator += deltaTime;

		int simCount = 0;
		while (accumulator >= dt) {
			accumulator -= dt;
			previousWorldState = currentWorldState;
			world->update(currentWorldState, dt); //aka integrate
			if (currentWorldState.humanScore != previousWorldState.humanScore
				|| currentWorldState.opponentScore != previousWorldState.opponentScore) {
					drawUI(hud, currentWorldState);
			}
			++simCount;
		}
		if (simCount > 1) {
			std::cout << "Simulated multiple steps:" << simCount << std::endl;
		}

		WorldState lerped = WorldState::lerpBetween(previousWorldState, currentWorldState, accumulator/dt);

		drawFps(hud, static_cast<int>(1 / fpsTracker.calculateAverageFrameTime(deltaTime)));

		SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
		SDL_RenderClear(renderer);
		world->render(lerped);
		hud->render();
		SDL_RenderPresent(renderer);

		//TODO figure out where user input handling should go. @see http://gamedev.stackexchange.com/questions/8623/a-good-way-to-build-a-game-loop-in-opengl
		while (SDL_PollEvent(&event)) {
			switch(event.type) {
			case SDL_QUIT:
				quit = true;
				break;
			case SDL_KEYDOWN:
				switch(event.key.keysym.scancode) {
				case SDL_SCANCODE_ESCAPE:
					quit = true;
					break;
				}
				break;
			}
		}
	}

	std::cout << "Quitting" << std::endl;

	//cleanup
	delete hud;
	delete world;
	SDL_DestroyRenderer(renderer);
	SDL_DestroyWindow(window);

	TTF_Quit();
	IMG_Quit();
	SDL_Quit();

	return 0;
}