Too busy to draw this time.. for now here's a picture of an Android Toy Ok, in this post I am going to talk about how to join C++ native code to a thin Android Java code layer. I am not going to be doing all native code, as I think the easiest route is to use the Android higher level convenience SDK for loading resources/file I/O, setting up OpenGL context and other state management. I won't be using any IDEs or anything else to complicate things. This is as easy as it can get, you get the source and type "make" (I assume you are on a system with GNU make, and your environment is setup correctly. Linux is easiest, but it should run fine on ANY system that can run Make, even Windows!). So the code will be structured like this: ----------------------------------- Android SDK OS Layer code ----------------------------------- Java App Thin Layer to Android OS ----------------------------------- Native C++ code called by...
Optimus prime is a smart pointer. Memory leaks?! He'll straight up kick you in the throat! This isn't Go Bots son! What's the point If you have ever coded in C or C++ you know you've had a memory leak some time or another. Ownership semantics are best, but sometimes those are muddy and, most of the time, the benefit of automatically reclaimed pointers far outweighs any costs (they are not much in terms of resources). What are smart pointers? These are pointer containers/classes with reference counting and ownership semantics built in. The easiest to understand and use is shared_ptr , which when all references are gone delete's the object from memory, and as expected calls the objects destructor (if it exists). For example if you create a raw pointer in a function (and don't store a reference to it anywhere else) you would get a memory leak! void leak_function() { Sprite* sprite = new Sprite(); // Use sprite // After functio...
Here is a short little thing I ran into a few days ago. Many of you may know how a normal Android Makefile looks, something like this: LOCAL_PATH := $( call my-dir) MY_PATH := $(LOCAL_PATH) TARGET_ABI := android-4-armeabi include $(CLEAR_VARS) LOCAL_MODULE := libmain LOCAL_C_INCLUDES := \ $(LOCAL_PATH) /Box2D \ $(LOCAL_PATH) /libpng \ $(LOCAL_PATH) /libzip \ LOCAL_CFLAGS := \ -g3 \ -ggdb \ -gstabs+ \ -DANDROID_NDK \ # Look here! LOCAL_SRC_FILES := \ main.cpp \ cool_file.cpp \ LOCAL_LDLIBS := -lGLESv1_CM -llog -lz LOCAL_STATIC_LIBRARIES := libBox2D libzip libpng include $(BUILD_SHARED_LIBRARY) Ok, notice the section LOCAL_SRC_FILES . If you have many files in your project this could grow huge. O(N) where N is...
Nice job, Razzle!
ReplyDelete