Pixel-Composer/extensions/gameframe_native/gameframe_native.gml
2023-03-08 18:14:59 +07:00

75 lines
2.5 KiB
Text

#define gameframe_init_native
//#init gameframe_init_native
gameframe_init_raw();
#define gameframe_get_monitors
var _list = argument_count > 0 ? argument[0] : undefined;
var _count = gameframe_get_monitors_1();
var _buf = gameframe_prepare_buffer(_count * (4*4 + 4*4 + 4));
if (!gameframe_get_monitors_2(buffer_get_address(_buf)))
return _list == undefined ? array_create(0) : 0;
var _array;
var _use_array = _list == undefined;
if (_use_array) _array = array_create(_count);
buffer_seek(_buf, buffer_seek_start, 0);
for (var _ind = 0; _ind < _count; _ind++) {
var _item, _mntr, _work;
if (_use_array) {
_mntr = array_create(4);
_work = array_create(4);
_item = [_mntr, _work, 0];
_array[_ind] = _item;
} else {
_item = _list[|_ind];
if (_item == undefined) {
_mntr = array_create(4);
_work = array_create(4);
_item = [_mntr, _work, 0];
_list[|_ind] = _item;
} else {
_mntr = _item[0];
_work = _item[1];
}
}
_mntr[@0] = buffer_read(_buf, buffer_s32);
_mntr[@1] = buffer_read(_buf, buffer_s32);
_mntr[@2] = buffer_read(_buf, buffer_s32);
_mntr[@3] = buffer_read(_buf, buffer_s32);
_work[@0] = buffer_read(_buf, buffer_s32);
_work[@1] = buffer_read(_buf, buffer_s32);
_work[@2] = buffer_read(_buf, buffer_s32);
_work[@3] = buffer_read(_buf, buffer_s32);
_item[@2] = buffer_read(_buf, buffer_s32);
}
return _use_array ? _array : _count;
#define gameframe_prepare_buffer
var _size = argument0;
gml_pragma("global", "global.__gameframe_buffer = undefined");
var _buf = global.__gameframe_buffer;
if (_buf == undefined) {
_buf = buffer_create(_size, buffer_grow, 1);
global.__gameframe_buffer = _buf;
} else if (buffer_get_size(_buf) < _size) {
buffer_resize(_buf, _size);
}
buffer_seek(_buf, buffer_seek_start, 0);
return _buf;
#define gameframe_buffer_read_chars
var _buf = argument0, _len = argument1;
gml_pragma("global", "global.__ggpo_string_buffer = undefined");
var _tmp = global.__ggpo_string_buffer;
if (_tmp == undefined) {
_tmp = buffer_create(_len + 1, buffer_grow, 1);
global.__ggpo_string_buffer = _tmp;
} else if (buffer_get_size(_tmp) <= _len) {
buffer_resize(_tmp, _len + 1);
}
buffer_copy(_buf, buffer_tell(_buf), _len, _tmp, 0);
buffer_seek(_buf, buffer_seek_relative, _len);
buffer_poke(_tmp, _len, buffer_u8, 0);
buffer_seek(_tmp, buffer_seek_start, 0);
return buffer_read(_tmp, buffer_string);