mirror of
				https://github.com/aap/librw.git
				synced 2025-11-04 00:41:59 +00:00 
			
		
		
		
	implemented shader default and immediate pipeline for d3d9
This commit is contained in:
		
							parent
							
								
									4541fe86f7
								
							
						
					
					
						commit
						e012918cd3
					
				@ -27,7 +27,7 @@ defaultRenderCB(Atomic *atomic, InstanceDataHeader *header)
 | 
			
		||||
{
 | 
			
		||||
	RawMatrix world;
 | 
			
		||||
 | 
			
		||||
	d3d::lightingCB(atomic);
 | 
			
		||||
	d3d::lightingCB_Fix(atomic);
 | 
			
		||||
 | 
			
		||||
	Geometry *geo = atomic->geometry;
 | 
			
		||||
	d3d::setRenderState(D3DRS_LIGHTING, !!(geo->flags & rw::Geometry::LIGHT));
 | 
			
		||||
 | 
			
		||||
@ -32,6 +32,9 @@ static VertexElement _d3ddec_end = {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0};
 | 
			
		||||
static void*
 | 
			
		||||
driverOpen(void *o, int32, int32)
 | 
			
		||||
{
 | 
			
		||||
#ifdef RW_D3D9
 | 
			
		||||
	createDefaultShaders();
 | 
			
		||||
#endif
 | 
			
		||||
	engine->driver[PLATFORM_D3D9]->defaultPipeline = makeDefaultPipeline();
 | 
			
		||||
 | 
			
		||||
	engine->driver[PLATFORM_D3D9]->rasterNativeOffset = nativeRasterOffset;
 | 
			
		||||
@ -48,6 +51,9 @@ driverOpen(void *o, int32, int32)
 | 
			
		||||
static void*
 | 
			
		||||
driverClose(void *o, int32, int32)
 | 
			
		||||
{
 | 
			
		||||
#ifdef RW_D3D9
 | 
			
		||||
	destroyDefaultShaders();
 | 
			
		||||
#endif
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -638,7 +644,7 @@ makeDefaultPipeline(void)
 | 
			
		||||
	ObjPipeline *pipe = new ObjPipeline(PLATFORM_D3D9);
 | 
			
		||||
	pipe->instanceCB = defaultInstanceCB;
 | 
			
		||||
	pipe->uninstanceCB = defaultUninstanceCB;
 | 
			
		||||
	pipe->renderCB = defaultRenderCB;
 | 
			
		||||
	pipe->renderCB = defaultRenderCB_Shader;
 | 
			
		||||
	return pipe;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -44,7 +44,7 @@ makeMatFXPipeline(void)
 | 
			
		||||
	ObjPipeline *pipe = new ObjPipeline(PLATFORM_D3D9);
 | 
			
		||||
	pipe->instanceCB = defaultInstanceCB;
 | 
			
		||||
	pipe->uninstanceCB = defaultUninstanceCB;
 | 
			
		||||
	pipe->renderCB = defaultRenderCB;
 | 
			
		||||
	pipe->renderCB = defaultRenderCB_Shader;
 | 
			
		||||
	pipe->pluginID = ID_MATFX;
 | 
			
		||||
	pipe->pluginData = 0;
 | 
			
		||||
	return pipe;
 | 
			
		||||
 | 
			
		||||
@ -59,14 +59,14 @@ drawInst_GSemu(d3d9::InstanceDataHeader *header, InstanceData *inst)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
defaultRenderCB(Atomic *atomic, InstanceDataHeader *header)
 | 
			
		||||
defaultRenderCB_Fix(Atomic *atomic, InstanceDataHeader *header)
 | 
			
		||||
{
 | 
			
		||||
	RawMatrix world;
 | 
			
		||||
	Geometry *geo = atomic->geometry;
 | 
			
		||||
 | 
			
		||||
	int lighting = !!(geo->flags & rw::Geometry::LIGHT);
 | 
			
		||||
	if(lighting)
 | 
			
		||||
		d3d::lightingCB(atomic);
 | 
			
		||||
		d3d::lightingCB_Fix(atomic);
 | 
			
		||||
 | 
			
		||||
	d3d::setRenderState(D3DRS_LIGHTING, lighting);
 | 
			
		||||
 | 
			
		||||
@ -125,6 +125,58 @@ defaultRenderCB(Atomic *atomic, InstanceDataHeader *header)
 | 
			
		||||
	d3d::setTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
defaultRenderCB_Shader(Atomic *atomic, InstanceDataHeader *header)
 | 
			
		||||
{
 | 
			
		||||
	int vsBits;
 | 
			
		||||
	d3ddevice->SetStreamSource(0, (IDirect3DVertexBuffer9*)header->vertexStream[0].vertexBuffer,
 | 
			
		||||
	                           0, header->vertexStream[0].stride);
 | 
			
		||||
	d3ddevice->SetIndices((IDirect3DIndexBuffer9*)header->indexBuffer);
 | 
			
		||||
	d3ddevice->SetVertexDeclaration((IDirect3DVertexDeclaration9*)header->vertexDeclaration);
 | 
			
		||||
 | 
			
		||||
	vsBits = lightingCB_Shader(atomic);
 | 
			
		||||
	uploadMatrices(atomic->getFrame()->getLTM());
 | 
			
		||||
 | 
			
		||||
	// Pick a shader
 | 
			
		||||
	if((vsBits & VSLIGHT_MASK) == 0)
 | 
			
		||||
		setVertexShader(default_amb_VS);
 | 
			
		||||
	else if((vsBits & VSLIGHT_MASK) == VSLIGHT_DIRECT)
 | 
			
		||||
		setVertexShader(default_amb_dir_VS);
 | 
			
		||||
	else
 | 
			
		||||
		setVertexShader(default_all_VS);
 | 
			
		||||
 | 
			
		||||
	float surfProps[4];
 | 
			
		||||
	surfProps[3] = atomic->geometry->flags&Geometry::PRELIT ? 1.0f : 0.0f;
 | 
			
		||||
 | 
			
		||||
	InstanceData *inst = header->inst;
 | 
			
		||||
	for(uint32 i = 0; i < header->numMeshes; i++){
 | 
			
		||||
		Material *m = inst->material;
 | 
			
		||||
 | 
			
		||||
		SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
 | 
			
		||||
 | 
			
		||||
		rw::RGBAf col;
 | 
			
		||||
		convColor(&col, &inst->material->color);
 | 
			
		||||
		d3ddevice->SetVertexShaderConstantF(VSLOC_matColor, (float*)&col, 1);
 | 
			
		||||
 | 
			
		||||
		surfProps[0] = m->surfaceProps.ambient;
 | 
			
		||||
		surfProps[1] = m->surfaceProps.specular;
 | 
			
		||||
		surfProps[2] = m->surfaceProps.diffuse;
 | 
			
		||||
		d3ddevice->SetVertexShaderConstantF(VSLOC_surfProps, surfProps, 1);
 | 
			
		||||
 | 
			
		||||
		if(inst->material->texture){
 | 
			
		||||
			d3d::setTexture(0, m->texture);
 | 
			
		||||
			setPixelShader(default_color_tex_PS);
 | 
			
		||||
		}else
 | 
			
		||||
			setPixelShader(default_color_PS);
 | 
			
		||||
 | 
			
		||||
		drawInst(header, inst);
 | 
			
		||||
		inst++;
 | 
			
		||||
	}
 | 
			
		||||
	setVertexShader(nil);
 | 
			
		||||
	setPixelShader(nil);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -44,7 +44,7 @@ makeSkinPipeline(void)
 | 
			
		||||
	ObjPipeline *pipe = new ObjPipeline(PLATFORM_D3D9);
 | 
			
		||||
	pipe->instanceCB = defaultInstanceCB;
 | 
			
		||||
	pipe->uninstanceCB = defaultUninstanceCB;
 | 
			
		||||
	pipe->renderCB = defaultRenderCB;
 | 
			
		||||
	pipe->renderCB = defaultRenderCB_Shader;
 | 
			
		||||
	pipe->pluginID = ID_SKIN;
 | 
			
		||||
	pipe->pluginData = 1;
 | 
			
		||||
	return pipe;
 | 
			
		||||
 | 
			
		||||
@ -605,6 +605,21 @@ createPixelShader(void *csosrc)
 | 
			
		||||
	return nil;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
destroyVertexShader(void *shader)
 | 
			
		||||
{
 | 
			
		||||
	((IDirect3DVertexShader9*)shader)->Release();
 | 
			
		||||
	d3d9Globals.numVertexShaders--;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
destroyPixelShader(void *shader)
 | 
			
		||||
{
 | 
			
		||||
	((IDirect3DPixelShader9*)shader)->Release();
 | 
			
		||||
	d3d9Globals.numPixelShaders--;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Camera
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@
 | 
			
		||||
#define WITH_D3D
 | 
			
		||||
#include "../rwbase.h"
 | 
			
		||||
#include "../rwplg.h"
 | 
			
		||||
#include "../rwrender.h"
 | 
			
		||||
#include "../rwpipeline.h"
 | 
			
		||||
#include "../rwobjects.h"
 | 
			
		||||
#include "../rwengine.h"
 | 
			
		||||
@ -106,12 +107,11 @@ im2DRenderPrimitive(PrimitiveType primType, void *vertices, int32 numVertices)
 | 
			
		||||
 | 
			
		||||
	d3ddevice->SetStreamSource(0, im2dvertbuf, 0, sizeof(Im2DVertex));
 | 
			
		||||
	d3ddevice->SetVertexDeclaration(im2ddecl);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CURRENT);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
 | 
			
		||||
 | 
			
		||||
	if(engine->device.getRenderState(TEXTURERASTER))
 | 
			
		||||
		setPixelShader(default_color_tex_PS);
 | 
			
		||||
	else
 | 
			
		||||
		setPixelShader(default_color_PS);
 | 
			
		||||
 | 
			
		||||
	d3d::flushCache();
 | 
			
		||||
 | 
			
		||||
@ -137,6 +137,8 @@ im2DRenderPrimitive(PrimitiveType primType, void *vertices, int32 numVertices)
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
	d3ddevice->DrawPrimitive((D3DPRIMITIVETYPE)primTypeMap[primType], 0, primCount);
 | 
			
		||||
 | 
			
		||||
	setPixelShader(nil);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@ -159,12 +161,11 @@ im2DRenderIndexedPrimitive(PrimitiveType primType,
 | 
			
		||||
	d3ddevice->SetStreamSource(0, im2dvertbuf, 0, sizeof(Im2DVertex));
 | 
			
		||||
	d3ddevice->SetIndices(im2dindbuf);
 | 
			
		||||
	d3ddevice->SetVertexDeclaration(im2ddecl);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CURRENT);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
 | 
			
		||||
 | 
			
		||||
	if(engine->device.getRenderState(TEXTURERASTER))
 | 
			
		||||
		setPixelShader(default_color_tex_PS);
 | 
			
		||||
	else
 | 
			
		||||
		setPixelShader(default_color_PS);
 | 
			
		||||
 | 
			
		||||
	d3d::flushCache();
 | 
			
		||||
 | 
			
		||||
@ -192,6 +193,8 @@ im2DRenderIndexedPrimitive(PrimitiveType primType,
 | 
			
		||||
	d3ddevice->DrawIndexedPrimitive((D3DPRIMITIVETYPE)primTypeMap[primType], 0,
 | 
			
		||||
	                                0, numVertices,
 | 
			
		||||
	                                0, primCount);
 | 
			
		||||
 | 
			
		||||
	setPixelShader(nil);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -242,16 +245,10 @@ closeIm3D(void)
 | 
			
		||||
void
 | 
			
		||||
im3DTransform(void *vertices, int32 numVertices, Matrix *world)
 | 
			
		||||
{
 | 
			
		||||
	RawMatrix d3dworld;
 | 
			
		||||
	d3d::setRenderState(D3DRS_LIGHTING, 0);
 | 
			
		||||
 | 
			
		||||
	if(world == nil){
 | 
			
		||||
		Matrix ident;
 | 
			
		||||
		ident.setIdentity();
 | 
			
		||||
		convMatrix(&d3dworld, &ident);
 | 
			
		||||
	}else
 | 
			
		||||
		convMatrix(&d3dworld, world);
 | 
			
		||||
	d3ddevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)&d3dworld);
 | 
			
		||||
	if(world == nil)
 | 
			
		||||
		uploadMatrices();
 | 
			
		||||
	else
 | 
			
		||||
		uploadMatrices(world);
 | 
			
		||||
 | 
			
		||||
	uint8 *lockedvertices = lockVertices(im3dvertbuf, 0, numVertices*sizeof(Im3DVertex), D3DLOCK_DISCARD);
 | 
			
		||||
	memcpy(lockedvertices, vertices, numVertices*sizeof(Im3DVertex));
 | 
			
		||||
@ -271,12 +268,12 @@ im3DRenderIndexed(PrimitiveType primType, void *indices, int32 numIndices)
 | 
			
		||||
	unlockIndices(im3dindbuf);
 | 
			
		||||
 | 
			
		||||
	d3ddevice->SetIndices(im3dindbuf);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CURRENT);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
 | 
			
		||||
	setTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
 | 
			
		||||
 | 
			
		||||
	if(engine->device.getRenderState(TEXTURERASTER))
 | 
			
		||||
		setPixelShader(default_color_tex_PS);
 | 
			
		||||
	else
 | 
			
		||||
		setPixelShader(default_color_PS);
 | 
			
		||||
 | 
			
		||||
	d3d::flushCache();
 | 
			
		||||
 | 
			
		||||
	uint32 primCount = 0;
 | 
			
		||||
@ -304,6 +301,8 @@ im3DRenderIndexed(PrimitiveType primType, void *indices, int32 numIndices)
 | 
			
		||||
	d3ddevice->DrawIndexedPrimitive((D3DPRIMITIVETYPE)primTypeMap[primType], 0,
 | 
			
		||||
	                                0, num3DVertices,
 | 
			
		||||
	                                0, primCount);
 | 
			
		||||
 | 
			
		||||
	setPixelShader(nil);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 | 
			
		||||
@ -19,8 +19,71 @@ IDirect3DDevice9 *d3ddevice = nil;
 | 
			
		||||
 | 
			
		||||
#define MAX_LIGHTS 8
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define VS_NAME g_vs20_main
 | 
			
		||||
#define PS_NAME g_ps20_main
 | 
			
		||||
void *default_amb_VS;
 | 
			
		||||
void *default_amb_dir_VS;
 | 
			
		||||
void *default_all_VS;
 | 
			
		||||
void *default_color_PS;
 | 
			
		||||
void *default_color_tex_PS;
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
lightingCB(Atomic *atomic)
 | 
			
		||||
createDefaultShaders(void)
 | 
			
		||||
{
 | 
			
		||||
	{
 | 
			
		||||
		static
 | 
			
		||||
#include "shaders/default_amb_VS.h"
 | 
			
		||||
		default_amb_VS = createVertexShader((void*)VS_NAME);
 | 
			
		||||
		assert(default_amb_VS);
 | 
			
		||||
	}
 | 
			
		||||
	{
 | 
			
		||||
		static
 | 
			
		||||
#include "shaders/default_amb_dir_VS.h"
 | 
			
		||||
		default_amb_dir_VS = createVertexShader((void*)VS_NAME);
 | 
			
		||||
		assert(default_amb_dir_VS);
 | 
			
		||||
	}
 | 
			
		||||
	{
 | 
			
		||||
		static
 | 
			
		||||
#include "shaders/default_all_VS.h"
 | 
			
		||||
		default_all_VS = createVertexShader((void*)VS_NAME);
 | 
			
		||||
		assert(default_all_VS);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		static
 | 
			
		||||
#include "shaders/default_color_PS.h"
 | 
			
		||||
		default_color_PS = createPixelShader((void*)PS_NAME);
 | 
			
		||||
		assert(default_color_PS);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		static
 | 
			
		||||
#include "shaders/default_color_tex_PS.h"
 | 
			
		||||
		default_color_tex_PS = createPixelShader((void*)PS_NAME);
 | 
			
		||||
		assert(default_color_tex_PS);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
destroyDefaultShaders(void)
 | 
			
		||||
{
 | 
			
		||||
	destroyVertexShader(default_amb_VS);
 | 
			
		||||
	default_amb_VS = nil;
 | 
			
		||||
	destroyVertexShader(default_amb_dir_VS);
 | 
			
		||||
	default_amb_dir_VS = nil;
 | 
			
		||||
	destroyVertexShader(default_all_VS);
 | 
			
		||||
	default_all_VS = nil;
 | 
			
		||||
 | 
			
		||||
	destroyPixelShader(default_color_PS);
 | 
			
		||||
	default_color_PS = nil;
 | 
			
		||||
	destroyPixelShader(default_color_tex_PS);
 | 
			
		||||
	default_color_tex_PS = nil;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
lightingCB_Fix(Atomic *atomic)
 | 
			
		||||
{
 | 
			
		||||
	WorldLights lightData;
 | 
			
		||||
	Light *directionals[8];
 | 
			
		||||
@ -127,6 +190,162 @@ lightingCB(Atomic *atomic)
 | 
			
		||||
		d3ddevice->LightEnable(n, FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct LightVS
 | 
			
		||||
{
 | 
			
		||||
	V3d color; float param0;
 | 
			
		||||
	V3d position; float param1;
 | 
			
		||||
	V3d direction; float param2;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int32
 | 
			
		||||
uploadLights(WorldLights *lightData)
 | 
			
		||||
{
 | 
			
		||||
	int i;
 | 
			
		||||
	int bits = 0;
 | 
			
		||||
	int32 numLights[4*3];
 | 
			
		||||
	float32 firstLight[4];
 | 
			
		||||
	firstLight[0] = 0;	// directional
 | 
			
		||||
	firstLight[1] = 0;	// point
 | 
			
		||||
	firstLight[2] = 0;	// spot
 | 
			
		||||
	firstLight[3] = 0;
 | 
			
		||||
 | 
			
		||||
	if(lightData->numAmbients)
 | 
			
		||||
		bits |= VSLIGHT_AMBIENT;
 | 
			
		||||
 | 
			
		||||
	LightVS directionals[8];
 | 
			
		||||
	LightVS points[8];
 | 
			
		||||
	LightVS spots[8];
 | 
			
		||||
	for(i = 0; i < lightData->numDirectionals; i++){
 | 
			
		||||
		Light *l = lightData->directionals[i];
 | 
			
		||||
		directionals[i].color.x = l->color.red;
 | 
			
		||||
		directionals[i].color.y = l->color.green;
 | 
			
		||||
		directionals[i].color.z = l->color.blue;
 | 
			
		||||
		directionals[i].direction = l->getFrame()->getLTM()->at;
 | 
			
		||||
		bits |= VSLIGHT_DIRECT;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int np = 0;
 | 
			
		||||
	int ns = 0;
 | 
			
		||||
	for(i = 0; i < lightData->numLocals; i++){
 | 
			
		||||
		Light *l = lightData->locals[i];
 | 
			
		||||
 | 
			
		||||
		switch(l->getType()){
 | 
			
		||||
		case Light::POINT:
 | 
			
		||||
			points[np].color.x = l->color.red;
 | 
			
		||||
			points[np].color.y = l->color.green;
 | 
			
		||||
			points[np].color.z = l->color.blue;
 | 
			
		||||
			points[np].param0 = l->radius;
 | 
			
		||||
			points[np].position = l->getFrame()->getLTM()->pos;
 | 
			
		||||
			np++;
 | 
			
		||||
			bits |= VSLIGHT_POINT;
 | 
			
		||||
			break;
 | 
			
		||||
		case Light::SPOT:
 | 
			
		||||
		case Light::SOFTSPOT:
 | 
			
		||||
			spots[ns].color.x = l->color.red;
 | 
			
		||||
			spots[ns].color.y = l->color.green;
 | 
			
		||||
			spots[ns].color.z = l->color.blue;
 | 
			
		||||
			spots[ns].param0 = l->radius;
 | 
			
		||||
			spots[ns].position = l->getFrame()->getLTM()->pos;
 | 
			
		||||
			spots[ns].direction = l->getFrame()->getLTM()->at;
 | 
			
		||||
			spots[ns].param1 = l->minusCosAngle;
 | 
			
		||||
			// lower bound of falloff
 | 
			
		||||
			if(l->getType() == Light::SOFTSPOT)
 | 
			
		||||
				spots[ns].param2 = 0.0f;
 | 
			
		||||
			else
 | 
			
		||||
				spots[ns].param2 = 1.0f;
 | 
			
		||||
			bits |= VSLIGHT_SPOT;
 | 
			
		||||
			ns++;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	firstLight[0] = 0;
 | 
			
		||||
	numLights[0] = lightData->numDirectionals;
 | 
			
		||||
	firstLight[1] = numLights[0] + firstLight[0];
 | 
			
		||||
	numLights[4] = np;
 | 
			
		||||
	firstLight[2] = numLights[4] + firstLight[1];
 | 
			
		||||
	numLights[8] = ns;
 | 
			
		||||
 | 
			
		||||
	d3ddevice->SetVertexShaderConstantI(VSLOC_numLights, numLights, 3);
 | 
			
		||||
	d3ddevice->SetVertexShaderConstantF(VSLOC_lightOffset, firstLight, 1);
 | 
			
		||||
 | 
			
		||||
	int32 off = VSLOC_lights;
 | 
			
		||||
	if(numLights[0])
 | 
			
		||||
		d3ddevice->SetVertexShaderConstantF(off, (float*)&directionals, numLights[0]*3);
 | 
			
		||||
	off += numLights[0]*3;
 | 
			
		||||
 | 
			
		||||
	if(numLights[4])
 | 
			
		||||
		d3ddevice->SetVertexShaderConstantF(off, (float*)&points, numLights[4]*3);
 | 
			
		||||
	off += numLights[4]*3;
 | 
			
		||||
 | 
			
		||||
	if(numLights[8])
 | 
			
		||||
		d3ddevice->SetVertexShaderConstantF(off, (float*)&spots, numLights[8]*3);
 | 
			
		||||
 | 
			
		||||
	return bits;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32
 | 
			
		||||
lightingCB_Shader(Atomic *atomic)
 | 
			
		||||
{
 | 
			
		||||
	WorldLights lightData;
 | 
			
		||||
	Light *directionals[8];
 | 
			
		||||
	Light *locals[8];
 | 
			
		||||
	lightData.directionals = directionals;
 | 
			
		||||
	lightData.numDirectionals = 8;
 | 
			
		||||
	lightData.locals = locals;
 | 
			
		||||
	lightData.numLocals = 8;
 | 
			
		||||
 | 
			
		||||
	int lighting = !!(atomic->geometry->flags & rw::Geometry::LIGHT);
 | 
			
		||||
	if(lighting){
 | 
			
		||||
		((World*)engine->currentWorld)->enumerateLights(atomic, &lightData);
 | 
			
		||||
		d3ddevice->SetVertexShaderConstantF(VSLOC_ambLight, (float*)&lightData.ambient, 1);
 | 
			
		||||
		return uploadLights(&lightData);
 | 
			
		||||
	}else{
 | 
			
		||||
		static const float zeroF[4];
 | 
			
		||||
		static const int32 zeroI[4];
 | 
			
		||||
		d3ddevice->SetVertexShaderConstantF(VSLOC_ambLight, zeroF, 1);
 | 
			
		||||
		d3ddevice->SetVertexShaderConstantI(VSLOC_numLights, zeroI, 1);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static RawMatrix identityXform = {
 | 
			
		||||
	{ 1.0f, 0.0f, 0.0f }, 0.0f,
 | 
			
		||||
	{ 0.0f, 1.0f, 0.0f }, 0.0f,
 | 
			
		||||
	{ 0.0f, 0.0f, 1.0f }, 0.0f,
 | 
			
		||||
	{ 0.0f, 0.0f, 0.0f }, 1.0f
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
uploadMatrices(void)
 | 
			
		||||
{
 | 
			
		||||
	RawMatrix combined;
 | 
			
		||||
	Camera *cam = engine->currentCamera;
 | 
			
		||||
	d3ddevice->SetVertexShaderConstantF(VSLOC_world, (float*)&identityXform, 4);
 | 
			
		||||
	d3ddevice->SetVertexShaderConstantF(VSLOC_normal, (float*)&identityXform, 4);
 | 
			
		||||
 | 
			
		||||
	RawMatrix::mult(&combined, &cam->devView, &cam->devProj);
 | 
			
		||||
	d3ddevice->SetVertexShaderConstantF(VSLOC_combined, (float*)&combined, 4);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
uploadMatrices(Matrix *worldMat)
 | 
			
		||||
{
 | 
			
		||||
	RawMatrix combined, world, worldview;
 | 
			
		||||
	Camera *cam = engine->currentCamera;
 | 
			
		||||
	convMatrix(&world, worldMat);
 | 
			
		||||
	d3ddevice->SetVertexShaderConstantF(VSLOC_world, (float*)&world, 4);
 | 
			
		||||
	// TODO: inverse transpose
 | 
			
		||||
	d3ddevice->SetVertexShaderConstantF(VSLOC_normal, (float*)&world, 4);
 | 
			
		||||
 | 
			
		||||
	RawMatrix::mult(&worldview, &world, &cam->devView);
 | 
			
		||||
	RawMatrix::mult(&combined, &worldview, &cam->devProj);
 | 
			
		||||
	d3ddevice->SetVertexShaderConstantF(VSLOC_combined, (float*)&combined, 4);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -37,8 +37,6 @@ extern IDirect3DDevice9 *d3ddevice;
 | 
			
		||||
void setD3dMaterial(D3DMATERIAL9 *mat9);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void lightingCB(Atomic *atomic);
 | 
			
		||||
 | 
			
		||||
#define COLOR_ARGB(a, r, g, b) ((rw::uint32)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
 | 
			
		||||
 | 
			
		||||
struct Im3DVertex
 | 
			
		||||
@ -188,6 +186,57 @@ void setVertexShader(void *vs);
 | 
			
		||||
void setPixelShader(void *ps);
 | 
			
		||||
void *createVertexShader(void *csosrc);
 | 
			
		||||
void *createPixelShader(void *csosrc);
 | 
			
		||||
void destroyVertexShader(void *shader);
 | 
			
		||||
void destroyPixelShader(void *shader);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Vertex shaders and common pipeline stuff
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// Standard Vertex shader locations
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	VSLOC_combined	= 0,
 | 
			
		||||
	VSLOC_world	= 4,
 | 
			
		||||
	VSLOC_normal	= 8,
 | 
			
		||||
	VSLOC_matColor	= 12,
 | 
			
		||||
	VSLOC_surfProps	= 13,
 | 
			
		||||
	VSLOC_ambLight	= 14,
 | 
			
		||||
	VSLOC_lightOffset	= 15,
 | 
			
		||||
	VSLOC_lights	= 16,
 | 
			
		||||
	VSLOC_afterLights	= VSLOC_lights + 8*3,
 | 
			
		||||
 | 
			
		||||
	VSLOC_numLights	= 0,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Vertex shader bits
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	// These should be low so they could be used as indices
 | 
			
		||||
	VSLIGHT_DIRECT	= 1,
 | 
			
		||||
	VSLIGHT_POINT	= 2,
 | 
			
		||||
	VSLIGHT_SPOT	= 4,
 | 
			
		||||
	VSLIGHT_MASK	= 7,	// all the above
 | 
			
		||||
	// less critical
 | 
			
		||||
	VSLIGHT_AMBIENT = 8,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void lightingCB_Fix(Atomic *atomic);
 | 
			
		||||
int32 lightingCB_Shader(Atomic *atomic);
 | 
			
		||||
// for VS
 | 
			
		||||
void uploadMatrices(void);	// no world transform
 | 
			
		||||
void uploadMatrices(Matrix *worldMat);
 | 
			
		||||
int32 uploadLights(WorldLights *lightData);	// called by lightingCB_Shader
 | 
			
		||||
 | 
			
		||||
extern void *default_amb_VS;
 | 
			
		||||
extern void *default_amb_dir_VS;
 | 
			
		||||
extern void *default_all_VS;
 | 
			
		||||
extern void *default_color_PS;
 | 
			
		||||
extern void *default_color_tex_PS;
 | 
			
		||||
void createDefaultShaders(void);
 | 
			
		||||
void destroyDefaultShaders(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -58,6 +58,9 @@ void drawInst(d3d9::InstanceDataHeader *header, d3d9::InstanceData *inst);
 | 
			
		||||
// Emulate PS2 GS alpha test FB_ONLY case: failed alpha writes to frame- but not to depth buffer
 | 
			
		||||
void drawInst_GSemu(d3d9::InstanceDataHeader *header, InstanceData *inst);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void *destroyNativeData(void *object, int32, int32);
 | 
			
		||||
Stream *readNativeData(Stream *stream, int32 len, void *object, int32, int32);
 | 
			
		||||
Stream *writeNativeData(Stream *stream, int32 len, void *object, int32, int32);
 | 
			
		||||
@ -76,10 +79,12 @@ public:
 | 
			
		||||
 | 
			
		||||
void defaultInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance);
 | 
			
		||||
void defaultUninstanceCB(Geometry *geo, InstanceDataHeader *header);
 | 
			
		||||
void defaultRenderCB(Atomic *atomic, InstanceDataHeader *header);
 | 
			
		||||
void defaultRenderCB_Fix(Atomic *atomic, InstanceDataHeader *header);
 | 
			
		||||
void defaultRenderCB_Shader(Atomic *atomic, InstanceDataHeader *header);
 | 
			
		||||
 | 
			
		||||
ObjPipeline *makeDefaultPipeline(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Skin plugin
 | 
			
		||||
 | 
			
		||||
void initSkin(void);
 | 
			
		||||
 | 
			
		||||
@ -60,6 +60,7 @@ void removeDynamicVB(IDirect3DVertexBuffer9 **buf);
 | 
			
		||||
 | 
			
		||||
int findFormatDepth(uint32 format);
 | 
			
		||||
void destroyD3D9Raster(Raster *raster);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
Raster *rasterCreate(Raster *raster);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										74
									
								
								src/d3d/shaders/defaultVS.hlsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								src/d3d/shaders/defaultVS.hlsl
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,74 @@
 | 
			
		||||
float4x4	combinedMat	: register(c0);
 | 
			
		||||
float4x4	worldMat	: register(c4);
 | 
			
		||||
float3x3	normalMat	: register(c8);
 | 
			
		||||
float4		matCol		: register(c12);
 | 
			
		||||
float4		surfProps	: register(c13);
 | 
			
		||||
float4		ambientLight	: register(c14);
 | 
			
		||||
 | 
			
		||||
#define surfAmbient (surfProps.x)
 | 
			
		||||
#define surfSpecular (surfProps.y)
 | 
			
		||||
#define surfDiffuse (surfProps.z)
 | 
			
		||||
#define surfPrelight (surfProps.w)
 | 
			
		||||
 | 
			
		||||
#include "lighting.h"
 | 
			
		||||
 | 
			
		||||
int numDirLights : register(i0);
 | 
			
		||||
int numPointLights : register(i1);
 | 
			
		||||
int numSpotLights : register(i2);
 | 
			
		||||
int4 firstLight : register(c15);
 | 
			
		||||
Light lights[8] : register(c16);
 | 
			
		||||
 | 
			
		||||
#define firstDirLight (firstLight.x)
 | 
			
		||||
#define firstPointLight (firstLight.y)
 | 
			
		||||
#define firstSpotLight (firstLight.z)
 | 
			
		||||
 | 
			
		||||
struct VS_in
 | 
			
		||||
{
 | 
			
		||||
	float4 Position		: POSITION;
 | 
			
		||||
	float3 Normal		: NORMAL;
 | 
			
		||||
	float2 TexCoord		: TEXCOORD0;
 | 
			
		||||
	float4 Prelight		: COLOR0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct VS_out {
 | 
			
		||||
	float4 Position		: POSITION;
 | 
			
		||||
	float2 TexCoord0	: TEXCOORD0;
 | 
			
		||||
	float4 Color		: COLOR0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
VS_out main(in VS_in input)
 | 
			
		||||
{
 | 
			
		||||
	VS_out output;
 | 
			
		||||
 | 
			
		||||
	output.Position = mul(combinedMat, input.Position);
 | 
			
		||||
	float3 Vertex = mul(worldMat, input.Position).xyz;
 | 
			
		||||
	float3 Normal = mul(normalMat, input.Normal);
 | 
			
		||||
 | 
			
		||||
	output.TexCoord0 = input.TexCoord;
 | 
			
		||||
 | 
			
		||||
	output.Color = float4(0.0, 0.0, 0.0, 1.0);
 | 
			
		||||
	if(surfPrelight > 0.0)
 | 
			
		||||
		output.Color = input.Prelight;
 | 
			
		||||
 | 
			
		||||
	output.Color.rgb += ambientLight.rgb * surfAmbient;
 | 
			
		||||
 | 
			
		||||
	int i;
 | 
			
		||||
#ifdef DIRECTIONALS
 | 
			
		||||
	for(i = 0; i < numDirLights; i++)
 | 
			
		||||
		output.Color.xyz += DoDirLight(lights[i+firstDirLight], Normal)*surfDiffuse;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef POINTLIGHTS
 | 
			
		||||
	for(i = 0; i < numPointLights; i++)
 | 
			
		||||
		output.Color.xyz += DoPointLight(lights[i+firstPointLight], Vertex.xyz, Normal)*surfDiffuse;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef SPOTLIGHTS
 | 
			
		||||
	for(i = 0; i < numSpotLights; i++)
 | 
			
		||||
		output.Color.xyz += DoSpotLight(lights[i+firstSpotLight], Vertex.xyz, Normal)*surfDiffuse;
 | 
			
		||||
#endif
 | 
			
		||||
	// PS2 clamps before material color
 | 
			
		||||
	output.Color = clamp(output.Color, 0.0, 1.0);
 | 
			
		||||
	output.Color *= matCol;
 | 
			
		||||
 | 
			
		||||
	return output;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										485
									
								
								src/d3d/shaders/default_all_VS.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										485
									
								
								src/d3d/shaders/default_all_VS.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,485 @@
 | 
			
		||||
#if 0
 | 
			
		||||
//
 | 
			
		||||
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
 | 
			
		||||
//
 | 
			
		||||
//   fxc /T vs_2_0 /DDIRECTIONALS /DPOINTLIGHTS /DSPOTLIGHTS /Fh
 | 
			
		||||
//    default_all_VS.h defaultVS.hlsl
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Parameters:
 | 
			
		||||
//
 | 
			
		||||
//   float4 ambientLight;
 | 
			
		||||
//   float4x4 combinedMat;
 | 
			
		||||
//   int4 firstLight;
 | 
			
		||||
//   
 | 
			
		||||
//   struct
 | 
			
		||||
//   {
 | 
			
		||||
//       float4 color;
 | 
			
		||||
//       float4 position;
 | 
			
		||||
//       float4 direction;
 | 
			
		||||
//
 | 
			
		||||
//   } lights[8];
 | 
			
		||||
//   
 | 
			
		||||
//   float4 matCol;
 | 
			
		||||
//   float3x3 normalMat;
 | 
			
		||||
//   int numDirLights;
 | 
			
		||||
//   int numPointLights;
 | 
			
		||||
//   int numSpotLights;
 | 
			
		||||
//   float4 surfProps;
 | 
			
		||||
//   float4x4 worldMat;
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Registers:
 | 
			
		||||
//
 | 
			
		||||
//   Name           Reg   Size
 | 
			
		||||
//   -------------- ----- ----
 | 
			
		||||
//   numDirLights   i0       1
 | 
			
		||||
//   numPointLights i1       1
 | 
			
		||||
//   numSpotLights  i2       1
 | 
			
		||||
//   combinedMat    c0       4
 | 
			
		||||
//   worldMat       c4       4
 | 
			
		||||
//   normalMat      c8       3
 | 
			
		||||
//   matCol         c12      1
 | 
			
		||||
//   surfProps      c13      1
 | 
			
		||||
//   ambientLight   c14      1
 | 
			
		||||
//   firstLight     c15      1
 | 
			
		||||
//   lights         c16     24
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
    vs_2_0
 | 
			
		||||
    def c11, 3, 0, 0, 0
 | 
			
		||||
    def c40, 0, -0, -1, 1
 | 
			
		||||
    dcl_position v0
 | 
			
		||||
    dcl_normal v1
 | 
			
		||||
    dcl_texcoord v2
 | 
			
		||||
    dcl_color v3
 | 
			
		||||
    mul r0, v0.y, c1
 | 
			
		||||
    mad r0, c0, v0.x, r0
 | 
			
		||||
    mad r0, c2, v0.z, r0
 | 
			
		||||
    mad oPos, c3, v0.w, r0
 | 
			
		||||
    mul r0.xyz, v0.y, c5
 | 
			
		||||
    mad r0.xyz, c4, v0.x, r0
 | 
			
		||||
    mad r0.xyz, c6, v0.z, r0
 | 
			
		||||
    mad r0.xyz, c7, v0.w, r0
 | 
			
		||||
    mul r1.xyz, v1.y, c9
 | 
			
		||||
    mad r1.xyz, c8, v1.x, r1
 | 
			
		||||
    mad r1.xyz, c10, v1.z, r1
 | 
			
		||||
    mov r2.xw, c40
 | 
			
		||||
    slt r0.w, r2.x, c13.w
 | 
			
		||||
    add r3, v3, c40.yyyz
 | 
			
		||||
    mad r3, r0.w, r3, c40.xxxw
 | 
			
		||||
    mov r2.x, c13.x
 | 
			
		||||
    mad r2.xyz, c14, r2.x, r3
 | 
			
		||||
    mov r4.xyz, r2
 | 
			
		||||
    mov r0.w, c40.x
 | 
			
		||||
    rep i0
 | 
			
		||||
      add r1.w, r0.w, c15.x
 | 
			
		||||
      mul r1.w, r1.w, c11.x
 | 
			
		||||
      mova a0.x, r1.w
 | 
			
		||||
      dp3 r1.w, r1, -c18[a0.x]
 | 
			
		||||
      max r1.w, r1.w, c40.x
 | 
			
		||||
      mul r5.xyz, r1.w, c16[a0.x]
 | 
			
		||||
      mad r4.xyz, r5, c13.z, r4
 | 
			
		||||
      add r0.w, r0.w, c40.w
 | 
			
		||||
    endrep
 | 
			
		||||
    mov r2.xyz, r4
 | 
			
		||||
    mov r0.w, c40.x
 | 
			
		||||
    rep i1
 | 
			
		||||
      add r1.w, r0.w, c15.y
 | 
			
		||||
      mul r1.w, r1.w, c11.x
 | 
			
		||||
      mova a0.x, r1.w
 | 
			
		||||
      add r5.xyz, r0, -c17[a0.x]
 | 
			
		||||
      dp3 r1.w, r5, r5
 | 
			
		||||
      rsq r1.w, r1.w
 | 
			
		||||
      mul r5.xyz, r1.w, r5
 | 
			
		||||
      dp3 r4.w, r1, -r5
 | 
			
		||||
      max r4.w, r4.w, c40.x
 | 
			
		||||
      mul r5.xyz, r4.w, c16[a0.x]
 | 
			
		||||
      rcp r1.w, r1.w
 | 
			
		||||
      rcp r4.w, c16[a0.x].w
 | 
			
		||||
      mad r1.w, r1.w, -r4.w, c40.w
 | 
			
		||||
      max r1.w, r1.w, c40.x
 | 
			
		||||
      mul r5.xyz, r1.w, r5
 | 
			
		||||
      mad r2.xyz, r5, c13.z, r2
 | 
			
		||||
      add r0.w, r0.w, c40.w
 | 
			
		||||
    endrep
 | 
			
		||||
    mov r3.xyz, r2
 | 
			
		||||
    mov r0.w, c40.x
 | 
			
		||||
    rep i2
 | 
			
		||||
      add r1.w, r0.w, c15.z
 | 
			
		||||
      mul r1.w, r1.w, c11.x
 | 
			
		||||
      mova a0.x, r1.w
 | 
			
		||||
      add r4.xyz, r0, -c17[a0.x]
 | 
			
		||||
      dp3 r1.w, r4, r4
 | 
			
		||||
      rsq r1.w, r1.w
 | 
			
		||||
      mul r4.xyz, r1.w, r4
 | 
			
		||||
      dp3 r4.w, r1, -r4
 | 
			
		||||
      dp3 r4.x, r4, c18[a0.x]
 | 
			
		||||
      max r4.y, r4.w, c40.x
 | 
			
		||||
      add r4.x, r4.x, c17[a0.x].w
 | 
			
		||||
      add r4.z, r2.w, c17[a0.x].w
 | 
			
		||||
      rcp r4.z, r4.z
 | 
			
		||||
      mul r4.x, r4.z, r4.x
 | 
			
		||||
      slt r4.z, r4.x, c40.x
 | 
			
		||||
      mad r4.y, r4.z, -r4.y, r4.y
 | 
			
		||||
      max r4.x, r4.x, c18[a0.x].w
 | 
			
		||||
      mul r4.x, r4.x, r4.y
 | 
			
		||||
      mul r4.xyz, r4.x, c16[a0.x]
 | 
			
		||||
      rcp r1.w, r1.w
 | 
			
		||||
      rcp r4.w, c16[a0.x].w
 | 
			
		||||
      mad r1.w, r1.w, -r4.w, c40.w
 | 
			
		||||
      max r1.w, r1.w, c40.x
 | 
			
		||||
      mul r4.xyz, r1.w, r4
 | 
			
		||||
      mad r3.xyz, r4, c13.z, r3
 | 
			
		||||
      add r0.w, r0.w, c40.w
 | 
			
		||||
    endrep
 | 
			
		||||
    max r0, r3, c40.x
 | 
			
		||||
    min r0, r0, c40.w
 | 
			
		||||
    mul oD0, r0, c12
 | 
			
		||||
    mov oT0.xy, v2
 | 
			
		||||
 | 
			
		||||
// approximately 93 instruction slots used
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const BYTE g_vs20_main[] =
 | 
			
		||||
{
 | 
			
		||||
      0,   2, 254, 255, 254, 255, 
 | 
			
		||||
    151,   0,  67,  84,  65,  66, 
 | 
			
		||||
     28,   0,   0,   0,  39,   2, 
 | 
			
		||||
      0,   0,   0,   2, 254, 255, 
 | 
			
		||||
     11,   0,   0,   0,  28,   0, 
 | 
			
		||||
      0,   0,   0,   1,   0,   0, 
 | 
			
		||||
     32,   2,   0,   0, 248,   0, 
 | 
			
		||||
      0,   0,   2,   0,  14,   0, 
 | 
			
		||||
      1,   0,  58,   0,   8,   1, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
     24,   1,   0,   0,   2,   0, 
 | 
			
		||||
      0,   0,   4,   0,   2,   0, 
 | 
			
		||||
     36,   1,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0,  52,   1,   0,   0, 
 | 
			
		||||
      2,   0,  15,   0,   1,   0, 
 | 
			
		||||
     62,   0,  64,   1,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0,  80,   1, 
 | 
			
		||||
      0,   0,   2,   0,  16,   0, 
 | 
			
		||||
     24,   0,  66,   0, 156,   1, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    172,   1,   0,   0,   2,   0, 
 | 
			
		||||
     12,   0,   1,   0,  50,   0, 
 | 
			
		||||
      8,   1,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 179,   1,   0,   0, 
 | 
			
		||||
      2,   0,   8,   0,   3,   0, 
 | 
			
		||||
     34,   0, 192,   1,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0, 208,   1, 
 | 
			
		||||
      0,   0,   1,   0,   0,   0, 
 | 
			
		||||
      1,   0,   2,   0, 224,   1, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    240,   1,   0,   0,   1,   0, 
 | 
			
		||||
      1,   0,   1,   0,   6,   0, 
 | 
			
		||||
    224,   1,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 255,   1,   0,   0, 
 | 
			
		||||
      1,   0,   2,   0,   1,   0, 
 | 
			
		||||
     10,   0, 224,   1,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0,  13,   2, 
 | 
			
		||||
      0,   0,   2,   0,  13,   0, 
 | 
			
		||||
      1,   0,  54,   0,   8,   1, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
     23,   2,   0,   0,   2,   0, 
 | 
			
		||||
      4,   0,   4,   0,  18,   0, 
 | 
			
		||||
     36,   1,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0,  97, 109,  98, 105, 
 | 
			
		||||
    101, 110, 116,  76, 105, 103, 
 | 
			
		||||
    104, 116,   0, 171, 171, 171, 
 | 
			
		||||
      1,   0,   3,   0,   1,   0, 
 | 
			
		||||
      4,   0,   1,   0,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0,  99, 111, 
 | 
			
		||||
    109,  98, 105, 110, 101, 100, 
 | 
			
		||||
     77,  97, 116,   0,   3,   0, 
 | 
			
		||||
      3,   0,   4,   0,   4,   0, 
 | 
			
		||||
      1,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 102, 105, 114, 115, 
 | 
			
		||||
    116,  76, 105, 103, 104, 116, 
 | 
			
		||||
      0, 171,   1,   0,   2,   0, 
 | 
			
		||||
      1,   0,   4,   0,   1,   0, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    108, 105, 103, 104, 116, 115, 
 | 
			
		||||
      0,  99, 111, 108, 111, 114, 
 | 
			
		||||
      0, 171, 171, 171,   1,   0, 
 | 
			
		||||
      3,   0,   1,   0,   4,   0, 
 | 
			
		||||
      1,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 112, 111, 115, 105, 
 | 
			
		||||
    116, 105, 111, 110,   0, 100, 
 | 
			
		||||
    105, 114, 101,  99, 116, 105, 
 | 
			
		||||
    111, 110,   0, 171,  87,   1, 
 | 
			
		||||
      0,   0,  96,   1,   0,   0, 
 | 
			
		||||
    112,   1,   0,   0,  96,   1, 
 | 
			
		||||
      0,   0, 121,   1,   0,   0, 
 | 
			
		||||
     96,   1,   0,   0,   5,   0, 
 | 
			
		||||
      0,   0,   1,   0,  12,   0, 
 | 
			
		||||
      8,   0,   3,   0, 132,   1, 
 | 
			
		||||
      0,   0, 109,  97, 116,  67, 
 | 
			
		||||
    111, 108,   0, 110, 111, 114, 
 | 
			
		||||
    109,  97, 108,  77,  97, 116, 
 | 
			
		||||
      0, 171, 171, 171,   3,   0, 
 | 
			
		||||
      3,   0,   3,   0,   3,   0, 
 | 
			
		||||
      1,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 110, 117, 109,  68, 
 | 
			
		||||
    105, 114,  76, 105, 103, 104, 
 | 
			
		||||
    116, 115,   0, 171, 171, 171, 
 | 
			
		||||
      0,   0,   2,   0,   1,   0, 
 | 
			
		||||
      1,   0,   1,   0,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0, 110, 117, 
 | 
			
		||||
    109,  80, 111, 105, 110, 116, 
 | 
			
		||||
     76, 105, 103, 104, 116, 115, 
 | 
			
		||||
      0, 110, 117, 109,  83, 112, 
 | 
			
		||||
    111, 116,  76, 105, 103, 104, 
 | 
			
		||||
    116, 115,   0, 115, 117, 114, 
 | 
			
		||||
    102,  80, 114, 111, 112, 115, 
 | 
			
		||||
      0, 119, 111, 114, 108, 100, 
 | 
			
		||||
     77,  97, 116,   0, 118, 115, 
 | 
			
		||||
     95,  50,  95,  48,   0,  77, 
 | 
			
		||||
    105,  99, 114, 111, 115, 111, 
 | 
			
		||||
    102, 116,  32,  40,  82,  41, 
 | 
			
		||||
     32,  72,  76,  83,  76,  32, 
 | 
			
		||||
     83, 104,  97, 100, 101, 114, 
 | 
			
		||||
     32,  67, 111, 109, 112, 105, 
 | 
			
		||||
    108, 101, 114,  32,  57,  46, 
 | 
			
		||||
     50,  57,  46,  57,  53,  50, 
 | 
			
		||||
     46,  51,  49,  49,  49,   0, 
 | 
			
		||||
     81,   0,   0,   5,  11,   0, 
 | 
			
		||||
     15, 160,   0,   0,  64,  64, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
     81,   0,   0,   5,  40,   0, 
 | 
			
		||||
     15, 160,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0,   0, 128,   0,   0, 
 | 
			
		||||
    128, 191,   0,   0, 128,  63, 
 | 
			
		||||
     31,   0,   0,   2,   0,   0, 
 | 
			
		||||
      0, 128,   0,   0,  15, 144, 
 | 
			
		||||
     31,   0,   0,   2,   3,   0, 
 | 
			
		||||
      0, 128,   1,   0,  15, 144, 
 | 
			
		||||
     31,   0,   0,   2,   5,   0, 
 | 
			
		||||
      0, 128,   2,   0,  15, 144, 
 | 
			
		||||
     31,   0,   0,   2,  10,   0, 
 | 
			
		||||
      0, 128,   3,   0,  15, 144, 
 | 
			
		||||
      5,   0,   0,   3,   0,   0, 
 | 
			
		||||
     15, 128,   0,   0,  85, 144, 
 | 
			
		||||
      1,   0, 228, 160,   4,   0, 
 | 
			
		||||
      0,   4,   0,   0,  15, 128, 
 | 
			
		||||
      0,   0, 228, 160,   0,   0, 
 | 
			
		||||
      0, 144,   0,   0, 228, 128, 
 | 
			
		||||
      4,   0,   0,   4,   0,   0, 
 | 
			
		||||
     15, 128,   2,   0, 228, 160, 
 | 
			
		||||
      0,   0, 170, 144,   0,   0, 
 | 
			
		||||
    228, 128,   4,   0,   0,   4, 
 | 
			
		||||
      0,   0,  15, 192,   3,   0, 
 | 
			
		||||
    228, 160,   0,   0, 255, 144, 
 | 
			
		||||
      0,   0, 228, 128,   5,   0, 
 | 
			
		||||
      0,   3,   0,   0,   7, 128, 
 | 
			
		||||
      0,   0,  85, 144,   5,   0, 
 | 
			
		||||
    228, 160,   4,   0,   0,   4, 
 | 
			
		||||
      0,   0,   7, 128,   4,   0, 
 | 
			
		||||
    228, 160,   0,   0,   0, 144, 
 | 
			
		||||
      0,   0, 228, 128,   4,   0, 
 | 
			
		||||
      0,   4,   0,   0,   7, 128, 
 | 
			
		||||
      6,   0, 228, 160,   0,   0, 
 | 
			
		||||
    170, 144,   0,   0, 228, 128, 
 | 
			
		||||
      4,   0,   0,   4,   0,   0, 
 | 
			
		||||
      7, 128,   7,   0, 228, 160, 
 | 
			
		||||
      0,   0, 255, 144,   0,   0, 
 | 
			
		||||
    228, 128,   5,   0,   0,   3, 
 | 
			
		||||
      1,   0,   7, 128,   1,   0, 
 | 
			
		||||
     85, 144,   9,   0, 228, 160, 
 | 
			
		||||
      4,   0,   0,   4,   1,   0, 
 | 
			
		||||
      7, 128,   8,   0, 228, 160, 
 | 
			
		||||
      1,   0,   0, 144,   1,   0, 
 | 
			
		||||
    228, 128,   4,   0,   0,   4, 
 | 
			
		||||
      1,   0,   7, 128,  10,   0, 
 | 
			
		||||
    228, 160,   1,   0, 170, 144, 
 | 
			
		||||
      1,   0, 228, 128,   1,   0, 
 | 
			
		||||
      0,   2,   2,   0,   9, 128, 
 | 
			
		||||
     40,   0, 228, 160,  12,   0, 
 | 
			
		||||
      0,   3,   0,   0,   8, 128, 
 | 
			
		||||
      2,   0,   0, 128,  13,   0, 
 | 
			
		||||
    255, 160,   2,   0,   0,   3, 
 | 
			
		||||
      3,   0,  15, 128,   3,   0, 
 | 
			
		||||
    228, 144,  40,   0, 149, 160, 
 | 
			
		||||
      4,   0,   0,   4,   3,   0, 
 | 
			
		||||
     15, 128,   0,   0, 255, 128, 
 | 
			
		||||
      3,   0, 228, 128,  40,   0, 
 | 
			
		||||
    192, 160,   1,   0,   0,   2, 
 | 
			
		||||
      2,   0,   1, 128,  13,   0, 
 | 
			
		||||
      0, 160,   4,   0,   0,   4, 
 | 
			
		||||
      2,   0,   7, 128,  14,   0, 
 | 
			
		||||
    228, 160,   2,   0,   0, 128, 
 | 
			
		||||
      3,   0, 228, 128,   1,   0, 
 | 
			
		||||
      0,   2,   4,   0,   7, 128, 
 | 
			
		||||
      2,   0, 228, 128,   1,   0, 
 | 
			
		||||
      0,   2,   0,   0,   8, 128, 
 | 
			
		||||
     40,   0,   0, 160,  38,   0, 
 | 
			
		||||
      0,   1,   0,   0, 228, 240, 
 | 
			
		||||
      2,   0,   0,   3,   1,   0, 
 | 
			
		||||
      8, 128,   0,   0, 255, 128, 
 | 
			
		||||
     15,   0,   0, 160,   5,   0, 
 | 
			
		||||
      0,   3,   1,   0,   8, 128, 
 | 
			
		||||
      1,   0, 255, 128,  11,   0, 
 | 
			
		||||
      0, 160,  46,   0,   0,   2, 
 | 
			
		||||
      0,   0,   1, 176,   1,   0, 
 | 
			
		||||
    255, 128,   8,   0,   0,   4, 
 | 
			
		||||
      1,   0,   8, 128,   1,   0, 
 | 
			
		||||
    228, 128,  18,  32, 228, 161, 
 | 
			
		||||
      0,   0,   0, 176,  11,   0, 
 | 
			
		||||
      0,   3,   1,   0,   8, 128, 
 | 
			
		||||
      1,   0, 255, 128,  40,   0, 
 | 
			
		||||
      0, 160,   5,   0,   0,   4, 
 | 
			
		||||
      5,   0,   7, 128,   1,   0, 
 | 
			
		||||
    255, 128,  16,  32, 228, 160, 
 | 
			
		||||
      0,   0,   0, 176,   4,   0, 
 | 
			
		||||
      0,   4,   4,   0,   7, 128, 
 | 
			
		||||
      5,   0, 228, 128,  13,   0, 
 | 
			
		||||
    170, 160,   4,   0, 228, 128, 
 | 
			
		||||
      2,   0,   0,   3,   0,   0, 
 | 
			
		||||
      8, 128,   0,   0, 255, 128, 
 | 
			
		||||
     40,   0, 255, 160,  39,   0, 
 | 
			
		||||
      0,   0,   1,   0,   0,   2, 
 | 
			
		||||
      2,   0,   7, 128,   4,   0, 
 | 
			
		||||
    228, 128,   1,   0,   0,   2, 
 | 
			
		||||
      0,   0,   8, 128,  40,   0, 
 | 
			
		||||
      0, 160,  38,   0,   0,   1, 
 | 
			
		||||
      1,   0, 228, 240,   2,   0, 
 | 
			
		||||
      0,   3,   1,   0,   8, 128, 
 | 
			
		||||
      0,   0, 255, 128,  15,   0, 
 | 
			
		||||
     85, 160,   5,   0,   0,   3, 
 | 
			
		||||
      1,   0,   8, 128,   1,   0, 
 | 
			
		||||
    255, 128,  11,   0,   0, 160, 
 | 
			
		||||
     46,   0,   0,   2,   0,   0, 
 | 
			
		||||
      1, 176,   1,   0, 255, 128, 
 | 
			
		||||
      2,   0,   0,   4,   5,   0, 
 | 
			
		||||
      7, 128,   0,   0, 228, 128, 
 | 
			
		||||
     17,  32, 228, 161,   0,   0, 
 | 
			
		||||
      0, 176,   8,   0,   0,   3, 
 | 
			
		||||
      1,   0,   8, 128,   5,   0, 
 | 
			
		||||
    228, 128,   5,   0, 228, 128, 
 | 
			
		||||
      7,   0,   0,   2,   1,   0, 
 | 
			
		||||
      8, 128,   1,   0, 255, 128, 
 | 
			
		||||
      5,   0,   0,   3,   5,   0, 
 | 
			
		||||
      7, 128,   1,   0, 255, 128, 
 | 
			
		||||
      5,   0, 228, 128,   8,   0, 
 | 
			
		||||
      0,   3,   4,   0,   8, 128, 
 | 
			
		||||
      1,   0, 228, 128,   5,   0, 
 | 
			
		||||
    228, 129,  11,   0,   0,   3, 
 | 
			
		||||
      4,   0,   8, 128,   4,   0, 
 | 
			
		||||
    255, 128,  40,   0,   0, 160, 
 | 
			
		||||
      5,   0,   0,   4,   5,   0, 
 | 
			
		||||
      7, 128,   4,   0, 255, 128, 
 | 
			
		||||
     16,  32, 228, 160,   0,   0, 
 | 
			
		||||
      0, 176,   6,   0,   0,   2, 
 | 
			
		||||
      1,   0,   8, 128,   1,   0, 
 | 
			
		||||
    255, 128,   6,   0,   0,   3, 
 | 
			
		||||
      4,   0,   8, 128,  16,  32, 
 | 
			
		||||
    255, 160,   0,   0,   0, 176, 
 | 
			
		||||
      4,   0,   0,   4,   1,   0, 
 | 
			
		||||
      8, 128,   1,   0, 255, 128, 
 | 
			
		||||
      4,   0, 255, 129,  40,   0, 
 | 
			
		||||
    255, 160,  11,   0,   0,   3, 
 | 
			
		||||
      1,   0,   8, 128,   1,   0, 
 | 
			
		||||
    255, 128,  40,   0,   0, 160, 
 | 
			
		||||
      5,   0,   0,   3,   5,   0, 
 | 
			
		||||
      7, 128,   1,   0, 255, 128, 
 | 
			
		||||
      5,   0, 228, 128,   4,   0, 
 | 
			
		||||
      0,   4,   2,   0,   7, 128, 
 | 
			
		||||
      5,   0, 228, 128,  13,   0, 
 | 
			
		||||
    170, 160,   2,   0, 228, 128, 
 | 
			
		||||
      2,   0,   0,   3,   0,   0, 
 | 
			
		||||
      8, 128,   0,   0, 255, 128, 
 | 
			
		||||
     40,   0, 255, 160,  39,   0, 
 | 
			
		||||
      0,   0,   1,   0,   0,   2, 
 | 
			
		||||
      3,   0,   7, 128,   2,   0, 
 | 
			
		||||
    228, 128,   1,   0,   0,   2, 
 | 
			
		||||
      0,   0,   8, 128,  40,   0, 
 | 
			
		||||
      0, 160,  38,   0,   0,   1, 
 | 
			
		||||
      2,   0, 228, 240,   2,   0, 
 | 
			
		||||
      0,   3,   1,   0,   8, 128, 
 | 
			
		||||
      0,   0, 255, 128,  15,   0, 
 | 
			
		||||
    170, 160,   5,   0,   0,   3, 
 | 
			
		||||
      1,   0,   8, 128,   1,   0, 
 | 
			
		||||
    255, 128,  11,   0,   0, 160, 
 | 
			
		||||
     46,   0,   0,   2,   0,   0, 
 | 
			
		||||
      1, 176,   1,   0, 255, 128, 
 | 
			
		||||
      2,   0,   0,   4,   4,   0, 
 | 
			
		||||
      7, 128,   0,   0, 228, 128, 
 | 
			
		||||
     17,  32, 228, 161,   0,   0, 
 | 
			
		||||
      0, 176,   8,   0,   0,   3, 
 | 
			
		||||
      1,   0,   8, 128,   4,   0, 
 | 
			
		||||
    228, 128,   4,   0, 228, 128, 
 | 
			
		||||
      7,   0,   0,   2,   1,   0, 
 | 
			
		||||
      8, 128,   1,   0, 255, 128, 
 | 
			
		||||
      5,   0,   0,   3,   4,   0, 
 | 
			
		||||
      7, 128,   1,   0, 255, 128, 
 | 
			
		||||
      4,   0, 228, 128,   8,   0, 
 | 
			
		||||
      0,   3,   4,   0,   8, 128, 
 | 
			
		||||
      1,   0, 228, 128,   4,   0, 
 | 
			
		||||
    228, 129,   8,   0,   0,   4, 
 | 
			
		||||
      4,   0,   1, 128,   4,   0, 
 | 
			
		||||
    228, 128,  18,  32, 228, 160, 
 | 
			
		||||
      0,   0,   0, 176,  11,   0, 
 | 
			
		||||
      0,   3,   4,   0,   2, 128, 
 | 
			
		||||
      4,   0, 255, 128,  40,   0, 
 | 
			
		||||
      0, 160,   2,   0,   0,   4, 
 | 
			
		||||
      4,   0,   1, 128,   4,   0, 
 | 
			
		||||
      0, 128,  17,  32, 255, 160, 
 | 
			
		||||
      0,   0,   0, 176,   2,   0, 
 | 
			
		||||
      0,   4,   4,   0,   4, 128, 
 | 
			
		||||
      2,   0, 255, 128,  17,  32, 
 | 
			
		||||
    255, 160,   0,   0,   0, 176, 
 | 
			
		||||
      6,   0,   0,   2,   4,   0, 
 | 
			
		||||
      4, 128,   4,   0, 170, 128, 
 | 
			
		||||
      5,   0,   0,   3,   4,   0, 
 | 
			
		||||
      1, 128,   4,   0, 170, 128, 
 | 
			
		||||
      4,   0,   0, 128,  12,   0, 
 | 
			
		||||
      0,   3,   4,   0,   4, 128, 
 | 
			
		||||
      4,   0,   0, 128,  40,   0, 
 | 
			
		||||
      0, 160,   4,   0,   0,   4, 
 | 
			
		||||
      4,   0,   2, 128,   4,   0, 
 | 
			
		||||
    170, 128,   4,   0,  85, 129, 
 | 
			
		||||
      4,   0,  85, 128,  11,   0, 
 | 
			
		||||
      0,   4,   4,   0,   1, 128, 
 | 
			
		||||
      4,   0,   0, 128,  18,  32, 
 | 
			
		||||
    255, 160,   0,   0,   0, 176, 
 | 
			
		||||
      5,   0,   0,   3,   4,   0, 
 | 
			
		||||
      1, 128,   4,   0,   0, 128, 
 | 
			
		||||
      4,   0,  85, 128,   5,   0, 
 | 
			
		||||
      0,   4,   4,   0,   7, 128, 
 | 
			
		||||
      4,   0,   0, 128,  16,  32, 
 | 
			
		||||
    228, 160,   0,   0,   0, 176, 
 | 
			
		||||
      6,   0,   0,   2,   1,   0, 
 | 
			
		||||
      8, 128,   1,   0, 255, 128, 
 | 
			
		||||
      6,   0,   0,   3,   4,   0, 
 | 
			
		||||
      8, 128,  16,  32, 255, 160, 
 | 
			
		||||
      0,   0,   0, 176,   4,   0, 
 | 
			
		||||
      0,   4,   1,   0,   8, 128, 
 | 
			
		||||
      1,   0, 255, 128,   4,   0, 
 | 
			
		||||
    255, 129,  40,   0, 255, 160, 
 | 
			
		||||
     11,   0,   0,   3,   1,   0, 
 | 
			
		||||
      8, 128,   1,   0, 255, 128, 
 | 
			
		||||
     40,   0,   0, 160,   5,   0, 
 | 
			
		||||
      0,   3,   4,   0,   7, 128, 
 | 
			
		||||
      1,   0, 255, 128,   4,   0, 
 | 
			
		||||
    228, 128,   4,   0,   0,   4, 
 | 
			
		||||
      3,   0,   7, 128,   4,   0, 
 | 
			
		||||
    228, 128,  13,   0, 170, 160, 
 | 
			
		||||
      3,   0, 228, 128,   2,   0, 
 | 
			
		||||
      0,   3,   0,   0,   8, 128, 
 | 
			
		||||
      0,   0, 255, 128,  40,   0, 
 | 
			
		||||
    255, 160,  39,   0,   0,   0, 
 | 
			
		||||
     11,   0,   0,   3,   0,   0, 
 | 
			
		||||
     15, 128,   3,   0, 228, 128, 
 | 
			
		||||
     40,   0,   0, 160,  10,   0, 
 | 
			
		||||
      0,   3,   0,   0,  15, 128, 
 | 
			
		||||
      0,   0, 228, 128,  40,   0, 
 | 
			
		||||
    255, 160,   5,   0,   0,   3, 
 | 
			
		||||
      0,   0,  15, 208,   0,   0, 
 | 
			
		||||
    228, 128,  12,   0, 228, 160, 
 | 
			
		||||
      1,   0,   0,   2,   0,   0, 
 | 
			
		||||
      3, 224,   2,   0, 228, 144, 
 | 
			
		||||
    255, 255,   0,   0
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										143
									
								
								src/d3d/shaders/default_amb_VS.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								src/d3d/shaders/default_amb_VS.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,143 @@
 | 
			
		||||
#if 0
 | 
			
		||||
//
 | 
			
		||||
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
 | 
			
		||||
//
 | 
			
		||||
//   fxc /T vs_2_0 /Fh default_amb_VS.h defaultVS.hlsl
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Parameters:
 | 
			
		||||
//
 | 
			
		||||
//   float4 ambientLight;
 | 
			
		||||
//   float4x4 combinedMat;
 | 
			
		||||
//   float4 matCol;
 | 
			
		||||
//   float4 surfProps;
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Registers:
 | 
			
		||||
//
 | 
			
		||||
//   Name         Reg   Size
 | 
			
		||||
//   ------------ ----- ----
 | 
			
		||||
//   combinedMat  c0       4
 | 
			
		||||
//   matCol       c12      1
 | 
			
		||||
//   surfProps    c13      1
 | 
			
		||||
//   ambientLight c14      1
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
    vs_2_0
 | 
			
		||||
    def c4, 0, -0, -1, 1
 | 
			
		||||
    dcl_position v0
 | 
			
		||||
    dcl_texcoord v1
 | 
			
		||||
    dcl_color v2
 | 
			
		||||
    mul r0, v0.y, c1
 | 
			
		||||
    mad r0, c0, v0.x, r0
 | 
			
		||||
    mad r0, c2, v0.z, r0
 | 
			
		||||
    mad oPos, c3, v0.w, r0
 | 
			
		||||
    mov r0.x, c4.x
 | 
			
		||||
    slt r0.x, r0.x, c13.w
 | 
			
		||||
    add r1, v2, c4.yyyz
 | 
			
		||||
    mad r0, r0.x, r1, c4.xxxw
 | 
			
		||||
    mov r1.x, c13.x
 | 
			
		||||
    mad r0.xyz, c14, r1.x, r0
 | 
			
		||||
    max r0, r0, c4.x
 | 
			
		||||
    min r0, r0, c4.w
 | 
			
		||||
    mul oD0, r0, c12
 | 
			
		||||
    mov oT0.xy, v1
 | 
			
		||||
 | 
			
		||||
// approximately 14 instruction slots used
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const BYTE g_vs20_main[] =
 | 
			
		||||
{
 | 
			
		||||
      0,   2, 254, 255, 254, 255, 
 | 
			
		||||
     62,   0,  67,  84,  65,  66, 
 | 
			
		||||
     28,   0,   0,   0, 192,   0, 
 | 
			
		||||
      0,   0,   0,   2, 254, 255, 
 | 
			
		||||
      4,   0,   0,   0,  28,   0, 
 | 
			
		||||
      0,   0,   0,   1,   0,   0, 
 | 
			
		||||
    185,   0,   0,   0, 108,   0, 
 | 
			
		||||
      0,   0,   2,   0,  14,   0, 
 | 
			
		||||
      1,   0,  58,   0, 124,   0, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    140,   0,   0,   0,   2,   0, 
 | 
			
		||||
      0,   0,   4,   0,   2,   0, 
 | 
			
		||||
    152,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 168,   0,   0,   0, 
 | 
			
		||||
      2,   0,  12,   0,   1,   0, 
 | 
			
		||||
     50,   0, 124,   0,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0, 175,   0, 
 | 
			
		||||
      0,   0,   2,   0,  13,   0, 
 | 
			
		||||
      1,   0,  54,   0, 124,   0, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
     97, 109,  98, 105, 101, 110, 
 | 
			
		||||
    116,  76, 105, 103, 104, 116, 
 | 
			
		||||
      0, 171, 171, 171,   1,   0, 
 | 
			
		||||
      3,   0,   1,   0,   4,   0, 
 | 
			
		||||
      1,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0,  99, 111, 109,  98, 
 | 
			
		||||
    105, 110, 101, 100,  77,  97, 
 | 
			
		||||
    116,   0,   3,   0,   3,   0, 
 | 
			
		||||
      4,   0,   4,   0,   1,   0, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    109,  97, 116,  67, 111, 108, 
 | 
			
		||||
      0, 115, 117, 114, 102,  80, 
 | 
			
		||||
    114, 111, 112, 115,   0, 118, 
 | 
			
		||||
    115,  95,  50,  95,  48,   0, 
 | 
			
		||||
     77, 105,  99, 114, 111, 115, 
 | 
			
		||||
    111, 102, 116,  32,  40,  82, 
 | 
			
		||||
     41,  32,  72,  76,  83,  76, 
 | 
			
		||||
     32,  83, 104,  97, 100, 101, 
 | 
			
		||||
    114,  32,  67, 111, 109, 112, 
 | 
			
		||||
    105, 108, 101, 114,  32,  57, 
 | 
			
		||||
     46,  50,  57,  46,  57,  53, 
 | 
			
		||||
     50,  46,  51,  49,  49,  49, 
 | 
			
		||||
      0, 171, 171, 171,  81,   0, 
 | 
			
		||||
      0,   5,   4,   0,  15, 160, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0, 128,   0,   0, 128, 191, 
 | 
			
		||||
      0,   0, 128,  63,  31,   0, 
 | 
			
		||||
      0,   2,   0,   0,   0, 128, 
 | 
			
		||||
      0,   0,  15, 144,  31,   0, 
 | 
			
		||||
      0,   2,   5,   0,   0, 128, 
 | 
			
		||||
      1,   0,  15, 144,  31,   0, 
 | 
			
		||||
      0,   2,  10,   0,   0, 128, 
 | 
			
		||||
      2,   0,  15, 144,   5,   0, 
 | 
			
		||||
      0,   3,   0,   0,  15, 128, 
 | 
			
		||||
      0,   0,  85, 144,   1,   0, 
 | 
			
		||||
    228, 160,   4,   0,   0,   4, 
 | 
			
		||||
      0,   0,  15, 128,   0,   0, 
 | 
			
		||||
    228, 160,   0,   0,   0, 144, 
 | 
			
		||||
      0,   0, 228, 128,   4,   0, 
 | 
			
		||||
      0,   4,   0,   0,  15, 128, 
 | 
			
		||||
      2,   0, 228, 160,   0,   0, 
 | 
			
		||||
    170, 144,   0,   0, 228, 128, 
 | 
			
		||||
      4,   0,   0,   4,   0,   0, 
 | 
			
		||||
     15, 192,   3,   0, 228, 160, 
 | 
			
		||||
      0,   0, 255, 144,   0,   0, 
 | 
			
		||||
    228, 128,   1,   0,   0,   2, 
 | 
			
		||||
      0,   0,   1, 128,   4,   0, 
 | 
			
		||||
      0, 160,  12,   0,   0,   3, 
 | 
			
		||||
      0,   0,   1, 128,   0,   0, 
 | 
			
		||||
      0, 128,  13,   0, 255, 160, 
 | 
			
		||||
      2,   0,   0,   3,   1,   0, 
 | 
			
		||||
     15, 128,   2,   0, 228, 144, 
 | 
			
		||||
      4,   0, 149, 160,   4,   0, 
 | 
			
		||||
      0,   4,   0,   0,  15, 128, 
 | 
			
		||||
      0,   0,   0, 128,   1,   0, 
 | 
			
		||||
    228, 128,   4,   0, 192, 160, 
 | 
			
		||||
      1,   0,   0,   2,   1,   0, 
 | 
			
		||||
      1, 128,  13,   0,   0, 160, 
 | 
			
		||||
      4,   0,   0,   4,   0,   0, 
 | 
			
		||||
      7, 128,  14,   0, 228, 160, 
 | 
			
		||||
      1,   0,   0, 128,   0,   0, 
 | 
			
		||||
    228, 128,  11,   0,   0,   3, 
 | 
			
		||||
      0,   0,  15, 128,   0,   0, 
 | 
			
		||||
    228, 128,   4,   0,   0, 160, 
 | 
			
		||||
     10,   0,   0,   3,   0,   0, 
 | 
			
		||||
     15, 128,   0,   0, 228, 128, 
 | 
			
		||||
      4,   0, 255, 160,   5,   0, 
 | 
			
		||||
      0,   3,   0,   0,  15, 208, 
 | 
			
		||||
      0,   0, 228, 128,  12,   0, 
 | 
			
		||||
    228, 160,   1,   0,   0,   2, 
 | 
			
		||||
      0,   0,   3, 224,   1,   0, 
 | 
			
		||||
    228, 144, 255, 255,   0,   0
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										264
									
								
								src/d3d/shaders/default_amb_dir_VS.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										264
									
								
								src/d3d/shaders/default_amb_dir_VS.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,264 @@
 | 
			
		||||
#if 0
 | 
			
		||||
//
 | 
			
		||||
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
 | 
			
		||||
//
 | 
			
		||||
//   fxc /T vs_2_0 /DDIRECTIONALS /Fh default_amb_dir_VS.h defaultVS.hlsl
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Parameters:
 | 
			
		||||
//
 | 
			
		||||
//   float4 ambientLight;
 | 
			
		||||
//   float4x4 combinedMat;
 | 
			
		||||
//   int4 firstLight;
 | 
			
		||||
//   
 | 
			
		||||
//   struct
 | 
			
		||||
//   {
 | 
			
		||||
//       float4 color;
 | 
			
		||||
//       float4 position;
 | 
			
		||||
//       float4 direction;
 | 
			
		||||
//
 | 
			
		||||
//   } lights[8];
 | 
			
		||||
//   
 | 
			
		||||
//   float4 matCol;
 | 
			
		||||
//   float3x3 normalMat;
 | 
			
		||||
//   int numDirLights;
 | 
			
		||||
//   float4 surfProps;
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Registers:
 | 
			
		||||
//
 | 
			
		||||
//   Name         Reg   Size
 | 
			
		||||
//   ------------ ----- ----
 | 
			
		||||
//   numDirLights i0       1
 | 
			
		||||
//   combinedMat  c0       4
 | 
			
		||||
//   normalMat    c8       3
 | 
			
		||||
//   matCol       c12      1
 | 
			
		||||
//   surfProps    c13      1
 | 
			
		||||
//   ambientLight c14      1
 | 
			
		||||
//   firstLight   c15      1
 | 
			
		||||
//   lights       c16     24
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
    vs_2_0
 | 
			
		||||
    def c4, 3, 0, 0, 0
 | 
			
		||||
    def c5, 0, -0, -1, 1
 | 
			
		||||
    dcl_position v0
 | 
			
		||||
    dcl_normal v1
 | 
			
		||||
    dcl_texcoord v2
 | 
			
		||||
    dcl_color v3
 | 
			
		||||
    mul r0, v0.y, c1
 | 
			
		||||
    mad r0, c0, v0.x, r0
 | 
			
		||||
    mad r0, c2, v0.z, r0
 | 
			
		||||
    mad oPos, c3, v0.w, r0
 | 
			
		||||
    mul r0.xyz, v1.y, c9
 | 
			
		||||
    mad r0.xyz, c8, v1.x, r0
 | 
			
		||||
    mad r0.xyz, c10, v1.z, r0
 | 
			
		||||
    mov r1.x, c5.x
 | 
			
		||||
    slt r0.w, r1.x, c13.w
 | 
			
		||||
    add r1, v3, c5.yyyz
 | 
			
		||||
    mad r1, r0.w, r1, c5.xxxw
 | 
			
		||||
    mov r2.x, c13.x
 | 
			
		||||
    mad r2.xyz, c14, r2.x, r1
 | 
			
		||||
    mov r1.xyz, r2
 | 
			
		||||
    mov r0.w, c5.x
 | 
			
		||||
    rep i0
 | 
			
		||||
      add r2.w, r0.w, c15.x
 | 
			
		||||
      mul r2.w, r2.w, c4.x
 | 
			
		||||
      mova a0.x, r2.w
 | 
			
		||||
      dp3 r2.w, r0, -c18[a0.x]
 | 
			
		||||
      max r2.w, r2.w, c5.x
 | 
			
		||||
      mul r3.xyz, r2.w, c16[a0.x]
 | 
			
		||||
      mad r1.xyz, r3, c13.z, r1
 | 
			
		||||
      add r0.w, r0.w, c5.w
 | 
			
		||||
    endrep
 | 
			
		||||
    max r0, r1, c5.x
 | 
			
		||||
    min r0, r0, c5.w
 | 
			
		||||
    mul oD0, r0, c12
 | 
			
		||||
    mov oT0.xy, v2
 | 
			
		||||
 | 
			
		||||
// approximately 32 instruction slots used
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const BYTE g_vs20_main[] =
 | 
			
		||||
{
 | 
			
		||||
      0,   2, 254, 255, 254, 255, 
 | 
			
		||||
    127,   0,  67,  84,  65,  66, 
 | 
			
		||||
     28,   0,   0,   0, 197,   1, 
 | 
			
		||||
      0,   0,   0,   2, 254, 255, 
 | 
			
		||||
      8,   0,   0,   0,  28,   0, 
 | 
			
		||||
      0,   0,   0,   1,   0,   0, 
 | 
			
		||||
    190,   1,   0,   0, 188,   0, 
 | 
			
		||||
      0,   0,   2,   0,  14,   0, 
 | 
			
		||||
      1,   0,  58,   0, 204,   0, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    220,   0,   0,   0,   2,   0, 
 | 
			
		||||
      0,   0,   4,   0,   2,   0, 
 | 
			
		||||
    232,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 248,   0,   0,   0, 
 | 
			
		||||
      2,   0,  15,   0,   1,   0, 
 | 
			
		||||
     62,   0,   4,   1,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0,  20,   1, 
 | 
			
		||||
      0,   0,   2,   0,  16,   0, 
 | 
			
		||||
     24,   0,  66,   0,  96,   1, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    112,   1,   0,   0,   2,   0, 
 | 
			
		||||
     12,   0,   1,   0,  50,   0, 
 | 
			
		||||
    204,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 119,   1,   0,   0, 
 | 
			
		||||
      2,   0,   8,   0,   3,   0, 
 | 
			
		||||
     34,   0, 132,   1,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0, 148,   1, 
 | 
			
		||||
      0,   0,   1,   0,   0,   0, 
 | 
			
		||||
      1,   0,   2,   0, 164,   1, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    180,   1,   0,   0,   2,   0, 
 | 
			
		||||
     13,   0,   1,   0,  54,   0, 
 | 
			
		||||
    204,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0,  97, 109,  98, 105, 
 | 
			
		||||
    101, 110, 116,  76, 105, 103, 
 | 
			
		||||
    104, 116,   0, 171, 171, 171, 
 | 
			
		||||
      1,   0,   3,   0,   1,   0, 
 | 
			
		||||
      4,   0,   1,   0,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0,  99, 111, 
 | 
			
		||||
    109,  98, 105, 110, 101, 100, 
 | 
			
		||||
     77,  97, 116,   0,   3,   0, 
 | 
			
		||||
      3,   0,   4,   0,   4,   0, 
 | 
			
		||||
      1,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 102, 105, 114, 115, 
 | 
			
		||||
    116,  76, 105, 103, 104, 116, 
 | 
			
		||||
      0, 171,   1,   0,   2,   0, 
 | 
			
		||||
      1,   0,   4,   0,   1,   0, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    108, 105, 103, 104, 116, 115, 
 | 
			
		||||
      0,  99, 111, 108, 111, 114, 
 | 
			
		||||
      0, 171, 171, 171,   1,   0, 
 | 
			
		||||
      3,   0,   1,   0,   4,   0, 
 | 
			
		||||
      1,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 112, 111, 115, 105, 
 | 
			
		||||
    116, 105, 111, 110,   0, 100, 
 | 
			
		||||
    105, 114, 101,  99, 116, 105, 
 | 
			
		||||
    111, 110,   0, 171,  27,   1, 
 | 
			
		||||
      0,   0,  36,   1,   0,   0, 
 | 
			
		||||
     52,   1,   0,   0,  36,   1, 
 | 
			
		||||
      0,   0,  61,   1,   0,   0, 
 | 
			
		||||
     36,   1,   0,   0,   5,   0, 
 | 
			
		||||
      0,   0,   1,   0,  12,   0, 
 | 
			
		||||
      8,   0,   3,   0,  72,   1, 
 | 
			
		||||
      0,   0, 109,  97, 116,  67, 
 | 
			
		||||
    111, 108,   0, 110, 111, 114, 
 | 
			
		||||
    109,  97, 108,  77,  97, 116, 
 | 
			
		||||
      0, 171, 171, 171,   3,   0, 
 | 
			
		||||
      3,   0,   3,   0,   3,   0, 
 | 
			
		||||
      1,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0, 110, 117, 109,  68, 
 | 
			
		||||
    105, 114,  76, 105, 103, 104, 
 | 
			
		||||
    116, 115,   0, 171, 171, 171, 
 | 
			
		||||
      0,   0,   2,   0,   1,   0, 
 | 
			
		||||
      1,   0,   1,   0,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0, 115, 117, 
 | 
			
		||||
    114, 102,  80, 114, 111, 112, 
 | 
			
		||||
    115,   0, 118, 115,  95,  50, 
 | 
			
		||||
     95,  48,   0,  77, 105,  99, 
 | 
			
		||||
    114, 111, 115, 111, 102, 116, 
 | 
			
		||||
     32,  40,  82,  41,  32,  72, 
 | 
			
		||||
     76,  83,  76,  32,  83, 104, 
 | 
			
		||||
     97, 100, 101, 114,  32,  67, 
 | 
			
		||||
    111, 109, 112, 105, 108, 101, 
 | 
			
		||||
    114,  32,  57,  46,  50,  57, 
 | 
			
		||||
     46,  57,  53,  50,  46,  51, 
 | 
			
		||||
     49,  49,  49,   0, 171, 171, 
 | 
			
		||||
     81,   0,   0,   5,   4,   0, 
 | 
			
		||||
     15, 160,   0,   0,  64,  64, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
     81,   0,   0,   5,   5,   0, 
 | 
			
		||||
     15, 160,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0,   0, 128,   0,   0, 
 | 
			
		||||
    128, 191,   0,   0, 128,  63, 
 | 
			
		||||
     31,   0,   0,   2,   0,   0, 
 | 
			
		||||
      0, 128,   0,   0,  15, 144, 
 | 
			
		||||
     31,   0,   0,   2,   3,   0, 
 | 
			
		||||
      0, 128,   1,   0,  15, 144, 
 | 
			
		||||
     31,   0,   0,   2,   5,   0, 
 | 
			
		||||
      0, 128,   2,   0,  15, 144, 
 | 
			
		||||
     31,   0,   0,   2,  10,   0, 
 | 
			
		||||
      0, 128,   3,   0,  15, 144, 
 | 
			
		||||
      5,   0,   0,   3,   0,   0, 
 | 
			
		||||
     15, 128,   0,   0,  85, 144, 
 | 
			
		||||
      1,   0, 228, 160,   4,   0, 
 | 
			
		||||
      0,   4,   0,   0,  15, 128, 
 | 
			
		||||
      0,   0, 228, 160,   0,   0, 
 | 
			
		||||
      0, 144,   0,   0, 228, 128, 
 | 
			
		||||
      4,   0,   0,   4,   0,   0, 
 | 
			
		||||
     15, 128,   2,   0, 228, 160, 
 | 
			
		||||
      0,   0, 170, 144,   0,   0, 
 | 
			
		||||
    228, 128,   4,   0,   0,   4, 
 | 
			
		||||
      0,   0,  15, 192,   3,   0, 
 | 
			
		||||
    228, 160,   0,   0, 255, 144, 
 | 
			
		||||
      0,   0, 228, 128,   5,   0, 
 | 
			
		||||
      0,   3,   0,   0,   7, 128, 
 | 
			
		||||
      1,   0,  85, 144,   9,   0, 
 | 
			
		||||
    228, 160,   4,   0,   0,   4, 
 | 
			
		||||
      0,   0,   7, 128,   8,   0, 
 | 
			
		||||
    228, 160,   1,   0,   0, 144, 
 | 
			
		||||
      0,   0, 228, 128,   4,   0, 
 | 
			
		||||
      0,   4,   0,   0,   7, 128, 
 | 
			
		||||
     10,   0, 228, 160,   1,   0, 
 | 
			
		||||
    170, 144,   0,   0, 228, 128, 
 | 
			
		||||
      1,   0,   0,   2,   1,   0, 
 | 
			
		||||
      1, 128,   5,   0,   0, 160, 
 | 
			
		||||
     12,   0,   0,   3,   0,   0, 
 | 
			
		||||
      8, 128,   1,   0,   0, 128, 
 | 
			
		||||
     13,   0, 255, 160,   2,   0, 
 | 
			
		||||
      0,   3,   1,   0,  15, 128, 
 | 
			
		||||
      3,   0, 228, 144,   5,   0, 
 | 
			
		||||
    149, 160,   4,   0,   0,   4, 
 | 
			
		||||
      1,   0,  15, 128,   0,   0, 
 | 
			
		||||
    255, 128,   1,   0, 228, 128, 
 | 
			
		||||
      5,   0, 192, 160,   1,   0, 
 | 
			
		||||
      0,   2,   2,   0,   1, 128, 
 | 
			
		||||
     13,   0,   0, 160,   4,   0, 
 | 
			
		||||
      0,   4,   2,   0,   7, 128, 
 | 
			
		||||
     14,   0, 228, 160,   2,   0, 
 | 
			
		||||
      0, 128,   1,   0, 228, 128, 
 | 
			
		||||
      1,   0,   0,   2,   1,   0, 
 | 
			
		||||
      7, 128,   2,   0, 228, 128, 
 | 
			
		||||
      1,   0,   0,   2,   0,   0, 
 | 
			
		||||
      8, 128,   5,   0,   0, 160, 
 | 
			
		||||
     38,   0,   0,   1,   0,   0, 
 | 
			
		||||
    228, 240,   2,   0,   0,   3, 
 | 
			
		||||
      2,   0,   8, 128,   0,   0, 
 | 
			
		||||
    255, 128,  15,   0,   0, 160, 
 | 
			
		||||
      5,   0,   0,   3,   2,   0, 
 | 
			
		||||
      8, 128,   2,   0, 255, 128, 
 | 
			
		||||
      4,   0,   0, 160,  46,   0, 
 | 
			
		||||
      0,   2,   0,   0,   1, 176, 
 | 
			
		||||
      2,   0, 255, 128,   8,   0, 
 | 
			
		||||
      0,   4,   2,   0,   8, 128, 
 | 
			
		||||
      0,   0, 228, 128,  18,  32, 
 | 
			
		||||
    228, 161,   0,   0,   0, 176, 
 | 
			
		||||
     11,   0,   0,   3,   2,   0, 
 | 
			
		||||
      8, 128,   2,   0, 255, 128, 
 | 
			
		||||
      5,   0,   0, 160,   5,   0, 
 | 
			
		||||
      0,   4,   3,   0,   7, 128, 
 | 
			
		||||
      2,   0, 255, 128,  16,  32, 
 | 
			
		||||
    228, 160,   0,   0,   0, 176, 
 | 
			
		||||
      4,   0,   0,   4,   1,   0, 
 | 
			
		||||
      7, 128,   3,   0, 228, 128, 
 | 
			
		||||
     13,   0, 170, 160,   1,   0, 
 | 
			
		||||
    228, 128,   2,   0,   0,   3, 
 | 
			
		||||
      0,   0,   8, 128,   0,   0, 
 | 
			
		||||
    255, 128,   5,   0, 255, 160, 
 | 
			
		||||
     39,   0,   0,   0,  11,   0, 
 | 
			
		||||
      0,   3,   0,   0,  15, 128, 
 | 
			
		||||
      1,   0, 228, 128,   5,   0, 
 | 
			
		||||
      0, 160,  10,   0,   0,   3, 
 | 
			
		||||
      0,   0,  15, 128,   0,   0, 
 | 
			
		||||
    228, 128,   5,   0, 255, 160, 
 | 
			
		||||
      5,   0,   0,   3,   0,   0, 
 | 
			
		||||
     15, 208,   0,   0, 228, 128, 
 | 
			
		||||
     12,   0, 228, 160,   1,   0, 
 | 
			
		||||
      0,   2,   0,   0,   3, 224, 
 | 
			
		||||
      2,   0, 228, 144, 255, 255, 
 | 
			
		||||
      0,   0
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										37
									
								
								src/d3d/shaders/default_color_PS.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/d3d/shaders/default_color_PS.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
#if 0
 | 
			
		||||
//
 | 
			
		||||
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
 | 
			
		||||
//
 | 
			
		||||
//   fxc /T ps_2_0 /Fh default_color_PS.h default_color_PS.hlsl
 | 
			
		||||
//
 | 
			
		||||
    ps_2_0
 | 
			
		||||
    dcl v0
 | 
			
		||||
    mov oC0, v0
 | 
			
		||||
 | 
			
		||||
// approximately 1 instruction slot used
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const BYTE g_ps20_main[] =
 | 
			
		||||
{
 | 
			
		||||
      0,   2, 255, 255, 254, 255, 
 | 
			
		||||
     22,   0,  67,  84,  65,  66, 
 | 
			
		||||
     28,   0,   0,   0,  35,   0, 
 | 
			
		||||
      0,   0,   0,   2, 255, 255, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
      0,   0,   0,   1,   0,   0, 
 | 
			
		||||
     28,   0,   0,   0, 112, 115, 
 | 
			
		||||
     95,  50,  95,  48,   0,  77, 
 | 
			
		||||
    105,  99, 114, 111, 115, 111, 
 | 
			
		||||
    102, 116,  32,  40,  82,  41, 
 | 
			
		||||
     32,  72,  76,  83,  76,  32, 
 | 
			
		||||
     83, 104,  97, 100, 101, 114, 
 | 
			
		||||
     32,  67, 111, 109, 112, 105, 
 | 
			
		||||
    108, 101, 114,  32,  57,  46, 
 | 
			
		||||
     50,  57,  46,  57,  53,  50, 
 | 
			
		||||
     46,  51,  49,  49,  49,   0, 
 | 
			
		||||
     31,   0,   0,   2,   0,   0, 
 | 
			
		||||
      0, 128,   0,   0,  15, 144, 
 | 
			
		||||
      1,   0,   0,   2,   0,   8, 
 | 
			
		||||
     15, 128,   0,   0, 228, 144, 
 | 
			
		||||
    255, 255,   0,   0
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										10
									
								
								src/d3d/shaders/default_color_PS.hlsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/d3d/shaders/default_color_PS.hlsl
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
struct VS_out {
 | 
			
		||||
	float4 Position		: POSITION;
 | 
			
		||||
	float2 TexCoord0	: TEXCOORD0;
 | 
			
		||||
	float4 Color		: COLOR0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
float4 main(VS_out input) : COLOR
 | 
			
		||||
{
 | 
			
		||||
	return input.Color;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										71
									
								
								src/d3d/shaders/default_color_tex_PS.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/d3d/shaders/default_color_tex_PS.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,71 @@
 | 
			
		||||
#if 0
 | 
			
		||||
//
 | 
			
		||||
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
 | 
			
		||||
//
 | 
			
		||||
//   fxc /T ps_2_0 /Fh default_color_tex_PS.h default_color_tex_PS.hlsl
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Parameters:
 | 
			
		||||
//
 | 
			
		||||
//   sampler2D tex0;
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Registers:
 | 
			
		||||
//
 | 
			
		||||
//   Name         Reg   Size
 | 
			
		||||
//   ------------ ----- ----
 | 
			
		||||
//   tex0         s0       1
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
    ps_2_0
 | 
			
		||||
    dcl t0.xy
 | 
			
		||||
    dcl v0
 | 
			
		||||
    dcl_2d s0
 | 
			
		||||
    texld r0, t0, s0
 | 
			
		||||
    mul r0, r0, v0
 | 
			
		||||
    mov oC0, r0
 | 
			
		||||
 | 
			
		||||
// approximately 3 instruction slots used (1 texture, 2 arithmetic)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const BYTE g_ps20_main[] =
 | 
			
		||||
{
 | 
			
		||||
      0,   2, 255, 255, 254, 255, 
 | 
			
		||||
     33,   0,  67,  84,  65,  66, 
 | 
			
		||||
     28,   0,   0,   0,  79,   0, 
 | 
			
		||||
      0,   0,   0,   2, 255, 255, 
 | 
			
		||||
      1,   0,   0,   0,  28,   0, 
 | 
			
		||||
      0,   0,   0,   1,   0,   0, 
 | 
			
		||||
     72,   0,   0,   0,  48,   0, 
 | 
			
		||||
      0,   0,   3,   0,   0,   0, 
 | 
			
		||||
      1,   0,   2,   0,  56,   0, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    116, 101, 120,  48,   0, 171, 
 | 
			
		||||
    171, 171,   4,   0,  12,   0, 
 | 
			
		||||
      1,   0,   1,   0,   1,   0, 
 | 
			
		||||
      0,   0,   0,   0,   0,   0, 
 | 
			
		||||
    112, 115,  95,  50,  95,  48, 
 | 
			
		||||
      0,  77, 105,  99, 114, 111, 
 | 
			
		||||
    115, 111, 102, 116,  32,  40, 
 | 
			
		||||
     82,  41,  32,  72,  76,  83, 
 | 
			
		||||
     76,  32,  83, 104,  97, 100, 
 | 
			
		||||
    101, 114,  32,  67, 111, 109, 
 | 
			
		||||
    112, 105, 108, 101, 114,  32, 
 | 
			
		||||
     57,  46,  50,  57,  46,  57, 
 | 
			
		||||
     53,  50,  46,  51,  49,  49, 
 | 
			
		||||
     49,   0,  31,   0,   0,   2, 
 | 
			
		||||
      0,   0,   0, 128,   0,   0, 
 | 
			
		||||
      3, 176,  31,   0,   0,   2, 
 | 
			
		||||
      0,   0,   0, 128,   0,   0, 
 | 
			
		||||
     15, 144,  31,   0,   0,   2, 
 | 
			
		||||
      0,   0,   0, 144,   0,   8, 
 | 
			
		||||
     15, 160,  66,   0,   0,   3, 
 | 
			
		||||
      0,   0,  15, 128,   0,   0, 
 | 
			
		||||
    228, 176,   0,   8, 228, 160, 
 | 
			
		||||
      5,   0,   0,   3,   0,   0, 
 | 
			
		||||
     15, 128,   0,   0, 228, 128, 
 | 
			
		||||
      0,   0, 228, 144,   1,   0, 
 | 
			
		||||
      0,   2,   0,   8,  15, 128, 
 | 
			
		||||
      0,   0, 228, 128, 255, 255, 
 | 
			
		||||
      0,   0
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										13
									
								
								src/d3d/shaders/default_color_tex_PS.hlsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/d3d/shaders/default_color_tex_PS.hlsl
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
			
		||||
struct VS_out {
 | 
			
		||||
	float4 Position		: POSITION;
 | 
			
		||||
	float2 TexCoord0	: TEXCOORD0;
 | 
			
		||||
	float4 Color		: COLOR0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
sampler2D tex0 : register(s0);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
float4 main(VS_out input) : COLOR
 | 
			
		||||
{
 | 
			
		||||
	return tex2D(tex0, input.TexCoord0.xy) * input.Color;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								src/d3d/shaders/im3d_VS.hlsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/d3d/shaders/im3d_VS.hlsl
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
float4x4	combinedMat	: register(c0);
 | 
			
		||||
 | 
			
		||||
struct VS_in
 | 
			
		||||
{
 | 
			
		||||
	float4 Position		: POSITION;
 | 
			
		||||
	float2 TexCoord		: TEXCOORD0;
 | 
			
		||||
	float4 Color		: COLOR0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct VS_out {
 | 
			
		||||
	float4 Position		: POSITION;
 | 
			
		||||
	float2 TexCoord0	: TEXCOORD0;
 | 
			
		||||
	float4 Color		: COLOR0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
VS_out main(in VS_in input)
 | 
			
		||||
{
 | 
			
		||||
	VS_out output;
 | 
			
		||||
 | 
			
		||||
	output.Position = mul(combinedMat, input.Position);
 | 
			
		||||
	output.TexCoord0 = input.TexCoord;
 | 
			
		||||
	output.Color = input.Color;
 | 
			
		||||
 | 
			
		||||
	return output;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								src/d3d/shaders/lighting.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/d3d/shaders/lighting.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
struct Light
 | 
			
		||||
{
 | 
			
		||||
	float4 color;	// and radius
 | 
			
		||||
	float4 position;	// and -cos(angle)
 | 
			
		||||
	float4 direction;	// and falloff clamp
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
float3 DoDirLight(Light L, float3 N)
 | 
			
		||||
{
 | 
			
		||||
	float l = max(0.0, dot(N, -L.direction.xyz));
 | 
			
		||||
	return l*L.color.xyz;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float3 DoPointLight(Light L, float3 V, float3 N)
 | 
			
		||||
{
 | 
			
		||||
	// As on PS2
 | 
			
		||||
	float3 dir = V - L.position.xyz;
 | 
			
		||||
	float dist = length(dir);
 | 
			
		||||
	float atten = max(0.0, (1.0 - dist/L.color.w));
 | 
			
		||||
	float l = max(0.0, dot(N, -normalize(dir)));
 | 
			
		||||
	return l*L.color.xyz*atten;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float3 DoSpotLight(Light L, float3 V, float3 N)
 | 
			
		||||
{
 | 
			
		||||
	// As on PS2
 | 
			
		||||
	float3 dir = V - L.position.xyz;
 | 
			
		||||
	float dist = length(dir);
 | 
			
		||||
	float atten = max(0.0, (1.0 - dist/L.color.w));
 | 
			
		||||
	dir /= dist;
 | 
			
		||||
	float l = max(0.0, dot(N, -dir));
 | 
			
		||||
	float pcos = dot(dir, L.direction.xyz);	// cos to point
 | 
			
		||||
	float ccos = -L.position.w;	// cos of cone
 | 
			
		||||
	float falloff = (pcos-ccos)/(1.0-ccos);
 | 
			
		||||
	if(falloff < 0)	// outside of cone
 | 
			
		||||
		l = 0;
 | 
			
		||||
	l *= max(falloff, L.direction.w);	// falloff clamp
 | 
			
		||||
	return l*L.color.xyz*atten;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								src/d3d/shaders/make.cmd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/d3d/shaders/make.cmd
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
@echo off
 | 
			
		||||
"%DXSDK_DIR%\utilities\bin\x86\fxc.exe" /T vs_2_0 /Fh default_amb_VS.h defaultVS.hlsl
 | 
			
		||||
"%DXSDK_DIR%\utilities\bin\x86\fxc.exe" /T vs_2_0 /DDIRECTIONALS /Fh default_amb_dir_VS.h defaultVS.hlsl
 | 
			
		||||
"%DXSDK_DIR%\utilities\bin\x86\fxc.exe" /T vs_2_0 /DDIRECTIONALS /DPOINTLIGHTS /DSPOTLIGHTS /Fh default_all_VS.h defaultVS.hlsl
 | 
			
		||||
 | 
			
		||||
"%DXSDK_DIR%\utilities\bin\x86\fxc.exe" /T ps_2_0 /Fh default_color_PS.h default_color_PS.hlsl
 | 
			
		||||
"%DXSDK_DIR%\utilities\bin\x86\fxc.exe" /T ps_2_0 /Fh default_color_tex_PS.h default_color_tex_PS.hlsl
 | 
			
		||||
@ -163,7 +163,8 @@ MatFX::setBumpTexture(Texture *t)
 | 
			
		||||
		if(this->fx[i].bump.tex)
 | 
			
		||||
			this->fx[i].bump.tex->destroy();
 | 
			
		||||
		this->fx[i].bump.tex = t;
 | 
			
		||||
		t->refCount++;
 | 
			
		||||
		if(t)
 | 
			
		||||
			t->refCount++;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -201,7 +202,8 @@ MatFX::setEnvTexture(Texture *t)
 | 
			
		||||
		if(this->fx[i].env.tex)
 | 
			
		||||
			this->fx[i].env.tex->destroy();
 | 
			
		||||
		this->fx[i].env.tex = t;
 | 
			
		||||
		t->refCount++;
 | 
			
		||||
		if(t)
 | 
			
		||||
			t->refCount++;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -257,7 +259,8 @@ MatFX::setDualTexture(Texture *t)
 | 
			
		||||
		if(this->fx[i].dual.tex)
 | 
			
		||||
			this->fx[i].dual.tex->destroy();
 | 
			
		||||
		this->fx[i].dual.tex = t;
 | 
			
		||||
		t->refCount++;
 | 
			
		||||
		if(t)
 | 
			
		||||
			t->refCount++;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -135,6 +135,8 @@ struct VideoMode
 | 
			
		||||
	uint32 flags;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct Camera;
 | 
			
		||||
struct World;
 | 
			
		||||
 | 
			
		||||
// This is for platform independent things
 | 
			
		||||
// TODO: move more stuff into this
 | 
			
		||||
@ -146,8 +148,8 @@ struct Engine
 | 
			
		||||
		Opened,
 | 
			
		||||
		Started
 | 
			
		||||
	};
 | 
			
		||||
	void *currentCamera;
 | 
			
		||||
	void *currentWorld;
 | 
			
		||||
	Camera *currentCamera;
 | 
			
		||||
	World *currentWorld;
 | 
			
		||||
	LinkList frameDirtyList;
 | 
			
		||||
 | 
			
		||||
	// Dynamically allocated because of plugins
 | 
			
		||||
 | 
			
		||||
@ -734,6 +734,7 @@ struct Clump
 | 
			
		||||
// used by enumerateLights for lighting callback
 | 
			
		||||
struct WorldLights
 | 
			
		||||
{
 | 
			
		||||
	int32 numAmbients;
 | 
			
		||||
	RGBAf ambient;	// all ambients added
 | 
			
		||||
	int32 numDirectionals;
 | 
			
		||||
	Light **directionals;	// only directionals
 | 
			
		||||
 | 
			
		||||
@ -149,6 +149,7 @@ World::enumerateLights(Atomic *atomic, WorldLights *lightData)
 | 
			
		||||
 | 
			
		||||
	lightData->numDirectionals = 0;
 | 
			
		||||
	lightData->numLocals = 0;
 | 
			
		||||
	lightData->numAmbients = 0;
 | 
			
		||||
	lightData->ambient.red = 0.0f;
 | 
			
		||||
	lightData->ambient.green = 0.0f;
 | 
			
		||||
	lightData->ambient.blue = 0.0f;
 | 
			
		||||
@ -164,6 +165,7 @@ World::enumerateLights(Atomic *atomic, WorldLights *lightData)
 | 
			
		||||
			lightData->ambient.red   += l->color.red;
 | 
			
		||||
			lightData->ambient.green += l->color.green;
 | 
			
		||||
			lightData->ambient.blue  += l->color.blue;
 | 
			
		||||
			lightData->numAmbients++;
 | 
			
		||||
		}else if(normals && l->getType() == Light::DIRECTIONAL){
 | 
			
		||||
			if(lightData->numDirectionals < maxDirectionals)
 | 
			
		||||
				lightData->directionals[lightData->numDirectionals++] = l;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user