Uniform data cached locally in the uniform map
[platform/core/uifw/dali-core.git] / dali / internal / render / renderers / render-sampler.cpp
1 /*
2  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <dali/internal/render/renderers/render-sampler.h>
18
19 namespace Dali
20 {
21 namespace Internal
22 {
23 namespace Render
24 {
25 Sampler::Sampler()
26 : mGraphicsController(nullptr),
27   mMinificationFilter(FilterMode::DEFAULT),
28   mMagnificationFilter(FilterMode::DEFAULT),
29   mSWrapMode(WrapMode::DEFAULT),
30   mTWrapMode(WrapMode::DEFAULT),
31   mRWrapMode(WrapMode::DEFAULT),
32   mIsDirty(false)
33 {
34 }
35
36 const Dali::Graphics::Sampler* Sampler::GetGraphicsObject()
37 {
38   if(IsDefaultSampler())
39   {
40     mGraphicsSampler.reset();
41   }
42   else
43   {
44     CreateGraphicsObject();
45   }
46   mIsDirty = false;
47   return mGraphicsSampler.get();
48 }
49
50 void Sampler::Initialize(Graphics::Controller& graphicsController)
51 {
52   mGraphicsController = &graphicsController;
53   mGraphicsSampler.reset(nullptr);
54 }
55
56 Graphics::Sampler* Sampler::CreateGraphicsObject()
57 {
58   if(!mGraphicsSampler || mIsDirty)
59   {
60     Graphics::SamplerFilter     minFilter  = GetGraphicsFilter(mMinificationFilter);
61     Graphics::SamplerFilter     magFilter  = GetGraphicsFilter(mMagnificationFilter);
62     Graphics::SamplerMipmapMode mipmapMode = GetGraphicsSamplerMipmapMode(mMinificationFilter);
63
64     if(mMinificationFilter == FilterMode::NONE)
65     {
66       minFilter  = Graphics::SamplerFilter::NEAREST;
67       mipmapMode = Graphics::SamplerMipmapMode::LINEAR;
68     }
69     if(mMagnificationFilter == FilterMode::NONE)
70     {
71       magFilter = Graphics::SamplerFilter::LINEAR;
72     }
73
74     mGraphicsSampler = mGraphicsController->CreateSampler(
75       Graphics::SamplerCreateInfo()
76         .SetMinFilter(minFilter)
77         .SetMagFilter(magFilter)
78         .SetAddressModeU(GetGraphicsSamplerAddressMode(mSWrapMode))
79         .SetAddressModeV(GetGraphicsSamplerAddressMode(mTWrapMode))
80         .SetAddressModeW(GetGraphicsSamplerAddressMode(mRWrapMode))
81         .SetMipMapMode(mipmapMode),
82       nullptr);
83   }
84   mIsDirty = false;
85   return mGraphicsSampler.get();
86 }
87
88 } // namespace Render
89
90 } // namespace Internal
91
92 } // namespace Dali