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; }