Advertisement
Guest User

Untitled

a guest
Mar 19th, 2014
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.46 KB | None | 0 0
  1. bool PostProcessor::Render()
  2. {
  3.     if(!m_Shader)
  4.         return false;
  5.  
  6.     MEngine * engine = MEngine::getInstance(); // get the engine instance
  7.     MRenderingContext * render = engine->getRenderingContext(); // get the rendering context
  8.     MSystemContext * system = engine->getSystemContext();
  9.  
  10.     if(strcmp(engine->getRenderer()->getName(), "FixedRenderer") == 0)
  11.         return false;
  12.  
  13.  
  14.     // get level
  15.     MLevel * level = MEngine::getInstance()->getLevel();
  16.     if(! level)
  17.         return false;
  18.  
  19.     // get current scene
  20.     MScene * scene = level->getCurrentScene();
  21.     if(! scene)
  22.         return false;
  23.  
  24.     render->enableDepthTest();
  25.  
  26.     // get camera
  27.     MOCamera * camera = scene->getCurrentCamera();
  28.  
  29.     // update listener
  30.     camera->updateListener();
  31.  
  32.     // enable camera with current screen ratio
  33.     camera->enable();
  34.  
  35.  
  36.     MVector3 clearColor = camera->getClearColor();
  37.  
  38.     render->setClearColor(clearColor);
  39.  
  40.     // screen size
  41.     unsigned int screenWidth = 0;
  42.     unsigned int screenHeight = 0;
  43.     system->getScreenSize(&screenWidth, &screenHeight);
  44.  
  45.  
  46.     // render to texture
  47.     render->bindFrameBuffer(m_BufferID);
  48.     render->attachFrameBufferTexture(M_ATTACH_COLOR0, m_ColourTexID);
  49.     render->attachFrameBufferTexture(M_ATTACH_DEPTH, m_DepthTexID);
  50.     render->setViewport(0, 0, m_Resolution, m_Resolution); // change viewport
  51.  
  52.     render->clear(M_BUFFER_COLOR | M_BUFFER_DEPTH);
  53.  
  54.     // draw the scene
  55.     scene->draw(camera);
  56.  
  57.  for(int i = 0; i < m_CameraLayersFX.size(); i++)
  58.  {
  59.         render->clear(M_BUFFER_DEPTH);
  60.         MScene* layerScene = engine->getLevel()->getSceneByIndex(m_CameraLayersFX[i]); //m_CameraLayersFX is a std::vector holding the ids of the layer scenes
  61.         MOCamera* layerCam = layerScene->getCurrentCamera();
  62.  
  63.         printf("layerCam->name = %s\n", layerCam->getName()); // This gives the right output! layerCam and layerScene are correctly set up!
  64.         printf("layerScene->name = %s\n", layerScene->getName());
  65.  
  66.         layerCam->enable();
  67.         layerScene->draw(layerCam);
  68.   }
  69.  
  70.     // finish render to texture
  71.     render->bindFrameBuffer(0);
  72.  
  73.     // draw the rendered textured with a shader effect
  74.     render->setViewport(0, 0, screenWidth, screenHeight);
  75.     render->setClearColor(MVector3(1, 0, 0));
  76.     render->clear(M_BUFFER_COLOR | M_BUFFER_DEPTH);
  77.  
  78.     Set2D(screenWidth, screenHeight);
  79.  
  80.     m_Shader->Apply();
  81.     render->bindTexture(m_ColourTexID);
  82.     render->bindTexture(m_DepthTexID, 1);
  83.  
  84.     DrawQuad(MVector2((float)screenWidth, (float)screenHeight));
  85.     m_Shader->Clear();
  86.  
  87.     return true;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement