I am pleased to hear that you decided to move into the Vulkan development.
Creating VirtualSceneGraph may shape graphics development for
many years to come.
It may have great impact on open source projects, because in my opinion
the current state of Vulkan open source development is rather weak.
Few game engines implemented its Vulkan backend ( and I suppose
that none of them uses Vulkan to its full potential ),
there are few small game engines made by hobbyists/students with
very narrow objectives in mind, lots of better or worse demos
showing how some Vulkan features work, plentitude of tutorials showing
how to draw a single triangle and that's all. But there is certainly lack of
universal, feature full industry quality graphics library similar to
OpenSceneGraph for OpenGL.
Eleven years ago I started working as a graphics developer using
OpenSceneGraph everyday in my professional career. I took part
in a few significant industry scale projects and made
few submissions to OpenSceneGraph, with the most important
one beeing the osggpucull example.
With that example I wanted to start a discussion about how to implement
new features from OpenGL, that didn't fit well into OpenSceneGraph
architecture, but it looked like there was no demand for it at the time.
When Vulkan came out I decided to start my own project in which
I try to use many good ideas from software I used for years
and combine it with Vulkan architecture :
https://github.com/pumexx/pumex
My project goals are :
- use multithreading as a first class citizen, so that applications
scale well with growing number of CPU and GPU cores
- create architecture that is as close to the metal as possible, but not closer
- enable rendering to multiple windows, like OpenSceneGraph does
- work on multiple platforms ( currently rendering on Linux and
Windows is implemented )
- use modern C++ features that make programming more robust
and efficient, skip features that are irrevelant
- explore possibilities of creating scene graph that is stored and processed
on GPU side ( this feature is in its early infancy, but when properly
implemented, it may speed up applications a lot )
I spent much time learning, thinking and exploring many dead ends while
implementing my library and I am willing to offer my knowledge to help you
create VulkanSceneGraph. I am convinced that synergy coming
from common work may speed up creation of VirtualSceneGraph a lot.
If you are interested, I may start with describing my library design in
greater detail as a food for thought, because documentation
for pumex library is outdated or missing at the moment.
Also you can reach me through my email address : pawel.ks...@gmail.com
Looking forward to hearing from you
Paweł Księżopolski
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=73944#73944
1. Target C++20: by the end of 2030, when (supposedly) all new
graphics software uses Vulkan, C++20 will be old enough
2. My personal concern is the ability to run VSG on linux, windows,
mac, ios, android, and web browsers, so I volunteer to help in testing
closs-platformness of VSG.
I encourage you to take a look at the sourcecode
of the examples - I made it similar to OSG code.
> If there are any resources that you've found
> really helpful let me know.
Vulkan specification is the most comprehensive source of knowledge about
the API - it's long but it is a must for any developer taking it seriously :
https://www.khronos.org/registry/vulkan/specs/1.1/html/vkspec.html
As for the books I recommend "Vulkan Programming Guide" written
by Graham Sellers. Sometime ago it was even available for free in
certain countries on Google Play bookstore :
http://www.vulkanprogrammingguide.com/
Active forums discussing Vulkan include Khronos forums :
https://forums.khronos.org/forumdisplay.php/114-Vulkan-High-Efficiency-GPU-Graphics-and-Compute
and Vulkan subreddit :
https://www.reddit.com/r/vulkan/
Sascha Willems wrote a good set of Vulkan demos, that show how to
implement certain features :
https://github.com/SaschaWillems/Vulkan
https://www.saschawillems.de/
There's also a curated list of useful links to everything
associated with Vulkan :
https://github.com/vinjn/awesome-vulkan
Meanwhile I will try to write some article or two about my design,
but I see that I don't have to be in a hurry ( which will be good
for article quality ) while you learn Vulkan. I will post a link
to it when I'll finish.
As for the Mac/iOS platform - it was Apple's choice to skip
Vulkan and go only with their Metal API. Maybe things will change
on that platform before VSG becomes mature enough.
Cheers,
Paweł Księżopolski
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=73962#73962
Thanks for the links. I have the book already and already download
some of the resources, some new ones too so very helpful.
Earlier today I downloaded and played a bit with your pumex examples.
Design wise I can probably work out most of it from the implementation
so no need to write any tutorials for my benefit, over the years I've
got quite good at reviewing code and trying to make sense of it. If
I can't easily work out what is going on and why I will ping you for
an explanation :-)
Cheers,
Robert.
I forgot to mention Anvil the AMD vulkan c++ wrapping
https://github.com/GPUOpen-LibrariesAndSDKs/Anvil
Don't know what it worse...
Cheers
------------------------
Twirling twirling twirling toward freedom
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=73968#73968
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=73979#73979
Apple are behaving like complete ***** that don't give a shit about developers.
It's time users stopped putting up with this crap and just dumped
Apple products.
I really couldn't have less respect for Apple's conduct over the
years, it's even worse than Microsoft. There was promise in Apple
many years ago. They got too big and too greedy. Us developers are
just bugs on the wind-shield. For those who want to stay on the Apple
"freeway" expect to get squished.
For me, my focus in open platforms, if users can add support for Apple
and avoid us having to jump through many hoops to do so then feel
free, but please don't expect me to go a long way out of my way to
support a platform that is so abusive towards developers.
Robert.
Very exciting news!
I do not have any strong opinions on the Vulcan parts. But I do have some wishes since this project is starting from scratch:
1. Use modern CMake - this will make the project much easier to use.
2. Minimize external dependencies - Preferably the project should be able to be used without any external dependencies included at all.
3. Try to follow the ISO-cpp guidelines as close as possible - This will ensure a consistent style when used together with other modern c++ programs. This will also help when using static code analysis tools.
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
And maybe this time we will get header files with the .h extension. ;)
Best regards,
Björn
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=73990#73990
Modern CMake and xmake are on the short list.
> 2. Minimize external dependencies - Preferably the project should be able to be used without any external dependencies included at all.
C++11 and Vulkan are the only current planned non optional
dependencies (apart form the build tools :-)
I don't know yet whether we should have loaders within the core
VulkanSceneGraph project or outside in additional
libraries/frameworks, it's the loaders that cause the 3rd party
dependency issues.
> 3. Try to follow the ISO-cpp guidelines as close as possible - This will ensure a consistent style when used together with other modern c++ programs. This will also help when using static code analysis tools.
> https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
Heh... I just so happened that to the list of 3rd party resources
that I'm referencing this morning.
> And maybe this time we will get header files with the .h extension. ;)
Maybe, no decisions made yet, but I'm also not polling for opinions,
the VulkanSceneGraph isn't a design by committee.
My initial code experiments have .hpp but frankly it's ugly as hell as
well as stupid - there's no header plus plus language so I'm rapidly
tiring of .hpp. Code should to be a thing of beauty not some ugly
kludge. .h makes sense as it's a header, .cpp makes sense for source
files as it's C++. However, public headers are placed into include
directories and that's their role, we know they are headers because
that's why we put them there, so the .h should be superfluous for
public headers and the standard C++ headers illustrate this. If 3rd
party tools/editors can't even handle the extension less C++ standard
library headers then they aren't really up to the job.
Cheers,
Robert.
The ISO cpp guidelines recommend using .h for headers and .cpp for source:
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rs-file-suffix
robertosfield wrote:
> However, public headers are placed into include
> directories and that's their role, we know they are headers because
> that's why we put them there, so the .h should be superfluous for
> public headers and the standard C++ headers illustrate this. If 3rd
> party tools/editors can't even handle the extension less C++ standard
> library headers then they aren't really up to the job.
>
As a Visual Studio user I do disagree (since Visual Studio really seems to dislike extensionless headers). But I also recognize that the decision is your prerogative to make as creator.
Regards,
Björn
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=73993#73993
1. Provide an option of single header and source file per each module:
vsg.h/cpp, vsgViewer.h/cpp, vsgUtil.h/cpp, etc.
This would greatly simplify referencing VSG across platforms because
CMake has issues under Android (it's part of Android Studio project,
so CMake does not drive building) and iOS (one can build a library
with CMake to be referenced by Xcode project).
So, simple header/source inclusion still wins distribution battle when
you target desktop, mobile, and web at the same time.
2. Conform to `Best Practices Criteria for Free/Libre and Open Source
Software (FLOSS)`
The rules: https://github.com/coreinfrastructure/best-practices-badge/blob/master/doc/criteria.md
Here's how a conforming project looks like:
https://bestpractices.coreinfrastructure.org/ru/projects/289
So use .h unless you want to maintain consistency with existing
projects... I don't know such as the Standard C++ headers or
OpenSceneGraph headers....
For the OpenSceneGraph, the VulkanSceneGraph I aspire to be a Stardard
C++ library for real-time graphics.
> As a Visual Studio user I do disagree (since Visual Studio really seems to dislike extensionless headers). But I also recognize that the decision is your prerogative to make as creator.
Really the answer is pretty simple, Visual Studio clearly isn't up to
the job... the fact that MS haven't yet fixed this in over two decades
doesn't validate that it's not broken. MS over the years has tried
hard to make C++ a pain in the butt to use under Windows. I can't fix
what MS choose to do, but also have no desire for bugs in 3rd party
tools to dictate decisions on code I personally write, I want code
that aspires to something more than lowest common denominators.
Robert.
In my mind (and I also think the general convention is that) the extensionless headers are reserved for libraries accepted into the STL by the ISO committee. Before that they should stick to .h or .hpp. This is also the process that the libraries which originated in boost use, i.e. they used .hpp while being part of boost and then removed the extension once they were accepted by the ISO committee.
The boost FAQ answers the question like this:
Why do Boost headers have a .hpp suffix rather than .h or none at all?
File extensions communicate the "type" of the file, both to humans and to computer programs. The '.h' extension is used for C header files, and therefore communicates the wrong thing about C++ header files. Using no extension communicates nothing and forces inspection of file contents to determine type. Using '.hpp' unambiguously identifies it as C++ header file, and works well in actual practice.
robertosfield wrote:
> Really the answer is pretty simple, Visual Studio clearly isn't up to the job... the fact that MS haven't yet fixed this in over two decades doesn't validate that it's not broken. MS over the years has tried hard to make C++ a pain in the butt to use under Windows. I can't fix
> what MS choose to do, but also have no desire for bugs in 3rd party tools to dictate decisions on code I personally write, I want code that aspires to something more than lowest common denominators.
Well, Visual Studio is not the only IDE with these types of problems with extensionless headers. Other IDEs and other tools suffer the same problem. So the assumption that extensionless headers are reserved for ISO standardized libraries seems to be persistent outside MS as well.
Also simple file pattern matching in the console is much simpler when the header do have a file suffix.
So in my mind these are reasons enough to stick to headers with some form of standard file extension, at least if beauty and future aspirations are the only counter arguments.
But once again, the decision is up to you. And we Visual studio developers will adapt and overcome, as we always have done. :)
Best regards,
Björn
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=73998#73998
I've heard all these points before, didn't find them convincing in the
early days of the OSG and still don't. Given the same set of facts I
simply have a different opinion on how we should weight them.
Repeating points 100 times won't magically tip the balance, it's just
makes me fed up with tedious and pointless discussion that I never
invited.
I don't wish to dictate to others what they should do with their own code.
When it come to writing my own code it's my own judgement that I use.
It really is that simple.
Robert.
If you are still in sponge mode - I just released new version of my Vulkan renderer, where you can find few articles linked from README.md.
These articles describe some of the important aspects of my renderer architecture, that you may find inspiring, interesting or just simply wrong ;) :
https://github.com/pumexx/pumex
Cheers,
Paweł Księżopolski
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=74482#74482
On Thu, 9 Aug 2018 at 17:59, Paweł Księżopolski
<pawel.ks...@gmail.com> wrote:
> If you are still in sponge mode - I just released new version of my Vulkan renderer, where you can find few articles linked from README.md.
>
> These articles describe some of the important aspects of my renderer architecture, that you may find inspiring, interesting or just simply wrong ;) :
>
> https://github.com/pumexx/pumex
Thanks for the update.
I already have check out of pumex, it is indeed a good reference, one
of the best libs on top of Vulkan I've come across ;-)
Just did an update and build, latest pumex master builds and runs
cleanly on my linux system.
I'm still learning Vulkan, thinking lots, experimenting. So still in
sponge mode. What I have on screen is very primitive, it'll be a
while before I can do anything as impressive as pumex can.
Cheers,
Robert.