I have a PC with a good CPU but slow GPU (integrated graphics card). I have noticed that some commercial games work much better using their software renderers instead of OpenGL or DirectX. I am making a Java app that will use JOGL/LWJGL to access OpenGL. To enable a software rendering option, should I look at a pure-Java software renderer, or native software-only OpenGL implementations?
You can install Mesa 3D. This OSS project supplies an OpenGL driver for Windows which is based on a software renderer.
Related
In other word, is there any GPU that does not support OpenGL, and instead support other graphic rendering libraries like DirectX, OpenCl.
"GPU support of OpenGL" is not uniquely defined. It takes much more than hardware to make OpenGL work. Notably, OS driver infrastructure, and driver itself.
Therefore, it is possible to have a GPU that is capable of all OpenGL features, but have no OpenGL software implementation (either not exists, not installed etc.). Ex.: because of marketing reasons Microsoft does not support OpenGL on XBox. Same thing with Windows: often there is only basic OpenGL available with default Windows graphics drivers. It could be easily fixed by installing vendor driver, but most users don't bother.
And other way around, there are GPUs that are not capable of running some or all of the OpenGL features in hardware. Those features could be implemented in software. Ex.: First Android OS versions had software implementations of OpenGL ES in case phone didn't have dedicated GPU or if GPU was not fully capable of OpenGL ES.
Also, there are platforms that do not support OpenGL or DirectX and use their own APIs. Ex.: Sony use custom API for their Playstations.
At this day and age, no, you'll not find a GPU that won't support some version of OpenGL, with the possible exception of some super-specialised chips - but those won't support DirectX either.
Can I relay on my Cocos2d-x based application game to always use OpenGL (and OpenGL ES in mobile platforms)? Since this library allows inline OpenGL calls within it's code I want to know if I can use them without worrying about portability. Is there anything else Cocos2d-x uses for rendering? Like DirectX in Windows Desktop / Phone and maybe a software renderer on devices without graphic cards?
Cocos2d-x uses OpenGL on all platforms.
Keep in mind that on Desktop OSs depending on OS, GPU and drivers the OpenGL renderer may fall back to software rendering for certain features, or not support them at all (drawing glitches or errors).
Moreover OpenGL for desktop computers and OpenGL ES for mobile devices are not fully compatible both in API and supported features.
WebGl is based on OpelGL ES 2.0.
Is it correct to say that Stage3d is also based OpenGL? I mean does it call OpenGL functions? Or ot calles Direct3D when runs on Windows?
If no, could you explain me, what API does Stage3d use for hardware acceleration?
The accepted answer is incorrect unfortunately. Stage 3D uses:
DirectX on Windows systems
OpenGL on OSX systems
OpenGL ES on mobile
Software Renderer when no hardware acceleration is available. (Due to
older hardware or no hardware at all.)
Please see: http://www.slideshare.net/danielfreeman779/adobe-air-stage3d-and-agal
Good day, Stage3D isn't based on anything, it may share similar methodology/terminology. It is another rendering pipeline, this is why Adobe is soo pumped about it.
Have a look at this: http://www.adobe.com/devnet/flashplayer/articles/how-stage3d-works.html
You can skip down to this heading "Comparing the advantages and restrictions of working with Stage3D" to get right down to it.
Also, take a peak at this: http://www.adobe.com/devnet/flashplayer/stage3d.html, excerpt:
The Stage3D APIs in Flash Player and Adobe AIR offer a fully
hardware-accelerated architecture that brings stunning visuals across
desktop browsers and iOS and Android apps enabling advanced 2D and 3D
capabilities. This set of low-level GPU-accelerated APIs provide
developers with the flexibility to leverage GPU hardware acceleration
for significant performance gains in video game development, whether
you’re using cutting-edge 3D game engines or the intuitive, lightning
fast Starling 2D framework that powers Angry Birds.
How I can use OpenGL without mesa? It's terrible - supports max. OpenGL 3.1.
I readed about loading openGL.so with dlopen but where is file to load, and how I can hang that?
Ah, I forgot, language is C++
Just linking to libGL.so is all that is necessary to use the hardware graphics driver.
If you have an NVIDIA or AMD graphics card and you have installed the nvidia or fglrx driver, you will get the maximum OpenGL version supported by your video card.
If you instead are using the open source nouveau, radeon, intel, or other graphics driver, Mesa will take over and you will have only the maximum version of OpenGL supported by Mesa (3.1) and the driver for your hardware. It will automatically use all hardware features it's capable of using.
You do not need to do any fancy dlopen tricks or anything else.
OpenGL is an open API to "standardize" the access to graphics pipeline. The graphics pipeline is supposed to be in a GPU! But this is not necessary! Mesa 3D is a an open-source implementation of the OpenGL specification that also contains a software implementation of a graphics pipeline (yes, software-based) that is supposed to deliver the same result of a regular GPU graphics pipeline (except for the speed, of course!).
You don't have to use MESA if you have GPU! In order to try OpenGL, I suggest you to read some basic tutorial of OpenGL:
http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html
http://www.opengl-tutorial.org/
dlopen() is used to load dynamic libraries. If you use helpers like GLFW or GLUT you don't need to care about those details.
I am running a 3d realtime application (C++) on Virtual Machine (VMWare WinXP SP2). I have 3d acceleration always disabled in VMWare. I have tested it running with both the normal windows GDI OpenGL 1.1 and Mesa 3D (7.8.2). When running on Mesa I have full OpenGL functionality (VertexBufferObjects etc.) but it is much slower than the GDI implementation. I know Mesa is a software rastizer but I guess so is the GDI implementation. So why is Mesa slower? Or should Mesa be faster and its actually a problem in my application?
Mesa supports a fully programmable pipeline and hence the software rasterizer, which at some points uses Just-In-Time compilation and hence is not as aggressively optimized as the Win32 GDI one. This is a tradeoff between features and performance.