Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use OpenGL 3.3 for the low-end rendering backend #877

Closed
clayjohn opened this issue May 23, 2020 · 146 comments · Fixed by godotengine/godot#54307
Closed

Use OpenGL 3.3 for the low-end rendering backend #877

clayjohn opened this issue May 23, 2020 · 146 comments · Fixed by godotengine/godot#54307
Milestone

Comments

@clayjohn
Copy link
Member

clayjohn commented May 23, 2020

edit: see #877 (comment) below for updates. Make sure to read both this post and the updates before responding.

Describe the project you are working on:
The Godot engine renderer

The Problem

Describe the problem or limitation you are having in your project:

Implementing new 3D features is becoming increasingly difficult as we try to support modern workflows (e.g. HDR, PBR) while maintaining support for OpenGL 2.1/ES 2.0 devices.

We frequently have to sacrifice quality in our high-end rendering backend in order to support consistent workflows between the high-end (Vulkan) and low-end (OpenGL) backends.

Some common issues that arise:

  1. Scenes look very different in GLES3 vs GLES2 because of the use of sRGB vs linear lighting
  2. Many optimizations are not possible in GLES2
  3. We have to rewrite many parts of core rendering code to support GLES2 devices of varying capabilities
  4. Many common post processing and material effects are just not possible in GLES2
  5. Common 3D engine features can't work in GLES2, so we don't support them (e.g. terrain, complex particle systems)
  6. Our rendering defaults have to be compatible with GLES2 and GLES3, leading to poor quality default scenes overall

Compatibility with older Devices

Right now the GLES2 backend serves 2 purposes:

  1. Compatibility with older devices that only support GLES2
  2. Providing a lower-end renderer for lower-end devices and for users who value speed over modern features

When we decided to add the GLES2 backend many devices only supported GLES2. At the time, 40% of Android devices only supported GLES2. Thankfully that is no longer true.

OpenGL 2.1/ ES 2.0 only devices are becoming increasingly rare. On Android over 85% of devices now support GL ES 3.0 or higher. On iOS, every device supports ES 3.0. On Desktop the overwhelming majority of devices support GL 3.3+ (more than 99% support at least GL 3.3 according to the Steam hardware survery)

As a result of the rapid adoption of OpenGL/ES 3.x+ the main purpose served by the GLES2 renderer is as a low-end renderer to maximize speed on high and low-end devices. Many users that are choosing to use GLES2 currently are not doing so because their device doesn't support OpenGL 3.3, they are doing so because their device doesn't like the high-end features that are in the Godot GLES3 renderer.

The Solution

Describe the feature / enhancement and how it helps to overcome the problem or limitation:
I propose dropping GLES2 support for 3D. For 2D, we can still use GLES2, but when 3D features are used, we will require GLES3.

Given that the main purpose behind the OpenGL backend will be supporting low-end devices, we will write the GLES3 renderer to target low-end devices. This means it won't have the feature set that that Godot 3.2 GLES3 renderer has, but it should run even faster than the current GLES2 renderer and look much better.

This change will both increase the perceived speed and quality of the low-end renderer, but it will also make development much smoother.

What this allows us to:

  1. Standardize workflow between high-end (Vulkan) and low end (OpenGL) backends. This means you can expect a more uniform look when switching between backends.
  2. Implement optimizations not present in GLES2 (using instancing, texture arrays, and transform feedback)
  3. Have similar lightmap workflow between backends
  4. Greatly simplify our engine code which makes maintaining the engine easier
  5. Extend more post-processing/materials to the OpenGL backend
  6. Support more high-end features that have become standard in 3D engines (e.g. terrain, physical light units, HDR)

The one issue with this proposal is WebGL. WebGL 2.0 is not supported well yet. We will either have to work out a sort of compatibility mode for WebGL, or wait for more widespread adoption of the WebGL 2.0 API.

If we do drop 3D support for GLES2 in 4.0, it will mean that we will have to work harder to support 3.2.x for a long time. Users will still be able to make and export games using Godot 3.2.x and critical bugfixes will still be merged for 3.2.x. This seems to be a fair trade off. If the GLES2 renderer is ported to Godot 4.0, it won't have access to any of the additional features that come with 4.0.

One of the factors we considered when moving to Vulkan was the poor quality of OpenGL ES 3.0 drivers on mobile. At this point, OpenGL ES 3.0 drivers support seems to have improved substantially. Further, basic features are supported very well in the OpenGL ES 3.0 drivers. By limiting ourselves to a limited feature set (closer to GLES2) then we won't bump up against any of the features that are poorly supported by the drivers and we should be able to avoid any of the major problems we had before.

Describe how your proposal will work, with code, pseudocode, mockups, and/or diagrams:
This section is edited based on comments below

User will be able to choose between 4 backends:

  1. High-end (Vulkan)
  2. Low-end/mobile (Vulkan)
  3. GLES3 (more limited than current GLES3 backend, similar feature set to current GLES2 backend. Aims for maximum compatibility)
  4. GLES2 (2D only to start, may support very basic 3D eventually)

If this enhancement will not be used often, can it be worked around with a few lines of script?:
No.

Is there a reason why this should be core and not an add-on in the asset library?:
Yes, this has to do with core engine functionality

@DavidHusicka
Copy link

How does adoption of Vulkan looks like on mobile devices? Iirc, the Khornos Group stated that all hardware capable of OpenGL 3 should be capable of Vulkan and it's just question of drivers. If it's the same as OpenGL 3, then porting the OpenGL 3 renderer could be just replaced with Vulkan and there would not be need for OpenGL 3.

I kinda fancy the idea of having OpenGL 2 just for 2D since it's just a compatibility option and is not really good at 3D.

Also, I'd like to notice that there is pretty big community of people using cheap secondhand Thinkpads with Linux. These laptops are capable of only OpenGL 2. This might be just a really little minority of userbase. I have no idea how many people with Thinkpads using Godot are there. If it happens, then in the editor should be icon stating "You device is not supported for rendering 3D" when user with only OpenGL 2 tries to open 3D.

@Rexxilion-ex
Copy link

What about WebGL1? Only the most current devices support WebGL2. Personally I want to make 3D games for very old computers since where I'm from a lot of people have very old computers.

If you drop it I hope you find a way to make WebGL1 work, or make the next Godot 3.2 version LTS.

@vnen
Copy link
Member

vnen commented May 23, 2020

@Rexxilion-ex

What about WebGL1? Only the most current devices support WebGL2. Personally I want to make 3D games for very old computers since where I'm from a lot of people have very old computers.

If you drop it I hope you find a way to make WebGL1 work, or make the next Godot 3.2 version LTS.

This is already noted in the proposal:

The one issue with this proposal is WebGL. WebGL 2.0 is not supported well yet. We will either have to work out a sort of compatibility mode for WebGL, or wait for more widespread adoption of the WebGL 2.0 API.

If we do drop 3D support for GLES2 in 4.0, it will mean that we will have to work harder to support 3.2.x for a long time. Users will still be able to make and export games using Godot 3.2.x and critical bugfixes will still be merged for 3.2.x. This seems to be a fair trade off. If the GLES2 renderer is ported to Godot 4.0, it won't have access to any of the additional features that come with 4.0.

@clayjohn
Copy link
Member Author

@DavidHusicka

How does adoption of Vulkan looks like on mobile devices?

On newer devices it is great! We hope that the Vulkan Mobile renderer will be sufficient for most mobile devices. However, older devices definitely do not support vulkan. And there is a significant amount of mobile devices that don't support it.

Also, I'd like to notice that there is pretty big community of people using cheap secondhand Thinkpads with Linux. These laptops are capable of only OpenGL 2.

If you have more information about this, I'd love to hear it. All the hardware surveys I have found say that more than 99% of desktop computers support OpenGL 3.x+.

If there really is a significant portion of users that only have OpenGL 2.1 only devices, then we would have to consider using GLES2 instead of GLES3.

That being said, if we go this route, we will have to plan on having long term support for Godot 3.2, So those users may be better off just using Godot 3.2 anyway.

@Rexxilion-ex
Copy link

Rexxilion-ex commented May 24, 2020

If you have more information about this, I'd love to hear it. All the hardware surveys I have found say that more than 99% of desktop computers support OpenGL 3.x+.

99? I'm not sure about that. I have a laptop from 2010 and it can't run the GLES3 renderer. Where I live most people have computers from that era without dedicated graphics. That survey probably focused on the US and European countries.

Now I feel like I'm hindering progress xD . I would love to keep using Godot but if you feel it's going to be too hard to support GLES2 then drop it.

@DavidHusicka
Copy link

Now I feel like I'm hindering progress xD . I would love to keep using Godot but if you feel it's going to be too hard to support GLES2 then drop it.

According to the post above, planned to drop is just 3D for GLES2. You can keep using Godot even after this changes but only for 2D.

If you have any more information

Here's link to the Thinkpad community on Reddit. I have no idea how many people with ThinkPads use Godot but this community engage in OSS quite a lot. I've seen many people from this community online.

@DriNeo
Copy link

DriNeo commented May 24, 2020

One of the factors we considered when moving to Vulkan was the poor quality of OpenGL ES 3.0 drivers on mobile. At this point, OpenGL ES 3.0 drivers support seems to have improved substantially.

This is an important topic. The GLES3 situation was terrible at the Godot 3.0 release time. Even if a mobile device officially support GLES3 there was no guarantee that Godot can be launched.. Please be sure most devices really support GLES3 reliably.

@clayjohn
Copy link
Member Author

clayjohn commented May 24, 2020

@Rexxilion-ex

99? I'm not sure about that. I have a laptop from 2010 and it can't run the GLES3 renderer. Where I live most people have computers from that era without dedicated graphics. That survey probably focused on the US and European countries.

The survey is from the Steam hardware survey (linked above), the second and third most prominent locations were Russia and China. The survey is a bit biased towards people who play video games, but for our purposes that is a good thing.

I have a laptop from 2010 and it can't run the GLES3 renderer.

Is the issue that you can't run the GLES3 renderer, or that your computer doesn't support OpenGL 3.3? I would be surprised if your computer didn't support OpenGL 3.x (released in 2008). If you read the above proposal you would see the importance of distinguishing between hardware API support and support of low-end devices. Just because your computer is too low-end to support the Godot GLES3 renderer, doesn't mean that it isn't capable of running OpenGL 3.x. The intention behind this proposal is that we would write a GLES3 renderer much the same as the current GLES2 renderer, so that it would be fast enough to run on any device that supports OpenGL 3.x.

@Zireael07
Copy link

Iirc, the Khornos Group stated that all hardware capable of OpenGL 3 should be capable of Vulkan and it's just question of drivers.

I wouldn't be so sure it's actually as nice as described, given the hash some manufactures (cough Adreno cough) made of OpenGL 3 support on mobile.

@Janders1800
Copy link

Janders1800 commented May 24, 2020

Drop GLES2, I don't want Godot to turn into another openGL (In the meaning that for shake of compatibility they suffered in new features and slowly turned into a bloody mess, ergo Vulkan was born)

@reduz
Copy link
Member

reduz commented May 24, 2020

  1. We are not going to drop GLES2, it's not a problem to port it and maintain it.
  2. One alternative could be to eventually support only very basic 3D in GLES2 (objects, lights, shadows, etc) and improve support over time, though at low priority. 2D is easier to support because API did not change much since Godot 3.x.

@Darkinggq
Copy link

why not OpenGL 4.6 last? I have a PC old 2010 Godot 3.X used GLES 3.0 TPS demo lags very much and the other engine is UE4/Unity rendering OGL 4.6 everything works fine no lags

my old video card NVIDIA GeForce GTS 450
image

GLES 3.0 -> OpenGL 3.3 very sad

@Zireael07
Copy link

"Low-end rendering". OpenGL 4 is DEFINITELY NOT low-end!

@Darkinggq
Copy link

Darkinggq commented May 24, 2020

Mobile support GLES version
image

Vulkan only support Android 9.X Pie and higher

@lawnjelly
Copy link
Member

2. One alternative could be to eventually support only very basic 3D in GLES2 (objects, lights, shadows, etc) and improve support over time, though at low priority. 2D is easier to support because API did not change much since Godot 3.x

Just to mention that as supporting older hardware is much more my interest than I suspect @clayjohn or @reduz 😁, I'd be prepared to get this working (with some minimal support from the IDE regarding materials). 👍

@arusenpai
Copy link

"Low-end rendering". OpenGL 4 is DEFINITELY NOT low-end!

To me, GL 3.0 is the optimal "low-end" spot for years to come.

@Darkinggq
Copy link

Darkinggq commented May 24, 2020

need GLES 3.X for mobile 3D, GLES 2 is suitable for 2D games

@Galomortal47
Copy link

no please now, i use GLES 2 daily for mobile games and low end pc games, it works well on browsers which GLES3 doesn't, GLES 3 is useless because it neither has the backward compatibility or light weight of GLES 2 and neither the high end graphical fidelity of VULKAN

@DavidHusicka
Copy link

Vulkan only support Android 9.X Pie and higher

Not true, Vulkan 1.1 is Android 9 and higher and Vulkan 1.0 is Android 6 and higher iirc

@Galomortal47
Copy link

Now I feel like I'm hindering progress xD . I would love to keep using Godot but if you feel it's going to be too hard to support GLES2 then drop it.

According to the post above, planned to drop is just 3D for GLES2. You can keep using Godot even after this changes but only for 2D.

If you have any more information

Here's link to the Thinkpad community on Reddit. I have no idea how many people with ThinkPads use Godot but this community engage in OSS quite a lot. I've seen many people from this community online.

i still use 3D features of GLES 2, to make 2.5 D game

@Rexxilion-ex
Copy link

Is the issue that you can't run the GLES3 renderer, or that your computer doesn't support OpenGL 3.3? I would be surprised if your computer didn't support OpenGL 3.x (released in 2008). If you read the above proposal you would see the importance of distinguishing between hardware API support and support of low-end devices. Just because your computer is too low-end to support the Godot GLES3 renderer, doesn't mean that it isn't capable of running OpenGL 3.x. The intention behind this proposal is that we would write a GLES3 renderer much the same as the current GLES2 renderer, so that it would be fast enough to run on any device that supports OpenGL 3.x.

It has an Intel GMA HD (form an intel i5-520M), it supports DirectX 10 and OpenGL 2.1. There are a lot of 2010 laptops without dedicated graphics, so none of them can run GLES3 Godot games.

@Galomortal47
Copy link

there are many student computers out there in universities and courses, where the computers are old dual core celerons who only support gles 2, if godot drops support for gles 2 i won't be able to teach about godot on those places anymore (i had made lecture about introduction to godot before), and would have to go back to construct or multimedia fusion

@dsnopek
Copy link

dsnopek commented May 24, 2020

I think Godot 4 having wide support for HTML5 should be a high priority. My biggest challenge is always getting people to play my stupid little games so I can get feedback and grow as a game designer. My solution to that is that I mostly target HTML5, because folks are way more inclined to follow a link and play, than to download a build.

In my experience, GLES3 only seems to work on Chrome, but GLES2 works on almost every browser. I'm fine with my games having lower quality graphics, if we just say "OK, GLES2 is supported, but it looks pretty bad." But I'm not OK with saying "GLES2 is for 2D only" because I like to make little 3D games too!

Of course, we can hope that browser support for GLES3 / WebGL 2 will improve over time, but I can't imagine it getting dramatically better on the current timeline for Godot 4...

@clayjohn
Copy link
Member Author

Update

I have updated the proposal to reflect @reduz's comment and to clarify that GLES2 is not going to be dropped. GLES2 will be 2D-only to start. Instead of automatically switching between a GLES2 and GLES3 context, I have updated the post to reflect that they will be two distinct backends, with GLES2 only supporting 2D to start.

Further Questions

I'm hearing a lot of support for maintaining a GLES2 backend. What I would appreciate more clarity on is whether users who are using GLES2 to target HTML and ultra-low-end platforms are shipping 3D games?

@Schroedi
Copy link

What I would appreciate more clarity on is whether users who are using GLES2 to target HTML and ultra-low-end platforms are shipping 3D games?

Especially for game jams, HTML is crucial. Not many people want to download a game to rate it. Our team uses Godot to build 3D HTML games, particularly because it's fast HTML export. The turnaround speed is a significant advantage over other game engines I worked with (Unity and Unreal).

@dsnopek
Copy link

dsnopek commented May 24, 2020

What I would appreciate more clarity on is whether users who are using GLES2 to target HTML and ultra-low-end platforms are shipping 3D games?

Maybe not "shipping" 3D games, but definitely creating and sharing and collaborating on 3D games targeting HTML5!

@phantomdesvin
Copy link

Go for it. GLES 3 is going to be supported by almost every device, and also that minority that want to play a game on an old device is going to look for a 2D game most of the time, that will be supported on GLES 2. When I had an old movile I wasn't looking for the next 3D battle royale on the playstore to be able to play it at 2 frames per second.
Also honestly I trust you guys more than myself.

@vagrantG
Copy link

I'd lean over the option of an all around but simplified GLES 2 support because a mixed solution (GL 3.x for something, GLES 2 for the rest) not only is a desktop only solution (doesn't export to WebGL if you do 3D, no support 3D for old mobile devices) but seems quite more work than thinking about a system that disable features from the rendering device used. Plus not sure about how buggy is GL 3.x on older integrated GPUs and if it's like GLES 3 that seems to work slower compared to GLES 2 on some hardware.

Still i don't know how good is supporting something that is a bit out of place in a newer design of the renderer, dodging/downgrading many features (from a programming standpoint inside the engine to the game developer one that will need to use an editor with many things disabled, performance issues and things to consider to make it work like lighting that isn't as intented, etc). Maybe focusing on GLES3 and Vulkan as the only options for 4.x and make users use the 3.x engine if the hardware is too old would make more sense.

Not to exclude people with old hardware you could go for a full GL3.x renderer so that they can work "on par" feature wise and then export to WebGL 2, GLES 3 on mobile, etc. No more GLES 2 or WebGL but a least they can work on things with the lastest version of the engine. But if with GL3.x you still need to cripple too many things i don't think it does make much sense to do it.

Another idea is having an unofficial GLES 2 renderer and make it so that it can be an external library to load instead of having to build the entire engine to use it. The community that is interested in continuing that support could contribute, implementing only the features that they want to use without the editor/engine having to cripple itself officially to mantain back compatibility with default values, etc. Maybe only a basic filtering of unsupported things commanded by the renderer could be done officially or default values read from the renderer classes?

@ghost
Copy link

ghost commented May 25, 2020

99? I'm not sure about that. I have a laptop from 2010 and it can't run the GLES3 renderer. Where I live most people have computers from that era without dedicated graphics. That survey probably focused on the US and European countries.

I would echo this sentiment.

These surveys are not of any reassurance, when one sends their game to a friend, and they tell you it doesn't run. And the reason ends up being because their laptop or older machine doesn't support X version of OpenGL or even that they're on a 32-bit system.

I also recall not being able to run any of the Godot web games that came out of the 3.0 era, because of web gl2 complaints on my machines. Still happens occasionally.

@Daniel-da-Silva
Copy link

Daniel-da-Silva commented Feb 22, 2021

I just saw this post and I'm really late to the party but I want to second @Rexxilion-ex point - I personally work on an older ThinkPad X220 with Linux installed - I have a better computer, so I won't be completely cut-off but it would change my workflow completely. But sure enough there are other people who don't have the luxury of a modern PC.

Because @clayjohn asked for an specific example: I'm working on a commercial 3D game at the moment (classic dungeon crawler) and GLES 3.0 was running a lot worse on my ThinkPad even though GLES 3.0 worked (the CPU is capable of OpenGL 3.0 and this seemed to be enough even if 3.3 is required) so I switched to GLES 2.0. I'm specifically targeting also older devices, Linux and Windows to be exact.

When I started working on the 3D game I was amazed how well Godot handled my game (when I don't go crazy on the lights).

The Steam survey is a bit misleading since I suspect that most people who are on really low end devices download the version from the website because Steam eats a lot of resources on a low-end device.

I'm not an expert by any means and I could be definitely really wrong about how this stuff works but:
Why not dropping GLES 3.0? So you have a system for real low end and for high-end Vulkan. With the proposal at the moment it seems: GLES2.0 for some stuff, GLES3.0 for the rest + Vulkan also for the rest.

With dropping GLES 3.0 all together and accepting the limitations of GLES 2.0 this would likely reduce the workload to:

  • Supporting GLES 2.0 for old devices and web
  • Supporting Vulkan for everything shiny and cool

But as I stated maybe I'm getting something completely wrong.


Since the 3.2.x branch will likely be supported for a long time as with 2.1.x, I don't have much fear at least for the current project but I would love to see it maintained in the future even without newer features. And when I read correctly it seems that GLES 2.0 won't be dropped and get features slowly and eventually 3D, so I'm happy (even though I would love to see 3D sooner but I dunno what eventually means). I personally don't need many of the features but I can only speak for my projects (The most advanced thing are some world environment sliders and lights).

Thanks for your work guys.

@clayjohn
Copy link
Member Author

@Daniel-da-Silva Thanks for sharing your thoughts!

I'm not going to provide a lengthy response (as I think I have said all I need to say above!), but I would like to point out a few important things that jumped out at me from your comment.

GLES2 is not synonymous with "low-end"

What I mean by that is that many users are in the same boat as you. They have an older device that technically supports OpenGL 3.3 but the Godot GLES3 renderer seems to run poorly or have many graphical glitches, so they choose GLES2. These people, like yourself, are choosing GLES2 because it is a backend designed for low end devices. It actually doesn't matter if that backend runs on OpenGL 1.1, 2.1, or 3.3, they just need something targeting low end devices. Our unfortunate naming of our backends (GLES2 and GLES3) has made people think that OpenGL 2.1 is a superior API for all low end devices, but in reality, it is two distinct designs.

In reality, there are very few devices that only support OpenGL 2.1 while there are many devices that only support GLES2.

In theory, our proposed OpenGL 3.3 low-end renderer for 4.0 should support nearly every device that broadcasts OpenGL 3.3 support as well as our current GLES2 renderer does.

Using OpenGL 3.3 allows us modernize our renderer (why we prefer OpenGL 3.3 to OpenGL 2.1)

Currently there are a lot of weird gotcha's when switching between GLES2 and GLES3. Lights look different between the two backends, GPUParticles aren't supported on GLES2, no HDR in GLES2 so no tonemapping, there are many more subtle issues with skeleton animations and blendshapes that catch users by surprise.

While we tell users that they can just switch between the two backends as they please, the reality is that switching to GLES2 (in 3D) comes with a bunch of hidden pitfalls. Using OpenGL 3.3 gives us a minimal feature set to write a modern renderer supporting modern features that targets low-end devices. This allows us to unify basic behaviour between the two renderers without sacrificing support for low-end devices.

With dropping GLES 3.0 all together and accepting the limitations of GLES 2.0 this would likely reduce the workload to:

  • Supporting GLES 2.0 for old devices and web
  • Supporting Vulkan for everything shiny and cool

It isn't this simple. Supporting OpenGL 2.1 forces us to hold the Vulkan backend back. Godot has only 1 renderer, but it has 2 rendering backends. In 3.x, the renderer is limited by a need to support OpenGL 2.1. In other words, performance and available features in the GLES3 backend are reduced so that the GLES2 backend can exist. If we choose to keep an OpenGL 2.1 backend for 4.0, the Vulkan renderer will be similarly limited and won't achieve close to the performance goals we have planned.

@alexfreyre
Copy link

alexfreyre commented Feb 22, 2021

While I need GLES2 for 2D/3D to target SBC that only supports that API, given the circumstances described and discussed here, it's best to keep using 3.2.x for this kind of purpose.

if there was a possibility to encapsulate GLES2 and run it as a module it is actually a great solution if it were possible just keep it as it is now without any further development.

On the other hand, @lawnjelly wants to port GLES2 to 4.0 in an unofficial branch, so that everyone can compile on their own. Although he does not know if he will do it soon or when.

As @clayjohn says, we must understand and see how a GLES3 made for low-end devices will be as effective and fast as GLES2 or more.

@Calinou
Copy link
Member

Calinou commented Feb 22, 2021

The Steam survey is a bit misleading since I suspect that most people who are on really low end devices download the version from the website because Steam eats a lot of resources on a low-end device.

The Steam survey isn't specific to any game or application – it's an average of all people using Steam. That said, keep in mind it tends to be skewed towards the higher end because of all the people using Steam to play AAA games exclusively (or almost). When making an indie game, you often have to aim for lower-end machines to broaden your audience.

@Daniel-da-Silva
Copy link

Daniel-da-Silva commented Feb 22, 2021

Uh, I didn't expect so many answers! Thanks!

@clayjohn Okay, I'm confused now, that sounds dropping GLES2.0 is now official? I'm just confused because of

GLES2 (2D only to start, may support very basic 3D eventually)

and I didn't find something else.
But thanks to your explanation I'm more sold on the idea. The GLES 3.0 implementation in Godot just felt a lot more sluggish but since you can have more time to improve it and plan for the low-end, I'm very hopeful.
I tried to use a prerelease version Godot 4.0 but couldn't start it and got an error I was lacking Vulkan capabilities - isn't it implemented yet or did I do something wrong?

Even if Godot 4.0 won't work for any reason I can still use the 3.2.x branch for a long time because I'm not interested in mobile and only support Windows and Linux and it seems that I'm able to work on these platforms for a long time even if support was dropped tomorrow (and it isn't obviously). Thank you for explaining and your time!

@alexfreyre Yeah, I understand better now - I'm interested how SBC and Web will be affected but it isn't a problem for me personally. Thanks.

@Calinou Hey, I know that - but I wasn't explaining good what I meant. I personally use Steam on my developer machine only to test my own game sometimes so I think I'm registered with my other PC that I use for gaming sometimes.
I just think that people with these weak specs won't game often or if they game then more likely outside of Steam and don't have Steam altogether - playing NetHack, Battle For Wesnoth etc., maybe uploading only to Itch. But I don't know any official download statistics of Godot. If 99% of your downloads are from Steam for example it sure is a save bet.
Couldn't you put in a Hardware survey prompt in the engine that is voluntary or another form of survey? Would maybe be useful for implementing features or prioritizing. But that's just an idea, I dunno how feasible that is.

A big thanks to all of you taking the time to explain that stuff to me even if the thread is months dead!

@Calinou
Copy link
Member

Calinou commented Feb 23, 2021

I tried to use a prerelease version Godot 4.0 but couldn't start it and got an error I was lacking Vulkan capabilities - isn't it implemented yet or did I do something wrong?

The OpenGL renderer is still a few months away from being implemented in the master branch.

Couldn't you put in a Hardware survey prompt in the engine that is voluntary or another form of survey? Would maybe be useful for implementing features or prioritizing. But that's just an idea, I dunno how feasible that is.

In the interest of user privacy, there are no plans to add telemetry to official Godot releases 🙂
The current public statistics (Steam, Android dashboards, ...) are often sufficient in practice anyway.

@Kylogias
Copy link

Kylogias commented Apr 6, 2021

The only problem I see with removing 3D support for GLES 2 is the fact that the docs say that GLES 2 works best on the Oculus Quest 1, meaning GLES 3 wouldn't work as well

@aaronfranke
Copy link
Member

aaronfranke commented Apr 6, 2021

@Kylogias The Oculus Quest 1 and 2 both support GLES3 and Vulkan. It's likely that GLES2 was recommended because in Godot it's a more lightweight renderer, however, the GLES3 backend in Godot 4.0 will be more lightweight than GLES3 in 3.x.

@ca3games
Copy link

ca3games commented Apr 9, 2021

Honestly, I wanna see GLES2 not removed, but evolve as a retro/legacy renderer, something like the "Lubuntu" renderer.
I still see some situations where GLES2 is still valid.

  • Retro homebrew ports of legacy consoles like Ps2, Wii, Original Xbox
  • 2D games that want to run fast
  • Old computers (some people are from poor places or others want to target legacy computers)
  • People making retro games (we need a primitive renderer for true retro 3D instead of a modern rendering solution)

As such, I wanna see GLES2 not removed, but evolved into a new purpose.

EDIT: As someone from south america is still common to find old laptops and computers that only support OpenGL 2.1
I had a computer that coudn't even run OpenGL 2.1 until 4 year ago.
So, yes, there's a lot of people in places outside the first world who have second market computers.

@Calinou Calinou added this to the 4.1 milestone Aug 28, 2021
@Xrayez
Copy link
Contributor

Xrayez commented Sep 5, 2021

The OpenGL renderer is still a few months away from being implemented in the master branch.

I really hope GLES2, GLES3, or both, are implemented sooner than later, this is kind of the major block that prevents me from contributing to Godot 4.0 at this point in time, not necessarily talking as a user here.

@Calinou
Copy link
Member

Calinou commented Sep 5, 2021

I really hope GLES2, GLES3, or both, are implemented sooner than later, this is kind of the major block that prevents me from contributing to Godot 4.0 at this point in time, not necessarily talking as a user here.

I presume software Vulkan implementations will be widespread enough by the time 4.0 is released. They will never be fast enough to run games playably, but they will still allow people without Vulkan-compatible GPUs to contribute to the engine code.

Still, the OpenGL renderer is aimed for a future 4.x release to avoid delaying the Godot 4.0 release by 9+ months. See https://godotengine.org/article/about-godot4-vulkan-gles3-and-gles2.

@Calinou
Copy link
Member

Calinou commented Nov 3, 2021

This was implemented by godotengine/godot#54307, closing. Only basic 2D rendering functionality is present for now. 3D support will likely only be finalized in 4.1. Nonetheless, the decision to use GLES3 as a baseline is now taken, so the proposal is closed.

If you really need GLES2 support, it should be possible to use the first commits from godotengine/godot#53150 as a base in your own engine fork.

@Calinou Calinou closed this as completed Nov 3, 2021
@Calinou Calinou modified the milestones: 4.1, 4.0 Nov 3, 2021
@clayjohn
Copy link
Member Author

clayjohn commented Nov 3, 2021

To add some more information for those involved in this thread. We considered all responses to this thread very carefully. It is quite clear that the community strongly desires a rendering backend that is targeted at older and lower end devices.

Unfortunately, it is also clear that using OpenGL 3.3/ES 3.0 as our targeted API for the low-end renderer will result in some users being unable to upgrade their projects to 4.0. Our hope is that it is very few people and with time OpenGL 3.3/ES 3.0 should be universally supported. At the time of writing, only 8.5% of active Android devices are limited to OpenGL ES 2.0, and as explained in the OP, the number is even lower for desktop hardware. Additionally, it appears that WebGL 2 is now supported by all major browsers (https://caniuse.com/webgl2)

Our hope is that the new OpenGL3 backend will be sufficiently simple that any device advertising support for OpenGL 3.3/ES 3.0 will run it without problem (related to rendering API that is).

@starry-abyss
Copy link

@clayjohn The most interesting part for me is OpenGL support in GPU drivers for Windows, specifically, Intel GPUs (not officially declared, but actual). If there is an easy way to tie OpenGL 3.3 with ANGLE, then it should work as a replacement for OpenGL 2.1 renderer for me.

@Calinou
Copy link
Member

Calinou commented Nov 3, 2021

@clayjohn The most interesting part for me is OpenGL support in GPU drivers for Windows, specifically, Intel GPUs (not officially declared, but actual). If there is an easy way to tie OpenGL 3.3 with ANGLE, then it should work as a replacement for OpenGL 2.1 renderer for me.

See godotengine/godot#44845.

@starry-abyss
Copy link

@Calinou Thanks for the link, it turned out I was already subscribed to the PR.

However, please take a look at this quote:

The reason why this commit is done against the 3.2 branch specifically is because it's unecessary in 4.0, as that already runs on Vulkan natively.

Note that what I'm asking for is apparently ANGLE for Godot 4.0 (the context of this proposal), not 3.x, because in Godot 3.x I still have the OpenGL 2 renderer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.