// Get the program to use
// The program cache owns the Program object so we don't need to worry about this raw allocation here.
ShaderDataPtr shaderData = mRenderDataProvider->GetShader().GetShaderData();
-
+ const std::vector<char>& vertShader = shaderData->GetShaderForPipelineStage(Graphics::PipelineStage::VERTEX_SHADER);
+ const std::vector<char>& fragShader = shaderData->GetShaderForPipelineStage(Graphics::PipelineStage::FRAGMENT_SHADER);
Dali::Graphics::Shader& vertexShader = mShaderCache->GetShader(
- shaderData->GetShaderForPipelineStage(Graphics::PipelineStage::VERTEX_SHADER),
+ vertShader,
Graphics::PipelineStage::VERTEX_SHADER,
shaderData->GetSourceMode());
- Dali::Graphics::Shader& fragmentShader = mShaderCache->GetShader(
- shaderData->GetShaderForPipelineStage(Graphics::PipelineStage::FRAGMENT_SHADER),
- Graphics::PipelineStage::FRAGMENT_SHADER,
- shaderData->GetSourceMode());
+ Dali::Graphics::Shader& fragmentShader = mShaderCache->GetShader( fragShader,
+ Graphics::PipelineStage::FRAGMENT_SHADER,
+ shaderData->GetSourceMode());
std::vector<Graphics::ShaderState> shaderStates{
Graphics::ShaderState()
Graphics::UniquePtr<Graphics::CommandBuffer> mGraphicsCommandBuffer{};
- ProgramCache* mProgramCache{};
- Render::ShaderCache* mShaderCache{};
+ ProgramCache* mProgramCache{nullptr};
+ Render::ShaderCache* mShaderCache{nullptr};
Render::UniformBufferManager* mUniformBufferManager{};
std::vector<Graphics::UniformBufferBinding> mUniformBufferBindings{};
{
}
-Dali::Graphics::Shader& ShaderCache::GetShader(const std::vector<char> shaderCode, Graphics::PipelineStage stage, Graphics::ShaderSourceMode type)
+Dali::Graphics::Shader& ShaderCache::GetShader(const std::vector<char>& shaderCode, Graphics::PipelineStage stage, Graphics::ShaderSourceMode type)
{
for(auto&& item : mItems)
{
shaderCreateInfo.SetSourceSize(shaderCode.size());
shaderCreateInfo.SetSourceMode(type);
- auto shader = mController.CreateShader(shaderCreateInfo, nullptr);
+ Graphics::UniquePtr<Graphics::Shader> shader = mController.CreateShader(shaderCreateInfo, nullptr);
- auto retval = shader.get();
mItems.emplace_back(std::move(shader), shaderCode, stage, type);
- return *retval;
+ return *mItems.back().shader.get();
}
} // namespace Render
Item(Item&&) = default;
Item(Graphics::UniquePtr<Dali::Graphics::Shader> shader,
- const std::vector<char> shaderCode,
+ const std::vector<char>& shaderCode,
Graphics::PipelineStage stage,
Graphics::ShaderSourceMode type)
: shader(std::move(shader)),
~Item() = default;
Graphics::UniquePtr<Dali::Graphics::Shader> shader{nullptr};
- const std::vector<char> shaderCode;
+ std::vector<char> shaderCode;
Graphics::PipelineStage stage;
Graphics::ShaderSourceMode type;
};
* @param[in] type The type of the shader (i.e. text or binary)
* @return the graphics shader
*/
- Dali::Graphics::Shader& GetShader(const std::vector<char> shaderCode, Graphics::PipelineStage stage, Graphics::ShaderSourceMode type);
+ Dali::Graphics::Shader& GetShader(const std::vector<char>& shaderCode, Graphics::PipelineStage stage, Graphics::ShaderSourceMode type);
private:
std::vector<Item> mItems;