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/texture-set-api.h>
31 #include <rendering/texture-set-wrapper.h>
32 #include <rendering/shader-api.h>
43 * Renderer is a handle to an object that can be used to provide an image to a material.
49 Renderer RendererApi::GetRenderer( v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args )
51 v8::HandleScope handleScope( isolate );
53 v8::Local<v8::Object> object = args.This();
54 v8::Local<v8::External> field = v8::Local<v8::External>::Cast( object->GetInternalField(0) );
55 void* ptr = field->Value();
57 RendererWrapper* wrapper = static_cast< RendererWrapper *>(ptr);
58 return wrapper->GetRenderer();
61 Renderer RendererApi::GetRendererFromParams( int paramIndex,
64 const v8::FunctionCallbackInfo< v8::Value >& args )
68 v8::HandleScope handleScope( isolate );
69 BaseWrappedObject* wrappedObject = V8Utils::GetWrappedDaliObjectParameter( paramIndex, BaseWrappedObject::RENDERER, isolate, args );
73 RendererWrapper* wrapper = static_cast< RendererWrapper *>(wrappedObject);
74 return wrapper->GetRenderer();
83 * Create a new renderer object.
88 * @param {Object} geometry The geometry to be used by this renderer
89 * @param {Object} shader The shader to be used by this renderer
90 * @return {Object} Renderer
92 Renderer RendererApi::New( const v8::FunctionCallbackInfo< v8::Value >& args )
94 v8::Isolate* isolate = args.GetIsolate();
95 v8::HandleScope handleScope( isolate );
98 Geometry geometry = GeometryApi::GetGeometryFromParams( 0, found, isolate, args );
101 DALI_SCRIPT_EXCEPTION( isolate, "missing geometry from param 0" );
106 Shader shader = ShaderApi::GetShaderFromParams( 1, found, isolate, args );
109 DALI_SCRIPT_EXCEPTION( isolate, "missing shader from param 0" );
113 return Renderer::New(geometry, shader);
117 * Sets the geometry to be used by this renderer
119 * @method setGeometry
121 * @param {Object} geometry The geometry to be used by this renderer
123 void RendererApi::SetGeometry( const v8::FunctionCallbackInfo< v8::Value >& args )
125 v8::Isolate* isolate = args.GetIsolate();
126 v8::HandleScope handleScope( isolate );
128 Renderer renderer = GetRenderer( isolate, args );
131 Geometry geometry = GeometryApi::GetGeometryFromParams( 0, found, isolate, args );
134 DALI_SCRIPT_EXCEPTION( isolate, "missing geometry from param 0" );
138 renderer.SetGeometry(geometry);
143 * Gets the geometry used by this renderer
145 * @method getGeometry
147 * @return {Object} The geometry used by this renderer
149 void RendererApi::GetGeometry( const v8::FunctionCallbackInfo<v8::Value>& args )
151 v8::Isolate* isolate = args.GetIsolate();
152 v8::HandleScope handleScope( isolate );
154 Renderer renderer = GetRenderer( isolate, args );
155 Geometry geometry = renderer.GetGeometry();
158 v8::Local<v8::Object> localObject = GeometryWrapper::WrapGeometry( isolate, geometry );
159 args.GetReturnValue().Set( localObject );
163 * Sets the texture set to be used by this renderer
165 * @method setTextures
167 * @param {Object} textureSet The TextureSet to be used by this renderer
169 void RendererApi::SetTextures( const v8::FunctionCallbackInfo< v8::Value >& args )
171 v8::Isolate* isolate = args.GetIsolate();
172 v8::HandleScope handleScope( isolate );
174 Renderer renderer = GetRenderer( isolate, args );
177 TextureSet textureSet = TextureSetApi::GetTextureSetFromParams( 0, found, isolate, args );
180 DALI_SCRIPT_EXCEPTION( isolate, "missing texture set from param 0" );
184 renderer.SetTextures(textureSet);
189 * Gets the texture set used by this renderer
191 * @method getTextures
193 * @return {Object} The texture set used by this renderer
195 void RendererApi::GetTextures( const v8::FunctionCallbackInfo<v8::Value>& args )
197 v8::Isolate* isolate = args.GetIsolate();
198 v8::HandleScope handleScope( isolate );
200 Renderer renderer = GetRenderer( isolate, args );
201 TextureSet textureSet = renderer.GetTextures();
203 // Wrap the textureset
204 v8::Local<v8::Object> localObject = TextureSetWrapper::WrapTextureSet( isolate, textureSet );
205 args.GetReturnValue().Set( localObject );
208 } // namespace V8Plugin