render
color
color(r: number, g: number, b: number, a: number = 255) -> table
color(col: string) -> table
Makes a color table from rgb values or a string.
Info
String format is identical to CSS hex color format. Read more here. The only addition is that you also can specify alpha in the 4th part.
Parameters
| Name | Type | Description |
|---|---|---|
r |
number | Red |
g |
number | Green |
b |
number | Blue |
a |
number | Alpha. Defaults to 255 |
| Name | Type | Description |
|---|---|---|
col |
string | Hexadecimal color |
Usage
local white = render.color(255, 255, 255);
local white = render.color('#ffffff'); -- regular way
local white = render.color('#fff'); -- short way
local white_transparent = render.color('#fff0'); -- short way with alpha value
get_screen_size
get_screen_size() -> number, number
Returns screen dimensions.
Usage
local w, h = render.get_screen_size();
create_font
create_font(path: string, size: number, flags: enum = render.font_flags_none, from: number = 0, to: number = 255) -> object
Creates a new font object from file.
Parameters
| Name | Type | Description |
|---|---|---|
path |
string | Path to font file (ttf/otf) |
size |
number | Font height, in pixels |
flags |
enum | Additional flags. Defaults to none |
from |
number | Minimal codepoint. Defaults to 0 |
to |
number | Maximal codepoint. Defaults to 255 |
Usage
local fnt = render.create_font('my_font.ttf', 16);
create_font_stream
create_font_stream(bytes: table[char], size: number, flags: enum = render.font_flags_none, from: number = 0, to: number = 255) -> object
Creates a new font object from char table.
Parameters
| Name | Type | Description |
|---|---|---|
bytes |
table[char] | Font data (ttf/otf format) |
size |
number | Font height, in pixels |
flags |
enum | Additional flags. Defaults to none |
from |
number | Minimal codepoint. Defaults to 0 |
to |
number | Maximal codepoint. Default to `255 |
Usage
local fnt = render.create_font_stream(my_font_stream, 16);
create_font_gdi
create_font_gdi(name: string, size: number, flags: enum = render.font_flags_none, from: number = 0, to: number = 255) -> object
Creates a new font object from GDI.
Parameters
| Name | Type | Description |
|---|---|---|
name |
string | System font name |
size |
number | Font height, in pixels |
flags |
enum | Additional flags. Defaults to none |
from |
number | Minimal codepoint. Defaults to 0 |
to |
number | Maximal codepoint. Default to `255 |
Usage
local fnt = render.create_font_gdi('Small Fonts', 8);
create_texture
create_texture(path: string) -> object
Creates a new texture from file. Supports most image formats.
Parameters
| Name | Type | Description |
|---|---|---|
path |
string | Path to image |
Usage
local tex = render.create_texture('my_texture.png');
create_texture_stream
create_texture_stream(bytes: table[char]) -> object
Creates a new texture from char table. Supports most image formats.
Parameters
| Name | Type | Description |
|---|---|---|
bytes |
table[char] | Image stream |
Usage
local tex = render.create_texture_bytes(my_texture_stream);
create_texture_bytes
create_texture_bytes(ptr: number, size: number) -> object
Creates a new texture from memory. Supports most image formats.
Note
You can get a pointer to image buffer using FFI.
Parameters
| Name | Type | Description |
|---|---|---|
ptr |
number | Pointer to image in memory |
size |
number | Buffer size in bytes |
Usage
local tex = render.create_texture_bytes(img_ptr, img_size);
create_texture_rgba
create_texture_rgba(ptr: number, w: number, h: number, stride: number) -> object
Creates a new texture from memory. Format should be RGBA stream.
Note
You can get a pointer to image buffer using FFI.
Parameters
| Name | Type | Description |
|---|---|---|
ptr |
number | Pointer to image in memory |
w |
number | Image width |
h |
number | Image height |
stride |
number | Bytes in a row (usually w * 4) |
Usage
local tex = render.create_texture_rgba(img_ptr, img_w, img_h, img_w * 4);
create_texture_svg
create_texture_svg(data: string, h: number) -> object
Creates a new texture from SVG string.
Info
If you miss <?xml header, it will be fixed automatically. However, the data must contain <svg> node!
Parameters
| Name | Type | Description |
|---|---|---|
data |
string | SVG file contents |
h |
number | Target height |
Usage
local tex = render.create_texture_svg([[
<svg style="width:24px;height:24px" viewBox="0 0 24 24">
<path fill="#ffffff" d="M12.89,3L14.85,3.4L11.11,21L9.15,20.6L12.89,3M19.59,12L16,8.41V5.58L22.42,12L16,18.41V15.58L19.59,12M1.58,12L8,5.58V8.41L4.41,12L8,15.58V18.41L1.58,12Z" />
</svg>
]], 20);
create_shader
create_shader(src: string) -> object
Creates a new shader object.
Note
Rendering engine is using Shader Model 2, just like the game does. Keep that in mind when creating your own shaders!
Note
A shader MUST have it's entry point named main!
At this time, you can't pass your own parameters to the shader. However, you get some pre-defined ones:
| Register | Type | Description |
|---|---|---|
s0 |
sampler | Current texture |
c0 |
float2 | Current texture's dimensions |
c1 |
float | Current time, in seconds |
c2 |
float | Current global alpha override |
Parameters
| Name | Type | Description |
|---|---|---|
src |
string | Shader source code |
Usage
local shad = render.create_shader([[
sampler s0;
float4 main(float2 uv: TEXCOORD0): COLOR0
{
return tex2D(s0, uv);
}
]]);
create_animator_float
create_animator_float(initial: number, time: number, intep: enum = render.linear) -> animator
Creates a new float animator object.
Parameters
| Name | Type | Description |
|---|---|---|
initial |
number | Initial value |
time |
number | Animation time, in seconds |
interp |
enum | Interpolation function. Defaults to linear |
Usage
local my_anim = render.create_animator_float(0, 0.5); -- this animation will take 500ms (0.5s) to finish
create_animator_color
create_animator_color(initial: table, time: number, intep: enum = render.linear, interp_hue: bool = false) -> animator
Creates a new color animator object.
Parameters
| Name | Type | Description |
|---|---|---|
initial |
table | Initial value |
time |
number | Animation time, in seconds |
interp |
enum | Interpolation function. Defaults to linear |
interp_hue |
bool | If true, will animate by hue value instead of RGB. Defaults to false |
Usage
local my_anim = render.create_animator_color(render.color('#fff'), 0.5); -- this animation will take 500ms (0.5s) to finish
push_texture
push_texture(id: number)
Pushes a texture to stack.
Deprecated
This function is deprecated and will be removed in future updates. Use set_texture instead.
Parameters
| Name | Type | Description |
|---|---|---|
id |
number | Texture ID |
Usage
render.push_texture(my_tex);
pop_texture
pop_texture()
Pops a texture from stack.
Deprecated
This function is deprecated and will be removed in future updates. Use set_texture instead.
Usage
render.pop_texture();
push_clip_rect
push_clip_rect(x1: number, y1: number, x2: number, y2: number, intersect: bool = true)
Pushes a clip rect to stack.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | Top left X |
y1 |
number | Top left Y |
x2 |
number | Bottom right X |
y2 |
number | Bottom right Y |
intersect |
bool | Whether should intersect clip rect with a previous one. Defaults to true |
Usage
render.push_clip_rect(5, 5, 150, 150);
pop_clip_rect
pop_clip_rect()
Pops a clip rect from stack.
Usage
render.pop_clip_rect();
push_uv
push_uv(x1: number, y1: number, x2: number, y2: number)
Pushes a UV rect to stack.
Deprecated
This function is deprecated and will be removed in future updates. Use set_uv instead.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | Top left X |
y1 |
number | Top left Y |
x2 |
number | Bottom right X |
y2 |
number | Bottom right Y |
Usage
render.push_clip_rect(0.0, 0.0, 0.5, 0.5);
pop_uv
pop_uv()
Pops a UV rect from stack.
Deprecated
This function is deprecated and will be removed in future updates. Use set_uv instead.
Usage
render.pop_uv();
push_alpha
push_alpha(alpha: number)
Pushes an alpha override to stack.
Deprecated
This function is deprecated and will be removed in future updates. Use set_alpha instead.
Parameters
| Name | Type | Description |
|---|---|---|
alpha |
number | New alpha value (0.0 to 1.0) |
Usage
render.push_alpha(0.5);
pop_alpha
pop_alpha()
Pops an alpha override from stack.
Deprecated
This function is deprecated and will be removed in future updates. Use set_alpha instead.
Usage
render.pop_alpha();
set_texture
set_texture(texture: object / nil)
Sets a texture to be used.
Parameters
| Name | Type | Description |
|---|---|---|
texture |
object / nil | Texture |
Usage
render.set_texture(my_tex);
render.rect_filled(50, 50, 150, 150, render.color('#fff'));
render.set_texture(nil);
set_uv
set_uv(x1: number, y1: number, x2: number, y2: number)
Sets UV parameters for the current texture.
Info
You can read what UV is here.
Tip
UV values are from 0.0 (top or left) to 1.0 (bottom or right).
If you wish to get a part from texture using pixels, divide your value by width or height of a texture.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | X1 parameter (0.0 to 1.0) |
y1 |
number | Y1 parameter (0.0 to 1.0) |
x2 |
number | X2 parameter (0.0 to 1.0) |
y2 |
number | Y2 parameter (0.0 to 1.0) |
Usage
render.set_uv(0, 0, 0.5, 0.5); -- only top left quarter of the texture
-- will be rendered
set_uv
set_uv(nil)
Resets UV parameters back to default.
Info
You can read what UV is here.
Usage
render.set_uv(nil);
set_alpha
set_alpha(mod: number)
Overrides global alpha value. Set to 1.0 to reset.
Parameters
| Name | Type | Description |
|---|---|---|
mod |
number | Alpha to set (0.0 to 1.0) |
Usage
render.set_alpha(0.5);
set_rotation
set_rotation(rot: number)
Sets rotation override.
Warning
Some figures ignore this parameter.
Parameters
| Name | Type | Description |
|---|---|---|
rot |
number | Rotation, in degrees |
Usage
render.set_rotation(90); -- will rotate next figure by 90deg
set_shader
set_shader(shader: object / nil)
Sets or resets a shader.
Parameters
| Name | Type | Description |
|---|---|---|
shader |
object / nil | Shader |
Usage
render.set_shader(shad);
get_texture_size
get_texture_size(texture: object) -> number, number
Returns texture dimensions.
Parameters
| Name | Type | Description |
|---|---|---|
texture |
object | Texture |
Usage
local w, h = render.get_texture_size(my_tex);
get_frame_count
get_frame_count(texture: object) -> number
Returns frame count of the animated GIF.
Warning
This function will return 0 if a texture is NOT an animated GIF.
Parameters
| Name | Type | Description |
|---|---|---|
texture |
object | Texture |
Usage
local frames = render.get_frame_count(my_gif);
set_frame
set_frame(texture: object, frame: number)
Sets current frame for the animated GIF.
Parameters
| Name | Type | Description |
|---|---|---|
texture |
object | Texture |
frame |
number | Target frame |
Usage
render.set_frame(my_gif, 5);
set_loop
set_loop(texture: object, val: bool)
Toggles looping for the animated GIF.
Parameters
| Name | Type | Description |
|---|---|---|
texture |
object | Texture |
val |
bool | true to enable looping, false to disable |
Usage
render.set_loop(my_gif, false);
reset_loop
reset_loop(texture: object)
Starts texture loop from the frame 0.
Parameters
| Name | Type | Description |
|---|---|---|
texture |
object | Texture |
Usage
render.reset_loop(my_gif);
get_text_size
get_text_size(font: object, text: string) -> number, number
Returns text dimensions.
Parameters
| Name | Type | Description |
|---|---|---|
font |
object | Font |
text |
string | Text |
Usage
local w, h = render.get_text_size(my_fnt, 'Hello world!');
wrap_text
wrap_text(font: object, text: string, width: number) -> string
Wraps text by width (inserting new lines if a word is exceeding target width). Can be resource intensive at times.
Parameters
| Name | Type | Description |
|---|---|---|
font |
object | Font |
text |
string | Text |
width |
number | Target width |
Usage
local text = render.wrap_text(my_fnt, 'This is a really long string!', 250);
rect
rect(x1: number, y1: number, x2: number, y2: number, color: table, thickness: number = 1.0)
Renders a rectangle.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | X1 position |
y1 |
number | Y1 position |
x2 |
number | X2 position |
y2 |
number | Y2 position |
color |
table | Color |
thickness |
number | Line thickness. Defaults to 1.0 |
Usage
render.rect(50, 50, 150, 150, render.color('#fff'));
rect_filled
rect_filled(x1: number, y1: number, x2: number, y2: number, color: table)
Renders a filled rectangle.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | X1 position |
y1 |
number | Y1 position |
x2 |
number | X2 position |
y2 |
number | Y2 position |
color |
table | Color |
Usage
render.rect_filled(50, 50, 150, 150, render.color('#fff'));
rect_filled_rounded
rect_filled_rounded(x1: number, y1: number, x2: number, y2: number, color: table, rounding: number, sides: enum = all)
Renders a filled rounded rectangle.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | X1 position |
y1 |
number | Y1 position |
x2 |
number | X2 position |
y2 |
number | Y2 position |
color |
table | Color |
rounding |
number | Corner rounding |
sides |
enum | Sides to round. Defaults to render.all |
Usage
render.rect_filled(50, 50, 150, 150, render.color('#fff'), 10);
render_filled_multicolor
render_filled_multicolor(x1: number, y1: number, x2: number, y2: number, tl: table, tr: table, br: table, bl: table)
Renders a filled multicolor rectangle.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | X1 position |
y1 |
number | Y1 position |
x2 |
number | X2 position |
y2 |
number | Y2 position |
tl |
table | Top left color |
tr |
table | Top right color |
br |
table | Bottom right color |
bl |
table | Bottom left color |
Usage
local c1, c2 = render.color('#fff'), render.color('#000');
render.rect_filled_multicolor(50, 50, 150, 150, c1, c1, c2, c2);
circle
circle(x: number, y: number, radius: number, color: table, thickness: number = 1.0, segments: number = 12, fill = 1.0, rot = 0.0)
Renders a circle.
Parameters
| Name | Type | Description |
|---|---|---|
x |
number | Center X position |
y |
number | Center Y position |
radius |
number | Radius |
color |
table | Color |
thickness |
number | Line thickness. Defaults to 1.0 |
segments |
number | Circle segments. Defaults to 12 |
fill |
number | Fill value. Accepts values from 0.0 to 1.0. Defaults to 1.0 |
rot |
number | Circle rotation, in degrees. Defaults to 0.0 |
Usage
render.circle(50, 50, 10, render.color('#fff'));
circle_filled
circle_filled(x: number, y: number, radius: number, color: table, segments: number = 12, fill = 1.0, rot = 0.0)
Renders a filled circle.
Parameters
| Name | Type | Description |
|---|---|---|
x |
number | Center X position |
y |
number | Center Y position |
radius |
number | Radius |
color |
table | Color |
segments |
number | Circle segments. Defaults to 12 |
fill |
number | Fill value. Accepts values from 0.0 to 1.0. Defaults to 1.0 |
rot |
number | Circle rotation, in degrees. Defaults to 0.0 |
Usage
render.circle_filled(50, 50, 10, render.color('#fff'));
line
line(x1: number, y1: number, x2: number, y2: number, color: table)
Renders a line.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | X1 position |
y1 |
number | Y1 position |
x2 |
number | X2 position |
y2 |
number | Y2 position |
color |
table | Color |
Usage
render.line(50, 50, 150, 150, render.color('#fff'));
triangle
triangle(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, color: table)
Renders a triangle.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | X1 position |
y1 |
number | Y1 position |
x2 |
number | X2 position |
y2 |
number | Y2 position |
x3 |
number | X3 position |
y3 |
number | Y3 position |
color |
table | Color |
Usage
render.triangle(50, 50, 150, 150, 100, 100, render.color('#fff'));
triangle_filled
triangle_filled(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, color: table)
Renders a filled triangle.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | X1 position |
y1 |
number | Y1 position |
x2 |
number | X2 position |
y2 |
number | Y2 position |
x3 |
number | X3 position |
y3 |
number | Y3 position |
color |
table | Color |
Usage
render.triangle(50, 50, 150, 150, 100, 100, render.color('#fff'));
triangle_filled_multicolor
triangle_filled_multicolor(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, a: table, b: table, c: table)
Renders a filled multicolor triangle.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | X1 position |
y1 |
number | Y1 position |
x2 |
number | X2 position |
y2 |
number | Y2 position |
x3 |
number | X3 position |
y3 |
number | Y3 position |
a |
table | A color |
b |
table | B color |
c |
table | C color |
Usage
render.triangle(50, 50, 150, 150, 100, 100, render.color('#fff'), render.color('#000'), render.color('#000'));
text
text(font: object, x: number, y: number, text: string, color: table, ah: enum = left, av: enum = top, al: enum = left)
Renders a text.
Parameters
| Name | Type | Description |
|---|---|---|
font |
object | Font |
x |
number | X position |
y |
number | Y position |
text |
string | Text |
color |
table | Color |
ah |
enum | Horizontal alignment |
av |
enum | Vertical alignment |
al |
enum | Line alignment |
Usage
render.text(my_fnt, 50, 50, 'Hello world!', render.color('#fff'));
blur
blur(x1: number, y1: number, x2: number, y2: number, fn: ())
Blurs a figure.
Warning
This function can be VERY resource intensive. Make sure that you only have a SINGLE figure call in the function!
Tip
Use render.set_alpha to control intensity of the blur.
Parameters
| Name | Type | Description |
|---|---|---|
x1 |
number | Figure box X1 position |
y1 |
number | Figure box Y1 position |
x2 |
number | Figure box X2 position |
y2 |
number | Figure box Y2 position |
fn |
function() | Figure render callback |
Usage
render.blur(50, 50, 150, 150, function ()
render.rect_filled(50, 50, 150, 150, render.color('#fff'));
end);