snowcone-ltd / libmatoya Goto Github PK
View Code? Open in Web Editor NEWCross-platform application development.
License: MIT License
Cross-platform application development.
License: MIT License
I tried to reference the library in a C++ project, but it got an error. My system is Fedora34, and the compiler is g++11.2.1 The output error is as follows
X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 1 (X_CreateWindow) Value in failed request: 0x0 Serial number of failed request: 46 Current serial number in output stream: 48
How to solve it, thank you
does libmatoya plan to provide event-loop with non-blocking IO and timer??
Your project looks interesting. What's the purpose of it? - Normal cross-platform application development, like Qt, wxWidgets, IUP, NappGUI and friends? - Or a super lightweight wrapper over the OS windowing and input systems in order to superimpose another system, for fullscreen or full-window games?
Personally I'm looking for something like Flutter but with close to zero overhead (incl. on binary size). And I want to target C and call into C from dozens of higher level programming languages. Then I want to support WebAssembly and create a JSON DSL to generate GUIs from.
Thanks for your elaboration
It would be helpful to be able to specify which display to open a window on. At the moment there doesn't seem to be a way to do this? i.e if I want to open two windows and have window 1 on display 1 and window 2 on display 2 (Or even just open window 1 on display 2 instead of display 1).
In addition to this it would also be helpful to retrieve the current Display configuration i.e what displays are connected, size, scaling, bounds (positioning).
Dear maintainer:
I found while using MTY_HttpSetProxy that it doesn't seem to support socks5.
No matter whether there is a related plan or not, I hope to be restored, thank you! :D
Changing gfx api from D3D -> openGL after window initialisation causes all rendering to sieze and produces the following error in the MTY Log
mty_gl_ctx_present: 'wglSwapIntervalEXT' failed with error 0x0
Attempted logic so far:
Changing from openGL -> D3D seems to work okay
i have a function call like this and if it has args it has no response
MTY_HttpRequest(host, 80, false, "GET", path, "", payload, 0, 1000, &body, &size, &res);
@16flotho opening this issue on the upstream repo.
Original: https://github.com/parsec-cloud/libmatoya/issues/74
Angle support and d3d11 support for xbox and other uwp platforms.
When I first launched parsec on my laptop, I almost immediately noticed severe glitchiness.
The cause for that it auto-detected my touchpad as a gamepad and actually used it right away without any user input, amplifying mouse movement and making navigation of the application impossible.
Steps to reproduce
Expected behavior
Do not setup touchpads as gamepads or require manual enabling for such devices. On Linux, many devices have metadata, too, so filtering out touchpads should be trivial. I am fairly sure there are already libraries for this, e.g sdl2, which you can look at for references.
Hi
I tried to connect Parsec with an old DB9 Joystick from a Commodore 64. I use a adapter which is connected via USB to the PC. The output is a DB9 connection for the Joystick.
The Problem:
when trying to map the Joystick there is a problem for mapping the left/righ axes and the up/down axes. When mapping left/right the (raw) is for both V0+ and for up/down V1-
When I am using a USB Speedlink Joystick the mapping is correct.
up V1+
right V0+
down V1-
left V0-
Is there maybe a solution for this problem? I explained the problem on discord and there was a supposition that it maybe has something to do with HID handling.
kind regards.
As an experiment, I'm developing a RetroArch front-end based on this library. I got it working correctly on Ubuntu, with video, audio and inputs.
Then I tried to setup an Android application using it, and I keep having a black screen on the main Activity
(the one I used to initialize the Matoya
class). I know the native library is running correctly because I have sound and inputs (I can see those firing up through the logs).
I'm sure the culprit does not come from libmatoya
, and I don't think the issue could come from the Java part of the Android application (which is basically 2 lines of code, 5 if we count the onDestroy
part). However, I couldn't find any documentation or examples explaining some kind of best-practices about Android.
Not sure what part of my code I can give you to help, honestly. Currently, I'm creating the window with MTY_GFX_GL
, I still call MTY_WindowMakeCurrent
even though it does not seem to have any effect on Android, and I'm drawing using those two method calls, executed in a dedicated rendering thread:
MTY_WindowDrawQuad(ctx.app, 0, ctx.image, &desc);
MTY_WindowPresent(ctx.app, 0, 1);
Could you (someone) give some advices? In the form of an example project / the correct process flow to implement on the native part / just some tips-and-tricks to be careful of?
Fantastic library by the way, I haven't played with the C language since years and I must say it's a pleasure to go back to it through libmatoya. 🙂
Thanks in advance!
My Xbox Elite Series 2 is updated to the newest firmware and is recognized but the trigger buttons do not register at all while using parsec. My google stadia controller does not work at all as it does not show up.
MTY_HttpRequest doesn't seem to work correctly on Mac. Built lib from latest source
The request itself works and returns true however the response return parameter is null and the status code is 0. The same request works fine on Windows returning the correct response data and code 200.
MTY_GetLog doesn't reveal any errors
linked -framework Security as this seemed to be a dependency
MacBook Pro (15-inch, 2018)
Big Sur 11.2.3
When starting Parsec on a Linux system, the local clipboard is corrupted when placing images, files or other items other than text. This issue results in the loss of data and makes it difficult for users to transfer data between different applications.
The copied item should be pasted as expected, without loss of data.
The pasted item is replaced by the last copied text, and the image/file/... is lost.
The problem comes from the X11 stock api which has no event on clipboard modifications.
The libmatoya library, to work around this lack, retrieves the clipboard property each time it loses its ownership to another application. This is done to detect any modification of the clipboard content by other applications.
When the libmatoya library recovers the clipboard ownership, it puts back in the clipboard what was added by the previous application. However, when the content is read, it is converted to UTF-8, which results in data loss if the content is not textual.
As a result, the local clipboard is corrupted when non-textual items, such as images or files, are copied.
If my understanding is correct, this library is still dependent on libssl1.1
:
https://github.com/chrisd1100/libmatoya/blob/686e1d735d0cc0ced74f868e211270b76cd4edf5/src/unix/linux/x11/dl/libssl.h#L153-L158
Newer versions of Linux are shipping without support for libssl1.1
. For example, this package is no longer in the default repositories for the Ubuntu 22.04 LTS. This makes getting software that depends on this library, such as Parsec, to run on said Linux distributions/versions more difficult.
As a workaround, I was able to get Parsec to run on ubuntu 22.04 by installing libssl1.1
via:
wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb
However, this is relying on downloading/installing unofficial packages. It would be great if libmatoya
could be updated with support for libssl3
so that using it on newer distributions/versions is easier.
I was testing this library but I ran into some issues. I get a glitched out screen where it seems that the graphics of the window were not working. I ran 0-minimal, 1-draw, and 2-threaded. I have a windows 11 machine and it works as expected. Any help with this would be appreciated. I would love to start diving into this library.
I tested it using OpenGL, Vulkan, and None. I tried enabling and disabling vsync.
cc -I../src -O3 -Wall -Wextra -Wno-unused-parameter -Wno-format-overflow -o mty src/test.c ../bin/linux/x86_64/libmatoya.a -lc -lm
[JSON Torture Test] Passed
[JSON duplication/serialization] Passed
[JSON UTF-16] Passed
[MTY_HashCreate] Passed (hashctx != ((void *)0))
[MTY_HashSet (New)] Passed (value == ((void *)0))
[MTY_HashSet (OW)] Passed (value && !strcmp(stringkey, (char *) value))
[MTY_HashGet] Passed (value && !strcmp(stringkey, value))
[MTY_HashSetInt (New)] Passed (value == ((void *)0))
[MTY_HashSetInt (OW)] Passed (value && *(void**)value == intvalue)
[MTY_HashGetInt] Passed (value && value == intvalue)
[MTY_HashGetNextKey (I)] Passed (r): 4294967309
[MTY_HashGetNextKey (S)] Passed (r): 4294967352
[MTY_HashGetNextKeyInt (I)] Passed (r): 4294967309
[MTY_HashGetNextKeyInt (S)] Passed (!r): 4294967352
[MTY_HashPop] Passed (value && !strcmp(stringkey, value))
[MTY_HashPopInt] Passed (value && value == intvalue)
[MTY_HashDestroy] Passed (hashctx == ((void *)0))
[MTY_QueueCreate] Passed (queuectx != ((void *)0))
[MTY_QueueDestroy] Passed (queuectx == ((void *)0))
[MTY_ListCreate] Passed (listctx != ((void *)0))
[MTY_ListGetFirst (Empty)] Passed (node == ((void *)0))
[MTY_ListAppend] Passed (node != ((void *)0))
[MTY_ListRemove] Passed (value && value == intvalue)
[MTY_ListDestroy] Passed (listctx == ((void *)0))
[MTY_GetHostname] Passed (strcmp(hostname, "noname"))
[MTY_GetPlatform] Passed plat > 0: 134217728
[MTY_GetPlatformNoWeb] Passed plat > 0: 134217728
[MTY_IsSupported] Passed (r)
[MTY_GetProcessPath] Passed procpath: /home/patricks/Documents/libmatoya/test/mty
[MTY_GetRunOnStartup] Passed (!r)
[MTY_GetVersionString] Passed verstring: Linux
[MTY_GetVersion] Passed (v == (4 << 8 | 0)): 1024
[MTY_GetTime] Passed (ts > 0): 7746505972
[MTY_Sleep] Passed (100)
[MTY_TimeDiff] Passed (diff >= 99.0f && diff <= 115.0f): 100.08
[MTY_GetDir1] Passed (strlen(get_dir))
[MTY_GetDir2] Passed (strlen(get_dir))
[MTY_GetDir3] Passed (strlen(get_dir))
[MTY_GetDir4] Passed (strlen(cwd))
[MTY_JoinPath] Passed (strlen(full_path) > strlen(origin_file) + strlen(cwd))
[MTY_WriteFile] Passed (MTY_FileExists(full_path))
[MTY_ReadFile] Passed (strlen(g_address_2) == strlen(file_g_address))
file_vfprintf: 'vfprintf' failed with ferror 0
[MTY_AppendTextToFile] Passed (g_address_2[0] == 'a' && g_address_2[1] == 'F')
[MTY_GetPathPrefix] Passed (!strcmp(cwd, prefix))
[MTY_GetFileName] Passed (!strcmp(origin_file, filename))
[MTY_CopyFile] Passed (MTY_FileExists(full_path_2))
[MTY_DeleteFile1] Passed (!MTY_FileExists(full_path))
MTY_DeleteFile: 'remove' failed with errno 2
[MTY_DeleteFile2] Passed (!MTY_DeleteFile(full_path))
[MTY_MoveFile1] Passed (MTY_MoveFile(full_path_2, full_path))
[MTY_MoveFile2] Passed (MTY_FileExists(full_path))
[MTY_MoveFile3] Passed (!MTY_FileExists(full_path_2))
MTY_MoveFile: 'rename' failed with errno 2
[MTY_MoveFile4] Passed (!MTY_MoveFile(full_path_2, full_path))
[MTY_MoveFile5] Passed (MTY_FileExists(full_path))
[MTY_MoveFile6] Passed (!MTY_FileExists(full_path_2))
[MTY_FileList] Passed (!failed)
[MTY_FreeFileList] Passed (!list)
[MTY_Mkdir] Passed (MTY_FileExists(full_path))
[MTY_Free] Passed (!failed)
[MTY_FreeAligned] Passed (!failed)
[MTY_Alloc] Passed (!failed)
[MTY_AllocAligned] Passed (!failed)
[MTY_Realloc] Passed (!failed)
[MTY_Dup] Passed (!failed)
[MTY_Strdup] Passed (dup_str[127] == '\0')
[MTY_Strcat] Passed (dup_str[127] == '\0')
[MTY_Strcasecmp] Passed (cmp == 0)
[MTY_SwapToBE16] Passed (u16_a != u16_b)
[MTY_SwapToBE32] Passed (u32_a != u32_b)
[MTY_SwapToBE64] Passed (u32_a != u32_b)
[MTY_SwapFromBE16] Passed (u16_a == u16_b)
[MTY_SwapFromBE32] Passed (u32_a == u32_b)
[MTY_SwapFromBE64] Passed (u32_a == u32_b)
[MTY_Swap16] Passed (u16_a != u16_b)
[MTY_Swap32] Passed (u32_a != u32_b)
[MTY_Swap64] Passed (u32_a != u32_b)
[MTY_MultiToWide] Passed (!failed)
[MTY_MultiToWideD] Passed (!failed)
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: -42.987
[MTY_SprintfD] Passed cmp_val == 0: 42.987
[MTY_SprintfD] Passed cmp_val == 0: Hello testing
[MTY_SprintfD] Passed cmp_val == 0: 1024
[MTY_SprintfD] Passed cmp_val == 0: -1024
[MTY_SprintfD] Passed cmp_val == 0: 1024
[MTY_SprintfD] Passed cmp_val == 0: -1024
[MTY_SprintfD] Passed cmp_val == 0: 1024
[MTY_SprintfD] Passed cmp_val == 0: 4294966272
[MTY_SprintfD] Passed cmp_val == 0: 777
[MTY_SprintfD] Passed cmp_val == 0: 37777777001
[MTY_SprintfD] Passed cmp_val == 0: 1234abcd
[MTY_SprintfD] Passed cmp_val == 0: edcb5433
[MTY_SprintfD] Passed cmp_val == 0: 1234ABCD
[MTY_SprintfD] Passed cmp_val == 0: EDCB5433
[MTY_SprintfD] Passed cmp_val == 0: x
[MTY_SprintfD] Passed cmp_val == 0: +42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: +42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: +42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: Hello testing
[MTY_SprintfD] Passed cmp_val == 0: +1024
[MTY_SprintfD] Passed cmp_val == 0: -1024
[MTY_SprintfD] Passed cmp_val == 0: +1024
[MTY_SprintfD] Passed cmp_val == 0: -1024
[MTY_SprintfD] Passed cmp_val == 0: 1024
[MTY_SprintfD] Passed cmp_val == 0: 4294966272
[MTY_SprintfD] Passed cmp_val == 0: 777
[MTY_SprintfD] Passed cmp_val == 0: 37777777001
[MTY_SprintfD] Passed cmp_val == 0: 1234abcd
[MTY_SprintfD] Passed cmp_val == 0: edcb5433
[MTY_SprintfD] Passed cmp_val == 0: 1234ABCD
[MTY_SprintfD] Passed cmp_val == 0: EDCB5433
[MTY_SprintfD] Passed cmp_val == 0: x
[MTY_SprintfD] Passed cmp_val == 0: +
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 00042
[MTY_SprintfD] Passed cmp_val == 0: -0042
[MTY_SprintfD] Passed cmp_val == 0: 000000000000042
[MTY_SprintfD] Passed cmp_val == 0: -00000000000042
[MTY_SprintfD] Passed cmp_val == 0: 000000000042.12
[MTY_SprintfD] Passed cmp_val == 0: 00000000042.988
[MTY_SprintfD] Passed cmp_val == 0: -00000042.98760
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 00000000000000001024
[MTY_SprintfD] Passed cmp_val == 0: -0000000000000001024
[MTY_SprintfD] Passed cmp_val == 0: 00000000000000001024
[MTY_SprintfD] Passed cmp_val == 0: -0000000000000001024
[MTY_SprintfD] Passed cmp_val == 0: 00000000000000001024
[MTY_SprintfD] Passed cmp_val == 0: 00000000004294966272
[MTY_SprintfD] Passed cmp_val == 0: 00000000000000000777
[MTY_SprintfD] Passed cmp_val == 0: 00000000037777777001
[MTY_SprintfD] Passed cmp_val == 0: 0x00000000001234abcd
[MTY_SprintfD] Passed cmp_val == 0: 0x0000000000edcb5433
[MTY_SprintfD] Passed cmp_val == 0: 0X00000000001234ABCD
[MTY_SprintfD] Passed cmp_val == 0: 0X0000000000EDCB5433
[MTY_LogFunc(Short)] Passed msg != ((void *)0) && strlen(msg)
[MTY_LogFunc(Long)] Passed msg != ((void *)0) && strlen(msg)
[MTY_GetLog] Passed (last_log != ((void *)0) && strlen(last_log))
[MTY_DisableLog(off)] Passed msg != ((void *)0) && strlen(msg)
[CRC32 1] Passed crc == 0xcbf43926: "123456789"
[CRC32 2] Passed crc == 0x414FA339: "The quick brown fox jumps over the lazy dog"
[CRC32 3] Passed crc == 0x00000000: ""
[CRC32 1] Passed crc == 0x35cdbb82: "123456789"
[CRC32 2] Passed crc == 0x34cc38de: "The quick brown fox jumps over the lazy dog"
[CRC32 3] Passed crc == 0x00001505: ""
[SHA1("abc")] Passed strcmp_v == 0: "a9993e364706816aba3e25717850c26c9cd0d89d"
[SHA1("")] Passed strcmp_v == 0: "da39a3ee5e6b4b0d3255bfef95601890afd80709"
[SHA1("abcdbcde...")] Passed strcmp_v == 0: "84983e441c3bd26ebaae4aa1f95129e5e54670f1"
[SHA1("abcdefgh...")] Passed strcmp_v == 0: "a49b2446a02c645bf419f995b67091253a04a259"
[SHA1("aaaaaaaa...")] Passed strcmp_v == 0: "34aa973cd4c4daa4f61eeb2bdbad27316534016f"
[SHA256("abc")] Passed strcmp_v == 0: "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
[SHA256("")] Passed strcmp_v == 0: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
[SHA256("abcdbc...")] Passed strcmp_v == 0: "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"
[SHA256("abcdef...")] Passed strcmp_v == 0: "cf5b16a778af8380036ce59e7b0492370b249b11e8f07a51afac45037afee9d1"
[SHA256("aaaaaa...")] Passed strcmp_v == 0: "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0"
[SHA256("48692054686] Passed strcmp_v == 0: "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7"
[SHA256("77686174206] Passed strcmp_v == 0: "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843"
[SHA256("ddddddddddd] Passed strcmp_v == 0: "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe"
[SHA256("cdcdcdcdcdc] Passed strcmp_v == 0: "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b"
[SHA256("54657374205] Passed strcmp_v == 0: "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54"
[SHA256("54686973206] Passed strcmp_v == 0: "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2"
[Dist Small] Passed ds >= 0.0035 && ds <= 0.0045: 0.0037
[Dist Large] Passed dl >= 0.0035 && dl <= 0.0045: 0.0041
[Dist Small] Passed ds >= 0.0035 && ds <= 0.0045: 0.0037
[Dist Large] Passed dl >= 0.0035 && dl <= 0.0045: 0.0041
[MTY_AESGCMCreate] Passed (aes1 != ((void *)0))
[MTY_AESGCMDecrypt] Passed (ok)
MTY_AESGCMDecrypt: 'EVP_DecryptFinal_ex' failed with error 0
[MTY_AESGCMDecrypt] Passed (!ok)
MTY_AESGCMDecrypt: 'EVP_DecryptFinal_ex' failed with error 0
[MTY_AESGCMDecrypt] Passed (!ok)
MTY_AESGCMDecrypt: 'EVP_DecryptFinal_ex' failed with error 0
[MTY_AESGCMDecrypt] Passed (!ok)
[MTY_AESGCMDecrypt] Passed (ok)
[MTY_AESGCMCreate] Passed (aes1 != ((void *)0))
MTY_AESGCMDecrypt: 'EVP_DecryptFinal_ex' failed with error 0
[MTY_AESGCMDestroy] Passed (aes1 == ((void *)0))
[MTY_AESGCMDecrypt] Passed (cmp_decr == 0)
[MTY_AESGCMEncrypt] Passed (cmp_encr_1 != 0)
[MTY_AESGCMEncrypt] Passed (cmp_encr_2 != 0)
[MTY_AESGCMEncrypt] Passed (cmp_encr_3 != 0)
[MTY_CondCreate] Passed (data.cond != ((void *)0))
[MTY_Mutex counter] Passed (data.counter == 100)
[MTY_Mutex counter] Passed (data.counter == 100)
[MTY_CondDestroy] Passed (data.cond == ((void *)0))
[MTY_MutexCreate] Passed (data.mutex != ((void *)0))
[MTY_Mutex counter] Passed (data.counter == 0)
[MTY_Mutex counter] Passed (data.counter == 100)
[MTY_MutexTryLock] Passed (MTY_MutexTryLock(data.mutex))
[MTY_MutexTryLock] Passed (MTY_MutexTryLock(data.mutex))
[MTY_MutexDestroy] Passed (data.mutex == ((void *)0))
[MTY_ThreadCreate] Passed (t_test != ((void *)0))
[MTY_Thread executed] Passed (data.executed)
[MTY_ThreadDestroy] Passed (t_test == ((void *)0))
[MTY_Thread executed] Passed (!data.executed)
[MTY_Thread executed] Passed (data.executed)
[MTY_ThreadPoolCreate] Passed (data.pool != ((void *)0))
[MTY_Atomic32Get] Passed (MTY_Atomic32Get(&data.atomic_32) == 100)
[MTY_ThreadPoolDestroy] Passed (data.pool == ((void *)0))
[MTY_Atomic32Get] Passed (MTY_Atomic32Get(&data.atomic_32_detach) == 100)
[MTY_RWLockCreate] Passed (data.rw_lock != ((void *)0))
[MTY_RWLock write counter] Passed (data.counter == 0)
[MTY_RWLock write counter] Passed (data.counter == 0)
[MTY_RWLock write counter] Passed (data.counter == 100)
[MTY_RWLock read counter] Passed data.counter == 0: 0
[MTY_RWLock read counter] Passed data.counter == 0: 0
[MTY_RWLock counter] Passed (data.counter == 100)
[MTY_RWTryLockReader] Passed (MTY_RWTryLockReader(data.rw_lock))
[MTY_RWTryLockReader] Passed (MTY_RWTryLockReader(data.rw_lock))
[MTY_RWTryLockReader] Passed (MTY_RWTryLockReader(data.rw_lock))
[MTY_RWLockDestroy] Passed (data.rw_lock == ((void *)0))
[MTY_WaitableCreate] Passed (data.wait != ((void *)0))
[MTY_Atomic32Get] Passed (MTY_Atomic32Get(&data.atomic_32) == 100)
[MTY_WaitableDestroy] Passed (data.wait == ((void *)0))
[MTY_WebSocketConnect] Failed (ws != ((void *)0))
make: *** [GNUmakefile:37: test] Error 1
It looks like MTY_AppGetClipboard does not support multi-line text in the clipboard? (The value returned is NULL)
Tested on a windows 10 machine.
Could I be doing something wrong here?
There seems to be a lack of support for gamecube controllers, is there planned support?
I believe it would also add support for the b0xx
Hi,
I just discovered libmatoya, the project looks truly awesome!
I decided to give it a try and, as a C# developer, I wanted to create bindings for .NET Core... to discover that .NET does not support static library linking at all. Could it be considered to provide builds of dynamically linked libraries as well, or is it technically impossible?
Side note: it's been a while since I've played with C/C++ projects, I hope what I ask makes sense. 🙂
Thanks!
Due to the asynchronous nature of my libmatoya app (with separate event, render, app threads) I am running into an issue where imgui is asserting with a mismatch on io.XXX vs io.KeyMods occasionally when releasing modifier keys (for app shortcuts) - presumably due to the fact that this could happen mid-frame.
What would be the suggested way of dealing with this? So far I am looking at queuing the events and submitting them to imgui in the render thread prior to creating a new frame. Would this approach make sense?
I've quickly looked through the source code but haven't found anything related to font rendering. Actually a very nice feature would be to implement some sort of font rendering (TTF or old VGA DOS fonts or something else). I believe it will help to replace huge SDL+SDL_ttf libraries in some projects if this would be available in platform independent way in libmatoya.
Without knowing if the audio is actually getting through or not, an application playing audio through Matoya doesn't know when or if it needs to recreate it's audio context for, for example, a device change.
This issue can currently be seen on Android when disconnecting a bluetooth device mid-stream.
Proposed fix;
uint32_t retval;
to the MTY_Audio context struct internally, defaulting to 0 for success. Errors, or error callbacks, should assign their error codes to this context value, which should then be returned at the end of MTY_AudioQueue.AppRun loop will call app_apply_clip on state change, focus is false as the other application is in focus, so ClipCursor(NULL) is called, breaking the other application's lock.
libjpeg8
does not exist in debian bullseye bookworm, but exists on ubuntu. This application that use libtamoya like parsec throw missing MTY_SOLoad: libjpeg.so.8: cannot open shared object file: No such file or directory
❯ dpkg-query -L libjpeg62-turbo:amd64
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libjpeg.so.62.3.0
/usr/share
/usr/share/doc
/usr/share/doc/libjpeg62-turbo
/usr/share/doc/libjpeg62-turbo/changelog.Debian.gz
/usr/share/doc/libjpeg62-turbo/changelog.gz
/usr/share/doc/libjpeg62-turbo/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libjpeg62-turbo
/usr/lib/x86_64-linux-gnu/libjpeg.so.62
There is hacky way of directly dirty linking libjpeg.so.8
to libjpeg.so.62.3.0
but not preferred.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.