commit
						1908d88fab
					
				| @ -0,0 +1,91 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| # Generates a simple GL/EGL extension function loader. | ||||
| # | ||||
| # The input is a .txt file, with each function to load on its own line. | ||||
| # If a line starts with a -, it is optional, and will not cause the loader | ||||
| # to fail if it can't load the function. You'll need to check if that function | ||||
| # is NULL before using it. | ||||
| 
 | ||||
| if [ $# -ne 2 ]; then | ||||
| 	exit 1 | ||||
| fi | ||||
| 
 | ||||
| SPEC=$1 | ||||
| OUT=$2 | ||||
| 
 | ||||
| BASE=$(basename "$SPEC" .txt) | ||||
| INCLUDE_GUARD=$(printf %s "$SPEC" | tr -c [:alnum:] _ | tr [:lower:] [:upper:]) | ||||
| 
 | ||||
| DECL="" | ||||
| DEFN="" | ||||
| LOADER="" | ||||
| 
 | ||||
| DECL_FMT='extern %s %s;' | ||||
| DEFN_FMT='%s %s;' | ||||
| LOADER_FMT='%s = (%s)eglGetProcAddress("%s");' | ||||
| CHECK_FMT='if (!%s) { | ||||
| 	wlr_log(L_ERROR, "Unable to load %s"); | ||||
| 	return false; | ||||
| }' | ||||
| 
 | ||||
| while read -r COMMAND; do | ||||
| 	[ ${COMMAND::1} = "-" ] | ||||
| 	OPTIONAL=$? | ||||
| 
 | ||||
| 	COMMAND=${COMMAND#-} | ||||
| 	if [ ${COMMAND: -2} = "WL" ]; then | ||||
| 		FUNC_PTR_FMT='PFN%s' | ||||
| 	else | ||||
| 		FUNC_PTR_FMT='PFN%sPROC' | ||||
| 	fi | ||||
| 
 | ||||
| 	FUNC_PTR=$(printf "$FUNC_PTR_FMT" "$COMMAND" | tr [:lower:] [:upper:]) | ||||
| 
 | ||||
| 	DECL="$DECL$(printf "\n$DECL_FMT" "$FUNC_PTR" "$COMMAND")" | ||||
| 	DEFN="$DEFN$(printf "\n$DEFN_FMT" "$FUNC_PTR" "$COMMAND")" | ||||
| 	LOADER="$LOADER$(printf "\n$LOADER_FMT" "$COMMAND" "$FUNC_PTR" "$COMMAND")" | ||||
| 
 | ||||
| 	if [ $OPTIONAL -ne 0 ]; then | ||||
| 		LOADER="$LOADER$(printf "\n$CHECK_FMT" "$COMMAND" "$COMMAND")" | ||||
| 	fi | ||||
| done < $SPEC | ||||
| 
 | ||||
| if [ ${OUT: -2} = '.h' ]; then | ||||
| 	cat > $OUT << EOF | ||||
| 	#ifndef $INCLUDE_GUARD | ||||
| 	#define $INCLUDE_GUARD | ||||
| 
 | ||||
| 	#include <stdbool.h> | ||||
| 
 | ||||
| 	#include <EGL/egl.h> | ||||
| 	#include <EGL/eglext.h> | ||||
| 	#include <EGL/eglmesaext.h> | ||||
| 	#include <GLES2/gl2.h> | ||||
| 	#include <GLES2/gl2ext.h> | ||||
| 
 | ||||
| 	bool load_$BASE(void); | ||||
| 	$DECL | ||||
| 
 | ||||
| 	#endif | ||||
| EOF | ||||
| elif [ ${OUT: -2} = '.c' ]; then | ||||
| 	cat > $OUT << EOF | ||||
| 	#include <wlr/util/log.h> | ||||
| 	#include "$BASE.h" | ||||
| 	$DEFN | ||||
| 
 | ||||
| 	bool load_$BASE(void) { | ||||
| 		static bool done = false; | ||||
| 		if (done) { | ||||
| 			return true; | ||||
| 		} | ||||
| 	$LOADER | ||||
| 
 | ||||
| 		done = true; | ||||
| 		return true; | ||||
| 	} | ||||
| EOF | ||||
| else | ||||
| 	exit 1 | ||||
| fi | ||||
| @ -0,0 +1,8 @@ | ||||
| eglGetPlatformDisplayEXT | ||||
| eglCreatePlatformWindowSurfaceEXT | ||||
| -eglCreateImageKHR | ||||
| -eglDestroyImageKHR | ||||
| -eglQueryWaylandBufferWL | ||||
| -eglBindWaylandDisplayWL | ||||
| -eglUnbindWaylandDisplayWL | ||||
| -glEGLImageTargetTexture2DOES | ||||
					Loading…
					
					
				
		Reference in new issue