Showing posts with label SDL. Show all posts
Showing posts with label SDL. Show all posts

Sunday, 21 November 2010

glBegin to vertex arrays

So even though i already did some conversions from opengl to opengles, i cannot remember what and how i did! here is a little reminder

glBegin( GL_QUADS );
glTexCoord2i(0, 0);
glVertex3f( 0-(ButtonSprites[index].Width/2), 0-(ButtonSprites[index].Height/2), 0 );

glTexCoord2i(1, 0);
glVertex3f( 0+(ButtonSprites[index].Width/2), 0-(ButtonSprites[index].Height/2), 0 );

glTexCoord2i(1, 1);
glVertex3f( 0+(ButtonSprites[index].Width/2), 0+(ButtonSprites[index].Height/2), 0 );

glTexCoord2i(0, 1);
glVertex3f( 0-(ButtonSprites[index].Width/2), 0+(ButtonSprites[index].Height/2), 0 );
glEnd();


get converted into

int numvertices = 4;
glEnableClientState( GL_VERTEX_ARRAY ); // Enable Vertex Arrays
glEnableClientState( GL_TEXTURE_COORD_ARRAY ); // Enable Texture Coord Arrays

float* vertices= new float[3*numvertices]; //3 coordiantes per vertex
float* textcoord= new float[2*numvertices]; //2 texture coordiantes per vertex

//fill in your array of vertices and texture coordinates with data
textcoord[0] = 0;
textcoord[1] = 0;
textcoord[2] = 1;
textcoord[3] = 0;
textcoord[4] = 1;
textcoord[5] = 1;
textcoord[6] = 0;
textcoord[7] = 1;

vertices[0] = -(ButtonSprites[index].Width/2);
vertices[1] = -(ButtonSprites[index].Height/2);
vertices[2] = 0;
vertices[3] = (ButtonSprites[index].Width/2);
vertices[4] = -(ButtonSprites[index].Height/2);
vertices[5] = 0;
vertices[6] = (ButtonSprites[index].Width/2);
vertices[7] = (ButtonSprites[index].Height/2);
vertices[8] = 0;
vertices[9] = -(ButtonSprites[index].Width/2);
vertices[10] = (ButtonSprites[index].Height/2);
vertices[11] = 0;

glVertexPointer( 3, GL_FLOAT, 0, vertices ); // Set The Vertex Pointer To Vertex Data
glTexCoordPointer( 2, GL_FLOAT, 0, textcoord ); // Set The Vertex Pointer To TexCoord Data

glDrawArrays( GL_TRIANGLE_FAN, 0, numvertices ); //Draw the vertices

Wednesday, 16 December 2009

How to compile SDL_Mixer for the iPhone

So this is a question that has popped up more than once in SDL mailing list, so I decided to give my contribution to the howto-documentation. If you're looking for Ogg or MP3 decoders this is your guide; unfortunately i couldn't make it compile with MIDI support.

First: open the XCode.tar.gz archive in the SDL_mixer sources, and load the project file in Xcode.
Second: go the project preferences and modify the base sdk and architecture like in the pictureOf course you can choose a lower sdk, i successfully compiled the library for iphone 2.0. Once in the main windows again choose the "Static Library" from the Active Target list.
Third: Expand the Targets label on the left and double click on Static Library; this will show the specific target options. Select the Preprocessor macros doubleclicking it and modify it by removing MID_MUSIC, MOD_MUSIC and USE_NATIVE_MIDI and add __IPHONEOS__ definition.

Fourth: One last step, remove native_midi_macosx.c from the Compile Sources list in your Static Library target and the library is ready! It's compile time!


Sound great doesn't it? However here is bad news: for our application to correcly load OGG file (and most likely mp3 as well but i haven't tested it) we'll need another library to correctly link the various ogg functions. Don't worry, I'll guide you!

We have two options:
1- we can download ogg and vorbis and compile them from command line, set up the dependencies between the two, fix the paths and so on... if you're eager to try the command line is this:
< ./configure --prefix=/usr/local/iphone --host=arm-apple-darwin --enable-static=yes --enable-shared=no CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-gcc-4.2.1 CFLAGS="-pipe -mdynamic-no-pic -std=c99 -Wno-trigraphs -fpascal-strings -fasm-blocks -O2 -Wreturn-type -Wunused-variable -fmessage-length=0 -fvisibility=hidden -miphoneos-version-min=3.1 -gdwarf-2 -I/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/usr/include/libxml2 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk" CPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp AR=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar LDFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk -Wl,-dead_strip -miphoneos-version-min=3.1" >
2- we can simply use Tremor, which is an ogg implementation designed for memory constrained device with only integer operations: perfect for the iphone!
It comes bundled in another project, Cocos2d, a great framework for games. If you download it and select the libvorbis target, you will get a single decoding library statically linked for the iphone. It's compile time again!

Place both libraries in the Frameworks folder of your application and... Enjoy your ogg audio on the iphone!
Please drop a comment for critics and suggestions (and appreciations too :) )
Vittorio

Monday, 20 April 2009

the WHOLE SDL libraries availalbe for the iPhone

So i have been toying with this toolchain lately... i must say that i'm constantly surpised by Xcode power! it's something that you have to get used to, but once there it can almost whatever you want!

anyways, i am in the middle of porting a certain game from a normal Mac framework to a iPhone/iPod Touch device! Most of the stuff is already there, like the Pascal compiler, but the main libraries are missing!

I'm talking about SDL, but after some thinkering i got everything done! Here is what i did after checking out every repository

SDL
well this was the easiest, porting this lib started in a past google SoC and they did a pretty good job. To get the lib it's sufficient to unpack the Xcode_iPhone.tar.gz and press "build".

SDL_net
this one wasn't particuarly difficult, as it required just a correct configuration in the Xcode.tar.gz project. In the project settings, set the Base SDK to Device - iPhoneOS (or Simulator according to your needs) and Architectures to Standard.

SDL_ttf
i had to google a little to get this done: ttf is built exactly as SDL_net, but all the applications built with it are hard depending on libfreetype. Of course this library is available for the iphone, but it's difficult to configure it correctly. Luckily i read this site which clearly explained what to do; include that file in your application frameworks and add the -lz flag to the linker options, and you are done!

SDL_image
the hardest of all, just because the svn repository was out of date! In fact there's this guy who did a neat job for introducing a native support for png, jpeg etc instead of third party libraries. His patches were accepted in mainstream, but the iphone project in the repo has not been updated and can't compile!!! I emailed sdl-list but got no reply... for now it's sufficient to download his updated package and compile from it.

SDL_mixer
this was not as easy as net but i guess that porting for this project has yet to start. For the moment i got a working library just by removing all the native_midi_mac stuff, as it's the only part that relies on a framework which is not present in the iPhone. I didn't need any midi support, so i was satisfied with it already.
Beware that while simulation will give no problems, there's an issue for the device! In fact the simluator is likely to load the ogg functions from the shared libs of the system, but since ogg is nowere in the iphone, we have to provide our own!
so let's grab libvorbis and libogg and compile them the same way we compiled libfreetype; i had some problems with the paths when compiling libvorbis, due to the macports installations. I resolved by placing the arm version of libogg.a into the lib directory of macports (/opt/local/lib) and creating a symlink to it named libogg.dylib. Obviously make backups so you can restore your installation!


Now that you know what to do, you can keep updated the freely available versions that i compiled! they are the latest revision... of today! If something doesn't work complain with the SDL guys! I do hope that by the 1.3 release, SDL for iPhone will become officially supported

click here to download all the libraries, both for the simulator and for the device (debug version obv)

if you find them useful, drop a comment here, it'll mean that my work is appreciated :)
Vittorio



All the projects here are under a Creative Commons 3.0 licence! You can use and distribute them as you like (just quote the author so he knows his work is not useless)!

If you wish to get in touch with me write at projectsymphony@gmail.com