Question about deprecated OpenGL functionality

Started by
7 comments, last by monophonic 8 years, 7 months ago

I am working on a game that I initially just used immediate rendering for, knowing that I'd revisit it and implement vertex/texture coord/color/etc buffers when the time came. So then I was reading in this thread that a lot of OpenGL stuff that I learned way back when (in the 2000's) is deprecated now.

My questions are:

  1. How much harm will I suffer if I use this deprecated stuff? It seems like it still works well enough. Is there any performance hit associated with using it?
  2. I saw this basic tutorial on shaders, and in fact have a attenuated point light shader sitting in a git branch, but it just shows how to color a fragment a solid color. Is there any easy, drop-in shader that I can use to handle the basics that I listed above, until I'm ready to dig deeper into writing my own shaders? (UV mapping, colored vertices, etc).

If there are any other resources I should be looking at, please let me know. It's hard to know how old the tutorials you're looking at are sometimes. There's still stuff out there with ARB functions in it that looks current at first glance...

Advertisement

I am working on a game that I initially just used immediate rendering for, knowing that I'd revisit it and implement vertex/texture coord/color/etc buffers when the time came. So then I was reading in this thread that a lot of OpenGL stuff that I learned way back when (in the 2000's) is deprecated now.

My questions are:

  1. How much harm will I suffer if I use this deprecated stuff? It seems like it still works well enough. Is there any performance hit associated with using it?
  2. I saw this basic tutorial on shaders, and in fact have a attenuated point light shader sitting in a git branch, but it just shows how to color a fragment a solid color. Is there any easy, drop-in shader that I can use to handle the basics that I listed above, until I'm ready to dig deeper into writing my own shaders? (UV mapping, colored vertices, etc).

If there are any other resources I should be looking at, please let me know. It's hard to know how old the tutorials you're looking at are sometimes. There's still stuff out there with ARB functions in it that looks current at first glance...

1. If you are using immediate mode you will get significantly worse performance (especially if you are pushing tons of vertices to the GPU) and a lack of shaders does greatly restrict the flexibility of your renderer.

2. There are tons of pre-written shaders you can download and pretty much just drop-in but if they are basic(the GPU driver should replace fixed function UV mapping and colored vertices with shader equivalents for you anyway) you won't gain much by doing so, for a basic renderer the main performance advantage comes from using VBOs rather than pushing vertex arrays to the GPU once per frame, or worse, pushing a metric crapton of individual vertices to the GPU each frame with glVertex calls.

once you are using VBOs however you will have to use vertex shaders to do more fancy transformation of the vertices (i.e, skeletal animation) as doing that on the CPU will require you to re-upload the mesh each frame (which is fine if your scenes consist of 10-20k vertices but not quite as fine if your scenes contain 30m vertices), if you are modifying your vertex arrays right now (rather than just rotating, translating and scaling them) you will have to convert that code to vertex shaders in order to use VBOs effectively.

fragment shaders are less useful for basic renderers but becomes almost essential once you try to implement more advanced effects (if you use the fixed function you're pretty much limited to stencil operations and blending the results of multiple render passes together in various ways)

edit: it is worth keeping in mind that "significantly worse performance" is still insanely fast, the deprecated stuff is not slower today than it was in the late 90s or early 2000s, its just that GPUs have become several hundred or even a few thousand times faster while PCIe x16 is only around 30 times faster than PCI (4GiB/s vs 133MiB/s) and only 2 times as fast as AGP(2GiB/s for AGP8x) so the amount of data you can send to the GPU each second hasn't gone up much at all.

[size="1"]I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!


How much harm will I suffer if I use this deprecated stuff?

It's actually going to be OK for a PC for a long long while. Biggest problem is you can't port to the more widely-used computers like those running Android or iOS, since they only support GL|ES 2.

Stephen M. Webb
Professional Free Software Developer


How much harm will I suffer if I use this deprecated stuff?

It's actually going to be OK for a PC for a long long while. Biggest problem is you can't port to the more widely-used computers like those running Android or iOS, since they only support GL|ES 2.

They do also support GLES 1.1.

Aether3D Game Engine: https://github.com/bioglaze/aether3d

Blog: http://twiren.kapsi.fi/blog.html

Control

Save yourself the headache and spend a little time getting to learn the newer stuff( and I don't mean the bleeding edge ). It will only help you in the long run, as you will have a new skill set and if done right, a little performance gain also.

Thanks for all of the replies guys. The hard part is locating resources that I know are the "latest." I simply don't have the time in my day to sit down and read an OpenGL reference manual cover to cover (and I doubt anyone does this anyway), so I'm really not sure how to know when something is deprecated and when something is current. If anyone has any suggestions, I'd really appreciate it :)

Also, a bit of background about my project: it's a 2D game that, for the foreseeable future, uses one fairly small texture. My back-of-the-mental-napkin estimates tell me that there's generally 50k-200k vertices on screen in the heavier scenes, which isn't all that much as far as I can tell. I did finish most of my transition to vertex/UV/color arrays, which has given me a very significant performance boost (as I knew it would -- I had written everything in per-quad immediate mode for the sake of getting something working first). So, I'm guessing the next "correct" step would be to replace these arrays with VBOs? Sorry if that's off-base.

A neat source I'm using to look up OpenGL functions is docs.gl. It is a kind of managed collection of manual pages about OpenGL and OpenGLES functions, including filtering by version.

I haven't read this article but the comments say thanks may be worth a look http://www.gamedev.net/page/resources/_/technical/opengl/opengl-33-tutorials-r3754

I haven't read this article but the comments say thanks may be worth a look http://www.gamedev.net/page/resources/_/technical/opengl/opengl-33-tutorials-r3754


Even though I am not the OP... These look great, thanks! I'm gonna bookmark them right now.

This topic is closed to new replies.

Advertisement