From 6c5073e864d37890a587ccdb7929e36dd5a6009c Mon Sep 17 00:00:00 2001 From: aap Date: Thu, 27 Jul 2017 12:34:06 +0200 Subject: [PATCH] use premake to generate build config; removed unsupported code --- Make.common | 28 - Makefile | 11 - Makefile.mingw | 32 - Makefile.ps2 | 10 - librw.sln | 51 -- librw.vcxproj | 217 ----- premake5.lua | 61 ++ tools/dumprwtree/Makefile | 16 - tools/dumprwtree/dumprwtree.vcxproj | 235 ----- tools/gl/Makefile | 30 - tools/gl/Makefile.mingw | 22 - tools/gl/camera.cpp | 168 ---- tools/gl/camera.h | 37 - tools/gl/gl.h | 8 - tools/gl/glshader.cpp | 63 -- tools/gl/main.cpp | 373 -------- tools/gl/math.cpp | 1227 --------------------------- tools/gl/math/conversion.h | 93 -- tools/gl/math/dquat.h | 45 - tools/gl/math/mat3.h | 43 - tools/gl/math/mat4.h | 52 -- tools/gl/math/math.h | 21 - tools/gl/math/quat.h | 54 -- tools/gl/math/vec3.h | 40 - tools/gl/math/vec4.h | 39 - tools/gl/rwtest.h | 15 - tools/ps2/Makefile | 39 - tools/ps2/README.md | 14 - tools/ps2/defaultpipe.dsm | 95 --- tools/ps2/dma.cpp | 60 -- tools/ps2/dma.h | 131 --- tools/ps2/ee_regs.h | 204 ----- tools/ps2/gif.h | 63 -- tools/ps2/gs.cpp | 322 ------- tools/ps2/gs.h | 484 ----------- tools/ps2/light.vu | 94 -- tools/ps2/main.cpp | 285 ------- tools/ps2/math.cpp | 239 ------ tools/ps2/math.h | 37 - tools/ps2/mesh.cpp | 135 --- tools/ps2/mesh.h | 43 - tools/ps2/mips_regs.h | 40 - tools/ps2/ps2.h | 35 - tools/ps2/skinpipe.dsm | 96 --- tools/ps2/vu.dsm | 69 -- 45 files changed, 61 insertions(+), 5415 deletions(-) delete mode 100644 Make.common delete mode 100644 Makefile delete mode 100644 Makefile.mingw delete mode 100644 Makefile.ps2 delete mode 100644 librw.sln delete mode 100644 librw.vcxproj create mode 100755 premake5.lua delete mode 100644 tools/dumprwtree/Makefile delete mode 100644 tools/dumprwtree/dumprwtree.vcxproj delete mode 100755 tools/gl/Makefile delete mode 100755 tools/gl/Makefile.mingw delete mode 100755 tools/gl/camera.cpp delete mode 100755 tools/gl/camera.h delete mode 100755 tools/gl/gl.h delete mode 100755 tools/gl/glshader.cpp delete mode 100755 tools/gl/main.cpp delete mode 100755 tools/gl/math.cpp delete mode 100755 tools/gl/math/conversion.h delete mode 100755 tools/gl/math/dquat.h delete mode 100755 tools/gl/math/mat3.h delete mode 100755 tools/gl/math/mat4.h delete mode 100755 tools/gl/math/math.h delete mode 100755 tools/gl/math/quat.h delete mode 100755 tools/gl/math/vec3.h delete mode 100755 tools/gl/math/vec4.h delete mode 100755 tools/gl/rwtest.h delete mode 100755 tools/ps2/Makefile delete mode 100644 tools/ps2/README.md delete mode 100644 tools/ps2/defaultpipe.dsm delete mode 100755 tools/ps2/dma.cpp delete mode 100755 tools/ps2/dma.h delete mode 100755 tools/ps2/ee_regs.h delete mode 100755 tools/ps2/gif.h delete mode 100755 tools/ps2/gs.cpp delete mode 100755 tools/ps2/gs.h delete mode 100644 tools/ps2/light.vu delete mode 100755 tools/ps2/main.cpp delete mode 100755 tools/ps2/math.cpp delete mode 100755 tools/ps2/math.h delete mode 100755 tools/ps2/mesh.cpp delete mode 100755 tools/ps2/mesh.h delete mode 100755 tools/ps2/mips_regs.h delete mode 100755 tools/ps2/ps2.h delete mode 100644 tools/ps2/skinpipe.dsm delete mode 100644 tools/ps2/vu.dsm diff --git a/Make.common b/Make.common deleted file mode 100644 index bafdc12..0000000 --- a/Make.common +++ /dev/null @@ -1,28 +0,0 @@ -BUILDDIR=build-$(BUILD) -SRCDIR=src -SRC := $(wildcard $(SRCDIR)/*.cpp $(SRCDIR)/*/*.cpp) -OBJ := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$(SRC)) -DEP := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.d,$(SRC)) -INC := $(INC) -I/usr/local/include -# define render target, e.g. null -> -DRW_NULL -BUILDDEF := $(shell echo $(BUILD) | tr a-z A-Z | sed 's/^/-DRW_/') -CFLAGS := $(CFLAGS) $(BUILDDEF) - -default: $(TARGET) - -$(BUILDDIR)/%.o: $(SRCDIR)/%.cpp - @mkdir -p $(@D) - $(CXX) $(CFLAGS) $(INC) -c $< -o $@ - -$(BUILDDIR)/%.d: $(SRCDIR)/%.cpp - @mkdir -p $(@D) - $(CXX) -MM -MT '$(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$<)' $(CFLAGS) $(INC) $< > $@ - -clean: - rm -rf $(BUILDDIR) - -cleanall: - rm -rf $(BUILDDIR) - rm $(TARGET) - --include $(DEP) diff --git a/Makefile b/Makefile deleted file mode 100644 index 942c8bf..0000000 --- a/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# null, gl3, ps2, d3d9 -BUILD := null -TARGET := librw-$(BUILD).a -CFLAGS := -Wall -Wextra -g -fno-diagnostics-show-caret \ - -Wno-parentheses -Wno-invalid-offsetof \ - -Wno-unused-parameter -Wno-sign-compare - -include Make.common - -$(TARGET): $(OBJ) - ar scr $@ $(OBJ) diff --git a/Makefile.mingw b/Makefile.mingw deleted file mode 100644 index c047ee8..0000000 --- a/Makefile.mingw +++ /dev/null @@ -1,32 +0,0 @@ -# null, opengl -BUILD=null - -# e.g. null -> -DRW_NULL -BUILDDEF:=$(shell echo $(BUILD) | tr a-z A-Z | sed 's/^/-DRW_/') -BUILDDIR=build-$(BUILD) -SRCDIR=src -#SRC := $(patsubst %.cpp,$(SRCDIR)/%.cpp, rwbase.cpp clump.cpp\ -# geometry.cpp plugins.cpp pipeline.cpp\ -# ps2.cpp ogl.cpp xbox.cpp\ -# image.cpp gtaplg.cpp) -SRC := $(wildcard $(SRCDIR)/*.cpp) -OBJ := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$(SRC)) -DEP := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.d,$(SRC)) -CFLAGS=-Wall -Wextra -g -DGLEW_STATIC $(BUILDDEF) -Wno-parentheses #-Wconversion -LIB=librw-$(BUILD).a - -$(LIB): $(OBJ) - ar scr $@ $(OBJ) - -$(BUILDDIR)/%.o: $(SRCDIR)/%.cpp - @mkdir -p $(@D) - $(CXX) $(CFLAGS) -c $< -o $@ - -$(BUILDDIR)/%.d: $(SRCDIR)/%.cpp - @mkdir -p $(@D) - $(CXX) -MM -MT '$(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$<)' $(CFLAGS) $< > $@ - -clean: - rm -f $(BUILDDIR)/*.[od] - --include $(DEP) diff --git a/Makefile.ps2 b/Makefile.ps2 deleted file mode 100644 index 4895640..0000000 --- a/Makefile.ps2 +++ /dev/null @@ -1,10 +0,0 @@ -CXX=ee-g++ -BUILD := ps2 -TARGET := librw-$(BUILD).a -CFLAGS := -Wall -g -INC := -I$(PS2SDK)/ee/include -I$(PS2SDK)/common/include - -include Make.common - -$(TARGET): $(OBJ) - ar scr $@ $(OBJ) diff --git a/librw.sln b/librw.sln deleted file mode 100644 index 1d2fbad..0000000 --- a/librw.sln +++ /dev/null @@ -1,51 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "librw", "librw.vcxproj", "{30552BB0-3B19-49A4-ABF4-87CF68AF9E38}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dumprwtree", "tools\dumprwtree\dumprwtree.vcxproj", "{B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}" - ProjectSection(ProjectDependencies) = postProject - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38} = {30552BB0-3B19-49A4-ABF4-87CF68AF9E38} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug - null|Win32 = Debug - null|Win32 - Debug - null|x64 = Debug - null|x64 - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Debug - null|Win32.ActiveCfg = Debug - null|Win32 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Debug - null|Win32.Build.0 = Debug - null|Win32 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Debug - null|x64.ActiveCfg = Debug - null|x64 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Debug - null|x64.Build.0 = Debug - null|x64 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Debug|Win32.ActiveCfg = Debug|Win32 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Debug|Win32.Build.0 = Debug|Win32 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Debug|x64.ActiveCfg = Debug|x64 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Debug|x64.Build.0 = Debug|x64 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Release|Win32.ActiveCfg = Release|Win32 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Release|Win32.Build.0 = Release|Win32 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Release|x64.ActiveCfg = Release|x64 - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38}.Release|x64.Build.0 = Release|x64 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Debug - null|Win32.ActiveCfg = Debug - null|Win32 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Debug - null|Win32.Build.0 = Debug - null|Win32 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Debug - null|x64.ActiveCfg = Debug - null|x64 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Debug - null|x64.Build.0 = Debug - null|x64 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Debug|Win32.ActiveCfg = Debug|Win32 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Debug|Win32.Build.0 = Debug|Win32 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Debug|x64.ActiveCfg = Debug|x64 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Debug|x64.Build.0 = Debug|x64 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Release|Win32.ActiveCfg = Release|Win32 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Release|Win32.Build.0 = Release|Win32 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Release|x64.ActiveCfg = Release|x64 - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/librw.vcxproj b/librw.vcxproj deleted file mode 100644 index 26c0107..0000000 --- a/librw.vcxproj +++ /dev/null @@ -1,217 +0,0 @@ - - - - - Debug - null - Win32 - - - Debug - null - x64 - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - - - - - - - - {30552BB0-3B19-49A4-ABF4-87CF68AF9E38} - librw - 7.0 - - - - StaticLibrary - true - v140_xp - MultiByte - - - StaticLibrary - true - v140_xp - MultiByte - - - StaticLibrary - true - v140_xp - MultiByte - - - StaticLibrary - true - v140_xp - MultiByte - - - StaticLibrary - false - v140_xp - true - MultiByte - - - StaticLibrary - false - v140_xp - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - .lib - $(ProjectDir).\lib\$(Platform)\$(Configuration)\ - $(ProjectDir).\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - .lib - $(ProjectDir).\lib\$(Platform)\$(Configuration)\ - $(ProjectDir).\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - .lib - $(ProjectDir).\lib\$(Platform)\$(Configuration)\ - $(ProjectDir).\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - .lib - $(ProjectDir).\lib\$(Platform)\$(Configuration)\ - $(ProjectDir).\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - .lib - $(ProjectDir).\lib\$(Platform)\$(Configuration)\ - $(ProjectDir).\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - .lib - $(ProjectDir).\lib\$(Platform)\$(Configuration)\ - $(ProjectDir).\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - - Level3 - Disabled - true - _USING_V110_SDK71_;_CRT_SECURE_NO_WARNINGS;RW_D3D9;%(PreprocessorDefinitions) - MultiThreadedDebug - - - true - - - - - Level3 - Disabled - true - _USING_V110_SDK71_;_CRT_SECURE_NO_WARNINGS;RW_D3D9;%(PreprocessorDefinitions) - MultiThreadedDebug - - - true - - - - - Level3 - Disabled - true - _USING_V110_SDK71_;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - - - true - - - - - Level3 - Disabled - true - _USING_V110_SDK71_;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDebug - - - true - - - - - Level3 - MaxSpeed - true - true - true - _USING_V110_SDK71_;_CRT_SECURE_NO_WARNINGS;RW_D3D9;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - true - - - - - Level3 - MaxSpeed - true - true - true - _USING_V110_SDK71_;_CRT_SECURE_NO_WARNINGS;RW_D3D9;%(PreprocessorDefinitions) - - - MultiThreadedDLL - - - true - true - true - - - - - - \ No newline at end of file diff --git a/premake5.lua b/premake5.lua new file mode 100755 index 0000000..533f53d --- /dev/null +++ b/premake5.lua @@ -0,0 +1,61 @@ +workspace "librw" + location "build" + language "C++" + + configurations { "Release", "Debug" } + filter { "system:windows" } + configurations { "ReleaseStatic" } + platforms { "win-x86-null", "win-x86-gl3", "win-x86-d3d9", + "win-amd64-null", "win-amd64-gl3", "win-amd64-d3d9" } + filter { "system:linux" } + platforms { "linux-x86-null", "linux-x86-gl3", + "linux-amd64-null", "linux-amd64-gl3" } + -- TODO: ps2 + filter {} + + filter "configurations:Debug" + defines { "DEBUG" } + symbols "On" + filter "configurations:Release*" + defines { "NDEBUG" } + optimize "On" + filter "configurations:ReleaseStatic" + flags { "StaticRuntime" } + + filter { "platforms:*null" } + defines { "RW_NULL" } + filter { "platforms:*gl3" } + defines { "RW_GL3" } + filter { "platforms:*d3d9" } + defines { "RW_D3D9" } + filter { "platforms:*ps2" } + defines { "RW_PS2" } + + filter { "platforms:*amd64*" } + architecture "x86_64" + filter { "platforms:*x86*" } + architecture "x86" + + filter { "platforms:win*" } + system "windows" + filter { "platforms:linux*" } + system "linux" + filter {} + + Libdir = "lib/%{cfg.platform}/%{cfg.buildcfg}" + Bindir = "bin/%{cfg.platform}/%{cfg.buildcfg}" + +project "librw" + kind "StaticLib" + targetname "rw" + targetdir (Libdir) + files { "src/*.*" } + files { "src/*/*.*" } + +project "dumprwtree" + kind "ConsoleApp" + targetdir (Bindir) + files { "tools/dumprwtree/*" } + includedirs { "." } + libdirs { Libdir } + links { "librw" } \ No newline at end of file diff --git a/tools/dumprwtree/Makefile b/tools/dumprwtree/Makefile deleted file mode 100644 index 46c5f75..0000000 --- a/tools/dumprwtree/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# null, opengl -BUILD=null - -# e.g. null -> -DRW_NULL -BUILDDEF:=$(shell echo $(BUILD) | tr a-z A-Z | sed 's/^/-DRW_/') -SRC := dumprwtree.cpp -OUT := dumprwtree -INC := -I/usr/local/include -I../.. -CFLAGS=-Wall -Wextra -g $(BUILDDEF) -Wno-parentheses -Wno-write-strings #-Wconversion -LIB=../../librw-$(BUILD).a - -$(OUT): $(SRC) $(LIB) - $(CXX) $(CFLAGS) $(INC) $(SRC) $(LIB) -o $(OUT) - -clean: - rm -f $(OUT) diff --git a/tools/dumprwtree/dumprwtree.vcxproj b/tools/dumprwtree/dumprwtree.vcxproj deleted file mode 100644 index 85b84e9..0000000 --- a/tools/dumprwtree/dumprwtree.vcxproj +++ /dev/null @@ -1,235 +0,0 @@ - - - - - Debug - null - Win32 - - - Debug - null - x64 - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {B487F101-0C2B-4F99-A1E0-B0B0C0F3FE7E} - dumprwtree - 7.0 - - - - Application - true - v140_xp - MultiByte - - - Application - true - v140_xp - MultiByte - - - Application - true - v140_xp - MultiByte - - - Application - true - v140_xp - MultiByte - - - Application - false - v140_xp - true - MultiByte - - - Application - false - v140_xp - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - $(ProjectDir)..\..\bin\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)..\..\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - $(ProjectDir)..\..\bin\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)..\..\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - $(ProjectDir)..\..\bin\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)..\..\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - $(ProjectDir)..\..\bin\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)..\..\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - $(ProjectDir)..\..\bin\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)..\..\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - $(ProjectDir)..\..\bin\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)..\..\obj\$(ProjectName)\$(Platform)\$(Configuration)\ - - - - Level3 - Disabled - true - MultiThreadedDebug - ..\..\ - - - true - librw.lib;%(AdditionalDependencies) - ..\..\lib\$(Platform)\$(Configuration)\ - - - xcopy /Y "$(TargetPath)" "..\..\output\" - - - - - Level3 - Disabled - true - MultiThreadedDebug - ..\..\ - - - true - librw.lib;%(AdditionalDependencies) - ..\..\lib\$(Platform)\$(Configuration)\ - - - xcopy /Y "$(TargetPath)" "..\..\output\" - - - - - Level3 - Disabled - true - MultiThreadedDebug - ..\..\ - - - true - librw.lib;%(AdditionalDependencies) - ..\..\lib\$(Platform)\$(Configuration)\ - - - xcopy /Y "$(TargetPath)" "..\..\output\" - - - - - Level3 - Disabled - true - MultiThreadedDebug - ..\..\ - - - true - librw.lib;%(AdditionalDependencies) - ..\..\lib\$(Platform)\$(Configuration)\ - - - xcopy /Y "$(TargetPath)" "..\..\output\" - - - - - Level3 - MaxSpeed - true - true - true - MultiThreaded - ..\..\ - - - true - true - true - librw.lib;%(AdditionalDependencies) - ..\..\lib\$(Platform)\$(Configuration)\ - - - xcopy /Y "$(TargetPath)" "..\..\output\" - - - - - Level3 - MaxSpeed - true - true - true - MultiThreadedDLL - ..\..\ - - - true - true - true - librw.lib;%(AdditionalDependencies) - ..\..\lib\$(Platform)\$(Configuration)\ - - - xcopy /Y "$(TargetPath)" "..\..\output\" - - - - - - - - - \ No newline at end of file diff --git a/tools/gl/Makefile b/tools/gl/Makefile deleted file mode 100755 index 4984446..0000000 --- a/tools/gl/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -BUILDDIR = build -SRC = main.cpp glshader.cpp math.cpp camera.cpp -OBJ = $(patsubst %.cpp, $(BUILDDIR)/%.o, $(SRC)) -DEP = $(patsubst %.cpp, $(BUILDDIR)/%.d, $(SRC)) -RWDIR=$(HOME)/src/librw - -INC := -I/usr/local/include -LDLIBS=-L/usr/local/lib -pthread -lX11 -lXrandr -lXi -lXxf86vm -lGL -lGLEW -lm -STATICLIBS= $(RWDIR)/librw-opengl.a /usr/local/lib/libglfw3.a - -#LDLIBS=-pthread -lGL -lGLEW -lglfw -#STATICLIBS=$(RWDIR)/librw-opengl.a - -CFLAGS=-g -I$(RWDIR) -Wall -Wextra - -rwtest: $(OBJ) $(STATICLIBS) - $(CXX) $^ $(LDLIBS) -o $@ - -$(BUILDDIR)/%.o: %.cpp - @mkdir -p $(@D) - $(CXX) $(CFLAGS) $(INC) -c $< -o $@ - -$(BUILDDIR)/%.d: %.cpp - @mkdir -p $(@D) - $(CXX) -MM -MT '$(patsubst %.cpp,$(BUILDDIR)%.o,$<)' $(CFLAGS) $(INC) $< > $@ - -clean: - rm $(BUILDDIR)/* rwtest - --include $(DEP) diff --git a/tools/gl/Makefile.mingw b/tools/gl/Makefile.mingw deleted file mode 100755 index 2c8e7f6..0000000 --- a/tools/gl/Makefile.mingw +++ /dev/null @@ -1,22 +0,0 @@ -BUILDDIR = build -SRC = main.cpp glshader.cpp math.cpp camera.cpp -OBJ = $(patsubst %.cpp, $(BUILDDIR)/%.o, $(SRC)) -DEP = $(patsubst %.cpp, $(BUILDDIR)/%.d, $(SRC)) -RWDIR=$(HOME)/src/librw -LDLIBS=-static -lglfw3 -lglew32 -lopengl32 -lgdi32 -CFLAGS=-g -I$(RWDIR) -Wall -Wextra -DGLEW_STATIC - -rwtest: $(OBJ) $(RWDIR)/librw-opengl.a - $(CXX) $^ $(LDLIBS) -o $@ - -$(BUILDDIR)/%.o: %.cpp - @mkdir -p $(@D) - $(CXX) $(CFLAGS) -c $< -o $@ - -$(BUILDDIR)/%.d: %.cpp - @mkdir -p $(@D) - $(CXX) -MM -MT '$(patsubst %.cpp,$(BUILDDIR)%.o,$<)' $(CFLAGS) $< > $@ - -dep: $(DEP) - --include $(DEP) diff --git a/tools/gl/camera.cpp b/tools/gl/camera.cpp deleted file mode 100755 index 4e2b6f0..0000000 --- a/tools/gl/camera.cpp +++ /dev/null @@ -1,168 +0,0 @@ -#include "rwtest.h" - -using namespace std; - -void -Camera::look(void) -{ - projMat = Mat4::perspective(fov, aspectRatio, n, f); - viewMat = Mat4::lookat(position, target, up); - -// state->mat4(PMAT,true)->val = Mat4::perspective(fov, aspectRatio, n, f); -// Mat4 mv = Mat4::lookat(position, target, up); -// state->mat4(MVMAT, true)->val = mv; -// state->mat3(NORMALMAT, true)->val = Mat3(mv); -} - -void -Camera::setPosition(Vec3 q) -{ - position = q; -} - -Vec3 -Camera::getPosition(void) -{ - return position; -} - -void -Camera::setTarget(Vec3 q) -{ - position -= target - q; - target = q; -} - -Vec3 -Camera::getTarget(void) -{ - return target; -} - -float -Camera::getHeading(void) -{ - Vec3 dir = target - position; - float a = atan2(dir.y, dir.x)-PI/2.0f; - return local_up.z < 0.0f ? a-PI : a; -} - -void -Camera::turn(float yaw, float pitch) -{ - yaw /= 2.0f; - pitch /= 2.0f; - Quat dir = Quat(target - position); - Quat r(cos(yaw), 0.0f, 0.0f, sin(yaw)); - dir = r*dir*r.K(); - local_up = Vec3(r*Quat(local_up)*r.K()); - - Quat right = dir.wedge(Quat(local_up)).U(); - r = Quat(cos(pitch), right*sin(pitch)); - dir = r*dir*r.K(); - local_up = Vec3(right.wedge(dir).U()); - if(local_up.z >=0) up.z = 1; - else up.z = -1; - - target = position + Vec3(dir); -} - -void -Camera::orbit(float yaw, float pitch) -{ - yaw /= 2.0f; - pitch /= 2.0f; - Quat dir = Quat(target - position); - Quat r(cos(yaw), 0.0f, 0.0f, sin(yaw)); - dir = r*dir*r.K(); - local_up = Vec3(r*Quat(local_up)*r.K()); - - Quat right = dir.wedge(Quat(local_up)).U(); - r = Quat(cos(-pitch), right*sin(-pitch)); - dir = r*dir*r.K(); - local_up = Vec3(right.wedge(dir).U()); - if(local_up.z >=0) up.z = 1; - else up.z = -1; - - position = target - Vec3(dir); -} - -void -Camera::dolly(float dist) -{ - Vec3 dir = (target - position).normalized()*dist; - position += dir; - target += dir; -} - -void -Camera::zoom(float dist) -{ - Vec3 dir = target - position; - float curdist = dir.norm(); - if(dist >= curdist) - dist = curdist-0.01f; - dir = dir.normalized()*dist; - position += dir; -} - -void -Camera::pan(float x, float y) -{ - Vec3 dir = (target-position).normalized(); - Vec3 right = dir.cross(up).normalized(); -// Vec3 local_up = right.cross(dir).normalized(); - dir = right*x + local_up*y; - position += dir; - target += dir; - -} - -float -Camera::sqDistanceTo(Vec3 q) -{ - return (position - q).normsq(); -} - -float -Camera::distanceTo(Vec3 q) -{ - return (position - q).norm(); -} - -void -Camera::setFov(float f) -{ - fov = f; -} - -float -Camera::getFov(void) -{ - return fov; -} - -void -Camera::setAspectRatio(float r) -{ - aspectRatio = r; -} - -void -Camera::setNearFar(float n, float f) -{ - this->n = n; - this->f = f; -} - -Camera::Camera() -{ - position = Vec3(0.0f, 6.0f, 0.0f); - target = Vec3(0.0f, 0.0f, 0.0f); - local_up = up = Vec3(0.0f, 0.0f, 1.0f); - fov = 55.0f; - aspectRatio = 1.0f; - n = 0.1f; - f = 100.0f; -} - diff --git a/tools/gl/camera.h b/tools/gl/camera.h deleted file mode 100755 index 0a47263..0000000 --- a/tools/gl/camera.h +++ /dev/null @@ -1,37 +0,0 @@ -class Camera -{ -private: - Vec3 position; - Vec3 target; - Vec3 up; - Vec3 local_up; - - float fov, aspectRatio; - float n, f; - -public: - Mat4 projMat; - Mat4 viewMat; - - void setPosition(Vec3 q); - Vec3 getPosition(void); - void setTarget(Vec3 q); - Vec3 getTarget(void); - float getHeading(void); - - void turn(float yaw, float pitch); - void orbit(float yaw, float pitch); - void dolly(float dist); - void zoom(float dist); - void pan(float x, float y); - - void setFov(float f); - float getFov(void); - void setAspectRatio(float r); - void setNearFar(float n, float f); - - void look(void); - float distanceTo(Vec3 q); - float sqDistanceTo(Vec3 q); - Camera(void); -}; diff --git a/tools/gl/gl.h b/tools/gl/gl.h deleted file mode 100755 index d63ba4a..0000000 --- a/tools/gl/gl.h +++ /dev/null @@ -1,8 +0,0 @@ -namespace rw { -namespace gl { - -GLint linkProgram(GLint vertshader, GLint fragshader); -GLint compileShader(const char **src, int count, int type); - -} -} diff --git a/tools/gl/glshader.cpp b/tools/gl/glshader.cpp deleted file mode 100755 index e1d3502..0000000 --- a/tools/gl/glshader.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include "rwtest.h" - -namespace rw { -namespace gl { - -GLint -linkProgram(GLint vertshader, GLint fragshader) -{ - GLint success; - GLint len; - char *log; - - GLint program = glCreateProgram(); - assert(program != 0); - glBindAttribLocation(program, 0, "in_vertex"); - glBindAttribLocation(program, 1, "in_texCoord"); - glBindAttribLocation(program, 2, "in_normal"); - glBindAttribLocation(program, 3, "in_color"); - glBindAttribLocation(program, 4, "in_weight"); - glBindAttribLocation(program, 5, "in_indices"); - glBindAttribLocation(program, 6, "in_extraColor"); - glAttachShader(program, vertshader); - glAttachShader(program, fragshader); - glLinkProgram(program); - glGetProgramiv(program, GL_LINK_STATUS, &success); - if(!success){ - glGetProgramiv(program, GL_INFO_LOG_LENGTH, &len); - log = new char[len]; - glGetProgramInfoLog(program, len, NULL, log); - fprintf(stderr, "Link Error: %s\n", log); - delete[] log; - glDeleteProgram(program); - return 0; - } - return program; -} - -GLint -compileShader(const char **src, int count, int type) -{ - GLint success; - GLint len; - char *log; - - GLint shader = glCreateShader(type); - assert(shader != 0); - glShaderSource(shader, count, src, NULL); - glCompileShader(shader); - glGetShaderiv(shader, GL_COMPILE_STATUS, &success); - if(!success){ - glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &len); - log = new char[len]; - glGetShaderInfoLog(shader, len, NULL, log); - fprintf(stderr, "Shader Error: %s\n", log); - delete[] log; - glDeleteProgram(shader); - return 0; - } - return shader; -} - -} -} diff --git a/tools/gl/main.cpp b/tools/gl/main.cpp deleted file mode 100755 index 2f7dfd1..0000000 --- a/tools/gl/main.cpp +++ /dev/null @@ -1,373 +0,0 @@ -#include "rwtest.h" - -using namespace std; - -int screenWidth = 640, screenHeight= 480; -bool running = true; -Camera *camera; - -GLint program; -GLuint vbo; - -rw::Clump *clump; - -char *filename; - -void -renderAtomic(rw::Atomic *atomic) -{ - using namespace rw; - static GLenum prim[] = { - GL_TRIANGLES, GL_TRIANGLE_STRIP - }; - Geometry *geo = atomic->geometry; - atomic->getPipeline()->instance(atomic); - gl::InstanceDataHeader *inst = (gl::InstanceDataHeader*)geo->instData; - MeshHeader *meshHeader = geo->meshHeader; - - Frame *frm = atomic->frame; - frm->updateLTM(); - glUniformMatrix4fv(glGetUniformLocation(program, "worldMat"), - 1, GL_FALSE, frm->ltm); - - glVertexAttrib4f(3, 0.0f, 0.0f, 0.0f, 1.0f); - glVertexAttrib3f(2, 0.0f, 0.0f, 0.0f); - if(inst->vbo == 0 && inst->ibo == 0) - gl::uploadGeo(geo); - glBindBuffer(GL_ARRAY_BUFFER, inst->vbo); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, inst->ibo); - gl::setAttribPointers(inst); - - uint64 offset = 0; - for(uint32 i = 0; i < meshHeader->numMeshes; i++){ - Mesh *mesh = &meshHeader->mesh[i]; - Material *mat = mesh->material; - float color[4]; - uint8 *col = mat->color; - color[0] = col[0] / 255.0f; - color[1] = col[1] / 255.0f; - color[2] = col[2] / 255.0f; - color[3] = col[3] / 255.0f; - glUniform4fv(glGetUniformLocation(program, "matColor"), - 1, color); - rw::gl::Texture *tex =(rw::gl::Texture*)mat->texture; - if(tex) - tex->bind(0); - else - glBindTexture(GL_TEXTURE_2D, 0); - glDrawElements(prim[meshHeader->flags], mesh->numIndices, - GL_UNSIGNED_SHORT, (void*)offset); - offset += mesh->numIndices*2; - } - glDisableVertexAttribArray(0); - glDisableVertexAttribArray(1); - glDisableVertexAttribArray(2); - glDisableVertexAttribArray(3); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); -} - -void -render(void) -{ - static Mat4 worldMat(1.0f); - glUseProgram(program); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - camera->look(); - glUniformMatrix4fv(glGetUniformLocation(program, "projMat"), - 1, GL_FALSE, camera->projMat.cr); - glUniformMatrix4fv(glGetUniformLocation(program, "viewMat"), - 1, GL_FALSE, camera->viewMat.cr); - glUniformMatrix4fv(glGetUniformLocation(program, "worldMat"), - 1, GL_FALSE, worldMat.cr); - - glVertexAttrib3f(2, -0.5f, 0.5f, 0.70710f); - glBindBuffer(GL_ARRAY_BUFFER, vbo); - glEnableVertexAttribArray(0); - glEnableVertexAttribArray(3); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 28, (GLvoid*)0); - glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, 28, (GLvoid*)12); - glDrawArrays(GL_LINES, 0, 6); - glDisableVertexAttribArray(0); - glDisableVertexAttribArray(3); - - for(rw::uint32 i = 0; i < clump->numAtomics; i++){ - char *name = PLUGINOFFSET(char, clump->atomicList[i]->frame, - gta::nodeNameOffset); - if(strstr(name, "_dam") || strstr(name, "_vlo")) - continue; - renderAtomic(clump->atomicList[i]); - } -} - -void -init(void) -{ - glClearColor(0.3f, 0.3f, 0.3f, 1.0f); - glEnable(GL_DEPTH_TEST); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GEQUAL, 0.5f); - const char *shadersrc = - "#ifdef VERTEX\n" - "uniform mat4 projMat;" - "uniform mat4 viewMat;" - "uniform mat4 worldMat;" - "uniform vec4 matColor;" - "attribute vec3 in_vertex;" - "attribute vec2 in_texCoord;" - "attribute vec3 in_normal;" - "attribute vec4 in_color;" - "varying vec4 v_color;" - "varying vec2 v_texCoord;" - "vec3 lightdir = vec3(0.5, -0.5, -0.70710);" - "vec4 amblight = vec4(20, 20, 20, 0)/255;" - "void main()" - "{" - " gl_Position = projMat * viewMat * worldMat * vec4(in_vertex, 1.0);" - - " vec3 N = normalize(mat3(viewMat * worldMat) * in_normal);" - " vec3 P = vec3(viewMat * worldMat * vec4(in_vertex, 1.0));" - " vec3 V = normalize(-P);" - " float rim = 1.0 - max(dot(V, N), 0.0);" - - " vec3 n = mat3(worldMat) * in_normal;" - " float l = max(0.0, dot(n, -lightdir));" -// " l = l*0.4 + rim;" - " v_color = (in_color+vec4(l,l,l,0)+amblight)*matColor;" - " v_texCoord = in_texCoord;" - "}\n" - "#endif\n" - "#ifdef FRAGMENT\n" - "uniform sampler2D u_texture0;" - "varying vec4 v_color;" - "varying vec2 v_texCoord;" - "void main()" - "{" - " vec4 c0 = texture2D(u_texture0, v_texCoord/512.0);" - " gl_FragColor = v_color*c0;" - "}\n" - "#endif\n"; - const char *srcarr[] = { "#version 120\n", - "#define VERTEX\n", shadersrc }; - GLint vertshader = rw::gl::compileShader(srcarr, 3, GL_VERTEX_SHADER); - assert(vertshader != 0); - srcarr[1] = "#define FRAGMENT\n"; - GLint fragshader = rw::gl::compileShader(srcarr, 3, GL_FRAGMENT_SHADER); - assert(fragshader != 0); - program = rw::gl::linkProgram(vertshader, fragshader); - assert(program != 0); - - GLfloat vertarray[] = { - 0.0f, 0.0f, 0.0f, - 1.0f, 0.0f, 0.0f, 1.0f, - 1.0f, 0.0f, 0.0f, - 1.0f, 0.0f, 0.0f, 1.0f, - - 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 1.0f, - 0.0f, 1.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 1.0f, - - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 1.0f, - 0.0f, 0.0f, 1.0f, - 0.0f, 0.0f, 1.0f, 1.0f, - }; - glGenBuffers(1, &vbo); - glBindBuffer(GL_ARRAY_BUFFER, vbo); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertarray), - vertarray, GL_STATIC_DRAW); - glBindBuffer(GL_ARRAY_BUFFER, 0); - - camera = new Camera; - camera->setAspectRatio(1.0f*screenWidth/screenHeight); - camera->setNearFar(0.1f, 450.0f); - camera->setTarget(Vec3(0.0f, 0.0f, 0.0f)); -// camera->setPosition(Vec3(0.0f, 5.0f, 0.0f)); - camera->setPosition(Vec3(0.0f, -1.0f, 3.0f)); - - gta::attachPlugins(); - - rw::currentTexDictionary = new rw::TexDictionary; -// rw::Image::setSearchPath("/home/aap/gamedata/ps2/gtasa/models/gta3_archive/txd_extracted/"); -// rw::Image::setSearchPath("/home/aap/gamedata/ps2/gtavc/MODELS/gta3_archive/txd_extracted/"); - rw::Image::setSearchPath( - "/home/aap/gamedata/ps2/gta3/MODELS/gta3_archive/txd_extracted/;//home/aap/gamedata/ps2/gtavc/MODELS/gta3_archive/txd_extracted/;/home/aap/gamedata/ps2/gtasa/models/gta3_archive/txd_extracted/"); - //"D:\\rockstargames\\ps2\\gtavc\\MODELS\\gta3_archive\\txd_extracted\\;D:\\rockstargames\\ps2\\gtasa\\models\\gta3_archive\\txd_extracted\\"); - - printf("platform: %d\n", rw::platform); - - rw::StreamFile in; - if(in.open(filename, "rb") == NULL) - printf("couldn't open file\n"); - rw::findChunk(&in, rw::ID_CLUMP, NULL, NULL); - clump = rw::Clump::streamRead(&in); - assert(clump); - in.close(); -} - -void -keypress(GLFWwindow *w, int key, int scancode, int action, int mods) -{ - if(action != GLFW_PRESS) - return; - - switch(key){ - case 'Q': - case GLFW_KEY_ESCAPE: - running = false; - break; - } -} - -static int lastX, lastY; -static int clickX, clickY; -static bool isLDown, isMDown, isRDown; -static bool isShiftDown, isCtrlDown, isAltDown; - -void -mouseButton(GLFWwindow *w, int button, int action, int mods) -{ - double x, y; - glfwGetCursorPos(w, &x, &y); - if(action == GLFW_PRESS){ - lastX = clickX = x; - lastY = clickY = y; - if(button == GLFW_MOUSE_BUTTON_LEFT) - isLDown = true; - if(button == GLFW_MOUSE_BUTTON_MIDDLE) - isMDown = true; - if(button == GLFW_MOUSE_BUTTON_RIGHT) - isRDown = true; - }else if(action == GLFW_RELEASE){ - if(button == GLFW_MOUSE_BUTTON_LEFT) - isLDown = false; - if(button == GLFW_MOUSE_BUTTON_MIDDLE) - isMDown = false; - if(button == GLFW_MOUSE_BUTTON_RIGHT) - isRDown = false; - } -} - -void -mouseMotion(GLFWwindow *w, double x, double y) -{ - GLfloat dx, dy; - static int xoff = 0, yoff = 0; - static bool wrappedLast = false; - int width, height; - - glfwGetWindowSize(w, &width, &height); - - dx = float(lastX - x) / float(width); - dy = float(lastY - y) / float(height); - /* Wrap the mouse if it goes over the window border. - * Unfortunately, after glfwSetMousePos is done, there can be old - * events with an old mouse position, - * hence the check if the pointer was wrapped the last time. */ - if((isLDown || isMDown || isRDown) && - (x < 0 || y < 0 || x >= width || y >= height)){ - if(wrappedLast){ - dx = float(lastX-xoff - x) / float(width); - dy = float(lastY-yoff - y) / float(height); - } - xoff = yoff = 0; - while (x+xoff >= width) xoff -= width; - while (y+yoff >= height) yoff -= height; - while (x+xoff < 0) xoff += width; - while (y+yoff < 0) yoff += height; - glfwSetCursorPos(w, x+xoff, y+yoff); - wrappedLast = true; - }else{ - wrappedLast = false; - xoff = yoff = 0; - } - lastX = x+xoff; - lastY = y+yoff; - if(isLDown){ - if(isShiftDown) - camera->turn(dx*2.0f, dy*2.0f); - else - camera->orbit(dx*2.0f, -dy*2.0f); - } - if(isMDown){ - if(isShiftDown) - ; - else - camera->pan(dx*8.0f, -dy*8.0f); - } - if(isRDown){ - if(isShiftDown) - ; - else - camera->zoom(dx*12.0f); - } -} - -void -resize(GLFWwindow*, int width, int height) -{ - screenWidth = width; - screenHeight = height; - glViewport(0, 0, screenWidth, screenHeight); - camera->setAspectRatio(1.0f*screenWidth/screenHeight); -} - -void -closewindow(GLFWwindow*) -{ - running = false; -} - -int -main(int argc, char *argv[]) -{ - if(argc < 2) - return 1; - filename = argv[1]; - - if(!glfwInit()){ - fprintf(stderr, "Error: could not initialize GLFW\n"); - return 1; - } - GLFWwindow *window = glfwCreateWindow(screenWidth, screenHeight, - "OpenGL", 0, 0); - if(!window){ - fprintf(stderr, "Error: could not create GLFW window\n"); - glfwTerminate(); - return 1; - } - glfwMakeContextCurrent(window); - GLenum status = glewInit(); - if(status != GLEW_OK){ - fprintf(stderr, "Error: %s\n", glewGetErrorString(status)); - return 1; - } - if(!GLEW_VERSION_2_0){ - fprintf(stderr, "Error: OpenGL 2.0 needed\n"); - return 1; - } - - init(); - - glfwSetWindowSizeCallback(window, resize); - glfwSetWindowCloseCallback(window, closewindow); - glfwSetMouseButtonCallback(window, mouseButton); - glfwSetCursorPosCallback(window, mouseMotion); - glfwSetKeyCallback(window, keypress); - while(running){ - glfwPollEvents(); - isShiftDown = glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS; - isCtrlDown = glfwGetKey(window, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS; - isAltDown = glfwGetKey(window, GLFW_KEY_LEFT_ALT) == GLFW_PRESS; - - render(); - glfwSwapBuffers(window); - } - - glfwTerminate(); - return 0; -} diff --git a/tools/gl/math.cpp b/tools/gl/math.cpp deleted file mode 100755 index a1e3c76..0000000 --- a/tools/gl/math.cpp +++ /dev/null @@ -1,1227 +0,0 @@ -#include "math/math.h" - -/* - * Vec3 - */ - -std::ostream& -operator<<(std::ostream& of, const Vec3 &v) -{ - v.print(of); - return of; -} - - -Vec3::Vec3(void) - : x(0.0f), y(0.0f), z(0.0f) -{ -} - -Vec3::Vec3(float x, float y, float z) - : x(x), y(y), z(z) -{ -} - -Vec3::Vec3(float *v) - : x(v[0]), y(v[1]), z(v[2]) -{ -} - -float* -Vec3::ptr(void) -{ - return &x; -} - -Vec3 -Vec3::operator-(void) const -{ - return Vec3(-x, -y, -z); -} - -Vec3 -Vec3::operator+(const Vec3 &rhs) const -{ - return Vec3(this->x+rhs.x, this->y+rhs.y, this->z+rhs.z); -} - -Vec3 -Vec3::operator-(const Vec3 &rhs) const -{ - return Vec3(this->x-rhs.x, this->y-rhs.y, this->z-rhs.z); -} - -Vec3 -Vec3::operator*(float rhs) const -{ - return Vec3(this->x*rhs, this->y*rhs, this->z*rhs); -} - -Vec3 -Vec3::operator/(float rhs) const -{ - return Vec3(this->x/rhs, this->y/rhs, this->z/rhs); -} - -Vec3& -Vec3::operator+=(const Vec3 &rhs) -{ - *this = *this + rhs; - return *this; -} - -Vec3& -Vec3::operator-=(const Vec3 &rhs) -{ - *this = *this - rhs; - return *this; -} - -Vec3& -Vec3::operator*=(float rhs) -{ - *this = *this * rhs; - return *this; -} - -Vec3& -Vec3::operator/=(float rhs) -{ - *this = *this / rhs; - return *this; -} - -bool -Vec3::operator==(const Vec3 &rhs) const -{ - return (this->x == rhs.x) && - (this->y == rhs.y) && - (this->z == rhs.z); -} - -bool -Vec3::operator!=(const Vec3 &rhs) const -{ - return (this->x != rhs.x) || - (this->y != rhs.y) || - (this->z != rhs.z); -} - -float -Vec3::norm(void) const -{ - return sqrt(normsq()); -} - -float -Vec3::normsq(void) const -{ - return x*x + y*y + z*z; -} - -Vec3 -Vec3::normalized(void) const -{ - return Vec3(*this)/norm(); -} - -float -Vec3::dot(const Vec3 &rhs) const -{ - return this->x*rhs.x + this->y*rhs.y + this->z*rhs.z; -} - -Vec3 -Vec3::cross(const Vec3 &rhs) const -{ - return Vec3(this->y*rhs.z - this->z*rhs.y, - this->z*rhs.x - this->x*rhs.z, - this->x*rhs.y - this->y*rhs.x); -} - -void -Vec3::print(std::ostream &of) const -{ - of << "V3(" << x << ", " << y << ", " << z << ")"; -} - -/* - * Vec4 - */ - -std::ostream& -operator<<(std::ostream& of, const Vec4 &v) -{ - v.print(of); - return of; -} - - -Vec4::Vec4(void) - : x(0.0f), y(0.0f), z(0.0f), w(0.0f) -{ -} - -Vec4::Vec4(float x, float y, float z, float w) - : x(x), y(y), z(z), w(w) -{ -} - -Vec4::Vec4(float *v) - : x(v[0]), y(v[1]), z(v[2]), w(v[3]) -{ -} - -float* -Vec4::ptr(void) -{ - return &x; -} - -Vec4 -Vec4::operator-(void) const -{ - return Vec4(-x, -y, -z, -w); -} - -Vec4 -Vec4::operator+(const Vec4 &rhs) const -{ - return Vec4(this->x+rhs.x, this->y+rhs.y, this->z+rhs.z, this->w+rhs.w); -} - -Vec4 -Vec4::operator-(const Vec4 &rhs) const -{ - return Vec4(this->x-rhs.x, this->y-rhs.y, this->z-rhs.z, this->w-rhs.w); -} - -Vec4 -Vec4::operator*(float rhs) const -{ - return Vec4(this->x*rhs, this->y*rhs, this->z*rhs, this->w*rhs); -} - -Vec4 -Vec4::operator/(float rhs) const -{ - return Vec4(this->x/rhs, this->y/rhs, this->z/rhs, this->w/rhs); -} - -Vec4& -Vec4::operator+=(const Vec4 &rhs) -{ - *this = *this + rhs; - return *this; -} - -Vec4& -Vec4::operator-=(const Vec4 &rhs) -{ - *this = *this - rhs; - return *this; -} - -Vec4& -Vec4::operator*=(float rhs) -{ - *this = *this * rhs; - return *this; -} - -Vec4& -Vec4::operator/=(float rhs) -{ - *this = *this / rhs; - return *this; -} - -bool -Vec4::operator==(const Vec4 &rhs) const -{ - return (this->x == rhs.x) && - (this->y == rhs.y) && - (this->z == rhs.z) && - (this->w == rhs.w); -} - -bool -Vec4::operator!=(const Vec4 &rhs) const -{ - return (this->x != rhs.x) || - (this->y != rhs.y) || - (this->z != rhs.z) || - (this->w != rhs.w); -} - -float -Vec4::norm(void) const -{ - return sqrt(normsq()); -} - -float -Vec4::normsq(void) const -{ - return x*x + y*y + z*z + w*w; -} - -Vec4 -Vec4::normalized(void) const -{ - return Vec4(*this)/norm(); -} - -float -Vec4::dot(const Vec4 &rhs) const -{ - return this->x*rhs.x + this->y*rhs.y + this->z*rhs.z + this->w*rhs.w; -} - -void -Vec4::print(std::ostream &of) const -{ - of << "V4(" << x << ", " << y << ", " << z << ", " << w << ")"; -} - -/* - * Quat - */ - -std::ostream& -operator<<(std::ostream& of, const Quat &v) -{ - v.print(of); - return of; -} - - -Quat::Quat(void) - : w(0.0f), x(0.0f), y(0.0f), z(0.0f) -{ -} - -Quat::Quat(float w) - : w(w), x(0.0f), y(0.0f), z(0.0f) -{ -} - -Quat::Quat(float x, float y, float z) - : w(0.0f), x(x), y(y), z(z) -{ -} - -Quat::Quat(float w, float x, float y, float z) - : w(w), x(x), y(y), z(z) -{ -} - -float* -Quat::ptr(void) -{ - return &w; -} - -Quat -Quat::operator-(void) const -{ - return Quat(-w, -x, -y, -z); -} - -Quat -Quat::operator+(const Quat &rhs) const -{ - return Quat(this->w+rhs.w, this->x+rhs.x, this->y+rhs.y, this->z+rhs.z); -} - -Quat -Quat::operator-(const Quat &rhs) const -{ - return Quat(this->w-rhs.w, this->x-rhs.x, this->y-rhs.y, this->z-rhs.z); -} - -Quat -Quat::operator*(const Quat &rhs) const -{ - return Quat( - this->w*rhs.w - this->x*rhs.x - this->y*rhs.y - this->z*rhs.z, - this->w*rhs.x + this->x*rhs.w + this->y*rhs.z - this->z*rhs.y, - this->w*rhs.y + this->y*rhs.w + this->z*rhs.x - this->x*rhs.z, - this->w*rhs.z + this->z*rhs.w + this->x*rhs.y - this->y*rhs.x); -} - -Quat -Quat::operator*(float rhs) const -{ - return Quat(this->w*rhs, this->x*rhs, this->y*rhs, this->z*rhs); -} - -Quat -Quat::operator/(float rhs) const -{ - return Quat(this->w/rhs, this->x/rhs, this->y/rhs, this->z/rhs); -} - -Quat& -Quat::operator+=(const Quat &rhs) -{ - *this = *this + rhs; - return *this; -} - -Quat& -Quat::operator-=(const Quat &rhs) -{ - *this = *this - rhs; - return *this; -} - -Quat& -Quat::operator*=(const Quat &rhs) -{ - *this = *this * rhs; - return *this; -} - -Quat& -Quat::operator*=(float rhs) -{ - *this = *this * rhs; - return *this; -} - -Quat& -Quat::operator/=(float rhs) -{ - *this = *this / rhs; - return *this; -} - -bool -Quat::operator==(const Quat &rhs) const -{ - return (this->w == rhs.w) && - (this->x == rhs.x) && - (this->y == rhs.y) && - (this->z == rhs.z); -} - -bool -Quat::operator!=(const Quat &rhs) const -{ - return (this->w != rhs.w) || - (this->x != rhs.x) || - (this->y != rhs.y) || - (this->z != rhs.z); -} - -Quat -Quat::inv(void) const -{ - return K() / N(); -} - -Quat -Quat::K(void) const -{ - return Quat(w, -x, -y, -z); -} - -Quat -Quat::S(void) const -{ - return Quat(w); -} - -Quat -Quat::V(void) const -{ - return Quat(x, y, z); -} - -float -Quat::T(void) const -{ - return sqrt(N()); -} - -float -Quat::N(void) const -{ - return w*w + x*x + y*y + z*z; -} - -Quat -Quat::U(void) const -{ - return Quat(*this)/T(); -} - -Quat -Quat::wedge(const Quat &rhs) const -{ - return Quat(0.0f, - this->y*rhs.z - this->z*rhs.y, - this->z*rhs.x - this->x*rhs.z, - this->x*rhs.y - this->y*rhs.x); -} - -float -Quat::inner(const Quat &rhs) const -{ - return this->w*rhs.w + this->x*rhs.x + this->y*rhs.y + this->z*rhs.z; -} - -Quat -Quat::lerp(const Quat &q2, float t) const -{ - Quat q1 = *this; - float cos = q1.inner(q2); - if(cos < 0) - q1 = -q1; - return (q1*(1.0f - t) + q2*t).U(); -} - -Quat -Quat::slerp(const Quat &q2, float t) const -{ - Quat q1 = *this; - float cos = q1.inner(q2); - if(cos < 0){ - cos = -cos; - q1 = -q1; - } - float phi = acos(cos); - if(phi > 0.00001){ - float s = sin(phi); - q1 = q1*sin((1.0f-t)*phi)/s + q2*sin(t*phi)/s; - } - return q1; -} - -void -Quat::print(std::ostream &of) const -{ - of << "Q(" << w << ", " << x << ", " << y << ", " << z << ")"; -} - -/* - * Quat - */ - -std::ostream& -operator<<(std::ostream& of, const DQuat &v) -{ - v.print(of); - return of; -} - - -DQuat::DQuat(void) - : q1(), q2() -{ -} - -DQuat::DQuat(const Quat &q1, const Quat &q2) - : q1(q1), q2(q2) -{ -} - -DQuat -DQuat::operator-(void) const -{ - return DQuat(-q1, -q2); -} - -DQuat -DQuat::operator+(const DQuat &rhs) const -{ - return DQuat(this->q1+rhs.q1, this->q2+rhs.q2); -} - -DQuat -DQuat::operator-(const DQuat &rhs) const -{ - return DQuat(this->q1-rhs.q1, this->q2-rhs.q2); -} - -DQuat -DQuat::operator*(const DQuat &rhs) const -{ - return DQuat(this->q1*rhs.q1, this->q1*rhs.q2 + this->q2*rhs.q1); -} - -DQuat -DQuat::operator*(float rhs) const -{ - return DQuat(this->q1*rhs, this->q2*rhs); -} - -DQuat -DQuat::operator/(float rhs) const -{ - return DQuat(this->q1/rhs, this->q2/rhs); -} - -DQuat& -DQuat::operator+=(const DQuat &rhs) -{ - *this = *this + rhs; - return *this; -} - -DQuat& -DQuat::operator-=(const DQuat &rhs) -{ - *this = *this - rhs; - return *this; -} - -DQuat& -DQuat::operator*=(const DQuat &rhs) -{ - *this = *this * rhs; - return *this; -} - -DQuat& -DQuat::operator*=(float rhs) -{ - *this = *this * rhs; - return *this; -} - -DQuat& -DQuat::operator/=(float rhs) -{ - *this = *this / rhs; - return *this; -} - -bool -DQuat::operator==(const DQuat &rhs) const -{ - return (this->q1 == rhs.q1) && - (this->q2 == rhs.q2); -} - -bool -DQuat::operator!=(const DQuat &rhs) const -{ - return (this->q1 != rhs.q1) || - (this->q2 != rhs.q2); -} - -DQuat -DQuat::K(void) const -{ - return DQuat(q1.K(), -q2.K()); -} - -void -DQuat::print(std::ostream &of) const -{ - of << "DQ(" << q1 << ", " << q2 << ")"; -} - -/* - * Mat3 - */ - -std::ostream& -operator<<(std::ostream& of, const Mat3 &v) -{ - v.print(of); - return of; -} - -Mat3::Mat3(void) -{ - for(int i = 0; i < 3*3; i++) - cr[i] = 0.0f; -} - -Mat3::Mat3(float f) -{ - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) - e[i][j] = (i == j) ? f : 0.0f; -} - -Mat3::Mat3(float *f) -{ - for(int i = 0; i < 3*3; i++) - cr[i] = f[i]; -} - -Mat3::Mat3(float e00, float e10, float e20, - float e01, float e11, float e21, - float e02, float e12, float e22) -{ - e[0][0] = e00; e[1][0] = e10; e[2][0] = e20; - e[0][1] = e01; e[1][1] = e11; e[2][1] = e21; - e[0][2] = e02; e[1][2] = e12; e[2][2] = e22; -} - -float* -Mat3::ptr(void) -{ - return &e[0][0]; -} - -Mat3 -Mat3::rotation(float theta, const Vec3 &v) -{ - Mat3 m(1.0f); - float c = cos(theta); - float s = sin(theta); - m.e[0][0] = v.x*v.x*(1-c) + c; - m.e[1][0] = v.x*v.y*(1-c) - v.z*s; - m.e[2][0] = v.x*v.z*(1-c) + v.y*s; - - m.e[0][1] = v.y*v.x*(1-c) + v.z*s; - m.e[1][1] = v.y*v.y*(1-c) + c; - m.e[2][1] = v.y*v.z*(1-c) - v.x*s; - - m.e[0][2] = v.z*v.x*(1-c) - v.y*s; - m.e[1][2] = v.z*v.y*(1-c) + v.x*s; - m.e[2][2] = v.z*v.z*(1-c) + c; - return m; -} - -Mat3 -Mat3::scale(const Vec3 &v) -{ - Mat3 m(1.0f); - m.e[0][0] = v.x; - m.e[1][1] = v.y; - m.e[2][2] = v.z; - return m; -} - -Mat3 -Mat3::transpose(void) const -{ - float e[3][3]; - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++){ - e[j][i] = this->e[i][j]; - e[i][j] = this->e[j][i]; - } - return Mat3(&e[0][0]); -} - -Mat3 -Mat3::operator+(const Mat3 &rhs) const -{ - float e[9]; - for(int i = 0; i < 3*3; i++) - e[i] = this->cr[i] + rhs.cr[i]; - return Mat3(e); -} - -Mat3 -Mat3::operator-(const Mat3 &rhs) const -{ - float e[9]; - for(int i = 0; i < 3*3; i++) - e[i] = this->cr[i] - rhs.cr[i]; - return Mat3(e); -} - -Mat3 -Mat3::operator*(float rhs) const -{ - float e[9]; - for(int i = 0; i < 3*3; i++) - e[i] = this->cr[i]*rhs; - return Mat3(e); -} - -Mat3 -Mat3::operator/(float rhs) const -{ - float e[9]; - for(int i = 0; i < 3*3; i++) - e[i] = this->cr[i]/rhs; - return Mat3(e); -} - -Mat3 -Mat3::operator*(const Mat3 &rhs) const -{ - float e[3][3]; - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) - e[i][j] = this->e[0][j]*rhs.e[i][0] + - this->e[1][j]*rhs.e[i][1] + - this->e[2][j]*rhs.e[i][2]; - return Mat3(&e[0][0]); -} - -Vec3 -Mat3::operator*(const Vec3 &rhs) const -{ - float e[3]; - for(int i = 0; i < 3; i++) - e[i] = this->e[0][i]*rhs.x + - this->e[1][i]*rhs.y + - this->e[2][i]*rhs.z; - return Vec3(e); -} - -Mat3& -Mat3::operator+=(const Mat3 &rhs) -{ - *this = *this + rhs; - return *this; -} - -Mat3& -Mat3::operator-=(const Mat3 &rhs) -{ - *this = *this - rhs; - return *this; -} - -Mat3& -Mat3::operator*=(float rhs) -{ - *this = *this * rhs; - return *this; -} - -Mat3& -Mat3::operator/=(float rhs) -{ - *this = *this / rhs; - return *this; -} - -Mat3& -Mat3::operator*=(const Mat3 &rhs) -{ - *this = *this * rhs; - return *this; -} - -void -Mat3::print(std::ostream &of) const -{ - #define CM << ", " << - of << "M3(" << e[0][0] CM e[1][0] CM e[2][0] << std::endl; - of << " " << e[0][1] CM e[1][1] CM e[2][1] << std::endl; - of << " " << e[0][2] CM e[1][2] CM e[2][2] << ")"; - #undef CM -} - -/* - * Mat3 - */ - -std::ostream& -operator<<(std::ostream& of, const Mat4 &v) -{ - v.print(of); - return of; -} - -Mat4::Mat4(void) -{ - for(int i = 0; i < 4*4; i++) - cr[i] = 0.0f; -} - -Mat4::Mat4(float f) -{ - for(int i = 0; i < 4; i++) - for(int j = 0; j < 4; j++) - e[i][j] = (i == j) ? f : 0.0f; -} - -Mat4::Mat4(float *f) -{ - for(int i = 0; i < 4*4; i++) - cr[i] = f[i]; -} - -Mat4::Mat4(float e00, float e10, float e20, float e30, - float e01, float e11, float e21, float e31, - float e02, float e12, float e22, float e32, - float e03, float e13, float e23, float e33) -{ - e[0][0] = e00; e[1][0] = e10; e[2][0] = e20; e[3][0] = e30; - e[0][1] = e01; e[1][1] = e11; e[2][1] = e21; e[3][1] = e31; - e[0][2] = e02; e[1][2] = e12; e[2][2] = e22; e[3][2] = e32; - e[0][3] = e03; e[1][3] = e13; e[2][3] = e23; e[3][3] = e33; -} - -float* -Mat4::ptr(void) -{ - return &e[0][0]; -} - -Mat4 -Mat4::perspective(float fov, float aspect, float n, float f) -{ - float r = n*tan(fov*3.14159f/360.0f); - float t = r/aspect; - return frustum(-r, r, -t, t, n, f); -} - -Mat4 -Mat4::frustum(float l, float r, float b, float t, - float n, float f) -{ - Mat4 m(1.0f); - m.e[0][0] = (2.0f*n)/(r-l); - m.e[1][1] = (2.0f*n)/(t-b); - m.e[2][0] = (r+l)/(r-l); - m.e[2][1] = (t+b)/(t-b); - m.e[2][2] = -(f+n)/(f-n); - m.e[2][3] = -1.0f; - m.e[3][2] = -2.0f*f*n/(f-n); - m.e[3][3] = 0.0f; - return m; -} - -Mat4 -Mat4::ortho(float l, float r, float b, float t, - float n, float f) -{ - Mat4 m(1.0f); - m.e[0][0] = 2.0f/(r-l); - m.e[3][0] = -(r+l)/(r-l); - m.e[1][1] = 2.0f/(t-b); - m.e[3][1] = -(t+b)/(t-b); - m.e[2][2] = -2.0f/(f-n); - m.e[3][2] = -(f+n)/(f-n); - return m; -} - -Mat4 -Mat4::lookat(const Vec3 &pos, const Vec3 &target, const Vec3 &up) -{ - Vec3 forward = (target - pos).normalized(); - Vec3 side = forward.cross(up).normalized(); - Vec3 nup = side.cross(forward); - Mat4 m(1.0f); - m.e[0][0] = side.x; - m.e[1][0] = side.y; - m.e[2][0] = side.z; - m.e[0][1] = nup.x; - m.e[1][1] = nup.y; - m.e[2][1] = nup.z; - m.e[0][2] = -forward.x; - m.e[1][2] = -forward.y; - m.e[2][2] = -forward.z; - return m*Mat4::translation(-pos); -} - -Mat4 -Mat4::translation(const Vec3 &v) -{ - Mat4 m(1.0f); - m.e[3][0] = v.x; - m.e[3][1] = v.y; - m.e[3][2] = v.z; - return m; -} - -Mat4 -Mat4::rotation(float theta, const Vec3 &v) -{ - Mat4 m(1.0f); - float c = cos(theta); - float s = sin(theta); - m.e[0][0] = v.x*v.x*(1-c) + c; - m.e[1][0] = v.x*v.y*(1-c) - v.z*s; - m.e[2][0] = v.x*v.z*(1-c) + v.y*s; - - m.e[0][1] = v.y*v.x*(1-c) + v.z*s; - m.e[1][1] = v.y*v.y*(1-c) + c; - m.e[2][1] = v.y*v.z*(1-c) - v.x*s; - - m.e[0][2] = v.z*v.x*(1-c) - v.y*s; - m.e[1][2] = v.z*v.y*(1-c) + v.x*s; - m.e[2][2] = v.z*v.z*(1-c) + c; - return m; -} - -Mat4 -Mat4::scale(const Vec3 &v) -{ - Mat4 m(1.0f); - m.e[0][0] = v.x; - m.e[1][1] = v.y; - m.e[2][2] = v.z; - return m; -} - -Mat4 -Mat4::transpose(void) const -{ - float e[4][4]; - for(int i = 0; i < 4; i++) - for(int j = 0; j < 4; j++){ - e[j][i] = this->e[i][j]; - e[i][j] = this->e[j][i]; - } - return Mat4(&e[0][0]); -} - -Mat4 -Mat4::operator+(const Mat4 &rhs) const -{ - float e[16]; - for(int i = 0; i < 4*4; i++) - e[i] = this->cr[i] + rhs.cr[i]; - return Mat4(e); -} - -Mat4 -Mat4::operator-(const Mat4 &rhs) const -{ - float e[16]; - for(int i = 0; i < 4*4; i++) - e[i] = this->cr[i] - rhs.cr[i]; - return Mat4(e); -} - -Mat4 -Mat4::operator*(float rhs) const -{ - float e[16]; - for(int i = 0; i < 4*4; i++) - e[i] = this->cr[i]*rhs; - return Mat4(e); -} - -Mat4 -Mat4::operator/(float rhs) const -{ - float e[16]; - for(int i = 0; i < 4*4; i++) - e[i] = this->cr[i]/rhs; - return Mat4(e); -} - -Mat4 -Mat4::operator*(const Mat4 &rhs) const -{ - float e[4][4]; - for(int i = 0; i < 4; i++) - for(int j = 0; j < 4; j++) - e[i][j] = this->e[0][j]*rhs.e[i][0] + - this->e[1][j]*rhs.e[i][1] + - this->e[2][j]*rhs.e[i][2] + - this->e[3][j]*rhs.e[i][3]; - return Mat4(&e[0][0]); -} - -Vec4 -Mat4::operator*(const Vec4 &rhs) const -{ - float e[4]; - for(int i = 0; i < 4; i++) - e[i] = this->e[0][i]*rhs.x + - this->e[1][i]*rhs.y + - this->e[2][i]*rhs.z + - this->e[3][i]*rhs.w; - return Vec4(e); -} - -Mat4& -Mat4::operator+=(const Mat4 &rhs) -{ - *this = *this + rhs; - return *this; -} - -Mat4& -Mat4::operator-=(const Mat4 &rhs) -{ - *this = *this - rhs; - return *this; -} - -Mat4& -Mat4::operator*=(float rhs) -{ - *this = *this * rhs; - return *this; -} - -Mat4& -Mat4::operator/=(float rhs) -{ - *this = *this / rhs; - return *this; -} - -Mat4& -Mat4::operator*=(const Mat4 &rhs) -{ - *this = *this * rhs; - return *this; -} - -void -Mat4::print(std::ostream &of) const -{ - #define CM << ", " << - of << "M4(" << e[0][0] CM e[1][0] CM e[2][0] CM e[3][0] << std::endl; - of << " " << e[0][1] CM e[1][1] CM e[2][1] CM e[3][1] << std::endl; - of << " " << e[0][2] CM e[1][2] CM e[2][2] CM e[3][2] << std::endl; - of << " " << e[0][3] CM e[1][3] CM e[2][3] CM e[3][3] << ")"; - #undef CM -} - - - - - -Vec3::Vec3(const Vec4 &v) - : x(v.x), y(v.y), z(v.z) -{ -} - -Vec3::Vec3(const Quat &q) - : x(q.x), y(q.y), z(q.z) -{ -} - -Vec4::Vec4(const Vec3 &v, float w) - : x(v.x), y(v.y), z(v.z), w(w) -{ -} - -Vec4::Vec4(const Quat &q) - : x(q.x), y(q.y), z(q.z), w(q.w) -{ -} - -Quat::Quat(const Vec3 &v) - : w(0), x(v.x), y(v.y), z(v.z) -{ -} - -Quat::Quat(float w, const Vec3 &v) - : w(w), x(v.x), y(v.y), z(v.z) -{ -} - -Quat::Quat(const Vec4 &v) - : w(v.w), x(v.x), y(v.y), z(v.z) -{ -} - -Quat::Quat(const Mat3 &m) -{ - float trace, s, q[4]; - int i, j, k; - - int nxt[3] = {1, 2, 0}; - - trace = m.e[0][0] + m.e[1][1] + m.e[2][2]; - if(trace > 0.0f){ - s = sqrt(trace + 1.0f); - this->w = s / 2.0f; - s = 0.5f / s; - this->x = (m.e[2][1] - m.e[1][2]) * s; - this->y = (m.e[0][2] - m.e[2][0]) * s; - this->z = (m.e[1][0] - m.e[0][1]) * s; - }else{ - i = 0; - if(m.e[1][1] > m.e[0][0]) i = 1; - if(m.e[2][2] > m.e[i][i]) i = 2; - j = nxt[i]; - k = nxt[j]; - s = sqrt((m.e[i][i] - m.e[j][j] - m.e[k][k]) + 1.0); - q[i] = s*0.5f; - if(q[i] != 0.0f) s = 0.5f / s; - q[3] = (m.e[k][j] - m.e[j][k]) * s; - q[j] = (m.e[j][i] + m.e[i][j]) * s; - q[k] = (m.e[k][i] + m.e[i][k]) * s; - this->w = q[3]; - this->x = q[0]; - this->y = q[1]; - this->z = q[2]; - } -} - -Mat3::Mat3(const Mat4 &m) -{ - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) - this->e[i][j] = m.e[i][j]; -} - -Mat4::Mat4(const Mat3 &m) -{ - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) - this->e[i][j] = m.e[i][j]; - this->e[0][3] = 0.0f; - this->e[1][3] = 0.0f; - this->e[2][3] = 0.0f; - this->e[3][3] = 1.0f; - this->e[3][2] = 0.0f; - this->e[3][1] = 0.0f; - this->e[3][0] = 0.0f; -} - -Mat3 -Mat3::rotation(const Quat &v) -{ - Mat3 m(1.0f); - m.e[0][0] = v.w*v.w + v.x*v.x - v.y*v.y - v.z*v.z; - m.e[1][0] = 2*v.x*v.y - 2*v.w*v.z; - m.e[2][0] = 2*v.w*v.y + 2*v.x*v.z; - m.e[0][1] = 2*v.w*v.z + 2*v.x*v.y; - m.e[1][1] = v.w*v.w - v.x*v.x + v.y*v.y - v.z*v.z; - m.e[2][1] = 2*v.y*v.z - 2*v.w*v.x; - m.e[0][2] = 2*v.x*v.z - 2*v.w*v.y; - m.e[1][2] = 2*v.w*v.x + 2*v.y*v.z; - m.e[2][2] = v.w*v.w - v.x*v.x - v.y*v.y + v.z*v.z; - return m; -} - -Mat4 -Mat4::rotation(const Quat &q) -{ - Mat4 m(1.0f); - m.e[0][0] = q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z; - m.e[1][0] = 2*q.x*q.y - 2*q.w*q.z; - m.e[2][0] = 2*q.w*q.y + 2*q.x*q.z; - m.e[0][1] = 2*q.w*q.z + 2*q.x*q.y; - m.e[1][1] = q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z; - m.e[2][1] = 2*q.y*q.z - 2*q.w*q.x; - m.e[0][2] = 2*q.x*q.z - 2*q.w*q.y; - m.e[1][2] = 2*q.w*q.x + 2*q.y*q.z; - m.e[2][2] = q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z; - return m; -} - -Mat4 -Mat4::transrot(const DQuat &q) -{ - const Quat &q1 = q.q1; - const Quat &q2 = q.q2; - Mat4 m(1.0f); - m.e[0][0] = q1.w*q1.w + q1.x*q1.x - q1.y*q1.y - q1.z*q1.z; - m.e[1][0] = 2*q1.x*q1.y - 2*q1.w*q1.z; - m.e[2][0] = 2*q1.w*q1.y + 2*q1.x*q1.z; - m.e[0][1] = 2*q1.w*q1.z + 2*q1.x*q1.y; - m.e[1][1] = q1.w*q1.w - q1.x*q1.x + q1.y*q1.y - q1.z*q1.z; - m.e[2][1] = 2*q1.y*q1.z - 2*q1.w*q1.x; - m.e[0][2] = 2*q1.x*q1.z - 2*q1.w*q1.y; - m.e[1][2] = 2*q1.w*q1.x + 2*q1.y*q1.z; - m.e[2][2] = q1.w*q1.w - q1.x*q1.x - q1.y*q1.y + q1.z*q1.z; - m.e[3][0] = 2*(q1.w*q2.x - q2.w*q1.x + q1.y*q2.z - q1.z*q2.y); - m.e[3][1] = 2*(q1.w*q2.y - q2.w*q1.y + q1.z*q2.x - q1.x*q2.z); - m.e[3][2] = 2*(q1.w*q2.z - q2.w*q1.z + q1.x*q2.y - q1.y*q2.x); - return m; -} - diff --git a/tools/gl/math/conversion.h b/tools/gl/math/conversion.h deleted file mode 100755 index 01e7897..0000000 --- a/tools/gl/math/conversion.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef MATH_CONVERSION_H -#define MATH_CONVERSION_H - -Vec3::Vec3(const Vec4 &v) - : x(v.x), y(v.y), z(v.z) -{ -} - -Vec3::Vec3(const Quat &q) - : x(q.x), y(q.y), z(q.z) -{ -} - -Vec4::Vec4(const Vec3 &v, float w) - : x(v.x), y(v.y), z(v.z), w(w) -{ -} - -Vec4::Vec4(const Quat &q) - : x(q.x), y(q.y), z(q.z), w(q.w) -{ -} - -Quat::Quat(const Vec3 &v) - : x(v.x), y(v.y), z(v.z) -{ -} - -Quat::Quat(float w, const Vec3 &v) - : w(w), x(v.x), y(v.y), z(v.z) -{ -} - -Quat::Quat(const Vec4 &v) - : w(v.w), x(v.x), y(v.y), z(v.z) -{ -} - -Mat3::Mat3(const Mat4 &m) -{ - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) - this->e[i][j] = m.e[i][j]; -} - -Mat4::Mat4(const Mat3 &m) -{ - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) - this->e[i][j] = m.e[i][j]; - this->e[0][3] = 0.0f; - this->e[1][3] = 0.0f; - this->e[2][3] = 0.0f; - this->e[3][3] = 1.0f; - this->e[3][2] = 0.0f; - this->e[3][1] = 0.0f; - this->e[3][0] = 0.0f; -} - -Mat4 -Mat4::rotation(const Quat &v) -{ - Mat4 m(1.0f); - m.e[0][0] = v.w*v.w + v.x*v.x - v.y*v.y - v.z*v.z; - m.e[1][0] = 2*v.x*v.y - 2*v.w*v.z; - m.e[2][0] = 2*v.w*v.y + 2*v.x*v.z; - m.e[0][1] = 2*v.w*v.z + 2*v.x*v.y; - m.e[1][1] = v.w*v.w - v.x*v.x + v.y*v.y - v.z*v.z; - m.e[2][1] = 2*v.y*v.z - 2*v.w*v.x; - m.e[0][2] = 2*v.x*v.z - 2*v.w*v.y; - m.e[1][2] = 2*v.w*v.x + 2*v.y*v.z; - m.e[2][2] = v.w*v.w - v.x*v.x - v.y*v.y + v.z*v.z; - return m; -} - -Mat3 -Mat3::rotation(const Quat &v) -{ - Mat3 m(1.0f); - m.e[0][0] = v.w*v.w + v.x*v.x - v.y*v.y - v.z*v.z; - m.e[1][0] = 2*v.x*v.y - 2*v.w*v.z; - m.e[2][0] = 2*v.w*v.y + 2*v.x*v.z; - m.e[0][1] = 2*v.w*v.z + 2*v.x*v.y; - m.e[1][1] = v.w*v.w - v.x*v.x + v.y*v.y - v.z*v.z; - m.e[2][1] = 2*v.y*v.z - 2*v.w*v.x; - m.e[0][2] = 2*v.x*v.z - 2*v.w*v.y; - m.e[1][2] = 2*v.w*v.x + 2*v.y*v.z; - m.e[2][2] = v.w*v.w - v.x*v.x - v.y*v.y + v.z*v.z; - return m; -} - -#endif - diff --git a/tools/gl/math/dquat.h b/tools/gl/math/dquat.h deleted file mode 100755 index 2690cea..0000000 --- a/tools/gl/math/dquat.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef MATH_DQUAT_H -#define MATH_DQUAT_H - -#include -#include - -class Vec3; -class Vec4; - -class DQuat { -public: - Quat q1, q2; - - DQuat(void); - DQuat(const Quat &q1, const Quat &q2); - DQuat operator-(void) const; - DQuat operator+(const DQuat &rhs) const; - DQuat operator-(const DQuat &rhs) const; - DQuat operator*(const DQuat &rhs) const; - DQuat operator*(float rhs) const; - DQuat operator/(float rhs) const; - DQuat &operator+=(const DQuat &rhs); - DQuat &operator-=(const DQuat &rhs); - DQuat &operator*=(const DQuat &rhs); - DQuat &operator*=(float rhs); - DQuat &operator/=(float rhs); - bool operator==(const DQuat &rhs) const; - bool operator!=(const DQuat &rhs) const; - -// DQuat inv(void) const; - DQuat K(void) const; /* conjugate */ -// DQuat S(void) const; /* scalar */ -// DQuat V(void) const; /* vector */ -// float T(void) const; /* tensor */ -// float N(void) const; /* norm = tensor^2 */ -// DQuat U(void) const; /* versor */ -// DQuat wedge(const Quat &rhs) const; -// float inner(const Quat &rhs) const; -// DQuat slerp(const Quat &rhs, float t) const; - - void print(std::ostream &of) const; -}; - -#endif - diff --git a/tools/gl/math/mat3.h b/tools/gl/math/mat3.h deleted file mode 100755 index e1c6034..0000000 --- a/tools/gl/math/mat3.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef MATH_MATRIX3_H -#define MATH_MATRIX3_H - -#include -#include - -class Mat4; - -class Mat3 { -public: - union { - float e[3][3]; - float cr[9]; - }; - - Mat3(void); - Mat3(float f); - Mat3(float *f); - Mat3(float e00, float e10, float e20, - float e01, float e11, float e21, - float e02, float e12, float e22); - Mat3(const Mat4 &m); - float *ptr(void); - static Mat3 rotation(float theta, const Vec3 &v); - static Mat3 rotation(const Quat &v); - static Mat3 scale(const Vec3 &v); - Mat3 transpose(void) const; - Mat3 operator+(const Mat3 &rhs) const; - Mat3 operator-(const Mat3 &rhs) const; - Mat3 operator*(float rhs) const; - Mat3 operator/(float rhs) const; - Mat3 operator*(const Mat3 &rhs) const; - Vec3 operator*(const Vec3 &rhs) const; - Mat3 &operator+=(const Mat3 &rhs); - Mat3 &operator-=(const Mat3 &rhs); - Mat3 &operator*=(float rhs); - Mat3 &operator/=(float rhs); - Mat3 &operator*=(const Mat3 &rhs); - void print(std::ostream &of) const; -}; - -#endif - diff --git a/tools/gl/math/mat4.h b/tools/gl/math/mat4.h deleted file mode 100755 index 1bac359..0000000 --- a/tools/gl/math/mat4.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef MATH_MATRIX4_H -#define MATH_MATRIX4_H - -#include -#include - -class Mat3; - -class Mat4 { -public: - union { - float e[4][4]; - float cr[16]; - }; - - Mat4(void); - Mat4(float f); - Mat4(float *f); - Mat4(float e00, float e10, float e20, float e30, - float e01, float e11, float e21, float e31, - float e02, float e12, float e22, float e32, - float e03, float e13, float e23, float e33); - Mat4(const Mat3 &m); - float *ptr(void); - static Mat4 perspective(float fov, float aspect, float n, float f); - static Mat4 frustum(float l, float r, float b, float t, - float n, float f); - static Mat4 ortho(float l, float r, float b, float t, - float n, float f); - static Mat4 lookat(const Vec3 &pos, const Vec3 &target, const Vec3 &up); - static Mat4 translation(const Vec3 &v); - static Mat4 rotation(float theta, const Vec3 &v); - static Mat4 rotation(const Quat &q); - static Mat4 transrot(const DQuat &q); - static Mat4 scale(const Vec3 &v); - Mat4 transpose(void) const; - Mat4 operator+(const Mat4 &rhs) const; - Mat4 operator-(const Mat4 &rhs) const; - Mat4 operator*(float rhs) const; - Mat4 operator/(float rhs) const; - Mat4 operator*(const Mat4 &rhs) const; - Vec4 operator*(const Vec4 &rhs) const; - Mat4 &operator+=(const Mat4 &rhs); - Mat4 &operator-=(const Mat4 &rhs); - Mat4 &operator*=(float rhs); - Mat4 &operator/=(float rhs); - Mat4 &operator*=(const Mat4 &rhs); - void print(std::ostream &of) const; -}; - -#endif - diff --git a/tools/gl/math/math.h b/tools/gl/math/math.h deleted file mode 100755 index 0c04fa3..0000000 --- a/tools/gl/math/math.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef MATH_H -#define MATH_H - -#include "vec3.h" -#include "vec4.h" -#include "quat.h" -#include "dquat.h" -#include "mat3.h" -#include "mat4.h" - -std::ostream &operator<<(std::ostream& of, const Vec3 &v); -std::ostream &operator<<(std::ostream& of, const Vec4 &v); -std::ostream &operator<<(std::ostream& of, const Quat &v); -std::ostream &operator<<(std::ostream& of, const DQuat &v); -std::ostream &operator<<(std::ostream& of, const Mat3 &v); -std::ostream &operator<<(std::ostream& of, const Mat4 &v); - -#define PI 3.14159265359f - - -#endif diff --git a/tools/gl/math/quat.h b/tools/gl/math/quat.h deleted file mode 100755 index 7da753a..0000000 --- a/tools/gl/math/quat.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef MATH_QUAT_H -#define MATH_QUAT_H - -#include -#include - -class Vec3; -class Vec4; -class Mat3; - -/* Hamilton style */ - -class Quat { -public: - float w, x, y, z; - - Quat(void); - Quat(float w); - Quat(float x, float y, float z); - Quat(float w, float x, float y, float z); - Quat(float w, const Vec3 &v); - Quat(const Vec3 &v); - Quat(const Vec4 &v); - Quat(const Mat3 &m); - float *ptr(void); - Quat operator-(void) const; - Quat operator+(const Quat &rhs) const; - Quat operator-(const Quat &rhs) const; - Quat operator*(const Quat &rhs) const; - Quat operator*(float rhs) const; - Quat operator/(float rhs) const; - Quat &operator+=(const Quat &rhs); - Quat &operator-=(const Quat &rhs); - Quat &operator*=(const Quat &rhs); - Quat &operator*=(float rhs); - Quat &operator/=(float rhs); - bool operator==(const Quat &rhs) const; - bool operator!=(const Quat &rhs) const; - Quat inv(void) const; - Quat K(void) const; /* conjugate */ - Quat S(void) const; /* scalar */ - Quat V(void) const; /* vector */ - float T(void) const; /* tensor */ - float N(void) const; /* norm = tensor^2 */ - Quat U(void) const; /* versor */ - Quat wedge(const Quat &rhs) const; - float inner(const Quat &rhs) const; - Quat lerp(const Quat &rhs, float t) const; - Quat slerp(const Quat &rhs, float t) const; - void print(std::ostream &of) const; -}; - -#endif - diff --git a/tools/gl/math/vec3.h b/tools/gl/math/vec3.h deleted file mode 100755 index 5b21593..0000000 --- a/tools/gl/math/vec3.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef MATH_VECTOR3_H -#define MATH_VECTOR3_H - -#include -#include - -class Vec4; -class Quat; - -class Vec3 { -public: - float x, y, z; - - Vec3(void); - Vec3(float x, float y, float z); - Vec3(float *v); - Vec3(const Vec4 &v); - Vec3(const Quat &q); - float *ptr(void); - Vec3 operator-(void) const; - Vec3 operator+(const Vec3 &rhs) const; - Vec3 operator-(const Vec3 &rhs) const; - Vec3 operator*(float rhs) const; - Vec3 operator/(float rhs) const; - Vec3 &operator+=(const Vec3 &rhs); - Vec3 &operator-=(const Vec3 &rhs); - Vec3 &operator*=(float rhs); - Vec3 &operator/=(float rhs); - bool operator==(const Vec3 &rhs) const; - bool operator!=(const Vec3 &rhs) const; - float norm(void) const; - float normsq(void) const; - Vec3 normalized(void) const; - float dot(const Vec3 &rhs) const; - Vec3 cross(const Vec3 &rhs) const; - void print(std::ostream &of) const; -}; - -#endif - diff --git a/tools/gl/math/vec4.h b/tools/gl/math/vec4.h deleted file mode 100755 index 90920f7..0000000 --- a/tools/gl/math/vec4.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef MATH_VECTOR4_H -#define MATH_VECTOR4_H - -#include -#include - -class Vec3; -class Quat; - -class Vec4 { -public: - float x, y, z, w; - - Vec4(void); - Vec4(float x, float y, float z, float w); - Vec4(float *v); - Vec4(const Vec3 &v, float w = 0.0f); - Vec4(const Quat &w); - float *ptr(void); - Vec4 operator-(void) const; - Vec4 operator+(const Vec4 &rhs) const; - Vec4 operator-(const Vec4 &rhs) const; - Vec4 operator*(float rhs) const; - Vec4 operator/(float rhs) const; - Vec4 &operator+=(const Vec4 &rhs); - Vec4 &operator-=(const Vec4 &rhs); - Vec4 &operator*=(float rhs); - Vec4 &operator/=(float rhs); - bool operator==(const Vec4 &rhs) const; - bool operator!=(const Vec4 &rhs) const; - float norm(void) const; - float normsq(void) const; - Vec4 normalized(void) const; - float dot(const Vec4 &rhs) const; - void print(std::ostream &of) const; -}; - -#endif - diff --git a/tools/gl/rwtest.h b/tools/gl/rwtest.h deleted file mode 100755 index 50eb005..0000000 --- a/tools/gl/rwtest.h +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include "../librw/rw.h" -#include "../librw/src/gtaplg.h" -#include "math/math.h" -#include "camera.h" - -#include "gl.h" - diff --git a/tools/ps2/Makefile b/tools/ps2/Makefile deleted file mode 100755 index 5b0b6ba..0000000 --- a/tools/ps2/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -CC=ee-gcc -CXX=ee-g++ -AS=ee-g++ -LD=ee-g++ -DVPAS=ee-dvp-as - -LINK=-T$(PS2SDK)/ee/startup/linkfile -LIBPATH=-L$(PS2SDK)/ee/lib -INCPATH=-I$(PS2SDK)/ee/include -I$(PS2SDK)/common/include -I../.. -LIBS=../../librw-ps2.a -lc -lc -lkernel -lmf # g++ throws one -lc away, why? (unless -nostdlib) - -CFLAGS = -c -Wall -nostdlib -fno-common -DRW_PS2 -DPS2_EE $(INCPATH) -ASFLAGS = -c -xassembler-with-cpp -LDFLAGS = -mno-crt0 $(LIBPATH) -OUT=test - -C_SRC=main.cpp gs.cpp dma.cpp math.cpp -#S_SRC=crt0.s low.s -HEADER=dma.h ee_regs.h gif.h gs.h mips_regs.h ps2.h math.h mesh.h -OBJ=$(C_SRC:.cpp=.o) $(S_SRC:.s=.o) vu.o defaultpipe.o skinpipe.o - -$(OUT).elf: $(OBJ) ../../librw-ps2.a $(HEADER) - $(LD) $(LDFLAGS) $(LINK) $(PS2SDK)/ee/startup/crt0.o \ - $(OBJ) $(LIBS) -o $(OUT).elf - -.cpp.o: $(HEADER) - $(CXX) $(CFLAGS) $< -o $@ - -.s.o: $(HEADER) - $(AS) $(ASFLAGS) $< -o $@ - -%.o: %.dsm - $(DVPAS) $< -o $@ - -$(C_SRC) $(S_SRC): $(HEADER) - -clean: - rm -f $(OBJ) - diff --git a/tools/ps2/README.md b/tools/ps2/README.md deleted file mode 100644 index dfe917e..0000000 --- a/tools/ps2/README.md +++ /dev/null @@ -1,14 +0,0 @@ -PS2 test renderer -================= - -This is a basic RW renderer for PS2. -There is a bunch of unrelated code since I adapted an earlier program of mine. - -To compile you need the ps2toolchain and ee-dvp-as from the Sony SDK -(dvp-as from the ps2toolchain segfaults when encountering MPG, -this should be fixed). - -So far the program can render PS2 native geometry -in the default or skin format (no PDS pipes as used in San Andreas supported yet). -The files are read from host: (see main.cpp) -so you can use e.g. ps2link on a real PS2 or pcsx2 with the host device enabled. diff --git a/tools/ps2/defaultpipe.dsm b/tools/ps2/defaultpipe.dsm deleted file mode 100644 index 4a3df32..0000000 --- a/tools/ps2/defaultpipe.dsm +++ /dev/null @@ -1,95 +0,0 @@ -.global defaultPipe - -.equ vertexTop, 0x3d0 -.equ numInAttribs, 4 -.equ numOutAttribs, 3 -.equ numOutBuf, 2 -.equ vertCount, ((vertexTop-numOutBuf)/(numInAttribs*2+numOutAttribs*numOutBuf)) -.equ offset, (vertCount*numInAttribs) -.equ outBuf1, (2*offset) -.equ outSize, ((vertexTop-outBuf1-2)/2) -.equ outBuf2, (outBuf1+outSize) - -.equ lightMat, 0x3d0 -.equ lightDir, 0x3d4 -.equ matrix, 0x3f0 -.equ screenOffset, 0x3f9 -.equ gifTag, 0x3fa -.equ matColor, 0x3fb -.equ ambientLight, 0x3fd - -.balign 16,0 -defaultPipe: -DMAret * -MPG 0, * -.vu -Start: - NOP LQ VF25, screenOffset(VI00) - NOP LQ VF28, matrix(VI00) - NOP LQ VF29, matrix+1(VI00) - NOP LQ VF30, matrix+2(VI00) - NOP LQ VF31, matrix+3(VI00) - NOP IADDIU VI12, VI00, outBuf1 - NOP IADDIU VI13, VI00, outBuf2 -Cnt: - NOP XTOP VI02 ; input pointer - NOP LQ VF01, gifTag(VI00) - NOP XITOP VI01 ; vertex count - NOP IADDIU VI05, VI00, 0x4000 - NOP IADD VI05, VI05, VI05 - NOP IOR VI05, VI05, VI01 - NOP SQ VF01, 0(VI12) - NOP ISW.x VI05, 0(VI12) - NOP IADDIU VI03, VI12, 1 ; output pointer - NOP LQ VF18, lightMat(VI00) - NOP LQ VF19, lightMat+1(VI00) - NOP LQ VF20, lightMat+2(VI00) - -Loop: - NOP LQI VF01, (VI02++) ; vertex - NOP LQI VF02, (VI02++) ; UV - NOP LQI VF03, (VI02++) ; color - NOP LQI VF04, (VI02++) ; normal - - MULAw.xyzw ACC, VF31, VF00w NOP ; transform vertex - MADDAx.xyzw ACC, VF28, VF01x NOP - MADDAy.xyzw ACC, VF29, VF01y NOP - MADDz.xyzw VF01, VF30, VF01z NOP - ITOF0 VF03, VF03 NOP - ITOF0[I] VF04, VF04 LOI 0.0078125 ; - normal scale - NOP NOP - NOP DIV Q, VF00w, VF01w - NOP WAITQ - MULq VF01, VF01, Q NOP ; perspective division - MULi VF04, VF04, I NOP ; scale normal - NOP MR32.z VF02, VF00 - NOP NOP - SUB.w VF01, VF01, VF01 NOP - MULAx.xyz ACC, VF18, VF04x NOP ; transform normal - MADDAy.xyz ACC, VF19, VF04y NOP - MADDz.xyz VF04, VF20, VF04z NOP - ADD.xy VF01, VF01, VF25 NOP - MULq VF02, VF02, Q NOP - NOP NOP - FTOI0 VF03, VF03 NOP - FTOI4 VF01, VF01 NOP - NOP SQ VF04, -1(VI02) ; store normal - NOP IADDI VI01, VI01, -1 - NOP SQI VF02, (VI03++) ; STQ - NOP SQI VF03, (VI03++) ; color - NOP SQI VF01, (VI03++) ; vertex - NOP IBNE VI01, VI00, Loop - NOP NOP - - .include "light.vu" - - NOP XGKICK VI12 - NOP IADD VI15,VI00,VI12 - NOP IADD VI12,VI00,VI13 - NOP[E] IADD VI13,VI00,VI15 - NOP NOP - NOP B Cnt - NOP NOP - -.EndMPG -.EndDmaData diff --git a/tools/ps2/dma.cpp b/tools/ps2/dma.cpp deleted file mode 100755 index 1501c07..0000000 --- a/tools/ps2/dma.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include "ps2.h" -#include "ee_regs.h" -#include "dma.h" - -struct DmaChannel { - uint64 chcr; uint64 pad0; - uint64 madr; uint64 pad1; - uint64 qwc; uint64 pad2; - uint64 tadr; uint64 pad3; - uint64 asr0; uint64 pad4; - uint64 asr1; uint64 pad5; - uint64 pad6[4]; - uint64 sadr; -}; - -static struct DmaChannel *dmaChannels[] = { - (struct DmaChannel *) D0_CHCR, - (struct DmaChannel *) D1_CHCR, - (struct DmaChannel *) D2_CHCR, - (struct DmaChannel *) D3_CHCR, - (struct DmaChannel *) D4_CHCR, - (struct DmaChannel *) D5_CHCR, - (struct DmaChannel *) D6_CHCR, - (struct DmaChannel *) D7_CHCR, - (struct DmaChannel *) D8_CHCR, - (struct DmaChannel *) D9_CHCR -}; - -void -dmaReset(int enable) -{ - /* don't clear the SIF channels */ - int doclear[] = { 1, 1, 1, 1, 1, 0, 0, 0, 1, 1 }; - int i; - - printf("%x %x %x %x %x %x %x\n", - &dmaChannels[0]->chcr, - &dmaChannels[0]->madr, - &dmaChannels[0]->qwc, - &dmaChannels[0]->tadr, - &dmaChannels[0]->asr0, - &dmaChannels[0]->asr1, - &dmaChannels[0]->sadr); - - SET_REG64(D_CTRL, 0); - for(i = 0; i < 10; i++) - if(doclear[i]){ - dmaChannels[i]->chcr = 0; - dmaChannels[i]->madr = 0; - dmaChannels[i]->qwc = 0; - dmaChannels[i]->tadr = 0; - dmaChannels[i]->asr0 = 0; - dmaChannels[i]->asr1 = 0; - dmaChannels[i]->sadr = 0; - } - - if(enable) - SET_REG64(D_CTRL, MAKE_D_CTRL(1,0,0,0,0,0)); -} diff --git a/tools/ps2/dma.h b/tools/ps2/dma.h deleted file mode 100755 index c083c71..0000000 --- a/tools/ps2/dma.h +++ /dev/null @@ -1,131 +0,0 @@ -#ifndef DMA_H -#define DMA_H -#include "ps2.h" -#include "ee_regs.h" - -void dmaReset(int enable); - -#define DMA_WAIT(REG) \ - while (GET_REG32(REG) & (1<<8)) - -/* - * Common Registers - */ - -#define MAKE_D_CTRL(DMAE,RELE,MFD,STS,STD,RCYC) \ - (BIT32(DMAE, 0) | \ - BIT32(RELE, 1) | \ - BIT32(MFD, 2) | \ - BIT32(STS, 4) | \ - BIT32(STD, 6) | \ - BIT32(RCYC, 8)) - -#define MAKE_D_STAT(CIS0,CIS1,CIS2,CIS3,CIS4,CIS5,CIS6,CIS7,CIS8,CIS9,\ - SIS,MEIS,BEIS,\ - CIM0,CIM1,CIM2,CIM3,CIM4,CIM5,CIM6,CIM7,CIM8,CIM9,\ - SIM,MEIM) \ - (BIT32(CIS0, 0) | \ - BIT32(CIS1, 1) | \ - BIT32(CIS2, 2) | \ - BIT32(CIS3, 3) | \ - BIT32(CIS4, 4) | \ - BIT32(CIS5, 5) | \ - BIT32(CIS6, 6) | \ - BIT32(CIS7, 7) | \ - BIT32(CIS8, 8) | \ - BIT32(CIS9, 9) | \ - BIT32(SIS, 13) | \ - BIT32(MEIS, 14) | \ - BIT32(BEIS, 15) | \ - BIT32(CIM0, 16) | \ - BIT32(CIM1, 17) | \ - BIT32(CIM2, 18) | \ - BIT32(CIM3, 19) | \ - BIT32(CIM4, 20) | \ - BIT32(CIM5, 21) | \ - BIT32(CIM6, 21) | \ - BIT32(CIM7, 22) | \ - BIT32(CIM8, 23) | \ - BIT32(CIM9, 24) | \ - BIT32(SIM, 29) | \ - BIT32(MEIM, 30)) - -#define MAKE_D_PCR(CPC0,CPC1,CPC2,CPC3,CPC4,CPC5,CPC6,CPC7,CPC8,CPC9,\ - CDE0,CDE1,CDE2,CDE3,CDE4,CDE5,CDE6,CDE7,CDE8,CDE9, PCE) \ - (BIT32(CPC0, 0) | \ - BIT32(CPC1, 1) | \ - BIT32(CPC2, 2) | \ - BIT32(CPC3, 3) | \ - BIT32(CPC4, 4) | \ - BIT32(CPC5, 5) | \ - BIT32(CPC6, 6) | \ - BIT32(CPC7, 7) | \ - BIT32(CPC8, 8) | \ - BIT32(CPC9, 9) | \ - BIT32(CDE0, 16) | \ - BIT32(CDE1, 17) | \ - BIT32(CDE2, 18) | \ - BIT32(CDE3, 19) | \ - BIT32(CDE4, 20) | \ - BIT32(CDE5, 21) | \ - BIT32(CDE6, 22) | \ - BIT32(CDE7, 23) | \ - BIT32(CDE8, 24) | \ - BIT32(CDE9, 25) | \ - BIT32(PCE, 31)) - -#define MAKE_D_SQWC(SQWC,TQWC) \ - (BIT32(SQWC, 0) | \ - BIT32(TQWC, 16)) - -#define MAKE_D_RBSR(RMSK) \ - (BIT32(RMSK, 4)) - -#define MAKE_D_RBOR(ADDR) \ - (BIT32(ADDR, 0)) - -#define MAKE_D_STADR(ADDR) \ - (BIT32(ADDR, 0)) - -#define MAKE_D_ENABLER(CPND) \ - (BIT32(CPND, 16)) - -#define MAKE_D_ENABLEW(CPND) \ - (BIT32(CPND, 16)) - -/* - * Channel Registers - */ - -#define MAKE_DN_CHCR(DIR,MOD,ASP,TTE,TIE,STR) \ - (BIT32(DIR, 0) | \ - BIT32(MOD, 2) | \ - BIT32(ASP, 4) | \ - BIT32(TTE, 6) | \ - BIT32(TIE, 7) | \ - BIT32(STR, 8)) - -#define MAKE_DN_MADR(ADDR,SPR) \ - (BIT32(ADDR, 0) | \ - BIT32(SPR, 31)) - -#define MAKE_DN_TADR(ADDR,SPR) \ - (BIT32(ADDR, 0) | \ - BIT32(SPR, 31)) - -#define MAKE_DN_ASR(ADDR,SPR) \ - (BIT32(ADDR, 0) | \ - BIT32(SPR, 31)) - -#define MAKE_DN_ASR(ADDR,SPR) \ - (BIT32(ADDR, 0) | \ - BIT32(SPR, 31)) - -#define MAKE_DN_SADR(ADDR) \ - (BIT32(ADDR, 0)) - -#define MAKE_DN_QWC(QWC) \ - (BIT32(QWC, 0)) - -#endif - diff --git a/tools/ps2/ee_regs.h b/tools/ps2/ee_regs.h deleted file mode 100755 index ef9088b..0000000 --- a/tools/ps2/ee_regs.h +++ /dev/null @@ -1,204 +0,0 @@ -#ifndef EE_REGS_H -#define EE_REGS_H -#include "ps2.h" - -/* - * EE Registers - */ - -#define SET_REG32(r, x) \ - *((volatile uint32 *) r) = (x) -#define SET_REG64(r, x) \ - *((volatile uint64 *) r) = (x) -#define SET_REG128(r, x) \ - *((volatile uint128 *) r) = (x) - -#define GET_REG32(r) \ - *((volatile uint32 *) r) -#define GET_REG64(r) \ - *((volatile uint64 *) r) -#define GET_REG128(r) \ - *((volatile uint128 *) r) - -/* Module TIMER */ -#define T0_COUNT 0x10000000 -#define T0_MODE 0x10000010 -#define T0_COMP 0x10000020 -#define T0_HOLD 0x10000030 -#define T1_COUNT 0x10000800 -#define T1_MODE 0x10000810 -#define T1_COMP 0x10000820 -#define T1_HOLD 0x10000830 -#define T2_COUNT 0x10001000 -#define T2_MODE 0x10001010 -#define T2_COMP 0x10001020 -#define T3_COUNT 0x10001800 -#define T3_MODE 0x10001810 -#define T3_COMP 0x10001820 - -/* Module IPU */ -#define IPU_CMD 0x10002000 -#define IPU_CTRL 0x10002010 -#define IPU_BP 0x10002020 -#define IPU_TOP 0x10002030 - -/* Module GIF */ -#define GIF_CTRL 0x10003000 -#define GIF_MODE 0x10003010 -#define GIF_STAT 0x10003020 -#define GIF_TAG0 0x10003040 -#define GIF_TAG1 0x10003050 -#define GIF_TAG2 0x10003060 -#define GIF_TAG3 0x10003070 -#define GIF_CNT 0x10003080 -#define GIF_P3CNT 0x10003090 -#define GIF_P3TAG 0x100030a0 - -/* Module VIF0 */ -#define VIF0_STAT 0x10003800 -#define VIF0_FBRST 0x10003810 -#define VIF0_ERR 0x10003820 -#define VIF0_MARK 0x10003830 -#define VIF0_CYCLE 0x10003840 -#define VIF0_MODE 0x10003850 -#define VIF0_NUM 0x10003860 -#define VIF0_MASK 0x10003870 -#define VIF0_CODE 0x10003880 -#define VIF0_ITOPS 0x10003890 -#define VIF0_ITOP 0x100038d0 -#define VIF0_R0 0x10003900 -#define VIF0_R1 0x10003910 -#define VIF0_R2 0x10003920 -#define VIF0_R3 0x10003930 -#define VIF0_C0 0x10003940 -#define VIF0_C1 0x10003950 -#define VIF0_C2 0x10003960 -#define VIF0_C3 0x10003970 - -/* Module VIF1 */ -#define VIF1_STAT 0x10003c00 -#define VIF1_FBRST 0x10003c10 -#define VIF1_ERR 0x10003c20 -#define VIF1_MARK 0x10003c30 -#define VIF1_CYCLE 0x10003c40 -#define VIF1_MODE 0x10003c50 -#define VIF1_NUM 0x10003c60 -#define VIF1_MASK 0x10003c70 -#define VIF1_CODE 0x10003c80 -#define VIF1_ITOPS 0x10003c90 -#define VIF1_BASE 0x10003ca0 -#define VIF1_OFST 0x10003cb0 -#define VIF1_TOPS 0x10003cc0 -#define VIF1_ITOP 0x10003cd0 -#define VIF1_TOP 0x10003ce0 -#define VIF1_R0 0x10003d00 -#define VIF1_R1 0x10003d10 -#define VIF1_R2 0x10003d20 -#define VIF1_R3 0x10003d30 -#define VIF1_C0 0x10003d40 -#define VIF1_C1 0x10003d50 -#define VIF1_C2 0x10003d60 -#define VIF1_C3 0x10003d70 - -/* Module FIFO */ -#define VIF0_FIFO 0x1000400 -#define VIF1_FIFO 0x1000500 -#define GIF_FIFO 0x1000600 -#define IPU_out_FIFO 0x1000700 -#define IPU_in_FIFO 0x1000701 - -/* Module DMAC */ -#define D0_CHCR 0x10008000 -#define D0_MADR 0x10008010 -#define D0_QWC 0x10008020 -#define D0_TADR 0x10008030 -#define D0_ASR0 0x10008040 -#define D0_ASR1 0x10008050 - -#define D1_CHCR 0x10009000 -#define D1_MADR 0x10009010 -#define D1_QWC 0x10009020 -#define D1_TADR 0x10009030 -#define D1_ASR0 0x10009040 -#define D1_ASR1 0x10009050 - -#define D2_CHCR 0x1000a000 -#define D2_MADR 0x1000a010 -#define D2_QWC 0x1000a020 -#define D2_TADR 0x1000a030 -#define D2_ASR0 0x1000a040 -#define D2_ASR1 0x1000a050 - -#define D3_CHCR 0x1000b000 -#define D3_MADR 0x1000b010 -#define D3_QWC 0x1000b020 - -#define D4_CHCR 0x1000b400 -#define D4_MADR 0x1000b410 -#define D4_QWC 0x1000b420 -#define D4_TADR 0x1000b430 - -#define D5_CHCR 0x1000c000 -#define D5_MADR 0x1000c010 -#define D5_QWC 0x1000c020 - -#define D6_CHCR 0x1000c400 -#define D6_MADR 0x1000c410 -#define D6_QWC 0x1000c420 -#define D6_TADR 0x1000c430 - -#define D7_CHCR 0x1000c800 -#define D7_MADR 0x1000c810 -#define D7_QWC 0x1000c820 - -#define D8_CHCR 0x1000d000 -#define D8_MADR 0x1000d010 -#define D8_QWC 0x1000d020 -#define D8_SADR 0x1000d080 - -#define D9_CHCR 0x1000d400 -#define D9_MADR 0x1000d410 -#define D9_QWC 0x1000d420 -#define D9_TADR 0x1000d430 -#define D9_SADR 0x1000d480 - -#define D_CTRL 0x1000e000 -#define D_STAT 0x1000e010 -#define D_PCR 0x1000e020 -#define D_SQWC 0x1000e030 -#define D_RBSR 0x1000e040 -#define D_RBOR 0x1000e050 -#define D_STADR 0x1000e060 - -#define D_ENABLER 0x1000f520 -#define D_ENABLEW 0x1000f590 - -/* Module INTC */ -#define I_STAT 0x1000f000 -#define I_MASK 0x1000f010 - -/* Module SIF */ -#define SB_SMFLG 0x1000f230 - -/* Module GS Special */ -#define GS_PMODE 0x12000000 -#define GS_SMODE1 0x12000010 -#define GS_SMODE2 0x12000020 -#define GS_SRFSH 0x12000030 -#define GS_SYNCH1 0x12000040 -#define GS_SYNCH2 0x12000050 -#define GS_SYNCV 0x12000060 -#define GS_DISPFB1 0x12000070 -#define GS_DISPLAY1 0x12000080 -#define GS_DISPFB2 0x12000090 -#define GS_DISPLAY2 0x120000a0 -#define GS_EXTBUF 0x120000b0 -#define GS_EXTDATA 0x120000c0 -#define GS_EXTWRITE 0x120000d0 -#define GS_BGCOLOR 0x120000e0 -#define GS_CSR 0x12001000 -#define GS_IMR 0x12001010 -#define GS_BUSDIR 0x12001040 -#define GS_SIGLBLID 0x12001080 - -#endif diff --git a/tools/ps2/gif.h b/tools/ps2/gif.h deleted file mode 100755 index 8e25028..0000000 --- a/tools/ps2/gif.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef GIF_H -#define GIF_H - -#include "ps2.h" -#include "ee_regs.h" -#include "dma.h" - -#define GIF_DECLARE_PACKET(NAME,N) \ - uint64 __attribute__((aligned (16))) NAME[N*2]; \ - int NAME##_cur; \ - int NAME##_size; - -#define GIF_BEGIN_PACKET(NAME) \ - NAME##_cur = 0; \ - NAME##_size = 0 - -#define MAKE_GIF_TAG(NLOOP,EOP,PRE,PRIM,FLG,NREG)\ - (BIT64(NLOOP, 0) | \ - BIT64(EOP, 15) | \ - BIT64(PRE, 46) | \ - BIT64(PRIM, 47) | \ - BIT64(FLG, 58) | \ - BIT64(NREG, 60)); - -#define GIF_TAG(NAME,NLOOP,EOP,PRE,PRIM,FLG,NREG,REGS) \ - NAME##_size += NLOOP + 1; \ - NAME[NAME##_cur++] = \ - (BIT64(NLOOP, 0) | \ - BIT64(EOP, 15) | \ - BIT64(PRE, 46) | \ - BIT64(PRIM, 47) | \ - BIT64(FLG, 58) | \ - BIT64(NREG, 60)); \ - NAME[NAME##_cur++] = REGS - -#define GIF_DATA_AD(NAME,REG,DATA) \ - NAME[NAME##_cur++] = DATA; \ - NAME[NAME##_cur++] = REG - -#define GIF_DATA_RGBAQ(NAME,R,G,B,A) \ - NAME[NAME##_cur++] = \ - (BIT64(R, 0) | \ - BIT64(G, 32)); \ - NAME[NAME##_cur++] = \ - (BIT64(B, 0) | \ - BIT64(A, 32)) - -#define GIF_DATA_XYZ2(NAME,X,Y,Z,ADC) \ - NAME[NAME##_cur++] = \ - (BIT64(X, 0) | \ - BIT64(Y, 32)); \ - NAME[NAME##_cur++] = \ - (BIT64(Z, 0) | \ - BIT64(ADC, 47)) - -#define GIF_SEND_PACKET(NAME) \ - FlushCache(0); \ - SET_REG32(D2_QWC, MAKE_DN_QWC(NAME##_cur/2)); \ - SET_REG32(D2_MADR, MAKE_DN_MADR(&(NAME), 0)); \ - SET_REG32(D2_CHCR, MAKE_DN_CHCR(1, 0, 0, 0, 0, 1)); \ - DMA_WAIT(D2_CHCR) - -#endif diff --git a/tools/ps2/gs.cpp b/tools/ps2/gs.cpp deleted file mode 100755 index 9bdbe40..0000000 --- a/tools/ps2/gs.cpp +++ /dev/null @@ -1,322 +0,0 @@ -#include -#include -#include "ps2.h" -#include "ee_regs.h" -#include "gs.h" -#include "gif.h" - -#include "math.h" -#include "mesh.h" - -GIF_DECLARE_PACKET(gifDmaBuf, 256) - -struct GsState *gsCurState; - -void -dumpdma(void) -{ - int i; - for (i = 0; i < gifDmaBuf_cur; i += 2) - printf("%016lX %016lX\n", gifDmaBuf[i+1], gifDmaBuf[i]); -} - -void -gsDumpState(void) -{ - struct GsState *g = gsCurState; - printf("mode: %d\tinterlaced: %d\tframe: %d\n" - "width,height: %d, %d\n" - "startx, starty: %d %d\n" - "dw, dh: %d %d\n" - "magh, magv: %d %d\n" - "xoff, yoff: %d %d\n" - "xmax, ymax: %d %d\n", - g->mode, g->interlaced, g->field, - g->width, g->height, - g->startx, g->starty, - g->dw, g->dh, - g->magh, g->magv, - g->xoff, g->yoff, - g->xmax, g->ymax); -} - -void -gsInitState(uint16 interlaced, uint16 mode, uint16 field) -{ - struct GsState *g = gsCurState; - int i; - - g->mode = mode; - g->interlaced = interlaced; - g->field = field; - if(mode == PAL){ - g->width = 640; - g->height = 256; - g->startx = 680; - g->starty = 37; - g->dw = 2560; - g->dh = 256; - }else{ - g->width = 640; - g->height = 224; - g->startx = 652; - g->starty = 26; - g->dw = 2560; - g->dh = 224; - } - - if(interlaced == INTERLACED){ - if(field == FIELD) - g->height *= 2; - g->dh *= 2; - g->starty = (g->starty-1)*2; - } - g->magh = 3; - g->magv = 0; - - g->xoff = 2048<<4; - g->yoff = 2048<<4; - g->xmax = g->width - 1; - g->ymax = g->height - 1; - g->psm = PSMCT32; - g->depth = 32; - g->bpp = 4; -// g->psm = PSMCT24; -// g->depth = 24; -// g->bpp = 4; - g->zpsm = PSMCZ32; - g->zdepth = 32; - g->zbpp = 4; - g->zmax = 0x0FFFFFFFF; - g->currentMemPtr = 0; - g->activeFb = 0; - g->visibleFb = 0; - - g->ztest = 1; - g->zfunc = ZTST_GREATER; - g->blend.enable = 0; - g->shadingmethod = IIP_GOURAUD; - - for(i = 0; i < 2; i++){ - g->fbAddr[i] = g->currentMemPtr; - g->currentMemPtr += g->width*g->height*g->bpp; - } - g->zbAddr = g->currentMemPtr; - g->currentMemPtr += g->width*g->height*g->zbpp; -} - -void -gsInit(void) -{ - struct GsState *g = gsCurState; - int addr0, addr1; - - g->visibleFb = 0; - g->activeFb = 1; - printf("%d %d\n", g->fbAddr[0], g->fbAddr[1]); - addr0 = g->fbAddr[g->visibleFb]/4/2048; - addr1 = g->fbAddr[g->activeFb]/4/2048; - - GS_RESET(); - __asm__("sync.p; nop"); - SET_REG64(GS_CSR, 0); - GsPutIMR(0xff00); - SetGsCrt(g->interlaced, g->mode, g->field); - - SET_REG64(GS_PMODE, MAKE_GS_PMODE(0, 1, 0, 1, 0, 0xFF)); - SET_REG64(GS_DISPFB2, MAKE_GS_DISPFB(addr0, g->width/64, g->psm, 0, 0)); - SET_REG64(GS_DISPFB1, MAKE_GS_DISPFB(addr0, g->width/64, g->psm, 0, 0)); - SET_REG64(GS_DISPLAY2, MAKE_GS_DISPLAY(g->startx, g->starty, - g->magh, g->magv, - g->dw-1, g->dh-1)); - SET_REG64(GS_DISPLAY1, MAKE_GS_DISPLAY(g->startx, g->starty, - g->magh, g->magv, - g->dw-1, g->dh-1)); - SET_REG64(GS_BGCOLOR, MAKE_GS_BGCOLOR(100, 100, 100)); - - GIF_BEGIN_PACKET(gifDmaBuf); - GIF_TAG(gifDmaBuf, 7, 1, 0, 0, 0, 1, 0x0e); - GIF_DATA_AD(gifDmaBuf, GS_PRMODECONT, MAKE_GS_PRMODECONT(1)); - GIF_DATA_AD(gifDmaBuf, GS_FRAME_1, - MAKE_GS_FRAME(addr1, g->width/64, g->psm, 0)); - GIF_DATA_AD(gifDmaBuf, GS_ZBUF_1, - MAKE_GS_ZBUF(g->zbAddr/4/2048, g->zpsm, 0)); - GIF_DATA_AD(gifDmaBuf, GS_XYOFFSET_1, - MAKE_GS_XYOFFSET(g->xoff, g->yoff)); - GIF_DATA_AD(gifDmaBuf, GS_SCISSOR_1, - MAKE_GS_SCISSOR(0, g->xmax, 0, g->ymax)); - GIF_DATA_AD(gifDmaBuf, GS_TEST_1, - MAKE_GS_TEST(0, 0, 0, 0, 0, 0, g->ztest, g->zfunc)); - GIF_DATA_AD(gifDmaBuf, GS_COLCLAMP, MAKE_GS_COLCLAMP(1)); - GIF_SEND_PACKET(gifDmaBuf); -} - -void -gsUpdateContext(void) -{ - GsState *gs = gsCurState; - GIF_BEGIN_PACKET(gifDmaBuf); - GIF_TAG(gifDmaBuf, 2, 1, 0, 0, 0, 1, 0x0e); - GIF_DATA_AD(gifDmaBuf, GS_TEST_1, - MAKE_GS_TEST(0, 0, 0, 0, 0, 0, gs->ztest, gs->zfunc)); - GIF_DATA_AD(gifDmaBuf, GS_ALPHA_1, - MAKE_GS_ALPHA(gs->blend.a, gs->blend.b, gs->blend.c, - gs->blend.d, gs->blend.fix)); - GIF_SEND_PACKET(gifDmaBuf); -} - -void -gsPollVsynch(void) -{ - volatile uint64 *csr = (uint64 *) GS_CSR; - *csr &= 8; - while(!(*csr & 8)); -} - -void -gsFlip(int synch) -{ - struct GsState *g = gsCurState; - g->activeFb = (g->activeFb+1) & 1; - g->visibleFb = (g->visibleFb+1) & 1; - if(synch) - gsPollVsynch(); - gsSelectActiveFb(g->activeFb); - gsSelectVisibleFb(g->visibleFb); -} - -void -gsSelectActiveFb(int n) -{ - struct GsState *g = gsCurState; - int addr; - - addr = g->fbAddr[n]/4/2048; - GIF_BEGIN_PACKET(gifDmaBuf); - GIF_TAG(gifDmaBuf, 1, 1, 0, 0, 0, 1, 0x0e); - GIF_DATA_AD(gifDmaBuf, GS_FRAME_1, - MAKE_GS_FRAME(addr, g->width/64, g->psm, 0)); - GIF_SEND_PACKET(gifDmaBuf); -} - -void -gsSelectVisibleFb(int n) -{ - struct GsState *g = gsCurState; - int addr; - - addr = g->fbAddr[n]/4/2048; - SET_REG64(GS_DISPFB2, MAKE_GS_DISPFB(addr, g->width/64, g->psm, 0, 0)); -} - -void -gsClear(void) -{ - struct GsState *gs = gsCurState; - uint16 x, y; - int r = gs->clearcol & 0xFF; - int g = (gs->clearcol >> 8) & 0xFF; - int b = (gs->clearcol >> 16) & 0xFF; - int a = (gs->clearcol >> 24) & 0xFF; - - x = (gs->width << 4) + gs->xoff; - y = (gs->height << 4) + gs->yoff; - - GIF_BEGIN_PACKET(gifDmaBuf); - GIF_TAG(gifDmaBuf, 6, 1, 0, 0, 0, 1, 0x0e); - /* clear z-buffer too */ - GIF_DATA_AD(gifDmaBuf, GS_TEST_1, - MAKE_GS_TEST(0, 0, 0, 0, 0, 0, 1, ZTST_ALWAYS)); - GIF_DATA_AD(gifDmaBuf, GS_PRIM, - MAKE_GS_PRIM(PRIM_SPRITE, 0, 0, 0, 0, 0, 0, 0, 0)); - GIF_DATA_AD(gifDmaBuf, GS_RGBAQ, - MAKE_GS_RGBAQ(r, g, b, a, 0)); - GIF_DATA_AD(gifDmaBuf, GS_XYZ2, MAKE_GS_XYZ(0, 0, 0)); - GIF_DATA_AD(gifDmaBuf, GS_XYZ2, MAKE_GS_XYZ(x, y, 0)); - /* re-enable z-test */ - GIF_DATA_AD(gifDmaBuf, GS_TEST_1, - MAKE_GS_TEST(0, 0, 0, 0, 0, 0, gs->ztest, gs->zfunc)); - GIF_SEND_PACKET(gifDmaBuf); -} - -void -gsNormalizedToScreen(float *v1, uint32 *v2) -{ - struct GsState *g = gsCurState; - uint64 d; - - d = g->zmax & 0xFFFFFFFF; - v2[0] = (1.0f+v1[0])*g->width/2; - v2[1] = (1.0f-v1[1])*g->height/2; - v2[2] = (1.0f-v1[2])*d/2; -} - -void -drawrect(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint32 col) -{ - struct GsState *gs = gsCurState; - x1 = (x1<<4) + gs->xoff; - y1 = (y1<<4) + gs->yoff; - x2 = (x2<<4) + gs->xoff; - y2 = (y2<<4) + gs->yoff; - int r = col & 0xFF; - int g = (col >> 8) & 0xFF; - int b = (col >> 16) & 0xFF; - int a = (col >> 24) & 0xFF; - - GIF_BEGIN_PACKET(gifDmaBuf); - GIF_TAG(gifDmaBuf, 4, 1, 0, 0, 0, 1, 0x0e); - GIF_DATA_AD(gifDmaBuf, GS_PRIM, - MAKE_GS_PRIM(PRIM_SPRITE, 0, 0, 0, - gs->blend.enable, 0, 0, 0, 0)); - GIF_DATA_AD(gifDmaBuf, GS_RGBAQ, - MAKE_GS_RGBAQ(r, g, b, a, 0)); - GIF_DATA_AD(gifDmaBuf, GS_XYZ2, MAKE_GS_XYZ(x1, y1, 0)); - GIF_DATA_AD(gifDmaBuf, GS_XYZ2, MAKE_GS_XYZ(x2, y2, 0)); - GIF_SEND_PACKET(gifDmaBuf); -} - -/* -void -drawdata(float *data, int vertexCount) -{ - struct GsState *g = gsCurState; - int i; - float *verts, *colors; - Vector4f vf; - uint32 vi[3]; - uint8 c[4]; - - verts = &data[0]; - colors = &data[vertexCount*3]; - - GIF_BEGIN_PACKET(gifDmaBuf); - GIF_TAG(gifDmaBuf, vertexCount, 1, 1, - MAKE_GS_PRIM(PRIM_TRI,IIP_GOURAUD,0,0,0,0,0,0,0), 0, 2, 0x51); - - for (i = 0; i < vertexCount; i++) { - vec4fCopy(vf, &verts[i*3]); - vf[3] = 1.0f; - - matMultVec(mathModelViewMat, vf); - matMultVec(mathProjectionMat, vf); - vf[0] /= vf[3]; - vf[1] /= vf[3]; - vf[2] /= vf[3]; - - gsNormalizedToScreen(vf, vi); - - vi[0] = ((vi[0]*16) + g->xoff) & 0xFFFF; - vi[1] = ((vi[1]*16) + g->yoff) & 0xFFFF; - - c[0] = colors[i*4+0]; - c[1] = colors[i*4+1]; - c[2] = colors[i*4+2]; - c[3] = colors[i*4+3]; - - GIF_DATA_RGBAQ(gifDmaBuf, c[0], c[1], c[2], c[3]); - GIF_DATA_XYZ2(gifDmaBuf, vi[0], vi[1], vi[2], 0); - } - GIF_SEND_PACKET(gifDmaBuf); -} -*/ diff --git a/tools/ps2/gs.h b/tools/ps2/gs.h deleted file mode 100755 index 3733723..0000000 --- a/tools/ps2/gs.h +++ /dev/null @@ -1,484 +0,0 @@ -#ifndef GS_H -#define GS_H -#include "ps2.h" -#include "ee_regs.h" - -typedef struct GsState GsState; -struct GsState { - int32 mode, interlaced, field; - int32 width, height; - int32 startx, starty; - int32 dw, dh; - int32 magh, magv; - int32 xoff, yoff; - int32 xmax, ymax; - int32 psm; - int32 depth; - int32 bpp; - int32 zpsm; - int32 zdepth; - int32 zbpp; - int32 zmax; - int32 currentMemPtr; - uint32 fbAddr[2]; - uint32 zbAddr; - - int32 visibleFb; - int32 activeFb; - - uint32 clearcol; - - int32 ztest; - int32 zfunc; - struct { - int32 enable; - int32 a, b, c, d; - int32 fix; - } blend; - int32 shadingmethod; -}; - -extern GsState *gsCurState; - -void gsDumpState(void); -void gsInitState(uint16 interlaced, - uint16 mode, uint16 field); -void gsInit(void); -void gsUpdateContext(void); -void gsSelectVisibleFb(int n); -void gsSelectActiveFb(int n); -void gsFlip(int synch); -void gsClear(void); -void gsNormalizedToScreen(float *v1, uint32 *v2); - -void drawrect(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint32 col); -//void drawdata(float *data, int vertexCount); - - -#define NTSC 2 -#define PAL 3 -#define DTV480P 0x50 //(use with NONINTERLACED, FRAME) - -#define NONINTERLACED 0 -#define INTERLACED 1 - -#define FIELD 0 -#define FRAME 1 - -#define PSMCT32 0 -#define PSMCT24 1 -#define PSMCT16 2 -#define PSMCT16S 10 -#define PS_GPU24 18 - -#define PSMCZ32 0 -#define PSMCZ24 1 -#define PSMCZ16 2 -#define PSMCZ16S 10 - -#define ZTST_NEVER 0 -#define ZTST_ALWAYS 1 -#define ZTST_GREATER 2 -#define ZTST_GEQUAL 3 - -#define PRIM_POINT 0 -#define PRIM_LINE 1 -#define PRIM_LINE_STRIP 2 -#define PRIM_TRI 3 -#define PRIM_TRI_STRIP 4 -#define PRIM_TRI_FAN 5 -#define PRIM_SPRITE 6 -#define PRIM_NO_SPEC 7 -#define IIP_FLAT 0 -#define IIP_GOURAUD 1 - -/* - * GS General Purpose Registers - */ - -#define GS_PRIM 0x00 -#define GS_RGBAQ 0x01 -#define GS_ST 0x02 -#define GS_UV 0x03 -#define GS_XYZF2 0x04 -#define GS_XYZ2 0x05 -#define GS_TEX0_1 0x06 -#define GS_TEX0_2 0x07 -#define GS_CLAMP_1 0x08 -#define GS_CLAMP_2 0x09 -#define GS_FOG 0x0a -#define GS_XYZF3 0x0c -#define GS_XYZ3 0x0d -#define GS_TEX1_1 0x14 -#define GS_TEX1_2 0x15 -#define GS_TEX2_1 0x16 -#define GS_TEX2_2 0x17 -#define GS_XYOFFSET_1 0x18 -#define GS_XYOFFSET_2 0x19 -#define GS_PRMODECONT 0x1a -#define GS_PRMODE 0x1b -#define GS_TEXCLUT 0x1c -#define GS_SCANMSK 0x22 -#define GS_MIPTBP1_1 0x34 -#define GS_MIPTBP1_2 0x35 -#define GS_MIPTBP2_1 0x36 -#define GS_MIPTBP2_2 0x37 -#define GS_TEXA 0x3b -#define GS_FOGCOL 0x3d -#define GS_TEXFLUSH 0x3f -#define GS_SCISSOR_1 0x40 -#define GS_SCISSOR_2 0x41 -#define GS_ALPHA_1 0x42 -#define GS_ALPHA_2 0x43 -#define GS_DIMX 0x44 -#define GS_DTHE 0x45 -#define GS_COLCLAMP 0x46 -#define GS_TEST_1 0x47 -#define GS_TEST_2 0x48 -#define GS_PABE 0x49 -#define GS_FBA_1 0x4a -#define GS_FBA_2 0x4b -#define GS_FRAME_1 0x4c -#define GS_FRAME_2 0x4d -#define GS_ZBUF_1 0x4e -#define GS_ZBUF_2 0x4f -#define GS_BITBLTBUF 0x50 -#define GS_TRXPOS 0x51 -#define GS_TRXREG 0x52 -#define GS_TRXDIR 0x53 -#define GS_HWREG 0x54 -#define GS_SIGNAL 0x60 -#define GS_FINISH 0x61 -#define GS_LABEL 0x62 - -#define MAKE_GS_PRIM(PRIM,IIP,TME,FGE,ABE,AA1,FST,CTXT,FIX) \ - (BIT64(PRIM, 0) | \ - BIT64(IIP, 3) | \ - BIT64(TME, 4) | \ - BIT64(FGE, 5) | \ - BIT64(ABE, 6) | \ - BIT64(AA1, 7) | \ - BIT64(FST, 8) | \ - BIT64(CTXT, 9) | \ - BIT64(FIX, 10)) - -#define MAKE_GS_RGBAQ(R,G,B,A,Q) \ - (BIT64(R, 0) | \ - BIT64(G, 8) | \ - BIT64(B, 16) | \ - BIT64(A, 24) | \ - BIT64(Q, 32)) - -#define MAKE_GS_ST(S,T) \ - (BIT64(S, 0) | \ - BIT64(T, 32)) - -#define MAKE_GS_UV(U,V) \ - (BIT64(U, 0) | \ - BIT64(V, 16)) - -#define MAKE_GS_XYZF(X,Y,Z,F) \ - (BIT64(X, 0) | \ - BIT64(Y, 16) | \ - BIT64(Z, 32) | \ - BIT64(F, 56)) - -#define MAKE_GS_XYZ(X,Y,Z) \ - (BIT64(X, 0) | \ - BIT64(Y, 16) | \ - BIT64(Z, 32)) - -#define MAKE_GS_TEX0(TBP0,TBW,PSM,TW,TH,TCC,TFX,CBP,CPSM,CSM,CSA,CLD) \ - (BIT64(TBP0, 0) | \ - BIT64(TBW, 14) | \ - BIT64(PSM, 20) | \ - BIT64(TW, 26) | \ - BIT64(TH, 30) | \ - BIT64(TCC, 34) | \ - BIT64(TFX, 35) | \ - BIT64(CBP, 37) | \ - BIT64(CPSM, 51) | \ - BIT64(CSM, 55) | \ - BIT64(CSA, 56) | \ - BIT64(CLD, 61)) - -#define MAKE_GS_CLAMP(WMS,WMT,MINU,MAXU,MINV,MAXV) \ - (BIT64(WMS, 0) | \ - BIT64(WMT, 2) | \ - BIT64(MINU, 4) | \ - BIT64(MAXU, 14) | \ - BIT64(MINV, 24) | \ - BIT64(MAXV, 34)) - -#define MAKE_GS_FOG(F) \ - (BIT64(F, 56)) - -#define MAKE_GS_TEX1(LCM,MXL,MMAG,MMIN,MTBA,L,K) \ - (BIT64(LCM, 0) | \ - BIT64(MXL, 2) | \ - BIT64(MMAG, 5) | \ - BIT64(MMIN, 6) | \ - BIT64(MTBA, 9) | \ - BIT64(L, 19) | \ - BIT64(K, 32)) - -#define MAKE_GS_TEX2(PSM,CBP,CPSM,CSM,CSA,CLD) \ - (BIT64(PSM, 20) | \ - BIT64(CBP, 37) | \ - BIT64(CPSM, 51) | \ - BIT64(CSM, 55) | \ - BIT64(CSA, 56) | \ - BIT64(CLD, 61)) - -#define MAKE_GS_XYOFFSET(OFX,OFY) \ - (BIT64(OFX, 0) | \ - BIT64(OFY, 32)) - -#define MAKE_GS_PRMODECONT(AC) \ - (BIT64(AC, 0)) - -#define MAKE_GS_PRMODE(IIP,TME,FGE,ABE,AA1,FST,CTXT,FIX) \ - (BIT64(IIP, 3) | \ - BIT64(TME, 4) | \ - BIT64(FGE, 5) | \ - BIT64(ABE, 6) | \ - BIT64(AA1, 7) | \ - BIT64(FST, 8) | \ - BIT64(CTXT, 9) | \ - BIT64(FIX, 10)) - -#define MAKE_GS_TEXCLUT(CBW,COU,COV) \ - (BIT64(CBW, 0) | \ - BIT64(COU, 6) | \ - BIT64(COV, 12)) - -#define MAKE_GS_SCANMSK(MSK) \ - (BIT64(MSK, 0)) - -#define MAKE_GS_MIPTBP1(TBP1,TBW1,TBP2,TBW2,TBP3,TBW3) \ - (BIT64(TBP1, 0) | \ - BIT64(TBW1, 14) | \ - BIT64(TBP2, 20) | \ - BIT64(TBW2, 34) | \ - BIT64(TBP3, 40) | \ - BIT64(TBW3, 54)) - -#define MAKE_GS_MIPTBP2(TBP4,TBW4,TBP5,TBW5,TBP6,TBW6) \ - (BIT64(TBP4, 0) | \ - BIT64(TBW4, 14) | \ - BIT64(TBP5, 20) | \ - BIT64(TBW5, 34) | \ - BIT64(TBP6, 40) | \ - BIT64(TBW6, 54)) - -#define MAKE_GS_TEXA(TA0,AEM,TA1) \ - (BIT64(TA0, 0) | \ - BIT64(AEM, 15) | \ - BIT64(TA1, 32)) - -#define MAKE_GS_FOGCOL(FCR,FCG,FCB) \ - (BIT64(FCR, 0) | \ - BIT64(FCG, 8) | \ - BIT64(FCB, 16)) - -/* GS_TEXFLUSH */ - -#define MAKE_GS_SCISSOR(SCAX0,SCAX1,SCAY0,SCAY1) \ - (BIT64(SCAX0, 0) | \ - BIT64(SCAX1, 16) | \ - BIT64(SCAY0, 32) | \ - BIT64(SCAY1, 48)) - -#define MAKE_GS_ALPHA(A,B,C,D,FIX) \ - (BIT64(A, 0) | \ - BIT64(B, 2) | \ - BIT64(C, 4) | \ - BIT64(D, 6) | \ - BIT64(FIX, 32)) - -#define MAKE_GS_DIMX(DM00,DM01,DM02,DM03, \ - DM10,DM11,DM12,DM13, \ - DM20,DM21,DM22,DM23, \ - DM30,DM31,DM32,DM33) \ - (BIT64(DM00, 0) | \ - BIT64(DM01, 4) | \ - BIT64(DM02, 8) | \ - BIT64(DM03, 12) | \ - BIT64(DM10, 16) | \ - BIT64(DM11, 20) | \ - BIT64(DM12, 24) | \ - BIT64(DM13, 28) | \ - BIT64(DM20, 32) | \ - BIT64(DM21, 36) | \ - BIT64(DM22, 40) | \ - BIT64(DM23, 44) | \ - BIT64(DM30, 48) | \ - BIT64(DM31, 52) | \ - BIT64(DM32, 56) | \ - BIT64(DM33, 60)) - -#define MAKE_GS_DITHE(DTHE) \ - (BIT64(DTHE, 0)) - -#define MAKE_GS_COLCLAMP(CLAMP) \ - (BIT64(CLAMP, 0)) - -#define MAKE_GS_TEST(ATE,ATST,AREF,AFAIL,DATE,DATM,ZTE,ZTST) \ - (BIT64(ATE, 0) | \ - BIT64(ATST, 1) | \ - BIT64(AREF, 4) | \ - BIT64(AFAIL, 12) | \ - BIT64(DATE, 14) | \ - BIT64(DATM, 15) | \ - BIT64(ZTE, 16) | \ - BIT64(ZTST, 17)) - -#define MAKE_GS_PABE(PABE) \ - (BIT64(PABE, 0)) - -#define MAKE_GS_FBA(FBA) \ - (BIT64(FBA, 0)) - -#define MAKE_GS_FRAME(FBP,FBW,PSM,FBMSK) \ - (BIT64(FBP, 0) | \ - BIT64(FBW, 16) | \ - BIT64(PSM, 24) | \ - BIT64(FBMSK, 32)) - -#define MAKE_GS_ZBUF(ZBP,PSM,ZMSK) \ - (BIT64(ZBP, 0) | \ - BIT64(PSM, 24) | \ - BIT64(ZMSK, 32)) - -#define MAKE_GS_BITBLTBUF(SBP,SBW,SPSM,DBP,DBW,DPSM) \ - (BIT64(SBP, 0) | \ - BIT64(SBW, 16) | \ - BIT64(SPSM, 24) | \ - BIT64(DBP, 32) | \ - BIT64(DBW, 48) | \ - BIT64(DPSM, 56)) - -#define MAKE_GS_TRXPOS(SSAX,SSAY,DSAX,DSAY,DIR) \ - (BIT64(SSAX, 0) | \ - BIT64(SSAY, 16) | \ - BIT64(DSAX, 32) | \ - BIT64(DSAY, 48) | \ - BIT64(DIR, 59)) - -#define MAKE_GS_TRXREG(RRW,RRH) \ - (BIT64(RRW, 0) | \ - BIT64(RRH, 32)) - -#define MAKE_GS_TRXDIR(XDIR) \ - (BIT64(XDIR, 0)) - -#define MAKE_GS_HWREG(DATA) \ - (BIT64(DATA, 0)) - -#define MAKE_GS_SIGNAL(ID,IDMSK) \ - (BIT64(ID, 0) | \ - BIT64(IDMSK, 32)) - -/* GS_FINISH */ - -#define MAKE_GS_LABEL(ID,IDMSK) \ - (BIT64(ID, 0) | \ - BIT64(IDMSK, 32)) - - -/* - * No documentation about these: - * GS_SRFSH - * GS_SYNCH1 - * GS_SYNCH2 - * GS_SYNCV - */ - -#define MAKE_GS_PMODE(EN1,EN2,MMOD,AMOD,SLBG,ALP) \ - (BIT64(EN1, 0) | \ - BIT64(EN2, 1) | \ - BIT64(1, 2) | \ - BIT64(MMOD, 5) | \ - BIT64(AMOD, 6) | \ - BIT64(SLBG, 7) | \ - BIT64(ALP, 8)) - -#define MAKE_GS_SMODE(INT,FFMD,DPMS) \ - (BIT64(INT, 0) | \ - BIT64(FFMD, 1) | \ - BIT64(DPMS, 2)) - -#define MAKE_GS_DISPFB(FBP,FBW,PSM,DBX,DBY) \ - (BIT64(FBP, 0) | \ - BIT64(FBW, 9) | \ - BIT64(PSM, 15) | \ - BIT64(DBX, 32) | \ - BIT64(DBY, 43)) - -#define MAKE_GS_DISPLAY(DX,DY,MAGH,MAGV,DW,DH) \ - (BIT64(DX, 0) | \ - BIT64(DY, 12) | \ - BIT64(MAGH, 23) | \ - BIT64(MAGV, 27) | \ - BIT64(DW, 32) | \ - BIT64(DH, 44)) - -#define MAKE_GS_EXTBUF(EXBP,EXBW,FBIN,WFFMD,EMODE,EMODC,WDX,WDY) \ - (BIT64(EXBP, 0) | \ - BIT64(EXBW, 14) | \ - BIT64(FBIN, 20) | \ - BIT64(WFFMD, 22) | \ - BIT64(EMODA, 23) | \ - BIT64(EMODC, 25) | \ - BIT64(WDX, 32) | \ - BIT64(WDY, 43)) - -#define MAKE_GS_EXTDATA(SX,SY,SMPH,SMPV,WW,WH) \ - (BIT64(SX, 0) | \ - BIT64(SY, 12) | \ - BIT64(SMPH, 23) | \ - BIT64(SMPV, 27) | \ - BIT64(WW, 32) | \ - BIT64(WH, 44)) - -#define MAKE_GS_EXTWRITE(WRITE) \ - (BIT64(WRITE, 0)) - -#define MAKE_GS_BGCOLOR(R,G,B) \ - (BIT64(R, 0) | \ - BIT64(G, 8) | \ - BIT64(B, 16)) - -#define MAKE_GS_CSR(SIGNAL,FINISH,HSINT,VSINT,EDWINT,FLUSH,RESET,NFIELD,\ - FIELD,FIFO,REV,ID) \ - (BIT64(SIGNAL, 0) | \ - BIT64(FINISH, 1) | \ - BIT64(HSINT, 2) | \ - BIT64(VSINT, 3) | \ - BIT64(EDWINT, 4) | \ - BIT64(FLUSH, 8) | \ - BIT64(RESET, 9) | \ - BIT64(NFIELD, 12) | \ - BIT64(FIELD, 13) | \ - BIT64(FIFO, 14) | \ - BIT64(REV, 16) | \ - BIT64(ID, 24)) - -#define MAKE_GS_IMR(SIGMSK,FINISHMSK,HSMSK,VSMSK,EDWMSK) \ - (BIT64(SIGMSK, 8) | \ - BIT64(FINISHMSK, 9) | \ - BIT64(HSMSK, 10) | \ - BIT64(VSMSK, 11) | \ - BIT64(EDWMSK, 12)) - -#define MAKE_GS_BUSDIR(DIR) \ - (BIT64(DIR, 0)) - -#define MAKE_GS_SIGLBLID(SIGID,LBLID) \ - (BIT64(SIGID, 0) | \ - BIT64(LBLID, 32)) - -#define GS_RESET() \ - SET_REG64(GS_CSR, BIT64(1, 9)) - -#endif diff --git a/tools/ps2/light.vu b/tools/ps2/light.vu deleted file mode 100644 index 73b5fed..0000000 --- a/tools/ps2/light.vu +++ /dev/null @@ -1,94 +0,0 @@ -; Ambient light: - NOP LQ VF26, ambientLight(VI00) - NOP XITOP VI01 - NOP IADDIU VI03, VI12, 2 -Ambloop: - NOP LQ VF03, 0(VI03) ; output color - NOP NOP - NOP NOP - NOP NOP - ITOF0 VF03, VF03 NOP - NOP NOP - NOP NOP - NOP NOP - ADD VF03, VF03, VF26 NOP - NOP NOP - NOP NOP - NOP NOP - FTOI0 VF03, VF03 NOP - NOP IADDI VI01, VI01, -1 - NOP IADDIU VI03, VI03, numOutAttribs - NOP IBNE VI01, VI00, Ambloop - NOP SQ VF03, -numOutAttribs(VI03) -; end amblight - -; Direct Light - NOP LQ VF26, lightDir(VI00) - NOP XITOP VI01 - NOP XTOP VI02 - NOP IADDIU VI03, VI12, 2 - SUB.xyz VF26, VF00, VF26 NOP -Dirloop: - NOP LQ VF01, 3(VI02); ; normal - NOP LQ VF02, 0(VI03); ; output color - NOP NOP - NOP NOP - MUL VF03, VF01, VF26 NOP - ITOF0 VF02, VF02 NOP - NOP NOP - NOP NOP - ADDy.x VF03, VF03, VF03y NOP - NOP NOP - NOP NOP - NOP NOP - ADDz.x VF03, VF03, VF03z NOP - NOP NOP - NOP NOP - NOP NOP - MAX.x VF03, VF00, VF03 NOP ; clamp to 0 - NOP[I] LOI 255 - NOP NOP - NOP NOP - MULi.x VF03, VF03, I NOP - NOP NOP - NOP NOP - NOP NOP - ADDx.xyz VF02, VF02, VF03x NOP - NOP NOP - NOP NOP - NOP NOP - FTOI0 VF02, VF02 NOP - NOP IADDI VI01, VI01, -1 - NOP IADDIU VI02, VI02, numInAttribs - NOP IADDIU VI03, VI03, numOutAttribs - NOP IBNE VI01, VI00, Dirloop - NOP SQ VF02, -numOutAttribs(VI03) -; end dirlight - -; Material color and clamp - NOP LQ VF27, matColor(VI00) - NOP XITOP VI01 - NOP IADDIU VI03, VI12, 2 -Colorloop: - NOP LQ VF03, 0(VI03) - NOP NOP - NOP NOP - NOP NOP - ITOF0 VF03, VF03 NOP - NOP NOP - NOP NOP - NOP NOP - MUL VF03, VF03, VF27 NOP - NOP[I] LOI 255 - NOP NOP - NOP NOP - MINIi VF03, VF03, I NOP - NOP NOP - NOP NOP - NOP NOP - FTOI0 VF03, VF03 NOP - NOP IADDI VI01, VI01, -1 - NOP IADDIU VI03, VI03, numOutAttribs - NOP IBNE VI01, VI00, Colorloop - NOP SQ VF03, -numOutAttribs(VI03) -; end material color diff --git a/tools/ps2/main.cpp b/tools/ps2/main.cpp deleted file mode 100755 index 859e4a5..0000000 --- a/tools/ps2/main.cpp +++ /dev/null @@ -1,285 +0,0 @@ -#include -#include -#define _USE_MATH_DEFINES -#include -#include - -#include -#include - -#include "ps2.h" -#include "dma.h" -#include "gif.h" -#include "gs.h" - -#include "math.h" - -using namespace std; - -Matrix projMat, viewMat, worldMat; - -extern uint32 MyDmaPacket[]; -extern Matrix vuMat; -extern Matrix vuLightMat; -extern float vuOffset[]; -extern uint64 vuGIFtag[]; -extern float vuMatcolor[]; -extern float vuSurfProps[]; -extern uint32 vuGeometry[]; -extern uint32 mpgCall[]; -extern uint32 textureCall[]; -extern uint32 geometryCall[]; -extern uint32 defaultPipe[]; -extern uint32 skinPipe[]; - -rw::Clump *clump; - -uint64 __attribute__((aligned (16))) rasterPacket[16]; - -void -uploadRaster(rw::Raster *ras) -{ - GsState *g = gsCurState; - uint64 *dp; - uint32 *wp; - uint32 destAddr = g->currentMemPtr; - uint32 size = ras->width*ras->height*4; - g->currentMemPtr += size; - - // set up transfer - wp = (uint32*)rasterPacket; - *wp++ = 0x10000000 | 6; // DMAcnt; 6 qw - *wp++ = 0; - *wp++ = 0; - *wp++ = 0x50000000 | 6; // DIRECT; 6 qw - dp = (uint64*)wp; - *dp++ = MAKE_GIF_TAG(4, 1, 0, 0, 0, 1); - *dp++ = 0x0e; - *dp++ = MAKE_GS_BITBLTBUF(0,0,0,destAddr/4/64, ras->width/64, PSMCT32); - *dp++ = GS_BITBLTBUF; - *dp++ = MAKE_GS_TRXPOS(0, 0, 0, 0, 0); - *dp++ = GS_TRXPOS; - *dp++ = MAKE_GS_TRXREG(ras->width, ras->height); - *dp++ = GS_TRXREG; - *dp++ = 0; - *dp++ = GS_TRXDIR; - *dp++ = MAKE_GIF_TAG(size/0x10, 1, 0, 0, 2, 0); - *dp++ = 0; - - // the data - wp = (uint32*)dp; - *wp++ = 0x30000000 | size/0x10; // DMAref - *wp++ = (uint32)ras->texels; - *wp++ = 0; - *wp++ = 0x50000000 | size/0x10; - - int logw = 0, logh = 0; - int s; - for(s = 1; s < ras->width; s *= 2) - logw++; - for(s = 1; s < ras->height; s *= 2) - logh++; - - // set texturing registers - *wp++ = 0x60000000 | 4; // DMAret; 4 qw - *wp++ = 0; - *wp++ = 0; - *wp++ = 0x50000000 | 4; // DIRECT; 4 qw - dp = (uint64*)wp; - *dp++ = MAKE_GIF_TAG(3, 1, 0, 0, 0, 1); - *dp++ = 0x0e; - *dp++ = 1; - *dp++ = GS_TEXFLUSH; - *dp++ = MAKE_GS_TEX0(destAddr/4/64, ras->width/64, PSMCT32, - logw, logh, 0, 0, 0, 0, 0, 0, 0); - *dp++ = GS_TEX0_1; - *dp++ = MAKE_GS_TEX1(0, 0, 1, 1, 0, 0, 0); - *dp++ = GS_TEX1_1; -} - -void -dumpRasterPacket(int n) -{ - int i; - uint32 *p = (uint32*)rasterPacket; - for(i = 0; i < n; i++){ - printf("%p %p %p %p\n", p[0], p[1], p[2], p[3]); - p += 4; - } - printf("\n"); -} - -rw::Pipeline *defpipe; - -void -drawAtomic(rw::Atomic *atomic) -{ - rw::Geometry *geo = atomic->geometry; - if(!(geo->flags & rw::Geometry::NATIVE)){ - if(atomic->pipeline) - atomic->pipeline->instance(atomic); - else - defpipe->instance(atomic); - } - assert(geo->instData != NULL); - rw::ps2::InstanceDataHeader *instData = - (rw::ps2::InstanceDataHeader*)geo->instData; - rw::MeshHeader *meshHeader = geo->meshHeader; - rw::Mesh *mesh; - uint8 *color; - - atomic->frame->updateLTM(); - matCopy(vuLightMat, atomic->frame->ltm); - matMult(vuMat, atomic->frame->ltm); - rw::Skin *skin = *PLUGINOFFSET(rw::Skin*, geo, rw::skinGlobals.offset); - for(uint i = 0; i < instData->numMeshes; i++){ - if(instData->instanceMeshes[i].arePointersFixed == 0) - rw::ps2::fixDmaOffsets(&instData->instanceMeshes[i]); - geometryCall[1] = (uint32)instData->instanceMeshes[i].data; - mesh = &meshHeader->mesh[i]; - color = mesh->material->color; - - uint32 oldPtr = gsCurState->currentMemPtr; - vuMatcolor[0] = color[0]/255.0f; - vuMatcolor[1] = color[1]/255.0f; - vuMatcolor[2] = color[2]/255.0f; - vuMatcolor[3] = color[3]/2.0f/255.0f; - uint32 tex = 0; - if(mesh->material->texture && mesh->material->texture->raster){ - vuMatcolor[0] /= 2.0f; - vuMatcolor[1] /= 2.0f; - vuMatcolor[2] /= 2.0f; - tex = 0x10; - uploadRaster(mesh->material->texture->raster); - }else{ - rasterPacket[0] = 0x60000000; - rasterPacket[1] = 0x00000000; - rasterPacket[2] = 0x00000000; - rasterPacket[3] = 0x00000000; - } - textureCall[1] = (uint32)rasterPacket; - vuGIFtag[0] = MAKE_GIF_TAG(0,1,1,0xC|tex,0,3); - vuGIFtag[1] = 0x412; - if(rw::skinGlobals.offset && skin){ - geometryCall[3] = 0x020000DC; - mpgCall[1] = (uint32)skinPipe; - }else{ - geometryCall[3] = 0x02000114; - mpgCall[1] = (uint32)defaultPipe; - } - - SET_REG32(D1_QWC, 0x00); - SET_REG32(D1_TADR, (uint)MyDmaPacket & 0x0FFFFFFF); - FlushCache(0); - SET_REG32(D1_CHCR, MAKE_DN_CHCR(1, 1, 0, 1, 0, 1)); - DMA_WAIT(D1_CHCR); - gsCurState->currentMemPtr = oldPtr; - } -} - -void -draw(void) -{ - Matrix m; - static float rot = 0.0f; - - gsClear(); - - matMakeIdentity(viewMat); -// matTranslate(viewMat, 0.0f, 0.0f, -34.0f); -// matTranslate(viewMat, 0.0f, 0.0f, -10.0f); -// matTranslate(viewMat, 0.0f, 0.0f, -8.0f); - matTranslate(viewMat, 0.0f, 0.0f, -4.0f); - matRotateX(viewMat, rot); - matRotateY(viewMat, rot); - matRotateZ(viewMat, rot); - - matCopy(vuMat, projMat); - matMult(vuMat, viewMat); - - for(int i = 0; i < clump->numAtomics; i++){ - char *name = PLUGINOFFSET(char, clump->atomicList[i]->frame, - gta::nodeNameOffset); - if(strstr(name, "_dam") || strstr(name, "_vlo")) - continue; - matCopy(m, vuMat); - drawAtomic(clump->atomicList[i]); - matCopy(vuMat, m); - } - - rot += 0.001f; - if(rot > 2*M_PI) - rot -= 2*M_PI; -} - -int -main() -{ - GsState gss; - gsCurState = &gss; - - dmaReset(1); - -// gsInitState(NONINTERLACED, PAL, FRAME); -// gsInitState(INTERLACED, PAL, FRAME); - gsInitState(INTERLACED, PAL, FIELD); - gsCurState->clearcol = 0x80404040; - - gsInit(); - - gta::attachPlugins(); - - defpipe = rw::ps2::makeDefaultPipeline(); - - printf("platform: %d\n", rw::platform); - - rw::uint32 len; -// rw::uint8 *data = rw::getFileContents("host:player-vc-ps2.dff", &len); - rw::uint8 *data = rw::getFileContents("host:player_pc.dff", &len); -// rw::uint8 *data = rw::getFileContents("host:od_newscafe_dy-ps2.dff", &len); -// rw::uint8 *data = rw::getFileContents("host:admiral-ps2.dff", &len); - rw::StreamMemory in; - in.open(data, len); - rw::findChunk(&in, rw::ID_CLUMP, NULL, NULL); - clump = rw::Clump::streamRead(&in); - in.close(); - delete[] data; - - data = new rw::uint8[256*1024]; - rw::StreamMemory out; - out.open(data, 0, 256*1024); - clump->streamWrite(&out); -// cf = fopen("host:out-ps2.dff", "wb"); -// assert(cf != NULL); -// fwrite(data, out.getLength(), 1, cf); -// fclose(cf); - out.close(); - delete[] data; - - - vuOffset[0] = 2048.0f; - vuOffset[1] = 2048.0f; - - for(int i = 0; i < clump->numAtomics; i++){ - rw::Atomic *a = clump->atomicList[i]; - char *name = - PLUGINOFFSET(char, a->frame, gta::nodeNameOffset); - printf("%s\n", name); - } - -// gsDumpState(); - -// matPerspective(mathProjectionMat, 60.0f, (float)gss.width/gss.height, -// matPerspective(mathProjectionMat, 60.0f, (float)gss.width/gss.dh, -// matPerspective(mathProjectionMat, 60.0f, 4.0/3.0, 1.0f, 100.0f); -// matPerspective(mathProjectionMat, 60.0f, 16.0/9.0, 1.0f, 100.0f); - matPerspective2(projMat, 60.0f, 4.0/3.0, gss.width,gss.height, - 1.0f, 100.0f, 16777216, 1); - - for(;;){ - draw(); - gsFlip(0); - } - - return 0; -} diff --git a/tools/ps2/math.cpp b/tools/ps2/math.cpp deleted file mode 100755 index 0c586b1..0000000 --- a/tools/ps2/math.cpp +++ /dev/null @@ -1,239 +0,0 @@ -#include -#define _USE_MATH_DEFINES -#include -#include "math.h" - -//Matrix mathModelViewMat; -//Matrix mathNormalMat; -//Matrix mathProjectionMat; - -void -matDump(Matrix m) -{ - int i, j; -#define M(i,j) m[i*4+j] - for (i = 0; i < 4; i++) { - for (j = 0; j < 4; j++) - printf("%f ", M(j,i)); - printf("\n"); - } -#undef M - printf("\n"); -} - -void -matMakeIdentity(Matrix m) -{ - int i, j; - for (i = 0; i < 4; i++) - for (j = 0; j < 4; j++) - m[i*4+j] = (i == j) ? 1.0f : 0.0f; -} - -void -matCopy(Matrix m1, Matrix m2) -{ - int i; - for (i = 0; i < 16; i++) - m1[i] = m2[i]; -} - -void -matMult(Matrix m1, Matrix m2) -{ - int i, j; - Matrix newmat; -#define M1(i,j) m1[i*4+j] -#define M2(i,j) m2[i*4+j] -#define NEW(i,j) newmat[i*4+j] - for (i = 0; i < 4; i++) - for (j = 0; j < 4; j++) - NEW(i,j) = M1(0,j)*M2(i,0) - + M1(1,j)*M2(i,1) - + M1(2,j)*M2(i,2) - + M1(3,j)*M2(i,3); -#undef M1 -#undef M2 -#undef NEW - matCopy(m1, newmat); -} - -void -matMultVec(Matrix m, Vector4f v) -{ - int i; - Vector4f newmat; -#define M(i,j) m[i*4+j] - for (i = 0; i < 4; i++) - newmat[i] = M(0,i)*v[0] - + M(1,i)*v[1] - + M(2,i)*v[2] - + M(3,i)*v[3]; -#undef M - vec4fCopy(v, newmat); -} - -void -matInverse(Matrix m1, Matrix m2) -{ - float det; - -#define N(i,j) m1[i*4+j] -#define M(i,j) m2[i*4+j] - det = M(0,0)*(M(2,2)*M(1,1) - M(1,2)*M(2,1)) - - M(0,1)*(M(2,2)*M(1,0) - M(1,2)*M(2,0)) - + M(0,2)*(M(2,1)*M(1,0) - M(1,1)*M(2,0)); - matMakeIdentity(m1); - N(0,0) = (M(2,2)*M(1,1) - M(1,2)*M(2,1))/det; - N(0,1) = (M(1,2)*M(2,0) - M(2,2)*M(1,0))/det; - N(0,2) = (M(2,1)*M(1,0) - M(1,1)*M(2,0))/det; - N(1,0) = (M(0,2)*M(2,1) - M(2,2)*M(0,1))/det; - N(1,1) = (M(2,2)*M(0,0) - M(0,2)*M(2,0))/det; - N(1,2) = (M(0,1)*M(2,0) - M(2,1)*M(0,0))/det; - N(2,0) = (M(1,2)*M(0,1) - M(0,2)*M(1,1))/det; - N(2,1) = (M(0,2)*M(1,0) - M(1,2)*M(0,0))/det; - N(2,2) = (M(1,1)*M(0,0) - M(0,1)*M(1,0))/det; -#undef M -#undef N -} - -void -vec4fCopy(Vector4f v1, Vector4f v2) -{ - v1[0] = v2[0]; - v1[1] = v2[1]; - v1[2] = v2[2]; - v1[3] = v2[3]; -} - -float -vec3fDot(Vector3f v1, Vector3f v2) -{ - return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; -} - -void -vec3fNormalize(Vector3f v) -{ - float d; - - d = sqrtf(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); - v[0] /= d; - v[1] /= d; - v[2] /= d; -} - -void -matRotateX(Matrix m, float ang) -{ - Matrix rot; - matMakeIdentity(rot); -#define M(i,j) rot[i*4+j] - M(1,1) = cosf(ang); - M(1,2) = sinf(ang); - M(2,1) = -sinf(ang); - M(2,2) = cosf(ang); -#undef M - matMult(m, rot); -} - -void -matRotateY(Matrix m, float ang) -{ - Matrix rot; - matMakeIdentity(rot); -#define M(i,j) rot[i*4+j] - M(0,0) = cosf(ang); - M(2,0) = sinf(ang); - M(0,2) = -sinf(ang); - M(2,2) = cosf(ang); -#undef M - matMult(m, rot); -} - -void -matRotateZ(Matrix m, float ang) -{ - Matrix rot; - matMakeIdentity(rot); -#define M(i,j) rot[i*4+j] - M(0,0) = cosf(ang); - M(0,1) = sinf(ang); - M(1,0) = -sinf(ang); - M(1,1) = cosf(ang); -#undef M - matMult(m, rot); -} - -void -matTranslate(Matrix m, float x, float y, float z) -{ - Matrix trans; - matMakeIdentity(trans); -#define M(i,j) trans[i*4+j] - M(3,0) = x; - M(3,1) = y; - M(3,2) = z; -#undef M - matMult(m, trans); -} - -void -matFrustum2(Matrix m, float l, float r, float xl, float xr, - float b, float t, float yb, float yt, - float n, float f, float zn, float zf) -{ - matMakeIdentity(m); -#define M(i,j) m[i*4+j] - M(0,0) = ((xr-xl)*n)/(r-l); - M(1,1) = ((yt-yb)*n)/(t-b); - M(2,0) = (l*xr-r*xl)/(r-l); - M(2,1) = (b*yt-t*yb)/(t-b); - M(2,2) = -(f*zf+n*zn)/(f-n); - M(2,3) = -1.0f; - M(3,2) = (zn-zf)*f*n/(f-n); - M(3,3) = 0.0f; -#undef M -} - -void -matFrustum(Matrix m, float l, float r, float b, float t, - float n, float f) -{ - matMakeIdentity(m); -#define M(i,j) m[i*4+j] - M(0,0) = (2.0f*n)/(r-l); - M(1,1) = (2.0f*n)/(t-b); - M(2,0) = (r+l)/(r-l); - M(2,1) = (t+b)/(t-b); - M(2,2) = -(f+n)/(f-n); - M(2,3) = -1.0f; - M(3,2) = -2.0f*f*n/(f-n); - M(3,3) = 0.0f; -#undef M -} - -void -matPerspective2(Matrix m, float fov, float ratio, float width, float height, - float n, float f, float znear, float zfar) -{ - float r, t; - - r = n*tanf(fov*M_PI/360.0f); - t = r/ratio; - - matFrustum2(m, -r, r, 0, width, - -t, t, height, 0, - n, f, znear, zfar); -} - -void -matPerspective(Matrix m, float fov, float ratio, float n, float f) -{ - float r, t; - - r = n*tanf(fov*M_PI/360.0f); - t = r/ratio; - - matFrustum(m, -r, r, -t, t, n, f); -} diff --git a/tools/ps2/math.h b/tools/ps2/math.h deleted file mode 100755 index 8211749..0000000 --- a/tools/ps2/math.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef MATH_H -#define MATH_H -#include "ps2.h" - -typedef float Matrix[16]; -typedef float Vector2f[2]; -typedef float Vector3f[3]; -typedef float Vector4f[4]; -typedef uint8 Vector4b[4]; - -extern Matrix mathModelViewMat; -extern Matrix mathNormalMat; -extern Matrix mathProjectionMat; - -void matDump(Matrix m); -void matMakeIdentity(Matrix m); -void matCopy(Matrix m1, Matrix m2); -void matMult(Matrix m1, Matrix m2); -void matMultVec(Matrix m, Vector4f v); -void vec4fCopy(Vector4f v1, Vector4f v2); -float vec3fDot(Vector3f v1, Vector3f v2); -void vec3fNormalize(Vector3f v); -void matRotateX(Matrix m, float ang); -void matRotateY(Matrix m, float ang); -void matRotateZ(Matrix m, float ang); -void matFrustum2(Matrix m, float l, float r, float xl, float xr, - float b, float t, float yb, float yt, - float n, float f, float zn, float zf); -void matFrustum(Matrix m, float l, float r, float b, float t, - float n, float f); -void matPerspective2(Matrix m, float fov, float ratio, float width, float height, - float n, float f, float znear, float zfar); -void matPerspective(Matrix m, float fov, float ratio, float n, float f); -void matTranslate(Matrix m, float x, float y, float z); -void matInverse(Matrix m1, Matrix m2); - -#endif diff --git a/tools/ps2/mesh.cpp b/tools/ps2/mesh.cpp deleted file mode 100755 index 6550abe..0000000 --- a/tools/ps2/mesh.cpp +++ /dev/null @@ -1,135 +0,0 @@ -#include -#include -#include "ps2.h" -#include "gs.h" -#include "gif.h" - -#include "math.h" -#include "mesh.h" - -//Mesh testmesh = -// #include "test.msh" -// -//Mesh playermesh = -// #include "player.msh" - -GIF_DECLARE_PACKET(meshGifBuf, 256) - -void meshDump(Mesh *m) -{ -// int i; - - printf("primitive: %d\n" - "attribs: %d\n" - "vertexCount: %d\n", m->primitive, m->attribs, m->vertexCount); - printf("vertices:\n"); - -/* - for (i = 0; i < m->vertexCount; i++) { - printf("%f %f %f\n", m->vertices[i][0], - m->vertices[i][1], - m->vertices[i][2]); - } -*/ -} - -void meshDraw(Mesh *m) -{ - struct GsState *g = gsCurState; - int i, j; - Vector4f vf; - Vector4f n; - Vector4f lightdir = {1.0f, 1.0f, 1.0f }; - float intens; - uint32 vi[3]; - uint8 c[4]; - int blockCount; - int vertexCount; - int blockVertCount; - int vertexOffset; - uint64 regs, numRegs; - uint64 prim; - int ind; - - vec3fNormalize(lightdir); - - if (m->attribs & MESHATTR_INDEXED) - vertexCount = m->indexCount; - else - vertexCount = m->vertexCount; - blockCount = vertexCount/39 + ((vertexCount%39) ? 1 : 0); - - regs = 0x5; // XYZ - numRegs = 1; - if (m->attribs & MESHATTR_COLORS || m->attribs & MESHATTR_NORMALS) { - regs = (regs << 4) | 0x1; // RGBAQ - numRegs++; - } - // TODO: texcoords and normals - - prim = MAKE_GS_PRIM(m->primitive,IIP_GOURAUD,0,0,0,0,0,0,0); - - vertexOffset = 0; - for (i = 0; i < blockCount; i++) { - blockVertCount = 39; - if (i == blockCount-1) { - blockVertCount = vertexCount % 39; - if (blockVertCount == 0) - blockVertCount = 39; - } - - if (m->primitive == PRIM_TRI_STRIP && vertexOffset > 0) { - vertexOffset -= 2; - blockVertCount += 2; - } - - GIF_BEGIN_PACKET(meshGifBuf); - GIF_TAG(meshGifBuf,blockVertCount,1,1,prim,0,numRegs,regs); - for (j = 0; j < blockVertCount; j++) { - if (m->attribs & MESHATTR_INDEXED) - ind = m->indices[j + vertexOffset]; - else - ind = j + vertexOffset; - vec4fCopy(vf, m->vertices[ind]); - vf[3] = 1.0f; - - matMultVec(mathModelViewMat, vf); - matMultVec(mathProjectionMat, vf); - vf[0] /= vf[3]; - vf[1] /= vf[3]; - vf[2] /= vf[3]; - - gsNormalizedToScreen(vf, vi); - - vi[0] = ((vi[0]*16) + g->xoff) & 0xFFFF; - vi[1] = ((vi[1]*16) + g->yoff) & 0xFFFF; - - if (m->attribs & MESHATTR_COLORS) { - c[0] = m->colors[ind][0]; - c[1] = m->colors[ind][1]; - c[2] = m->colors[ind][2]; - c[3] = m->colors[ind][3]; - - GIF_DATA_RGBAQ(meshGifBuf,c[0],c[1],c[2],c[3]); - } else if (m->attribs & MESHATTR_NORMALS) { - vec4fCopy(n, m->normals[ind]); - - matMultVec(mathNormalMat, n); - vec3fNormalize(n); - intens = vec3fDot(n, lightdir); - intens = intens > 0.0f ? intens : 0.0f; - - c[0] = intens * 255.0f; - c[1] = intens * 0.0f; - c[2] = intens * 255.0f; - c[3] = 128.0f; - - GIF_DATA_RGBAQ(meshGifBuf,c[0],c[1],c[2],c[3]); - } - GIF_DATA_XYZ2(meshGifBuf,vi[0],vi[1],vi[2],0); - } - - GIF_SEND_PACKET(meshGifBuf); - vertexOffset += blockVertCount; - } -} diff --git a/tools/ps2/mesh.h b/tools/ps2/mesh.h deleted file mode 100755 index b83ebe8..0000000 --- a/tools/ps2/mesh.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef MESH_H -#define MESH_H - -#include "ps2.h" -#include "math.h" - -enum meshAttribs { - MESHATTR_VERTICES = 0x1, - MESHATTR_NORMALS = 0x2, - MESHATTR_COLORS = 0x4, - MESHATTR_TEXCOORDS = 0x8, - MESHATTR_INDEXED = 0x10 -}; - -typedef struct Mesh Mesh; -struct Mesh { -/* - Vector3f *vertices; - Vector3f *normals; - Vector4b *colors; - Vector2f *texCoords; -*/ - int primitive; - enum meshAttribs attribs; - - int vertexCount; - float **vertices; - float **normals; - uint8 **colors; - float **texCoords; - - int indexCount; - int *indices; - -}; - -void meshDump(Mesh *m); -void meshDraw(Mesh *m); - -extern Mesh testmesh; -extern Mesh playermesh; - -#endif diff --git a/tools/ps2/mips_regs.h b/tools/ps2/mips_regs.h deleted file mode 100755 index e5c311b..0000000 --- a/tools/ps2/mips_regs.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef MIPS_MIPS_REGS_H -#define REGS_H - -/* - * MIPS Registers - */ - -#define zero $0 -#define at $1 -#define v0 $2 -#define v1 $3 -#define a0 $4 -#define a1 $5 -#define a2 $6 -#define a3 $7 -#define t0 $8 -#define t1 $9 -#define t2 $10 -#define t3 $11 -#define t4 $12 -#define t5 $13 -#define t6 $14 -#define t7 $15 -#define s0 $16 -#define s1 $17 -#define s2 $18 -#define s3 $19 -#define s4 $20 -#define s5 $21 -#define s6 $22 -#define s7 $23 -#define t8 $24 -#define t9 $25 -#define k0 $26 -#define k1 $27 -#define gp $28 -#define sp $29 -#define fp $30 -#define ra $31 -#endif diff --git a/tools/ps2/ps2.h b/tools/ps2/ps2.h deleted file mode 100755 index b5bacc7..0000000 --- a/tools/ps2/ps2.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef PS2_H -#define PS2_H - -typedef char int8; -typedef short int16; -typedef int int32; -typedef long int64; -typedef int int128 __attribute__ ((mode (TI))); - -typedef unsigned char uint8; -typedef unsigned short uint16; -typedef unsigned int uint32; -typedef unsigned long uint64; -typedef unsigned int uint128 __attribute__ ((mode (TI))); - -#define BIT32(a,b) \ - ((uint32) (a) << (b)) - -#define BIT64(a,b) \ - ((uint64) (a) << (b)) - -#define BIT128(a,b) \ - ((uint128) (a) << (b)) -/* -#ifndef NULL - #define NULL ((void *)0) -#endif - -#define FALSE 0 -#define TRUE (!FALSE) -*/ - -#define FTOI4(x) ((int16)(x)*16.0f) - -#endif diff --git a/tools/ps2/skinpipe.dsm b/tools/ps2/skinpipe.dsm deleted file mode 100644 index 43d4fdd..0000000 --- a/tools/ps2/skinpipe.dsm +++ /dev/null @@ -1,96 +0,0 @@ -.global skinPipe - -.equ vertexTop, 0x2d0 -.equ numInAttribs, 5 -.equ numOutAttribs, 3 -.equ numOutBuf, 2 -.equ vertCount, ((vertexTop-numOutBuf)/(numInAttribs*2+numOutAttribs*numOutBuf)) -.equ offset, (vertCount*numInAttribs) -.equ outBuf1, (2*offset) -.equ outSize, ((vertexTop-outBuf1-2)/2) -.equ outBuf2, (outBuf1+outSize) - -.equ lightMat, 0x3d0 -.equ lightDir, 0x3d4 -.equ matrix, 0x3f0 -.equ screenOffset, 0x3f9 -.equ gifTag, 0x3fa -.equ matColor, 0x3fb -.equ ambientLight, 0x3fd - -.balign 16,0 -skinPipe: -DMAret * -MPG 0, * -.vu -Start: - NOP LQ VF25, screenOffset(VI00) - NOP LQ VF28, matrix(VI00) - NOP LQ VF29, matrix+1(VI00) - NOP LQ VF30, matrix+2(VI00) - NOP LQ VF31, matrix+3(VI00) - NOP IADDIU VI12, VI00, outBuf1 - NOP IADDIU VI13, VI00, outBuf2 -Cnt: - NOP XTOP VI02 ; input pointer - NOP LQ VF01, gifTag(VI00) - NOP XITOP VI01 ; vertex count - NOP IADDIU VI05, VI00, 0x4000 - NOP IADD VI05, VI05, VI05 - NOP IOR VI05, VI05, VI01 - NOP SQ VF01, 0(VI12) - NOP ISW.x VI05, 0(VI12) - NOP IADDIU VI03, VI12, 1 ; output pointer - NOP LQ VF18, lightMat(VI00) - NOP LQ VF19, lightMat+1(VI00) - NOP LQ VF20, lightMat+2(VI00) - -Loop: - NOP LQI VF01, (VI02++) ; vertex - NOP LQI VF02, (VI02++) ; UV - NOP LQI VF03, (VI02++) ; color - NOP LQI VF04, (VI02++) ; normal - NOP IADDIU VI02, VI02, 1 ; skip weights - - MULAw.xyzw ACC, VF31, VF00w NOP ; transform vertex - MADDAx.xyzw ACC, VF28, VF01x NOP - MADDAy.xyzw ACC, VF29, VF01y NOP - MADDz.xyzw VF01, VF30, VF01z NOP - ITOF0 VF03, VF03 NOP - ITOF0[I] VF04, VF04 LOI 0.0078125 ; - normal scale - NOP NOP - NOP DIV Q, VF00w, VF01w - NOP WAITQ - MULq VF01, VF01, Q NOP ; perspective division - MULi VF04, VF04, I NOP ; scale normal - NOP MR32.z VF02, VF00 - NOP NOP - SUB.w VF01, VF01, VF01 NOP - MULAx.xyz ACC, VF18, VF04x NOP ; transform normal - MADDAy.xyz ACC, VF19, VF04y NOP - MADDz.xyz VF04, VF20, VF04z NOP - ADD.xy VF01, VF01, VF25 NOP - MULq VF02, VF02, Q NOP - NOP NOP - FTOI0 VF03, VF03 NOP - FTOI4 VF01, VF01 NOP - NOP SQ VF04, -2(VI02) ; store normal - NOP IADDI VI01, VI01, -1 - NOP SQI VF02, (VI03++) ; STQ - NOP SQI VF03, (VI03++) ; color - NOP SQI VF01, (VI03++) ; vertex - NOP IBNE VI01, VI00, Loop - NOP NOP - - .include "light.vu" - - NOP XGKICK VI12 - NOP IADD VI15,VI00,VI12 - NOP IADD VI12,VI00,VI13 - NOP[E] IADD VI13,VI00,VI15 - NOP NOP - NOP B Cnt - NOP NOP - -.EndMPG -.EndDmaData diff --git a/tools/ps2/vu.dsm b/tools/ps2/vu.dsm deleted file mode 100644 index 72c04e2..0000000 --- a/tools/ps2/vu.dsm +++ /dev/null @@ -1,69 +0,0 @@ -.data -.global MyDmaPacket -.global vuLightMat -.global vuMat -.global vuOffset -.global vuGIFtag -.global vuMatcolor -.global vuSurfProps -.global mpgCall -.global textureCall -.global geometryCall - -.align 4 - -MyDmaPacket: -DMAcnt * -.EndDmaData - -mpgCall: -DMAcall *, 0 ;vuProg -.EndDmaData - -DMAcnt * - UNPACK 4, 4, V4_32, 0x3d0, * -vuLightMat: - .float 1.0, 0.0, 0.0, 0.0 - .float 0.0, 1.0, 0.0, 0.0 - .float 0.0, 0.0, 1.0, 0.0 - .float 0.0, 0.0, 0.0, 1.0 -lightDir: - .float 0.5, -0.5, -0.70710, 0.0 - .EndUnpack - - UNPACK 4, 4, V4_32, 0x3f0, * -vuMat: - .float 0.0, 0.0, 0.0, 0.0 - .float 0.0, 0.0, 0.0, 0.0 - .float 0.0, 0.0, 0.0, 0.0 - .float 0.0, 0.0, 0.0, 0.0 - .EndUnpack - - UNPACK 4, 4, V4_32, 0x3f9, * -vuOffset: - .float 0.0, 0.0, 0.0, 0.0 -vuGIFtag: - .int 0x00008000, 0x3005C000, 0x0000000412, 0x00000000 -vuMatcolor: - .float 1.0, 1.0, 1.0, 0.5 -vuSurfProps: - .float 1.0, 1.0, 1.0, 1.0 -; .float 160, 160, 160, 0 ; some ambient light - .float 80, 80, 80, 0 -; .float 20, 20, 20, 0 -; .float 0, 0, 0, 0 - .EndUnpack -.EndDmaData - -textureCall: -DMAcall *, 0 -.EndDmaData - -geometryCall: -DMAcall *, 0 ;vuGeometry - BASE 0 - OFFSET 0x0 -.EndDmaData - -DMAend -