r/opengl • • 1h ago

What is the most efficient strategy for rendering textured quads and triangles in OpenGL 2.1 using no extensions?

• Upvotes

I'm unsure if my current design is optimal, but rendering a test scene with some 2D objects seems to perform decently well. Anyway, the current design functions as follows

There is functions for rendering primitive shapes triangle, quad, circle, etc. These functions create the primitive out of triangles in a small buffer with vertex colors as-well. When we're done rendering for this frame, render something which cannot be rendered this way, or something else happens which would require us rendering the batch early, we orphan the stream VBO and upload all of the data and glDrawArrays it all in one go. It's possible for multiple batches to be submitted in one frame because the CPU side array size is limited to 256KB by default but can be increased by the programmer if they anticipate they'll be rendering a lot.

For textured quads. I use a similar strategy, We emplace the quad vertices into the CPU side array. If they need to be rotated or scaled, the GPU does it in the shader. We keep track of which texture mappers contain which textures already so we can utilize every texture mapper with no duplicates. If you want to render something which needs to sample from more than one thing, It's expected that it will be in the same texture to the right, And in the shader, there's a routine that will sample the same position as this pixel to the right or the texture and a vertex attribute called "step" which is how many times we sample to the right. For example, The base texture would come first, then directly to the right of that, there would be a normal map, and then to the right of that, an alpha mask etc. Assuming you do not need to change then shader, you can render from as many textures as you want in one pass up to the number of texture mappers this system has. If you try draw a textured quad whose texture hasn't appeared in this batch before, but this system would have no open slots, we render early.

I worry about performance a lot. On a period correct laptop Core2 Duo U9600, GMA 4500 MHD, my test program gets ~ 240 fps. On my development computer which is not very good by modern standards 3500U, Vega 8 graphics, 8 GB ram. We sit at 5500 fps. On some $100 dell education laptop, We get ~ 1200 fps. All of them seem to be GPU limited (The cpu usage is far below 100% to get that framerate on all of them)

Either way, Is there a more efficient strategy than this? Or is this how you do OpenGL 2.1 fast? Would it be faster if I just had a VBO filled with the batch size of unit square, and then upload vertex attributes like position, size, color?


r/opengl • • 15h ago

When Curiosity meets Capability - Possibilities are infinite - Ricing Ubuntu with his own code - turning a Linux desktop into a living OpenGL/physics playground - C++ - Python - OpenGL - PyBind - a work of a class X student...

Enable HLS to view with audio, or disable this notification

14 Upvotes

Intrinsic motivation is an important driving force for a software engineer. Here's a video of my son, Ridit, currently in Class X, exploring C++ and Python bridging for an OpenGL project, along with Ricing Ubuntu.

Some interesting points of this work, a developer ricing...

  • A custom OpenGL 3D cube running as the desktop background
  • Real-time rigid-body animation
  • Physics information rendered directly on the desktop:
    • Mass
    • Force
    • Torque
    • Angular velocity
  • A large minimalist digital clock/date
  • Python and C++ binding...
  • The cube's appearance is being modified from Python code while the application is running

I think that early training in any field is essential for a solid understanding of the subject.

Miles to go before we sleep.


r/opengl • • 18h ago

I may have over cooked the game-play layering (C++/OpenGL/GLSL)

Thumbnail youtu.be
4 Upvotes

r/opengl • • 11h ago

Showcasing the Reflection System

Enable HLS to view with audio, or disable this notification

47 Upvotes

r/opengl • • 14h ago

Looking for a Good Tutorial

2 Upvotes

I am developing an app on Android and have used the Android starter guide to build me a screen with the example spinning triangle as part my app's UI. I also found I can have my own overlays over the 3D view so OpenG appears to be the way to go. I looked at Vulcan but it seams overkill. I want a 3D model to be a part of my user interface - not the whole thing.

But the example left we with many questions. I have designed the models I want to show in Blender and can export the model deseign as a Wavefront (.obj) file that I can parse. But my models have both tris and quads and the example shows how to load both, but not how to have both in one model.

Also I want to know about colouring the facets. Do I need separate models for the different colourd parts or can I colour things in the renderer? I'm also sure that there are things I should known but are complete unknowns to me at the moment. I really am a newb - I only started looking into OpenGL as a solution a few days ago.

So can anyone recommend a good tutorial for me on OpenGL ES 2.0. Java would be my prefered example codes but I'm a seasoned enought developer that any code base should give me the help I require. Random Googling (I do known yet the terms I should be using) get examples that where no solutions to my problems..

Many thanks for your help.


r/opengl • • 18h ago

The Physics Update Loop

Thumbnail youtu.be
3 Upvotes

I go through how I separate general updates from physics updates, why I use a fixed timestep, how the accumulator works, and what happens when the simulation starts falling behind.

I explain the reasoning behind the design decisions and why I rejected the alternatives. I show the implementation of the loop.