|
@@ -33,6 +33,7 @@
|
|
|
#include "gfx/D3D9/gfxD3D9OcclusionQuery.h"
|
|
|
#include "gfx/D3D9/gfxD3D9Shader.h"
|
|
|
#include "windowManager/platformWindow.h"
|
|
|
+#include "materials/shaderData.h"
|
|
|
#ifndef TORQUE_OS_XENON
|
|
|
# include "windowManager/win32/win32Window.h"
|
|
|
#endif
|
|
@@ -83,6 +84,9 @@ GFXD3D9Device::GFXD3D9Device( LPDIRECT3D9 d3d, U32 index )
|
|
|
|
|
|
mOcclusionQuerySupported = false;
|
|
|
|
|
|
+ for (U32 i = 0; i < GS_COUNT; ++i)
|
|
|
+ mModelViewProjSC[i] = NULL;
|
|
|
+
|
|
|
// Set up the Enum translation tables
|
|
|
GFXD3D9EnumTranslate::init();
|
|
|
|
|
@@ -139,40 +143,65 @@ GFXD3D9Device::~GFXD3D9Device()
|
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
-// setupGenericShaders - This function is totally not needed on PC because there
|
|
|
-// is fixed-function support in D3D9
|
|
|
+// setupGenericShaders
|
|
|
//------------------------------------------------------------------------------
|
|
|
inline void GFXD3D9Device::setupGenericShaders( GenericShaderType type /* = GSColor */ )
|
|
|
{
|
|
|
-#ifdef WANT_TO_SIMULATE_UI_ON_360
|
|
|
- if( mGenericShader[GSColor] == NULL )
|
|
|
- {
|
|
|
- mGenericShader[GSColor] = createShader( "shaders/common/genericColorV.hlsl",
|
|
|
- "shaders/common/genericColorP.hlsl",
|
|
|
- 2.f );
|
|
|
+ AssertFatal(type != GSTargetRestore, ""); //not used
|
|
|
|
|
|
- mGenericShader[GSModColorTexture] = createShader( "shaders/common/genericModColorTextureV.hlsl",
|
|
|
- "shaders/common/genericModColorTextureP.hlsl",
|
|
|
- 2.f );
|
|
|
-
|
|
|
- mGenericShader[GSAddColorTexture] = createShader( "shaders/common/genericAddColorTextureV.hlsl",
|
|
|
- "shaders/common/genericAddColorTextureP.hlsl",
|
|
|
- 2.f );
|
|
|
+ if (mGenericShader[GSColor] == NULL)
|
|
|
+ {
|
|
|
+ ShaderData *shaderData;
|
|
|
+
|
|
|
+ shaderData = new ShaderData();
|
|
|
+ shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/colorV.hlsl");
|
|
|
+ shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/colorP.hlsl");
|
|
|
+ shaderData->setField("pixVersion", "3.0");
|
|
|
+ shaderData->registerObject();
|
|
|
+ mGenericShader[GSColor] = shaderData->getShader();
|
|
|
+ mGenericShaderBuffer[GSColor] = mGenericShader[GSColor]->allocConstBuffer();
|
|
|
+ mModelViewProjSC[GSColor] = mGenericShader[GSColor]->getShaderConstHandle("$modelView");
|
|
|
+ Sim::getRootGroup()->addObject(shaderData);
|
|
|
+
|
|
|
+ shaderData = new ShaderData();
|
|
|
+ shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/modColorTextureV.hlsl");
|
|
|
+ shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/modColorTextureP.hlsl");
|
|
|
+ shaderData->setField("pixVersion", "3.0");
|
|
|
+ shaderData->registerObject();
|
|
|
+ mGenericShader[GSModColorTexture] = shaderData->getShader();
|
|
|
+ mGenericShaderBuffer[GSModColorTexture] = mGenericShader[GSModColorTexture]->allocConstBuffer();
|
|
|
+ mModelViewProjSC[GSModColorTexture] = mGenericShader[GSModColorTexture]->getShaderConstHandle("$modelView");
|
|
|
+ Sim::getRootGroup()->addObject(shaderData);
|
|
|
+
|
|
|
+ shaderData = new ShaderData();
|
|
|
+ shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/addColorTextureV.hlsl");
|
|
|
+ shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/addColorTextureP.hlsl");
|
|
|
+ shaderData->setField("pixVersion", "3.0");
|
|
|
+ shaderData->registerObject();
|
|
|
+ mGenericShader[GSAddColorTexture] = shaderData->getShader();
|
|
|
+ mGenericShaderBuffer[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->allocConstBuffer();
|
|
|
+ mModelViewProjSC[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->getShaderConstHandle("$modelView");
|
|
|
+ Sim::getRootGroup()->addObject(shaderData);
|
|
|
+
|
|
|
+ shaderData = new ShaderData();
|
|
|
+ shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/textureV.hlsl");
|
|
|
+ shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/textureP.hlsl");
|
|
|
+ shaderData->setField("pixVersion", "3.0");
|
|
|
+ shaderData->registerObject();
|
|
|
+ mGenericShader[GSTexture] = shaderData->getShader();
|
|
|
+ mGenericShaderBuffer[GSTexture] = mGenericShader[GSTexture]->allocConstBuffer();
|
|
|
+ mModelViewProjSC[GSTexture] = mGenericShader[GSTexture]->getShaderConstHandle("$modelView");
|
|
|
+ Sim::getRootGroup()->addObject(shaderData);
|
|
|
+
|
|
|
+ //Force an update
|
|
|
+ mViewportDirty = true;
|
|
|
}
|
|
|
|
|
|
- mGenericShader[type]->process();
|
|
|
+ MatrixF tempMatrix = mProjectionMatrix * mViewMatrix * mWorldMatrix[mWorldStackSize];
|
|
|
+ mGenericShaderBuffer[type]->setSafe(mModelViewProjSC[type], tempMatrix);
|
|
|
|
|
|
- MatrixF world, view, proj;
|
|
|
- mWorldMatrix[mWorldStackSize].transposeTo( world );
|
|
|
- mViewMatrix.transposeTo( view );
|
|
|
- mProjectionMatrix.transposeTo( proj );
|
|
|
-
|
|
|
- mTempMatrix = world * view * proj;
|
|
|
-
|
|
|
- setVertexShaderConstF( VC_WORLD_PROJ, (F32 *)&mTempMatrix, 4 );
|
|
|
-#else
|
|
|
- disableShaders();
|
|
|
-#endif
|
|
|
+ setShader(mGenericShader[type]);
|
|
|
+ setShaderConstBuffer(mGenericShaderBuffer[type]);
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|