/*
- * 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
{
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 )
{
mProgramCache.Reserve( 32 );
}
-ProgramController::~ProgramController()
-{
-}
+ProgramController::~ProgramController() = default;
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 );
}
}
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 )
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 )
{
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