cvui 1.1.0 is out!

I am pleased to inform that version 1.1.0 of cvui is out! cvui is a simple UI lib built on top of OpenCV drawing primitives. Here is an image to show the new features:

cvui

This release is backward compatible, so users of the lib should be able to upgrade by just dropping the new files into their projects. There ara few bug fixes as well as some pretty cool new features.

One of the most annoying tasks when building UI is to calculate where each component should be placed on the screen. Version 1.1.0 brings a set of methods that abstract the process of positioning components, so you don’t have to think about assigning a X and Y coordinate. Instead you just add components and cvui will place them as you go.

An example is the beginRow() function to start a group of elements. After beginRow() has been called, all subsequent component calls don’t have to specify the frame where the component should be rendered nor its position. The position of the component will be automatically calculated by cvui based on the components within the group.

All components are placed side by side, from left to right. E.g.

beginRow(frame, x, y, width, height);

text("test");
button("btn");

endRow();

Rows and columns can be nested, so you can create columns/rows within columns/rows as much as you want:

beginRow(frame, x, y, width, height);

text("test");
button("btn");
	 
beginColumn();
text("column1");
text("column2");
endColumn();

endRow();

I am pretty happy with the new API and the possibilities it brings, specially because it means less code to achieve more things. That’s always a thing to celebrate =)

cvui - A very simple UI lib for OpenCV

I have been working a lot with OpenCV and C++ lately. After spending a great amount of time waiting for things to compile (so I could see my changes), I decided to improve my workflow. I decided to make changes in runtime, so I could tweak things without the need to recompile the whole project.

I immediately faced a problem: how to quickly and easily create GUI with OpenCV. The OpenCV lib has complete support for Qt (which is great for UI creation), but you need to compile OpenCV with such Qt support. If you don’t like that (or you have OpenCV compiled without Qt), you can enable OpenGL and use any of the awesome GUI out there, e.g. imgui. If you decide for that, you add the OpenGL dependency to your (probably already complex) project.

I didn’t have Qt available and I didn’t want to use OpenGL, so I distilled cvui. cvui is a (very) simple UI lib built on top of OpenCV drawing primitives. All the rendering is made using OpenCV, by calling cv::rectangle(), for instance. Here is a picture of it working:

cvui

The API is heavily inspired by imgui. The calls are all C-like, so no classes, objects nor OOP. I have nothing against that, I just wanted an extremely simple way of creating UI for my application (one line written, one thing on the screen).

At the moment, the API includes a small set of components: button, checkbox, window and counter. I will probably add more components in the near future. For more information, visit the cvui repository on Github. The code is MIT licensed.

Goodbye Wordpress, hello Github Pages!

It took a lot more than I wanted it to take, but I finally concluded the move from Wordpress to Github Pages! Finally my personal website (this one you are reading) runs in a static fashion, without PHP, databases and all that useful-but-not-for-my-personal-website stuff.

I enjoyed Wordpress from the very beginning, it has a nice set of features and helps you write and manage content. During the last year or so, however, it was standing in my way. The template I was using was already showing signs of aging, some things were breaking and, last but not least, I had to pay constant attention to security patches/updates. Not anymore! Now I can use my daily code editor to write content using Markdown and publish it to the magic clouds of Github with a git push command.

I hope the move will encourage me to blog more often, which is something I have being trying to do lately. Time will tell if that worked or not :)

My 2013 in review

Another years has gone by. I wrote my new year’s resolutions for 2013 almost a year ago, but it still feels like yesterday. The last days of 2013 seem the perfect time to review the year and check if I collected accomplishments or lame excuses.

Without further ado, down to the goals:

Improve my skills as an indie game developer. I already joined OneGameAMonth and will try to release 12 games in 2013. A pharaonic task, but the fun is proportional. It is not about working until faint, but learning how to avoid code bloat and feature creep (two of my most significant problems as a developer).

Depending on the point of view, this was completely or partially accomplished. I did not release 12 games in 2013, I did 6 instead. 1GAM was amazing and I’ve learned a lot from it. The “12 games” thing was just a guide, not a goal per se.

As I explained here, my gamedev year was awesome. I can say I improved as an indie game developer, a LOT.

Exercise! I stopped running with my friends (in 2011, I ran a 10km marathon, that felt great!). I want to start jogging at least. I also want to get back on track on my push-ups training. I will buy a dumbbell too.

Partially accomplished. I got on track on my push-ups and the jogging, but I didn’t follow a strict and regular routine.

I trained for a marathon, signed up for it and was ready to run. However I’m too dump to pay attention to the payment due date, so my registration was invalidated :(Damn! It was a fun and short 5km marathon that I will have to postpone to 2014.

I didn’t buy the dumbbell.

Regularly write tutorials about game development at As3GameGears. Since I started the blog, I just post about tools. It’s time to improve the content and write about game related stuff.

Again, depending on the point of view, I completely or partially accomplished this one. I did wrote several gamedev tutorials, but for the Game Development section of the Tuts+ network, not As3GameGears.

On the other hand, I kick started a new series named game dissection. It’s not a tutorial, but it’s a start.

Write a book about game development.

Not accomplished. Judging by my work in March and April, I thought I would accomplish this one. I wrote two chapters, then I totally dropped the work.

My university classes consumed a significant amount of time, so I was not able to write chapters. I was planning to write and use the texts in my gamedev classes, but that didn’t happen either. Too bad.

Contribute to an open source project.

Accomplished! I worked on Flixel Community, fixing bugs and planning new features. By the end of November we released version 2.56, the very first Flixel release under the community label.

We attracted more developers to the project, that was amazing! I will continue my efforts to make Flixel Community a great game engine.

Found a Jr tech company at UFFS.

Not quite there yet. I mentored students regarding the tech company, which was founded and named FronteiraTec. In the founding process, however, we skipped all legal and governamental steps, so the company exists, but in a “virtual”.

In that situation, the company is not able to sign any contract or sell anything, but it didn’t prevent the students from planning and working. They worked on several projects, covering subjects as games, mobile apps and hardware. They even made an arcade machine.

The only missing piece of this puzzle is the legal papers and the official registration in the government records.

Research. It’s been two years since I stopped working on my master’s dissertation. I want to start working on it again, researching and publishing papers.

Not accomplished. I didn’t have the time (nor the will) to keep this up. I co-authored a paper about procedural generation of canyons, though. The paper is in the works, but it will be published in 2014.

Find inner patience. Sometimes I get really upset by small things and it is not helping. I will try to keep myself calm and constant during 2013. It will make me a better husband, professor and person.

I don’t know how to classify this one. I made some great improvements, but I didn’t reach the point where I wanted to be.

Finding inner patience is harder than I thought. It requires a lot of energy to take a deep breath and ignore the things that upset you. The jogging helped keep things cool, so I think I’m on track for this goal in 2014.

Release at least one side project. I have lots of ideas, but I never manage to work on it and release something.

Not accomplished. I joined my friends on a project, we had some meetings, but we were not able to launch anything. I had some ideas too, but I was short on time to make them come true.

Ok, that was the review!

Looking back and checking all those accomplishments, I can say 2013 was an outstanding year! Goals keep me motivated, even if I’m not able to accomplish them all. I managed to accomplish much more than I expected, which was great!

A new year is just around the corner. It’s time to write some new goals again 😀

 

Gamedev book – days 1 and 2

book_1_2

It’s been three weeks since I started working on this book. During Friday the 15th I finished the summary. I came up with 19 chapters! That’s more than I previously thought, but since it’s a draft, I can cut some chapters along the way.

Today I finally started writing something. Damn, it was hard! It’s been almost 3 years since I wrote something big (my master thesis) , so I had to brush all that dust. The key secret for every endeavor is persistence, so it took me some time to get things working again. At the end of the day I was really proud of my result. It was a small piece of text, but it served the purpose of warming things up.

Analyzing the current scene I will merge some chapters and change the main subject of others. However that’s a task for the future and for my next Friday.