bool DirectX10Renderer::Initialise(HWND* handle)
	{
		DEBUG_OUT("DirectX10Renderer::Initialise");

		//window handle
		hWnd = handle;
	
		//get window dimensions
		RECT rc;
		GetClientRect( *hWnd, &rc );
		m_ScreenWidth = rc.right - rc.left;
		m_ScreenHeight = rc.bottom - rc.top;
		m_CameraX = 0;
		m_CameraY = 0;

		if(!CreateSwapChainAndDevice()) return false;
		if(!ResizeScreen()) return false;
		if(!LoadShadersAndCreateInputLayouts()) return false;
		if(!InitialiseBuffers()) return false;

		// Load textures
		if(FAILED(D3DX10CreateShaderResourceViewFromFile(pD3DDevice, "./textures/tiles.png", NULL, NULL,  &m_SpriteTexture, NULL)))
		{
			return FatalError("Could not load sprite texture");
		}

		if(FAILED(D3DX10CreateShaderResourceViewFromFile(pD3DDevice, "./fonts/default.png", NULL, NULL,  &m_FontTexture, NULL)))
		{
			return FatalError("Could not load font texture");
		}

		//everything completed successfully
		return true;
	}
	bool DirectX10Renderer::Update()
	{
		RECT rc;
		GetClientRect(*hWnd, &rc);
		UINT width = rc.right - rc.left;
		UINT height = rc.bottom - rc.top;
		
		if(width != m_ScreenWidth || height != m_ScreenHeight)
		{
			if(!ResizeScreen())
			{
				FatalError("Could not resize screen!");
				return false;
			}
		}
		return true;
	}
	//! presents the graphics
	void DirectX11Driver::Present()
	{
		HRESULT hr = m_SwapChain->Present(1, 0);
		m_ImmediateContext->DiscardView(m_RenderTargetView);
		m_ImmediateContext->DiscardView(m_DepthStencilView);
		if(hr == DXGI_ERROR_DEVICE_REMOVED)
		{
			// device lost
			m_SwapChain = NULL;
			Init();
			ResizeScreen(Size(int(m_ViewPortArea.Size().X), int(m_ViewPortArea.Size().Y)));
		}
		else
		{
			SHOOT_LOG_WARNING(hr == S_OK, "Present Failed: %d", hr);
		}
	}
Exemple #4
0
void Graphics::BroadcastMessage(Message * message)
{
  if(message->msgID == MessageID::CharacterKey)
  {
    std::cout << "Character Key was pressed." << std::endl;
    if ((size_t)message->info == sf::Keyboard::F1)
    {
      fullscreen = !fullscreen;
      g_App->create(fullscreen ? sf::VideoMode::getDesktopMode() : sf::VideoMode(800, 600, 32) , "ParticleTest",
                        (fullscreen ? sf::Style::Fullscreen : sf::Style::Resize | sf::Style::Close));
      ResizeScreen(g_App->getSize().x, g_App->getSize().y);
      
    }
  }
  else if(message->msgID == MessageID::Spawn)
    CallSpawnFunction(dynamic_cast<SpawnMessage *>(message));

};
	//! driver initialization
	void DirectX11Driver::Init()
	{
		super::Init();

		UINT creationFlags = 0;

#if defined(_DEBUG)
		creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif

		D3D_FEATURE_LEVEL featureLevels[] = 
		{
			//D3D_FEATURE_LEVEL_11_1,
			//D3D_FEATURE_LEVEL_11_0,
			//D3D_FEATURE_LEVEL_10_1,
			//D3D_FEATURE_LEVEL_10_0,
			D3D_FEATURE_LEVEL_9_3 // max compatibility with Windows Phone 8
		};
		
		ID3D11Device* pDevice = NULL;
		ID3D11DeviceContext* pContext = NULL;
		DX_ASSERT(D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, creationFlags, featureLevels, ARRAYSIZE(featureLevels),
									D3D11_SDK_VERSION, &pDevice, &m_FeatureLevel, &pContext));
		
		ID3D11Device1* pDevice1 = NULL;
		ID3D11DeviceContext1* pContext1 = NULL;
		DX_ASSERT(pDevice->QueryInterface(__uuidof(ID3D11Device1), (void**)&pDevice1));
		DX_ASSERT(pContext->QueryInterface(__uuidof(ID3D11DeviceContext1), (void**)&pContext1));
		m_Device = pDevice1;
		m_ImmediateContext = pContext1;
		pDevice->Release();
		pContext->Release();

#if SHOOT_PLATFORM != SHOOT_PLATFORM_WP8
		if(!m_RenderTargetView.Get())
		{
			ResizeScreen(Size(int(m_ViewPortArea.Size().X), int(m_ViewPortArea.Size().Y)));
		}
#endif
	}
void DoResizeScreen (XtermWidget xw)
{
    int border = 2 * xw->screen.border;
     ResizeScreen (xw, border + xw->screen.fullVwin.sb_info.width,border);
}
Exemple #7
0
/**
 *  Die Nachrichtenschleife.
 *
 *  @return @p true bei Erfolg, @p false bei Fehler
 */
bool VideoSDL::MessageLoop()
{
    SDL_Event ev;

    static bool mouse_motion = 0;

    while(SDL_PollEvent(&ev))
    {
        switch(ev.type)
        {
            default:
                break;

            case SDL_QUIT:
                return false;

            case SDL_ACTIVEEVENT:
                if((ev.active.state & SDL_APPACTIVE) && ev.active.gain)
                {
                    // Window was restored. We need a resize to avoid a black screen
                    CallBack->ScreenResized(screenWidth, screenHeight);
                }
                break;

            case SDL_VIDEORESIZE:
            {
                ResizeScreen(ev.resize.w, ev.resize.h, isFullscreen_);
                CallBack->ScreenResized(screenWidth, screenHeight);
            } break;

            case SDL_KEYDOWN:
            {
                KeyEvent ke = { KT_INVALID, 0, false, false, false };

                switch(ev.key.keysym.sym)
                {
                    default:
                    {
                        // Die 12 F-Tasten
                        if(ev.key.keysym.sym >= SDLK_F1 && ev.key.keysym.sym <= SDLK_F12)
                            ke.kt = static_cast<KeyType>(KT_F1 + ev.key.keysym.sym - SDLK_F1);
                    } break;
                    case SDLK_RETURN:    ke.kt = KT_RETURN; break;
                    case SDLK_SPACE:     ke.kt = KT_SPACE; break;
                    case SDLK_LEFT:      ke.kt = KT_LEFT; break;
                    case SDLK_RIGHT:     ke.kt = KT_RIGHT; break;
                    case SDLK_UP:        ke.kt = KT_UP; break;
                    case SDLK_DOWN:      ke.kt = KT_DOWN; break;
                    case SDLK_BACKSPACE: ke.kt = KT_BACKSPACE; break;
                    case SDLK_DELETE:    ke.kt = KT_DELETE; break;
                    case SDLK_LSHIFT:    ke.kt = KT_SHIFT; break;
                    case SDLK_RSHIFT:    ke.kt = KT_SHIFT; break;
                    case SDLK_TAB:       ke.kt = KT_TAB; break;
                    case SDLK_HOME:      ke.kt = KT_HOME; break;
                    case SDLK_END:       ke.kt = KT_END; break;
                    case SDLK_ESCAPE:    ke.kt = KT_ESCAPE; break;
                    case SDLK_BACKQUOTE: ev.key.keysym.unicode = '^'; break;
                }

                /// Strg, Alt, usw gedrückt?
                if(ev.key.keysym.mod & KMOD_CTRL) ke.ctrl = true;
                if(ev.key.keysym.mod & KMOD_SHIFT) ke.shift = true;
                if(ev.key.keysym.mod & KMOD_ALT) ke.alt = true;

                if(ke.kt == KT_INVALID)
                {
                    ke.kt = KT_CHAR;
                    ke.c = ev.key.keysym.unicode;
                }

                CallBack->Msg_KeyDown(ke);
            } break;
            case SDL_MOUSEBUTTONDOWN:
            {
                mouse_xy.x = ev.button.x;
                mouse_xy.y = ev.button.y;

                if(/*!mouse_xy.ldown && */ev.button.button == SDL_BUTTON_LEFT)
                {
                    mouse_xy.ldown = true;
                    CallBack->Msg_LeftDown(mouse_xy);
                }
                if(/*!mouse_xy.rdown &&*/ ev.button.button == SDL_BUTTON_RIGHT)
                {
                    mouse_xy.rdown = true;
                    CallBack->Msg_RightDown(mouse_xy);
                }
            } break;
            case SDL_MOUSEBUTTONUP:
            {
                mouse_xy.x = ev.button.x;
                mouse_xy.y = ev.button.y;

                if(/*mouse_xy.ldown &&*/ ev.button.button == SDL_BUTTON_LEFT)
                {
                    mouse_xy.ldown = false;
                    CallBack->Msg_LeftUp(mouse_xy);
                }
                if(/*mouse_xy.rdown &&*/ ev.button.button == SDL_BUTTON_RIGHT)
                {
                    mouse_xy.rdown = false;
                    CallBack->Msg_RightUp(mouse_xy);
                }
                if(ev.button.button == SDL_BUTTON_WHEELUP)
                {
                    CallBack->Msg_WheelUp(mouse_xy);
                }
                if(ev.button.button == SDL_BUTTON_WHEELDOWN)
                {
                    CallBack->Msg_WheelDown(mouse_xy);
                }

            } break;
            case SDL_MOUSEMOTION:
            {
                if(!mouse_motion)
                {
                    mouse_xy.x = ev.motion.x;
                    mouse_xy.y = ev.motion.y;

                    mouse_motion = 1;
                    CallBack->Msg_MouseMove(mouse_xy);
                }


            } break;
        }
    }

    mouse_motion = 0;
    return true;
}
bool MockupVideoDriver::CreateScreen(const std::string&, const VideoMode& newSize, bool fullscreen)
{
    ResizeScreen(newSize, fullscreen);
    return true;
}
Exemple #9
0
void DoResizeScreen (register XtermWidget xw)
{
    int border = 2 * xw->screen.border;
    ResizeScreen (xw, border + xw->screen.fullVwin.scrollbar, border);
}