From ebccaedb937b0da4c835c58c3a34e36ab5306246 Mon Sep 17 00:00:00 2001 From: Luke Benstead <kazade@gmail.com> Date: Sun, 28 Mar 2021 14:33:56 +0100 Subject: [PATCH] Start restructuring and switching to CMake --- .gitignore | 1 + CMakeLists.txt | 30 ++++++++++ GL/platform.h | 7 +++ GL/platforms/sh4.c | 0 GL/platforms/sh4.h | 9 +++ GL/{ => platforms}/sh4_math.h | 0 GL/platforms/x86.c | 0 GL/platforms/x86.h | 4 ++ GL/private.h | 100 +++++++++++++++++++++++++++++++--- Makefile | 37 ------------- 10 files changed, 144 insertions(+), 44 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 GL/platform.h create mode 100644 GL/platforms/sh4.c create mode 100644 GL/platforms/sh4.h rename GL/{ => platforms}/sh4_math.h (100%) create mode 100644 GL/platforms/x86.c create mode 100644 GL/platforms/x86.h delete mode 100644 Makefile diff --git a/.gitignore b/.gitignore index c1b78b3..5134efd 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ dc-build.sh .buildconfig GL/version.h +build/* diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..7047c41 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 3.0) +project(GLdc) + +set( + SOURCES + GL/clip.c + GL/draw.c + GL/error.c + GL/flush.c + GL/fog.c + GL/framebuffer.c + GL/glu.c + GL/immediate.c + GL/lighting.c + GL/matrix.c + GL/profiler.c + GL/state.c + GL/texture.c + GL/util.c + GL/yalloc/yalloc.c +) + +if(PLATFORM_DREAMCAST) +set(SOURCES ${SOURCES} GL/platforms/sh4.c) +else() +set(SOURCES ${SOURCES} GL/platforms/x86.c) +endif() + +add_library(GLdc ${SOURCES}) + diff --git a/GL/platform.h b/GL/platform.h new file mode 100644 index 0000000..6beb6f9 --- /dev/null +++ b/GL/platform.h @@ -0,0 +1,7 @@ +#pragma once + +#ifdef __DREAMCAST__ +#include "platforms/sh4.h" +#else +#include "platforms/x86.h" +#endif diff --git a/GL/platforms/sh4.c b/GL/platforms/sh4.c new file mode 100644 index 0000000..e69de29 diff --git a/GL/platforms/sh4.h b/GL/platforms/sh4.h new file mode 100644 index 0000000..ce25f1c --- /dev/null +++ b/GL/platforms/sh4.h @@ -0,0 +1,9 @@ +#pragma once + +#include <dc/matrix.h> +#include <dc/pvr.h> +#include <dc/vec3f.h> +#include <dc/fmath.h> +#include <dc/matrix3d.h> + +#include "sh4_math.h" diff --git a/GL/sh4_math.h b/GL/platforms/sh4_math.h similarity index 100% rename from GL/sh4_math.h rename to GL/platforms/sh4_math.h diff --git a/GL/platforms/x86.c b/GL/platforms/x86.c new file mode 100644 index 0000000..e69de29 diff --git a/GL/platforms/x86.h b/GL/platforms/x86.h new file mode 100644 index 0000000..af268d9 --- /dev/null +++ b/GL/platforms/x86.h @@ -0,0 +1,4 @@ +#pragma once + +#define MATH_Fast_Divide(n, d) (n / d) +#define MATH_fmac(a, b, c) (a * b + c) diff --git a/GL/private.h b/GL/private.h index cf6f789..904686d 100644 --- a/GL/private.h +++ b/GL/private.h @@ -2,16 +2,12 @@ #define PRIVATE_H #include <stdint.h> -#include <dc/matrix.h> -#include <dc/pvr.h> -#include <dc/vec3f.h> -#include <dc/fmath.h> -#include <dc/matrix3d.h> + +#include "platform.h" #include "../include/gl.h" #include "../containers/aligned_vector.h" #include "../containers/named_array.h" -#include "sh4_math.h" extern void* memcpy4 (void *dest, const void *src, size_t count); @@ -90,9 +86,99 @@ typedef float Matrix4x4[16]; #endif typedef struct { - pvr_poly_hdr_t hdr; + uint32_t cmd; + uint32_t mode1; + uint32_t mode2; + uint32_t mode3; + uint32_t d1; + uint32_t d2; + uint32_t d3; + uint32_t d4; } PVRHeader; +typedef struct { + int list_type; /**< \brief Primitive list + \see pvr_lists */ + struct { + int alpha; /**< \brief Enable or disable alpha outside modifier + \see pvr_alpha_switch */ + int shading; /**< \brief Shading type + \see pvr_shading_types */ + int fog_type; /**< \brief Fog type outside modifier + \see pvr_fog_types */ + int culling; /**< \brief Culling mode + \see pvr_cull_modes */ + int color_clamp; /**< \brief Color clamp enable/disable outside modifier + \see pvr_colclamp_switch */ + int clip_mode; /**< \brief Clipping mode + \see pvr_clip_modes */ + int modifier_mode; /**< \brief Modifier mode */ + int specular; /**< \brief Offset color enable/disable outside modifier + \see pvr_offset_switch */ + int alpha2; /**< \brief Enable/disable alpha inside modifier + \see pvr_alpha_switch */ + int fog_type2; /**< \brief Fog type inside modifier + \see pvr_fog_types */ + int color_clamp2; /**< \brief Color clamp enable/disable inside modifier + \see pvr_colclamp_switch */ + } gen; /**< \brief General parameters */ + struct { + int src; /**< \brief Source blending mode outside modifier + \see pvr_blend_modes */ + int dst; /**< \brief Dest blending mode outside modifier + \see pvr_blend_modes */ + int src_enable; /**< \brief Source blending enable outside modifier + \see pvr_blend_switch */ + int dst_enable; /**< \brief Dest blending enable outside modifier + \see pvr_blend_switch */ + int src2; /**< \brief Source blending mode inside modifier + \see pvr_blend_modes */ + int dst2; /**< \brief Dest blending mode inside modifier + \see pvr_blend_modes */ + int src_enable2; /**< \brief Source blending mode inside modifier + \see pvr_blend_switch */ + int dst_enable2; /**< \brief Dest blending mode inside modifier + \see pvr_blend_switch */ + } blend; /**< \brief Blending parameters */ + struct { + int color; + int uv; + int modifier; + } fmt; + struct { + int comparison; + int write; + } depth; + struct { + int enable; + int filter; + int mipmap; + int mipmap_bias; + int uv_flip; + int uv_clamp; + int alpha; + int env; + int width; + int height; + int format; + void* base; + } txr; + struct { + int enable; + int filter; + int mipmap; + int mipmap_bias; + int uv_flip; + int uv_clamp; + int alpha; + int env; + int width; + int height; + int format; + void* base; + } txr2; +} PVRState; + typedef struct { unsigned int flags; /* Constant PVR_CMD_USERCLIP */ unsigned int d1, d2, d3; /* Ignored for this type */ diff --git a/Makefile b/Makefile deleted file mode 100644 index 0fa72f6..0000000 --- a/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -# KallistiOS ##version## -# -# kos-ports/libgl Makefile -# Copyright (C) 2013, 2014 Josh Pearson -# Copyright (C) 2014 Lawrence Sebald -# Copyright (C) 2020 Luke Benstead - -TARGET = libGLdc.a -OBJS = GL/draw.o GL/flush.o GL/framebuffer.o GL/immediate.o GL/lighting.o GL/state.o GL/texture.o GL/glu.o GL/version.h -OBJS += GL/matrix.o GL/fog.o GL/error.o GL/clip.o containers/stack.o containers/named_array.o containers/aligned_vector.o GL/profiler.o -OBJS += GL/yalloc/yalloc.o - -SUBDIRS = - -KOS_CFLAGS += -ffast-math -Ofast -Iinclude - -GL/version.h: - rm -f $@ - @printf '#pragma once\n#define GLDC_VERSION "$(shell git describe --abbrev=4 --dirty --always --tags)"\n' > $@ - -link: - $(KOS_AR) rcs $(TARGET) $(OBJS) - -build: GL/version.h $(OBJS) link - - -samples: build - $(KOS_MAKE) -C samples all - -defaultall: create_kos_link $(OBJS) subdirs linklib samples - -include $(KOS_BASE)/addons/Makefile.prefab - -# creates the kos link to the headers -create_kos_link: - rm -f ../include/GL - ln -s ../GLdc/include ../include/GL