Indiefreaks wrote:
I see a lot of similarities on your implementation approach and mine (we share almost the same objectives).
Since you're in the early development phase, would you consider using and even contributing to the graphics related contract part in my project?
I had a brief look at your code repository, and if both framework share the general objective to provide a higher level API, objectives are still significantly different, to name a few:
- SharpDX.Toolkit.Graphics doesn't target OpenGL API but instead is focusing on giving a full access to all Direct3D11 features without any compromise (including the most advanced one). Some features in DirectX are not always mappable in OpenGL (Computer shaders, separable depth stencil bufers and render target for the swap-chain ...etc.), or are a mess to map (some nifty details like z projection post vertex shader are between 0-1 in DirectX and -1 and 1 in OpenGL, samplers are no longer linked to texture in D3D11 unlike in OpenGL, stuff like that are really annoying to manage cleanly in a Framework).
- SharpDX.Toolkit.Graphics doesn't redefine math types already defined in SharpDX assembly. It is also leveraging on existing Direct3D11 API, so for example, when we instantiate a BlendState in Toolkit, we use the same description that we would use directly with SharpDX.Direct3D11. It means also that all Toolkit types are directly usable with existing SharpDX.Direct3D11 API.
- SharpDX.Toolkit.Graphics is currently only targeting "Graphics" and not input, audio...etc. "Graphics" API is the most complex one to map and the one that has most impact when developing a rendering application, while the others API can be quite localized in an application.
From a coverage point of view, SharpDX.Toolkit is already usable to create all available resources in Direct3D11 with specialized factories and to use them directly with Direct3D11 API. It is also providing methods to transfer data from the gpu to cpu and vice versa.
Also, performance wise, a method like DirectXGraphicsContext.Draw<T> in your framework is really inefficient and not recommended to use, as It is killing the perf to create/dispose a vertex buffer, upload it and draw it on every draw call.
If so, it would be great to actually have your experience and best practices defining the missing classes and methods in ICE...
Unfortunately, I really cannot do more than what I have described in this post. My spare time is very limited and entirely dedicated to support SharpDX, add new features, fix bugs, and respond to message in this forum (and I have a couple of other open source project to maintain, more sporadically, like [url=http://http://nshader.codeplex.com/]NShader[/url]). But you will be able to learn and get lots of information on how to implement a higher level API above SharpDX.Direct3D11 just by looking at the SharpDX.Toolkit.Graphics sourcecode (and periodically at future commits).
Hope this respond to your question.