Removed FrameBufferId from SceneGraph::RenderTask 69/112169/2
authorFerran Sole <ferran.sole@samsung.com>
Thu, 26 Jan 2017 17:28:20 +0000 (17:28 +0000)
committerFerran Sole <ferran.sole@samsung.com>
Fri, 27 Jan 2017 12:06:38 +0000 (12:06 +0000)
Change-Id: I5411bbffd7569a29eb35559b767e3cc5e1159eeb

dali/internal/render/common/render-debug.cpp
dali/internal/render/common/render-instruction.cpp
dali/internal/render/common/render-instruction.h
dali/internal/render/common/render-manager.cpp
dali/internal/update/manager/render-task-processor.cpp
dali/internal/update/render-tasks/scene-graph-render-task.cpp
dali/internal/update/render-tasks/scene-graph-render-task.h

index e5e1d23..e418a6b 100644 (file)
@@ -56,7 +56,7 @@ void PrintFrameEnd()
 
 void PrintRenderInstruction( const SceneGraph::RenderInstruction& instruction, BufferIndex index )
 {
-  const char* target = (0 != instruction.mOffscreenTextureId) ? "FrameBuffer" : "Screen";
+  const char* target = (nullptr != instruction.mFrameBuffer) ? "FrameBuffer" : "Screen";
 
   std::stringstream debugStream;
   debugStream << "Rendering to " << target << ", View: " << *(instruction.GetViewMatrix(index)) << " Projection: " << *(instruction.GetProjectionMatrix(index));
index d66b096..a5f5202 100644 (file)
@@ -37,7 +37,6 @@ RenderInstruction::RenderInstruction()
   mClearColor(),
   mIsViewportSet( false ),
   mIsClearColorSet( false ),
-  mOffscreenTextureId( 0 ),
   mFrameBuffer( 0 ),
   mCamera( 0 ),
   mNextFreeRenderList( 0 )
@@ -106,7 +105,6 @@ const RenderList* RenderInstruction::GetRenderList( RenderListContainer::SizeTyp
 }
 
 void RenderInstruction::Reset( Camera*         camera,
-                               unsigned int    offscreenTextureId,
                                Render::FrameBuffer* frameBuffer,
                                const Viewport* viewport,
                                const Vector4*  clearColor )
@@ -116,7 +114,6 @@ void RenderInstruction::Reset( Camera*         camera,
   mIsViewportSet = NULL != viewport;
   mClearColor = clearColor ? *clearColor : Color::BLACK;
   mIsClearColorSet = NULL != clearColor;
-  mOffscreenTextureId = offscreenTextureId;
   mRenderTracker = NULL;
   mNextFreeRenderList = 0;
   mFrameBuffer = frameBuffer;
index 536f28d..dc613fa 100644 (file)
@@ -98,7 +98,6 @@ public:
    * @param[in] clearColor A pointer to a color to clear with, or NULL if no clear is required.
    */
   void Reset( Camera* camera,
-              unsigned int offscreenId,
               Render::FrameBuffer* frameBuffer,
               const Viewport* viewport,
               const Vector4* clearColor );
@@ -141,7 +140,6 @@ public: // Data
   bool     mIsViewportSet:1;            ///< Flag to determine whether the viewport is set
   bool     mIsClearColorSet:1;          ///< Flag to determine whether the clearColor is set
 
-  unsigned int mOffscreenTextureId;     ///< Optional offscreen target
   Render::FrameBuffer* mFrameBuffer;
 
 private: // Data
index 1021521..a2b6d65 100644 (file)
@@ -611,33 +611,7 @@ void RenderManager::DoRender( RenderInstruction& instruction, Shader& defaultSha
 
   FrameBufferTexture* offscreen = NULL;
 
-  if ( instruction.mOffscreenTextureId != 0 )
-  {
-    offscreen = mImpl->textureCache.GetFramebuffer( instruction.mOffscreenTextureId );
-    DALI_ASSERT_DEBUG( NULL != offscreen );
-
-    if( NULL != offscreen &&
-        offscreen->Prepare() )
-    {
-      // Check whether a viewport is specified, otherwise the full surface size is used
-      if ( instruction.mIsViewportSet )
-      {
-        // For glViewport the lower-left corner is (0,0)
-        const int y = ( offscreen->GetHeight() - instruction.mViewport.height ) - instruction.mViewport.y;
-        viewportRect.Set( instruction.mViewport.x,  y, instruction.mViewport.width, instruction.mViewport.height );
-      }
-      else
-      {
-        viewportRect.Set( 0, 0, offscreen->GetWidth(), offscreen->GetHeight() );
-      }
-    }
-    else
-    {
-      // Offscreen is NULL or could not be prepared.
-      return;
-    }
-  }
-  else if( instruction.mFrameBuffer != 0 )
+  if( instruction.mFrameBuffer != 0 )
   {
     instruction.mFrameBuffer->Bind( mImpl->context );
     if ( instruction.mIsViewportSet )
@@ -693,12 +667,6 @@ void RenderManager::DoRender( RenderInstruction& instruction, Shader& defaultSha
                                     mImpl->geometryBatcher,
                                     mImpl->renderBufferIndex );
 
-  if(instruction.mOffscreenTextureId != 0)
-  {
-    GLenum attachments[] = { GL_DEPTH_ATTACHMENT, GL_STENCIL_ATTACHMENT };
-    mImpl->context.InvalidateFramebuffer(GL_FRAMEBUFFER, 2, attachments);
-  }
-
   if( instruction.mRenderTracker && ( offscreen != NULL || instruction.mFrameBuffer != NULL ) )
   {
     // This will create a sync object every frame this render tracker
index ec99e03..e15d426 100644 (file)
@@ -229,8 +229,7 @@ void RenderTaskProcessor::Process( BufferIndex updateBufferIndex,
     RenderTask& renderTask = **iter;
 
     // Off screen only.
-    if( ( ( 0 == renderTask.GetFrameBufferId() ) && ( renderTask.GetFrameBuffer() == 0 ) ) ||
-        ( !renderTask.ReadyToRender( updateBufferIndex ) ) )
+    if( ( renderTask.GetFrameBuffer() == 0 ) || ( !renderTask.ReadyToRender( updateBufferIndex ) ) )
     {
       // Skip to next task.
       continue;
@@ -298,9 +297,7 @@ void RenderTaskProcessor::Process( BufferIndex updateBufferIndex,
     RenderTask& renderTask = **iter;
 
     // On screen only.
-    if( ( 0 != renderTask.GetFrameBufferId() ) ||
-        ( renderTask.GetFrameBuffer() != 0 )   ||
-        ( !renderTask.ReadyToRender( updateBufferIndex ) ) )
+    if( ( renderTask.GetFrameBuffer() != 0 )   || ( !renderTask.ReadyToRender( updateBufferIndex ) ) )
     {
       // Skip to next task.
       continue;
index 3ef1b3f..e6fd9f8 100644 (file)
@@ -113,18 +113,6 @@ void RenderTask::SetCamera( Node* cameraNode, Camera* camera )
   mCamera = camera;
 }
 
-void RenderTask::SetFrameBufferId( unsigned int resourceId, bool isNativeFBO )
-{
-  // note that we might already have a RenderTracker
-  mTargetIsNativeFramebuffer = isNativeFBO;
-  mFrameBufferResourceId = resourceId;
-}
-
-unsigned int RenderTask::GetFrameBufferId() const
-{
-  return mFrameBufferResourceId;
-}
-
 void RenderTask::SetFrameBuffer( Render::FrameBuffer* frameBuffer )
 {
   mFrameBuffer = frameBuffer;
@@ -200,8 +188,6 @@ void RenderTask::SetRefreshRate( unsigned int refreshRate )
     mState = RENDER_ONCE_WAITING_FOR_RESOURCES;
     mWaitingToRender = true;
     mNotifyTrigger = false;
-    // need at least on other render on the FBO
-    mResourceManager->SetFrameBufferBeenRenderedTo( mFrameBufferResourceId, false );
   }
 
   mFrameCounter = 0u;
@@ -239,8 +225,6 @@ bool RenderTask::ReadyToRender( BufferIndex updateBufferIndex )
   }
 
   mCamera->Update( updateBufferIndex, *mCameraNode );
-
-  TASK_LOG_FMT(Debug::General, " =T (FBO ID:%d) FC:%d\n", mFrameBufferResourceId , mFrameCounter );
   return true;
 }
 
@@ -276,10 +260,6 @@ void RenderTask::SetResourcesFinished( bool resourcesFinished )
 {
   // resourcesFinished tells us that this render task will render to its FBO
   mResourcesFinished = resourcesFinished;
-  if( mResourcesFinished )
-  {
-    mResourceManager->SetFrameBufferBeenRenderedTo( mFrameBufferResourceId, true );
-  }
 }
 
 // Called every frame regardless of whether render was required.
@@ -327,23 +307,7 @@ void RenderTask::UpdateState()
     {
       mWaitingToRender = true;
       mNotifyTrigger = false;
-      if( mFrameBufferResourceId > 0 )
-      {
-        if( mTargetIsNativeFramebuffer )
-        {
-          if( mRenderSyncTracker && mRenderSyncTracker->IsSynced() )
-          {
-            mWaitingToRender = false;
-            mNotifyTrigger = true;
-          }
-        }
-        else if( mResourceManager->HasFrameBufferBeenRenderedTo( mFrameBufferResourceId ) )
-        {
-          mWaitingToRender = false;
-          mNotifyTrigger = true;
-        }
-      }
-      else if( mFrameBuffer )
+      if( mFrameBuffer )
       {
         if( !mRenderSyncTracker || (mRenderSyncTracker && mRenderSyncTracker->IsSynced() ))
         {
@@ -423,7 +387,6 @@ void RenderTask::PrepareRenderInstruction( RenderInstruction& instruction, Buffe
   bool viewportSet = QueryViewport( updateBufferIndex, viewport );
 
   instruction.Reset( mCamera,
-                     GetFrameBufferId(),
                      GetFrameBuffer(),
                      viewportSet ? &viewport : NULL,
                      mClearEnabled ? &GetClearColor( updateBufferIndex ) : NULL );
@@ -523,7 +486,6 @@ RenderTask::RenderTask()
   mSourceNode( NULL ),
   mCameraNode( NULL ),
   mCamera( NULL ),
-  mFrameBufferResourceId( 0 ),
   mFrameBuffer(0),
   mResourcesFinished( false ),
   mWaitingToRender( false ),
@@ -538,7 +500,6 @@ RenderTask::RenderTask()
   mRefreshRate( Dali::RenderTask::DEFAULT_REFRESH_RATE ),
   mFrameCounter( 0u ),
   mRenderedOnceCounter( 0u ),
-  mTargetIsNativeFramebuffer( false ),
   mRequiresSync( false )
 {
 }
index 4ac9c28..63b2da3 100644 (file)
@@ -377,7 +377,6 @@ private:
   Node* mSourceNode;
   Node* mCameraNode;
   SceneGraph::Camera* mCamera;
-  unsigned int mFrameBufferResourceId;
   Render::FrameBuffer* mFrameBuffer;
 
   bool mResourcesFinished:1; ///< True if all resources were available when the render-task was processed
@@ -394,24 +393,11 @@ private:
   unsigned int mFrameCounter;       ///< counter for rendering every N frames
 
   unsigned int mRenderedOnceCounter;  ///< Incremented whenever state changes to RENDERED_ONCE_AND_NOTIFIED
-  bool mTargetIsNativeFramebuffer; ///< Tells if our target is a native framebuffer
   bool mRequiresSync;              ///< Whether sync is needed to track the render
 
 };
 
 // Messages for RenderTask
-
-inline void SetFrameBufferIdMessage( EventThreadServices& eventThreadServices, RenderTask& task, unsigned int resourceId, bool isNativeFBO )
-{
-  typedef MessageValue2< RenderTask, unsigned int, bool > LocalType;
-
-  // Reserve some memory inside the message queue
-  unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
-
-  // Construct message in the message queue memory; note that delete should not be called on the return value
-  new (slot) LocalType( &task, &RenderTask::SetFrameBufferId, resourceId, isNativeFBO );
-}
-
 inline void SetFrameBufferMessage( EventThreadServices& eventThreadServices, RenderTask& task, Render::FrameBuffer* frameBuffer )
 {
   typedef MessageValue1< RenderTask, Render::FrameBuffer*> LocalType;