FBO Exception - Is there a way to disable FBOs in JME?


I have been using JME for a while on my main machine which has a ATI Mobility Radeion HD 4650. All works well when using this card.

However, I tested the same game on my 3 other machines that have average graphics cards. The problem is that these other graphic cards don’t support FBOs, and instead of JME falling back and trying an alternative, it crashes with the following exception (the same exception is thrown on all machines with an average graphics card). I don’t see an option to disable using FBOs in the AppSettings, and the LwjglDisplay code does not have logic to use an alternative (perhaps pBuffer) from what I see.


[java]Exception in thread "LWJGL Renderer Thread" java.lang.IllegalStateException: Function is not supported

at org.lwjgl.BufferChecks.checkFunctionAddress(BufferChecks.java:58)

at org.lwjgl.opengl.EXTFramebufferObject.glGenFramebuffersEXT(EXTFramebufferObject.java:224)

at com.jme3.renderer.lwjgl.LwjglRenderer.updateFrameBuffer(LwjglRenderer.java:1149)

at com.jme3.renderer.lwjgl.LwjglRenderer.setFrameBuffer(LwjglRenderer.java:1216)

at com.jme3.shadow.PssmShadowRenderer.postQueue(PssmShadowRenderer.java:287)

at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:660)

at com.jme3.renderer.RenderManager.render(RenderManager.java:684)

at com.jme3.app.SimpleApplication.update(SimpleApplication.java:216)[/java]

[java]Code (LwjglRenderer.java:1149):

// create FBO



Note that I have used another Java engine that works on all my machines but I prefer JME for its features and design.

I have searched the forums for this issue and have not found anything yet other than update your graphics drivers.

Any suggestions to get around this issue would be much appreciated.


virtudude said:
However, I tested the same game on my 3 other machines that have average graphics cards.

Please define "average".

Most of the OpenGL2 compatible video cards support FBOs, there’s really no difference between Pbuffers and FBOs in terms of hardware used to support them, its just the “fancy” API that sits on top that is different.

FBO was created 6 years ago … so the drivers those guys are using gotta be that old really…


I have the same problem on a friends machine. He just can’t get anything JME3 related running on his Toshiba laptop. He has a slightly acceptable, but a bit old videocard (some ATI from 2005). Driver update is not an option as only toshiba drivers are recognize his cards, but the latest toshiba driver is from 2005. He can play a wide range of hardware exhausting games, so it’s not true that his laptop is not able to run anything.

So my question is the same: can I check for the support of FBO and can I disable the use of it if it’s not supported?

1 Like

6 years old laptops? I’m surprised they still work.

Kidding aside, the vast majority are not for gaming. The minority of that vast majority that can run games are barely able to run run-of-the-mill games. You cannot expect 6 years old laptops to run an almost bleeding-edge engine with thousands of 3D objects, complex scenes and the like.

And honestly, as much as I’d love to have my game run on as many computers as possible, I won’t make it look uglier/slower than I have to unless I have no other choice. That would be like asking Microsoft to make Windows 8 to run on old hardware or Apple do the same. Won’t happen. Get new laptops (with anything better than Intel video chips) or play on a desktop with some gaming power.

It is sad, but that’s the way it works.

I totally understand your point :slight_smile: But he bought it as a gamer laptop, and he can play current topliners without a glitch (not in full detail, but at acceptable settings). And I don’t think that JME is used for only displaying heavy game scenes. What if I would like to write an educational software for simulating physics? JME would be a really easy to use platform for this to do it in an impressive way, so that the students get interested in studies, but schools do not have gamer PCs. :wink: So is it really that hard to skip FBO when it’s not supported?

1 Like

I agreed with @anthyon, we need to use JME with old hardware. Even with OpenGL1 as lwjgl supports it.

As far as I understood Momoko its not about the hardware but the drivers…

@normen: and what if the manufacturer of the hardware does not provide support anymore, but the ATI card has a serial number that is not recognized by the official Catalyst drivers? (as I said in my first post here)

Well then get rid of that antique piece of hardware as fast as you can. JME3 was always geared at shaders and OpenGL2 is really not “gamer pc” level nowadays. Not even the old Intel GMA graphics cards apple was usng for their mac minis some time ago have problems with this.

but as I said in my second post it affects only JME3 because of FBO’s, and my friend can play a wide range of current games with no problem at all (OpenGL and DirectX as well) I could even make a demo before I found JME, using only LWJGL and it worked on his computer. :slight_smile:

No you were talking about educational software and sub-par computers at schools.

To be concrete I said:

anthyon said:
I totally understand your point :) But he bought it as a gamer laptop, and he can play current topliners without a glitch (not in full detail, but at acceptable settings).

But let's stop the argument I see your point and I agree with you. My simple question was, if FBO can be skipped if it's not supported or not? The answer is not, so I just move on and do my own work. :D

I just answered to your plead to make jME3 run on sub-par computers, I have no idea about FBO.

It’s better to ask Momoko.

@normen: that part is okay… :slight_smile: It was just an extreme idea…

  1. Simple tip deactivate any post processor, especially the ppsm in the stacktrace.
  2. Do step 1 for everything throwing such an exeption untill no more exception or nothing to deactivate anymore
  3. ???
  4. Profit.


Thanks everyone for the response to my initial post. I think the point I am trying to make is that there are many applications for virtual technology, not just for high end games. If, for example, I was creating a virtual platform meant to be used within corporate intranets for collaboration between employees, or educational software, of physics simulation software, etc. then it is more important that the software works on a broader set of machines than it is to have the latest features. How do you think a corporate customer would respond if I told them that they need to upgrade 500 of their computers because they don’t have adequate graphics cards? I would rather tell them that they will have a better quality tool if they upgrade, but when they upgrade is ultimately their choice. There is no better way to lose business then to force your customer’s hand into upgrading their machine, or forcing them to bend to your requirements.

I know it is possible to make this work – when I use another java 3D graphics engine (won’t mention here), and a C++/Python engine, it works on all my machines including my Netbook with an Intel 945 Express Chipset. I agree it does not look as nice (i.e. there is some distortion and rough edges without anti-aliasing but it is decent enough to meet the business purpose), but the point is that the customer has the choice when to upgrade their machines and take advantage of a better quality output.

Madjack – the reason I did not list my graphics cards is because I want JME to work on 80+ percent of machines out there, my machines are only a sample. For example, I have a netbook with an Intel 945 Express Chipset that I bought last year, a competing Java 3D engine works, a competing c++ engine works, JME does not because it does not support FBOs. I agree, these machines are not ideal for gaming, but there are a lot of applications for virtual technology, and some customers don’t care about having thousands off objects, or complex scenes.

Momoko_Fan – If there is no difference between pBuffers and FBOs, then do you have any ideas/suggestions how a competing Java engine made their engine work on my netbook with an Intel 945 Express Chipset that I bought last year (as one example)? Having a fallback mechanism would open up JME to many more applications other than high-end gaming alone and would allow JME to work for a broader user base which is a great advantage.

So, with that all said, any suggestions to make this work would be really appreciated – that is, to disable FBOs and get around the exception. I don’t know how the other Java 3D engine did this (they are closed source), but I’m hoping that someone here can shed some light.

Thanks to all for your response.

You are missing the point, jme is designed for mid to high end. Try running any similar engine on the netbook, it will fail (prove me wronge run a ut3 engine on it or a callofduty one). The workign eniges are either low to mid based or they have far more code to allow more alternative techniques, that are used as fallback. Of course everyone here would be happy if you implement something like htat, but I for myself simply do not target such low tech markets with applications.

Also jme is not the best choice for everything, there are cases like the one you mention where alternative low end engines are probably a better choice.

I have the same issues however with better hardware, I’ve brought it up in these posts. If I need to provide more information I am willing to help.