2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 #include "material-wrapper.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>
34 v8::Persistent<v8::ObjectTemplate> MaterialWrapper::mMaterialTemplate;
36 namespace // un-named name space
40 * Contains a list of all functions that can be called
42 const ApiFunction MaterialFunctionTable[]=
44 /**************************************
45 * Material API (in order of Material.h)
46 **************************************/
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 { "SetTextureAffectsTransparency" , MaterialApi::SetTextureAffectsTransparency },
56 { "GetTextureIndex" , MaterialApi::GetTextureIndex },
57 { "GetNumberOfTextures" , MaterialApi::GetNumberOfTextures },
58 { "SetFaceCullingMode" , MaterialApi::SetFaceCullingMode },
59 { "SetBlendMode" , MaterialApi::SetBlendMode },
60 { "GetBlendMode" , MaterialApi::GetBlendMode },
61 { "SetBlendFunc" , MaterialApi::SetBlendFunc },
62 { "GetBlendFunc" , MaterialApi::GetBlendFunc },
63 { "SetBlendEquation" , MaterialApi::SetBlendEquation },
64 { "GetBlendEquation" , MaterialApi::GetBlendEquation },
67 const unsigned int MaterialFunctionTableCount = sizeof(MaterialFunctionTable)/sizeof(MaterialFunctionTable[0]);
71 MaterialWrapper::MaterialWrapper( const Dali::Material& material, GarbageCollectorInterface& gc )
72 : HandleWrapper( BaseWrappedObject::MATERIAL , material, gc )
77 v8::Handle<v8::Object> MaterialWrapper::WrapMaterial(v8::Isolate* isolate, const Dali::Material& material )
79 v8::EscapableHandleScope handleScope( isolate );
80 v8::Local<v8::ObjectTemplate> objectTemplate;
82 objectTemplate = GetMaterialTemplate( isolate);
84 // create an instance of the template
85 v8::Local<v8::Object> localObject = objectTemplate->NewInstance();
87 // create the Material wrapper
88 MaterialWrapper* pointer = new MaterialWrapper( material, Dali::V8Plugin::DaliWrapper::Get().GetDaliGarbageCollector() );
90 // assign the JavaScript object to the wrapper.
91 pointer->SetJavascriptObject( isolate, localObject );
93 return handleScope.Escape( localObject );
96 v8::Local<v8::ObjectTemplate> MaterialWrapper::GetMaterialTemplate( v8::Isolate* isolate)
98 v8::EscapableHandleScope handleScope( isolate );
99 v8::Local<v8::ObjectTemplate> objectTemplate;
101 if( mMaterialTemplate.IsEmpty() )
103 objectTemplate = MakeMaterialTemplate( isolate );
104 mMaterialTemplate.Reset( isolate, objectTemplate );
108 // get the object template
109 objectTemplate = v8::Local<v8::ObjectTemplate>::New( isolate, mMaterialTemplate );
111 return handleScope.Escape( objectTemplate );
114 v8::Handle<v8::ObjectTemplate> MaterialWrapper::MakeMaterialTemplate( v8::Isolate* isolate )
116 v8::EscapableHandleScope handleScope( isolate );
118 v8::Local<v8::ObjectTemplate> objTemplate = v8::ObjectTemplate::New();
120 // property handle intercepts property getters and setters and signals
121 HandleWrapper::AddInterceptsToTemplate( isolate, objTemplate );
123 objTemplate->SetInternalFieldCount( BaseWrappedObject::FIELD_COUNT );
125 // add our function properties
126 ObjectTemplateHelper::InstallFunctions( isolate, objTemplate, MaterialFunctionTable, MaterialFunctionTableCount );
128 return handleScope.Escape( objTemplate );
131 void MaterialWrapper::NewMaterial( const v8::FunctionCallbackInfo< v8::Value >& args)
133 v8::Isolate* isolate = args.GetIsolate();
134 v8::HandleScope handleScope( isolate);
136 if(!args.IsConstructCall())
138 DALI_SCRIPT_EXCEPTION( isolate, "Material constructor called without 'new'");
141 Dali::Material material = MaterialApi::New( args );
145 v8::Local<v8::Object> localObject = WrapMaterial( isolate, material );
146 args.GetReturnValue().Set( localObject );
151 Material MaterialWrapper::GetMaterial()
157 } // namespace V8Plugin