Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool PostProcessor::Render()
- {
- if(!m_Shader)
- return false;
- MEngine * engine = MEngine::getInstance(); // get the engine instance
- MRenderingContext * render = engine->getRenderingContext(); // get the rendering context
- MSystemContext * system = engine->getSystemContext();
- if(strcmp(engine->getRenderer()->getName(), "FixedRenderer") == 0)
- return false;
- // get level
- MLevel * level = MEngine::getInstance()->getLevel();
- if(! level)
- return false;
- // get current scene
- MScene * scene = level->getCurrentScene();
- if(! scene)
- return false;
- render->enableDepthTest();
- // get camera
- MOCamera * camera = scene->getCurrentCamera();
- // update listener
- camera->updateListener();
- // enable camera with current screen ratio
- camera->enable();
- MVector3 clearColor = camera->getClearColor();
- render->setClearColor(clearColor);
- // screen size
- unsigned int screenWidth = 0;
- unsigned int screenHeight = 0;
- system->getScreenSize(&screenWidth, &screenHeight);
- // render to texture
- render->bindFrameBuffer(m_BufferID);
- render->attachFrameBufferTexture(M_ATTACH_COLOR0, m_ColourTexID);
- render->attachFrameBufferTexture(M_ATTACH_DEPTH, m_DepthTexID);
- render->setViewport(0, 0, m_Resolution, m_Resolution); // change viewport
- render->clear(M_BUFFER_COLOR | M_BUFFER_DEPTH);
- // draw the scene
- scene->draw(camera);
- for(int i = 0; i < m_CameraLayersFX.size(); i++)
- {
- render->clear(M_BUFFER_DEPTH);
- MScene* layerScene = engine->getLevel()->getSceneByIndex(m_CameraLayersFX[i]); //m_CameraLayersFX is a std::vector holding the ids of the layer scenes
- MOCamera* layerCam = layerScene->getCurrentCamera();
- printf("layerCam->name = %s\n", layerCam->getName()); // This gives the right output! layerCam and layerScene are correctly set up!
- printf("layerScene->name = %s\n", layerScene->getName());
- layerCam->enable();
- layerScene->draw(layerCam);
- }
- // finish render to texture
- render->bindFrameBuffer(0);
- // draw the rendered textured with a shader effect
- render->setViewport(0, 0, screenWidth, screenHeight);
- render->setClearColor(MVector3(1, 0, 0));
- render->clear(M_BUFFER_COLOR | M_BUFFER_DEPTH);
- Set2D(screenWidth, screenHeight);
- m_Shader->Apply();
- render->bindTexture(m_ColourTexID);
- render->bindTexture(m_DepthTexID, 1);
- DrawQuad(MVector2((float)screenWidth, (float)screenHeight));
- m_Shader->Clear();
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement