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.
20 #include "renderer-api.h"
23 #include <dali/public-api/object/type-registry.h>
27 #include <rendering/renderer-wrapper.h>
28 #include <rendering/geometry-api.h>
29 #include <rendering/geometry-wrapper.h>
30 #include <rendering/material-api.h>
31 #include <rendering/material-wrapper.h>
42 * Renderer is a handle to an object that can be used to provide an image to a material.
48 Renderer RendererApi::GetRenderer( v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args )
50 v8::HandleScope handleScope( isolate );
52 v8::Local<v8::Object> object = args.This();
53 v8::Local<v8::External> field = v8::Local<v8::External>::Cast( object->GetInternalField(0) );
54 void* ptr = field->Value();
56 RendererWrapper* wrapper = static_cast< RendererWrapper *>(ptr);
57 return wrapper->GetRenderer();
60 Renderer RendererApi::GetRendererFromParams( int paramIndex,
63 const v8::FunctionCallbackInfo< v8::Value >& args )
67 v8::HandleScope handleScope( isolate );
68 BaseWrappedObject* wrappedObject = V8Utils::GetWrappedDaliObjectParameter( paramIndex, BaseWrappedObject::RENDERER, isolate, args );
72 RendererWrapper* wrapper = static_cast< RendererWrapper *>(wrappedObject);
73 return wrapper->GetRenderer();
82 * Create a new renderer object.
87 * @param {Object} geometry The geometry to be used by this renderer
88 * @param {Object} material The material to be used by this renderer
89 * @return {Object} Renderer
91 Renderer RendererApi::New( const v8::FunctionCallbackInfo< v8::Value >& args )
93 v8::Isolate* isolate = args.GetIsolate();
94 v8::HandleScope handleScope( isolate );
97 Geometry geometry = GeometryApi::GetGeometryFromParams( 0, found, isolate, args );
100 DALI_SCRIPT_EXCEPTION( isolate, "missing geometry from param 0" );
105 Material material = MaterialApi::GetMaterialFromParams( 1, found, isolate, args );
108 DALI_SCRIPT_EXCEPTION( isolate, "missing material from param 0" );
112 return Renderer::New(geometry, material);
116 * Sets the geometry to be used by this renderer
118 * @method setGeometry
120 * @param {Object} geometry The geometry to be used by this renderer
122 void RendererApi::SetGeometry( const v8::FunctionCallbackInfo< v8::Value >& args )
124 v8::Isolate* isolate = args.GetIsolate();
125 v8::HandleScope handleScope( isolate );
127 Renderer renderer = GetRenderer( isolate, args );
130 Geometry geometry = GeometryApi::GetGeometryFromParams( 0, found, isolate, args );
133 DALI_SCRIPT_EXCEPTION( isolate, "missing geometry from param 0" );
137 renderer.SetGeometry(geometry);
142 * Gets the geometry used by this renderer
144 * @method getGeometry
146 * @return {Object} The geometry used by this renderer
148 void RendererApi::GetGeometry( const v8::FunctionCallbackInfo<v8::Value>& args )
150 v8::Isolate* isolate = args.GetIsolate();
151 v8::HandleScope handleScope( isolate );
153 Renderer renderer = GetRenderer( isolate, args );
154 Geometry geometry = renderer.GetGeometry();
157 v8::Local<v8::Object> localObject = GeometryWrapper::WrapGeometry( isolate, geometry );
158 args.GetReturnValue().Set( localObject );
162 * Sets the material to be used by this renderer
164 * @method setMaterial
166 * @param {Object} material The material to be used by this renderer
168 void RendererApi::SetMaterial( const v8::FunctionCallbackInfo< v8::Value >& args )
170 v8::Isolate* isolate = args.GetIsolate();
171 v8::HandleScope handleScope( isolate );
173 Renderer renderer = GetRenderer( isolate, args );
176 Material material = MaterialApi::GetMaterialFromParams( 0, found, isolate, args );
179 DALI_SCRIPT_EXCEPTION( isolate, "missing material from param 0" );
183 renderer.SetMaterial(material);
188 * Gets the material used by this renderer
190 * @method getMaterial
192 * @return {Object} The material used by this renderer
194 void RendererApi::GetMaterial( const v8::FunctionCallbackInfo<v8::Value>& args )
196 v8::Isolate* isolate = args.GetIsolate();
197 v8::HandleScope handleScope( isolate );
199 Renderer renderer = GetRenderer( isolate, args );
200 Material material = renderer.GetMaterial();
203 v8::Local<v8::Object> localObject = MaterialWrapper::WrapMaterial( isolate, material );
204 args.GetReturnValue().Set( localObject );
207 } // namespace V8Plugin