Remove SetTextureAffectsTransparency as it is not needed
[platform/core/uifw/dali-toolkit.git] / plugins / dali-script-v8 / src / rendering / material-wrapper.cpp
1 /*
2  * Copyright (c) 2015 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 // CLASS HEADER
19 #include "material-wrapper.h"
20
21 // INTERNAL INCLUDES
22 #include <v8-utils.h>
23 #include <rendering/material-api.h>
24 #include <shared/api-function.h>
25 #include <shared/object-template-helper.h>
26 #include <dali-wrapper.h>
27
28 namespace Dali
29 {
30
31 namespace V8Plugin
32 {
33
34 v8::Persistent<v8::ObjectTemplate> MaterialWrapper::mMaterialTemplate;
35
36 namespace // un-named name space
37 {
38
39 /**
40  * Contains a list of all functions that can be called
41  */
42 const ApiFunction MaterialFunctionTable[]=
43 {
44     /**************************************
45     * Material API (in order of Material.h)
46     **************************************/
47
48    { "SetShader"                       , MaterialApi::SetShader },
49    { "GetShader"                       , MaterialApi::GetShader },
50    { "AddTexture"                      , MaterialApi::AddTexture },
51    { "RemoveTexture"                   , MaterialApi::RemoveTexture },
52    { "SetTextureImage"                 , MaterialApi::SetTextureImage },
53    { "SetTextureSampler"               , MaterialApi::SetTextureSampler },
54    { "SetTextureUniformName"           , MaterialApi::SetTextureUniformName },
55    { "GetTextureIndex"                 , MaterialApi::GetTextureIndex },
56    { "GetNumberOfTextures"             , MaterialApi::GetNumberOfTextures },
57    { "SetFaceCullingMode"              , MaterialApi::SetFaceCullingMode },
58    { "SetBlendMode"                    , MaterialApi::SetBlendMode },
59    { "GetBlendMode"                    , MaterialApi::GetBlendMode },
60    { "SetBlendFunc"                    , MaterialApi::SetBlendFunc },
61    { "GetBlendFunc"                    , MaterialApi::GetBlendFunc },
62    { "SetBlendEquation"                , MaterialApi::SetBlendEquation },
63    { "GetBlendEquation"                , MaterialApi::GetBlendEquation },
64 };
65
66 const unsigned int MaterialFunctionTableCount = sizeof(MaterialFunctionTable)/sizeof(MaterialFunctionTable[0]);
67 } //un-named space
68
69
70 MaterialWrapper::MaterialWrapper( const Dali::Material& material, GarbageCollectorInterface& gc )
71 :  HandleWrapper(  BaseWrappedObject::MATERIAL , material, gc )
72 {
73     mMaterial = material;
74 }
75
76 v8::Handle<v8::Object> MaterialWrapper::WrapMaterial(v8::Isolate* isolate, const Dali::Material& material )
77 {
78   v8::EscapableHandleScope handleScope( isolate );
79   v8::Local<v8::ObjectTemplate> objectTemplate;
80
81   objectTemplate = GetMaterialTemplate( isolate);
82
83   // create an instance of the template
84   v8::Local<v8::Object> localObject = objectTemplate->NewInstance();
85
86   // create the Material wrapper
87   MaterialWrapper* pointer =  new MaterialWrapper( material, Dali::V8Plugin::DaliWrapper::Get().GetDaliGarbageCollector() );
88
89   // assign the JavaScript object to the wrapper.
90   pointer->SetJavascriptObject( isolate, localObject );
91
92   return handleScope.Escape( localObject );
93 }
94
95 v8::Local<v8::ObjectTemplate> MaterialWrapper::GetMaterialTemplate( v8::Isolate* isolate)
96 {
97   v8::EscapableHandleScope handleScope( isolate );
98   v8::Local<v8::ObjectTemplate> objectTemplate;
99
100   if( mMaterialTemplate.IsEmpty() )
101   {
102     objectTemplate = MakeMaterialTemplate( isolate );
103     mMaterialTemplate.Reset( isolate, objectTemplate );
104   }
105   else
106   {
107     // get the object template
108     objectTemplate = v8::Local<v8::ObjectTemplate>::New( isolate, mMaterialTemplate );
109   }
110   return handleScope.Escape( objectTemplate );
111 }
112
113 v8::Handle<v8::ObjectTemplate> MaterialWrapper::MakeMaterialTemplate( v8::Isolate* isolate )
114 {
115   v8::EscapableHandleScope handleScope( isolate );
116
117   v8::Local<v8::ObjectTemplate> objTemplate = v8::ObjectTemplate::New();
118
119   // property handle intercepts property getters and setters and signals
120   HandleWrapper::AddInterceptsToTemplate( isolate, objTemplate );
121
122   objTemplate->SetInternalFieldCount( BaseWrappedObject::FIELD_COUNT );
123
124   // add our function properties
125   ObjectTemplateHelper::InstallFunctions( isolate, objTemplate, MaterialFunctionTable, MaterialFunctionTableCount );
126
127   return handleScope.Escape( objTemplate );
128 }
129
130 void MaterialWrapper::NewMaterial( const v8::FunctionCallbackInfo< v8::Value >& args)
131 {
132   v8::Isolate* isolate = args.GetIsolate();
133   v8::HandleScope handleScope( isolate);
134
135   if(!args.IsConstructCall())
136   {
137       DALI_SCRIPT_EXCEPTION( isolate, "Material constructor called without 'new'");
138       return;
139   }
140   Dali::Material material = MaterialApi::New( args );
141
142   if(material)
143   {
144     v8::Local<v8::Object> localObject = WrapMaterial( isolate, material );
145     args.GetReturnValue().Set( localObject );
146   }
147 }
148
149
150 Material MaterialWrapper::GetMaterial()
151 {
152   return mMaterial;
153 }
154
155
156 } // namespace V8Plugin
157
158 } // namespace Dali