← Back to team overview

ubuntu-gaming team mailing list archive

Re: Resources for Open Source game developers

 

On Wed, May 9, 2012 at 4:07 PM, Ronaldo Nascimento <sgtnasty@xxxxxxxxx> wrote:
> Well played sir, yes I was a bit too hasty on the send button.
>
> I am specifically looking for resources to educate open source game
> developers?
> How to get started writing 2D graphics and such using open source
> technologies.

I think you are going about this the wrong way. :)

If you are really just looking for general information *about*
graphics libraries you can just go to their website and read -- you
know this, right? Sites like:
http://qt-project.org/
http://www.gtk.org/

But the real question is, what is it that you want to ***do***? If
your goal is something more than just acquiring knowledge for
knowledge's own sake, then it stands to reason that you have some goal
-- something you want to get out of your effort. Is it a game? Do you
have a particular game in mind? What would the gameplay be like? What
platforms (operating systems) would it run on? What kind of detail
level are you looking for in the graphics -- something simple and
retro, or top of the line? How many other people are you working with?
All of these questions factor in.

The other real question that is equally relevant is, what is your
prior experience with programming and software engineering? If you
have no experience there, then you shouldn't even be thinking about
games at this point, you should first learn programming itself in a
context-neutral sense. Pick up a language such as C++, Java or C#,
master it, and then come back to gaming in a year or three. On the
other hand, if you already have a lot of real programming experience,
then you can start "technology shopping" (the decision-making process
in which you determine what libraries and languages to use in your
development) depending on what your goals are. I asked the
goal-oriented questions in the previous paragraph.

So if you're *not* technology shopping for some particular project,
and just want general information, just google whatever it is you're
interested in. If you *are* technology shopping for a particular
project, then you need to start to think about how to match up your
available resources, your pre-existing experience and your desired end
product to existing libraries. Again, google can be extremely helpful
there, but you need to consider *in context* what the specific
technology will do for you, and what its limitations and benefits are.
For example:

Scenario 1: You are just one developer with no team, with prior
experience in Java, and you want to start writing a state-of-the-art
3D massively multiplayer game in C, depending only on X11 and OpenGL.
The technologies in this scenario do not match well at all with the
resources available, because C, X11 and OpenGL are *extremely*
low-level APIs that are hard to learn and require a large and
experienced team to base a functional application off of them. Also,
you are not leveraging existing open source engines or libraries in
this scenario, which can make your development needlessly complicated.

Scenario 2: You have assembled a small team of 5 full-time developer
contributors, all whom have prior C++ experience. You want to write a
game that will run on any computer whether it has working 3D hardware
or not, so you choose to go with 2D-only APIs such as GTK without
OpenGL. Furthermore, you discover a specific open source SDK for
writing games using the Qt4 API, and your team decides to use that. In
this scenario, the technologies you've chosen match well with your
team's experiences (C++), and you are not choosing a very ambitious
target of a graphics-intensive AAA title, which is a more reasonable
goal for a small team.

I am glossing over a tremendous amount of detail here and haven't even
scratched the surface on issues such as licensing, version control,
deployment, compatibility, portability, marketing, and on and on.

Chances are that, if you are not interested in learning / tackling all
of these issues, then either you are just looking for information to
write a paper for a homework assignment for school, or else you are
just setting up an project's effort for failure. So if you are
undertaking a project (not a homework assignment) and you want to be
successful, you should consider all of these issues at once when
making decisions about which technologies to choose and how to
evaluate them.

And remember, there *is* a choice. In fact, for any particular piece
of functionality, there are dozens of possible ways you could do it,
and dozens of libraries that support something like what you want. If
you were under the impression that there is just one standard way to
do 2D graphics on the free desktop, you need to get that out of your
head ASAP. From memory, I can list the following technologies, all of
which allow some type of general purpose 2D graphics API: Clutter,
GTK, wxWidgets, Qt, Juce, Motif, X11, Swing, SWT, Mono, OpenGL,
OpenCL, SDL, Cairo, FLTK, EFL, Cocoa (Mac), Win32 (Windows), MFC
(Windows), ATL (Windows), WinForms (.NET), *and the list goes on*. I'm
sure I haven't even listed 20% of the possibilities.

If this is overwhelming to you, that's because it *is* overwhelming.
Managing complexity in large-scale software development (or even
medium-scale) is something that not a great many people can really do
well. That's not to say you can't learn, but based on the little
you've written so far, it seems like you are not really there yet.
You'll develop a knack for it over many years, and much of your
experience can come from learning by example during jobs and by
collaborating with others on open source projects. I would suggest
that you start by trying to be an "individual contributor" (just
putting in your own bit of code into a large project, allowing others
to make the big architectural decisions) to either an open source
project or a company project on the job. While you're an individual
contributor, learn as much as you can about the decision-making
processes of those at the top. This is a great way to start.

If you had this type of wisdom coming into the present, your original
question might've been formulated as something like, "How do I swap
buffers in double-buffered mode when manually painting on a widget in
Qt?" -- as you can see, this is a very specific technical question
about a specific chosen technology. *This* is the kind of thing that
mailing lists can help you with. That I'm helping you with a *much*
more general question is, frankly, unusual and will probably not
happen very often if you continue to ask general questions on MLs.

If all of this is new to you, I would start with programming basics,
then move on to contributing to large projects, and then maybe you can
start to inquire about 2D graphics technologies and researching the
pros and cons of each.

And just in case I've totally misread you and you're already a highly
skilled programmer and just looking to see a list of the options
available on Linux, you could've easily found that on google too, but
here you go: http://en.wikipedia.org/wiki/List_of_widget_toolkits
All of the widget toolkits there should be able to do generic "2D
graphics", almost without exception.

HTH,

Sean

> Thanks
>
>
> On Mon, May 7, 2012 at 6:14 PM, Sean McNamara <smcnam@xxxxxxxxx> wrote:
>>
>> Hi,
>>
>> On Mon, May 7, 2012 at 10:32 AM, Ronaldo Nascimento <sgtnasty@xxxxxxxxx>
>> wrote:
>> > the subject says it all
>>
>> Does it? I don't know what it says and I read it several times. Are you:
>>
>> *Inquiring about known resources to educate open source game developers?
>> *Inquiring about known game engines that open source game developers can
>> use?
>> *Looking for people (sometimes called "resources" in a business sense)
>> who can help you with an open source game development effort?
>> *Offering to provide us some resources for open source game developers?
>> *And on and on...
>>
>> We don't have an automated call screening solution here like Toll-Free
>> tech support lines, so if you have a specific topic you'd like to
>> discuss or a particular question you'd like to raise, please feel free
>> to do so and those who are interested will chip in. The good news for
>> you however is that, like Toll-Free phone lines, our advice and
>> assistance is also, usually, free. So don't be shy; tell us what you
>> really want! :)
>>
>> Best Regards,
>>
>> Sean
>>
>> >
>> >
>> > --
>> > Ronaldo Nascimento  =][=
>> >
>> > _______________________________________________
>> > Mailing list: https://launchpad.net/~ubuntu-gaming
>> > Post to     : ubuntu-gaming@xxxxxxxxxxxxxxxxxxx
>> > Unsubscribe : https://launchpad.net/~ubuntu-gaming
>> > More help   : https://help.launchpad.net/ListHelp
>> >
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~ubuntu-gaming
>> Post to     : ubuntu-gaming@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~ubuntu-gaming
>> More help   : https://help.launchpad.net/ListHelp
>
>
>
>
> --
> Ronaldo Nascimento  =][=
>
> _______________________________________________
> Mailing list: https://launchpad.net/~ubuntu-gaming
> Post to     : ubuntu-gaming@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~ubuntu-gaming
> More help   : https://help.launchpad.net/ListHelp
>


References