Originally posted by efikkan
View Post
Announcement
Collapse
No announcement yet.
LLGL Aims To Be Abstraction Layer For OpenGL, Direct3D 11/12 & Vulkan
Collapse
X
-
Originally posted by efikkan View PostThe purpose of a "low level" API dissipates when using a such abstraction. It can never generate efficient code for each API. So the only reason to use a such API is when performance don't matter, but "ease" of portability does.
BTW Vk is not low level, it is just explicit.
- Likes 2
Comment
-
Originally posted by juno View Post
Well, yeah. Because we've been blessed for many years with unbelievable great dx to ogl/win to linux ports, let's better keep this and not try something new.
BTW Vk is not low level, it is just explicit.
2.) Vulkan is low level since it doesn't handle abstraction, memory, allocations, events, etc.etc.etc on its own, but just provide close to hardware instructions constructs that allow developers to implement at will all the previous mentions whereas OpenGL/DX11- do this on its own and you have no better way than accept it and deal with it. in this case Vulkan is akin to C++ while OpenGL/DX11- are akin to JS.
unless you live in a parallel universe i don't see how vulkan is not low level LOL, btw explicit does not imply level, you can have an idiotically long uber explicit language still be as high level as JS is
Comment
-
Originally posted by geearf View PostHow can an API abstract both Vulkan and OGL? I don't get it.
I thought one call in OGL would require many in Vulkan, so how does this work?
void coolDrawFunction{
Opengl/DX_seq_drawop(GLVARS):
Opengl/DX_seq_alloc(GLVARS):
Opengl/DX_seq_shader(GLVARS):
Opengl/DX_seq_render(GLVARS):
Opengl/DX_seq_flip(GLVARS):
return coolData;
}
void CoolDrawFunction{
cool allocation infrastructure();
...... lot of code
thread1(upload);
....... lot of code
thread2(queue);
....... lot of code
thread3(commandbuffers);
..... lot of code
presentationThread(submit queue);
return coolData;
}
Comment
-
Originally posted by jrch2k8 View Post
1.) there are 100 different ways to abstract code, if the performance hit is too big is not because of the abstraction but because it get done horribly wrong, for example EoN but this abstraction is not meant to be performant but fast and cheap to use because they simply don't care enough (low market share) about Linux right now. This is in no way a general example of "abstractions", for example check game engines code where there are abstractions abstracting the abstractions while abstracting the previous 30 layers of abstractions and yet they still are quite efficient.
2.) Vulkan is low level since it doesn't handle abstraction, memory, allocations, events, etc.etc.etc on its own, but just provide close to hardware instructions constructs that allow developers to implement at will all the previous mentions whereas OpenGL/DX11- do this on its own and you have no better way than accept it and deal with it. in this case Vulkan is akin to C++ while OpenGL/DX11- are akin to JS.
unless you live in a parallel universe i don't see how vulkan is not low level LOL, btw explicit does not imply level, you can have an idiotically long uber explicit language still be as high level as JS is
Now regarding this LLGL wrapper. As an AMD dev has put it: "D3D12/Vulkan were not invented to write a legacy API driver on top". You'll have a hard time trying to beat the driver. If you don't need the extra performance stick with D3D11/OpenGL.
- Likes 1
Comment
-
Originally posted by Staffan View PostWhy would you use this? OpenGL is already an abstraction layer for different platforms, with OpenGL and SDL you can easily port your app to Windows, Linux, MacOS and more. Just use OpenGL if you are concerned about portability.
Also, this allows programs to target people with hardware supporting better APIs (Vulkan/DX12) so better performance than openGL, while still providing a working fallback for those that don't (OpenGL/DX11).
And in case you didn't notice, MacOS would be in "those that don't" and "need a working fallback".
It really makes no sense to cripple your software for the sake of portability, if you can avoid it.
Comment
-
Originally posted by jrch2k8 View Post
i guess something like this
void coolDrawFunction{
Opengl/DX_seq_drawop(GLVARS):
Opengl/DX_seq_alloc(GLVARS):
Opengl/DX_seq_shader(GLVARS):
Opengl/DX_seq_render(GLVARS):
Opengl/DX_seq_flip(GLVARS):
return coolData;
}
void CoolDrawFunction{
cool allocation infrastructure();
...... lot of code
thread1(upload);
....... lot of code
thread2(queue);
....... lot of code
thread3(commandbuffers);
..... lot of code
presentationThread(submit queue);
return coolData;
}
By Low Level I'd assume something close to a 1:1 mapping.
Comment
Comment