godotengine / godot-platform-haiku

Godot Engine platform port for the Haiku operating system // UNMAINTAINED, for reference / forks.
MIT License
20 stars 5 forks source link

Updating Haiku platform for Godot 3.x #1

Open YeldhamDev opened 6 years ago

YeldhamDev commented 6 years ago

Someone had to say this sooner or later, but I think Haiku should go, whatever little of it exists anyways.

It's a extremely niche OS, and the Godot files of it has seen little to no maintenance for it. I don't know the OS can even open the editor at this point.

akien-mga commented 6 years ago

Well it doesn't hurt per se, the code is self contained in platform/haiku, so even if not fully functional in 3.x, it doesn't impact other platforms nor the maintainability of the engine as a whole.

Of course if there's no interest in the platform from the community, we can just drop it, but otherwise the current code is just waiting for a Haiku dev to do the little changes needed for it to compile. (CC @Max-Might @jay3d).

NuclearPhoenixx commented 6 years ago

Have to agree with both of you. Firstly, although Haiku is still in development, the last release was in Nov 2012, that almost 6 years now and it's indeed an extremely nieche OS, so maintaining it is not something worth someones time if I may say it so.

However, if it does not affect the overall maintainability or the other platforms, then why cancel it? If someone really likes Haiku and decides to maintain Godot for the whole Haiku community then great! At least a little more people get access to the engine then :)

YeldhamDev commented 6 years ago

Having useless code laying around never leads to good things, even if isolated.

akien-mga commented 6 years ago

Having useless code laying around never leads to good things, even if isolated.

Yeah but in that case it cannot lead to bad things either, due to it being isolated. It just takes disk space :)

But yeah, if no contributor shows interest in the platform in the coming months, I might drop it before the 3.1 release. The code would still be available in the git history/the 3.0 branch if needed to make a comeback in the future.

Max-Might commented 6 years ago

While I don't have the time to update the port at the moment I just wanted to mention that Haiku is under active development. There are people using it as their main OS and the devs are gearing up for a beta release to be released soon. They are also participating in this year's GSoC edition.

pulkomandy commented 6 years ago

Hi,

Haiku and Godot devs met at RMLL and we have updated the sources to get it building again. Here is a patch against the 3.0.5 release: https://raw.githubusercontent.com/haikuports/haikuports/7b02219735ac564f073c1e1861b9d5b83c8e0946/dev-games/godot/patches/godot-3.0.5.patchset

Currently it crashes at start for lack of GLSL 3.3 support on Haiku side. I will investigate this but the issue is probably in the Mesa port of Haiku.

GatoAmarilloBicolor commented 6 years ago

Haiku is growing, we need godot there, nowdays it is becoming more popular. Dont remove please, if i can help i will do, but dont remove it please.

pulkomandy commented 6 years ago

Here is a patch against current master branch: https://raw.githubusercontent.com/haikuports/haikuports/495a02b62d4fb5461e0e2cb053dc7b93fd5cec8d/dev-games/godot/patches/godot-3.0.6.patchset

It seems to be running fine but stays at the splash screen forever. The editor never shows up. Help debugging this is appreciated.

akien-mga commented 6 years ago

@pulkomandy I think it would be nice to get this patch merged in the master branch, even if it doesn't solve the rendering issue yet. At least it makes it possible to compile on Haiku, potentially enabling other Haiku devs to dig further into debugging the issue. Would you be able to make a pull request? (after checking that it rebases and still compiles on current master)

akien-mga commented 6 years ago

Renaming this issue now that it's clear that we don't intended to drop the Haiku code for the time being. With @pulkomandy's work merged in godotengine/godot#20913 it should now compile on Haiku, and the editor starts fine, but doesn't render properly - fixing that would be the next step.

ghost commented 6 years ago

Just an update from Haiku world. A month ago it finally got to beta stage after like half a decade. So it's not a dead platform. :) Not yet at least.

Calinou commented 4 years ago

Now that Godot 3.2's release is around the corner, what's the status on this?

cc @pulkomandy

pulkomandy commented 4 years ago

I don't know, I just helped upstream the existing patches from our packaging system.

CodeforEvolution commented 4 years ago

I'm currently in the progress of making updated patches, you can find my progress here: https://github.com/CodeforEvolution/godot/tree/haikuFixup/ This is still a WIP as of now...

CodeforEvolution commented 4 years ago

So, I have a status update: I was able to get a 32bit build working! (Actually, it was a working a while go, I've just been very busy, and I still am sort of). However, after an empty Godot window opens up, and in the stdio output, it's printed that the OpenGL context is set up, the application crashes on a SEGFAULT. Unfortunately, the system I have doesn't have enough RAM to set up a debugging harness and I was most likely going to call on the Haiku community to try to build Godot on both 32bit and 64bit Haiku. (I'll do this in a separate place, I also need to give specific instructions on how to build Godot) Either way, I saw that a Vulkan implementing branch was merged in, and was wondering if it's ok for Haiku to solely utilize GLES2. (We have yet to get Vulkan through MESA working at this point)

akien-mga commented 4 years ago

@CodeforEvolution Great news!

It's OK to support only GLES2 in the master branch for now, but you won't be able to do so right away. Following the merge of the Vulkan port, the GLES2 backend is disabled, and it needs to be ported to the new rendering architecture, which will take some time. Once it's ported, you can indeed use it as the only supported backend on Haiku if there's no Vulkan support.

In the meantime, I would suggest that you focus on getting things working on the 3.2 branch, where there are working GLES2 and GLES3 backends. Relevant platform fixes can then be forward ported to master.

CodeforEvolution commented 4 years ago

That’s good to hear! I’ll rebase my patches for now on 3.2.

In addition, to provide a clean experience to a person wanting to build Godot for Haiku (in other words, typing in “scons” is enough to build Godot for Haiku).

UPDATE: More recently, I was able to upstream some Haiku related patches for miniupnp, @akien-mga I was wondering how I’d be able to help sync your version of miniupnp with the upstream version.

CodeforEvolution commented 4 years ago

Hello! I'm sorry that this update has taken a while, though I have been working on and off on this fixup for the Haiku operating system. I have been implementing lots of new functionality related to the OS class, touching up some Input related handling, and reworking the OpenGL context system.

Here's what needs to be done still:

What I believe could be done for later:

@akien-mga, if there is anything else I should consider implementing, please let me know! :)

My current work is available at https://github.com/CodeforEvolution/godot/tree/haikuFixup3.2. Have a good day!

CodeforEvolution commented 4 years ago

Hello again!

I just wanted to give a progress report for my Haiku efforts. Sadly, this is more of a call for help than a report.

For quite some time, I've been able to get Godot to the splash screen, and then Godot freezes up, and nothing else happens...

I got a bunch of information posted to stdio (with some of my own prints too): Main: Initialize CORE Main: Initialize Globals Main: Parse CMDLine Godot Engine v3.2.2.beta.custom_build.acc9ac380 - https://godotengine.org WARNING: ContextGL_Haiku: Construct GL context At: platform/haiku/context_gl_haiku.cpp:36. GalliumContext: CreateScreen: Using llvmpipe (LLVM 7.0, 128 bits) driver. WARNING: initialize: Start up GL context At: platform/haiku/context_gl_haiku.cpp:51. WARNING: set_use_vsync: Changed vertical sync mode for GL context At: platform/haiku/context_gl_haiku.cpp:90. Using GLES2 video driver OpenGL ES 2.0 Renderer: Gallium 0.4 on llvmpipe (LLVM 7.0, 128 bits) OpenGL ES 2.0 Batching: ON OPTIONS max_join_item_commands 16 colored_vertex_format_threshold 0.25 batch_buffer_size 16384 light_scissor_area_threshold 1 item_reordering_lookahead 4 light_max_join_items 32 single_rect_fallback False debug_flash False diagnose_frame False

Main: Setup Logo Main: Load Remaps Main: Create bootsplash Main: ClearColor Main: Image WARNING: swap_buffers: Swap Buffers for GL context At: platform/haiku/context_gl_haiku.cpp:72. Main: DCC Main: END Main: Load Remaps Main: Load Scene Types Main: Load Modules, Physics, Drivers, Scripts Main: Load Translations CORE API HASH: 4848997042847609783 EDITOR API HASH: 10878072942132320958 Main: Done Loading resource: /boot/home/config/settings/godot/editor_settings-3.tres EditorSettings: Load OK! EditorSettings: Save OK! Loaded builtin certs WARNING: set_main_loop: Setup Main Loop! At: platform/haiku/os_haiku.cpp:207.

But nothing printed seems too useful, does anyone have any idea on what this could be? Any possible debugging strategies that I could try besides step by step debugging?

CodeforEvolution commented 4 years ago

I'm sorry to be a bother, though @akien-mga, any ideas? ^^^^^^^

akien-mga commented 4 years ago

But nothing printed seems too useful, does anyone have any idea on what this could be? Any possible debugging strategies that I could try besides step by step debugging?

Step by step debugging sounds like the best option to debug further here, and see where it's stuck at.

CodeforEvolution commented 4 years ago

Ah, I have found the problem! I wasn’t calling “Main::iteration” anywhere, which is your common “one line fix” sort of problem. :)

akien-mga commented 4 years ago

For the reference, I'm moving the Haiku platform port to a dedicated repo (and thus this issue with it): https://github.com/godotengine/godot-haiku-platform

This removes the maintenance burden of having to propagate any porting changes to platform/haiku, without really being able to test if they compile or work, and it should make it easier to have the Haiku port following its own delayed release schedule to match changes in Godot code.

@CodeforEvolution I'm still very interested in the work you're doing to fix the Haiku port for 3.2. It should now be PR'ed to https://github.com/godotengine/godot-haiku-platform, and once we're happy with the code we can redo the 3.2.x tags to point to the working commit for Haiku. This code could then be used together with the matching Godot code to package an official Haiku port and templates.

CodeforEvolution commented 4 years ago

@akien-mga I understand the decision, and thank you for hosting this repository! (I actually had to recently rebase the Haiku code due to formatting changes made across the engine code, etc) Otherwise, I'm getting pretty close to having a good, working product, and should have a pull request for 3.2 (hopefully) soon! At this point, I'm trying to improve the engine's performance on Haiku.

CodeforEvolution commented 4 years ago

Good afternoon @akien-mga! I apologize that I have been inactive for quite some time, though I feel I just needed a bit of a break before continuing. The only problem is that I realized my patches not only cover stuff in the "platform/haiku" folder, but also other buildsystem files, files to do with the OS_Unix class, etc. Should I try to separate these changes into separate commits and create a pull request over at the main Godot repository for everything that does not apply to the "platform/haiku" folder? Or is there something else I should try?

akien-mga commented 4 years ago

If that's the changes from https://github.com/godotengine/godot/compare/3.2...CodeforEvolution:haikuFixup3.2, I guess that's fine, we can get them merged one way or another in the main Godot repository.

Some of them might be avoidable, but we can discuss them directly in the relevant godotengine/godot pull request(s).

CodeforEvolution commented 4 years ago

That sounds good! I'll make sure to explain the reasoning behind some changes in more detail (Haiku is a whole different beast after all), and of course, I'll also clean up my mess of commits. (I have a lot of squashing to do!)

In other news from the Haiku community: One of the Haiku community members added syntax highlighting for GDScript to one of our native coding editors: https://github.com/KapiX/Koder/pull/125 In addition, this community member is also currently designing a Haiku-like vector icon for Godot. (We don't use SVGs or PNGs for our icons. Instead, we have a special "Haiku Vector Icon Format": https://en.wikipedia.org/wiki/Haiku_Vector_Icon_Format).

CodeforEvolution commented 4 years ago

Good day @akien-mga! I have one other question as I wrap things up. With this pull request, I have implemented lots of new platform specific features to the Haiku backend. However, I was wondering if, besides the simple command line tests, if there was a test suite for testing the functionality of “operating system specific classes” such as the OS , AudioDriver, and MidiDriver classes. Or, should I just try to search around the Godot template project library for example projects?

CodeforEvolution commented 4 years ago

Hey @akien-mga. It's the first day of September, and I believe that I won't be able to submit a finalized pull request with the little time that I have... I really appreciate the patience you have given to me and the Haiku community, and I thank you for that! I don't believe this is the end of the road however. I believe someone else from the Haiku community could pickup my code and put the finishing touches on it. I may even comeback one day to assist, though I can't predict anything.

For those interested, my code base is currently based upon a few commits after the 3.2.2 release and is functional, though slow and a bit buggy. There are currently performance problems (even with the LLVM rasterizer from MESA, I'm achieving only 11 FPS on average), a few crashes (there's a small crash in the MIDIDriver, and there are other issues with how Haiku handles multi-threading), and some platform specific features aren't handled correctly (window handling specifically).

What I have been able to accomplish is here (all those crazy commits will need to be squashed together by the way): https://github.com/CodeforEvolution/godot/tree/haikuFixup3.2

I apologize to other Haiku community members, I know it isn't too new for someone to pickup a big project, get going, and then suddenly disappear. I will at least try to offer help when someone tags me, though I can't guarantee that I'll have time to answer.

With that, I hope you all have a good evening!

P.S. @Max-Might, any interest?

Anutrix commented 1 year ago

What's the status on this? Any plans for 4.0? Or getting it merged to main repo.