Bounty: Update LibGDX Add-on for B4A

Spright

Active Member
Bounty: Update LibGDX Add-on for B4A to make it compatible with up to Android API 33 and higher

Description:

Update the LibGDX add-on for B4A to fix compatibility issues with newer
Android versions (confirmed working until API-28).
Solve intermittent crashes during pause using the recent
button with error message "Waiting for pause synchronization took too long; assuming deadlock and killing".
The goal is to ensure stability on the latest Androids.
Link: (https://www.b4x.com/android/forum/threads/libgdx-game-engine.32594/#content)

Requirements:
Compatibility up to Android API 33 and higher.
Preserve the current graphic qualities of the add-on.
Adherence to B4A coding standards.
Maintain compatibility with the SpecialFX add-on (https://www.b4x.com/android/forum/threads/specialfx-for-libgdx.45753/)
Document any changes made.

Note that the complete coverage of LibGDX is not required. Features such as Box2D, Scenes,
Particles, Fonts, may be ignored. However, the full core must, of course, be included.

Bounty Amount:
$150 USD offered to the developer who successfully updates
the LibGDX add-on for B4A. Resolve compatibility issues with Android API 33
and up without compromising the existing library qualities. Payment via Paypal.

Contact Information:
For inquiries and to express interest in claiming the bounty, contact at: [email protected]

Additional Details:
Submissions deadline: 20th April 2024.
Feel free to reach out using the provided contact information for any questions.
 

Computersmith64

Well-Known Member
Licensed User
Longtime User
So you want someone to update the LibGDX wrapper so you can update your app & you've decided that this work is worth US$150? You might have more luck if you ask for estimates to complete the required tasks. Is the source from the original wrap even available? You might be better off contacting @Informatix directly & asking him what he would charge to update the lib, considering he was the one who wrote it originally.

- Colin.
 

Spright

Active Member
Yes, and luckily we already have two interested parties. We've selected one, and the idea is to release it publicly so that everyone can enjoy the results later on this year. We'll see how it goes.
 

Computersmith64

Well-Known Member
Licensed User
Longtime User
Yes, and luckily we already have two interested parties. We've selected one, and the idea is to release it publicly so that everyone can enjoy the results later on this year. We'll see how it goes.
I bet they're not doing it for US$150, or if they are they're grossly underselling it or have seriously underestimated the amount of work involved - considering the going rate for an Android dev is $800+ per day.

- Colin.
 

Spright

Active Member
I completely understand your skepticism regarding the cost.
It's no secret that the going rate for an Android developer typically is much higher.

However, in our situation as a small indie company developing games for passion rather than immediate profit
(that is what brought us to B4A in the first place), we're faced with different circumstances.

So given our current situation, we're exploring every option available to us to continue with our project.
To stick with B4A using this library is one that we would love of course.
While we recognize the value of experienced developers and their standard rates, we're also searching for
individuals who understand and appreciate the ethos of indie game development.
 

walterf25

Expert
Licensed User
Longtime User
Just send me a keg of beer and add the following to the project and it will fix the issue.


libGDX Fix:
Sub Activity_Resume
    If lGdx.IsInitialized Then
        Sleep(0)  ''' Add this line to the Activity_Resume sub
     lGdx.Resume
    End If
    FPSLabelTimer.Enabled = True
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    FPSLabelTimer.Enabled = False
    If lGdx.IsInitialized Then
        Sleep(0) ''' Add This line to the Activity_Pause Sub
        lGdx.Pause
    End If
End Sub

The issue is described here the fix they describe on that link is a temporary one where they are using an Executor in my understanding to allow some time to the onDrawFrame function to still be triggered.
For some reason when you instantly resume activity that hasn't fully paused then internally android stops trigerring onDrawFrame in GL thread what causes deadlock, cos synch.wait() needs notify from onDrawFrame.
It can be solved by executing what we need in GL Thread with GLSurfaceView#queueEvent. It doesn't have requirements like usual onDrawFrame calls from GLSurfaceView (f.e. frame cap, some synchronization et

I've tested with the project you linked on your thread and so far it seems to work every time.

Regards,
Walter
 

Spright

Active Member
When you make that change, you'll encounter errors when attempting to exit your game through backbutton or homebutton.
 
Top