第三章:C4droid编程:SDL2_01:创建窗口
2022-11-09 04:24 作者:PonyLinuxlife | 我要投稿
Hello,Everyone,今天我来讲解开源多媒体层SDL/SDL2。
SDL/SDL2 是跨平台的多媒体层,通过对opengl库和其他库的包装,降低了开发难度。SDL/SDL2可以在Windows,MacOS,Linux,iOS,Android甚至是嵌入式Linux都可以使用,同时还有很多开源软件也在使用,比如ffmpeg的ffplay,游戏My Little Investigations 等。
打开c4droid,创建工程文件夹,并在该文件夹中创建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;//错误则退出
}
/* 创建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 参数
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 参数
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------------大小可调窗口
SDL_WINDOW_MINIMIZED------------最小化窗口
SDL_WINDOW_MAXIMIZED------------最大化窗口
SDL_WINDOW_INPUT_GRABBED--------创建后获得接收输入
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)
编写完这两个文件后,更改编译设置

还有一点,上面的环境变量可以不用改,首次创建工程会有自带的环境变量参数,只需更改编译模式,Make 命令,可执行文件名称和运行模式。
返回主界面,将标签页转到Makefile 上,点击Compile ,编译完成没有报错点击Run,
运行效果是显示无内容的窗口3秒,然后退出。