Esempio n. 1
0
QImage QSGSoftwareRenderLoop::grab(QQuickWindow *window)
{
    //If the window was never shown, create a new backing store
    if (!m_backingStores.contains(window)) {
        m_backingStores[window] = new QBackingStore(window);
        // Call create on window to make sure platform window is created
        window->create();
    }

    //If there is no WindowData, add one
    if (!m_windows.contains(window)) {
        WindowData data;
        data.updatePending = false;
        m_windows[window] = data;
    }

    m_windows[window].grabOnly = true;

    renderWindow(window);

    QImage grabbed = grabContent;
    grabbed.detach();
    grabContent = QImage();
    return grabbed;
}
Esempio n. 2
0
void QSGSoftwareRenderLoop::exposureChanged(QQuickWindow *window)
{
    if (window->isExposed()) {
        m_windows[window].updatePending = true;
        renderWindow(window, true);
    }
}
/******************************************************************************
* Renders the image in a rectangle given in viewport coordinates.
******************************************************************************/
void DefaultImagePrimitive::renderViewport(SceneRenderer* renderer, const Point2& pos, const Vector2& size)
{
	QSize imageSize = renderer->outputSize();
	Point2 windowPos((pos.x() + 1.0f) * imageSize.width() / 2, (-(pos.y() + size.y()) + 1.0) * imageSize.height() / 2);
	Vector2 windowSize(size.x() * imageSize.width() / 2, size.y() * imageSize.height() / 2);
	renderWindow(renderer, windowPos, windowSize);
}
Esempio n. 4
0
bool CanvasExporterPS::write()
{
    QString format("PostScript (%1)");

    int vtkPSFormat = -1;
    if (outputFormat() == format.arg("PS"))
        vtkPSFormat = vtkGL2PSExporter::PS_FILE;
    else if (outputFormat() == format.arg("EPS"))
        vtkPSFormat = vtkGL2PSExporter::EPS_FILE;
    else if (outputFormat() == format.arg("PDF"))
        vtkPSFormat = vtkGL2PSExporter::PDF_FILE;
    else if (outputFormat() == format.arg("TEX"))
        vtkPSFormat = vtkGL2PSExporter::TEX_FILE;
    else if (outputFormat() == format.arg("SVG"))
        vtkPSFormat = vtkGL2PSExporter::SVG_FILE;
    else
        return false;

    // vtkGL2PSExporter always appends a file extensions, so we should cut it if it already exists
    QString fileName = outputFileName();
    QString ext = fileExtension();
    QFileInfo info(fileName);
    if (info.suffix().toLower() == ext)
    {
        fileName.truncate(fileName.length() - ext.length() - 1); // cut ".EXT"
    }

    m_exporter->SetFilePrefix(fileName.toUtf8().data());
    m_exporter->SetFileFormat(vtkPSFormat);
    m_exporter->SetRenderWindow(renderWindow());
    m_exporter->Write();

    return true;
}
Esempio n. 5
0
CClientGameEngine::CClientGameEngine(boost::program_options::variables_map vm) : CGameEngine(false), m_syncTime(0.f)
{
	boost::shared_ptr<CSFMLLog> logger = CSFMLLog::init();

	boost::shared_ptr<CSoundEngine> soundEngine(new CSoundEngine());
	setSoundEngine(soundEngine);

	UInt16 width = vm["width"].as<UInt16>();
	UInt16 height = vm["height"].as<UInt16>();
	getLevel()->setScreenSize(sf::Vector2i(800,height+1));

	boost::shared_ptr<sf::RenderWindow> renderWindow(new sf::RenderWindow(sf::VideoMode(width,height,32),"Tour devel 0.1b"));
	boost::shared_ptr<CRenderEngine> renderEngine = boost::shared_ptr<CRenderEngine>(new CRenderEngine(renderWindow, logger));
	setRenderEngine(renderEngine);
	m_inputEngine = boost::shared_ptr<CInputEngine>(new CInputEngine(renderWindow));

	boost::shared_ptr<CClientSession> session(new CClientSession());
	boost::shared_ptr<CClientEventEngine> eventEngine = boost::shared_ptr<CClientEventEngine>(new CClientEventEngine(session));
	setEventEngine(eventEngine);
	m_clientSession = session;
	m_clientEventEngine = eventEngine;

	std::string host = vm["h"].as<std::string>();
	std::string port = vm["p"].as<std::string>();;

	session->connect(host,port);

	CLog::debug("Client started");
}
Esempio n. 6
0
void AbstractRenderView::initializeForFirstPaint()
{
    if (m_onFirstPaintInitialized)
    {
        return;
    }

    m_onFirstPaintInitialized = true;

    // let the subclass create a context first
    initializeRenderContext();

    auto updateRenWinDpi = [this] () -> void
    {
        auto renWin = renderWindow();
        auto nativeParent = nativeParentWidget();
        if (!renWin || !nativeParent)
        {
            return;
        }

        const auto dpi = static_cast<int>(nativeParent->windowHandle()->screen()->logicalDotsPerInch());
        if (dpi != renWin->GetDPI())
        {
            renWin->SetDPI(dpi);
        }
    };

    if (auto nativeParent = nativeParentWidget())
    {
        connect(nativeParent->windowHandle(), &QWindow::screenChanged, updateRenWinDpi);
    }

    updateRenWinDpi();
}
Esempio n. 7
0
void SMDLEDShield::message(const char *_text, bool store) {
  int i, j;
  int temp;
  //save a private copy of the text string
  strcpy(text, _text);
  //save to eeprom
  if (store)
    eeprom_write_block(text, _store, strlen(text)+1);
  buffer_width = strlen(_text)*4 + 16;
  memset(buffer,0,128*8);
  //Preprocess the message into font indeces
  for(i=0; i< strlen(text); i++) {
    if((64 < text[i])  && (text[i] < 91))//upper case
      temp = text[i] - 65;
    else if((96 < text[i]) && (text[i] < 123))//lower case
      temp = text[i] - 97;
    else //unmapped
      temp = -1;
    //Render the buffer
    for(j=0; j<8; j++) {
      buffer[j][(i/2)+1] |= (temp > -1)?pgm_read_byte(&(charset[(int)temp][j])) << 4*(i%2):0;
    }
  }
  
  left_bit = 0;
  //Render the initial window buffer
  renderWindow();
}
Esempio n. 8
0
int main()
{
	sf::RenderWindow renderWindow(sf::VideoMode(800u, 600u), "TMX Loader");

	//create map loader and load map
	tmx::MapLoader ml("maps/");
	ml.Load("desert.tmx");

	sf::Clock deltaClock, frameClock;

	//-----------------------------------//

	while(renderWindow.isOpen())
	{
		//poll input
		sf::Event event;
		while(renderWindow.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				renderWindow.close();
        }

		//allow moving of view
		sf::View view = renderWindow.getView();
		sf::Vector2f movement;

		if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
			movement.x = -1.f;
		else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
			movement.x = 1.f;

		if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
			movement.y = -1.f;
		else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
			movement.y = 1.f;

		float dt = deltaClock.restart().asSeconds();
		movement = Helpers::Vectors::Normalize(movement) * 300.f * dt;
		view.move(movement);
		renderWindow.setView(view);

		frameClock.restart();

		//draw
		renderWindow.clear();
		renderWindow.draw(ml);
		renderWindow.display();

		const float time = 1.f / frameClock.getElapsedTime().asSeconds();
		std::stringstream stream;
		stream << "Use the cursor keys to move the view. Current fps: " << time << std::endl;
		renderWindow.setTitle(stream.str());
	}

	return 0;
}
Esempio n. 9
0
int main()
{
    sf::RenderWindow renderWindow(sf::VideoMode(800u, 600u), "TMX Loader");
    sf::Font font = loadFont();
    sf::Text fpsText = getFpsText(font);

	//set the debugging output mode
	tmx::setLogLevel(tmx::Logger::Info | tmx::Logger::Error);

    //create map loader and load map
    tmx::MapLoader ml("maps/");
    ml.load("desert.tmx");

    sf::Clock deltaClock, frameClock;

    const float dt = 0.01f;

    float previousUpdateTime = deltaClock.getElapsedTime().asSeconds();
    float accumulator = 0.f;

    while(renderWindow.isOpen())
    {
        handleWindowEvent(renderWindow);

        //update
        float currentTime = deltaClock.getElapsedTime().asSeconds();
        float frameTime = currentTime - previousUpdateTime;
        previousUpdateTime = currentTime;
        accumulator += frameTime;

        sf::Vector2f movement;
        while ( accumulator >= dt )
        {
            movement = getViewMovement(dt);
            accumulator -= dt;
        }

        //allow moving of view
        sf::View view = renderWindow.getView();
        view.move(movement);
        renderWindow.setView(view);

        //show fps
        float fpsCount = (1.f / frameClock.restart().asSeconds());
        fpsText.setString( "FPS: " + (std::to_string(fpsCount)));
        fpsText.move(movement);

        //draw
        renderWindow.clear();
        renderWindow.draw(ml);
        renderWindow.draw(fpsText);
        renderWindow.display();
    }

    return 0;
}
QImage QQuickTrivialWindowManager::grab(QQuickWindow *window)
{
    if (!m_windows.contains(window))
        return QImage();

    m_windows[window].grabOnly = true;

    renderWindow(window);

    QImage grabbed = grabContent;
    grabContent = QImage();
    return grabbed;
}
Esempio n. 11
0
void MainCanvas::renderTree()
{
    preRender();
    DisplayEngine* pDisplayEngine = getPlayer()->getDisplayEngine();
    unsigned numWindows = pDisplayEngine->getNumWindows();
    for (unsigned i=0; i<numWindows; ++i) {
        ScopeTimer Timer(RootRenderProfilingZone);
        WindowPtr pWindow = pDisplayEngine->getWindow(i);
        IntRect viewport = pWindow->getViewport();
        renderWindow(pWindow, MCFBOPtr(), viewport);
    }
    GLContextManager::get()->reset();
}
bool QQuickTrivialWindowManager::event(QEvent *e)
{
    if (e->type() == QEvent::User) {
        eventPending = false;
        for (QHash<QQuickWindow *, WindowData>::const_iterator it = m_windows.constBegin();
             it != m_windows.constEnd(); ++it) {
            const WindowData &data = it.value();
            if (data.updatePending)
                renderWindow(it.key());
        }
        return true;
    }
    return QObject::event(e);
}
int main()
{
	sf::RenderWindow renderWindow(sf::VideoMode(800u, 600u), "TMX Loader");
	renderWindow.setVerticalSyncEnabled(true);

	//create map loader and load map
	tmx::MapLoader ml("maps/");
	ml.Load("isometric_grass_and_water.tmx");

	//adjust the view to centre on map
	sf::View view = renderWindow.getView();
	view.setCenter(0.f, 300.f);
	renderWindow.setView(view);

	//to toggle debug output
	bool debug = false;

	//-----------------------------------//

	while(renderWindow.isOpen())
	{
		//poll input
		sf::Event event;
		while(renderWindow.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				renderWindow.close();
			if(event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::D)
				debug = !debug;
        }

		//draw map
		renderWindow.clear();
		renderWindow.draw(ml);
		if(debug)ml.Draw(renderWindow, tmx::MapLayer::Debug);
		renderWindow.display();

		//print mouse coords to orthographic (screen) coords and world (isometric) coords
		sf::Vector2f mousePosScreen = renderWindow.mapPixelToCoords(sf::Mouse::getPosition(renderWindow));
		sf::Vector2f mousePosWorld = ml.OrthogonalToIsometric(mousePosScreen);

		std::stringstream stream;
		stream << "Mouse Position: "<< mousePosScreen.x << ", " << mousePosScreen.y << " World Position: " << mousePosWorld.x << ", " << mousePosWorld.y;

		renderWindow.setTitle(stream.str());
	}

	return 0;
}
Esempio n. 14
0
bool CanvasExporterPS::openGLContextSupported()
{
#if WIN32 && VTK_RENDERING_BACKEND == 1
    auto openGLContext = vtkOpenGLRenderWindow::SafeDownCast(renderWindow());
    assert(openGLContext);
    auto extensionManager = openGLContext->GetExtensionManager();

    if (extensionManager->DriverIsIntel())
    {
        return false;
    }
#endif

    return CanvasExporter::openGLContextSupported();
}
void D3dDrawManager::drawAllPipes()
{
   vprDEBUG_OutputGuard(vrjDBG_DRAW_MGR, vprDBG_HVERB_LVL,
                        "vrj::GLDrawManager::drawAllPipes()\n",
                        "vrj::GLDrawManager::drawAllPipes() done.\n");

   checkForNewWindows();
   for (unsigned int i = 0; i < mOpenWins.size(); i++)
   {
      D3dWindow* win = mOpenWins[i];
      win->checkEvents();
      renderWindow(win);
      swapWindowBuffers(win);
   }

}
Esempio n. 16
0
void runGame()
{
	hideCursor();

	initWorld();

	unsigned long curtime = ccTimeMilliseconds();
	double acctime = 0.0;

	while(true){
		ccEvent event = updateWindow();
		if(event.type == CC_EVENT_WINDOW_QUIT){
			break;
		}else if(event.type == CC_EVENT_KEY_DOWN){
			handleKeyDownWorld(event.keyCode);
		}else if(event.type == CC_EVENT_KEY_UP){
			handleKeyUpWorld(event.keyCode);
		}

		unsigned long newtime = ccTimeMilliseconds();
		double frametime = (newtime - curtime) * 0.001;
		curtime = newtime;

		if(frametime > FRAME_CAP){
			frametime = FRAME_CAP;
		}
		acctime += frametime;

		bool redraw = false;
		while(acctime >= FRAME_DELTA){
			acctime -= FRAME_DELTA;
			redraw = updateWorld();
		}

		if(redraw){
			renderWorld(2, 1, getWidth() - getGuiWidth() - 3, getHeight() - 8);
			renderGui(getWidth() - getGuiWidth(), 0);
		}
		renderWindow(2);
		
	}
}
Esempio n. 17
0
void mainLoop()
{
    try
    {
        while (running)
        {
            setupWindow(width, height, "raycar");
            Asset::init(GLContext::context());
            SceneGraph::init(GLContext::context());
            loadScene("content/raycar.scn");
            resetTimer();
            double now = 0;
            while (sceneRunning && running)
            {
                pollInput();
                double next = timer();
                if (active)
                {
                    if (next > now + maxStepTime)
                    {   //  falling behind
                        now = next - maxStepTime;
                    }
                    while (now < next)
                    {
                        stepScene();
                        now += stepTime;
                    }
                }
                else
                {
                    now = next;
                }
                renderWindow();
            }
        }
    }
    catch (std::exception const &x)
    {
        error(x.what());
    }
}
Esempio n. 18
0
void main(int argc, char * argv[]){
	glutInit(&argc, argv);

	Vector3D *v1 = new Vector3D(2, 3, 5);
	Vector3D *v2 = new Vector3D(4, 2, 1);

	printf("Dot product: %f\n", v1->dotProduct(*v2));
	printf("Magnitude v1: %f\n", v1->magnitude());
	printf("Magnitude v2: %f\n", v2->magnitude());
	printf("Angle between: %f\n", v1->theta(*v2));
	VERTEX3D v[] = { { 0, 0, 0 }, { 1, 0, 0 }, { 0, 1, 0 } };
	LINE l[] = { { 0, 1 }, { 1, 2 }, { 0, 2 } };

	//Step 1: Initialize GLUT
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
	glutInitWindowSize(800, 600);

	//Step 2: Create window
	mainWindow = glutCreateWindow("3D Solar System");
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glEnable(GL_BLEND);
	renderWindow();

	Object3D *cube = new Object3D(v, VECTOR_SIZE(v));
	Object3D *line = new Object3D(v, l, VECTOR_SIZE(v), VECTOR_SIZE(l));

	RenderManager *rmg = RenderManager::getInstance();

	rmg->RegisterObject(cube);
	rmg->RegisterObject(line);
	
	//Step 3: Handlers Functions
	
	glutDisplayFunc(Display);
	glutReshapeFunc(Reshape);
	glutIdleFunc(Display);

	glutKeyboardFunc(keyPressed); // Tell GLUT to use the method "keyPressed" for key presses 
	//glutKeyboardFunc(keyUp);
	glutMainLoop();
}
Esempio n. 19
0
int main()
{
	sf::RenderWindow renderWindow(sf::VideoMode(800u, 600u), "TMX Loader");

	//create map loader and load map
	tmx::MapLoader ml("maps/");
	ml.Load("desert.tmx");

	//-----------------------------------//

	while(renderWindow.isOpen())
	{
		//poll input
		sf::Event event;
		while(renderWindow.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				renderWindow.close();
        }

		//build quad tree by querying visible region
		ml.UpdateQuadTree(sf::FloatRect(0.f, 0.f, 800.f, 600.f));
		//get a vector of MapObjects contained in the quads intersected by query area
		sf::Vector2f mousePos = renderWindow.mapPixelToCoords(sf::Mouse::getPosition(renderWindow));
		//NOTE quad tree MUST be updated before attempting to query it
		std::vector<tmx::MapObject*> objects = ml.QueryQuadTree(sf::FloatRect(mousePos.x - 10.f, mousePos.y - 10.f, 20.f, 20.f));

		//do stuff with returned objects
		std::stringstream stream;
		stream << "Query object count: " << objects.size();
		renderWindow.setTitle(stream.str());

		//draw
		renderWindow.clear();
		renderWindow.draw(ml);
		ml.Draw(renderWindow, tmx::MapLayer::Debug); //draw with debug information shown
		renderWindow.display();
	}

	return 0;
}
Esempio n. 20
0
int displayWelcome()
{
	renderWindow("\30" "\31" " Select option\t<ENTER> Accept selected option",
			"WELCOME",
			OPTION_WIDTH, WELCOME_OPT_COUNT,
			&startX, &startY);
	
	drawOptions();
	
	while (1)
	{
		uint8_t c;
		if (read(0, &c, 1) != 1) continue;
		
		if (c == 0x8B)
		{
			// up arrow
			if (selected != 0)
			{
				selected--;
				drawOptions();
			};
		}
		else if (c == 0x8C)
		{
			// down arrow
			if (selected != (WELCOME_OPT_COUNT-1))
			{
				selected++;
				drawOptions();
			};
		}
		else if (c == '\n')
		{
			break;
		};
	};
	
	return selected;
};
int main(int argv, char** argc) {
	std::vector<Screen*> screens;
	int currentScreen = 1;
	const unsigned int WIDTH = sf::VideoMode::getDesktopMode().width * 2 / 3;
	const unsigned int HEIGHT = std::max(WIDTH / 3, sf::VideoMode::getDesktopMode().height * 2 / 3);
	sf::RenderWindow renderWindow(sf::VideoMode(WIDTH, HEIGHT), "Demo Game");
	MenuScreen menuScreen;
	GameScreen gameScreen;

	screens.push_back(&menuScreen);
	screens.push_back(&gameScreen);

	while (currentScreen >= 0) {

		currentScreen = screens[currentScreen]->Run(renderWindow);
	}




	return EXIT_SUCCESS;
}
Esempio n. 22
0
/*
 * Go through all windows we control and render them in turn.
 * Then tick animations if active.
 */
void QSGWindowsRenderLoop::render()
{
    RLDEBUG("render");
    bool rendered = false;
    foreach (const WindowData &wd, m_windows) {
        if (wd.pendingUpdate) {
            const_cast<WindowData &>(wd).pendingUpdate = false;
            renderWindow(wd.window);
            rendered = true;
        }
    }

    if (!rendered) {
        RLDEBUG("no changes, sleep");
        QThread::msleep(m_vsyncDelta);
    }

    if (m_animationDriver->isRunning()) {
        RLDEBUG("advancing animations");
        QSG_LOG_TIME_SAMPLE(time_start);
        Q_QUICK_SG_PROFILE_START(QQuickProfiler::SceneGraphWindowsAnimations);
        m_animationDriver->advance();
        RLDEBUG("animations advanced");

        qCDebug(QSG_LOG_TIME_RENDERLOOP,
                "animations ticked in %dms",
                int((qsg_render_timer.nsecsElapsed() - time_start)/1000000));

        Q_QUICK_SG_PROFILE_END(QQuickProfiler::SceneGraphWindowsAnimations);

        // It is not given that animations triggered another maybeUpdate()
        // and thus another render pass, so to keep things running,
        // make sure there is another frame pending.
        maybePostUpdateTimer();

        emit timeToIncubate();
    }
}
Esempio n. 23
0
/*
 * Go through all windows we control and render them in turn.
 * Then tick animations if active.
 */
void QSGWindowsRenderLoop::render()
{
    RLDEBUG("render");
    foreach (const WindowData &wd, m_windows) {
        if (wd.pendingUpdate) {
            const_cast<WindowData &>(wd).pendingUpdate = false;
            renderWindow(wd.window);
        }
    }

    if (m_animationDriver->isRunning()) {
        RLDEBUG("advancing animations");
        QSG_RENDER_TIMING_SAMPLE(time_start);
        m_animationDriver->advance();
        RLDEBUG("animations advanced");

#ifndef QSG_NO_RENDER_TIMING
        if (qsg_render_timing) {
            qDebug("WindowsRenderLoop: animations=%d ms",
                   int((qsg_render_timer.nsecsElapsed() - time_start)/1000000));
        }
        if (QQmlProfilerService::Enabled) {
            QQmlProfilerService::sceneGraphFrame(
                        QQmlProfilerService::SceneGraphWindowsAnimations,
                        qsg_render_timer.nsecsElapsed() - time_start);
        }
#endif

        // It is not given that animations triggered another maybeUpdate()
        // and thus another render pass, so to keep things running,
        // make sure there is another frame pending.
        maybePostUpdateTimer();

        emit timeToIncubate();
    }
}
Esempio n. 24
0
int main()
{
    OpenConsole();

    Screen::setScreenSize(Vector2(1280, 720));

    sf::RenderWindow renderWindow(sf::VideoMode(Screen::getScreenSize().x, Screen::getScreenSize().y, 32), "RayMarch Renderer", sf::Style::Titlebar | sf::Style::Close);
    renderWindow.setActive();

    GUI gui = GUI(&renderWindow);

    renderWindow.resetGLStates();

    //Graphics::setImageSize(Vector2(1280, 720));
    Graphics::Init();

    Camera camera = Camera(Vector3(0, 4, -6), Vector3(0, -3, 6).normalized(), Graphics::getImageSize().x / Graphics::getImageSize().y, PI / 4);

    int samples = 128;
    int currentSample = 0;

    int gridWidth = 4;
    int gridHeight = 4;

    int chunkWidth = Graphics::getImageSize().x / gridWidth;
    int chunkHeight = Graphics::getImageSize().y / gridHeight;

    int x = ceil((float)gridWidth / 2.0) - 1;
    int y = ceil((float)gridHeight / 2.0) - 1;
    Vector2 dir = Vector2(-1, 0);

    int squaresPassed = 0;
    int lastSquaresPassed = 0;
    int distCount = 0;

    bool willSave = false;

    bool wasRendering = false;
    bool rendering = false;

    bool sDown = false;
    bool wasSDown = false;

    double renderStartTime = 0;
    double renderEndTime = 0;

    double oldTime = 0;
    double newTime = 0;
    clock_t t = clock();
    while (renderWindow.isOpen())
    {
        sf::Event windowEvent;
        while (renderWindow.pollEvent(windowEvent))
        {
            gui.handleEvent(windowEvent);
            switch (windowEvent.type)
            {
            case sf::Event::Closed:
                renderWindow.close();
                break;
            }
        }

        sDown = sf::Keyboard::isKeyPressed(sf::Keyboard::S);

        rendering = gui.getRendering();

        if (gui.getReload())
        {
            // Reload
            samples = gui.getSamples();
            currentSample = 0;

            gridWidth = gui.getGridSize().x;
            gridHeight = gui.getGridSize().y;

            chunkWidth = Graphics::getImageSize().x / gridWidth;
            chunkHeight = Graphics::getImageSize().y / gridHeight;

            x = ceil((float)gridWidth / 2.0) - 1;
            y = ceil((float)gridHeight / 2.0) - 1;
            dir = Vector2(-1, 0);

            squaresPassed = 0;
            lastSquaresPassed = 0;
            distCount = 0;

            Graphics::Reload();

            camera.setAspect(Graphics::getImageSize().x / Graphics::getImageSize().y);
            camera.calculateRays();

            renderStartTime = (double)(clock() - t) / (double)CLOCKS_PER_SEC;
            renderEndTime = 0;
        }

        if (rendering)
        {
            if (samples == 0)
            {
                if (squaresPassed < gridWidth * gridHeight)
                {
                    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
                    {
                        rendering = false;
                        renderEndTime = (double)(clock() - t) / (double)CLOCKS_PER_SEC;
                        std::cout << "Render Time: " << renderEndTime - renderStartTime << std::endl;
                        gui.stopRendering();
                    }

                    Vector2 min = Vector2(x * chunkWidth, y * chunkHeight);
                    Vector2 max = Vector2((x + 1) * chunkWidth, (y + 1) * chunkHeight);

                    Graphics::Render(newTime, min, max, currentSample);

                    std::cout << currentSample << std::endl;

                    x -= gridWidth / 2;
                    y -= gridHeight / 2;

                    if (distCount * 2 == squaresPassed - lastSquaresPassed)
                    {
                        distCount++;
                        lastSquaresPassed = squaresPassed;
                        dir = Vector2(dir.y, -dir.x);
                    }
                    else if (distCount == squaresPassed - lastSquaresPassed)
                    {
                        dir = Vector2(dir.y, -dir.x);
                    }
                    squaresPassed++;

                    x += dir.x;
                    y += dir.y;

                    x += gridWidth / 2;
                    y += gridHeight / 2;
                }
                else
                {
                    x = ceil((float)gridWidth / 2.0) - 1;
                    y = ceil((float)gridHeight / 2.0) - 1;
                    dir = Vector2(-1, 0);

                    squaresPassed = 0;
                    lastSquaresPassed = 0;
                    distCount = 0;

                    currentSample++;
                }
            }
            else
            {
                if (squaresPassed < gridWidth * gridHeight)
                {
                    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
                    {
                        rendering = false;
                        renderEndTime = (double)(clock() - t) / (double)CLOCKS_PER_SEC;
                        std::cout << "Render Time: " << renderEndTime - renderStartTime << std::endl;
                        gui.stopRendering();
                    }

                    if (currentSample < samples)
                    {
                        Vector2 min = Vector2(x * chunkWidth, y * chunkHeight);
                        Vector2 max = Vector2((x + 1) * chunkWidth, (y + 1) * chunkHeight);

                        Graphics::Render(newTime, min, max, currentSample);

                        currentSample++;

                        //std::cout << currentSample << "/" << samples << std::endl;
                    }
                    else
                    {
                        x -= gridWidth / 2;
                        y -= gridHeight / 2;

                        if (distCount * 2 == squaresPassed - lastSquaresPassed)
                        {
                            distCount++;
                            lastSquaresPassed = squaresPassed;
                            dir = Vector2(dir.y, -dir.x);
                        }
                        else if (distCount == squaresPassed - lastSquaresPassed)
                        {
                            dir = Vector2(dir.y, -dir.x);
                        }
                        squaresPassed++;

                        x += dir.x;
                        y += dir.y;

                        x += gridWidth / 2;
                        y += gridHeight / 2;

                        currentSample = 0;
                    }
                }
                else
                {
                    if (willSave)
                    {
                        save();
                        willSave = false;
                    }

                    rendering = false;
                    renderEndTime = (double)(clock() - t) / (double)CLOCKS_PER_SEC;
                    std::cout << "Render Time: " << renderEndTime - renderStartTime << std::endl;
                    gui.stopRendering();
                }
            }
        }
        else
        {
            if (sDown && !wasSDown)
            {
                save();
            }
        }
        //*/

        gui.update(newTime);

        renderWindow.clear();
        gui.display(renderWindow);
        renderWindow.display();

        wasSDown = sDown;

        oldTime = newTime;
        newTime = (double)(clock() - t) / (double)CLOCKS_PER_SEC;
        Screen::setDeltaTime(newTime - oldTime);
    }

    //Graphics::Cleanup();
}
/******************************************************************************
* Renders the text string at the given location given in normalized
* viewport coordinates ([-1,+1] range).
******************************************************************************/
void DefaultTextPrimitive::renderViewport(SceneRenderer* renderer, const Point2& pos, int alignment)
{
	QSize imageSize = renderer->outputSize();
	Point2 windowPos((pos.x() + 1.0f) * imageSize.width() / 2, (-pos.y() + 1.0f) * imageSize.height() / 2);
	renderWindow(renderer, windowPos, alignment);
}
Esempio n. 26
0
int main(int argc, char** argv) {
	sf::RenderWindow renderWindow(sf::VideoMode(300, 300), "Click on Sprite demo");
	sf::Event event;

	bool player = false;

	bool A1IsClicked = false;
	bool A2IsClicked = false;
	bool A3IsClicked = false;
	bool B1IsClicked = false;
	bool B2IsClicked = false;
	bool B3IsClicked = false;
	bool C1IsClicked = false;
	bool C2IsClicked = false;
	bool C3IsClicked = false;

	sf::Texture crossTexture;
	crossTexture.loadFromFile("images/cross.png");

	sf::Texture circleTexture;
	circleTexture.loadFromFile("images/circle.png");

	sf::Texture emptyTexture;
	emptyTexture.loadFromFile("images/empty.png");



	sf::Sprite spriteA1(emptyTexture);
	spriteA1.setPosition(0.0f, 0.0f);

	sf::Sprite spriteA2(emptyTexture);
	spriteA2.setPosition(0.0f, 100.0f);

	sf::Sprite spriteA3(emptyTexture);
	spriteA3.setPosition(0.0f, 200.0f);

	sf::Sprite spriteB1(emptyTexture);
	spriteB1.setPosition(100.0f, 0.0f);

	sf::Sprite spriteB2(emptyTexture);
	spriteB2.setPosition(100.0f, 100.0f);

	sf::Sprite spriteB3(emptyTexture);
	spriteB3.setPosition(100.0f, 200.0f);

	sf::Sprite spriteC1(emptyTexture);
	spriteC1.setPosition(200.0f, 0.0f);

	sf::Sprite spriteC2(emptyTexture);
	spriteC2.setPosition(200.0f, 100.0f);

	sf::Sprite spriteC3(emptyTexture);
	spriteC3.setPosition(200.0f, 200.0f);



	sf::RectangleShape rectangleA1(sf::Vector2f(100, 100));
	rectangleA1.setPosition(0.0f, 0.0f);
	rectangleA1.setFillColor(sf::Color(204, 255, 255));

	sf::RectangleShape rectangleA2(sf::Vector2f(100, 100));
	rectangleA2.setPosition(0.0f, 100.0f);
	rectangleA2.setFillColor(sf::Color(255, 255, 255));

	sf::RectangleShape rectangleA3(sf::Vector2f(100, 100));
	rectangleA3.setPosition(0.0f, 200.0f);
	rectangleA3.setFillColor(sf::Color(204, 255, 255));

	sf::RectangleShape rectangleB1(sf::Vector2f(100, 100));
	rectangleB1.setPosition(100.0f, 0.0f);
	rectangleB1.setFillColor(sf::Color(255, 255, 255));

	sf::RectangleShape rectangleB2(sf::Vector2f(100, 100));
	rectangleB2.setPosition(100.0f, 100.0f);
	rectangleB2.setFillColor(sf::Color(204, 255, 255));

	sf::RectangleShape rectangleB3(sf::Vector2f(100, 100));
	rectangleB3.setPosition(100.0f, 200.0f);
	rectangleB3.setFillColor(sf::Color(255, 255, 255));

	sf::RectangleShape rectangleC1(sf::Vector2f(100, 100));
	rectangleC1.setPosition(200.0f, 0.0f);
	rectangleC1.setFillColor(sf::Color(204, 255, 255));

	sf::RectangleShape rectangleC2(sf::Vector2f(100, 100));
	rectangleC2.setPosition(200.0f, 100.0f);
	rectangleC2.setFillColor(sf::Color(255, 255, 255));

	sf::RectangleShape rectangleC3(sf::Vector2f(100, 100));
	rectangleC3.setPosition(200.0f, 200.0f);
	rectangleC3.setFillColor(sf::Color(204, 255, 255));


	while (renderWindow.isOpen()) {
		while (renderWindow.pollEvent(event)) {
			if (event.type == sf::Event::EventType::Closed) {
				renderWindow.close();
			}

			if (event.type == sf::Event::EventType::MouseButtonPressed) {
			//Check if you pressed a mousebutton
				if (event.mouseButton.button == sf::Mouse::Left) {
				//Check if that mousebutton is the left mousebutton
					click(rectangleA1, spriteA1, A1IsClicked, player, crossTexture, circleTexture, event);

					click(rectangleB1, spriteB1, B1IsClicked, player, crossTexture, circleTexture, event);

					click(rectangleC1, spriteC1, C1IsClicked, player, crossTexture, circleTexture, event);

					click(rectangleA2, spriteA2, A2IsClicked, player, crossTexture, circleTexture, event);

					click(rectangleB2, spriteB2, B2IsClicked, player, crossTexture, circleTexture, event);

					click(rectangleC2, spriteC2, C2IsClicked, player, crossTexture, circleTexture, event);

					click(rectangleA3, spriteA3, A3IsClicked, player, crossTexture, circleTexture, event);

					click(rectangleB3, spriteB3, B3IsClicked, player, crossTexture, circleTexture, event);

					click(rectangleC3, spriteC3, C3IsClicked, player, crossTexture, circleTexture, event);
				}
			}
		}
		renderWindow.clear(sf::Color(100, 100, 100));

		renderWindow.draw(rectangleA1);
		renderWindow.draw(rectangleA2);
		renderWindow.draw(rectangleA3);
		renderWindow.draw(rectangleB1);
		renderWindow.draw(rectangleB2);
		renderWindow.draw(rectangleB3);
		renderWindow.draw(rectangleC1);
		renderWindow.draw(rectangleC2);
		renderWindow.draw(rectangleC3);

		renderWindow.draw(spriteA1);
		renderWindow.draw(spriteA2);
		renderWindow.draw(spriteA3);
		renderWindow.draw(spriteB1);
		renderWindow.draw(spriteB2);
		renderWindow.draw(spriteB3);
		renderWindow.draw(spriteC1);
		renderWindow.draw(spriteC2);
		renderWindow.draw(spriteC3);
		
		renderWindow.display();
	}
}
Esempio n. 27
0
int main()
{
	sf::RenderWindow renderWindow(sf::VideoMode(800u, 600u), "TMX Loader");
	renderWindow.setVerticalSyncEnabled(true);

	//create map loader and load map
	tmx::MapLoader ml("maps\\");
	ml.Load("desert.tmx");

	//update the quad tree once so we can see it whe drawing debug
	ml.UpdateQuadTree(sf::FloatRect(0.f, 0.f, 800.f, 600.f));

	bool showDebug = false;
	sf::Clock frameClock;

	//-----------------------------------//

	while(renderWindow.isOpen())
	{
		//poll input
		sf::Event event;
		while(renderWindow.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				renderWindow.close();
			if(event.type == sf::Event::KeyReleased)
			{
				switch(event.key.code)
				{
				case sf::Keyboard::D:
					showDebug = !showDebug;
					break;
				default: break;
				}
			}
        }
		//move objects about
		std::vector<tmx::MapLayer>& layers = ml.GetLayers();
		for(auto& l : layers)
		{
			if(l.type == tmx::ObjectGroup)
			{
				for(auto& o : l.objects)
				{
					o.Move(0.f, 1.f);
					if(o.GetPosition().y > 600.f)
					{
						o.SetPosition(o.GetPosition().x, 0.f);
					}
				}
			}
		}
		ml.UpdateQuadTree(sf::FloatRect(0.f, 0.f, 800.f, 600.f));

		//draw
		frameClock.restart();
		renderWindow.clear();
		renderWindow.draw(ml);
		if(showDebug) ml.Draw(renderWindow, tmx::MapLayer::Debug);//draw with debug information shown
		renderWindow.display();

		renderWindow.setTitle("Press D to Toggle debug shapes. " + std::to_string(1.f / frameClock.getElapsedTime().asSeconds()));
	}

	return 0;
}
Esempio n. 28
0
void SMDLEDShield::scroll(direction d) {
  shiftWindow(d);
  renderWindow();
}
Esempio n. 29
0
    /**
     * @brief frameStarted gets called after every rendered frame by ogre3d.
     * Method calls the graphic dispatcher used by OgreTile and the signal signalFrame().
     * @param evt Contains timeSinceLastFrame
     * @return Returns false if render window got closed.
     */
    bool frameStarted(const Ogre::FrameEvent &evt)
    {
        Ogre::RenderWindow *renderWindow(Ogre::Root::getSingletonPtr()->getAutoCreatedWindow());
        if (renderWindow->isClosed())
        {
            return false;
        }

        keyboard->capture();
        mouse->capture();

        {
            blub::real speed(5.);
            if (m_fast)
            {speed = 20.;}
            if (m_forward)
            {
                camera->moveRelative(Ogre::Vector3::NEGATIVE_UNIT_Z*speed*evt.timeSinceLastFrame);
            }
            if (m_backwards)
            {
                camera->moveRelative(Ogre::Vector3::UNIT_Z*speed*evt.timeSinceLastFrame);
            }
            if (m_left)
            {
                camera->moveRelative(Ogre::Vector3::NEGATIVE_UNIT_X*speed*evt.timeSinceLastFrame);
            }
            if (m_right)
            {
                camera->moveRelative(Ogre::Vector3::UNIT_X*speed*evt.timeSinceLastFrame);
            }
        }
        {
            const blub::real lookSpeed = (blub::math::piHalf/2.) * evt.timeSinceLastFrame;
            if (m_lookLeft)
            {
                m_lookVert += lookSpeed;
            }
            if (m_lookRight)
            {
                m_lookVert -= lookSpeed;
            }
            if (m_lookUp)
            {
                m_lookHor += lookSpeed;
            }
            if (m_lookDown)
            {
                m_lookHor -= lookSpeed;
            }
            m_lookHor = blub::math::clamp<blub::real>(m_lookHor, -blub::math::piHalf, blub::math::piHalf);

            const blub::quaternion rotVert(0, blub::math::sin(m_lookVert / 2.0), 0, blub::math::cos(m_lookVert / 2.0));
            const blub::quaternion rotHor(blub::math::sin(m_lookHor / 2.0), 0, 0, blub::math::cos(m_lookHor / 2.0));

            blub::quaternion rot(rotVert*rotHor);

            camera->setOrientation(rot);
        }

        m_sigFrame(evt.timeSinceLastFrame);
        graphicDispatcher.start();

        return true;
    }
Esempio n. 30
0
//##Documentation
//## @brief Use several views to explore data
//##
//## As in Step2 and Step3, load one or more data sets (many image,
//## surface and other formats), but create 3 views on the data.
//## The QmitkRenderWindow is used for displaying a 3D view as in Step3,
//## but without volume-rendering.
//## Furthermore, we create two 2D views for slicing through the data.
//## We use the class QmitkSliceWidget, which is based on the class
//## QmitkRenderWindow, but additionally provides sliders
//## to slice through the data. We create two instances of
//## QmitkSliceWidget, one for axial and one for sagittal slicing.
//## The two slices are also shown at their correct position in 3D as
//## well as intersection-line, each in the other 2D view.
int main(int argc, char* argv[])
{
  QApplication qtapplication( argc, argv );

  if(argc<2)
  {
    fprintf( stderr, "Usage:   %s [filename1] [filename2] ...\n\n", itksys::SystemTools::GetFilenameName(argv[0]).c_str() );
    return 1;
  }

  // Register Qmitk-dependent global instances
  QmitkRegisterClasses();

  //*************************************************************************
  // Part I: Basic initialization
  //*************************************************************************

  // Create a DataStorage
  mitk::StandaloneDataStorage::Pointer ds = mitk::StandaloneDataStorage::New();


  //*************************************************************************
  // Part II: Create some data by reading files
  //*************************************************************************
  int i;
  for(i=1; i<argc; ++i)
  {
    // For testing
    if(strcmp(argv[i], "-testing")==0) continue;

    // Create a DataNodeFactory to read a data format supported
    // by the DataNodeFactory (many image formats, surface formats, etc.)
    mitk::DataNodeFactory::Pointer nodeReader=mitk::DataNodeFactory::New();
    const char * filename = argv[i];
    try
    {
      nodeReader->SetFileName(filename);
      nodeReader->Update();
      //*********************************************************************
      //Part III: Put the data into the datastorage
      //*********************************************************************

      // Since the DataNodeFactory directly creates a node,
      // use the datastorage to add the read node
      mitk::DataNode::Pointer node = nodeReader->GetOutput();
      ds->Add(node);
    }
    catch(...)
    {
      fprintf( stderr, "Could not open file %s \n\n", filename );
      exit(2);
    }
  }

  //*************************************************************************
  // Part IV: Create windows and pass the tree to it
  //*************************************************************************

  // Create toplevel widget with horizontal layout
  QWidget toplevelWidget;
  QHBoxLayout layout;
  layout.setSpacing(2);
  layout.setMargin(0);
  toplevelWidget.setLayout(&layout);

  //*************************************************************************
  // Part IVa: 3D view
  //*************************************************************************

  // Create a renderwindow
  QmitkRenderWindow renderWindow(&toplevelWidget);
  layout.addWidget(&renderWindow);

  // Tell the renderwindow which (part of) the datastorage to render
  renderWindow.GetRenderer()->SetDataStorage(ds);

  // Use it as a 3D view
  renderWindow.GetRenderer()->SetMapperID(mitk::BaseRenderer::Standard3D);

  // *******************************************************
  // ****************** START OF NEW PART ******************
  // *******************************************************

  //*************************************************************************
  // Part IVb: 2D view for slicing axially
  //*************************************************************************

  // Create QmitkSliceWidget, which is based on the class
  // QmitkRenderWindow, but additionally provides sliders
  QmitkSliceWidget view2(&toplevelWidget);
  layout.addWidget(&view2);
  view2.SetLevelWindowEnabled(true);
  // Tell the QmitkSliceWidget which (part of) the tree to render.
  // By default, it slices the data axially
  view2.SetDataStorage(ds);
  mitk::DataStorage::SetOfObjects::ConstPointer rs = ds->GetAll();
  view2.SetData(rs->Begin(),mitk::SliceNavigationController::Axial);
  // We want to see the position of the slice in 2D and the
  // slice itself in 3D: add it to the datastorage!
  ds->Add(view2.GetRenderer()->GetCurrentWorldGeometry2DNode());

  //*************************************************************************
  // Part IVc: 2D view for slicing sagitally
  //*************************************************************************

  // Create QmitkSliceWidget, which is based on the class
  // QmitkRenderWindow, but additionally provides sliders
  QmitkSliceWidget view3(&toplevelWidget);
  layout.addWidget(&view3);
  view3.SetDataStorage(ds);
  // Tell the QmitkSliceWidget which (part of) the datastorage to render
  // and to slice sagitally
  view3.SetData(rs->Begin(), mitk::SliceNavigationController::Sagittal);
  // We want to see the position of the slice in 2D and the
  // slice itself in 3D: add it to the datastorage!
  ds->Add(view3.GetRenderer()->GetCurrentWorldGeometry2DNode());

  // *******************************************************
  // ******************* END OF NEW PART *******************
  // *******************************************************

  //*************************************************************************
  // Part V: Qt-specific initialization
  //*************************************************************************
  toplevelWidget.show();

  // for testing
  #include "QtTesting.h"
  if(strcmp(argv[argc-1], "-testing")!=0)
    return qtapplication.exec();
  else
    return QtTesting();
}