开发者

opengl dependencies

开发者 https://www.devze.com 2022-12-13 12:32 出处:网络
I am new to opengland using C#,opentkfor development. My Application is very light weight (just 2d graphics) and i am planning to use software rendering when hardware rendering is not available.

I am new to opengl and using C#,opentk for development. My Application is very light weight (just 2d graphics) and i am planning to use software rendering when hardware rendering is not available.

  • How do i make sure software rendering works on all computers ? (when hardware rendering is not available.)
  • Should i distribute Software rendering libraries like Mesa, myself. or it will already available on all (Windows) OS ?
  • in other words, opengl32.dll is always available on all modern windows OS ( > XP SP2 ) or should i distribute that also ?

( My Application is very simple (simple 2d grap开发者_StackOverflowhics) as of now. I selected opengl instead of GDI+/WPF because, i may extend it to 3D in future. )


OpenGL is a system library. You should not distribute it with your application. Especially on Unix/Linux systems, where it should be installed using the distribution's package manager.

Since opengl32.dll is included in Windows, it falls back to Software Rendering automatically if the pixel format you chose in your application isn't hardware accelerated by the graphics driver.


I tried leveraging OpenTk as well, but in itself creates a dependency and - particularly as a newbie - doesn't really do anything but confuse learning OpenGL versus learning someone else's interpretation of the framework.

OpenGL is - as the other answerer suggested - a system library. With this, it's a functions contained in a C DLL which you import through the API.

OpenTK imports these functions for you, that's the only real benefit it adds, but in doing so, many of the types are reinterpreted as are the function calls as per the author of OpenTK.

This creates an additional learning curve - as most of the internet references you're going to find are going to be OpenGL - so not only will you be struggling with understanding OpenGL - which isn't easy - but you're also going to be dealing with OpenTK interpretations of the OpenGL standards.

Now keep in mind that MANY open source projects such as OpenTK start as open source until they get sufficient enough user base, when they convert over to a for profit model. So let's say you learn and become dependent on OpenTK, well if/when they switch to a for profit model and you're tapped on cash, you are SOL (Shit outta luck). Or you have to pay their price.

What I did was - I took the source for API mapping for OpenTK's OpenGL mapping and renamed everything as per my tastes. it's a bit of work, but it's worth the labor and it helped me get to understand OpenGL.

As for distribution. I have absolutely no external dependencies I rely on other than the OpenGL DLL which should already be on the system.

ALL the DLLs you need for OpenGl will ALREADY be preinstalled on any windows OS you're dealing with. I can't speak for other OS flavors, but I suspect this may be the case.

On a final note: OpenGL handles 'toggling between software and hardware rendering' innately. So libraries like MESA and OpenTK add VERY little value at HIGH potential costs.

What are those costs?

1) Redistributable packaging and licensing. They still come with a license and most license are subject to change at any time.

2) Conversion from open source or free distribution to a for profit model.

Invest in yourself. OpenGL documentation is vast and at times confusing, and my advice is to avoid the knee jerk temptation to 'take the easy' path versus the leverage other's models - for one simple reason.

I know you're using this for a 2d application. And even if you're using Orthogonal view, the fact of the matter is you're learning OpenGL with is a patterned with 3d in mind. So give yourself the gift up front of teaching yourself because there really is no 'easy path' to understanding 3d - and thus no real value add to the external dependencies you're leaning towards using.

One thing to keep in mind: Modeling. IF/when you switch to 3d modeling, doing vertex creation through hand coding in opengl is a bitch. I use Blender to create my obj models in and read those into my own c# application which reads in the 3d models and lets me manipulate them from there.

I HAD been using C++, which sure is faster, but once I converted the APIs to c# code and started managing my own memory leveraging the garbage collection model, it became SO much easier than having to learn someone else's library.

Dont use redistributeables. And leverage the code from OpenTK, with modification, but don't include OpenTK as a redistributeable.

That's my advice.

0

精彩评论

暂无评论...
验证码 换一张
取 消