Added OepnGL "Hello World" project
This commit is contained in:
34
project/jni/application/opengl_hello/AndroidAppSettings.cfg
Normal file
34
project/jni/application/opengl_hello/AndroidAppSettings.cfg
Normal file
@@ -0,0 +1,34 @@
|
||||
# The application settings for Android libSDL port
|
||||
AppSettingVersion=16
|
||||
LibSdlVersion=1.2
|
||||
AppName="OpenGL SDL test"
|
||||
AppFullName=org.opengl.sdl.test
|
||||
ScreenOrientation=h
|
||||
InhibitSuspend=n
|
||||
AppDataDownloadUrl="Gamedata|data2.zip"
|
||||
SdlVideoResize=n
|
||||
SdlVideoResizeKeepAspect=n
|
||||
NeedDepthBuffer=y
|
||||
AppUsesMouse=n
|
||||
AppNeedsTwoButtonMouse=n
|
||||
AppNeedsArrowKeys=n
|
||||
AppNeedsTextInput=n
|
||||
AppUsesJoystick=n
|
||||
AppHandlesJoystickSensitivity=n
|
||||
AppUsesMultitouch=n
|
||||
NonBlockingSwapBuffers=n
|
||||
RedefinedKeys="RETURN"
|
||||
AppTouchscreenKeyboardKeysAmount=0
|
||||
AppTouchscreenKeyboardKeysAmountAutoFire=0
|
||||
RedefinedKeysScreenKb="RETURN"
|
||||
MultiABI=n
|
||||
AppVersionCode=1
|
||||
AppVersionName="1"
|
||||
CompiledLibraries="sdl_image"
|
||||
CustomBuildScript=n
|
||||
AppCflags='-finline-functions -O2'
|
||||
AppLdflags=''
|
||||
AppSubdirsBuild=''
|
||||
AppUseCrystaXToolchain=n
|
||||
AppCmdline=''
|
||||
ReadmeText='^text'
|
||||
BIN
project/jni/application/opengl_hello/AndroidData/data2.zip
Normal file
BIN
project/jni/application/opengl_hello/AndroidData/data2.zip
Normal file
Binary file not shown.
3
project/jni/application/opengl_hello/Makefile
Normal file
3
project/jni/application/opengl_hello/Makefile
Normal file
@@ -0,0 +1,3 @@
|
||||
|
||||
sdl_hello: *.cpp
|
||||
g++ -o $@ $? `sdl-config --cflags` `sdl-config --libs` -lGL
|
||||
BIN
project/jni/application/opengl_hello/icon.png
Normal file
BIN
project/jni/application/opengl_hello/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
151
project/jni/application/opengl_hello/sdl_hello.cpp
Normal file
151
project/jni/application/opengl_hello/sdl_hello.cpp
Normal file
@@ -0,0 +1,151 @@
|
||||
#include <SDL.h>
|
||||
#include <SDL_image.h>
|
||||
#include <GLES/gl.h>
|
||||
|
||||
GLuint texture;
|
||||
|
||||
// I've tweaked coordinates a bit to my taste
|
||||
GLfloat textureCoordinates[] = { 0.0f, 1.0f,
|
||||
0.0f, 0.0f,
|
||||
1.0f, 0.0f,
|
||||
1.0f, 1.0f };
|
||||
GLfloat vertices[] = {
|
||||
100, 100,
|
||||
100, 300,
|
||||
300, 300,
|
||||
300, 100 };
|
||||
|
||||
int loadImage() {
|
||||
SDL_Surface *pic;
|
||||
SDL_Surface *tmp;
|
||||
|
||||
glGenTextures(1, &texture);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texture);
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
|
||||
|
||||
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
|
||||
pic = IMG_Load("test.png");
|
||||
|
||||
// check power of 2
|
||||
if (!pic || !pic->w || !pic->h || (pic->w & 1) || (pic->h & 1)) {
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
tmp = SDL_CreateRGBSurface(0, pic->w, pic->h, 16, 0xF800, 0x7E0, 0x1F, 0); // Correct bits of RGB565 color format
|
||||
SDL_BlitSurface(pic, NULL, tmp, NULL);
|
||||
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pic->w, pic->h, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, tmp->pixels);
|
||||
|
||||
SDL_FreeSurface(pic);
|
||||
SDL_FreeSurface(tmp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int width = 640;
|
||||
int height = 480;
|
||||
|
||||
|
||||
static void
|
||||
initGL()
|
||||
{
|
||||
|
||||
glViewport(0, 0, width, height);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
|
||||
glOrthof(0.0f, width, 0.0f, height, -1.0f, 1.0f);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
draw()
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); // Always clear your scene before rendering, unless you're sure that you'll fill whole screen with textures/models etc
|
||||
|
||||
// You have to this each frame, because SDL messes up with your GL context when drawing on-screen keyboard, however is taves/restores your matrices
|
||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Just to be sure
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glDisable(GL_BLEND);
|
||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texture);
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glVertexPointer(2, GL_FLOAT, 0, vertices);
|
||||
glTexCoordPointer(2, GL_FLOAT, 0, textureCoordinates);
|
||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4); // You may just replace all your GL_QUADS with GL_TRIANGLE_FAN and it will draw absolutely identically with same coordinates, if you have just 4 coords.
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
SDL_Surface *screen;
|
||||
int done;
|
||||
Uint8 *keys;
|
||||
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
|
||||
// Set native device screen resolution, if you want 640x480 select SdlVideoResize=y in AndroidAppSettings.cfg
|
||||
width = SDL_ListModes(NULL, 0)[0]->w;
|
||||
height = SDL_ListModes(NULL, 0)[0]->h;
|
||||
|
||||
screen = SDL_SetVideoMode(width, height, 16, SDL_OPENGL|SDL_DOUBLEBUF);
|
||||
if ( ! screen ) {
|
||||
fprintf(stderr, "Couldn't set GL video mode: %s\n", SDL_GetError());
|
||||
SDL_Quit();
|
||||
exit(2);
|
||||
}
|
||||
SDL_WM_SetCaption("test", "test");
|
||||
|
||||
initGL();
|
||||
loadImage();
|
||||
while ( ! SDL_GetKeyState(NULL)[SDLK_ESCAPE] ) // Exit by pressing Back button
|
||||
{
|
||||
draw();
|
||||
SDL_GL_SwapBuffers();
|
||||
SDL_Event event;
|
||||
while( SDL_PollEvent(&event) ) ; // Do nothing, just process keyboard/mouse events internally
|
||||
// Some kinda animation
|
||||
//SDL_Delay(200);
|
||||
static float diff = 1.0f;
|
||||
vertices[0] += diff;
|
||||
vertices[2] += diff;
|
||||
vertices[4] += diff;
|
||||
vertices[6] += diff;
|
||||
if( vertices[4] > width )
|
||||
diff = -1.0f;
|
||||
if( vertices[0] < 0 )
|
||||
diff = 1.0f;
|
||||
}
|
||||
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user