第三章:C4droid編程:SDL2_01:創(chuàng)建窗口
2022-11-09 04:24 作者:PonyLinuxlife | 我要投稿
Hello,Everyone,今天我來講解開源多媒體層SDL/SDL2。
SDL/SDL2 是跨平臺的多媒體層,通過對opengl庫和其他庫的包裝,降低了開發(fā)難度。SDL/SDL2可以在Windows,MacOS,Linux,iOS,Android甚至是嵌入式Linux都可以使用,同時還有很多開源軟件也在使用,比如ffmpeg的ffplay,游戲My Little Investigations 等。
打開c4droid,創(chuàng)建工程文件夾,并在該文件夾中創(chuàng)建Makefile和src/testsdl2.c,代碼如下:
src/testsdl2.c
/*
* File ? ? ?: testsdl2.c
* This file is test sdl2 project.
*
* Change Logs:
* Date ? ? ? ? ? Author ? ? ? Notes
* 2022-10-16 ? ? LinuxLife ? ?the first version
*/
#include "SDL2/SDL.h"
#include <stdlib.h>
int main(int argc, char *argv[])
{
SDL_Window *win = NULL;//窗口指針初始化為0
if (SDL_Init(SDL_INIT_EVERYTHING) < 0)//初始化所有組件
{
return 1;//錯誤則退出
}
? ?/* 創(chuàng)建640*480,位置0,0全屏窗口 */
win = SDL_CreateWindow("test", 0, 0, 640, 480, SDL_WINDOW_FULLSCREEN);
SDL_Delay(3000);//延時3000ms
SDL_DestroyWindow(win);//刪除窗口
SDL_Quit();//退出SDL2
return 0;//退出程序
}
SDL_Init 參數(shù)
int SDL_Init(Uint32 flags) /* flags: SDL_INIT_VIDEO------------------------視頻組件 SDL_INIT_EVENTS-----------------------事件處理組件 SDL_INIT_TIMER------------------------定時器組件 SDL_INIT_AUDIO------------------------音頻組件 SDL_INIT_JOYSTICK---------------------游戲桿組件,自動包含Event組件 SDL_INIT_HAPTIC-----------------------觸覺(力反饋)組件 SDL_INIT_GAMECONTROLLER---------------游戲控制組件,自動包含Joystick組件 SDL_INIT_EVERYTHING-------------------所有組件 return: =0:正常 <0:錯誤 */
SDL_CreateWindow 參數(shù)
SDL_Window* SDL_CreateWindow(
?const char* title,//窗口名稱
?int ? ? ? ? x,//窗口位置
?int ? ? ? ? y,//
?int ? ? ? ? w,//窗口大小
?int ? ? ? ? h,//
?Uint32 ? ? ?flags)
?/*
?flags:
?SDL_WINDOW_FULLSCREEN-----------全屏
?SDL_WINDOW_HIDDEN---------------不可見窗口
?SDL_WINDOW_BORDERLESS-----------無邊框窗口
?SDL_WINDOW_RESIZABLE------------大小可調(diào)窗口
?SDL_WINDOW_MINIMIZED------------最小化窗口
?SDL_WINDOW_MAXIMIZED------------最大化窗口
?SDL_WINDOW_INPUT_GRABBED--------創(chuàng)建后獲得接收輸入
?
?return:
?window指針
?*/ ?
Makefile
#-------------------------------------------------------------------------------
# File: Makefile
# This file is used for auto compiling C4droid project.
#
# Change Logs:
# Date ? ? ? ? ? Author ? ? ? Notes
# 2022-10-12 ? ? LinuxLife ? ?the first version
# ? 2022-11-04 ? ? LinuxLife ? ?repair linker return undefined function errors
# ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? change libs configuration
# ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? add droidc path and gcc path
#-------------------------------------------------------------------------------
#---------------------------------------
# C4droid path
#---------------------------------------
DROIDC_PATH ? ? ? := /data/user/0/com.n0n3m4.droidc/files/
DROIDC_GCC_PREFIX := $(DROIDC_PATH)gcc/aarch64-linux-android/
#---------------------------------------
# Project Name
#---------------------------------------
target ? ? ?:= test
#---------------------------------------
# Compiler option
#---------------------------------------
TOOLCHAIN := aarch64-linux-android-
CC ? ? ? ?:= $(TOOLCHAIN)gcc
AS ? ? ? ?:= $(TOOLCHAIN)as
LD ? ? ? ?:= $(CC)
CC_CONFIG := -pie -fpie
AS_CONFIG :=
LD_CONFIG := -pie -fpie
#---------------------------------------
# Libs option
#---------------------------------------
LIB_SDL2_CONFIG := -D_REENTRANT -L/data/user/0/com.n0n3m4.droidc/files/gcc/aarch64-linux-android/lib -Wl,--start-group,--no-undefined -shared -ltiff -ljpeg -lpng -lz -lfreetype -lsmpeg2 -lvorbisfile -lvorbis -logg -lstdc++ -ldl -lSDL2 -lGLESv1_CM -lGLESv2 -landroid -llog
LIB_SDL2_A_PATH :=
LIB_SDL2_H_PATH := $(DROIDC_GCC_PREFIX)include/SDL2
LIB_CONFIG := $(LIB_SDL2_CONFIG)
LIB_A_PATH := $(LIB_SDL2_A_PATH)
LIB_H_PATH := $(LIB_SDL2_H_PATH)
#---------------------------------------
# source path
#---------------------------------------
INCDIRS := src
SRCDIRS := src
#---------------------------------------
# get source files
#---------------------------------------
INCLUDE := $(patsubst %, -I %, $(INCDIRS))
# get files
CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))
# get files path
CFILENDIR ?:= $(notdir ?$(CFILES))
# get object files
COBJS ? ? ?:= $(patsubst %, %, $(CFILENDIR:.c=.o))
OBJS ? ? ? := $(COBJS)
VPATH ? ? ?:= $(SRCDIRS)
.PHONY: clean
#---------------------------------------
# start compiling
#---------------------------------------
$(target) : $(OBJS)
$(CC) $(CC_CONFIG) $(LIB_CONFIG) -o $(target) $(OBJS) $(LIB_A_PATH)
$(COBJS) : %.o : %.c
$(CC) $(CC_CONFIG) -I $(LIB_H_PATH) $(INCLUDE) -c -o $@ $<
#---------------------------------------
# clean object files
#---------------------------------------
clean:
rm *.o $(target)
編寫完這兩個文件后,更改編譯設(shè)置

還有一點,上面的環(huán)境變量可以不用改,首次創(chuàng)建工程會有自帶的環(huán)境變量參數(shù),只需更改編譯模式,Make 命令,可執(zhí)行文件名稱和運行模式。
返回主界面,將標(biāo)簽頁轉(zhuǎn)到Makefile 上,點擊Compile ,編譯完成沒有報錯點擊Run,
運行效果是顯示無內(nèi)容的窗口3秒,然后退出。
標(biāo)簽: