Functions and constants to access resources.
Version: alpha
| TYPES | |
|---|---|
| resource_data | Script property resource reference |
| RECORDS | |
|---|---|
| resource.animation | Atlas animation creation data |
| resource.animation_data | Atlas animation data |
| resource.atlas | Atlas creation data |
| resource.atlas_data | Atlas data |
| resource.buffer_creation_params | Buffer-resource creation parameters |
| resource.buffer_update_options | Buffer-resource update options |
| resource.geometry | Atlas geometry creation data |
| resource.geometry_data | Atlas geometry data |
| resource.render_target_attachment_info | Render target attachment information |
| resource.render_target_info | Render target information |
| resource.sound_data_options | Sound-data creation options |
| resource.text_metrics | Text metrics |
| resource.text_metrics_options | Text metric options |
| resource.texture_creation_params | Texture creation parameters |
| resource.texture_creation_result | Asynchronous texture creation result |
| resource.texture_info | Texture information |
| resource.texture_update_params | Texture update parameters |
| FUNCTIONS | |
|---|---|
| resource.atlas() | reference to atlas resource |
| resource.buffer() | reference to buffer resource |
| resource.create_atlas() | create an atlas resource |
| resource.create_buffer() | create a buffer resource |
| resource.create_sound_data() | Creates a sound data resource (.oggc/.opusc/.wavc) |
| resource.create_texture() | create a texture |
| resource.create_texture_async() | create a texture async |
| resource.font() | reference to font resource |
| resource.get_atlas() | Get atlas data |
| resource.get_buffer() | get resource buffer |
| resource.get_render_target_info() | get render target info |
| resource.get_text_metrics() | gets the text metrics for a font |
| resource.get_texture_info() | get texture info |
| resource.load() | load a resource |
| resource.material() | reference to material resource |
| resource.release() | release a resource |
| resource.render_target() | reference to render target resource |
| resource.set() | Set a resource |
| resource.set_atlas() | set atlas data |
| resource.set_buffer() | set resource buffer |
| resource.set_sound() | Update internal sound resource |
| resource.set_texture() | set a texture |
| resource.texture() | reference to texture resource |
| resource.tile_source() | reference to tile source resource |
resource_data = userdata
An opaque declaration-time reference to a Defold resource. Resource references are created by functions such as resource.atlas, resource.font, and resource.material. They can only be used as default values passed to go.property. The referenced resource is loaded together with the script. At runtime, the property contains the hashed path of the compiled resource.
EXAMPLES
go.property("player_atlas", resource.atlas("/main/player.atlas"))
function init(self)
go.set("#sprite", "image", self.player_atlas)
end
Animation data accepted when creating or updating an atlas. Specify either
frames, or both frame_start and frame_end.
FIELDS
id |
string |
Animation id. |
width |
integer |
Animation width. |
height |
integer |
Animation height. |
[frames] |
integer[] |
Geometry indices for the animation frames. |
[frame_start] |
integer |
First geometry index for the legacy contiguous frame range. |
[frame_end] |
integer |
Non-inclusive last geometry index for the legacy contiguous frame range. |
[playback] |
go.PLAYBACK |
Playback mode. The default is go.PLAYBACK_ONCE_FORWARD. |
[fps] |
integer |
Animation frame rate. The default is 30. |
[flip_vertical] |
boolean |
Whether to flip the animation vertically. The default is false. |
[flip_horizontal] |
boolean |
Whether to flip the animation horizontally. The default is false. |
Animation data returned by resource.get_atlas.
FIELDS
id |
string |
Animation id. |
width |
integer |
Animation width. |
height |
integer |
Animation height. |
frames |
integer[] |
Geometry indices for the animation frames. |
playback |
go.PLAYBACK |
Playback mode. |
fps |
integer |
Animation frame rate. |
flip_vertical |
boolean |
Whether the animation is flipped vertically. |
flip_horizontal |
boolean |
Whether the animation is flipped horizontally. |
Data accepted by resource.create_atlas and resource.set_atlas.
FIELDS
texture |
string|hash |
Path to the texture resource, for example "/main/my_texture.texturec". |
animations |
resource.animation[] |
Animations in the atlas. |
geometries |
resource.geometry[] |
Geometries that map to the texture data. |
Data returned by resource.get_atlas.
FIELDS
texture |
string|hash |
Path to the texture resource. |
animations |
resource.animation_data[] |
Animations in the atlas. |
geometries |
resource.geometry_data[] |
Geometries that map to the texture data. |
Buffer-resource creation parameters
FIELDS
buffer |
buffer_data |
Buffer to bind to the resource. |
[transfer_ownership] |
boolean |
Whether the resource takes ownership of the buffer. The default is true. |
Buffer-resource update options
FIELDS
[transfer_ownership] |
boolean |
Whether the resource takes ownership of the buffer. The default is false. |
Geometry data accepted when creating or updating an atlas. Vertex, UV, and index values are zero-based.
FIELDS
[id] |
string |
Geometry name, used when matching animations between atlases. |
[width] |
number |
Width of the image represented by the geometry. If omitted, it is calculated from the vertices. |
[height] |
number |
Height of the image represented by the geometry. If omitted, it is calculated from the vertices. |
[pivot_x] |
number |
Horizontal pivot in unit coordinates. The default is 0.5. |
[pivot_y] |
number |
Vertical pivot in unit coordinates. The default is 0.5. |
[rotated] |
boolean |
Whether the image is rotated 90 degrees counter-clockwise in the atlas. |
vertices |
number[] |
Vertex coordinates in image space as {px0, py0, px1, py1, ...}. |
uvs |
number[] |
UV coordinates in image space as {u0, v0, u1, v1, ...}. |
indices |
integer[] |
Geometry indices where each group of three entries represents a triangle. |
Geometry data returned by resource.get_atlas.
FIELDS
width |
number |
Width of the image represented by the geometry. |
height |
number |
Height of the image represented by the geometry. |
pivot_x |
number |
Horizontal pivot in unit coordinates. |
pivot_y |
number |
Vertical pivot in unit coordinates. |
rotated |
boolean |
Whether the image is rotated 90 degrees counter-clockwise in the atlas. |
vertices |
number[] |
Vertex coordinates in image space as {px0, py0, px1, py1, ...}. |
uvs |
number[] |
UV coordinates in image space as {u0, v0, u1, v1, ...}. |
indices |
integer[] |
Geometry indices where each group of three entries represents a triangle. |
Render target attachment information
FIELDS
handle |
texture |
Opaque texture handle. |
width |
integer |
Texture width. |
height |
integer |
Texture height. |
depth |
integer |
Texture depth or layer count. |
page_count |
integer |
Texture page count. |
mipmaps |
integer |
Number of mipmaps. |
flags |
graphics.TEXTURE_USAGE_FLAG |
Texture usage flags. |
type |
graphics.TEXTURE_TYPE |
Texture type. |
buffer_type |
graphics.BUFFER_TYPE |
Render-target buffer type. |
[texture] |
hash |
Backing texture resource, when present. |
Render target information
FIELDS
handle |
render_target |
Opaque render-target handle. |
sample_count |
integer |
Effective sample count shared by all render-target attachments. |
attachments |
resource.render_target_attachment_info[] |
Render-target attachments. |
Sound-data creation options
FIELDS
[data] |
string |
Raw sound file data, including the file header. |
[filesize] |
number |
Complete file size when data is partial. |
[partial] |
boolean |
Whether data contains only the initial file chunk. |
Text metrics
FIELDS
width |
number |
Text width. |
height |
number |
Text height. |
max_ascent |
number |
Maximum ascent. |
max_descent |
number |
Maximum descent. |
Text metric options
FIELDS
[width] |
number |
Text-field width; unused when line_break is false. |
[leading] |
number |
Line leading. The default is 1. |
[tracking] |
number |
Character tracking. The default is 0. |
[line_break] |
boolean |
Whether to account for line breaks. The default is false. |
Texture creation parameters
FIELDS
type |
graphics.TEXTURE_TYPE |
Texture type. |
width |
integer |
Texture width in pixels; must be greater than zero. |
height |
integer |
Texture height in pixels; must be greater than zero. |
[depth] |
integer |
Texture depth; used by 3D texture types and must be greater than zero. |
[page_count] |
integer |
Number of pages for a 2D array texture. |
format |
graphics.TEXTURE_FORMAT |
Texture format. Device-specific unsupported constants evaluate to nil. |
[flags] |
graphics.TEXTURE_USAGE_FLAG |
Creation-usage hints. The default is graphics.TEXTURE_USAGE_FLAG_SAMPLE. |
[max_mipmaps] |
integer |
Maximum mipmap count. The default is zero. |
[compression_type] |
graphics.COMPRESSION_TYPE |
Compression used by the supplied buffer. The default is graphics.COMPRESSION_TYPE_DEFAULT. |
Asynchronous texture creation result
FIELDS
path |
hash |
Created texture resource path. |
Texture information
FIELDS
handle |
texture |
Opaque texture handle. |
width |
integer |
Texture width. |
height |
integer |
Texture height. |
depth |
integer |
Texture depth or layer count. |
page_count |
integer |
Texture page count. |
mipmaps |
integer |
Number of mipmaps. |
flags |
graphics.TEXTURE_USAGE_FLAG |
Texture usage flags. |
type |
graphics.TEXTURE_TYPE |
Texture type. |
Texture update parameters
FIELDS
type |
graphics.TEXTURE_TYPE |
Texture type. |
width |
integer |
Update width in pixels. |
height |
integer |
Update height in pixels. |
[depth] |
integer |
Update depth for a 3D texture. |
format |
graphics.TEXTURE_FORMAT |
Texture format. Device-specific unsupported constants evaluate to nil. |
[x] |
integer |
X offset in pixels. |
[y] |
integer |
Y offset in pixels. |
[z] |
integer |
Z offset for a 3D texture. |
[page] |
integer |
Zero-based page of a 2D array texture. |
[mipmap] |
integer |
Mipmap level to update. |
[compression_type] |
graphics.COMPRESSION_TYPE |
Compression used by the supplied buffer. The default is graphics.COMPRESSION_TYPE_DEFAULT. |
resource.atlas([path:string])→resource:resource_data
Constructor-like function with two purposes:
PARAMETERS
[path] |
string |
optional resource path string to the resource |
RETURNS
resource |
resource_data |
a reference to the binary version of the resource |
EXAMPLES
Load an atlas and set it to a sprite:go.property("my_atlas", resource.atlas("/atlas.atlas"))
function init(self)
go.set("#sprite", "image", self.my_atlas)
end
go.property("my_atlas", resource.atlas("/atlas.atlas"))
function init(self)
go.set("#gui", "textures", self.my_atlas, {key = "my_atlas"})
end
resource.buffer([path:string])→resource:resource_data
Constructor-like function with two purposes:
PARAMETERS
[path] |
string |
optional resource path string to the resource |
RETURNS
resource |
resource_data |
a reference to the binary version of the resource |
EXAMPLES
Set a unique buffer it to a sprite:go.property("my_buffer", resource.buffer("/cube.buffer"))
function init(self)
go.set("#mesh", "vertices", self.my_buffer)
end
resource.create_atlas(path:string, table:resource.atlas)→path:hash
This function creates a new atlas resource that can be used in the same way as any atlas created during build time. The path used for creating the atlas must be unique, trying to create a resource at a path that is already registered will trigger an error. If the intention is to instead modify an existing atlas, use the resource.set_atlas function. Also note that the path to the new atlas resource must have a '.texturesetc' extension, meaning "/path/my_atlas" is not a valid path but "/path/my_atlas.texturesetc" is. When creating the atlas, at least one geometry and one animation is required, and an error will be raised if these requirements are not met. A reference to the resource will be held by the collection that created the resource and will automatically be released when that collection is destroyed. Note that releasing a resource essentially means decreasing the reference count of that resource, and not necessarily that it will be deleted.
PARAMETERS
path |
string |
The path to the resource. |
table |
resource.atlas |
atlas creation data |
RETURNS
path |
hash |
Returns the atlas resource path |
EXAMPLES
Create a backing texture and an atlasfunction init(self)
-- create an empty texture
local tparams = {
width = 128,
height = 128,
type = graphics.TEXTURE_TYPE_2D,
format = graphics.TEXTURE_FORMAT_RGBA,
}
local my_texture_id = resource.create_texture("/my_texture.texturec", tparams)
-- optionally use resource.set_texture to upload data to texture
-- create an atlas with one animation and one square geometry
-- note that the function doesn't support hashes for the texture,
-- you need to use a string for the texture path here aswell
local aparams = {
texture = "/my_texture.texturec",
animations = {
{
id = "my_animation",
width = 128,
height = 128,
frames = { 1 }
}
},
geometries = {
{
id = 'idle0',
width = 128,
height = 128,
pivot_x = 0.5,
pivot_y = 0.5,
vertices = {
0, 0,
0, 128,
128, 128,
128, 0
},
uvs = {
0, 0,
0, 128,
128, 128,
128, 0
},
indices = {0,1,2,0,2,3}
}
}
}
local my_atlas_id = resource.create_atlas("/my_atlas.texturesetc", aparams)
-- assign the atlas to the 'sprite' component on the same go
go.set("#sprite", "image", my_atlas_id)
end
resource.create_buffer(path:string, table:resource.buffer_creation_params)→path:hash
This function creates a new buffer resource that can be used in the same way as any buffer created during build time. The function requires a valid buffer created from either buffer.create or another pre-existing buffer resource. By default, the new resource will take ownership of the buffer lua reference, meaning the buffer will not automatically be removed when the lua reference to the buffer is garbage collected. This behaviour can be overruled by specifying 'transfer_ownership = false' in the argument table. If the new buffer resource is created from a buffer object that is created by another resource, the buffer object will be copied and the new resource will effectively own a copy of the buffer instead. Note that the path to the new resource must have the '.bufferc' extension, "/path/my_buffer" is not a valid path but "/path/my_buffer.bufferc" is. The path must also be unique, attempting to create a buffer with the same name as an existing resource will raise an error.
PARAMETERS
path |
string |
The path to the resource. |
table |
resource.buffer_creation_params |
buffer-resource creation parameters |
RETURNS
path |
hash |
Returns the buffer resource path |
EXAMPLES
Create a buffer object and bind it to a buffer resourcefunction init(self)
local size = 1
local positions = {
-- triangle 1
size, size, 0,
-size, -size, 0,
size, -size, 0,
-- triangle 2
size, size, 0,
-size, size, 0,
-size, -size, 0,
}
local buffer_handle = buffer.create(#positions, {
{
name = hash("position"),
type = buffer.VALUE_TYPE_FLOAT32,
count = 3
}
})
local stream = buffer.get_stream(buffer_handle, hash("position"))
-- transfer vertex data to buffer
for k=1,#positions do
stream[k] = positions[k]
end
local my_buffer = resource.create_buffer("/my_buffer.bufferc", { buffer = buffer_handle })
go.set("/go#mesh", "vertices", my_buffer)
end
function init(self)
local res = resource.get_buffer("/my_buffer_path.bufferc")
-- create a cloned buffer resource from another resource buffer
local buf = reource.create_buffer("/my_cloned_buffer.bufferc", { buffer = res })
-- assign cloned buffer to a mesh component
go.set("/go#mesh", "vertices", buf)
end
resource.create_sound_data(path:string, [options:resource.sound_data_options])→path_hash:hash
Creates a sound data resource Supported formats are .oggc, .opusc and .wavc
PARAMETERS
path |
string |
the path to the resource. Must not already exist. |
[options] |
resource.sound_data_options |
optional sound-data parameters |
RETURNS
path_hash |
hash |
the resulting path hash to the resource |
EXAMPLES
function init(self)
-- create a new sound resource, given the initial chunk of the file
local relative_path = "/a/unique/resource/name.oggc"
local hash = resource.create_sound_data(relative_path, { data = data, filesize = filesize, partial = true })
go.set("#music", "sound", hash) -- override the previous sound resource
sound.play("#music") -- start the playing
end
resource.create_texture(path:string, table:resource.texture_creation_params, [buffer:buffer_data])→path:hash
Creates a new texture resource that can be used in the same way as any texture created during build time. The path used for creating the texture must be unique, trying to create a resource at a path that is already registered will trigger an error. If the intention is to instead modify an existing texture, use the resource.set_texture function. Also note that the path to the new texture resource must have a '.texturec' extension, meaning "/path/my_texture" is not a valid path but "/path/my_texture.texturec" is. If the texture is created without a buffer, the pixel data will be blank.
PARAMETERS
path |
string |
The path to the resource. |
table |
resource.texture_creation_params |
texture creation parameters |
[buffer] |
buffer_data |
optional buffer of precreated pixel data |
RETURNS
path |
hash |
The path to the resource. |
EXAMPLES
Check whether a texture format is supported by the device:if graphics.TEXTURE_FORMAT_RGBA16F ~= nil then
-- It is safe to use this format.
end
if graphics.TEXTURE_TYPE_3D ~= nil then
-- The device and graphics adapter support 3D textures.
end
function init(self)
local tparams = {
width = 128,
height = 128,
type = graphics.TEXTURE_TYPE_2D,
format = graphics.TEXTURE_FORMAT_RGBA,
}
local my_texture_id = resource.create_texture("/my_custom_texture.texturec", tparams)
go.set("#model", "texture0", my_texture_id)
end
function init(self)
-- Create a new buffer with 4 components and FLOAT32 type
local tbuffer = buffer.create(128 * 128, { {name=hash("rgba"), type=buffer.VALUE_TYPE_FLOAT32, count=4} } )
local tstream = buffer.get_stream(tbuffer, hash("rgba"))
-- Fill the buffer stream with some float values
for y=1,128 do
for x=1,128 do
local index = (y-1) * 128 * 4 + (x-1) * 4 + 1
tstream[index + 0] = 999.0
tstream[index + 1] = -1.0
tstream[index + 2] = 0.5
tstream[index + 3] = 1.0
end
end
-- Create a 2D Texture with a RGBA23F format
local tparams = {
width = 128,
height = 128,
type = graphics.TEXTURE_TYPE_2D,
format = graphics.TEXTURE_FORMAT_RGBA32F,
}
-- Note that we pass the buffer as the last argument here!
local my_texture_id = resource.create_texture("/my_custom_texture.texturec", tparams, tbuffer)
-- assign the texture to a model
go.set("#model", "texture0", my_texture_id)
end
function init(self)
local t_volume = resource.create_texture("/my_backing_texture.texturec", {
type = graphics.TEXTURE_TYPE_IMAGE_3D,
width = 32,
height = 32,
depth = 32,
format = graphics.TEXTURE_FORMAT_RGBA32F,
flags = graphics.TEXTURE_USAGE_FLAG_STORAGE + graphics.TEXTURE_USAGE_FLAG_SAMPLE,
})
-- pass the backing texture to the render script
msg.post("@render:", "add_textures", { t_volume })
end
local new_tex = resource.create_texture("/runtime/example_array.texturec", {
type = graphics.TEXTURE_TYPE_2D_ARRAY,
width = 512,
height = 512,
page_count = 5,
format = graphics.TEXTURE_FORMAT_RGB,
})
resource.create_texture_async(path:string, table:resource.texture_creation_params, [buffer:buffer_data], [callback:fun(self:script_instance, request_id:integer, result:resource.texture_creation_result)])→(path:hash, request_id:integer)
Creates a new texture resource that can be used in the same way as any texture created during build time. The path used for creating the texture must be unique, trying to create a resource at a path that is already registered will trigger an error. If the intention is to instead modify an existing texture, use the resource.set_texture function. Also note that the path to the new texture resource must have a '.texturec' extension, meaning "/path/my_texture" is not a valid path but "/path/my_texture.texturec" is. If the texture is created without a buffer, the pixel data will be blank. The difference between the async version and resource.create_texture is that the texture data will be uploaded in a graphics worker thread. The function will return a resource immediately that contains a 1x1 blank texture which can be used immediately after the function call. When the new texture has been uploaded, the initial blank texture will be deleted and replaced with the new texture. Be careful when using the initial texture handle handle as it will not be valid after the upload has finished.
PARAMETERS
path |
string |
The path to the resource. |
table |
resource.texture_creation_params |
texture creation parameters |
[buffer] |
buffer_data |
optional buffer of precreated pixel data |
[callback] |
function(
self:script_instance,
request_id:integer,
result:resource.texture_creation_result) |
callback function invoked when the texture is created |
RETURNS
path |
hash |
The path to the texture resource. |
request_id |
integer |
The request id for the async request. |
EXAMPLES
Check whether a texture format is supported by the device:if graphics.TEXTURE_FORMAT_RGBA16F ~= nil then
-- It is safe to use this format.
end
if graphics.TEXTURE_TYPE_3D ~= nil then
-- The device and graphics adapter support 3D textures.
end
function callback(self, request_id, result)
-- The resource has been updated with a new texture,
-- so we can update other systems with the new handle,
-- or update components to use the resource if we want
local tinfo = resource.get_texture_info(result.path)
msg.post("@render:", "set_backing_texture", tinfo.handle)
end
function init(self)
-- Create a texture resource async
local tparams = {
width = 128,
height = 128,
type = graphics.TEXTURE_TYPE_2D,
format = graphics.TEXTURE_FORMAT_RGBA,
}
-- Create a new buffer with 4 components
local tbuffer = buffer.create(tparams.width * tparams.height, { {name=hash("rgba"), type=buffer.VALUE_TYPE_UINT8, count=4} } )
local tstream = buffer.get_stream(tbuffer, hash("rgba"))
-- Fill the buffer stream with some float values
for y=1,tparams.width do
for x=1,tparams.height do
local index = (y-1) * 128 * 4 + (x-1) * 4 + 1
tstream[index + 0] = 255
tstream[index + 1] = 0
tstream[index + 2] = 255
tstream[index + 3] = 255
end
end
-- create the texture
local tpath, request_id = resource.create_texture_async("/my_texture.texturec", tparams, tbuffer, callback)
-- at this point you can use the resource as-is, but note that the texture will be a blank 1x1 texture
-- that will be removed once the new texture has been updated
go.set("#model", "texture0", tpath)
end
function init(self)
-- Create a texture resource async
local tparams = {
width = 128,
height = 128,
type = graphics.TEXTURE_TYPE_2D,
format = graphics.TEXTURE_FORMAT_RGBA,
}
-- Create a new buffer with 4 components
local tbuffer = buffer.create(tparams.width * tparams.height, { {name=hash("rgba"), type=buffer.VALUE_TYPE_UINT8, count=4} } )
local tstream = buffer.get_stream(tbuffer, hash("rgba"))
-- Fill the buffer stream with some float values
for y=1,tparams.width do
for x=1,tparams.height do
local index = (y-1) * 128 * 4 + (x-1) * 4 + 1
tstream[index + 0] = 255
tstream[index + 1] = 0
tstream[index + 2] = 255
tstream[index + 3] = 255
end
end
-- create the texture
local tpath, request_id = resource.create_texture_async("/my_texture.texturec", tparams, tbuffer)
-- at this point you can use the resource as-is, but note that the texture will be a blank 1x1 texture
-- that will be removed once the new texture has been updated
go.set("#model", "texture0", tpath)
end
resource.font([path:string])→resource:resource_data
Constructor-like function with two purposes:
PARAMETERS
[path] |
string |
optional resource path string to the resource |
RETURNS
resource |
resource_data |
a reference to the binary version of the resource |
EXAMPLES
Load a font and set it to a label:go.property("my_font", resource.font("/font.font"))
function init(self)
go.set("#label", "font", self.my_font)
end
go.property("my_font", resource.font("/font.font"))
function init(self)
go.set("#gui", "fonts", self.my_font, {key = "my_font"})
end
resource.get_atlas(path:hash|string)→data:resource.atlas_data
Returns the atlas data for an atlas
PARAMETERS
path |
hashstring |
The path to the atlas resource |
RETURNS
data |
resource.atlas_data |
atlas data |
resource.get_buffer(path:hash|string)→buffer:buffer_data
gets the buffer from a resource
PARAMETERS
path |
hashstring |
The path to the resource |
RETURNS
buffer |
buffer_data |
The resource buffer |
EXAMPLES
How to get the data from a bufferfunction init(self)
local res_path = go.get("#mesh", "vertices")
local buf = resource.get_buffer(res_path)
local stream_positions = buffer.get_stream(buf, "position")
for i=1,#stream_positions do
print(i, stream_positions[i])
end
end
resource.get_render_target_info(path:hash|string|render_target)→table:resource.render_target_info
Gets render target info from a render target resource path or a render target handle
PARAMETERS
path |
hashstringrender_target |
The path to the resource or a render target handle |
RETURNS
table |
resource.render_target_info |
render-target information |
EXAMPLES
Get the metadata from a render target resourcefunction init(self)
local info = resource.get_render_target_info("/my_render_target.render_targetc")
-- the info table contains meta data about all the render target attachments
-- so it's not necessary to use resource.get_texture here, but we do it here
-- just to show that it's possible:
local info_attachment_1 = resource.get_texture_info(info.attachments[1].handle)
end
function init(self)
local info = resource.get_render_target_info("/my_render_target.render_targetc")
local attachment = info.attachments[1].texture
-- you can also get texture info from the 'texture' field, since it's a resource hash
local texture_info = resource.get_texture_info(attachment)
go.set("#model", "texture0", attachment)
end
resource.get_text_metrics(url:hash, text:string, [options:resource.text_metrics_options])→metrics:resource.text_metrics
Gets the text metrics from a font
PARAMETERS
url |
hash |
the font to get the (unscaled) metrics from |
text |
string |
text to measure |
[options] |
resource.text_metrics_options |
optional text-metric options |
RETURNS
metrics |
resource.text_metrics |
measured text metrics |
EXAMPLES
function init(self)
local font = go.get("#label", "font")
local metrics = resource.get_text_metrics(font, "The quick brown fox\n jumps over the lazy dog")
pprint(metrics)
end
resource.get_texture_info(path:hash|string|texture)→table:resource.texture_info
Gets texture info from a texture resource path or a texture handle
PARAMETERS
path |
hashstringtexture |
The path to the resource or a texture handle |
RETURNS
table |
resource.texture_info |
texture information |
EXAMPLES
Create a new texture and get the metadata from itfunction init(self)
-- create an empty texture
local tparams = {
width = 128,
height = 128,
type = graphics.TEXTURE_TYPE_2D,
format = graphics.TEXTURE_FORMAT_RGBA,
}
local my_texture_path = resource.create_texture("/my_texture.texturec", tparams)
local my_texture_info = resource.get_texture_info(my_texture_path)
-- my_texture_info now contains
-- {
-- handle = <the-numeric-handle>,
-- width = 128,
-- height = 128,
-- depth = 1
-- mipmaps = 1,
-- page_count = 1,
-- type = graphics.TEXTURE_TYPE_2D,
-- flags = graphics.TEXTURE_USAGE_FLAG_SAMPLE
-- }
end
function init(self)
local my_atlas_info = resource.get_atlas("/my_atlas.a.texturesetc")
local my_texture_info = resource.get_texture_info(my_atlas_info.texture)
-- my_texture_info now contains the information about the texture that is backing the atlas
end
resource.load(path:string)→buffer:buffer_data
Loads the resource data for a specific resource.
PARAMETERS
path |
string |
The path to the resource |
RETURNS
buffer |
buffer_data |
Returns the buffer stored on disc |
EXAMPLES
-- read custom resource data into buffer
local buffer = resource.load("/resources/datafile")
[project]
title = My project
version = 0.1
custom_resources = resources/,assets/level_data.json
resource.material([path:string])→resource:resource_data
Constructor-like function with two purposes:
PARAMETERS
[path] |
string |
optional resource path string to the resource |
RETURNS
resource |
resource_data |
a reference to the binary version of the resource |
EXAMPLES
Load a material and set it to a sprite:go.property("my_material", resource.material("/material.material"))
function init(self)
go.set("#sprite", "material", self.my_material)
end
go.property("my_material", resource.material("/material.material"))
function init(self)
go.set("#gui", "materials", self.my_material, {key = "my_material"})
end
resource.release(path:hash|string)
Release a resource. This is a potentially dangerous operation, releasing resources currently being used can cause unexpected behaviour.
PARAMETERS
path |
hashstring |
The path to the resource. |
resource.render_target([path:string])→resource:resource_data
Constructor-like function with two purposes:
PARAMETERS
[path] |
string |
optional resource path string to the resource |
RETURNS
resource |
resource_data |
a reference to the binary version of the resource |
EXAMPLES
Set a render target color attachment as a model texture:go.property("my_render_target", resource.render_target("/rt.render_target"))
function init(self)
local rt_info = resource.get_render_target_info(self.my_render_target)
go.set("#model", "texture0", rt_info.attachments[1].texture)
end
resource.set(path:string|hash, buffer:buffer_data)
Sets the resource data for a specific resource
PARAMETERS
path |
stringhash |
The path to the resource |
buffer |
buffer_data |
The buffer of precreated data, suitable for the intended resource type |
EXAMPLES
Assuming the folder "/res" is added to the project custom resources:-- load a texture resource and set it on a sprite
local buffer = resource.load("/res/new.texturec")
resource.set(go.get("#sprite", "texture0"), buffer)
resource.set_atlas(path:hash|string, table:resource.atlas)
Sets the data for a specific atlas resource. Setting new atlas data is specified by passing in a texture path for the backing texture of the atlas, a list of geometries and a list of animations that map to the entries in the geometry list. The geometry entries are represented by three lists: vertices, uvs and indices that together represent triangles that are used in other parts of the engine to produce render objects from. Vertex and uv coordinates for the geometries are expected to be in pixel coordinates where 0,0 is the top left corner of the texture. There is no automatic padding or margin support when setting custom data, which could potentially cause filtering artifacts if used with a material sampler that has linear filtering. If that is an issue, you need to calculate padding and margins manually before passing in the geometry data to this function.
PARAMETERS
path |
hashstring |
The path to the atlas resource |
table |
resource.atlas |
atlas data |
EXAMPLES
Add a new animation to an existing atlasfunction init(self)
local data = resource.get_atlas("/main/my_atlas.a.texturesetc")
local my_animation = {
id = "my_new_animation",
width = 128,
height = 128,
frame_start = 1,
frame_end = 6,
playback = go.PLAYBACK_LOOP_PINGPONG,
fps = 8
}
table.insert(data.animations, my_animation)
resource.set_atlas("/main/my_atlas.a.texturesetc", data)
end
function init(self)
local params = {
texture = "/main/my_256x256_texture.texturec",
animations = {
{
id = "my_animation",
width = 256,
height = 256,
frames = { 1 }
}
},
geometries = {
{
vertices = {
0, 0,
0, 256,
256, 256,
256, 0
},
uvs = {
0, 0,
0, 256,
256, 256,
256, 0
},
indices = { 0,1,2,0,2,3 }
}
}
}
resource.set_atlas("/main/test.a.texturesetc", params)
end
resource.set_buffer(path:hash|string, buffer:buffer_data, [table:resource.buffer_update_options])
Sets the buffer of a resource. By default, setting the resource buffer will either copy the data from the incoming buffer object
to the buffer stored in the destination resource, or make a new buffer object if the sizes between the source buffer and the destination buffer
stored in the resource differs. In some cases, e.g performance reasons, it might be beneficial to just set the buffer object on the resource without copying or cloning.
To achieve this, set the transfer_ownership flag to true in the argument table. Transferring ownership from a lua buffer to a resource with this function
works exactly the same as resource.create_buffer: the destination resource will take ownership of the buffer held by the lua reference, i.e the buffer will not automatically be removed
when the lua reference to the buffer is garbage collected.
Note: When setting a buffer with transfer_ownership = true, the currently bound buffer in the resource will be destroyed.
PARAMETERS
path |
hashstring |
The path to the resource |
buffer |
buffer_data |
The resource buffer |
[table] |
resource.buffer_update_options |
optional buffer-resource update options |
EXAMPLES
How to set the data from a bufferlocal function fill_stream(stream, verts)
for key, value in ipairs(verts) do
stream[key] = verts[key]
end
end
function init(self)
local res_path = go.get("#mesh", "vertices")
local positions = {
1, -1, 0,
1, 1, 0,
-1, -1, 0
}
local num_verts = #positions / 3
-- create a new buffer
local buf = buffer.create(num_verts, {
{ name = hash("position"), type=buffer.VALUE_TYPE_FLOAT32, count = 3 }
})
local buf = resource.get_buffer(res_path)
local stream_positions = buffer.get_stream(buf, "position")
fill_stream(stream_positions, positions)
resource.set_buffer(res_path, buf)
end
resource.set_sound(path:hash|string, buffer:string)
Update internal sound resource (wavc/oggc/opusc) with new data
PARAMETERS
path |
hashstring |
The path to the resource |
buffer |
string |
A lua string containing the binary sound data |
resource.set_texture(path:hash|string, table:resource.texture_update_params, buffer:buffer_data)
Sets the pixel data for a specific texture.
PARAMETERS
path |
hashstring |
The path to the resource |
table |
resource.texture_update_params |
texture update parameters |
buffer |
buffer_data |
The buffer of precreated pixel data To update a cube map texture you need to pass in six times the amount of data via the buffer, since a cube map has six sides! 3D textures are currently only supported on OpenGL and Vulkan adapters. |
EXAMPLES
Check whether a texture format is supported by the device:if graphics.TEXTURE_FORMAT_RGBA16F ~= nil then
-- It is safe to use this format.
end
if graphics.TEXTURE_TYPE_3D ~= nil then
-- The device and graphics adapter support 3D textures.
end
function init(self)
self.height = 128
self.width = 128
self.buffer = buffer.create(self.width * self.height, { {name=hash("rgb"), type=buffer.VALUE_TYPE_UINT8, count=3} } )
self.stream = buffer.get_stream(self.buffer, hash("rgb"))
for y=1,self.height do
for x=1,self.width do
local index = (y-1) * self.width * 3 + (x-1) * 3 + 1
self.stream[index + 0] = 0xff
self.stream[index + 1] = 0x80
self.stream[index + 2] = 0x10
end
end
local resource_path = go.get("#model", "texture0")
local args = { width=self.width, height=self.height, type=graphics.TEXTURE_TYPE_2D, format=graphics.TEXTURE_FORMAT_RGB, num_mip_maps=1 }
resource.set_texture( resource_path, args, self.buffer )
end
function init(self)
self.x = 16
self.y = 16
self.height = 128 - self.x * 2
self.width = 128 - self.y * 2
self.buffer = buffer.create(self.width * self.height, { {name=hash("rgb"), type=buffer.VALUE_TYPE_UINT8, count=3} } )
self.stream = buffer.get_stream(self.buffer, hash("rgb"))
for y=1,self.height do
for x=1,self.width do
local index = (y-1) * self.width * 3 + (x-1) * 3 + 1
self.stream[index + 0] = 0xff
self.stream[index + 1] = 0x80
self.stream[index + 2] = 0x10
end
end
local resource_path = go.get("#model", "texture0")
local args = { width=self.width, height=self.height, x=self.x, y=self.y, type=graphics.TEXTURE_TYPE_2D, format=graphics.TEXTURE_FORMAT_RGB, num_mip_maps=1 }
resource.set_texture(resource_path, args, self.buffer )
end
go.property("my_buffer", resource.buffer("/my_default_buffer.buffer"))
function init(self)
local resource_path = go.get("#model", "texture0")
-- the "my_buffer" resource is expected to hold 128 * 128 * 3 bytes!
local args = {
width = 128,
height = 128,
type = graphics.TEXTURE_TYPE_2D,
format = graphics.TEXTURE_FORMAT_RGB
}
-- Note that the extra resource.get_buffer call is a requirement here
-- since the "self.my_buffer" is just pointing to a buffer resource path
-- and not an actual buffer object or buffer resource.
resource.set_texture(resource_path, args, resource.get_buffer(self.my_buffer))
end
function init(self)
-- create a buffer that can hold the data of a 8x8x8 texture
local tbuffer = buffer.create(8 * 8 * 8, { {name=hash("rgba"), type=buffer.VALUE_TYPE_FLOAT32, count=4} } )
local tstream = buffer.get_stream(tbuffer, hash("rgba"))
-- populate the buffer with some data
local index = 1
for z=1,8 do
for y=1,8 do
for x=1,8 do
tstream[index + 0] = x
tstream[index + 1] = y
tstream[index + 2] = z
tstream[index + 3] = 1.0
index = index + 4
end
end
end
local t_args = {
type = graphics.TEXTURE_TYPE_IMAGE_3D,
width = 8,
height = 8,
depth = 8,
format = graphics.TEXTURE_FORMAT_RGBA32F
}
-- This expects that the texture resource "/my_3d_texture.texturec" already exists
-- and is a 3D texture resource. To create a dynamic 3D texture resource
-- use the "resource.create_texture" function.
resource.set_texture("/my_3d_texture.texturec", t_args, tbuffer)
end
-- new_tex is resource handle of texture which was created via resource.create_resource
local tex_path = "/bundle_resources/page_02.png"
local data = sys.load_resource(tex_path)
local buf = image.load_buffer(data)
resource.set_texture(new_tex, {
type = graphics.TEXTURE_TYPE_2D_ARRAY,
width = buf.width,
height = buf.height,
page = 1,
format = graphics.TEXTURE_FORMAT_RGB
}, buf.buffer)
go.set("#mesh", "texture0", new_tex)
resource.texture([path:string])→resource:resource_data
Constructor-like function with two purposes:
PARAMETERS
[path] |
string |
optional resource path string to the resource |
RETURNS
resource |
resource_data |
a reference to the binary version of the resource |
EXAMPLES
Load a texture and set it to a model:go.property("my_texture", resource.texture("/texture.png"))
function init(self)
go.set("#model", "texture0", self.my_texture)
end
resource.tile_source([path:string])→resource:resource_data
Constructor-like function with two purposes:
PARAMETERS
[path] |
string |
optional resource path string to the resource |
RETURNS
resource |
resource_data |
a reference to the binary version of the resource |
EXAMPLES
Load tile source and set it to a tile map:go.property("my_tile_source", resource.tile_source("/tilesource.tilesource"))
function init(self)
go.set("#tilemap", "tile_source", self.my_tile_source)
end