Sign in to follow this  
beebs1

OpenGL OpenGL version?

Recommended Posts

beebs1    398
Hiya,

Coming from Direct3D, I decided to make a simple game a while back in OpenGL. The tutorials I used were (I believe) in OpenGL 2.0, using the fixed-function pipeline... glBegin(), glVertex(), glEnd() etc.

I'd like to remake the game using a more recent and applicable version of OpenGL, so I can put it on my portfolio. I need to support Windows XP onwards and DirectX 9 era graphics cards with GLSL. Could anyone advise me on which version I should be looking at? From the posts I've read on GD, it looks like either 3.x or 4.x?

There's a video of my original game [url="http://www.youtube.com/watch?v=Vs4LUq8QwzQ"]here[/url], which shows what I'm trying to achieve - although I'd like to extend the game with a couple of features and GLSL effects.

Cheers!

Share this post


Link to post
Share on other sites
larspensjo    1561
I think DirectX 9 corresponds to OpenGL 2, the legacy ways of doing things.

DirectX 10 (require Vista?) corresponds to OpenGL 3, but you can run OpenGL 3 on Windows XP.

OpenGL 4 adds some nice features, but it is basically compatible with OpenGL 3.3.

For an up-to-date excellent tutorial, see [url="http://www.arcsynthesis.org/gltut/"]Learning Modern 3D Graphics Programming[/url].

Share this post


Link to post
Share on other sites
beebs1    398
Thanks, that's great - from the wikipedia page it looks like the earliest cards I need to support can handle 3.0.

Appreciate the tutorials too!

Share this post


Link to post
Share on other sites
clb    2147
I recommend ignoring all legacy and deprecated features (OpenGL2 and older). Take OpenGL 3 (or rather, 3.2 Core Profile) as the API to work against, and GLSL 1.50. See this page: [url="http://www.opengl.org/wiki/Core_And_Compatibility_in_Contexts"]http://www.opengl.org/wiki/Core_And_Compatibility_in_Contexts[/url] . Without compatibility features enabled, you can make sure you're not even accidentally using any old functionality.

Share this post


Link to post
Share on other sites
AgentC    2352
Another way of looking at it, if you want to expand to mobile devices (OpenGL ES) later, is to look how OpenGL ES 2.0 maps to desktop OpenGL, and use only those features available in both. It should be a pretty close match to the non-deprecated parts of OpenGL 2.0 / 2.1 (ie. always use GLSL shaders, always use vertex/index buffer objects.)

If you want to support those minimum requirement GPUs even with old drivers, then using an OpenGL 2.0 context may yield better compatibility than OpenGL 3.0.

Share this post


Link to post
Share on other sites
SimonForsman    7642
[quote name='Telios' timestamp='1339321530' post='4947864']
Hiya,

Coming from Direct3D, I decided to make a simple game a while back in OpenGL. The tutorials I used were (I believe) in OpenGL 2.0, using the fixed-function pipeline... glBegin(), glVertex(), glEnd() etc.

I'd like to remake the game using a more recent and applicable version of OpenGL, so I can put it on my portfolio. I need to support Windows XP onwards and DirectX 9 era graphics cards with GLSL. Could anyone advise me on which version I should be looking at? From the posts I've read on GD, it looks like either 3.x or 4.x?

There's a video of my original game [url="http://www.youtube.com/watch?v=Vs4LUq8QwzQ"]here[/url], which shows what I'm trying to achieve - although I'd like to extend the game with a couple of features and GLSL effects.

Cheers!
[/quote]

For the record, glBegin, glVertex etc is the immediate mode from OpenGL 1.0.
in 1.1 you used glDrawArrays instead and in 1.5 you got VBOs. 2.0 added high level shader support.

In general you can write fairly modern OpenGL for DX9 level cards using OpenGL 2.1 (and support is far better than for OpenGL 3.x/4.x), the main problem is that the old junk from 1.0 is still available for you so learning the correct way of doing things can be harder. (most OpenGL tutorials on the net are pure junk)

Share this post


Link to post
Share on other sites
beebs1    398
Thanks, good info. Based on the posts here, I've got a copy of the red book for OpenGL 3. If at all possible I'd like to support OpenGL 2.1 / DX9 generation hardware, at least for this project. Hopefully I can figure out from this book what was deprecated, and ignore those parts.

[quote name='SimonForsman' timestamp='1339335702' post='4947912']
For the record, glBegin, glVertex etc is the immediate mode from OpenGL 1.0.
in 1.1 you used glDrawArrays instead and in 1.5 you got VBOs. 2.0 added high level shader support.

In general you can write fairly modern OpenGL for DX9 level cards using OpenGL 2.1 (and support is far better than for OpenGL 3.x/4.x), the main problem is that the old junk from 1.0 is still available for you so learning the correct way of doing things can be harder. (most OpenGL tutorials on the net are pure junk)
[/quote]

Wow, apparently I was doing it the [i]really[/i] old way! I agree that most tutorials are outdated and not particularly helpful.

I'll have a looksie through the Doom 3 source as well, and see how they use the API.

Cheers! Edited by Telios

Share this post


Link to post
Share on other sites
larspensjo    1561
[quote name='SimonForsman' timestamp='1339335702' post='4947912']
In general you can write fairly modern OpenGL for DX9 level cards using OpenGL 2.1 (and support is far better than for OpenGL 3.x/4.x), the main problem is that the old junk from 1.0 is still available for you so learning the correct way of doing things can be harder. (most OpenGL tutorials on the net are pure junk)
[/quote]

Correct me if I am wrong, but even though much recent functionality is available for OpenGL2.1 cards, you are still stuck with the old version ([color=#000000][font=sans-serif][size=3]GLSL 1.20) [/size][/font][/color]of the shader programming language?

Also, you can't take for granted that recent functionality is available, you have to verify each of them?

Share this post


Link to post
Share on other sites
beebs1    398
Would be useful to know, if anyone can clarify that :)

[quote name='larspensjo' timestamp='1339356825' post='4947998']
Also, you can't take for granted that recent functionality is available, you have to verify each of them?
[/quote]

Can you give any examples of this?

Share this post


Link to post
Share on other sites
SimonForsman    7642
[quote name='larspensjo' timestamp='1339356825' post='4947998']
[quote name='SimonForsman' timestamp='1339335702' post='4947912']
In general you can write fairly modern OpenGL for DX9 level cards using OpenGL 2.1 (and support is far better than for OpenGL 3.x/4.x), the main problem is that the old junk from 1.0 is still available for you so learning the correct way of doing things can be harder. (most OpenGL tutorials on the net are pure junk)
[/quote]

Correct me if I am wrong, but even though much recent functionality is available for OpenGL2.1 cards, you are still stuck with the old version ([color=#000000][font=sans-serif][size=3]GLSL 1.20) [/size][/font][/color]of the shader programming language?

Also, you can't take for granted that recent functionality is available, you have to verify each of them?
[/quote]

This is indeed the case, OpenGL 2.1 only guarantees roughly DX9 level features, everything else (including newer GLSL versions) can be accessed through extensions IF your card/driver supports it.
which is why i said fairly modern, the problem with OpenGL 3.x / 4.x is that support is pretty awful on Intel GPUs and on OS X (Lion is the only version with 3.2 support, the rest only have 2.1 and no OS X version have OpenGL 4 support yet) so in general if you are going cross platform with OpenGL you want to stick with 2.1 + extensions for a bit longer. (Most modern extensions are available in OS X if the hardware supports them) Edited by SimonForsman

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Similar Content

    • By pseudomarvin
      I assumed that if a shader is computationally expensive then the execution is just slower. But running the following GLSL FS instead just crashes
      void main() { float x = 0; float y = 0; int sum = 0; for (float x = 0; x < 10; x += 0.00005) { for (float y = 0; y < 10; y += 0.00005) { sum++; } } fragColor = vec4(1, 1, 1 , 1.0); } with unhandled exception in nvoglv32.dll. Are there any hard limits on the number of steps/time that a shader can take before it is shut down? I was thinking about implementing some time intensive computation in shaders where it would take on the order of seconds to compute a frame, is that possible? Thanks.
    • By Arulbabu Donbosco
      There are studios selling applications which is just copying any 3Dgraphic content and regenerating into another new window. especially for CAVE Virtual reality experience. so that the user opens REvite or CAD or any other 3D applications and opens a model. then when the user selects the rendered window the VR application copies the 3D model information from the OpenGL window. 
      I got the clue that the VR application replaces the windows opengl32.dll file. how this is possible ... how can we copy the 3d content from the current OpenGL window.
      anyone, please help me .. how to go further... to create an application like VR CAVE. 
       
      Thanks
    • By cebugdev
      hi all,

      i am trying to build an OpenGL 2D GUI system, (yeah yeah, i know i should not be re inventing the wheel, but this is for educational and some other purpose only),
      i have built GUI system before using 2D systems such as that of HTML/JS canvas, but in 2D system, i can directly match a mouse coordinates to the actual graphic coordinates with additional computation for screen size/ratio/scale ofcourse.
      now i want to port it to OpenGL, i know that to render a 2D object in OpenGL we specify coordiantes in Clip space or use the orthographic projection, now heres what i need help about.
      1. what is the right way of rendering the GUI? is it thru drawing in clip space or switching to ortho projection?
      2. from screen coordinates (top left is 0,0 nd bottom right is width height), how can i map the mouse coordinates to OpenGL 2D so that mouse events such as button click works? In consideration ofcourse to the current screen/size dimension.
      3. when let say if the screen size/dimension is different, how to handle this? in my previous javascript 2D engine using canvas, i just have my working coordinates and then just perform the bitblk or copying my working canvas to screen canvas and scale the mouse coordinates from there, in OpenGL how to work on a multiple screen sizes (more like an OpenGL ES question).
      lastly, if you guys know any books, resources, links or tutorials that handle or discuss this, i found one with marekknows opengl game engine website but its not free,
      Just let me know. Did not have any luck finding resource in google for writing our own OpenGL GUI framework.
      IF there are no any available online, just let me know, what things do i need to look into for OpenGL and i will study them one by one to make it work.
      thank you, and looking forward to positive replies.
    • By fllwr0491
      I have a few beginner questions about tesselation that I really have no clue.
      The opengl wiki doesn't seem to talk anything about the details.
       
      What is the relationship between TCS layout out and TES layout in?
      How does the tesselator know how control points are organized?
          e.g. If TES input requests triangles, but TCS can output N vertices.
             What happens in this case?
      In this article,
      http://www.informit.com/articles/article.aspx?p=2120983
      the isoline example TCS out=4, but TES in=isoline.
      And gl_TessCoord is only a single one.
      So which ones are the control points?
      How are tesselator building primitives?
    • By Orella
      I've been developing a 2D Engine using SFML + ImGui.
      Here you can see an image
      The editor is rendered using ImGui and the scene window is a sf::RenderTexture where I draw the GameObjects and then is converted to ImGui::Image to render it in the editor.
      Now I need to create a 3D Engine during this year in my Bachelor Degree but using SDL2 + ImGui and I want to recreate what I did with the 2D Engine. 
      I've managed to render the editor like I did in the 2D Engine using this example that comes with ImGui. 
      3D Editor preview
      But I don't know how to create an equivalent of sf::RenderTexture in SDL2, so I can draw the 3D scene there and convert it to ImGui::Image to show it in the editor.
      If you can provide code will be better. And if you want me to provide any specific code tell me.
      Thanks!
  • Popular Now