duk_ret_t BindingHas( duk_context * ctx ) { BindingInfo * info = GetBinding( ctx ); const char * name = duk_require_string( ctx, 1 ); dukbind_assert( info, "No binding info" ); duk_push_boolean( ctx, info->GetFunction( name ) != 0 ); return 1; }
duk_ret_t ClassHas( duk_context * ctx ) { BindingInfo * info = GetBinding( ctx ); const char * name = duk_require_string( ctx, 1 ); size_t class_identifier; finalizer_t finalizer; Get( ctx, 2, class_identifier, finalizer ); dukbind_assert( info, "No binding info" ); duk_c_function function = info->GetClassMethod( class_identifier, name ); duk_push_boolean( ctx, function != 0 ); return 1; }
duk_ret_t BindingGet( duk_context * ctx ) { BindingInfo * info = GetBinding( ctx ); const char * name = duk_require_string( ctx, 1 ); dukbind_assert( info, "No binding info" ); duk_c_function function = info->GetFunction( name ); if( function ) { duk_push_c_function( ctx, function, DUK_VARARGS ); return 1; } return 0; }
void VertexArrayBuffer::UploadData(BindingInfo const & bindingInfo, void const * data, uint16_t count) { RefPointer<DataBuffer> buffer; if (!bindingInfo.IsDynamic()) buffer = GetOrCreateStaticBuffer(bindingInfo); else buffer = GetOrCreateDynamicBuffer(bindingInfo); buffer->UploadData(data, count); }
duk_ret_t ClassGet( duk_context * ctx ) { BindingInfo * info = GetBinding( ctx ); const char * name = duk_require_string( ctx, 1 ); size_t class_identifier; finalizer_t finalizer; Get( ctx, 0, class_identifier, finalizer ); dukbind_assert( info, "No binding info" ); duk_c_function function = info->GetClassMethod( class_identifier, name ); if( function ) { duk_push_c_function( ctx, function, DUK_VARARGS ); return 1; } return 0; }
RefPointer<DataBuffer> VertexArrayBuffer::GetOrCreateBuffer(BindingInfo const & bindingInfo, bool isDynamic) { TBuffersMap * buffers = NULL; if (isDynamic) buffers = &m_dynamicBuffers; else buffers = &m_staticBuffers; TBuffersMap::iterator it = buffers->find(bindingInfo); if (it == buffers->end()) { MasterPointer<DataBuffer> & buffer = (*buffers)[bindingInfo]; buffer.Reset(new DataBuffer(bindingInfo.GetElementSize(), m_dataBufferSize)); return buffer.GetRefPointer(); } return it->second.GetRefPointer(); }
ref_ptr<DataBuffer> VertexArrayBuffer::GetOrCreateBuffer(BindingInfo const & bindingInfo, bool isDynamic) { TBuffersMap * buffers = nullptr; if (isDynamic) buffers = &m_dynamicBuffers; else buffers = &m_staticBuffers; TBuffersMap::iterator it = buffers->find(bindingInfo); if (it == buffers->end()) { drape_ptr<DataBuffer> dataBuffer = make_unique_dp<DataBuffer>(bindingInfo.GetElementSize(), m_dataBufferSize); ref_ptr<DataBuffer> result = make_ref(dataBuffer); (*buffers).insert(make_pair(bindingInfo, move(dataBuffer))); return result; } return make_ref(it->second); }