Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 19 Jul 2011
Offline Last Active Jul 13 2016 05:44 AM

#5115653 Win32 programming, relevant in windows 8?

Posted by Karsten_ on 09 December 2013 - 08:32 AM

Personally, I would therefore definitively consider learning Win32. It is maybe not the prettiest, most straightforward quirk-free API in the World, and some things could definitively be better, but it will usually let you achieve what you want, and it really isn't that bad.

Yeah I know what you mean, whenever I try teaching students DirectX programming, they look terrified by the ugly Win32 function / variable naming when opening a simple window to render onto.

It seems a shame that Microsoft keeps getting distracted by things like .NET and Metro instead of creating a decent Win32 GUI wrapper.

Afterall, with OpenGL / Linux programming, I teach them using Qt which uses the equally ugly libXaw / libX11 underneath and they like it much more.


which after registering followed with "you have permission to develop for 30 days". That was an immediate dealbreaker.

I agree, I won't let anyone have that much power over myself or my company. Those arrogant fsckers. The failure of their platform suggests that we are not alone with our opinions ;)


Another annoying thing about Metro, Microsoft were in a position to really start a positive migration from Intel chips to ARM by providing a proper implementation of Windows and development tools. Instead they decided to lock it down so an ARM chip could only be used like an unpopular iPhone. ARM development really isnt any different to Intel (The C++ code can remain 100% the same in many cases), it is only these completely crippled operating systems that make it such a faff. So when people reject Surface RT because "it runs arm :(", that really annoys me. The real reason why they are not selling is because Microsoft is broken.

#5115615 Win32 programming, relevant in windows 8?

Posted by Karsten_ on 09 December 2013 - 04:57 AM

You surely have a reference for that bollocks?

Nope, but I didn't when VB6 was going down the pan either ;)

Just way too much software is working with it so Microsoft won't throw them away any time soon.

Microsoft did with VB6 and a lot more businesses relied on that for internal logic than they do with .NET now. Some of Microsoft's own products also used VB6 whereas .NET has never been embraced in Microsoft's products (other than perhaps plugins).

I am not saying that .NET technology will go anywhere since we have the open-source mono and products like Xamerin but I am very confident that Microsoft will be dropping 1st class support for their .NET implementation. Perhaps not in favour of Metro (since that is not doing so well) but if something "better" comes along...

Contrast this to the native Win32 API which Microsoft can't remove. If they did, Windows wouldn't boot. Even though Windows RT doesn't allow developers to access the full API, it is still there in its entirety since Office needs it and so does the low level underlyings of Metro itself (and everything else).

#5115446 What Language or Languages for Web and Mobile Apps

Posted by Karsten_ on 08 December 2013 - 02:45 PM

The Emscripten project (https://github.com/kripken/emscripten) will allow you to port your C++ code over to Javascript with minimal changes. If you use open technologies such as OpenGL, SDL, OpenAL etc... then this task is almost trivial.

Emscripten is a rapidly maturing project (sponsored and actively developed by Mozilla). You might want to give this a shot (at least until the "desktop" becomes cool again ;)).

#5115443 Win32 programming, relevant in windows 8?

Posted by Karsten_ on 08 December 2013 - 02:39 PM

The Win32 API is going to outlive this Metro gimmick. The standard native windows API has outlived VB6, WPF, XNA, soon .NET and many more. Why should this recent (unsuccessful) locked down tablet platform be any different?

If Microsoft does ever drop Win32 (i.e likely only if they retire the Windows OS and potentially move over to Singularity/Midori), then the open-source Wine project will be more than happy to support all the many thousands of large commercial software that rely on it. Wine is not likely to ever support the locked down crud that is Metro.

#5112808 Viability of Java For Video Games

Posted by Karsten_ on 28 November 2013 - 12:09 PM

Java can be compiled to native machine code with GCJ, so then as long as you use the right libraries it would have the same performance as C++.

I don't think I have ever seen a game written in Java and compiled using GCJ. Probably because GCJ is not very actively developed and still only supports ~Java 1.4.

Either way, since standard Java will very likely need to be using native libraries to create a game (OpenGL, OpenAL, ODE, Bullet, etc..), the speed is very unlikely to be an issue since much of the processing is done by native code (in the .dll or .so) anyway.

#5112569 Where is the source for cout

Posted by Karsten_ on 27 November 2013 - 03:53 PM

It's interesting since AMD doesn't supports their hardware on FreeBSD AFAIK, so they're probably rolling some custom drivers too.

Yep, thats right, though interestingly since we have had no help in the form of binary drivers from AMD, the open-source radeon driver is actually pretty usable for 3D (almost on par with that in Linux). However, since Nvidia provides binary blobs for its hardware, the open-source "nv" is utter shite (nowhere near the usefulness of Linux's Nouveau).


Moral of the story, AMD has had to be cruel to be kind ;)


All I know is that if I was that skilled developer putting all that effort into developing a highly complex driver, it must be soul destroying to know that in ~5 years when the new console comes along, all your effort will be completely lost. I bet they would love to open-source their work and prove to the world that they are one of the rare breed of programmers, smart enough to be able to create something like that!


Edit: Thinking about it. I bet all AMD did was release the specs for their hardware to Sony and they did it all in house. Afterall, AMD's UNIX drivers are extremely low quality (no 2D acceleration for a start) which would be an issue for the PS4.

#5112487 Viability of Java For Video Games

Posted by Karsten_ on 27 November 2013 - 10:52 AM

I have some experience of using Java / OpenGL for Android development. It was fast enough but since the Java garbage collector does not extend to the graphics card buffers, I found it to be really fiddly to manage the memory manually.

C++ has RAII for memory management which works great with vertex buffers, textures etc.. whereas I found the Java code needed to be spammed with try catches. Java was not great here.

All in all, I suggest that unless you know that you have all the Java wrappers required to do your project, Java is fine. If you feel you may need to wrap native libraries, not only will you need to write the native side of the Jni layer in C/C++ anyway but you will be spending time writing bindings rather than games.

I recommend Java shim and the rest in C++ any day of the week smile.png

#5112469 Where is the source for cout

Posted by Karsten_ on 27 November 2013 - 09:19 AM

Clang's C++ compiler provides libc++[.so|.dll], GCC-C++ provides libstdc++ (I think), and other compilers provide their own standard C++ Library.

When using the C++ compiler, it links in the core c++ library implicitly. You can easily test this in GCC by compiling the .cxx files into object files (with -c) and then using ld as the linker rather than g++. This will then throw a fit and spam the console with linker error messages since the standard library is not linked (ld is a C linker when used with no parameters).

As for tracking down the exact declaration of std::cout... Good luck, C++ can be a nightmare to follow when overly used but reading standard library source code is something much worse ;).
Note that in many cases, the header files also have different implementations depending on the compiler, vendor or even standard library used. For example, OpenBSD has clang 3.2 and so does FreeBSD, however OpenBSD's clang uses a different C++ standard library (so doesnt support the full C++11 standard).

#5109450 Candy Crush type game in C

Posted by Karsten_ on 15 November 2013 - 07:37 AM

Possibly because

is assigning 1 to r. Instead you might want to use:


#5109325 How Languages Compare?

Posted by Karsten_ on 14 November 2013 - 06:47 PM

struct DeadPlayer {
     Player player;
     Point deathLocation;

Now, you write methods that take a DeadPlayer* as their first argument (and observe, you can pass DeadPlayer pointers to all methods that expect a Player).

Nice example.
Usually a fairly junior C# or Java developer will jeer at C because they don't realize or understand how this works. This is how Gtk+ (and many object-orientated C libraries) does it and demonstrates that C is pretty darn flexible.

#5109312 How Languages Compare?

Posted by Karsten_ on 14 November 2013 - 05:56 PM

Nowadays the trend in game development is to use the component entity system which works really nicely with languages like C which don't actively enforce rigid object orientation.

At work we tend to write fairly typical C code using similar patterns to Gtk+ for our small amount of object orientation but then we attach components to a single type akin to Unity's GameObject.
We do however use the GNU C++ compiler so we can access some of the really useful C++ functionality like std::string, std::vector, smart pointers etc. We also use external C++ and C libraries so using a C++ compiler was the most compatible choice.

Also, it seems easier to interface with C code from a Java or Objective-C shim layer (for mobile devices), than C++.

My personal favorite feature of C over C++ is that if you define the struct in the .c file and just have a forward declaration of the struct and corresponding functions in the .h file, it is much more encapsulated than even a class with everything private in C++ since other developers can't even see the data and you have complete control over any aspect of the data being exposed. This can't seem to be done so well in C++ without rewrapping all the functions because the class contains the functions so has to be exposed. Thus the pimpl idiom which I find a tad messy and convoluted.

#5107125 C++ (SFML) and Flash player/Unity

Posted by Karsten_ on 05 November 2013 - 04:08 AM

Ah good point, it is worth mentioning that Emscripten provides SDL 1.x (and soon SDL 2.0). However, since the emscripten version of the SDL API has been tweaked to run in a mobile browser (i.e touch events) and is already 3D accelerated, it is likely to stick around for many years to come (and will almost certainly still outlive commercial proprietary products like Unity).

#5106975 C++ (SFML) and Flash player/Unity

Posted by Karsten_ on 04 November 2013 - 02:00 PM

Whao, that's sounds amazing, i think it's the time to learn SDL. Thank you! smile.png


Luckily SDL also has some fantastic tutorials written by GameDev.net's own LazyFoo (http://lazyfoo.net/SDL_tutorials/). These should help you get started. For 2D games it covers pretty much everything.

As an added bonus, when compiled with Emscripten, your SDL games will actually be hardware accelerated because they use the web browsers HTML5 canvas underneath.

#5106968 C++ (SFML) and Flash player/Unity

Posted by Karsten_ on 04 November 2013 - 01:34 PM

FlasCC unfortunately still targets the unportable proprietary Flash stage system.

Emscripten could be perfect here. It is basically a C++ to Javascript compiler but also provides well known C++ media libraries such as SDL, OpenGL, SDL_mixer, SDL_image, Qt, glut etc...

My software always uses either SDL or Glut and OpenGL so it has been very easy to put out a web build. I highly recommend these technologies if you want to keep with C++ but also target the web (as well as every other platform under the sun ;)


A few simple demos using the technology can be found at http://devio.us/~kpedersen/mutiny/doku.php?id=demos (apologies for the slow server)

#5106880 Linking libraries in VS 2012 (Express)

Posted by Karsten_ on 04 November 2013 - 04:37 AM

We use the Microsoft C++ compiler in much the same way as GCC on Windows. The following is a few examples from our Makefiles if it helps (personally I find the documentation for commandline MSVC usage to be really lacking!).

.cpp unit to .obj
cl.exe /nologo /EHsc -c -I..\..\..\import\msvc\include -I..\..\ $(CXXFLAGS) /Fo$@ $<

relevant .obj files to static lib. Here we are also including the GLEW32s.lib into our static lib so it doesnt need to be linked in during the final step.
lib.exe /OUT:..\..\lib\mutiny.lib $(OBJ) ..\..\import\msvc\lib\GLEW32s.lib

Link other .obj files to final .exe and then link against required libs and our static lib we generated in the step above
link.exe /SUBSYSTEM:WINDOWS /OUT:$(BIN) $(OBJ) /LIBPATH:..\..\..\import\msvc\lib /LIBPATH:..\..\..\lib OpenGL32.lib GLU32.lib SDLmain.lib SDL.lib mutiny.lib $(LDFLAGS)

The main thing to notice is the /LIBPATH parameters are similar to -L on gcc. Also note that there is no need for -l, you just specify the name of the lib (including the .lib suffix).