mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
GFXD3D9Device generic shader support.
This commit is contained in:
parent
48aed0e0ca
commit
7d82877f4e
|
|
@ -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 )
|
||||
AssertFatal(type != GSTargetRestore, ""); //not used
|
||||
|
||||
if (mGenericShader[GSColor] == NULL)
|
||||
{
|
||||
mGenericShader[GSColor] = createShader( "shaders/common/genericColorV.hlsl",
|
||||
"shaders/common/genericColorP.hlsl",
|
||||
2.f );
|
||||
ShaderData *shaderData;
|
||||
|
||||
mGenericShader[GSModColorTexture] = createShader( "shaders/common/genericModColorTextureV.hlsl",
|
||||
"shaders/common/genericModColorTextureP.hlsl",
|
||||
2.f );
|
||||
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);
|
||||
|
||||
mGenericShader[GSAddColorTexture] = createShader( "shaders/common/genericAddColorTextureV.hlsl",
|
||||
"shaders/common/genericAddColorTextureP.hlsl",
|
||||
2.f );
|
||||
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]);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -150,6 +150,10 @@ protected:
|
|||
IDirect3DVertexShader9 *mLastVertShader;
|
||||
IDirect3DPixelShader9 *mLastPixShader;
|
||||
|
||||
GFXShaderRef mGenericShader[GS_COUNT];
|
||||
GFXShaderConstBufferRef mGenericShaderBuffer[GS_COUNT];
|
||||
GFXShaderConstHandle *mModelViewProjSC[GS_COUNT];
|
||||
|
||||
S32 mCreateFenceType;
|
||||
|
||||
LPDIRECT3D9 mD3D; ///< D3D Handle
|
||||
|
|
@ -326,8 +330,6 @@ public:
|
|||
/// Reset
|
||||
virtual void reset( D3DPRESENT_PARAMETERS &d3dpp ) = 0;
|
||||
|
||||
GFXShaderRef mGenericShader[GS_COUNT];
|
||||
|
||||
virtual void setupGenericShaders( GenericShaderType type = GSColor );
|
||||
|
||||
// Function only really used on the, however a centralized function for
|
||||
|
|
|
|||
Loading…
Reference in a new issue