Yosoygames

yosoygames.com.ar · Personal blog · on HN since 2013

Yosoygames is a graphics programmer's blog on Vulkan, OpenGL, Direct3D, rendering techniques, and game engine development.

What HN saysHN commenters link its Vulkan FAQ and Linux display driver post as useful, still relevant explanations, plus a piece on what he dislikes about OpenGL.
18HN people shared it
5linked it in comments
14stories submitted
256story points
1 year agolast shared
2013people per year2026

Most-shared posts

  1. 1
  2. 2
    Vulkan "But Why?" FAQ
    2 people · 2 points · first shared 2023 · discussion on HN
  3. 3
    On Mike Acton’s review of OgreNode.cpp
    2 people · 1 points · first shared 2013 · discussion on HN
  4. 4
    Direct3D11 vs. OpenGL4.4 in 2015, an experience review
    1 people · 8 points · first shared 2015 · discussion on HN
  5. 5
    Is everything ok, Nvidia?
    1 people · 6 points · first shared 2014 · discussion on HN
  6. 6
    Clustered Forward vs. Deferred Shading
    1 people · 3 points · first shared 2020 · discussion on HN
  7. 7
    Millions of Triangles Like in UE5?
    1 people · 3 points · first shared 2020 · discussion on HN
  8. 8
  9. 9
    “We don’t care really how long it takes”
    1 people · 2 points · first shared 2014 · discussion on HN
  10. 10
    Where do I start graphics programming?
    1 people · 2 points · first shared 2017 · discussion on HN
  11. 11
  12. 12
  13. 13
    On VATMOSS
    1 people · 1 points · first shared 2015 · discussion on HN
  14. 14
    What i hate from opengl api
    1 people · first shared 2015
  15. 15
    On floating point determinism
    1 people · first shared 2015

What HN people wrote when they linked it

flohofwoe · 2023-04-06
These are good posts to answer your question I think: - https://www.yosoygames.com.ar/wp/2023/04/vulkan-why-faq/ - https://www.gfxstrand.net/faith/blog/2022/08/descriptors-are-hard/ In places where Vulkan feels unnecessarily restrictive, the reason is mostly one or another mobile GPUs which still have a lot of hardwired expectations about how incoming data should be structured. AFAIK it's mostly not about tiled renderers but about resource binding (e.g. getting data into shaders). Apple's mobile GPUs are pretty much top of the crop and mostly don't suffer from those restrictions (and they also only need to worry about Metal anyway). It's Android land where all the problems lurk.
kirushik · 2015-07-09
Maybe this? http://www.yosoygames.com.ar/wp/2013/09/what-i-hate-from-opengl-api/ OpenGL is a good concept, but it's real-world usage turned it into an ugly mess with a too deep reliance on the competence of the developer.
Jach · 2017-06-22
I wouldn't predict a lot of overlap. On the game dev side, Go offers nothing new, and the forced untuneable gc will be an instant turnoff for the usual reasons. On the Go side, my outside perspective is most of its users seem to be focused on web server backends, trying to justify async everywhere, and/or rewriting slow Python or Perl or Bash scripts and assuming that makes it a systems language. Go users interested in diving in to SDL or OpenGL bindings to make a game shouldn't be discouraged. Lots of games are made in all sorts of high level languages, the heavy lifting is put onto a few native libraries. But if the goal is to make a general engine, I'd question its utility apart from fun/learning. Again there are game engines in high level languages (with dark native-level secrets in any that try to be performant) but they don't seem to get traction. Even an engine in e.g. C++ doesn't necessarily help your performance goals (http://www.yosoygames.com.ar/wp/2013/11/on-mike-actons-review-of-ogren… if your plan is to make it general instead of make it just support whatever sorts of games you're making and planning to make.
TheLoneWolfling · 2015-04-24
If only. Even something as simple as this, where x and y and a are floating-point values: if( a == x/y ) assert( a == x/y ); Is legally allowed to trigger (!). Worse, it's also legally allowed to not trigger. That's right. The above can be legally compiled to always trigger, or never trigger, or even to sometimes trigger (although this is rare in practice). Why? C / C++ allow floats to be stored with excess precision. And they lose that excess precision when spilled to RAM. And GCC isn't deterministic. So x/y may be pulled out as a common subexpression and spilled to a register after the first usage, and it triggers. And then the next time it isn't, and it doesn't. (Effectively, the difference between this: temp = x/y if( a == temp) { spill(temp); assert( a == temp ); } and this: temp = x/y if( a == temp) { assert( a == temp ); } Yes, it'll (generally - though the standard doesn't dictate that it will be!) be deterministic in terms of always with a given example in an single binary triggering or not triggering, but that is irrelevant, as binaries aren't cross-platform and you aren't always loading exactly the same binaries of the dynamic libraries you've linked to. You can (most of the time) work around this by manually setting FPU precision (note that you need to change the precision of both the mantissa and exponent, as otherwise you can still end up with issues). (Except that you, in C++ at least, have to work…

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close