Switching to C
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1,3 +1,4 @@ | |||||||
| # Godot 4+ specific ignores | # Godot 4+ specific ignores | ||||||
| .godot/ | .godot/ | ||||||
| /Assets/ | /Assets/ | ||||||
|  | /game/tenchu | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								Godot/.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,2 @@ | |||||||
|  | # Normalize EOL for all files that Git considers text files. | ||||||
|  | * text=auto eol=lf | ||||||
							
								
								
									
										2
									
								
								Godot/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,2 @@ | |||||||
|  | # Godot 4+ specific ignores | ||||||
|  | .godot/ | ||||||
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB | 
| Before Width: | Height: | Size: 1021 B After Width: | Height: | Size: 1021 B | 
| Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB | 
| Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB | 
							
								
								
									
										1
									
								
								Godot/icon.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | |||||||
|  | <svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 813 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H447l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c3 34 55 34 58 0v-86c-3-34-55-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg> | ||||||
| After Width: | Height: | Size: 950 B | 
							
								
								
									
										37
									
								
								Godot/icon.svg.import
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,37 @@ | |||||||
|  | [remap] | ||||||
|  | 
 | ||||||
|  | importer="texture" | ||||||
|  | type="CompressedTexture2D" | ||||||
|  | uid="uid://daioe8i125w8d" | ||||||
|  | path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" | ||||||
|  | metadata={ | ||||||
|  | "vram_texture": false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [deps] | ||||||
|  | 
 | ||||||
|  | source_file="res://icon.svg" | ||||||
|  | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] | ||||||
|  | 
 | ||||||
|  | [params] | ||||||
|  | 
 | ||||||
|  | compress/mode=0 | ||||||
|  | compress/high_quality=false | ||||||
|  | compress/lossy_quality=0.7 | ||||||
|  | compress/hdr_compression=1 | ||||||
|  | compress/normal_map=0 | ||||||
|  | compress/channel_pack=0 | ||||||
|  | mipmaps/generate=false | ||||||
|  | mipmaps/limit=-1 | ||||||
|  | roughness/mode=0 | ||||||
|  | roughness/src_normal="" | ||||||
|  | process/fix_alpha_border=true | ||||||
|  | process/premult_alpha=false | ||||||
|  | process/normal_map_invert_y=false | ||||||
|  | process/hdr_as_srgb=false | ||||||
|  | process/hdr_clamp_exposure=false | ||||||
|  | process/size_limit=0 | ||||||
|  | detect_3d/compress_to=1 | ||||||
|  | svg/scale=1.0 | ||||||
|  | editor/scale_with_editor_scale=false | ||||||
|  | editor/convert_colors_with_editor_theme=false | ||||||
							
								
								
									
										2
									
								
								game/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,2 @@ | |||||||
|  | /libs/glad/glad.o | ||||||
|  | /opengl | ||||||
							
								
								
									
										20
									
								
								game/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,20 @@ | |||||||
|  | P=tenchu | ||||||
|  | OBJECTS= | ||||||
|  | CFLAGS=-g -Wall -Wextra -O0 | ||||||
|  | LDLIBS=-lglfw -lOpenGL  | ||||||
|  | INCLUDES=-I./libs/glad/include/ | ||||||
|  | CC=gcc | ||||||
|  | RM=rm -vf | ||||||
|  | 
 | ||||||
|  | .PHONY: build | ||||||
|  | build: clean | ||||||
|  | 	$(CC) $(CFLAGS) $(LDLIBS) $(INCLUDES) libs/glad/glad.o tenchu.c -o $(P) | ||||||
|  | 
 | ||||||
|  | .PHONY: run | ||||||
|  | run: build | ||||||
|  | 	./$(P) | ||||||
|  | 
 | ||||||
|  | .PHONY: clean | ||||||
|  | clean: | ||||||
|  | 	$(RM) $(P) | ||||||
|  | 
 | ||||||
							
								
								
									
										21
									
								
								game/README.org
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,21 @@ | |||||||
|  | #+OPTIONS: toc:nil | ||||||
|  | 
 | ||||||
|  | * Installing on Fedora | ||||||
|  | #+begin_src shell | ||||||
|  | sudo dnf install glfw-devl glad | ||||||
|  | #+end_src | ||||||
|  | 
 | ||||||
|  | Then run the glad command | ||||||
|  | 
 | ||||||
|  | #+begin_src shell | ||||||
|  | glad --profile core --generator c --out-path libs/glad | ||||||
|  | #+end_src | ||||||
|  | 
 | ||||||
|  | For faster compilation, compile glad; | ||||||
|  | 
 | ||||||
|  | #+begin_src shell | ||||||
|  | gcc -Ilibs/glad/include/ -c libs/glad/src/glad.c | ||||||
|  | #+end_src | ||||||
|  | * Terms | ||||||
|  | VBO - vertex buffer objects | ||||||
|  | VAO - vertex array object | ||||||
							
								
								
									
										311
									
								
								game/libs/glad/include/KHR/khrplatform.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,311 @@ | |||||||
|  | #ifndef __khrplatform_h_ | ||||||
|  | #define __khrplatform_h_ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | ** Copyright (c) 2008-2018 The Khronos Group Inc. | ||||||
|  | ** | ||||||
|  | ** Permission is hereby granted, free of charge, to any person obtaining a | ||||||
|  | ** copy of this software and/or associated documentation files (the | ||||||
|  | ** "Materials"), to deal in the Materials without restriction, including | ||||||
|  | ** without limitation the rights to use, copy, modify, merge, publish, | ||||||
|  | ** distribute, sublicense, and/or sell copies of the Materials, and to | ||||||
|  | ** permit persons to whom the Materials are furnished to do so, subject to | ||||||
|  | ** the following conditions: | ||||||
|  | ** | ||||||
|  | ** The above copyright notice and this permission notice shall be included | ||||||
|  | ** in all copies or substantial portions of the Materials. | ||||||
|  | ** | ||||||
|  | ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||||||
|  | ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||||||
|  | ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||||||
|  | ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||||||
|  | ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||||||
|  | ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||||||
|  | ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | /* Khronos platform-specific types and definitions.
 | ||||||
|  |  * | ||||||
|  |  * The master copy of khrplatform.h is maintained in the Khronos EGL | ||||||
|  |  * Registry repository at https://github.com/KhronosGroup/EGL-Registry
 | ||||||
|  |  * The last semantic modification to khrplatform.h was at commit ID: | ||||||
|  |  *      67a3e0864c2d75ea5287b9f3d2eb74a745936692 | ||||||
|  |  * | ||||||
|  |  * Adopters may modify this file to suit their platform. Adopters are | ||||||
|  |  * encouraged to submit platform specific modifications to the Khronos | ||||||
|  |  * group so that they can be included in future versions of this file. | ||||||
|  |  * Please submit changes by filing pull requests or issues on | ||||||
|  |  * the EGL Registry repository linked above. | ||||||
|  |  * | ||||||
|  |  * | ||||||
|  |  * See the Implementer's Guidelines for information about where this file | ||||||
|  |  * should be located on your system and for more details of its use: | ||||||
|  |  *    http://www.khronos.org/registry/implementers_guide.pdf
 | ||||||
|  |  * | ||||||
|  |  * This file should be included as | ||||||
|  |  *        #include <KHR/khrplatform.h> | ||||||
|  |  * by Khronos client API header files that use its types and defines. | ||||||
|  |  * | ||||||
|  |  * The types in khrplatform.h should only be used to define API-specific types. | ||||||
|  |  * | ||||||
|  |  * Types defined in khrplatform.h: | ||||||
|  |  *    khronos_int8_t              signed   8  bit | ||||||
|  |  *    khronos_uint8_t             unsigned 8  bit | ||||||
|  |  *    khronos_int16_t             signed   16 bit | ||||||
|  |  *    khronos_uint16_t            unsigned 16 bit | ||||||
|  |  *    khronos_int32_t             signed   32 bit | ||||||
|  |  *    khronos_uint32_t            unsigned 32 bit | ||||||
|  |  *    khronos_int64_t             signed   64 bit | ||||||
|  |  *    khronos_uint64_t            unsigned 64 bit | ||||||
|  |  *    khronos_intptr_t            signed   same number of bits as a pointer | ||||||
|  |  *    khronos_uintptr_t           unsigned same number of bits as a pointer | ||||||
|  |  *    khronos_ssize_t             signed   size | ||||||
|  |  *    khronos_usize_t             unsigned size | ||||||
|  |  *    khronos_float_t             signed   32 bit floating point | ||||||
|  |  *    khronos_time_ns_t           unsigned 64 bit time in nanoseconds | ||||||
|  |  *    khronos_utime_nanoseconds_t unsigned time interval or absolute time in | ||||||
|  |  *                                         nanoseconds | ||||||
|  |  *    khronos_stime_nanoseconds_t signed time interval in nanoseconds | ||||||
|  |  *    khronos_boolean_enum_t      enumerated boolean type. This should | ||||||
|  |  *      only be used as a base type when a client API's boolean type is | ||||||
|  |  *      an enum. Client APIs which use an integer or other type for | ||||||
|  |  *      booleans cannot use this as the base type for their boolean. | ||||||
|  |  * | ||||||
|  |  * Tokens defined in khrplatform.h: | ||||||
|  |  * | ||||||
|  |  *    KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. | ||||||
|  |  * | ||||||
|  |  *    KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. | ||||||
|  |  *    KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. | ||||||
|  |  * | ||||||
|  |  * Calling convention macros defined in this file: | ||||||
|  |  *    KHRONOS_APICALL | ||||||
|  |  *    KHRONOS_APIENTRY | ||||||
|  |  *    KHRONOS_APIATTRIBUTES | ||||||
|  |  * | ||||||
|  |  * These may be used in function prototypes as: | ||||||
|  |  * | ||||||
|  |  *      KHRONOS_APICALL void KHRONOS_APIENTRY funcname( | ||||||
|  |  *                                  int arg1, | ||||||
|  |  *                                  int arg2) KHRONOS_APIATTRIBUTES; | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) | ||||||
|  | #   define KHRONOS_STATIC 1 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*-------------------------------------------------------------------------
 | ||||||
|  |  * Definition of KHRONOS_APICALL | ||||||
|  |  *------------------------------------------------------------------------- | ||||||
|  |  * This precedes the return type of the function in the function prototype. | ||||||
|  |  */ | ||||||
|  | #if defined(KHRONOS_STATIC) | ||||||
|  |     /* If the preprocessor constant KHRONOS_STATIC is defined, make the
 | ||||||
|  |      * header compatible with static linking. */ | ||||||
|  | #   define KHRONOS_APICALL | ||||||
|  | #elif defined(_WIN32) | ||||||
|  | #   define KHRONOS_APICALL __declspec(dllimport) | ||||||
|  | #elif defined (__SYMBIAN32__) | ||||||
|  | #   define KHRONOS_APICALL IMPORT_C | ||||||
|  | #elif defined(__ANDROID__) | ||||||
|  | #   define KHRONOS_APICALL __attribute__((visibility("default"))) | ||||||
|  | #else | ||||||
|  | #   define KHRONOS_APICALL | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*-------------------------------------------------------------------------
 | ||||||
|  |  * Definition of KHRONOS_APIENTRY | ||||||
|  |  *------------------------------------------------------------------------- | ||||||
|  |  * This follows the return type of the function  and precedes the function | ||||||
|  |  * name in the function prototype. | ||||||
|  |  */ | ||||||
|  | #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) | ||||||
|  |     /* Win32 but not WinCE */ | ||||||
|  | #   define KHRONOS_APIENTRY __stdcall | ||||||
|  | #else | ||||||
|  | #   define KHRONOS_APIENTRY | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*-------------------------------------------------------------------------
 | ||||||
|  |  * Definition of KHRONOS_APIATTRIBUTES | ||||||
|  |  *------------------------------------------------------------------------- | ||||||
|  |  * This follows the closing parenthesis of the function prototype arguments. | ||||||
|  |  */ | ||||||
|  | #if defined (__ARMCC_2__) | ||||||
|  | #define KHRONOS_APIATTRIBUTES __softfp | ||||||
|  | #else | ||||||
|  | #define KHRONOS_APIATTRIBUTES | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*-------------------------------------------------------------------------
 | ||||||
|  |  * basic type definitions | ||||||
|  |  *-----------------------------------------------------------------------*/ | ||||||
|  | #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Using <stdint.h> | ||||||
|  |  */ | ||||||
|  | #include <stdint.h> | ||||||
|  | typedef int32_t                 khronos_int32_t; | ||||||
|  | typedef uint32_t                khronos_uint32_t; | ||||||
|  | typedef int64_t                 khronos_int64_t; | ||||||
|  | typedef uint64_t                khronos_uint64_t; | ||||||
|  | #define KHRONOS_SUPPORT_INT64   1 | ||||||
|  | #define KHRONOS_SUPPORT_FLOAT   1 | ||||||
|  | /*
 | ||||||
|  |  * To support platform where unsigned long cannot be used interchangeably with | ||||||
|  |  * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. | ||||||
|  |  * Ideally, we could just use (u)intptr_t everywhere, but this could result in | ||||||
|  |  * ABI breakage if khronos_uintptr_t is changed from unsigned long to | ||||||
|  |  * unsigned long long or similar (this results in different C++ name mangling). | ||||||
|  |  * To avoid changes for existing platforms, we restrict usage of intptr_t to | ||||||
|  |  * platforms where the size of a pointer is larger than the size of long. | ||||||
|  |  */ | ||||||
|  | #if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) | ||||||
|  | #if __SIZEOF_POINTER__ > __SIZEOF_LONG__ | ||||||
|  | #define KHRONOS_USE_INTPTR_T | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #elif defined(__VMS ) || defined(__sgi) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Using <inttypes.h> | ||||||
|  |  */ | ||||||
|  | #include <inttypes.h> | ||||||
|  | typedef int32_t                 khronos_int32_t; | ||||||
|  | typedef uint32_t                khronos_uint32_t; | ||||||
|  | typedef int64_t                 khronos_int64_t; | ||||||
|  | typedef uint64_t                khronos_uint64_t; | ||||||
|  | #define KHRONOS_SUPPORT_INT64   1 | ||||||
|  | #define KHRONOS_SUPPORT_FLOAT   1 | ||||||
|  | 
 | ||||||
|  | #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Win32 | ||||||
|  |  */ | ||||||
|  | typedef __int32                 khronos_int32_t; | ||||||
|  | typedef unsigned __int32        khronos_uint32_t; | ||||||
|  | typedef __int64                 khronos_int64_t; | ||||||
|  | typedef unsigned __int64        khronos_uint64_t; | ||||||
|  | #define KHRONOS_SUPPORT_INT64   1 | ||||||
|  | #define KHRONOS_SUPPORT_FLOAT   1 | ||||||
|  | 
 | ||||||
|  | #elif defined(__sun__) || defined(__digital__) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Sun or Digital | ||||||
|  |  */ | ||||||
|  | typedef int                     khronos_int32_t; | ||||||
|  | typedef unsigned int            khronos_uint32_t; | ||||||
|  | #if defined(__arch64__) || defined(_LP64) | ||||||
|  | typedef long int                khronos_int64_t; | ||||||
|  | typedef unsigned long int       khronos_uint64_t; | ||||||
|  | #else | ||||||
|  | typedef long long int           khronos_int64_t; | ||||||
|  | typedef unsigned long long int  khronos_uint64_t; | ||||||
|  | #endif /* __arch64__ */ | ||||||
|  | #define KHRONOS_SUPPORT_INT64   1 | ||||||
|  | #define KHRONOS_SUPPORT_FLOAT   1 | ||||||
|  | 
 | ||||||
|  | #elif 0 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Hypothetical platform with no float or int64 support | ||||||
|  |  */ | ||||||
|  | typedef int                     khronos_int32_t; | ||||||
|  | typedef unsigned int            khronos_uint32_t; | ||||||
|  | #define KHRONOS_SUPPORT_INT64   0 | ||||||
|  | #define KHRONOS_SUPPORT_FLOAT   0 | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Generic fallback | ||||||
|  |  */ | ||||||
|  | #include <stdint.h> | ||||||
|  | typedef int32_t                 khronos_int32_t; | ||||||
|  | typedef uint32_t                khronos_uint32_t; | ||||||
|  | typedef int64_t                 khronos_int64_t; | ||||||
|  | typedef uint64_t                khronos_uint64_t; | ||||||
|  | #define KHRONOS_SUPPORT_INT64   1 | ||||||
|  | #define KHRONOS_SUPPORT_FLOAT   1 | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Types that are (so far) the same on all platforms | ||||||
|  |  */ | ||||||
|  | typedef signed   char          khronos_int8_t; | ||||||
|  | typedef unsigned char          khronos_uint8_t; | ||||||
|  | typedef signed   short int     khronos_int16_t; | ||||||
|  | typedef unsigned short int     khronos_uint16_t; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Types that differ between LLP64 and LP64 architectures - in LLP64, | ||||||
|  |  * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears | ||||||
|  |  * to be the only LLP64 architecture in current use. | ||||||
|  |  */ | ||||||
|  | #ifdef KHRONOS_USE_INTPTR_T | ||||||
|  | typedef intptr_t               khronos_intptr_t; | ||||||
|  | typedef uintptr_t              khronos_uintptr_t; | ||||||
|  | #elif defined(_WIN64) | ||||||
|  | typedef signed   long long int khronos_intptr_t; | ||||||
|  | typedef unsigned long long int khronos_uintptr_t; | ||||||
|  | #else | ||||||
|  | typedef signed   long  int     khronos_intptr_t; | ||||||
|  | typedef unsigned long  int     khronos_uintptr_t; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if defined(_WIN64) | ||||||
|  | typedef signed   long long int khronos_ssize_t; | ||||||
|  | typedef unsigned long long int khronos_usize_t; | ||||||
|  | #else | ||||||
|  | typedef signed   long  int     khronos_ssize_t; | ||||||
|  | typedef unsigned long  int     khronos_usize_t; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if KHRONOS_SUPPORT_FLOAT | ||||||
|  | /*
 | ||||||
|  |  * Float type | ||||||
|  |  */ | ||||||
|  | typedef          float         khronos_float_t; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if KHRONOS_SUPPORT_INT64 | ||||||
|  | /* Time types
 | ||||||
|  |  * | ||||||
|  |  * These types can be used to represent a time interval in nanoseconds or | ||||||
|  |  * an absolute Unadjusted System Time.  Unadjusted System Time is the number | ||||||
|  |  * of nanoseconds since some arbitrary system event (e.g. since the last | ||||||
|  |  * time the system booted).  The Unadjusted System Time is an unsigned | ||||||
|  |  * 64 bit value that wraps back to 0 every 584 years.  Time intervals | ||||||
|  |  * may be either signed or unsigned. | ||||||
|  |  */ | ||||||
|  | typedef khronos_uint64_t       khronos_utime_nanoseconds_t; | ||||||
|  | typedef khronos_int64_t        khronos_stime_nanoseconds_t; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Dummy value used to pad enum types to 32 bits. | ||||||
|  |  */ | ||||||
|  | #ifndef KHRONOS_MAX_ENUM | ||||||
|  | #define KHRONOS_MAX_ENUM 0x7FFFFFFF | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Enumerated boolean type | ||||||
|  |  * | ||||||
|  |  * Values other than zero should be considered to be true.  Therefore | ||||||
|  |  * comparisons should not be made against KHRONOS_TRUE. | ||||||
|  |  */ | ||||||
|  | typedef enum { | ||||||
|  |     KHRONOS_FALSE = 0, | ||||||
|  |     KHRONOS_TRUE  = 1, | ||||||
|  |     KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM | ||||||
|  | } khronos_boolean_enum_t; | ||||||
|  | 
 | ||||||
|  | #endif /* __khrplatform_h_ */ | ||||||
							
								
								
									
										15905
									
								
								game/libs/glad/include/glad/glad.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										9431
									
								
								game/libs/glad/src/glad.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										153
									
								
								game/tenchu.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,153 @@ | |||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <stdbool.h> | ||||||
|  | #include "glad/glad.h" | ||||||
|  | #include <GLFW/glfw3.h> | ||||||
|  | 
 | ||||||
|  | int SCREEN_WIDTH = 1024; | ||||||
|  | int SCREEN_HEIGHT = 768; | ||||||
|  | 
 | ||||||
|  | void checkCode(int code, char* errorMsg) { | ||||||
|  |     if (code < 0) { | ||||||
|  |         fprintf(stderr, "Application Error %i: %s\n", code, errorMsg); | ||||||
|  |         exit(1); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void* checkPtr(void *ptr, char* errorMsg) { | ||||||
|  |     if (ptr == NULL) { | ||||||
|  |         fprintf(stderr, "Application Error: %s\n", errorMsg); | ||||||
|  |         exit(1); | ||||||
|  |     } | ||||||
|  |     return ptr; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void checkShader(unsigned int shader, int statusFlag, char* actionName) { | ||||||
|  |     int success; | ||||||
|  |     glGetShaderiv(shader, statusFlag, &success); | ||||||
|  |     if (success < 0) { | ||||||
|  |         fprintf(stderr, "%s Error %i\n", actionName, success); | ||||||
|  |         exit(1); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void framebuffer_size_callback(GLFWwindow* window, int width, int height) | ||||||
|  | { | ||||||
|  |     (void)window; | ||||||
|  |     glViewport(0, 0, width, height); | ||||||
|  |     SCREEN_WIDTH = width; | ||||||
|  |     SCREEN_HEIGHT = height; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void processInput(GLFWwindow *window) | ||||||
|  | { | ||||||
|  |     if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) | ||||||
|  |         glfwSetWindowShouldClose(window, true); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const char* vertSrc = | ||||||
|  |     "#version 330 core\n" | ||||||
|  |     "layout (location = 0) in vec3 aPos;\n" | ||||||
|  |     "\n" | ||||||
|  |     "void main()\n" | ||||||
|  |     "{\n" | ||||||
|  |     "    gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n" | ||||||
|  |     "}\n"; | ||||||
|  | 
 | ||||||
|  | unsigned int compileVertShader() { | ||||||
|  |     unsigned int vertexShader; | ||||||
|  |     vertexShader = glCreateShader(GL_VERTEX_SHADER); | ||||||
|  |     glShaderSource(vertexShader, 1, &vertSrc, NULL); | ||||||
|  |     glCompileShader(vertexShader); | ||||||
|  |     checkShader(vertexShader, GL_COMPILE_STATUS, "Vertex Shader"); | ||||||
|  |     return vertexShader; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const char* fragSrc = | ||||||
|  |     "#version 330 core\n" | ||||||
|  |     "out vec4 FragColor;\n" | ||||||
|  |     "\n" | ||||||
|  |     "void main()\n" | ||||||
|  |     "{\n" | ||||||
|  |     "    FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n" | ||||||
|  |     "}\n"; | ||||||
|  | 
 | ||||||
|  | unsigned int compileFragShader() { | ||||||
|  |     unsigned int fragmentShader; | ||||||
|  |     fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); | ||||||
|  |     glShaderSource(fragmentShader, 1, &fragSrc, NULL); | ||||||
|  |     glCompileShader(fragmentShader); | ||||||
|  |     checkShader(fragmentShader, GL_COMPILE_STATUS, "Fragment Shader"); | ||||||
|  |     return fragmentShader; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main(void) { | ||||||
|  |     glfwInit(); | ||||||
|  | 
 | ||||||
|  |     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); | ||||||
|  |     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); | ||||||
|  |     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | ||||||
|  | 
 | ||||||
|  |     GLFWwindow* window = | ||||||
|  |         checkPtr(glfwCreateWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Learn OpenGL", NULL, NULL), | ||||||
|  |                  "Error creating GLFW window"); | ||||||
|  |     if (window == NULL) glfwTerminate(); | ||||||
|  | 
 | ||||||
|  |     glfwMakeContextCurrent(window); | ||||||
|  | 
 | ||||||
|  |     checkCode(gladLoadGLLoader((GLADloadproc)glfwGetProcAddress), "Error initializing GLAD"); | ||||||
|  | 
 | ||||||
|  |     glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); | ||||||
|  | 
 | ||||||
|  |     glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); | ||||||
|  | 
 | ||||||
|  |     unsigned int vertexShader = compileVertShader(); | ||||||
|  |     unsigned int fragmentShader = compileFragShader(); | ||||||
|  |     unsigned int shaderProgram = glCreateProgram(); | ||||||
|  |     glAttachShader(shaderProgram, vertexShader); | ||||||
|  |     glAttachShader(shaderProgram, fragmentShader); | ||||||
|  |     glLinkProgram(shaderProgram); | ||||||
|  |     checkShader(vertexShader, GL_LINK_STATUS, "Shader Program"); | ||||||
|  | 
 | ||||||
|  |     glDeleteShader(vertexShader); | ||||||
|  |     glDeleteShader(fragmentShader); | ||||||
|  | 
 | ||||||
|  |     float vertices[] = { | ||||||
|  |         -0.5f, -0.5f, 0.0f, | ||||||
|  |         0.5f, -0.5f, 0.0f, | ||||||
|  |         0.0f,  0.5f, 0.0f | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     unsigned int VBO, VAO; | ||||||
|  |     glGenVertexArrays(1, &VAO); | ||||||
|  |     glGenBuffers(1, &VBO); | ||||||
|  |     glBindVertexArray(VAO); | ||||||
|  |     glBindBuffer(GL_ARRAY_BUFFER, VBO); | ||||||
|  |     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); | ||||||
|  |     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); | ||||||
|  |     glEnableVertexAttribArray(0); | ||||||
|  | 
 | ||||||
|  |     glBindBuffer(GL_ARRAY_BUFFER, 0); | ||||||
|  |     glBindVertexArray(0); | ||||||
|  | 
 | ||||||
|  |     while (!glfwWindowShouldClose(window)) { | ||||||
|  |         processInput(window); | ||||||
|  | 
 | ||||||
|  |         glClearColor(0.2f, 0.3f, 0.3f, 1.0f); | ||||||
|  |         glClear(GL_COLOR_BUFFER_BIT); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         glUseProgram(shaderProgram); | ||||||
|  |         glBindVertexArray(VAO); | ||||||
|  |         glDrawArrays(GL_TRIANGLES, 0, 3); | ||||||
|  | 
 | ||||||
|  |         glfwSwapBuffers(window); | ||||||
|  |         glfwPollEvents(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     glDeleteVertexArrays(1, &VAO); | ||||||
|  |     glDeleteBuffers(1, &VBO); | ||||||
|  |     glDeleteProgram(shaderProgram); | ||||||
|  |     glfwTerminate(); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||