load a resource * Loads the resource data for a specific resource. * * @name resource.load * * @param path [type:string] The path to the resource * @return buffer [type:buffer] Returns the buffer stored on disc * * @examples * * ```lua * -- read custom resource data into buffer * local buffer = resource.load("/resources/datafile") * ``` * * In order for the engine to include custom
| 387 | * ``` |
| 388 | */ |
| 389 | static int Load(lua_State* L) |
| 390 | { |
| 391 | int top = lua_gettop(L); |
| 392 | const char* name = luaL_checkstring(L, 1); |
| 393 | |
| 394 | void* resource = 0; |
| 395 | uint32_t resourcesize = 0; |
| 396 | dmResource::Result r = dmResource::GetRaw(g_ResourceModule.m_Factory, name, &resource, &resourcesize); |
| 397 | |
| 398 | if( r != dmResource::RESULT_OK ) |
| 399 | { |
| 400 | assert(top == lua_gettop(L)); |
| 401 | return ReportPathError(L, r, dmHashString64(name)); |
| 402 | } |
| 403 | |
| 404 | dmBuffer::StreamDeclaration streams_decl[] = { |
| 405 | {dmHashString64("data"), dmBuffer::VALUE_TYPE_UINT8, 1} |
| 406 | }; |
| 407 | |
| 408 | dmBuffer::HBuffer buffer = 0; |
| 409 | dmBuffer::Create(resourcesize, streams_decl, 1, &buffer); |
| 410 | |
| 411 | uint8_t* data = 0; |
| 412 | uint32_t datasize = 0; |
| 413 | dmBuffer::GetBytes(buffer, (void**)&data, &datasize); |
| 414 | |
| 415 | memcpy(data, resource, resourcesize); |
| 416 | |
| 417 | dmScript::LuaHBuffer luabuf(buffer, dmScript::OWNER_LUA); |
| 418 | dmScript::PushBuffer(L, luabuf); |
| 419 | assert(top + 1 == lua_gettop(L)); |
| 420 | return 1; |
| 421 | } |
| 422 | |
| 423 | |
| 424 | static int DoCheckError(lua_State* L, const char* attr_name, const char* expected_type) |