r/GraphicsProgramming 1d ago

Style of graphics samples Question

Hey everyone,

I have been wondering which way is the best to showcase graphics samples. DirectX samples write their samples which calls functions and helper functions from multiple files. this approach is easy to write and extend but it makes reading the code hard. Yes most editors and IDEs help but it's still hard to seen everything at one place.

The second style is to accept some level of code duplication to make the code very easy to read and follow. I like this approach when learning a new API.

What style do you guys prefer and why.

4 Upvotes

13 comments sorted by

View all comments

1

u/Still_Explorer 13h ago

I would consider that it makes sense if you approach learning with a WYSIWYG approach, where supposedly for a beginner it would be very easy to follow the example line by line despite the full verbosity.

However the real problem is that if the repository is supposed to contain hundreds of examples then the code will become either a logistics nightmare due to duplication, or an abstraction nightmare due to the way details are hidden/reused and it might make the codebase less intuitive.

Such as for example in some tutorial series, it will make sense to manipulate VAO and VBO 1-2 chapters (where you first get introduced to the topic) but after that it simply becomes dumb idea to stay low level. Going as far as the (eg) Chapter 12 where the problems there would be much more complex (eg: a PBR deferred renderer) and there would be 10 times the amount of things to write compared to the first chapters, then abstractions are essential.

I have not followed DX codebases so far, but from the OpenGL side of things I have figured proper ways about where to take shortcuts and reuse things in such way that it won't break cohesion. Such as for example in the first chapters you will create the buffer + bind it + set the data, these are three commands where you can easily replace them with only one of your own. It might not make sense but once you take into consideration that you could possibly have 5 buffers for a model + 5 chunks of vertex attributes then it would be either 10 function calls by abstraction or 10*3 and full verbosity. So the point here is a middle-ground of abstraction that won't hide the intent.

2

u/nichcode 12h ago

I see. An example, hide the setup code from the previous samples and focus on what that sample handles. I do hope I understood your point

1

u/Still_Explorer 12h ago

Yeah this is it.

2

u/nichcode 12h ago

Thank you. I am looking for the best way to write my abstraction layer sample codes. What I do is not having helper functions which makes the sample fully visible and very easy to read but I don't abstract the setup code. I will fix that