121 lines
3.4 KiB
C++
121 lines
3.4 KiB
C++
#include "stdafx.h"
|
|
|
|
#define GETEFFECTCAPABILITIES_GUID CKGUID(0x1b9a3f92,0x2a477527)
|
|
|
|
//-----------------------------------------------------------------------------
|
|
enum
|
|
{
|
|
PARAMOUT_PLATFORM = 0,
|
|
PARAMOUT_DXVERSION,
|
|
PARAMOUT_VSVERSION,
|
|
PARAMOUT_PSVERSION
|
|
};
|
|
|
|
#define PLATFORM_UNKNOWN "Unknown"
|
|
#define PLATFORM_WINDOWS "Windows"
|
|
#define PLATFORM_XBOX "Xbox"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int GetShaderCapabilities(const CKBehaviorContext& behcontext)
|
|
{
|
|
CKBehavior* beh = behcontext.Behavior;
|
|
CKRenderContext* rc = behcontext.CurrentRenderContext;
|
|
|
|
// Gets the manager.
|
|
int id = 0;
|
|
CKShaderManager* fxman = (CKShaderManager*)behcontext.Context->GetManagerByGuid(ShaderManagerGUID);
|
|
// On
|
|
if (beh->IsInputActive(0))
|
|
{
|
|
int platform = VXPLATFORM_UNKNOWN;
|
|
platform = VxGetPlatform();
|
|
|
|
float dxversion = 0;
|
|
float vsversion = 0;
|
|
float psversion = 0;
|
|
|
|
VxDirectXData* dxdata = NULL;
|
|
dxdata = rc->GetDirectXInfo();
|
|
if (dxdata) {
|
|
switch(dxdata->DxVersion) {
|
|
case 0x0900 :
|
|
dxversion = 9.0f;
|
|
break;
|
|
|
|
case 0x0801 :
|
|
dxversion = 8.1f;
|
|
break;
|
|
|
|
case 0x0800 :
|
|
dxversion = 8.0f;
|
|
break;
|
|
|
|
case 0x0700 :
|
|
dxversion = 7.0f;
|
|
break;
|
|
|
|
case 0x0500 :
|
|
dxversion = 5.0f;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// If the effect manager is available.
|
|
if (fxman && fxman->IsSupported())
|
|
fxman->GetVSPSVersion(vsversion, psversion);
|
|
beh->SetOutputParameterValue(PARAMOUT_PLATFORM, &platform);
|
|
beh->SetOutputParameterValue(PARAMOUT_DXVERSION, &dxversion);
|
|
beh->SetOutputParameterValue(PARAMOUT_VSVERSION, &vsversion);
|
|
beh->SetOutputParameterValue(PARAMOUT_PSVERSION, &psversion);
|
|
beh->ActivateOutput(0);
|
|
}
|
|
|
|
return CKBR_OK;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
CKERROR CreateGetShaderCapabilitiesProto(CKBehaviorPrototype **pproto)
|
|
{
|
|
CKBehaviorPrototype *proto = CreateCKBehaviorPrototype("Get Shader Capabilities");
|
|
if(!proto) return CKERR_OUTOFMEMORY;
|
|
|
|
proto->DeclareInput("In");
|
|
proto->DeclareOutput("Out");
|
|
|
|
proto->DeclareOutParameter("Platform", CKPGUID_HOST_PLATFORM);
|
|
proto->DeclareOutParameter("DX Version", CKPGUID_FLOAT);
|
|
proto->DeclareOutParameter("VS Version", CKPGUID_FLOAT);
|
|
proto->DeclareOutParameter("PS Version", CKPGUID_FLOAT);
|
|
|
|
proto->SetFlags(CK_BEHAVIORPROTOTYPE_NORMAL);
|
|
proto->SetFunction(GetShaderCapabilities);
|
|
proto->SetFlags(CK_BEHAVIORPROTOTYPE_OBSOLETE);
|
|
|
|
*pproto = proto;
|
|
return CK_OK;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
CKObjectDeclaration *FillBehaviorGetShaderCapabilities()
|
|
{
|
|
CKObjectDeclaration *od = CreateCKObjectDeclaration("Get Shader Capabilities");
|
|
od->SetDescription("Gets shaders (HLSL only) related hardware capabilities");
|
|
/* rem:
|
|
<SPAN CLASS=in>In: </SPAN>triggers the process<BR>
|
|
<SPAN CLASS=out>Out: </SPAN>is activated when the process is completed.<BR>
|
|
<BR>
|
|
<SPAN CLASS=pin>Material: </SPAN>The material.<BR>
|
|
<SPAN CLASS=pin>Technique: </SPAN>The name of the technique.<BR>
|
|
<SPAN CLASS=pin>Find Next Technique: </SPAN>Finds the next technique from the technique found.<BR>
|
|
*/
|
|
od->SetCategory("Shaders/General");
|
|
od->SetType(CKDLL_BEHAVIORPROTOTYPE);
|
|
od->SetGuid(GETEFFECTCAPABILITIES_GUID);
|
|
od->SetAuthorGuid(VIRTOOLS_GUID);
|
|
od->SetAuthorName("Virtools");
|
|
od->SetVersion(0x00010000);
|
|
od->SetCreationFunction(CreateGetShaderCapabilitiesProto);
|
|
od->SetCompatibleClassId(CKCID_BEOBJECT);
|
|
return od;
|
|
}
|