mirror of
https://git.rip/DMCA_FUCKER/re3.git
synced 2024-12-23 07:10:01 +00:00
mobile vehicle rendering
This commit is contained in:
parent
8888ee3974
commit
9b2037419f
|
@ -123,6 +123,7 @@ CCam::Process(void)
|
||||||
else
|
else
|
||||||
TargetOrientation = CGeneral::GetATanOfXY(CamTargetEntity->GetForward().x, CamTargetEntity->GetForward().y);
|
TargetOrientation = CGeneral::GetATanOfXY(CamTargetEntity->GetForward().x, CamTargetEntity->GetForward().y);
|
||||||
|
|
||||||
|
/* LCS: removed
|
||||||
CVector Fwd(0.0f, 0.0f, 0.0f);
|
CVector Fwd(0.0f, 0.0f, 0.0f);
|
||||||
Fwd.x = CamTargetEntity->GetForward().x;
|
Fwd.x = CamTargetEntity->GetForward().x;
|
||||||
Fwd.y = CamTargetEntity->GetForward().y;
|
Fwd.y = CamTargetEntity->GetForward().y;
|
||||||
|
@ -140,6 +141,9 @@ CCam::Process(void)
|
||||||
else
|
else
|
||||||
TargetSpeedVar = -Min(Sqrt(SQR(FwdSpeedX) + SQR(FwdSpeedY))/1.8f, 0.5f);
|
TargetSpeedVar = -Min(Sqrt(SQR(FwdSpeedX) + SQR(FwdSpeedY))/1.8f, 0.5f);
|
||||||
SpeedVar = 0.895f*SpeedVar + 0.105*TargetSpeedVar;
|
SpeedVar = 0.895f*SpeedVar + 0.105*TargetSpeedVar;
|
||||||
|
*/
|
||||||
|
SpeedVar = 0.0f;
|
||||||
|
TargetSpeedVar = 0.0f;
|
||||||
}else{
|
}else{
|
||||||
if(CamTargetEntity == FindPlayerPed()){
|
if(CamTargetEntity == FindPlayerPed()){
|
||||||
// Some fancy smoothing of player position and speed
|
// Some fancy smoothing of player position and speed
|
||||||
|
|
|
@ -665,21 +665,21 @@ extern bool gbRenderWorld2;
|
||||||
e = DebugMenuAddVar("Render", "World Rendering", &CustomPipes::WorldPipeSwitch, nil,
|
e = DebugMenuAddVar("Render", "World Rendering", &CustomPipes::WorldPipeSwitch, nil,
|
||||||
1, CustomPipes::WORLDPIPE_PS2, CustomPipes::WORLDPIPE_MOBILE, worldpipenames);
|
1, CustomPipes::WORLDPIPE_PS2, CustomPipes::WORLDPIPE_MOBILE, worldpipenames);
|
||||||
DebugMenuEntrySetWrap(e, true);
|
DebugMenuEntrySetWrap(e, true);
|
||||||
static const char *vehpipenames[] = { "MatFX", "Neo" };
|
static const char *vehpipenames[] = { "PS2", "Mobile", "Neo" };
|
||||||
e = DebugMenuAddVar("Render", "Vehicle Pipeline", &CustomPipes::VehiclePipeSwitch, nil,
|
e = DebugMenuAddVar("Render", "Vehicle Pipeline", &CustomPipes::VehiclePipeSwitch, nil,
|
||||||
1, CustomPipes::VEHICLEPIPE_MATFX, CustomPipes::VEHICLEPIPE_NEO, vehpipenames);
|
1, CustomPipes::VEHICLEPIPE_PS2, CustomPipes::VEHICLEPIPE_MOBILE, vehpipenames);
|
||||||
DebugMenuEntrySetWrap(e, true);
|
DebugMenuEntrySetWrap(e, true);
|
||||||
DebugMenuAddVarBool8("Render", "Chrome cheat", &CustomPipes::bChromeCheat, nil);
|
DebugMenuAddVarBool8("Render", "Chrome cheat", &CustomPipes::bChromeCheat, nil);
|
||||||
extern bool gbRenderDebugEnvMap;
|
extern bool gbRenderDebugEnvMap;
|
||||||
DebugMenuAddVarBool8("Render", "Show Env map", &gbRenderDebugEnvMap, nil);
|
DebugMenuAddVarBool8("Render", "Show Env map", &gbRenderDebugEnvMap, nil);
|
||||||
DebugMenuAddVar("Render", "Neo Vehicle Shininess", &CustomPipes::VehicleShininess, nil, 0.1f, 0, 1.0f);
|
// DebugMenuAddVar("Render", "Neo Vehicle Shininess", &CustomPipes::VehicleShininess, nil, 0.1f, 0, 1.0f);
|
||||||
DebugMenuAddVar("Render", "Neo Vehicle Specularity", &CustomPipes::VehicleSpecularity, nil, 0.1f, 0, 1.0f);
|
// DebugMenuAddVar("Render", "Neo Vehicle Specularity", &CustomPipes::VehicleSpecularity, nil, 0.1f, 0, 1.0f);
|
||||||
DebugMenuAddVarBool8("Render", "Neo Ped Rim light enable", &CustomPipes::RimlightEnable, nil);
|
DebugMenuAddVarBool8("Render", "Neo Ped Rim light enable", &CustomPipes::RimlightEnable, nil);
|
||||||
DebugMenuAddVar("Render", "Mult", &CustomPipes::RimlightMult, nil, 0.1f, 0, 1.0f);
|
DebugMenuAddVar("Render", "Mult", &CustomPipes::RimlightMult, nil, 0.1f, 0, 1.0f);
|
||||||
DebugMenuAddVarBool8("Render", "Neo World Lightmaps enable", &CustomPipes::LightmapEnable, nil);
|
// DebugMenuAddVarBool8("Render", "Neo World Lightmaps enable", &CustomPipes::LightmapEnable, nil);
|
||||||
DebugMenuAddVar("Render", "Mult", &CustomPipes::LightmapMult, nil, 0.1f, 0, 1.0f);
|
// DebugMenuAddVar("Render", "Mult", &CustomPipes::LightmapMult, nil, 0.1f, 0, 1.0f);
|
||||||
DebugMenuAddVarBool8("Render", "Neo Road Gloss enable", &CustomPipes::GlossEnable, nil);
|
// DebugMenuAddVarBool8("Render", "Neo Road Gloss enable", &CustomPipes::GlossEnable, nil);
|
||||||
DebugMenuAddVar("Render", "Mult", &CustomPipes::GlossMult, nil, 0.1f, 0, 1.0f);
|
// DebugMenuAddVar("Render", "Mult", &CustomPipes::GlossMult, nil, 0.1f, 0, 1.0f);
|
||||||
#endif
|
#endif
|
||||||
DebugMenuAddVarBool8("Render", "Show Ped Paths", &gbShowPedPaths, nil);
|
DebugMenuAddVarBool8("Render", "Show Ped Paths", &gbShowPedPaths, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Show Car Paths", &gbShowCarPaths, nil);
|
DebugMenuAddVarBool8("Render", "Show Car Paths", &gbShowCarPaths, nil);
|
||||||
|
|
|
@ -48,7 +48,7 @@ rw::TexDictionary *neoTxd;
|
||||||
|
|
||||||
bool bChromeCheat;
|
bool bChromeCheat;
|
||||||
bool bRenderingEnvMap;
|
bool bRenderingEnvMap;
|
||||||
int32 EnvMapSize = 256;
|
int32 EnvMapSize = 512;
|
||||||
rw::Camera *EnvMapCam;
|
rw::Camera *EnvMapCam;
|
||||||
rw::Texture *EnvMapTex;
|
rw::Texture *EnvMapTex;
|
||||||
rw::Texture *EnvMaskTex;
|
rw::Texture *EnvMaskTex;
|
||||||
|
@ -342,7 +342,7 @@ ReadTweakValueTable(char *fp, InterpolatedValue &interp)
|
||||||
* Neo Vehicle pipe
|
* Neo Vehicle pipe
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int32 VehiclePipeSwitch = VEHICLEPIPE_MATFX;
|
int32 VehiclePipeSwitch = VEHICLEPIPE_PS2;
|
||||||
float VehicleShininess = 1.0f;
|
float VehicleShininess = 1.0f;
|
||||||
float VehicleSpecularity = 1.0f;
|
float VehicleSpecularity = 1.0f;
|
||||||
InterpolatedFloat Fresnel(0.4f);
|
InterpolatedFloat Fresnel(0.4f);
|
||||||
|
|
|
@ -86,8 +86,11 @@ extern int16 QuadIndices[6];
|
||||||
void EnvMapRender(void);
|
void EnvMapRender(void);
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
VEHICLEPIPE_MATFX,
|
VEHICLEPIPE_PS2,
|
||||||
VEHICLEPIPE_NEO
|
VEHICLEPIPE_MOBILE,
|
||||||
|
|
||||||
|
// maybe later again...
|
||||||
|
VEHICLEPIPE_NEO = -1
|
||||||
};
|
};
|
||||||
extern int32 VehiclePipeSwitch;
|
extern int32 VehiclePipeSwitch;
|
||||||
extern float VehicleShininess;
|
extern float VehicleShininess;
|
||||||
|
|
|
@ -40,17 +40,19 @@ enum {
|
||||||
VSLOC_reflProps,
|
VSLOC_reflProps,
|
||||||
VSLOC_specLights,
|
VSLOC_specLights,
|
||||||
|
|
||||||
// Leeds building
|
// Leeds building, Leeds vehicle mobile
|
||||||
VSLOC_emissive = rw::d3d::VSLOC_afterLights,
|
VSLOC_emissive = rw::d3d::VSLOC_afterLights,
|
||||||
VSLOC_ambient,
|
VSLOC_ambient,
|
||||||
|
VSLOC_viewMat, // only vehicle
|
||||||
|
|
||||||
PSLOC_colorscale = 1,
|
PSLOC_colorscale = 1,
|
||||||
|
|
||||||
// Leed vehicle
|
// Leeds vehicle PS2
|
||||||
VSLOC_texMat = rw::d3d::VSLOC_afterLights,
|
VSLOC_texMat = rw::d3d::VSLOC_afterLights,
|
||||||
|
|
||||||
PSLOC_shininess = 1,
|
PSLOC_shininess = 1,
|
||||||
|
PSLOC_skyTop,
|
||||||
|
PSLOC_skyBot
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -58,8 +60,10 @@ enum {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void *leedsVehicle_VS;
|
static void *leedsVehicle_VS;
|
||||||
|
static void *leedsVehicle_mobile_VS;
|
||||||
static void *leedsVehicle_blend_PS;
|
static void *leedsVehicle_blend_PS;
|
||||||
static void *leedsVehicle_add_PS;
|
static void *leedsVehicle_add_PS;
|
||||||
|
static void *leedsVehicle_mobile_PS;
|
||||||
|
|
||||||
static rw::RawMatrix normal2texcoord_flipU = {
|
static rw::RawMatrix normal2texcoord_flipU = {
|
||||||
{ -0.5f, 0.0f, 0.0f }, 0.0f,
|
{ -0.5f, 0.0f, 0.0f }, 0.0f,
|
||||||
|
@ -149,6 +153,77 @@ leedsVehicleRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
||||||
SetRenderState(SRCBLEND, BLENDSRCALPHA);
|
SetRenderState(SRCBLEND, BLENDSRCALPHA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
leedsVehicleRenderCB_mobile(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
||||||
|
{
|
||||||
|
using namespace rw;
|
||||||
|
using namespace rw::d3d;
|
||||||
|
using namespace rw::d3d9;
|
||||||
|
|
||||||
|
int vsBits;
|
||||||
|
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
|
||||||
|
setIndices(header->indexBuffer);
|
||||||
|
setVertexDeclaration(header->vertexDeclaration);
|
||||||
|
|
||||||
|
vsBits = lightingCB_Shader(atomic);
|
||||||
|
uploadMatrices(atomic->getFrame()->getLTM());
|
||||||
|
|
||||||
|
setVertexShader(leedsVehicle_mobile_VS);
|
||||||
|
setPixelShader(leedsVehicle_mobile_PS);
|
||||||
|
|
||||||
|
RGBAf amb, emiss;
|
||||||
|
amb.red = CTimeCycle::GetAmbientRed();
|
||||||
|
amb.green = CTimeCycle::GetAmbientGreen();
|
||||||
|
amb.blue = CTimeCycle::GetAmbientBlue();
|
||||||
|
amb.alpha = 1.0f;
|
||||||
|
emiss = pAmbient->color;
|
||||||
|
|
||||||
|
d3ddevice->SetVertexShaderConstantF(VSLOC_ambient, (float*)&amb, 1);
|
||||||
|
d3ddevice->SetVertexShaderConstantF(VSLOC_emissive, (float*)&emiss, 1);
|
||||||
|
|
||||||
|
RGBAf skyTop, skyBot;
|
||||||
|
skyTop.red = CTimeCycle::GetSkyTopRed()/255.0f;
|
||||||
|
skyTop.green = CTimeCycle::GetSkyTopGreen()/255.0f;
|
||||||
|
skyTop.blue = CTimeCycle::GetSkyTopBlue()/255.0f;
|
||||||
|
skyBot.red = CTimeCycle::GetSkyBottomRed()/255.0f;
|
||||||
|
skyBot.green = CTimeCycle::GetSkyBottomGreen()/255.0f;
|
||||||
|
skyBot.blue = CTimeCycle::GetSkyBottomBlue()/255.0f;
|
||||||
|
|
||||||
|
d3ddevice->SetPixelShaderConstantF(PSLOC_skyTop, (float*)&skyTop, 1);
|
||||||
|
d3ddevice->SetPixelShaderConstantF(PSLOC_skyBot, (float*)&skyBot, 1);
|
||||||
|
|
||||||
|
d3ddevice->SetVertexShaderConstantF(VSLOC_viewMat, (float*)&rw::engine->currentCamera->devView, 4);
|
||||||
|
|
||||||
|
d3d::setTexture(1, EnvMapTex);
|
||||||
|
|
||||||
|
InstanceData *inst = header->inst;
|
||||||
|
for(rw::uint32 i = 0; i < header->numMeshes; i++){
|
||||||
|
Material *m = inst->material;
|
||||||
|
|
||||||
|
SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
|
||||||
|
|
||||||
|
float coef = 0.0f;
|
||||||
|
if(RpMatFXMaterialGetEffects(m) == rpMATFXEFFECTENVMAP){
|
||||||
|
coef = CClock::ms_EnvMapTimeMultiplicator * RpMatFXMaterialGetEnvMapCoefficient(m)*0.5f;
|
||||||
|
if(bChromeCheat)
|
||||||
|
coef = 1.0f;
|
||||||
|
}
|
||||||
|
d3ddevice->SetPixelShaderConstantF(PSLOC_shininess, (float*)&coef, 1);
|
||||||
|
|
||||||
|
setMaterial(m->color, m->surfaceProps);
|
||||||
|
|
||||||
|
if(m->texture)
|
||||||
|
d3d::setTexture(0, m->texture);
|
||||||
|
else
|
||||||
|
d3d::setTexture(0, gpWhiteTexture);
|
||||||
|
|
||||||
|
drawInst(header, inst);
|
||||||
|
inst++;
|
||||||
|
}
|
||||||
|
|
||||||
|
d3d::setTexture(1, nil);
|
||||||
|
}
|
||||||
|
|
||||||
static void *neoVehicle_VS;
|
static void *neoVehicle_VS;
|
||||||
static void *neoVehicle_PS;
|
static void *neoVehicle_PS;
|
||||||
|
|
||||||
|
@ -189,11 +264,15 @@ vehicleRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
||||||
using namespace rw::d3d9;
|
using namespace rw::d3d9;
|
||||||
|
|
||||||
// TODO: make this less of a kludge
|
// TODO: make this less of a kludge
|
||||||
if(VehiclePipeSwitch == VEHICLEPIPE_MATFX){
|
if(VehiclePipeSwitch == VEHICLEPIPE_PS2){
|
||||||
leedsVehicleRenderCB(atomic, header);
|
leedsVehicleRenderCB(atomic, header);
|
||||||
// matFXGlobals.pipelines[rw::platform]->render(atomic);
|
// matFXGlobals.pipelines[rw::platform]->render(atomic);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(VehiclePipeSwitch == VEHICLEPIPE_MOBILE){
|
||||||
|
leedsVehicleRenderCB_mobile(atomic, header);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int vsBits;
|
int vsBits;
|
||||||
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
|
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
|
||||||
|
@ -247,15 +326,15 @@ vehicleRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
||||||
void
|
void
|
||||||
CreateVehiclePipe(void)
|
CreateVehiclePipe(void)
|
||||||
{
|
{
|
||||||
if(CFileMgr::LoadFile("neo/carTweakingTable.dat", work_buff, sizeof(work_buff), "r") <= 0)
|
// if(CFileMgr::LoadFile("neo/carTweakingTable.dat", work_buff, sizeof(work_buff), "r") <= 0)
|
||||||
printf("Error: couldn't open 'neo/carTweakingTable.dat'\n");
|
// printf("Error: couldn't open 'neo/carTweakingTable.dat'\n");
|
||||||
else{
|
// else{
|
||||||
char *fp = (char*)work_buff;
|
// char *fp = (char*)work_buff;
|
||||||
fp = ReadTweakValueTable(fp, Fresnel);
|
// fp = ReadTweakValueTable(fp, Fresnel);
|
||||||
fp = ReadTweakValueTable(fp, Power);
|
// fp = ReadTweakValueTable(fp, Power);
|
||||||
fp = ReadTweakValueTable(fp, DiffColor);
|
// fp = ReadTweakValueTable(fp, DiffColor);
|
||||||
fp = ReadTweakValueTable(fp, SpecColor);
|
// fp = ReadTweakValueTable(fp, SpecColor);
|
||||||
}
|
// }
|
||||||
|
|
||||||
#include "shaders/neoVehicle_VS.inc"
|
#include "shaders/neoVehicle_VS.inc"
|
||||||
neoVehicle_VS = rw::d3d::createVertexShader(neoVehicle_VS_cso);
|
neoVehicle_VS = rw::d3d::createVertexShader(neoVehicle_VS_cso);
|
||||||
|
@ -269,6 +348,10 @@ CreateVehiclePipe(void)
|
||||||
leedsVehicle_VS = rw::d3d::createVertexShader(leedsVehicle_VS_cso);
|
leedsVehicle_VS = rw::d3d::createVertexShader(leedsVehicle_VS_cso);
|
||||||
assert(leedsVehicle_VS);
|
assert(leedsVehicle_VS);
|
||||||
|
|
||||||
|
#include "shaders/leedsVehicle_mobile_VS.inc"
|
||||||
|
leedsVehicle_mobile_VS = rw::d3d::createVertexShader(leedsVehicle_mobile_VS_cso);
|
||||||
|
assert(leedsVehicle_mobile_VS);
|
||||||
|
|
||||||
#include "shaders/leedsVehicle_blend_PS.inc"
|
#include "shaders/leedsVehicle_blend_PS.inc"
|
||||||
leedsVehicle_blend_PS = rw::d3d::createPixelShader(leedsVehicle_blend_PS_cso);
|
leedsVehicle_blend_PS = rw::d3d::createPixelShader(leedsVehicle_blend_PS_cso);
|
||||||
assert(leedsVehicle_blend_PS);
|
assert(leedsVehicle_blend_PS);
|
||||||
|
@ -277,6 +360,10 @@ CreateVehiclePipe(void)
|
||||||
leedsVehicle_add_PS = rw::d3d::createPixelShader(leedsVehicle_add_PS_cso);
|
leedsVehicle_add_PS = rw::d3d::createPixelShader(leedsVehicle_add_PS_cso);
|
||||||
assert(leedsVehicle_add_PS);
|
assert(leedsVehicle_add_PS);
|
||||||
|
|
||||||
|
#include "shaders/leedsVehicle_mobile_PS.inc"
|
||||||
|
leedsVehicle_mobile_PS = rw::d3d::createPixelShader(leedsVehicle_mobile_PS_cso);
|
||||||
|
assert(leedsVehicle_mobile_PS);
|
||||||
|
|
||||||
|
|
||||||
rw::d3d9::ObjPipeline *pipe = rw::d3d9::ObjPipeline::create();
|
rw::d3d9::ObjPipeline *pipe = rw::d3d9::ObjPipeline::create();
|
||||||
pipe->instanceCB = rw::d3d9::defaultInstanceCB;
|
pipe->instanceCB = rw::d3d9::defaultInstanceCB;
|
||||||
|
|
|
@ -42,6 +42,9 @@ static int32 u_colorscale;
|
||||||
static int32 u_texMatrix;
|
static int32 u_texMatrix;
|
||||||
static int32 u_fxparams;
|
static int32 u_fxparams;
|
||||||
|
|
||||||
|
static int32 u_skyTop;
|
||||||
|
static int32 u_skyBot;
|
||||||
|
|
||||||
#define U(i) currentShader->uniformLocations[i]
|
#define U(i) currentShader->uniformLocations[i]
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -50,6 +53,7 @@ static int32 u_fxparams;
|
||||||
|
|
||||||
rw::gl3::Shader *leedsVehicleShader_add;
|
rw::gl3::Shader *leedsVehicleShader_add;
|
||||||
rw::gl3::Shader *leedsVehicleShader_blend;
|
rw::gl3::Shader *leedsVehicleShader_blend;
|
||||||
|
rw::gl3::Shader *leedsVehicleShader_mobile;
|
||||||
|
|
||||||
rw::gl3::Shader *neoVehicleShader;
|
rw::gl3::Shader *neoVehicleShader;
|
||||||
|
|
||||||
|
@ -157,6 +161,80 @@ leedsVehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
leedsVehicleRenderCB_mobile(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
||||||
|
{
|
||||||
|
using namespace rw;
|
||||||
|
using namespace rw::gl3;
|
||||||
|
|
||||||
|
Material *m;
|
||||||
|
|
||||||
|
setWorldMatrix(atomic->getFrame()->getLTM());
|
||||||
|
lightingCB(atomic);
|
||||||
|
|
||||||
|
#ifdef RW_GL_USE_VAOS
|
||||||
|
glBindVertexArray(header->vao);
|
||||||
|
#else
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, header->vbo);
|
||||||
|
setAttribPointers(header->attribDesc, header->numAttribs);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
InstanceData *inst = header->inst;
|
||||||
|
rw::int32 n = header->numMeshes;
|
||||||
|
|
||||||
|
leedsVehicleShader_mobile->use();
|
||||||
|
|
||||||
|
RGBAf amb, emiss;
|
||||||
|
amb.red = CTimeCycle::GetAmbientRed();
|
||||||
|
amb.green = CTimeCycle::GetAmbientGreen();
|
||||||
|
amb.blue = CTimeCycle::GetAmbientBlue();
|
||||||
|
amb.alpha = 1.0f;
|
||||||
|
emiss = pAmbient->color;
|
||||||
|
|
||||||
|
glUniform4fv(U(u_amb), 1, (float*)&amb);
|
||||||
|
glUniform4fv(U(u_emiss), 1, (float*)&emiss);
|
||||||
|
|
||||||
|
RGBAf skyTop, skyBot;
|
||||||
|
skyTop.red = CTimeCycle::GetSkyTopRed()/255.0f;
|
||||||
|
skyTop.green = CTimeCycle::GetSkyTopGreen()/255.0f;
|
||||||
|
skyTop.blue = CTimeCycle::GetSkyTopBlue()/255.0f;
|
||||||
|
skyBot.red = CTimeCycle::GetSkyBottomRed()/255.0f;
|
||||||
|
skyBot.green = CTimeCycle::GetSkyBottomGreen()/255.0f;
|
||||||
|
skyBot.blue = CTimeCycle::GetSkyBottomBlue()/255.0f;
|
||||||
|
|
||||||
|
glUniform3fv(U(u_skyTop), 1, (float*)&skyTop);
|
||||||
|
glUniform3fv(U(u_skyBot), 1, (float*)&skyBot);
|
||||||
|
|
||||||
|
setTexture(1, EnvMapTex);
|
||||||
|
|
||||||
|
while(n--){
|
||||||
|
m = inst->material;
|
||||||
|
|
||||||
|
rw::SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 0xFF);
|
||||||
|
|
||||||
|
float coef = 0.0f;
|
||||||
|
if(RpMatFXMaterialGetEffects(m) == rpMATFXEFFECTENVMAP){
|
||||||
|
coef = CClock::ms_EnvMapTimeMultiplicator * RpMatFXMaterialGetEnvMapCoefficient(m)*0.5f;
|
||||||
|
if(bChromeCheat)
|
||||||
|
coef = 1.0f;
|
||||||
|
}
|
||||||
|
glUniform1f(U(u_fxparams), coef);
|
||||||
|
|
||||||
|
setMaterial(m->color, m->surfaceProps);
|
||||||
|
|
||||||
|
setTexture(0, m->texture);
|
||||||
|
|
||||||
|
drawInst(header, inst);
|
||||||
|
inst++;
|
||||||
|
}
|
||||||
|
|
||||||
|
setTexture(1, nil);
|
||||||
|
|
||||||
|
#ifndef RW_GL_USE_VAOS
|
||||||
|
disableAttribPointers(header->attribDesc, header->numAttribs);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
uploadSpecLights(void)
|
uploadSpecLights(void)
|
||||||
|
@ -197,11 +275,15 @@ vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
||||||
using namespace rw::gl3;
|
using namespace rw::gl3;
|
||||||
|
|
||||||
// TODO: make this less of a kludge
|
// TODO: make this less of a kludge
|
||||||
if(VehiclePipeSwitch == VEHICLEPIPE_MATFX){
|
if(VehiclePipeSwitch == VEHICLEPIPE_PS2){
|
||||||
leedsVehicleRenderCB(atomic, header);
|
leedsVehicleRenderCB(atomic, header);
|
||||||
// matFXGlobals.pipelines[rw::platform]->render(atomic);
|
// matFXGlobals.pipelines[rw::platform]->render(atomic);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(VehiclePipeSwitch == VEHICLEPIPE_MOBILE){
|
||||||
|
leedsVehicleRenderCB_mobile(atomic, header);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Material *m;
|
Material *m;
|
||||||
|
|
||||||
|
@ -266,15 +348,15 @@ CreateVehiclePipe(void)
|
||||||
using namespace rw;
|
using namespace rw;
|
||||||
using namespace rw::gl3;
|
using namespace rw::gl3;
|
||||||
|
|
||||||
if(CFileMgr::LoadFile("neo/carTweakingTable.dat", work_buff, sizeof(work_buff), "r") <= 0)
|
// if(CFileMgr::LoadFile("neo/carTweakingTable.dat", work_buff, sizeof(work_buff), "r") <= 0)
|
||||||
printf("Error: couldn't open 'neo/carTweakingTable.dat'\n");
|
// printf("Error: couldn't open 'neo/carTweakingTable.dat'\n");
|
||||||
else{
|
// else{
|
||||||
char *fp = (char*)work_buff;
|
// char *fp = (char*)work_buff;
|
||||||
fp = ReadTweakValueTable(fp, Fresnel);
|
// fp = ReadTweakValueTable(fp, Fresnel);
|
||||||
fp = ReadTweakValueTable(fp, Power);
|
// fp = ReadTweakValueTable(fp, Power);
|
||||||
fp = ReadTweakValueTable(fp, DiffColor);
|
// fp = ReadTweakValueTable(fp, DiffColor);
|
||||||
fp = ReadTweakValueTable(fp, SpecColor);
|
// fp = ReadTweakValueTable(fp, SpecColor);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -299,6 +381,15 @@ CreateVehiclePipe(void)
|
||||||
assert(leedsVehicleShader_blend);
|
assert(leedsVehicleShader_blend);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
#include "shaders/leedsVehicle_mobile_fs_gl.inc"
|
||||||
|
#include "shaders/leedsVehicle_mobile_vs_gl.inc"
|
||||||
|
const char *vs[] = { shaderDecl, header_vert_src, leedsVehicle_mobile_vert_src, nil };
|
||||||
|
const char *fs[] = { shaderDecl, header_frag_src, leedsVehicle_mobile_frag_src, nil };
|
||||||
|
leedsVehicleShader_mobile = Shader::create(vs, fs);
|
||||||
|
assert(leedsVehicleShader_mobile);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
rw::gl3::ObjPipeline *pipe = rw::gl3::ObjPipeline::create();
|
rw::gl3::ObjPipeline *pipe = rw::gl3::ObjPipeline::create();
|
||||||
pipe->instanceCB = rw::gl3::defaultInstanceCB;
|
pipe->instanceCB = rw::gl3::defaultInstanceCB;
|
||||||
|
@ -319,6 +410,9 @@ DestroyVehiclePipe(void)
|
||||||
leedsVehicleShader_blend->destroy();
|
leedsVehicleShader_blend->destroy();
|
||||||
leedsVehicleShader_blend = nil;
|
leedsVehicleShader_blend = nil;
|
||||||
|
|
||||||
|
leedsVehicleShader_mobile->destroy();
|
||||||
|
leedsVehicleShader_mobile = nil;
|
||||||
|
|
||||||
((rw::gl3::ObjPipeline*)vehiclePipe)->destroy();
|
((rw::gl3::ObjPipeline*)vehiclePipe)->destroy();
|
||||||
vehiclePipe = nil;
|
vehiclePipe = nil;
|
||||||
}
|
}
|
||||||
|
@ -757,6 +851,9 @@ CustomPipeRegisterGL(void)
|
||||||
|
|
||||||
u_texMatrix = rw::gl3::registerUniform("u_texMatrix");
|
u_texMatrix = rw::gl3::registerUniform("u_texMatrix");
|
||||||
u_fxparams = rw::gl3::registerUniform("u_fxparams");
|
u_fxparams = rw::gl3::registerUniform("u_fxparams");
|
||||||
|
|
||||||
|
u_skyTop = rw::gl3::registerUniform("u_skyTop");
|
||||||
|
u_skyBot = rw::gl3::registerUniform("u_skyBot");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,8 @@ all: im2d_gl.inc simple_fs_gl.inc default_UV2_gl.inc \
|
||||||
neoVehicle_vs_gl.inc neoVehicle_fs_gl.inc \
|
neoVehicle_vs_gl.inc neoVehicle_fs_gl.inc \
|
||||||
im2d_UV2_gl.inc screenDroplet_fs_gl.inc \
|
im2d_UV2_gl.inc screenDroplet_fs_gl.inc \
|
||||||
leedsBuilding_vs_gl.inc leedsBuilding_mobile_vs_gl.inc scale_fs_gl.inc \
|
leedsBuilding_vs_gl.inc leedsBuilding_mobile_vs_gl.inc scale_fs_gl.inc \
|
||||||
leedsVehicle_vs_gl.inc leedsVehicle_add_gl.inc leedsVehicle_blend_gl.inc
|
leedsVehicle_vs_gl.inc leedsVehicle_add_gl.inc leedsVehicle_blend_gl.inc \
|
||||||
|
leedsVehicle_mobile_vs_gl.inc leedsVehicle_mobile_fs_gl.inc
|
||||||
|
|
||||||
im2d_gl.inc: im2d.vert
|
im2d_gl.inc: im2d.vert
|
||||||
(echo 'const char *im2d_vert_src =';\
|
(echo 'const char *im2d_vert_src =';\
|
||||||
|
@ -108,3 +109,13 @@ leedsVehicle_blend_gl.inc: leedsVehicle_blend.frag
|
||||||
(echo 'const char *leedsVehicle_blend_frag_src =';\
|
(echo 'const char *leedsVehicle_blend_frag_src =';\
|
||||||
sed 's/..*/"&\\n"/' leedsVehicle_blend.frag;\
|
sed 's/..*/"&\\n"/' leedsVehicle_blend.frag;\
|
||||||
echo ';') >leedsVehicle_blend_gl.inc
|
echo ';') >leedsVehicle_blend_gl.inc
|
||||||
|
|
||||||
|
leedsVehicle_mobile_vs_gl.inc: leedsVehicle_mobile.vert
|
||||||
|
(echo 'const char *leedsVehicle_mobile_vert_src =';\
|
||||||
|
sed 's/..*/"&\\n"/' leedsVehicle_mobile.vert;\
|
||||||
|
echo ';') >leedsVehicle_mobile_vs_gl.inc
|
||||||
|
|
||||||
|
leedsVehicle_mobile_fs_gl.inc: leedsVehicle_mobile.frag
|
||||||
|
(echo 'const char *leedsVehicle_mobile_frag_src =';\
|
||||||
|
sed 's/..*/"&\\n"/' leedsVehicle_mobile.frag;\
|
||||||
|
echo ';') >leedsVehicle_mobile_fs_gl.inc
|
||||||
|
|
76
src/extras/shaders/leedsVehicle_mobile.frag
Normal file
76
src/extras/shaders/leedsVehicle_mobile.frag
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
uniform sampler2D tex0;
|
||||||
|
uniform sampler2D tex1;
|
||||||
|
|
||||||
|
uniform float u_fxparams;
|
||||||
|
uniform vec3 u_skyTop;
|
||||||
|
uniform vec3 u_skyBot;
|
||||||
|
|
||||||
|
#define shininess (u_fxparams)
|
||||||
|
|
||||||
|
// matfx:
|
||||||
|
// case 1 normal envmap
|
||||||
|
// custom1 (4.0, 1.0, 1.0, coef)
|
||||||
|
// custom2 (0.25, 3.0, 1.0, 1.0)
|
||||||
|
// case 2 too strong
|
||||||
|
// custom1 (4.0, 1.0, 2.0, coef)
|
||||||
|
// custom2 (0.5, 3.0, 1.0, 1.0)
|
||||||
|
// ???: practically no fresnel
|
||||||
|
// custom1 (4.0, 1.25, 0.01, coef)
|
||||||
|
// custom2 (1.0, 2.0, 1.1, 2.0)
|
||||||
|
|
||||||
|
#define power (4.0)
|
||||||
|
|
||||||
|
#define preMult (1.0)
|
||||||
|
#define postMult (1.0)
|
||||||
|
#define minRefl (0.25)
|
||||||
|
#define maxRefl (3.0)
|
||||||
|
#define minOpacity (1.0)
|
||||||
|
#define maxOpacity (1.0)
|
||||||
|
|
||||||
|
//#define preMult (1.0)
|
||||||
|
//#define postMult (2.0)
|
||||||
|
//#define minRefl (0.5)
|
||||||
|
//#define maxRefl (3.0)
|
||||||
|
//#define minOpacity (1.0)
|
||||||
|
//#define maxOpacity (1.0)
|
||||||
|
|
||||||
|
//#define preMult (1.25)
|
||||||
|
//#define postMult (0.01)
|
||||||
|
//#define minRefl (1.0)
|
||||||
|
//#define maxRefl (2.0)
|
||||||
|
//#define minOpacity (1.1)
|
||||||
|
//#define maxOpacity (2.0)
|
||||||
|
|
||||||
|
FSIN vec4 v_color;
|
||||||
|
FSIN vec2 v_tex0;
|
||||||
|
FSIN vec2 v_tex1;
|
||||||
|
FSIN float v_fog;
|
||||||
|
FSIN vec2 v_reflData;
|
||||||
|
|
||||||
|
#define v_NdotV (v_reflData.x)
|
||||||
|
#define v_lightingCont (v_reflData.y)
|
||||||
|
|
||||||
|
void
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
vec4 pass1 = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
||||||
|
|
||||||
|
vec3 envtex = texture(tex1, v_tex1).rgb; // V flipped
|
||||||
|
vec3 skyColour = mix(u_skyBot, u_skyTop, envtex.g);
|
||||||
|
vec3 envOut = mix(envtex.rrr, skyColour, envtex.b);
|
||||||
|
|
||||||
|
float fresnel = mix(shininess, shininess * 2.0, v_NdotV);
|
||||||
|
fresnel = pow(v_NdotV * preMult, power);
|
||||||
|
fresnel = clamp(fresnel * postMult, 0.0, 1.0);
|
||||||
|
float reflectivity = v_lightingCont * mix(minRefl, maxRefl, fresnel)*shininess;
|
||||||
|
|
||||||
|
float opacity = mix(minOpacity, maxOpacity, fresnel)*pass1.a;
|
||||||
|
vec4 color = pass1 + vec4(reflectivity * envOut, 0.0);
|
||||||
|
color.a = opacity;
|
||||||
|
|
||||||
|
color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
|
||||||
|
|
||||||
|
DoAlphaTest(color.a);
|
||||||
|
|
||||||
|
FRAGCOLOR(color);
|
||||||
|
}
|
42
src/extras/shaders/leedsVehicle_mobile.vert
Normal file
42
src/extras/shaders/leedsVehicle_mobile.vert
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
uniform vec4 u_amb;
|
||||||
|
uniform vec4 u_emiss;
|
||||||
|
|
||||||
|
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||||
|
|
||||||
|
VSOUT vec4 v_color;
|
||||||
|
VSOUT vec2 v_tex0;
|
||||||
|
VSOUT vec2 v_tex1;
|
||||||
|
VSOUT float v_fog;
|
||||||
|
VSOUT vec2 v_reflData;
|
||||||
|
|
||||||
|
#define v_NdotV (v_reflData.x)
|
||||||
|
#define v_lightingCont (v_reflData.y)
|
||||||
|
|
||||||
|
void
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
vec4 Vertex = u_world * vec4(in_pos, 1.0);
|
||||||
|
gl_Position = u_proj * u_view * Vertex;
|
||||||
|
vec3 Normal = mat3(u_world) * in_normal;
|
||||||
|
|
||||||
|
v_tex0 = in_tex0;
|
||||||
|
|
||||||
|
vec3 ViewNormal = mat3(u_view) * Normal;
|
||||||
|
v_tex1 = (ViewNormal.xy + vec2(1.0, 1.0))*0.5;
|
||||||
|
|
||||||
|
v_color = in_color;
|
||||||
|
vec4 combinedAmbient = mix(u_emiss, u_amb, Normal.z);
|
||||||
|
// v_color.rgb += u_ambLight.rgb*surfAmbient;
|
||||||
|
v_color.rgb += combinedAmbient.rgb*surfAmbient;
|
||||||
|
v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;
|
||||||
|
v_lightingCont = max(0.5, (v_color.r + v_color.g + v_color.b) / 3.0);
|
||||||
|
// v_color = clamp(v_color, 0.0, 1.0);
|
||||||
|
v_color *= u_matColor;
|
||||||
|
|
||||||
|
// for fresnel
|
||||||
|
vec3 camPos = -u_view[3].xyz * mat3(u_view);
|
||||||
|
vec3 viewVec = normalize(Vertex.xyz - camPos);
|
||||||
|
v_NdotV = 1.0 - dot(-Normal.xyz, viewVec.xyz);
|
||||||
|
|
||||||
|
v_fog = DoFog(gl_Position.w);
|
||||||
|
}
|
BIN
src/extras/shaders/leedsVehicle_mobile_PS.cso
Normal file
BIN
src/extras/shaders/leedsVehicle_mobile_PS.cso
Normal file
Binary file not shown.
54
src/extras/shaders/leedsVehicle_mobile_PS.hlsl
Normal file
54
src/extras/shaders/leedsVehicle_mobile_PS.hlsl
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
struct VS_out {
|
||||||
|
float4 Position : POSITION;
|
||||||
|
float3 TexCoord0 : TEXCOORD0;
|
||||||
|
float2 TexCoord1 : TEXCOORD1;
|
||||||
|
float2 ReflData : TEXCOORD2;
|
||||||
|
float4 Color : COLOR0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define NdotV (input.ReflData.x)
|
||||||
|
#define lightingCont (input.ReflData.y)
|
||||||
|
|
||||||
|
sampler2D diffTex : register(s0);
|
||||||
|
sampler2D envTex : register(s1);
|
||||||
|
|
||||||
|
float4 fogColor : register(c0);
|
||||||
|
|
||||||
|
float4 fxparams : register(c1);
|
||||||
|
float3 skyTop : register(c2);
|
||||||
|
float3 skyBot : register(c3);
|
||||||
|
|
||||||
|
#define shininess (fxparams.x)
|
||||||
|
|
||||||
|
#define power (4.0)
|
||||||
|
|
||||||
|
#define preMult (1.0)
|
||||||
|
#define postMult (1.0)
|
||||||
|
#define minRefl (0.25)
|
||||||
|
#define maxRefl (3.0)
|
||||||
|
#define minOpacity (1.0)
|
||||||
|
#define maxOpacity (1.0)
|
||||||
|
|
||||||
|
|
||||||
|
float4 main(VS_out input) : COLOR
|
||||||
|
{
|
||||||
|
float4 pass1 = input.Color*tex2D(diffTex, input.TexCoord0.xy);
|
||||||
|
|
||||||
|
float3 envtex = tex2D(envTex, float2(input.TexCoord1.x, 1.0-input.TexCoord1.y)).rgb; // V flipped
|
||||||
|
float3 skyColour = lerp(skyBot, skyTop, envtex.g);
|
||||||
|
float3 envOut = lerp(envtex.rrr, skyColour, envtex.b);
|
||||||
|
|
||||||
|
float fresnel = lerp(shininess, shininess * 2.0, NdotV);
|
||||||
|
fresnel = pow(NdotV * preMult, power);
|
||||||
|
fresnel = clamp(fresnel * postMult, 0.0, 1.0);
|
||||||
|
float reflectivity = lightingCont * lerp(minRefl, maxRefl, fresnel)*shininess;
|
||||||
|
|
||||||
|
float opacity = lerp(minOpacity, maxOpacity, fresnel)*pass1.a;
|
||||||
|
float4 color = pass1 + float4(reflectivity * envOut, 0.0);
|
||||||
|
//float4 color = float4(reflectivity, reflectivity, reflectivity, reflectivity);
|
||||||
|
color.a = opacity;
|
||||||
|
|
||||||
|
color.rgb = lerp(fogColor.rgb, color.rgb, input.TexCoord0.z);
|
||||||
|
|
||||||
|
return color;
|
||||||
|
}
|
63
src/extras/shaders/leedsVehicle_mobile_PS.inc
Normal file
63
src/extras/shaders/leedsVehicle_mobile_PS.inc
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
static unsigned char leedsVehicle_mobile_PS_cso[] = {
|
||||||
|
0x00, 0x02, 0xff, 0xff, 0xfe, 0xff, 0x51, 0x00, 0x43, 0x54, 0x41, 0x42,
|
||||||
|
0x1c, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff,
|
||||||
|
0x06, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
|
||||||
|
0x07, 0x01, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x02, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xac, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00, 0x06, 0x00,
|
||||||
|
0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0xd0, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
|
||||||
|
0x01, 0x00, 0x06, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xe9, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 0x0e, 0x00,
|
||||||
|
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x0a, 0x00, 0xf0, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x64, 0x69, 0x66, 0x66, 0x54, 0x65, 0x78, 0x00,
|
||||||
|
0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x76, 0x54, 0x65, 0x78, 0x00, 0xab,
|
||||||
|
0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
|
||||||
|
0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x78, 0x70, 0x61,
|
||||||
|
0x72, 0x61, 0x6d, 0x73, 0x00, 0x73, 0x6b, 0x79, 0x42, 0x6f, 0x74, 0x00,
|
||||||
|
0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x73, 0x6b, 0x79, 0x54, 0x6f, 0x70, 0x00, 0x70,
|
||||||
|
0x73, 0x5f, 0x32, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73,
|
||||||
|
0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c,
|
||||||
|
0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70,
|
||||||
|
0x69, 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35,
|
||||||
|
0x32, 0x2e, 0x33, 0x31, 0x31, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05,
|
||||||
|
0x04, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0xbf,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x05,
|
||||||
|
0x05, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x30, 0x40, 0x00, 0x00, 0x80, 0x3e,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02,
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x07, 0xb0, 0x1f, 0x00, 0x00, 0x02,
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0xb0, 0x1f, 0x00, 0x00, 0x02,
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x03, 0xb0, 0x1f, 0x00, 0x00, 0x02,
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
|
||||||
|
0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x1f, 0x00, 0x00, 0x02,
|
||||||
|
0x00, 0x00, 0x00, 0x90, 0x01, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03,
|
||||||
|
0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xb0, 0x00, 0x08, 0xe4, 0xa0,
|
||||||
|
0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x03, 0x00, 0xe4, 0xa0,
|
||||||
|
0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x81,
|
||||||
|
0x02, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x03, 0x80,
|
||||||
|
0x01, 0x00, 0xe4, 0xb0, 0x04, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0xd2, 0xa0,
|
||||||
|
0x42, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0x80,
|
||||||
|
0x01, 0x08, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80,
|
||||||
|
0x02, 0x00, 0x55, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0,
|
||||||
|
0x12, 0x00, 0x00, 0x04, 0x03, 0x00, 0x07, 0x80, 0x02, 0x00, 0xaa, 0x80,
|
||||||
|
0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03,
|
||||||
|
0x03, 0x00, 0x08, 0x80, 0x02, 0x00, 0x00, 0xb0, 0x02, 0x00, 0x00, 0xb0,
|
||||||
|
0x05, 0x00, 0x00, 0x03, 0x03, 0x00, 0x18, 0x80, 0x03, 0x00, 0xff, 0x80,
|
||||||
|
0x03, 0x00, 0xff, 0x80, 0x04, 0x00, 0x00, 0x04, 0x03, 0x00, 0x08, 0x80,
|
||||||
|
0x03, 0x00, 0xff, 0x80, 0x05, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x55, 0xa0,
|
||||||
|
0x05, 0x00, 0x00, 0x03, 0x03, 0x00, 0x08, 0x80, 0x03, 0x00, 0xff, 0x80,
|
||||||
|
0x02, 0x00, 0x55, 0xb0, 0x05, 0x00, 0x00, 0x03, 0x03, 0x00, 0x08, 0x80,
|
||||||
|
0x03, 0x00, 0xff, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x03,
|
||||||
|
0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90,
|
||||||
|
0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x03, 0x00, 0xff, 0x80,
|
||||||
|
0x03, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x12, 0x00, 0x00, 0x04,
|
||||||
|
0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xaa, 0xb0, 0x01, 0x00, 0xe4, 0x80,
|
||||||
|
0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80,
|
||||||
|
0x00, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00
|
||||||
|
};
|
BIN
src/extras/shaders/leedsVehicle_mobile_VS.cso
Normal file
BIN
src/extras/shaders/leedsVehicle_mobile_VS.cso
Normal file
Binary file not shown.
60
src/extras/shaders/leedsVehicle_mobile_VS.hlsl
Normal file
60
src/extras/shaders/leedsVehicle_mobile_VS.hlsl
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
#include "standardConstants.h"
|
||||||
|
|
||||||
|
float4 emissive : register(c41);
|
||||||
|
float4 ambient : register(c42);
|
||||||
|
float4x4 viewMat : register(c43);
|
||||||
|
|
||||||
|
struct VS_in
|
||||||
|
{
|
||||||
|
float4 Position : POSITION;
|
||||||
|
float3 Normal : NORMAL;
|
||||||
|
float2 TexCoord : TEXCOORD0;
|
||||||
|
float4 Prelight : COLOR0;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VS_out {
|
||||||
|
float4 Position : POSITION;
|
||||||
|
float3 TexCoord0 : TEXCOORD0; // also fog
|
||||||
|
float2 TexCoord1 : TEXCOORD1;
|
||||||
|
float2 ReflData : TEXCOORD2;
|
||||||
|
float4 Color : COLOR0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define NdotV (output.ReflData.x)
|
||||||
|
#define lightingCont (output.ReflData.y)
|
||||||
|
|
||||||
|
VS_out main(in VS_in input)
|
||||||
|
{
|
||||||
|
VS_out output;
|
||||||
|
|
||||||
|
output.Position = mul(combinedMat, input.Position);
|
||||||
|
float3 V = mul(worldMat, input.Position).xyz;
|
||||||
|
float3 N = mul(normalMat, input.Normal);
|
||||||
|
|
||||||
|
output.TexCoord0.xy = input.TexCoord;
|
||||||
|
|
||||||
|
float4 ViewNormal = mul(viewMat, float4(N, 0.0));
|
||||||
|
output.TexCoord1 = (ViewNormal.xy + float2(1.0, 1.0))*0.5;
|
||||||
|
|
||||||
|
output.Color = input.Prelight;
|
||||||
|
float4 combinedAmbient = lerp(emissive, ambient, N.z);
|
||||||
|
// output.Color.rgb += ambientLight.rgb * surfAmbient;
|
||||||
|
output.Color.rgb += combinedAmbient.rgb * surfAmbient;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < numDirLights; i++)
|
||||||
|
output.Color.xyz += DoDirLight(lights[i+firstDirLight], N)*surfDiffuse;
|
||||||
|
lightingCont = max(0.5, (output.Color.r + output.Color.g + output.Color.b) / 3.0);
|
||||||
|
// PS2 clamps before material color
|
||||||
|
// output.Color = clamp(output.Color, 0.0, 1.0);
|
||||||
|
output.Color *= matCol;
|
||||||
|
|
||||||
|
// for fresnel
|
||||||
|
float3 camPos = mul(-viewMat._m03_m13_m23, (float3x3)(viewMat));
|
||||||
|
float3 viewVec = normalize(V.xyz - camPos);
|
||||||
|
NdotV = 1.0 - dot(-N.xyz, viewVec.xyz);
|
||||||
|
|
||||||
|
output.TexCoord0.z = clamp((output.Position.w - fogEnd)*fogRange, fogDisable, 1.0);
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
132
src/extras/shaders/leedsVehicle_mobile_VS.inc
Normal file
132
src/extras/shaders/leedsVehicle_mobile_VS.inc
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
static unsigned char leedsVehicle_mobile_VS_cso[] = {
|
||||||
|
0x00, 0x02, 0xfe, 0xff, 0xfe, 0xff, 0x99, 0x00, 0x43, 0x54, 0x41, 0x42,
|
||||||
|
0x1c, 0x00, 0x00, 0x00, 0x2e, 0x02, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff,
|
||||||
|
0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
|
||||||
|
0x27, 0x02, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x02, 0x00, 0x2a, 0x00,
|
||||||
|
0x01, 0x00, 0xaa, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x24, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00,
|
||||||
|
0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x29, 0x00, 0x01, 0x00, 0xa6, 0x00, 0x14, 0x01, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00,
|
||||||
|
0x01, 0x00, 0x42, 0x00, 0x54, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x64, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x3a, 0x00,
|
||||||
|
0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x11, 0x00, 0x18, 0x00, 0x46, 0x00, 0xb8, 0x01, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0c, 0x00,
|
||||||
|
0x01, 0x00, 0x32, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xcf, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x03, 0x00, 0x22, 0x00,
|
||||||
|
0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x01, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0xfc, 0x01, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x02, 0x00, 0x0d, 0x00,
|
||||||
|
0x01, 0x00, 0x36, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x16, 0x02, 0x00, 0x00, 0x02, 0x00, 0x2b, 0x00, 0x04, 0x00, 0xae, 0x00,
|
||||||
|
0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x12, 0x00, 0x30, 0x01, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x74, 0x00,
|
||||||
|
0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64,
|
||||||
|
0x4d, 0x61, 0x74, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x6d, 0x69, 0x73,
|
||||||
|
0x73, 0x69, 0x76, 0x65, 0x00, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4c, 0x69,
|
||||||
|
0x67, 0x68, 0x74, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x04, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x67, 0x44,
|
||||||
|
0x61, 0x74, 0x61, 0x00, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x00, 0x63,
|
||||||
|
0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00,
|
||||||
|
0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x64, 0x69, 0x72,
|
||||||
|
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0xab, 0x73, 0x01, 0x00, 0x00,
|
||||||
|
0x7c, 0x01, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00,
|
||||||
|
0x95, 0x01, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x03, 0x00, 0xa0, 0x01, 0x00, 0x00,
|
||||||
|
0x6d, 0x61, 0x74, 0x43, 0x6f, 0x6c, 0x00, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
|
||||||
|
0x6c, 0x4d, 0x61, 0x74, 0x00, 0xab, 0xab, 0xab, 0x03, 0x00, 0x03, 0x00,
|
||||||
|
0x03, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x6e, 0x75, 0x6d, 0x44, 0x69, 0x72, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73,
|
||||||
|
0x00, 0xab, 0xab, 0xab, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x75, 0x72, 0x66,
|
||||||
|
0x50, 0x72, 0x6f, 0x70, 0x73, 0x00, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x61,
|
||||||
|
0x74, 0x00, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x00, 0x76,
|
||||||
|
0x73, 0x5f, 0x32, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73,
|
||||||
|
0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c,
|
||||||
|
0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70,
|
||||||
|
0x69, 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35,
|
||||||
|
0x32, 0x2e, 0x33, 0x31, 0x31, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05,
|
||||||
|
0x0b, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x3f,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x51, 0x00, 0x00, 0x05,
|
||||||
|
0x0f, 0x00, 0x0f, 0xa0, 0xab, 0xaa, 0xaa, 0x3e, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02,
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
|
||||||
|
0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
|
||||||
|
0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
|
||||||
|
0x0a, 0x00, 0x00, 0x80, 0x03, 0x00, 0x0f, 0x90, 0x05, 0x00, 0x00, 0x03,
|
||||||
|
0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x90, 0x01, 0x00, 0xe4, 0xa0,
|
||||||
|
0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0,
|
||||||
|
0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04,
|
||||||
|
0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x90,
|
||||||
|
0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80,
|
||||||
|
0x03, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0x90, 0x00, 0x00, 0xe4, 0x80,
|
||||||
|
0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0xe4, 0x80,
|
||||||
|
0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x55, 0x90,
|
||||||
|
0x05, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80,
|
||||||
|
0x04, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80,
|
||||||
|
0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x06, 0x00, 0xe4, 0xa0,
|
||||||
|
0x00, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04,
|
||||||
|
0x00, 0x00, 0x07, 0x80, 0x07, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0x90,
|
||||||
|
0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80,
|
||||||
|
0x2e, 0x00, 0xe4, 0xa0, 0x08, 0x00, 0x00, 0x03, 0x02, 0x00, 0x01, 0x80,
|
||||||
|
0x01, 0x00, 0xe4, 0x81, 0x2b, 0x00, 0xe4, 0xa0, 0x08, 0x00, 0x00, 0x03,
|
||||||
|
0x02, 0x00, 0x02, 0x80, 0x01, 0x00, 0xe4, 0x81, 0x2c, 0x00, 0xe4, 0xa0,
|
||||||
|
0x08, 0x00, 0x00, 0x03, 0x02, 0x00, 0x04, 0x80, 0x01, 0x00, 0xe4, 0x81,
|
||||||
|
0x2d, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80,
|
||||||
|
0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0x81, 0x24, 0x00, 0x00, 0x02,
|
||||||
|
0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03,
|
||||||
|
0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0x55, 0x90, 0x09, 0x00, 0xe4, 0xa0,
|
||||||
|
0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x08, 0x00, 0xe4, 0xa0,
|
||||||
|
0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04,
|
||||||
|
0x00, 0x00, 0x07, 0x80, 0x0a, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90,
|
||||||
|
0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80,
|
||||||
|
0x00, 0x00, 0xe4, 0x81, 0x01, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03,
|
||||||
|
0x01, 0x00, 0x06, 0x80, 0x00, 0x00, 0x55, 0x80, 0x2c, 0x00, 0xd0, 0xa0,
|
||||||
|
0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x06, 0x80, 0x2b, 0x00, 0xd0, 0xa0,
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04,
|
||||||
|
0x01, 0x00, 0x06, 0x80, 0x2d, 0x00, 0xd0, 0xa0, 0x00, 0x00, 0xaa, 0x80,
|
||||||
|
0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x06, 0x80,
|
||||||
|
0x01, 0x00, 0xe4, 0x80, 0x0b, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x03,
|
||||||
|
0x01, 0x00, 0x03, 0xe0, 0x01, 0x00, 0xe9, 0x80, 0x0b, 0x00, 0x55, 0xa0,
|
||||||
|
0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x07, 0x80, 0x29, 0x00, 0xe4, 0xa0,
|
||||||
|
0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0e, 0x80, 0x02, 0x00, 0x90, 0x81,
|
||||||
|
0x2a, 0x00, 0x90, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0e, 0x80,
|
||||||
|
0x00, 0x00, 0xaa, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x29, 0x00, 0x90, 0xa0,
|
||||||
|
0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0e, 0x80, 0x01, 0x00, 0xe4, 0x80,
|
||||||
|
0x0d, 0x00, 0x00, 0xa0, 0x03, 0x00, 0x90, 0x90, 0x01, 0x00, 0x00, 0x02,
|
||||||
|
0x02, 0x00, 0x07, 0x80, 0x01, 0x00, 0xf9, 0x80, 0x01, 0x00, 0x00, 0x02,
|
||||||
|
0x03, 0x00, 0x01, 0x80, 0x0b, 0x00, 0xaa, 0xa0, 0x26, 0x00, 0x00, 0x01,
|
||||||
|
0x00, 0x00, 0xe4, 0xf0, 0x02, 0x00, 0x00, 0x03, 0x03, 0x00, 0x02, 0x80,
|
||||||
|
0x03, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x03,
|
||||||
|
0x03, 0x00, 0x02, 0x80, 0x03, 0x00, 0x55, 0x80, 0x0b, 0x00, 0xff, 0xa0,
|
||||||
|
0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0xb0, 0x03, 0x00, 0x55, 0x80,
|
||||||
|
0x08, 0x00, 0x00, 0x04, 0x03, 0x00, 0x02, 0x80, 0x00, 0x00, 0xe4, 0x80,
|
||||||
|
0x13, 0x20, 0xe4, 0xa1, 0x00, 0x00, 0x00, 0xb0, 0x0b, 0x00, 0x00, 0x03,
|
||||||
|
0x03, 0x00, 0x02, 0x80, 0x03, 0x00, 0x55, 0x80, 0x0b, 0x00, 0xaa, 0xa0,
|
||||||
|
0x05, 0x00, 0x00, 0x04, 0x03, 0x00, 0x0e, 0x80, 0x03, 0x00, 0x55, 0x80,
|
||||||
|
0x11, 0x20, 0x90, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x04,
|
||||||
|
0x02, 0x00, 0x07, 0x80, 0x03, 0x00, 0xf9, 0x80, 0x0d, 0x00, 0xaa, 0xa0,
|
||||||
|
0x02, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x03, 0x00, 0x01, 0x80,
|
||||||
|
0x03, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x00, 0xa0, 0x27, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x08, 0x80, 0x03, 0x00, 0xff, 0x90,
|
||||||
|
0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xd0, 0x02, 0x00, 0xe4, 0x80,
|
||||||
|
0x0c, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x01, 0xe0,
|
||||||
|
0x01, 0x00, 0x00, 0x81, 0x0b, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x00, 0x03,
|
||||||
|
0x00, 0x00, 0x01, 0x80, 0x02, 0x00, 0x55, 0x80, 0x02, 0x00, 0x00, 0x80,
|
||||||
|
0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x02, 0x00, 0xaa, 0x80,
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80,
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xa0, 0x0b, 0x00, 0x00, 0x03,
|
||||||
|
0x02, 0x00, 0x02, 0xe0, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x55, 0xa0,
|
||||||
|
0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0x80,
|
||||||
|
0x0e, 0x00, 0x55, 0xa1, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80,
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xaa, 0xa0, 0x0b, 0x00, 0x00, 0x03,
|
||||||
|
0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xff, 0xa0,
|
||||||
|
0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x80,
|
||||||
|
0x0b, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0xe0,
|
||||||
|
0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00
|
||||||
|
};
|
78
src/extras/shaders/leedsVehicle_mobile_fs_gl.inc
Normal file
78
src/extras/shaders/leedsVehicle_mobile_fs_gl.inc
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
const char *leedsVehicle_mobile_frag_src =
|
||||||
|
"uniform sampler2D tex0;\n"
|
||||||
|
"uniform sampler2D tex1;\n"
|
||||||
|
|
||||||
|
"uniform float u_fxparams;\n"
|
||||||
|
"uniform vec3 u_skyTop;\n"
|
||||||
|
"uniform vec3 u_skyBot;\n"
|
||||||
|
|
||||||
|
"#define shininess (u_fxparams)\n"
|
||||||
|
|
||||||
|
"// matfx:\n"
|
||||||
|
"// case 1 normal envmap\n"
|
||||||
|
"// custom1 (4.0, 1.0, 1.0, coef)\n"
|
||||||
|
"// custom2 (0.25, 3.0, 1.0, 1.0)\n"
|
||||||
|
"// case 2 too strong\n"
|
||||||
|
"// custom1 (4.0, 1.0, 2.0, coef)\n"
|
||||||
|
"// custom2 (0.5, 3.0, 1.0, 1.0)\n"
|
||||||
|
"// ???: practically no fresnel\n"
|
||||||
|
"// custom1 (4.0, 1.25, 0.01, coef)\n"
|
||||||
|
"// custom2 (1.0, 2.0, 1.1, 2.0)\n"
|
||||||
|
|
||||||
|
"#define power (4.0)\n"
|
||||||
|
|
||||||
|
"#define preMult (1.0)\n"
|
||||||
|
"#define postMult (1.0)\n"
|
||||||
|
"#define minRefl (0.25)\n"
|
||||||
|
"#define maxRefl (3.0)\n"
|
||||||
|
"#define minOpacity (1.0)\n"
|
||||||
|
"#define maxOpacity (1.0)\n"
|
||||||
|
|
||||||
|
"//#define preMult (1.0)\n"
|
||||||
|
"//#define postMult (2.0)\n"
|
||||||
|
"//#define minRefl (0.5)\n"
|
||||||
|
"//#define maxRefl (3.0)\n"
|
||||||
|
"//#define minOpacity (1.0)\n"
|
||||||
|
"//#define maxOpacity (1.0)\n"
|
||||||
|
|
||||||
|
"//#define preMult (1.25)\n"
|
||||||
|
"//#define postMult (0.01)\n"
|
||||||
|
"//#define minRefl (1.0)\n"
|
||||||
|
"//#define maxRefl (2.0)\n"
|
||||||
|
"//#define minOpacity (1.1)\n"
|
||||||
|
"//#define maxOpacity (2.0)\n"
|
||||||
|
|
||||||
|
"FSIN vec4 v_color;\n"
|
||||||
|
"FSIN vec2 v_tex0;\n"
|
||||||
|
"FSIN vec2 v_tex1;\n"
|
||||||
|
"FSIN float v_fog;\n"
|
||||||
|
"FSIN vec2 v_reflData;\n"
|
||||||
|
|
||||||
|
"#define v_NdotV (v_reflData.x)\n"
|
||||||
|
"#define v_lightingCont (v_reflData.y)\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 pass1 = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
||||||
|
|
||||||
|
" vec3 envtex = texture(tex1, v_tex1).rgb; // V flipped\n"
|
||||||
|
" vec3 skyColour = mix(u_skyBot, u_skyTop, envtex.g);\n"
|
||||||
|
" vec3 envOut = mix(envtex.rrr, skyColour, envtex.b);\n"
|
||||||
|
|
||||||
|
" float fresnel = mix(shininess, shininess * 2.0, v_NdotV);\n"
|
||||||
|
" fresnel = pow(v_NdotV * preMult, power);\n"
|
||||||
|
" fresnel = clamp(fresnel * postMult, 0.0, 1.0);\n"
|
||||||
|
" float reflectivity = v_lightingCont * mix(minRefl, maxRefl, fresnel)*shininess;\n"
|
||||||
|
|
||||||
|
" float opacity = mix(minOpacity, maxOpacity, fresnel)*pass1.a;\n"
|
||||||
|
" vec4 color = pass1 + vec4(reflectivity * envOut, 0.0);\n"
|
||||||
|
" color.a = opacity;\n"
|
||||||
|
|
||||||
|
" color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);\n"
|
||||||
|
|
||||||
|
" DoAlphaTest(color.a);\n"
|
||||||
|
|
||||||
|
" FRAGCOLOR(color);\n"
|
||||||
|
"}\n"
|
||||||
|
;
|
44
src/extras/shaders/leedsVehicle_mobile_vs_gl.inc
Normal file
44
src/extras/shaders/leedsVehicle_mobile_vs_gl.inc
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
const char *leedsVehicle_mobile_vert_src =
|
||||||
|
"uniform vec4 u_amb;\n"
|
||||||
|
"uniform vec4 u_emiss;\n"
|
||||||
|
|
||||||
|
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||||
|
|
||||||
|
"VSOUT vec4 v_color;\n"
|
||||||
|
"VSOUT vec2 v_tex0;\n"
|
||||||
|
"VSOUT vec2 v_tex1;\n"
|
||||||
|
"VSOUT float v_fog;\n"
|
||||||
|
"VSOUT vec2 v_reflData;\n"
|
||||||
|
|
||||||
|
"#define v_NdotV (v_reflData.x)\n"
|
||||||
|
"#define v_lightingCont (v_reflData.y)\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 Vertex = u_world * vec4(in_pos, 1.0);\n"
|
||||||
|
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||||
|
" vec3 Normal = mat3(u_world) * in_normal;\n"
|
||||||
|
|
||||||
|
" v_tex0 = in_tex0;\n"
|
||||||
|
|
||||||
|
" vec3 ViewNormal = mat3(u_view) * Normal;\n"
|
||||||
|
" v_tex1 = (ViewNormal.xy + vec2(1.0, 1.0))*0.5;\n"
|
||||||
|
|
||||||
|
" v_color = in_color;\n"
|
||||||
|
" vec4 combinedAmbient = mix(u_emiss, u_amb, Normal.z);\n"
|
||||||
|
"// v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
|
||||||
|
" v_color.rgb += combinedAmbient.rgb*surfAmbient;\n"
|
||||||
|
" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;\n"
|
||||||
|
" v_lightingCont = max(0.5, (v_color.r + v_color.g + v_color.b) / 3.0);\n"
|
||||||
|
"// v_color = clamp(v_color, 0.0, 1.0);\n"
|
||||||
|
" v_color *= u_matColor;\n"
|
||||||
|
|
||||||
|
" // for fresnel\n"
|
||||||
|
" vec3 camPos = -u_view[3].xyz * mat3(u_view);\n"
|
||||||
|
" vec3 viewVec = normalize(Vertex.xyz - camPos);\n"
|
||||||
|
" v_NdotV = 1.0 - dot(-Normal.xyz, viewVec.xyz);\n"
|
||||||
|
|
||||||
|
" v_fog = DoFog(gl_Position.w);\n"
|
||||||
|
"}\n"
|
||||||
|
;
|
|
@ -1816,7 +1816,8 @@ CRenderer::GenerateEnvironmentMap(void)
|
||||||
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
||||||
|
|
||||||
// Draw coronas
|
// Draw coronas
|
||||||
DrawEnvMapCoronas(TheCamera.GetForward().Heading());
|
if(CustomPipes::VehiclePipeSwitch != CustomPipes::VEHICLEPIPE_MOBILE)
|
||||||
|
DrawEnvMapCoronas(TheCamera.GetForward().Heading());
|
||||||
|
|
||||||
RwCameraEndUpdate(CustomPipes::EnvMapCam);
|
RwCameraEndUpdate(CustomPipes::EnvMapCam);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue