欢迎光临散文网 会员登陆 & 注册

第三章: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秒,然后退出。


第三章:C4droid编程:SDL2_01:创建窗口的评论 (共 条)

分享到微博请遵守国家法律