mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-13 15:44:36 +00:00
GFXD3D9Device generic shader support.
This commit is contained in:
parent
48aed0e0ca
commit
7d82877f4e
2 changed files with 58 additions and 27 deletions
|
|
@ -33,6 +33,7 @@
|
||||||
#include "gfx/D3D9/gfxD3D9OcclusionQuery.h"
|
#include "gfx/D3D9/gfxD3D9OcclusionQuery.h"
|
||||||
#include "gfx/D3D9/gfxD3D9Shader.h"
|
#include "gfx/D3D9/gfxD3D9Shader.h"
|
||||||
#include "windowManager/platformWindow.h"
|
#include "windowManager/platformWindow.h"
|
||||||
|
#include "materials/shaderData.h"
|
||||||
#ifndef TORQUE_OS_XENON
|
#ifndef TORQUE_OS_XENON
|
||||||
# include "windowManager/win32/win32Window.h"
|
# include "windowManager/win32/win32Window.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -83,6 +84,9 @@ GFXD3D9Device::GFXD3D9Device( LPDIRECT3D9 d3d, U32 index )
|
||||||
|
|
||||||
mOcclusionQuerySupported = false;
|
mOcclusionQuerySupported = false;
|
||||||
|
|
||||||
|
for (U32 i = 0; i < GS_COUNT; ++i)
|
||||||
|
mModelViewProjSC[i] = NULL;
|
||||||
|
|
||||||
// Set up the Enum translation tables
|
// Set up the Enum translation tables
|
||||||
GFXD3D9EnumTranslate::init();
|
GFXD3D9EnumTranslate::init();
|
||||||
|
|
||||||
|
|
@ -139,40 +143,65 @@ GFXD3D9Device::~GFXD3D9Device()
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// setupGenericShaders - This function is totally not needed on PC because there
|
// setupGenericShaders
|
||||||
// is fixed-function support in D3D9
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
inline void GFXD3D9Device::setupGenericShaders( GenericShaderType type /* = GSColor */ )
|
inline void GFXD3D9Device::setupGenericShaders( GenericShaderType type /* = GSColor */ )
|
||||||
{
|
{
|
||||||
#ifdef WANT_TO_SIMULATE_UI_ON_360
|
AssertFatal(type != GSTargetRestore, ""); //not used
|
||||||
if( mGenericShader[GSColor] == NULL )
|
|
||||||
|
if (mGenericShader[GSColor] == NULL)
|
||||||
{
|
{
|
||||||
mGenericShader[GSColor] = createShader( "shaders/common/genericColorV.hlsl",
|
ShaderData *shaderData;
|
||||||
"shaders/common/genericColorP.hlsl",
|
|
||||||
2.f );
|
|
||||||
|
|
||||||
mGenericShader[GSModColorTexture] = createShader( "shaders/common/genericModColorTextureV.hlsl",
|
shaderData = new ShaderData();
|
||||||
"shaders/common/genericModColorTextureP.hlsl",
|
shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/colorV.hlsl");
|
||||||
2.f );
|
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",
|
shaderData = new ShaderData();
|
||||||
"shaders/common/genericAddColorTextureP.hlsl",
|
shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/modColorTextureV.hlsl");
|
||||||
2.f );
|
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;
|
setShader(mGenericShader[type]);
|
||||||
mWorldMatrix[mWorldStackSize].transposeTo( world );
|
setShaderConstBuffer(mGenericShaderBuffer[type]);
|
||||||
mViewMatrix.transposeTo( view );
|
|
||||||
mProjectionMatrix.transposeTo( proj );
|
|
||||||
|
|
||||||
mTempMatrix = world * view * proj;
|
|
||||||
|
|
||||||
setVertexShaderConstF( VC_WORLD_PROJ, (F32 *)&mTempMatrix, 4 );
|
|
||||||
#else
|
|
||||||
disableShaders();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,10 @@ protected:
|
||||||
IDirect3DVertexShader9 *mLastVertShader;
|
IDirect3DVertexShader9 *mLastVertShader;
|
||||||
IDirect3DPixelShader9 *mLastPixShader;
|
IDirect3DPixelShader9 *mLastPixShader;
|
||||||
|
|
||||||
|
GFXShaderRef mGenericShader[GS_COUNT];
|
||||||
|
GFXShaderConstBufferRef mGenericShaderBuffer[GS_COUNT];
|
||||||
|
GFXShaderConstHandle *mModelViewProjSC[GS_COUNT];
|
||||||
|
|
||||||
S32 mCreateFenceType;
|
S32 mCreateFenceType;
|
||||||
|
|
||||||
LPDIRECT3D9 mD3D; ///< D3D Handle
|
LPDIRECT3D9 mD3D; ///< D3D Handle
|
||||||
|
|
@ -326,8 +330,6 @@ public:
|
||||||
/// Reset
|
/// Reset
|
||||||
virtual void reset( D3DPRESENT_PARAMETERS &d3dpp ) = 0;
|
virtual void reset( D3DPRESENT_PARAMETERS &d3dpp ) = 0;
|
||||||
|
|
||||||
GFXShaderRef mGenericShader[GS_COUNT];
|
|
||||||
|
|
||||||
virtual void setupGenericShaders( GenericShaderType type = GSColor );
|
virtual void setupGenericShaders( GenericShaderType type = GSColor );
|
||||||
|
|
||||||
// Function only really used on the, however a centralized function for
|
// Function only really used on the, however a centralized function for
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue