mirror of
				https://github.com/aap/librw.git
				synced 2025-11-04 08:50:09 +00:00 
			
		
		
		
	started work on (ps2) pipelines
This commit is contained in:
		
							parent
							
								
									34f0e5550b
								
							
						
					
					
						commit
						e9f638db05
					
				
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							@ -6,7 +6,7 @@ BUILDDEF:=$(shell echo $(BUILD) | tr a-z A-Z | sed 's/^/-DRW_/')
 | 
				
			|||||||
BUILDDIR=build-$(BUILD)
 | 
					BUILDDIR=build-$(BUILD)
 | 
				
			||||||
SRCDIR=src
 | 
					SRCDIR=src
 | 
				
			||||||
SRC := $(patsubst %.cpp,$(SRCDIR)/%.cpp, rwbase.cpp clump.cpp\
 | 
					SRC := $(patsubst %.cpp,$(SRCDIR)/%.cpp, rwbase.cpp clump.cpp\
 | 
				
			||||||
                                         geometry.cpp plugins.cpp\
 | 
					                                         geometry.cpp plugins.cpp pipeline.cpp\
 | 
				
			||||||
                                         ps2.cpp ogl.cpp\
 | 
					                                         ps2.cpp ogl.cpp\
 | 
				
			||||||
                                         image.cpp gtaplg.cpp)
 | 
					                                         image.cpp gtaplg.cpp)
 | 
				
			||||||
OBJ := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$(SRC))
 | 
					OBJ := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$(SRC))
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@ BUILDDEF:=$(shell echo $(BUILD) | tr a-z A-Z | sed 's/^/-DRW_/')
 | 
				
			|||||||
BUILDDIR=build-$(BUILD)
 | 
					BUILDDIR=build-$(BUILD)
 | 
				
			||||||
SRCDIR=src
 | 
					SRCDIR=src
 | 
				
			||||||
SRC := $(patsubst %.cpp,$(SRCDIR)/%.cpp, rwbase.cpp clump.cpp\
 | 
					SRC := $(patsubst %.cpp,$(SRCDIR)/%.cpp, rwbase.cpp clump.cpp\
 | 
				
			||||||
                                         geometry.cpp plugins.cpp\
 | 
					                                         geometry.cpp plugins.cpp pipeline.cpp\
 | 
				
			||||||
                                         ps2.cpp ogl.cpp\
 | 
					                                         ps2.cpp ogl.cpp\
 | 
				
			||||||
                                         image.cpp gtaplg.cpp)
 | 
					                                         image.cpp gtaplg.cpp)
 | 
				
			||||||
OBJ := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$(SRC))
 | 
					OBJ := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$(SRC))
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ BUILDDEF:=$(shell echo $(BUILD) | tr a-z A-Z | sed 's/^/-DRW_/')
 | 
				
			|||||||
BUILDDIR=build-$(BUILD)
 | 
					BUILDDIR=build-$(BUILD)
 | 
				
			||||||
SRCDIR=src
 | 
					SRCDIR=src
 | 
				
			||||||
SRC := $(patsubst %.cpp,$(SRCDIR)/%.cpp, rwbase.cpp clump.cpp\
 | 
					SRC := $(patsubst %.cpp,$(SRCDIR)/%.cpp, rwbase.cpp clump.cpp\
 | 
				
			||||||
                                         geometry.cpp plugins.cpp\
 | 
					                                         geometry.cpp plugins.cpp pipeline.cpp\
 | 
				
			||||||
                                         ps2.cpp ogl.cpp\
 | 
					                                         ps2.cpp ogl.cpp\
 | 
				
			||||||
                                         image.cpp gtaplg.cpp)
 | 
					                                         image.cpp gtaplg.cpp)
 | 
				
			||||||
OBJ := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$(SRC))
 | 
					OBJ := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$(SRC))
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								rw.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								rw.h
									
									
									
									
									
								
							@ -1,5 +1,6 @@
 | 
				
			|||||||
#include "src/rwbase.h"
 | 
					#include "src/rwbase.h"
 | 
				
			||||||
#include "src/rwplugin.h"
 | 
					#include "src/rwplugin.h"
 | 
				
			||||||
 | 
					#include "src/rwpipeline.h"
 | 
				
			||||||
#include "src/rwobjects.h"
 | 
					#include "src/rwobjects.h"
 | 
				
			||||||
#include "src/rwps2.h"
 | 
					#include "src/rwps2.h"
 | 
				
			||||||
#include "src/rwogl.h"
 | 
					#include "src/rwogl.h"
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "rwbase.h"
 | 
					#include "rwbase.h"
 | 
				
			||||||
#include "rwplugin.h"
 | 
					#include "rwplugin.h"
 | 
				
			||||||
 | 
					#include "rwpipeline.h"
 | 
				
			||||||
#include "rwobjects.h"
 | 
					#include "rwobjects.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "rwbase.h"
 | 
					#include "rwbase.h"
 | 
				
			||||||
#include "rwplugin.h"
 | 
					#include "rwplugin.h"
 | 
				
			||||||
 | 
					#include "rwpipeline.h"
 | 
				
			||||||
#include "rwobjects.h"
 | 
					#include "rwobjects.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "rwbase.h"
 | 
					#include "rwbase.h"
 | 
				
			||||||
#include "rwplugin.h"
 | 
					#include "rwplugin.h"
 | 
				
			||||||
 | 
					#include "rwpipeline.h"
 | 
				
			||||||
#include "rwobjects.h"
 | 
					#include "rwobjects.h"
 | 
				
			||||||
#include "gtaplg.h"
 | 
					#include "gtaplg.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "rwbase.h"
 | 
					#include "rwbase.h"
 | 
				
			||||||
#include "rwplugin.h"
 | 
					#include "rwplugin.h"
 | 
				
			||||||
 | 
					#include "rwpipeline.h"
 | 
				
			||||||
#include "rwobjects.h"
 | 
					#include "rwobjects.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "rwbase.h"
 | 
					#include "rwbase.h"
 | 
				
			||||||
#include "rwplugin.h"
 | 
					#include "rwplugin.h"
 | 
				
			||||||
 | 
					#include "rwpipeline.h"
 | 
				
			||||||
#include "rwobjects.h"
 | 
					#include "rwobjects.h"
 | 
				
			||||||
#include "rwogl.h"
 | 
					#include "rwogl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "rwbase.h"
 | 
					#include "rwbase.h"
 | 
				
			||||||
#include "rwplugin.h"
 | 
					#include "rwplugin.h"
 | 
				
			||||||
 | 
					#include "rwpipeline.h"
 | 
				
			||||||
#include "rwobjects.h"
 | 
					#include "rwobjects.h"
 | 
				
			||||||
#include "rwps2.h"
 | 
					#include "rwps2.h"
 | 
				
			||||||
#include "rwogl.h"
 | 
					#include "rwogl.h"
 | 
				
			||||||
@ -540,17 +541,20 @@ getSizeSkin(void *object, int32 offset, int32)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
skinRights(void *object, int32, int32, uint32 data)
 | 
					skinRights(void *object, int32, int32, uint32)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	((Atomic*)object)->pipeline = skinGlobals.pipeline;
 | 
						((Atomic*)object)->pipeline = skinGlobals.pipelines[platformIdx[platform]];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
registerSkinPlugin(void)
 | 
					registerSkinPlugin(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	skinGlobals.pipeline = new Pipeline;
 | 
						Pipeline *defpipe = new Pipeline(PLATFORM_NULL);
 | 
				
			||||||
	skinGlobals.pipeline->pluginID = ID_SKIN;
 | 
						defpipe->pluginID = ID_SKIN;
 | 
				
			||||||
	skinGlobals.pipeline->pluginData = 1;
 | 
						defpipe->pluginData = 1;
 | 
				
			||||||
 | 
						for(uint i = 0; i < nelem(matFXGlobals.pipelines); i++)
 | 
				
			||||||
 | 
							skinGlobals.pipelines[i] = defpipe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	skinGlobals.offset = Geometry::registerPlugin(sizeof(Skin*), ID_SKIN,
 | 
						skinGlobals.offset = Geometry::registerPlugin(sizeof(Skin*), ID_SKIN,
 | 
				
			||||||
	                                              createSkin,
 | 
						                                              createSkin,
 | 
				
			||||||
@ -589,7 +593,8 @@ readAtomicMatFX(Stream *stream, int32, void *object, int32 offset, int32)
 | 
				
			|||||||
	stream->read(&flag, 4);
 | 
						stream->read(&flag, 4);
 | 
				
			||||||
	*PLUGINOFFSET(int32, object, offset) = flag;
 | 
						*PLUGINOFFSET(int32, object, offset) = flag;
 | 
				
			||||||
	if(flag)
 | 
						if(flag)
 | 
				
			||||||
		((Atomic*)object)->pipeline = matFXGlobals.pipeline;
 | 
							((Atomic*)object)->pipeline =
 | 
				
			||||||
 | 
								matFXGlobals.pipelines[platformIdx[rw::platform]];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -873,9 +878,11 @@ getSizeMaterialMatFX(void *object, int32 offset, int32)
 | 
				
			|||||||
void
 | 
					void
 | 
				
			||||||
registerMatFXPlugin(void)
 | 
					registerMatFXPlugin(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	matFXGlobals.pipeline = new Pipeline;
 | 
						Pipeline *defpipe = new Pipeline(PLATFORM_NULL);
 | 
				
			||||||
	matFXGlobals.pipeline->pluginID = ID_MATFX;
 | 
						defpipe->pluginID = ID_MATFX;
 | 
				
			||||||
	matFXGlobals.pipeline->pluginData = 0;
 | 
						defpipe->pluginData = 0;
 | 
				
			||||||
 | 
						for(uint i = 0; i < nelem(matFXGlobals.pipelines); i++)
 | 
				
			||||||
 | 
							matFXGlobals.pipelines[i] = defpipe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	matFXGlobals.atomicOffset =
 | 
						matFXGlobals.atomicOffset =
 | 
				
			||||||
	Atomic::registerPlugin(sizeof(int32), ID_MATFX,
 | 
						Atomic::registerPlugin(sizeof(int32), ID_MATFX,
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										125
									
								
								src/ps2.cpp
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								src/ps2.cpp
									
									
									
									
									
								
							@ -7,6 +7,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "rwbase.h"
 | 
					#include "rwbase.h"
 | 
				
			||||||
#include "rwplugin.h"
 | 
					#include "rwplugin.h"
 | 
				
			||||||
 | 
					#include "rwpipeline.h"
 | 
				
			||||||
#include "rwobjects.h"
 | 
					#include "rwobjects.h"
 | 
				
			||||||
#include "rwps2.h"
 | 
					#include "rwps2.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -146,6 +147,7 @@ fixDmaOffsets(InstanceData *inst)
 | 
				
			|||||||
void
 | 
					void
 | 
				
			||||||
unfixDmaOffsets(InstanceData *inst)
 | 
					unfixDmaOffsets(InstanceData *inst)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						(void)inst;
 | 
				
			||||||
#ifdef RW_PS2
 | 
					#ifdef RW_PS2
 | 
				
			||||||
	if(inst->arePointersFixed != 2)
 | 
						if(inst->arePointersFixed != 2)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
@ -181,6 +183,129 @@ unfixDmaOffsets(InstanceData *inst)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Pipeline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum PS2Attribs {
 | 
				
			||||||
 | 
						AT_V2_32	= 0x64000000,
 | 
				
			||||||
 | 
						AT_V2_16	= 0x65000000,
 | 
				
			||||||
 | 
						AT_V2_8		= 0x66000000,
 | 
				
			||||||
 | 
						AT_V3_32	= 0x68000000,
 | 
				
			||||||
 | 
						AT_V3_16	= 0x69000000,
 | 
				
			||||||
 | 
						AT_V3_8		= 0x6A000000,
 | 
				
			||||||
 | 
						AT_V4_32	= 0x6C000000,
 | 
				
			||||||
 | 
						AT_V4_16	= 0x6D000000,
 | 
				
			||||||
 | 
						AT_V4_8		= 0x6E000000,
 | 
				
			||||||
 | 
						AT_UNSGN	= 0x00004000,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						AT_RW		= 0x6
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum PS2AttibTypes {
 | 
				
			||||||
 | 
						AT_XYZ		= 0,
 | 
				
			||||||
 | 
						AT_UV		= 1,
 | 
				
			||||||
 | 
						AT_UV2		= 2,
 | 
				
			||||||
 | 
						AT_RGBA		= 3,
 | 
				
			||||||
 | 
						AT_NORMAL	= 4
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PipeAttribute attribXYZ = { 
 | 
				
			||||||
 | 
						"XYZ",
 | 
				
			||||||
 | 
						AT_V3_32
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PipeAttribute attribUV = {
 | 
				
			||||||
 | 
						"UV",
 | 
				
			||||||
 | 
						AT_V2_32
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PipeAttribute attribUV2 = {
 | 
				
			||||||
 | 
						"UV2",
 | 
				
			||||||
 | 
						AT_V4_32
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PipeAttribute attribRGBA = {
 | 
				
			||||||
 | 
						"RGBA",
 | 
				
			||||||
 | 
						AT_V4_8 | AT_UNSGN
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PipeAttribute attribNormal = {
 | 
				
			||||||
 | 
						"Normal",
 | 
				
			||||||
 | 
						AT_V3_8		// RW has V4_8 but uses V3_8, wtf?
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PipeAttribute attribWeights = {
 | 
				
			||||||
 | 
						"Weights",
 | 
				
			||||||
 | 
						AT_V4_32 | AT_RW
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Pipeline::Pipeline(uint32 platform)
 | 
				
			||||||
 | 
					 : rw::Pipeline(platform) { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					Pipeline::setTriBufferSizes(uint32 inputStride,
 | 
				
			||||||
 | 
					                            uint32 stripCount, uint32 listCount)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						this->inputStride = inputStride;
 | 
				
			||||||
 | 
						this->triListCount = listCount/12*12;
 | 
				
			||||||
 | 
						PipeAttribute *a;
 | 
				
			||||||
 | 
						for(uint i = 0; i < nelem(this->attribs); i++){
 | 
				
			||||||
 | 
							a = this->attribs[i];
 | 
				
			||||||
 | 
							if(a && a->attrib & AT_RW)
 | 
				
			||||||
 | 
								goto brokenout;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						this->triStripCount = stripCount/4*4;
 | 
				
			||||||
 | 
						return;
 | 
				
			||||||
 | 
					brokenout:
 | 
				
			||||||
 | 
						this->triStripCount = (stripCount-2)/4*4+2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Pipeline*
 | 
				
			||||||
 | 
					makeDefaultPipeline(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Pipeline *pipe = new Pipeline(PLATFORM_PS2);
 | 
				
			||||||
 | 
						pipe->attribs[AT_XYZ] = &attribXYZ;
 | 
				
			||||||
 | 
						pipe->attribs[AT_UV] = &attribUV;
 | 
				
			||||||
 | 
						pipe->attribs[AT_RGBA] = &attribRGBA;
 | 
				
			||||||
 | 
						pipe->attribs[AT_NORMAL] = &attribNormal;
 | 
				
			||||||
 | 
						uint32 vertCount = Pipeline::getVertCount(VU_Lights, 4, 3, 2);
 | 
				
			||||||
 | 
						pipe->setTriBufferSizes(4, vertCount, vertCount/3);
 | 
				
			||||||
 | 
						pipe->vifOffset = pipe->inputStride*vertCount;
 | 
				
			||||||
 | 
						return pipe;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Pipeline*
 | 
				
			||||||
 | 
					makeSkinPipeline(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Pipeline *pipe = new Pipeline(PLATFORM_PS2);
 | 
				
			||||||
 | 
						pipe->attribs[AT_XYZ] = &attribXYZ;
 | 
				
			||||||
 | 
						pipe->attribs[AT_UV] = &attribUV;
 | 
				
			||||||
 | 
						pipe->attribs[AT_RGBA] = &attribRGBA;
 | 
				
			||||||
 | 
						pipe->attribs[AT_NORMAL] = &attribNormal;
 | 
				
			||||||
 | 
						pipe->attribs[AT_NORMAL+1] = &attribWeights;
 | 
				
			||||||
 | 
						uint32 vertCount = Pipeline::getVertCount(VU_Lights-0x100, 5, 3, 2);
 | 
				
			||||||
 | 
						pipe->setTriBufferSizes(5, vertCount, vertCount/3);
 | 
				
			||||||
 | 
						pipe->vifOffset = pipe->inputStride*vertCount;
 | 
				
			||||||
 | 
						return pipe;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					dumpPipeline(rw::Pipeline *rwpipe)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(rwpipe->platform != PLATFORM_PS2)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						Pipeline *pipe = (Pipeline*)rwpipe;
 | 
				
			||||||
 | 
						PipeAttribute *a;
 | 
				
			||||||
 | 
						for(uint i = 0; i < nelem(pipe->attribs); i++){
 | 
				
			||||||
 | 
							a = pipe->attribs[i];
 | 
				
			||||||
 | 
							if(a)
 | 
				
			||||||
 | 
								printf("%d %s: %x\n", i, a->name, a->attrib);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						printf("stride: %x\n", pipe->inputStride);
 | 
				
			||||||
 | 
						printf("triSCount: %x\n", pipe->triStripCount);
 | 
				
			||||||
 | 
						printf("triLCount: %x\n", pipe->triListCount);
 | 
				
			||||||
 | 
						printf("vifOffset: %x\n", pipe->vifOffset);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Skin
 | 
					// Skin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
 | 
				
			|||||||
@ -12,8 +12,17 @@ using namespace std;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace rw {
 | 
					namespace rw {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int platformIdx[10] = { 0, -1, 1, -1, 2, 3, -1, -1, 4, 5 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int version = 0x36003;
 | 
					int version = 0x36003;
 | 
				
			||||||
int build = 0xFFFF;
 | 
					int build = 0xFFFF;
 | 
				
			||||||
 | 
					#ifdef RW_PS2
 | 
				
			||||||
 | 
						int platform = PLATFORM_PS2;
 | 
				
			||||||
 | 
					#elseif RW_OPENGL
 | 
				
			||||||
 | 
						int platform = PLATFORM_OPENGL;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						int platform = PLATFORM_NULL;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
char *debugFile = NULL;
 | 
					char *debugFile = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int32
 | 
					int32
 | 
				
			||||||
@ -219,14 +228,12 @@ StreamFile::close(void)
 | 
				
			|||||||
uint32
 | 
					uint32
 | 
				
			||||||
StreamFile::write(const void *data, uint32 length)
 | 
					StreamFile::write(const void *data, uint32 length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
//printf("write %d bytes @ %x\n", length, this->tell());
 | 
					 | 
				
			||||||
	return fwrite(data, length, 1, this->file);
 | 
						return fwrite(data, length, 1, this->file);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint32
 | 
					uint32
 | 
				
			||||||
StreamFile::read(void *data, uint32 length)
 | 
					StreamFile::read(void *data, uint32 length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
//printf("read %d bytes @ %x\n", length, this->tell());
 | 
					 | 
				
			||||||
	return fread(data, length, 1, this->file);
 | 
						return fread(data, length, 1, this->file);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -255,7 +262,6 @@ writeChunkHeader(Stream *s, int32 type, int32 size)
 | 
				
			|||||||
		int32 type, size;
 | 
							int32 type, size;
 | 
				
			||||||
		uint32 id;
 | 
							uint32 id;
 | 
				
			||||||
	} buf = { type, size, libraryIDPack(version, build) };
 | 
						} buf = { type, size, libraryIDPack(version, build) };
 | 
				
			||||||
//printf("- write chunk %x @ %x\n", buf.type, s->tell());
 | 
					 | 
				
			||||||
	s->write(&buf, 12);
 | 
						s->write(&buf, 12);
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -290,7 +296,6 @@ findChunk(Stream *s, uint32 type, uint32 *length, uint32 *version)
 | 
				
			|||||||
				*length = header.length;
 | 
									*length = header.length;
 | 
				
			||||||
			if(version)
 | 
								if(version)
 | 
				
			||||||
				*version = header.version;
 | 
									*version = header.version;
 | 
				
			||||||
//printf("- chunk %x @ %x\n", header.type, s->tell()-12);
 | 
					 | 
				
			||||||
			return true;
 | 
								return true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		s->seek(header.length);
 | 
							s->seek(header.length);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										13
									
								
								src/rwbase.h
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/rwbase.h
									
									
									
									
									
								
							@ -32,6 +32,8 @@ typedef int32 bool32;
 | 
				
			|||||||
typedef uint8 byte;
 | 
					typedef uint8 byte;
 | 
				
			||||||
typedef uint32 uint;
 | 
					typedef uint32 uint;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define nelem(A) (sizeof(A) / sizeof A[0])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Stream
 | 
					class Stream
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
@ -93,13 +95,21 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
enum Platform
 | 
					enum Platform
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						PLATFORM_NULL = 0,
 | 
				
			||||||
 | 
						// D3D7
 | 
				
			||||||
	PLATFORM_OGL  = 2,
 | 
						PLATFORM_OGL  = 2,
 | 
				
			||||||
 | 
						// MAC
 | 
				
			||||||
	PLATFORM_PS2  = 4,
 | 
						PLATFORM_PS2  = 4,
 | 
				
			||||||
	PLATFORM_XBOX = 5,
 | 
						PLATFORM_XBOX = 5,
 | 
				
			||||||
 | 
						// GAMECUBE
 | 
				
			||||||
 | 
						// SOFTRAS
 | 
				
			||||||
	PLATFORM_D3D8 = 8,
 | 
						PLATFORM_D3D8 = 8,
 | 
				
			||||||
	PLATFORM_D3D9 = 9
 | 
						PLATFORM_D3D9 = 9,
 | 
				
			||||||
 | 
						NUM_PLATFORMS = 6
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int platformIdx[10];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum PluginID
 | 
					enum PluginID
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// Core
 | 
						// Core
 | 
				
			||||||
@ -134,6 +144,7 @@ enum PluginID
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
extern int version;
 | 
					extern int version;
 | 
				
			||||||
extern int build;
 | 
					extern int build;
 | 
				
			||||||
 | 
					extern int platform;
 | 
				
			||||||
extern char *debugFile;
 | 
					extern char *debugFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline uint32
 | 
					inline uint32
 | 
				
			||||||
 | 
				
			|||||||
@ -1,12 +1,5 @@
 | 
				
			|||||||
namespace rw {
 | 
					namespace rw {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO: mostly a stub right now
 | 
					 | 
				
			||||||
struct Pipeline
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	uint32 pluginID;
 | 
					 | 
				
			||||||
	uint32 pluginData;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct Object
 | 
					struct Object
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uint8 type;
 | 
						uint8 type;
 | 
				
			||||||
@ -233,7 +226,7 @@ struct MatFXGlobals
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	int32 atomicOffset;
 | 
						int32 atomicOffset;
 | 
				
			||||||
	int32 materialOffset;
 | 
						int32 materialOffset;
 | 
				
			||||||
	Pipeline *pipeline;
 | 
						Pipeline *pipelines[NUM_PLATFORMS];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
extern MatFXGlobals matFXGlobals;
 | 
					extern MatFXGlobals matFXGlobals;
 | 
				
			||||||
void registerMatFXPlugin(void);
 | 
					void registerMatFXPlugin(void);
 | 
				
			||||||
@ -330,7 +323,7 @@ struct Skin
 | 
				
			|||||||
struct SkinGlobals
 | 
					struct SkinGlobals
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int32 offset;
 | 
						int32 offset;
 | 
				
			||||||
	Pipeline *pipeline;
 | 
						Pipeline *pipelines[NUM_PLATFORMS];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
extern SkinGlobals skinGlobals;
 | 
					extern SkinGlobals skinGlobals;
 | 
				
			||||||
void registerSkinPlugin(void);
 | 
					void registerSkinPlugin(void);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										25
									
								
								src/rwps2.h
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								src/rwps2.h
									
									
									
									
									
								
							@ -19,6 +19,10 @@ struct InstanceDataHeader : rw::InstanceDataHeader
 | 
				
			|||||||
	InstanceData *instanceMeshes;
 | 
						InstanceData *instanceMeshes;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum {
 | 
				
			||||||
 | 
						VU_Lights	= 0x3d0
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void *destroyNativeData(void *object, int32, int32);
 | 
					void *destroyNativeData(void *object, int32, int32);
 | 
				
			||||||
void readNativeData(Stream *stream, int32 len, void *object, int32, int32);
 | 
					void readNativeData(Stream *stream, int32 len, void *object, int32, int32);
 | 
				
			||||||
void writeNativeData(Stream *stream, int32 len, void *object, int32, int32);
 | 
					void writeNativeData(Stream *stream, int32 len, void *object, int32, int32);
 | 
				
			||||||
@ -31,6 +35,27 @@ void sizedebug(InstanceData *inst);
 | 
				
			|||||||
// only RW_PS2
 | 
					// only RW_PS2
 | 
				
			||||||
void fixDmaOffsets(InstanceData *inst);
 | 
					void fixDmaOffsets(InstanceData *inst);
 | 
				
			||||||
void unfixDmaOffsets(InstanceData *inst);
 | 
					void unfixDmaOffsets(InstanceData *inst);
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Pipeline : rw::Pipeline
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						uint32 vifOffset;
 | 
				
			||||||
 | 
						uint32 inputStride;
 | 
				
			||||||
 | 
						uint32 triStripCount, triListCount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static uint32 getVertCount(uint32 top, uint32 inAttribs,
 | 
				
			||||||
 | 
						                           uint32 outAttribs, uint32 outBufs) {
 | 
				
			||||||
 | 
							return (top-outBufs)/(inAttribs*2+outAttribs*outBufs);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Pipeline(uint32 platform);
 | 
				
			||||||
 | 
						void setTriBufferSizes(uint32 inputStride,
 | 
				
			||||||
 | 
						                       uint32 stripCount, uint32 listCount);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Pipeline *makeDefaultPipeline(void);
 | 
				
			||||||
 | 
					Pipeline *makeSkinPipeline(void);
 | 
				
			||||||
 | 
					void dumpPipeline(rw::Pipeline *pipe);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Skin plugin
 | 
					// Skin plugin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,11 +4,11 @@ OBJ = $(patsubst %.cpp, $(BUILDDIR)/%.o, $(SRC))
 | 
				
			|||||||
DEP = $(patsubst %.cpp, $(BUILDDIR)/%.d, $(SRC))
 | 
					DEP = $(patsubst %.cpp, $(BUILDDIR)/%.d, $(SRC))
 | 
				
			||||||
RWDIR=$(HOME)/src/librw
 | 
					RWDIR=$(HOME)/src/librw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#LDLIBS=-pthread -lX11 -lXrandr -lXi -lXxf86vm -lGL -lGLEW -lm
 | 
					LDLIBS=-pthread -lX11 -lXrandr -lXi -lXxf86vm -lGL -lGLEW -lm
 | 
				
			||||||
#STATICLIBS= $(RWDIR)/librw-opengl.a /usr/local/lib/libglfw3.a
 | 
					STATICLIBS= $(RWDIR)/librw-opengl.a /usr/local/lib/libglfw3.a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LDLIBS=-pthread -lGL -lGLEW -lglfw
 | 
					#LDLIBS=-pthread -lGL -lGLEW -lglfw
 | 
				
			||||||
STATICLIBS=$(RWDIR)/librw-opengl.a
 | 
					#STATICLIBS=$(RWDIR)/librw-opengl.a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CFLAGS=-g -I$(RWDIR) -Wall -Wextra
 | 
					CFLAGS=-g -I$(RWDIR) -Wall -Wextra
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -42,15 +42,16 @@ renderAtomic(rw::Atomic *atomic)
 | 
				
			|||||||
	uint64 offset = 0;
 | 
						uint64 offset = 0;
 | 
				
			||||||
	for(uint32 i = 0; i < meshHeader->numMeshes; i++){
 | 
						for(uint32 i = 0; i < meshHeader->numMeshes; i++){
 | 
				
			||||||
		Mesh *mesh = &meshHeader->mesh[i];
 | 
							Mesh *mesh = &meshHeader->mesh[i];
 | 
				
			||||||
 | 
							Material *mat = mesh->material;
 | 
				
			||||||
		float color[4];
 | 
							float color[4];
 | 
				
			||||||
		uint8 *col = mesh->material->color;
 | 
							uint8 *col = mat->color;
 | 
				
			||||||
		color[0] = col[0] / 255.0f;
 | 
							color[0] = col[0] / 255.0f;
 | 
				
			||||||
		color[1] = col[1] / 255.0f;
 | 
							color[1] = col[1] / 255.0f;
 | 
				
			||||||
		color[2] = col[2] / 255.0f;
 | 
							color[2] = col[2] / 255.0f;
 | 
				
			||||||
		color[3] = col[3] / 255.0f;
 | 
							color[3] = col[3] / 255.0f;
 | 
				
			||||||
		glUniform4fv(glGetUniformLocation(program, "matColor"),
 | 
							glUniform4fv(glGetUniformLocation(program, "matColor"),
 | 
				
			||||||
			     1, color);
 | 
								     1, color);
 | 
				
			||||||
		rw::gl::Texture *tex =(rw::gl::Texture*)mesh->material->texture;
 | 
							rw::gl::Texture *tex =(rw::gl::Texture*)mat->texture;
 | 
				
			||||||
		if(tex)
 | 
							if(tex)
 | 
				
			||||||
			tex->bind(0);
 | 
								tex->bind(0);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user