Merge "Fix for deadlock in PixmapRenderSurface" into devel/master
[platform/core/uifw/dali-adaptor.git] / platform-abstractions / tizen / resource-loader / resource-thread-shader.cpp
1 /*
2  * Copyright (c) 2014 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
18 #include <stdio.h>
19
20 #include "resource-thread-shader.h"
21 #include <dali/integration-api/debug.h>
22 #include <dali/integration-api/shader-data.h>
23
24 using namespace Dali::Integration;
25 using boost::mutex;
26 using boost::unique_lock;
27
28 namespace Dali
29 {
30
31 namespace TizenPlatform
32 {
33
34 ResourceThreadShader::ResourceThreadShader(ResourceLoader& resourceLoader)
35 : ResourceThreadBase(resourceLoader)
36 {
37 }
38
39 ResourceThreadShader::~ResourceThreadShader()
40 {
41 }
42
43 void ResourceThreadShader::Load(const ResourceRequest& request)
44 {
45   // fake successfull load as this is dead code
46   // Construct LoadedResource and ResourcePointer for shader data
47   LoadedResource resource( request.GetId(), request.GetType()->id, ResourcePointer() );
48
49   // Queue the loaded resource
50   mResourceLoader.AddLoadedResource(resource);
51 }
52
53 void ResourceThreadShader::Save(const ResourceRequest& request)
54 {
55   DALI_ASSERT_DEBUG(request.GetType()->id == ResourceShader);
56
57   DALI_LOG_INFO(mLogFilter, Debug::Verbose, "ResourceThreadShader::Save(%s)\n", request.GetPath().c_str());
58
59   bool result = false;
60
61   ShaderDataPtr shaderData( reinterpret_cast< ShaderData* >(request.GetResource().Get()) );
62
63   FILE *fp = fopen(request.GetPath().c_str(), "wb");
64   if (fp != NULL)
65   {
66     fwrite( shaderData->GetBufferData(), shaderData->GetBufferSize(), 1, fp );
67
68     fclose(fp);
69
70     result = true;
71
72     DALI_LOG_INFO(mLogFilter, Debug::Verbose, "ResourceThreadShader::Save(%s) - succeeded, wrote %d bytes\n",
73                   request.GetPath().c_str(), shaderData->GetBufferSize());
74   }
75   else
76   {
77     DALI_LOG_WARNING("**Failed** to save \"%s\"\n", request.GetPath().c_str());
78   }
79
80
81   if (result)
82   {
83     // Construct LoadedResource and ResourcePointer for image data
84     SavedResource resource( request.GetId(), request.GetType()->id );
85
86     // Queue the loaded resource
87     mResourceLoader.AddSavedResource(resource);
88   }
89   else
90   {
91     // add to the failed queue
92     FailedResource resource(request.GetId(), FailureUnknown);
93     mResourceLoader.AddFailedSave(resource);
94   }
95 }
96
97
98 } // namespace TizenPlatform
99
100 } // namespace Dali