From 54f3fcbe2c622c103393c4502ac2a3f110c75a9c Mon Sep 17 00:00:00 2001 From: pelya Date: Sun, 18 Sep 2016 21:03:34 +0300 Subject: [PATCH] Added GLES2 sprite example --- .../test-gles2/AndroidAppSettings.cfg | 295 ++++++++++++ .../test-gles2/AndroidData/data.zip | Bin 0 -> 85130 bytes project/jni/application/test-gles2/Makefile | 4 + project/jni/application/test-gles2/icon.png | Bin 0 -> 14646 bytes project/jni/application/test-gles2/main.cpp | 418 ++++++++++++++++++ 5 files changed, 717 insertions(+) create mode 100644 project/jni/application/test-gles2/AndroidAppSettings.cfg create mode 100644 project/jni/application/test-gles2/AndroidData/data.zip create mode 100644 project/jni/application/test-gles2/Makefile create mode 100644 project/jni/application/test-gles2/icon.png create mode 100644 project/jni/application/test-gles2/main.cpp diff --git a/project/jni/application/test-gles2/AndroidAppSettings.cfg b/project/jni/application/test-gles2/AndroidAppSettings.cfg new file mode 100644 index 000000000..3a639e529 --- /dev/null +++ b/project/jni/application/test-gles2/AndroidAppSettings.cfg @@ -0,0 +1,295 @@ +# The application settings for Android libSDL port + +# Specify application name (e.x. My Application) +AppName="GLES2 SDL test" + +# Specify reversed site name of application (e.x. com.mysite.myapp) +AppFullName=gles2.sdl.test + +# Application version code (integer) +AppVersionCode=1 + +# Application user-visible version name (string) +AppVersionName="1" + +# Specify path to download application data in zip archive in the form 'Description|URL|MirrorURL^Description2|URL2|MirrorURL2^...' +# If you'll start Description with '!' symbol it will be enabled by default, other downloads should be selected by user from startup config menu +# If the URL in in the form ':dir/file.dat:http://URL/' it will be downloaded as binary BLOB to the application dir and not unzipped +# If the URL does not contain 'http://' it is treated as file from 'project/jni/application/src/AndroidData' dir - +# these files are put inside .apk package by build system +# You can specify Google Play expansion files in the form 'obb:main.12345' or 'obb:patch.12345' where 12345 is the app version, first associated with the file +AppDataDownloadUrl="!!Data|data.zip" + +# Reset SDL config when updating application to the new version (y) / (n) +ResetSdlConfigForThisVersion=n + +# Delete application data files when upgrading (specify file/dir paths separated by spaces) +DeleteFilesOnUpgrade="%" + +# Here you may type readme text, which will be shown during startup. Format is: +# Text in English, use \\\\n to separate lines (that's four backslashes)^de:Text in Deutsch^ru:Text in Russian^button:Button that will open some URL:http://url-to-open/ +ReadmeText='^text' + +# libSDL version to use (1.2/1.3/2.0) +LibSdlVersion=1.2 + +# Specify screen orientation: (v)ertical/(p)ortrait or (h)orizontal/(l)andscape +ScreenOrientation=h + +# Video color depth - 16 BPP is the fastest and supported for all modes, 24 bpp is supported only +# with SwVideoMode=y, SDL_OPENGL mode supports everything. (16)/(24)/(32) +VideoDepthBpp=24 + +# Enable OpenGL depth buffer (needed only for 3-d applications, small speed decrease) (y) or (n) +NeedDepthBuffer=n + +# Enable OpenGL stencil buffer (needed only for 3-d applications, small speed decrease) (y) or (n) +NeedStencilBuffer=n + +# Use GLES 2.x context +# you need this option only if you're developing 3-d app (y) or (n) +NeedGles2=y + +# Use GLES 3.x context +# you need this option only if you're developing 3-d app (y) or (n) +NeedGles3=n + +# Use glshim library for provide OpenGL 1.x functionality to OpenGL ES accelerated cards (y) or (n) +UseGlshim=n + +# Application uses software video buffer - you're calling SDL_SetVideoMode() without SDL_HWSURFACE and without SDL_OPENGL, +# this will allow small speed optimization. Enable this even when you're using SDL_HWSURFACE. (y) or (n) +SwVideoMode=n + +# Application video output will be resized to fit into native device screen (y)/(n) +SdlVideoResize=n + +# Application resizing will keep 4:3 aspect ratio, with black bars at sides (y)/(n) +SdlVideoResizeKeepAspect=n + +# Do not allow device to sleep when the application is in foreground, set this for video players or apps which use accelerometer +InhibitSuspend=y + +# Create Android service, so the app is less likely to be killed while in background +CreateService=n + +# Application does not call SDL_Flip() or SDL_UpdateRects() appropriately, or draws from non-main thread - +# enabling the compatibility mode will force screen update every 100 milliseconds, which is laggy and inefficient (y) or (n) +CompatibilityHacksForceScreenUpdate=n + +# Application does not call SDL_Flip() or SDL_UpdateRects() after mouse click (ScummVM and all Amiga emulators do that) - +# force screen update by moving mouse cursor a little after each click (y) or (n) +CompatibilityHacksForceScreenUpdateMouseClick=n + +# Application initializes SDL audio/video inside static constructors (which is bad, you won't be able to run ndk-gdb) (y)/(n) +CompatibilityHacksStaticInit=n + +# On-screen Android soft text input emulates hardware keyboard, this will only work with Hackers Keyboard app (y)/(n) +CompatibilityHacksTextInputEmulatesHwKeyboard=n + +# Built-in text input keyboards with custom layouts for emulators, requires CompatibilityHacksTextInputEmulatesHwKeyboard=y +# 0 or empty - standard Android keyboard +# 1 - Simple QWERTY keyboard, no function keys, no arrow keys +# 2 - Commodore 64 keyboard +# 3 - Amiga keyboard +# 4 - Atari800 keyboard +TextInputKeyboard=0 + +# Hack for broken devices: prevent audio chopping, by sleeping a bit after pushing each audio chunk (y)/(n) +CompatibilityHacksPreventAudioChopping=n + +# Hack for broken apps: application ignores audio buffer size returned by SDL (y)/(n) +CompatibilityHacksAppIgnoresAudioBufferSize=n + +# Hack for VCMI: preload additional shared libraries before aplication start +CompatibilityHacksAdditionalPreloadedSharedLibraries="" + +# Hack for Free Heroes 2, which redraws the screen inside SDL_PumpEvents(): slow and compatible SDL event queue - +# do not use it with accelerometer/gyroscope, or your app may freeze at random (y)/(n) +CompatibilityHacksSlowCompatibleEventQueue=n + +# Save and restore OpenGL state when drawing on-screen keyboard for apps that use SDL_OPENGL +CompatibilityHacksTouchscreenKeyboardSaveRestoreOpenGLState=n + +# Application uses SDL_UpdateRects() properly, and does not draw in any region outside those rects. +# This improves drawing speed, but I know only one application that does that, and it's written by me (y)/(n) +CompatibilityHacksProperUsageOfSDL_UpdateRects= + +# Application uses mouse (y) or (n), this will show mouse emulation dialog to the user +AppUsesMouse=y + +# Application needs two-button mouse, will also enable advanced point-and-click features (y) or (n) +AppNeedsTwoButtonMouse=n + +# Right mouse button can do long-press/drag&drop action, necessary for some games (y) or (n) +# If you disable it, swiping with two fingers will send mouse wheel events +RightMouseButtonLongPress= + +# Show SDL mouse cursor, for applications that do not draw cursor at all (y) or (n) +ShowMouseCursor=n + +# Screen follows mouse cursor, when it's covered by soft keyboard, this works only in software video mode (y) or (n) +ScreenFollowsMouse= + +# Generate more touch events, by default SDL generates one event per one video frame, this is useful for drawing apps (y) or (n) +GenerateSubframeTouchEvents= + +# Force relative (laptop) mouse movement mode, useful when both on-screen keyboard and mouse are needed (y) or (n) +ForceRelativeMouseMode=n + +# Show on-screen dpad/joystick, that will act as arrow keys (y) or (n) +AppNeedsArrowKeys=n + +# On-screen dpad/joystick will appear under finger when it touches the screen (y) or (n) +# Joystick always follows finger, so moving mouse requires touching the screen with other finger +FloatingScreenJoystick= + +# Application needs text input (y) or (n), enables button for text input on screen +AppNeedsTextInput=y + +# Application uses joystick (y) or (n), the on-screen DPAD will be used as joystick 0 axes 0-1 +# This will disable AppNeedsArrowKeys option +AppUsesJoystick=n + +# Application uses second on-screen joystick, as SDL joystick 0 axes 2-3 (y)/(n) +AppUsesSecondJoystick=n + +# Application uses third on-screen joystick, as SDL joystick 0 axes 20-21 (y)/(n) +AppUsesThirdJoystick= + +# Application uses accelerometer (y) or (n), the accelerometer will be used as joystick 1 axes 0-1 and 5-7 +AppUsesAccelerometer=n + +# Application uses gyroscope (y) or (n), the gyroscope will be used as joystick 1 axes 2-4 +AppUsesGyroscope=n + +# Application uses orientation sensor (y) or (n), reported as joystick 1 axes 8-10 +AppUsesOrientationSensor= + +# Use gyroscope to move mouse cursor (y) or (n), it eats battery, and can be disabled in settings, do not use with AppUsesGyroscope setting +MoveMouseWithGyroscope= + +# Application uses multitouch (y) or (n), multitouch events are passed as SDL_JOYBALLMOTION events for the joystick 0 +AppUsesMultitouch=n + +# Application records audio (it will use any available source, such a s microphone) +# API is defined in file SDL_android.h: int SDL_ANDROID_OpenAudioRecording(SDL_AudioSpec *spec); void SDL_ANDROID_CloseAudioRecording(void); +# This option will add additional permission to Android manifest (y)/(n) +AppRecordsAudio=n + +# Application needs to access SD card. Always disable it, unless you want to access user photos and downloads. (y) / (n) +AccessSdCard= + +# Application needs Internet access. If you disable it, you'll have to bundle all your data files inside .apk (y) / (n) +AccessInternet= + +# Immersive mode - Android will hide on-screen Home/Back keys. Looks bad if you invoke Android keyboard. (y) / (n) +ImmersiveMode= + +# Application implements Android-specific routines to put to background, and will not draw anything to screen +# between SDL_ACTIVEEVENT lost / gained notifications - you should check for them +# rigth after SDL_Flip(), if (n) then SDL_Flip() will block till app in background (y) or (n) +# This option is reported to be buggy, sometimes failing to restore video state +NonBlockingSwapBuffers=n + +# Redefine common hardware keys to SDL keysyms +# BACK hardware key is available on all devices, MENU is available on pre-ICS devices, other keys may be absent +# SEARCH and CALL by default return same keycode as DPAD_CENTER - one of those keys is available on most devices +# Use word NO_REMAP if you want to preserve native functionality for certain key (volume keys are 3-rd and 4-th) +# Keys: TOUCHSCREEN (works only when AppUsesMouse=n), DPAD_CENTER/SEARCH, VOLUMEUP, VOLUMEDOWN, MENU, BACK, CAMERA +RedefinedKeys="RETURN" + +# Number of virtual keyboard keys (currently 6 is maximum) +AppTouchscreenKeyboardKeysAmount=0 + +# Redefine on-screen keyboard keys to SDL keysyms - 6 keyboard keys + 4 multitouch gestures (zoom in/out and rotate left/right) +RedefinedKeysScreenKb="RETURN" + +# Names for on-screen keyboard keys, such as Fire, Jump, Run etc, separated by spaces, they are used in SDL config menu +RedefinedKeysScreenKbNames="RETURN" + +# On-screen keys theme +# 0 = Ultimate Droid by Sean Stieber (green, with cross joystick) +# 1 = Simple Theme by Beholder (white, with cross joystick) +# 2 = Sun by Sirea (yellow, with round joystick) +# 3 = Keen by Gerstrong (multicolor, with round joystick) +# 4 = Retro by Santiago Radeff (red/white, with cross joystick) +# 5 = GameBoy from RetroArch +# 6 = PlayStation from RetroArch +# 7 = SuperNintendo from RetroArch +# 8 = DualShock from RetroArch +# 9 = Nintendo64 from RetroArch +TouchscreenKeysTheme=2 + +# Redefine gamepad keys to SDL keysyms, button order is: +# A B X Y L1 R1 L2 R2 LThumb RThumb +RedefinedKeysGamepad="RETURN" + +# How long to show startup menu button, in msec, 0 to disable startup menu +StartupMenuButtonTimeout=0 + +# Menu items to hide from startup menu, available menu items: +# SettingsMenu.OkButton SettingsMenu.DummyMenu SettingsMenu.MainMenu SettingsMenuMisc.DownloadConfig SettingsMenuMisc.OptionalDownloadConfig SettingsMenuMisc.AudioConfig SettingsMenuMisc.VideoSettingsConfig SettingsMenuMisc.ShowReadme SettingsMenuMisc.GyroscopeCalibration SettingsMenuMisc.CommandlineConfig SettingsMenuMisc.ResetToDefaultsConfig SettingsMenuMouse.MouseConfigMainMenu SettingsMenuMouse.DisplaySizeConfig SettingsMenuMouse.LeftClickConfig SettingsMenuMouse.RightClickConfig SettingsMenuMouse.AdditionalMouseConfig SettingsMenuMouse.JoystickMouseConfig SettingsMenuMouse.TouchPressureMeasurementTool SettingsMenuMouse.CalibrateTouchscreenMenu SettingsMenuKeyboard.KeyboardConfigMainMenu SettingsMenuKeyboard.ScreenKeyboardSizeConfig SettingsMenuKeyboard.ScreenKeyboardDrawSizeConfig SettingsMenuKeyboard.ScreenKeyboardThemeConfig SettingsMenuKeyboard.ScreenKeyboardTransparencyConfig SettingsMenuKeyboard.RemapHwKeysConfig SettingsMenuKeyboard.RemapScreenKbConfig SettingsMenuKeyboard.ScreenGesturesConfig SettingsMenuKeyboard.CustomizeScreenKbLayout SettingsMenuKeyboard.ScreenKeyboardAdvanced +HiddenMenuOptions='' + +# Menu items to show at startup - this is Java code snippet, leave empty for default +# new SettingsMenuMisc.ShowReadme(), (AppUsesMouse \&\& \! ForceRelativeMouseMode \? new SettingsMenuMouse.DisplaySizeConfig(true) : new SettingsMenu.DummyMenu()), new SettingsMenuMisc.OptionalDownloadConfig(true), new SettingsMenuMisc.GyroscopeCalibration() +# Available menu items: +# SettingsMenu.OkButton SettingsMenu.DummyMenu SettingsMenu.MainMenu SettingsMenuMisc.DownloadConfig SettingsMenuMisc.OptionalDownloadConfig SettingsMenuMisc.AudioConfig SettingsMenuMisc.VideoSettingsConfig SettingsMenuMisc.ShowReadme SettingsMenuMisc.GyroscopeCalibration SettingsMenuMisc.CommandlineConfig SettingsMenuMisc.ResetToDefaultsConfig SettingsMenuMouse.MouseConfigMainMenu SettingsMenuMouse.DisplaySizeConfig SettingsMenuMouse.LeftClickConfig SettingsMenuMouse.RightClickConfig SettingsMenuMouse.AdditionalMouseConfig SettingsMenuMouse.JoystickMouseConfig SettingsMenuMouse.TouchPressureMeasurementTool SettingsMenuMouse.CalibrateTouchscreenMenu SettingsMenuKeyboard.KeyboardConfigMainMenu SettingsMenuKeyboard.ScreenKeyboardSizeConfig SettingsMenuKeyboard.ScreenKeyboardDrawSizeConfig SettingsMenuKeyboard.ScreenKeyboardThemeConfig SettingsMenuKeyboard.ScreenKeyboardTransparencyConfig SettingsMenuKeyboard.RemapHwKeysConfig SettingsMenuKeyboard.RemapScreenKbConfig SettingsMenuKeyboard.ScreenGesturesConfig SettingsMenuKeyboard.CustomizeScreenKbLayout SettingsMenuKeyboard.ScreenKeyboardAdvanced +FirstStartMenuOptions='' + +# Minimum amount of RAM application requires, in Mb, SDL will print warning to user if it's lower +AppMinimumRAM=0 + +# GCC version, or 'clang' for CLANG +NDK_TOOLCHAIN_VERSION= + +# Specify architectures to compile, 'all' or 'y' to compile for all architectures. +# Available architectures: armeabi armeabi-v7a x86 mips arm64-v8a +MultiABI='armeabi-v7a' + +# Optional shared libraries to compile - removing some of them will save space +# MP3 support by libMAD is encumbered by patents and libMAD is GPL-ed +# Available libraries: mad (GPL-ed!) sdl_mixer sdl_image sdl_ttf sdl_net sdl_blitpool sdl_gfx sdl_sound intl xml2 lua jpeg png ogg flac tremor vorbis freetype xerces curl theora fluidsynth lzma lzo2 mikmod openal timidity zzip bzip2 yaml-cpp python boost_date_time boost_filesystem boost_iostreams boost_program_options boost_regex boost_signals boost_system boost_thread glu avcodec avdevice avfilter avformat avresample avutil swscale swresample bzip2 +CompiledLibraries="sdl_image" + +# Application uses custom build script AndroidBuild.sh instead of Android.mk (y) or (n) +CustomBuildScript=n + +# Aditional CFLAGS for application +AppCflags='-O2' + +# Aditional C++-specific compiler flags for application, added after AppCflags +AppCppflags='' + +# Additional LDFLAGS for application +AppLdflags='' + +# If application has headers with the same name as system headers, this option tries to fix compiler flags to make it compilable +AppOverlapsSystemHeaders= + +# Build only following subdirs (empty will build all dirs, ignored with custom script) +AppSubdirsBuild='' + +# Exclude these files from build +AppBuildExclude='' + +# Application command line parameters, including app name as 0-th param +AppCmdline='' + +# Screen size is used by Google Play to prevent an app to be installed on devices with smaller screens +# Minimum screen size that application supports: (s)mall / (m)edium / (l)arge +MinimumScreenSize=s + +# Your AdMob Publisher ID, (n) if you don't want advertisements +AdmobPublisherId=n + +# Your AdMob test device ID, to receive a test ad +AdmobTestDeviceId= + +# Your AdMob banner size (BANNER/FULL_BANNER/LEADERBOARD/MEDIUM_RECTANGLE/SMART_BANNER/WIDE_SKYSCRAPER/FULL_WIDTH:Height/Width:AUTO_HEIGHT/Width:Height) +AdmobBannerSize= + +# Google Play Game Services application ID, required for cloud saves to work +GooglePlayGameServicesId= + diff --git a/project/jni/application/test-gles2/AndroidData/data.zip b/project/jni/application/test-gles2/AndroidData/data.zip new file mode 100644 index 0000000000000000000000000000000000000000..c197c2f0f232a0f09176022fd88a1114ccab6546 GIT binary patch literal 85130 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 rz-eG&XwtJ*vo`l-OM?& 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
6^Y*In39@G!r=GaA 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 NGBEUeF)}bP0027~_woP$ literal 0 HcmV?d00001 diff --git a/project/jni/application/test-gles2/Makefile b/project/jni/application/test-gles2/Makefile new file mode 100644 index 000000000..24974b1ea --- /dev/null +++ b/project/jni/application/test-gles2/Makefile @@ -0,0 +1,4 @@ + +sdl_hello: *.cpp + g++ -g3 -O0 -o $@ $? `sdl-config --cflags` `sdl-config --libs` -lGLESv2 -lSDL_image + unzip -o AndroidData/*.zip diff --git a/project/jni/application/test-gles2/icon.png b/project/jni/application/test-gles2/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ad30aedf682d20f308972fa37de16b6e45ba5e2d GIT binary patch literal 14646 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≠=G0ciX1p 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 +#include +#include + +#include + +#include +#include + +#ifdef __ANDROID__ +#include +#define printf(...) __android_log_print(ANDROID_LOG_INFO, "Test-GLES3", __VA_ARGS__) +#endif + +int screenWidth = 0; +int screenHeight = 0; + +GLuint drawTextureProgram = 0; +GLint drawTextureSamplerLocation = 0; + +static void initSDL() +{ + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK); + SDL_EnableUNICODE(1); + + screenWidth = SDL_GetVideoInfo()->current_w; + screenHeight = SDL_GetVideoInfo()->current_h; + + if ( ! SDL_SetVideoMode(screenWidth, screenHeight, 24, SDL_OPENGL|SDL_DOUBLEBUF|SDL_FULLSCREEN) ) + { + printf("Couldn't set GL video mode: %s\n", SDL_GetError()); + SDL_Quit(); + exit(2); + } +} + +static GLuint loadShader ( GLenum type, const char *shaderSrc ) +{ + GLuint shader; + GLint compiled; + + // Create the shader object + shader = glCreateShader ( type ); + + if ( shader == 0 ) + { + return 0; + } + + // Load the shader source + glShaderSource ( shader, 1, &shaderSrc, NULL ); + + // Compile the shader + glCompileShader ( shader ); + + // Check the compile status + glGetShaderiv ( shader, GL_COMPILE_STATUS, &compiled ); + + if ( !compiled ) + { + GLint infoLen = 0; + + glGetShaderiv ( shader, GL_INFO_LOG_LENGTH, &infoLen ); + + if ( infoLen > 1 ) + { + char *infoLog = (char *) malloc ( sizeof ( char ) * infoLen ); + + glGetShaderInfoLog ( shader, infoLen, NULL, infoLog ); + printf ( "===========> Error compiling shader:\n"); + printf ( "===========> %s\n", infoLog ); + printf ( "===========> %s\n", shaderSrc ); + + free ( infoLog ); + } + + glDeleteShader ( shader ); + return 0; + } + + return shader; + +} + +static GLuint loadProgram ( const char *vertShaderSrc, const char *fragShaderSrc ) +{ + GLuint vertexShader; + GLuint fragmentShader; + GLuint programObject; + GLint linked; + + // Load the vertex/fragment shaders + vertexShader = loadShader ( GL_VERTEX_SHADER, vertShaderSrc ); + + if ( vertexShader == 0 ) + { + return 0; + } + + fragmentShader = loadShader ( GL_FRAGMENT_SHADER, fragShaderSrc ); + + if ( fragmentShader == 0 ) + { + glDeleteShader ( vertexShader ); + return 0; + } + + // Create the program object + programObject = glCreateProgram ( ); + + if ( programObject == 0 ) + { + return 0; + } + + glAttachShader ( programObject, vertexShader ); + glAttachShader ( programObject, fragmentShader ); + + // Link the program + glLinkProgram ( programObject ); + + // Check the link status + glGetProgramiv ( programObject, GL_LINK_STATUS, &linked ); + + if ( !linked ) + { + GLint infoLen = 0; + + glGetProgramiv ( programObject, GL_INFO_LOG_LENGTH, &infoLen ); + + if ( infoLen > 1 ) + { + char *infoLog = (char *) malloc ( sizeof ( char ) * infoLen ); + + glGetProgramInfoLog ( programObject, infoLen, NULL, infoLog ); + printf ( "===========> Error linking program:\n" ); + printf ( "===========> %s\n", infoLog ); + + free ( infoLog ); + } + + glDeleteProgram ( programObject ); + return 0; + } + + // Free up no longer needed shader resources + glDeleteShader ( vertexShader ); + glDeleteShader ( fragmentShader ); + + return programObject; +} + +static void initShaders() +{ + char *vertexShaderStr = NULL; + asprintf( &vertexShaderStr, + "#version 100 \n" + "const highp float screenWidthDiv = 2.0 / %d.0; \n" + "const highp float screenHeightDiv = 2.0 / %d.0; \n" + "attribute highp vec2 a_position; \n" + "attribute highp vec2 a_texCoord; \n" + "attribute lowp vec4 a_color; \n" + "varying highp vec2 v_texCoord; \n" + "varying lowp vec4 v_color; \n" + "void main() \n" + "{ \n" + " gl_Position = vec4( \n" + " a_position.x * screenWidthDiv - 1.0, \n" + " 1.0 - a_position.y * screenHeightDiv, \n" + " 0, 1); \n" + " v_texCoord = a_texCoord; \n" + " v_color = a_color; \n" + "} \n" + , screenWidth, screenHeight ); + + const char *fragmentShaderStr = + "#version 100 \n" + "varying highp vec2 v_texCoord; \n" + "varying lowp vec4 v_color; \n" + "uniform sampler2D s_texture; \n" + "void main() \n" + "{ \n" + " gl_FragColor = texture2D( s_texture, v_texCoord ) * v_color; \n" + "} \n"; + + //printf("initShaders(): vertex shader:\n%s\n", vertexShaderStr); + //printf("initShaders(): fragment shader:\n%s\n", fragmentShaderStr); + + // Load the shaders and get a linked program object + drawTextureProgram = loadProgram ( vertexShaderStr, fragmentShaderStr ); + if (drawTextureProgram == 0) + { + printf("Could not init shaders\n"); + SDL_Quit(); + exit(2); + } + + free(vertexShaderStr); + + // Get the sampler location + drawTextureSamplerLocation = glGetUniformLocation ( drawTextureProgram, "s_texture" ); +} + +static void initGL() +{ + glViewport(0, 0, screenWidth, screenHeight); + + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + glDisable(GL_DEPTH_TEST); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glActiveTexture ( GL_TEXTURE0 ); + + initShaders(); +} + +static void clearScreen() +{ + 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 +} + +struct Sprite { + + + Sprite(const char * path, GLint wrap = GL_CLAMP_TO_EDGE) + { + w = h = texture = 0; + imagePath = path; + textureWrap = wrap; + loadTexture(); + } + + bool loadTexture() + { + SDL_Surface *pic; + + pic = IMG_Load(imagePath.c_str()); + + if (!pic) + { + printf("Error: image %s cannot be loaded\n", imagePath.c_str()); + return false; + } + if (pic->format->BitsPerPixel != 32 && pic->format->BitsPerPixel != 24) + { + printf("Error: image %s is %dbpp - it should be either 24bpp or 32bpp, images with palette are not supported\n", imagePath.c_str(), pic->format->BitsPerPixel); + SDL_FreeSurface(pic); + return false; + } + + GLenum glFormat = (pic->format->BitsPerPixel == 32 ? GL_RGBA : GL_RGB); + w = pic->w; + h = pic->h; + // GLES3 always supports non-power-of-two textures, no need to recalculate texture dimensions + + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glTexImage2D(GL_TEXTURE_2D, 0, glFormat, w, h, 0, glFormat, GL_UNSIGNED_BYTE, pic->pixels); + SDL_FreeSurface(pic); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureWrap); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureWrap); + + return true; + } + + void draw(GLfloat x, GLfloat y, GLfloat width, GLfloat height, + GLfloat tex_x1 = 0.0f, GLfloat tex_y1 = 0.0f, GLfloat tex_x2 = 1.0f, GLfloat tex_y2 = 1.0f, + GLfloat r = 1.0f, GLfloat g = 1.0f, GLfloat b = 1.0f, GLfloat a = 1.0f) + { + if (texture == 0) + return; + + glUseProgram( drawTextureProgram ); + + GLfloat coords[] = { + x, y, // Position 0 + tex_x1, tex_y1, // TexCoord 0 + x, y + height, // Position 1 + tex_x1, tex_y2, // TexCoord 1 + x + width, y + height, // Position 2 + tex_x2, tex_y2, // TexCoord 2 + x + width, y, // Position 3 + tex_x2, tex_y1 // TexCoord 3 + }; + GLfloat color[] = { r, g, b, a, r, g, b, a, r, g, b, a, r, g, b, a }; + + // Load the vertex position + glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof ( GLfloat ), coords ); + // Load the texture coordinate + glVertexAttribPointer( 1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof ( GLfloat ), &coords[2] ); + glVertexAttribPointer( 2, 4, GL_FLOAT, GL_FALSE, 0, color ); + + glEnableVertexAttribArray( 0 ); + glEnableVertexAttribArray( 1 ); + glEnableVertexAttribArray( 2 ); + + glActiveTexture( GL_TEXTURE0 ); + glBindTexture( GL_TEXTURE_2D, texture ); + + glUniform1i ( drawTextureSamplerLocation, 0 ); + + glDrawArrays ( GL_TRIANGLE_FAN, 0, 4 ); + } + + void draw(GLfloat x, GLfloat y) + { + draw(x, y, w, h); + } + + void drawColor(GLfloat x, GLfloat y, GLfloat width, GLfloat height, GLfloat r, GLfloat g, GLfloat b, GLfloat a) + { + draw(x, y, width, height, 0.0f, 0.0f, 1.0f, 1.0f, r, g, b, a); + } + + void drawColor(GLfloat x, GLfloat y, GLfloat r, GLfloat g, GLfloat b, GLfloat a) + { + drawColor(x, y, w, h, r, g, b, a); + } + + GLuint texture; + int w, h; + std::string imagePath; + GLint textureWrap; +}; + +int +main(int argc, char *argv[]) +{ + initSDL(); + initGL(); + + std::vector sprites; + sprites.push_back(Sprite("test.png")); + sprites.push_back(Sprite("element0.png")); + sprites.push_back(Sprite("element1.png")); + sprites.push_back(Sprite("element2.png")); + sprites.push_back(Sprite("element3.png")); + //sprites.push_back(Sprite("stars.jpg", GL_REPEAT)); // Repeating tiles + sprites.push_back(Sprite("stars.jpg", GL_MIRRORED_REPEAT)); // Looks nice + + float coords[][2] = { {0, 0}, + {200, 0}, + {300, 200}, + {400, 300} }; + + float pulse = 1.0f, pulseChange = 0.01f; + int anim = 1; + + while ( ! SDL_GetKeyState(NULL)[SDLK_ESCAPE] ) // Exit by pressing Back button + { + // clearScreen(); // Do not clear screen, we will fill the screens with tiled background image instead + sprites[5].draw(0, 0, screenWidth, screenHeight, + coords[0][0] / sprites[5].w * 3, + coords[0][0] / sprites[5].h * 2, + coords[0][0] / sprites[5].w * 3 + (float) screenWidth / sprites[5].w, + coords[0][0] / sprites[5].h * 2 + (float) screenHeight / sprites[5].h); + + sprites[1].drawColor(coords[0][0], coords[0][1], pulse, pulse, 1.0f - pulse, 1.0f); + sprites[2].draw(coords[1][0], coords[1][1], sprites[2].w * pulse * 4, sprites[2].h * pulse * 4); + sprites[3].draw(coords[2][0], coords[2][1], sprites[3].w * pulse * 4, sprites[3].h * 2); + sprites[4].draw(coords[3][0], coords[3][1], sprites[4].w, sprites[4].h * pulse * 2); + + sprites[1].draw(screenWidth / 2.0f - sprites[1].w / 2.0f, screenHeight / 2.0f - sprites[1].h / 2.0f); + sprites[1].draw(0 - sprites[1].w / 2.0f, 0 - sprites[1].h / 2.0f); + sprites[1].draw(screenWidth - sprites[1].w / 2.0f, screenHeight - sprites[1].h / 2.0f); + sprites[1].draw(0 - sprites[1].w / 2.0f, screenHeight - sprites[1].h / 2.0f); + sprites[1].draw(screenWidth - sprites[1].w / 2.0f, 0 - sprites[1].h / 2.0f); + + int mouseX = 0, mouseY = 0, buttons = 0; + buttons = SDL_GetMouseState(&mouseX, &mouseY); + sprites[0].drawColor(mouseX - sprites[0].w/2, mouseY - sprites[0].h/2, 1.0f, 1.0f, 1.0f, pulse); + + SDL_GL_SwapBuffers(); + SDL_Event event; + while( SDL_PollEvent(&event) ) + { + if(event.type == SDL_VIDEORESIZE) + { + // GL context was destroyed - reload all textures + initGL(); + for(int i = 0; i < sprites.size(); i++) + sprites[i].loadTexture(); + } + + if(event.type == SDL_KEYUP || event.type == SDL_KEYDOWN) + { + printf("SDL key event: evt %s state %s key %4d %12s scancode %4d mod %2d unicode %d", event.type == SDL_KEYUP ? "UP " : "DOWN" , event.key.state == SDL_PRESSED ? "PRESSED " : "RELEASED", (int)event.key.keysym.sym, SDL_GetKeyName(event.key.keysym.sym), (int)event.key.keysym.scancode, (int)event.key.keysym.mod, (int)event.key.keysym.unicode); + if(event.key.keysym.sym == SDLK_ESCAPE) + return 0; + } + } + + // Some kinda animation + + pulse += pulseChange; + if(pulse >= 1.0f) + pulseChange = -0.01f; + if(pulse <= 0) + pulseChange = 0.01f; + + for(int i = 0; i < 4; i++) + { + coords[i][0] += anim; + coords[i][1] += anim; + } + if( coords[0][0] < 0 ) + anim = 1; + if( coords[3][1] > screenHeight ) + anim = -1; + } + + SDL_Quit(); + return 0; +}