Back
Milcho G. Milchev: SFML Essentials (Paperback, 2015, Packt Publishing) 1 star

Review of 'SFML Essentials' on 'Goodreads'

1 star

Content:

The preface mentions the material is intended for an audience who has already worked on a game project and that a "solid understanding in at least one of the supported languages is required." It seems though that the book is aimed for beginners or newcomers to the language (C++) considering the basics keep getting mentioned. Simple graphics processing concepts such as double buffering are mentioned and briefly explained, but not expanded. Another example is the part explaining the usage of RectangleShape::setTexture taking a pointer rather than a reference. The differences between heap and stack allocation are explained without really expanding the topic, and things like singleton and static pointers are "reminded" to the reader - why, when the user is assumed to be proficient in C++? This seems like unnecessary for people already familiar with the language, but not nearly enough for those still beginners. Made me wonder if it was a bit unclear for whom the book was targeted.

The core of the book involves explaining the various features of SFML and a rudimentary, basic example on how to use them. I feel this section was almost a direct copy from the SFML API docs and explained everything twice without adding any additional information.

OpenGL sections were explained using the deprecated OpenGL 2 functions. I felt this was strange considering these days even Intel GPUs on OS X are able to do OpenGL 3, which can be considered the new de facto standard. An online OpenGL tutorial site is also linked to with material on OpenGL 2, whereas there is not much reason to learn such old versions these days.

Some chapters were passable, offering a reasonably compressed rundown on how to achieve some a bit more complex topics such as views.

The book focuses completely on the various SFML features, but leaves, in my opinion, one of the more difficult problems out: deployment. The preface mentions SFML as an option if you are seeking for a cross-platform library. The biggest issue with cross-platform is deployment, managing the libraries and all the complications with problematic GPU drivers or dynamically linked libraries. In lots of cases you need to perform specialized steps to make the final, packaged release and this can be complicated if you don't know the gruesome details.

Styling:

Another issue I have is that the code segments were screenshots of Sublime Text. I'm not certain why this was considered a good idea as there are perfectly fine LaTeX templates for inserting code segments in a book. This makes the code, an important portion of the book, not scalable for zooming and the text becomes blurry. The screenshots make sense for displaying the actual code in work, but not the code that produced it. At least the source code can be downloaded from the publisher's site, which helps with the issue.

Recommendation:

Personally I can't recommend the book. It explores the various features of SFML, explaining them the same way the API documentation does. If the book explained the features in more detail and explored some of the usual pitfalls I might be interested. Usually, a programmer only needs to check out the documentation and maybe a few Google searches in order to figure out how the basics of a library function, and then can buy a 1000 page bible on the topic if he feels something was left out. This book does not really offer anything on top of the existing, free material online apart from assembling the already available tutorials in one volume.

In each chapter, the meanings of the concepts such as shaders and networking are mentioned, but not explained. The chapters then proceed to using the SFML API to implement these features. If you are reading a compressed volume such as this you probably already are quite experienced and don't need to be told what TCP and UDP mean. If you aren't familiar with them, I recommend you check all the chapter headers and read a specialized book about all of them separately. Otherwise, stick to the SFML documentation.