Пример #1
0
	void CD3D11Driver::setMultipleRenderTargets(IRenderTarget* renderTargets[], u32 count)
	{
		if (count > D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT)
			count = D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT;
		// check if they are equal to current RTs,
		memset(D3D11DriverState.RenderTargets, 0, sizeof(D3D11DriverState.RenderTargets));
		memset(D3D11DriverState.RenderTargetViews, 0, sizeof(D3D11DriverState.RenderTargetViews));

		std::vector<SViewport> viewports;
		viewports.resize(count);

		for (u32 i = 0; i < count; i++)
		{
			IRenderTarget* pRenderTarget = renderTargets[i];
			D3D11DriverState.RenderTargets[i] = pRenderTarget;
			if (pRenderTarget)
			{
				CD3D11RenderTarget* d3d11RenderTarget = dynamic_cast<CD3D11RenderTarget*>(pRenderTarget);
				D3D11DriverState.RenderTargetViews[i] = d3d11RenderTarget->getRenderTargetView();
				ID3D11ShaderResourceView* d3dShaderResourceView = d3d11RenderTarget->getShaderResourceView();
				if (d3dShaderResourceView)
					unbindTextureFromShaders(d3dShaderResourceView);

				SViewport viewport = mViewport;
				viewport.Width = (f32)pRenderTarget->getWidth();
				viewport.Height = (f32)pRenderTarget->getHeight();
				viewports[i] = viewport;
			}
			else
			{
				SViewport viewport = mViewport;
				viewport.Width = static_cast<f32>(mBackBufferWidth);
				viewport.Height = static_cast<f32>(mBackBufferHeight);
				viewports[i] = viewport;
			}
		}

		md3dDeviceContext->OMSetRenderTargets(count, D3D11DriverState.RenderTargetViews, D3D11DriverState.DepthStencilView);
		setViewports(viewports);
	}
int main()
{
	// Create the main window
	sf::Window App(sf::VideoMode(windowWidth, windowHeight, 32), "My OpenGL Window");//, sf::Style::Fullscreen, 2); // 2 levels of antialiasing

	init(); //Init OpenGL states 

	sf::Event Event;

	///// MAIN LOOP /////
	while (App.isOpen())
	{
		// Clear color and depth buffers
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


		///// Real-time input handling
		if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
			zRot += .1f;
		if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
			zRot -= .1f;
		if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
			xTrans += .1f;
		if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
			xTrans -= .1f;
		/////

		while (App.pollEvent(Event))
		{
			// Close window : exit
			if (Event.type == sf::Event::Closed)
				App.close();

			// Escape key : exit
			if ((Event.type == sf::Event::KeyPressed) && (Event.key.code == sf::Keyboard::Escape))
				App.close();

			// Example05 - toggle wireframe mode ON/OFF
			if ((Event.type == sf::Event::KeyPressed) && (Event.key.code == sf::Keyboard::K)) {
				if (polyMode == GL_FILL)
					polyMode = GL_LINE;
				else polyMode = GL_FILL;

				glPolygonMode(GL_FRONT_AND_BACK, polyMode);
			}


			//// Resize event : adjust viewport
			//if (Event.type == sf::Event::Resized) {
			//	glViewport(0, 0, Event.size.width, Event.size.height);
			//	glMatrixMode(GL_PROJECTION);
			//	glLoadIdentity();
			//	gluPerspective(90.f, Event.size.width / Event.size.height, 1.f, 500.f);
			//	glMatrixMode(GL_MODELVIEW);

			//}

			// L key: switch Light ON/OFF
			if ((Event.type == sf::Event::KeyPressed) && (Event.key.code == sf::Keyboard::L))
			if (light) {
				glDisable(GL_LIGHTING);
				light = FALSE;
			}
			else {
				glEnable(GL_LIGHTING);
				light = TRUE;
			}

			// M key: switch shading model (smooth | flat)
			if ((Event.type == sf::Event::KeyPressed) && (Event.key.code == sf::Keyboard::M))
			if (model) {
				glShadeModel(GL_FLAT);
				model = 0;
			}
			else {
				glShadeModel(GL_SMOOTH);
				model = 1;
			}


		}
		App.setActive();

		// Example 09
		setViewports();
		//////

		// Finally, display rendered frame on screen
		App.display();
	}

	return EXIT_SUCCESS;
}