Merge "Clean up the code to build successfully on macOS" into devel/master
[platform/core/uifw/dali-core.git] / dali / internal / render / shaders / program-controller.cpp
index 949e2d4..1452564 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 // INTERNAL INCLUDES
 #include <dali/integration-api/gl-defines.h>
-#include <dali/internal/update/resources/resource-manager-declarations.h>
-#include <dali/internal/render/shaders/program.h>
-#include <dali/internal/render/common/post-process-resource-dispatcher.h>
+#include <dali/internal/common/shader-saver.h>
 #include <dali/internal/render/gl-resources/gl-call-debug.h>
+#include <dali/internal/render/shaders/program.h>
 
 namespace Dali
 {
@@ -31,10 +30,10 @@ namespace Dali
 namespace Internal
 {
 
-ProgramController::ProgramController( SceneGraph::PostProcessResourceDispatcher& postProcessDispatcher, Integration::GlAbstraction& glAbstraction )
-: mPostProcessDispatcher( postProcessDispatcher ),
+ProgramController::ProgramController( Integration::GlAbstraction& glAbstraction )
+: mShaderSaver( nullptr ),
   mGlAbstraction( glAbstraction ),
-  mCurrentProgram( NULL ),
+  mCurrentProgram( nullptr ),
   mProgramBinaryFormat( 0 ),
   mNumberOfProgramBinaryFormats( 0 )
 {
@@ -42,9 +41,7 @@ ProgramController::ProgramController( SceneGraph::PostProcessResourceDispatcher&
   mProgramCache.Reserve( 32 );
 }
 
-ProgramController::~ProgramController()
-{
-}
+ProgramController::~ProgramController() = default;
 
 void ProgramController::ResetProgramMatrices()
 {
@@ -52,8 +49,8 @@ void ProgramController::ResetProgramMatrices()
   for ( ProgramIterator iter = mProgramCache.Begin(); iter != end; ++iter )
   {
     Program* program = (*iter)->GetProgram();
-    program->SetProjectionMatrix( NULL );
-    program->SetViewMatrix( NULL );
+    program->SetProjectionMatrix( nullptr );
+    program->SetViewMatrix( nullptr );
   }
 }
 
@@ -83,7 +80,7 @@ void ProgramController::GlContextDestroyed()
   mNumberOfProgramBinaryFormats = 0;
   mProgramBinaryFormat = 0;
 
-  SetCurrentProgram( NULL );
+  SetCurrentProgram( nullptr );
   // Inform programs they are no longer valid
   const ProgramIterator end = mProgramCache.End();
   for ( ProgramIterator iter = mProgramCache.Begin(); iter != end; ++iter )
@@ -99,7 +96,7 @@ Integration::GlAbstraction& ProgramController::GetGlAbstraction()
 
 Program* ProgramController::GetProgram( size_t shaderHash )
 {
-  Program* program = NULL;
+  Program* program = nullptr;
   const ProgramIterator end = mProgramCache.End();
   for ( ProgramIterator iter = mProgramCache.Begin(); iter != end; ++iter )
   {
@@ -135,15 +132,30 @@ bool ProgramController::IsBinarySupported()
   return mNumberOfProgramBinaryFormats > 0;
 }
 
-unsigned int ProgramController::ProgramBinaryFormat()
+GLenum ProgramController::ProgramBinaryFormat()
 {
   return mProgramBinaryFormat;
 }
 
-void ProgramController::StoreBinary( Integration::ShaderDataPtr programData )
+void ProgramController::StoreBinary( Internal::ShaderDataPtr programData )
+{
+  DALI_ASSERT_DEBUG( programData->GetBufferSize() > 0 );
+  DALI_ASSERT_DEBUG( mShaderSaver && "SetShaderSaver() should have been called during startup." );
+
+  if( mShaderSaver != nullptr )
+  {
+    mShaderSaver->SaveBinary( programData );
+  }
+}
+
+void ProgramController::SetShaderSaver( ShaderSaver& shaderSaver )
+{
+  mShaderSaver = &shaderSaver;
+}
+
+void ProgramController::ClearCurrentProgram()
 {
-  ResourcePostProcessRequest request( programData->GetResourceId(), ResourcePostProcessRequest::SAVE );
-  mPostProcessDispatcher.DispatchPostProcessRequest( request );
+  SetCurrentProgram( nullptr );
 }
 
 } // namespace Internal