123
This commit is contained in:
83
Editor/ShaderEnum.cpp
Normal file
83
Editor/ShaderEnum.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Crytek Engine Source File.
|
||||
// Copyright (C), Crytek Studios, 2001.
|
||||
// -------------------------------------------------------------------------
|
||||
// File name: ShaderEnum.cpp
|
||||
// Version: v1.00
|
||||
// Created: 7/12/2001 by Timur.
|
||||
// Compilers: Visual C++ 6.0
|
||||
// Description: Enumerate Installed Shaders.
|
||||
// -------------------------------------------------------------------------
|
||||
// History:
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "StdAfx.h"
|
||||
#include "ShaderEnum.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CShaderEnum::CShaderEnum()
|
||||
{
|
||||
m_bEnumerated = false;
|
||||
}
|
||||
|
||||
CShaderEnum::~CShaderEnum()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
inline bool ShaderLess( const CShaderEnum::ShaderDesc &s1,const CShaderEnum::ShaderDesc &s2 )
|
||||
{
|
||||
return stricmp( s1.name,s2.name ) < 0;
|
||||
}
|
||||
/*
|
||||
struct StringLess {
|
||||
bool operator()( const CString &s1,const CString &s2 )
|
||||
{
|
||||
return stricmp( s1,s2 ) < 0;
|
||||
}
|
||||
};
|
||||
*/
|
||||
|
||||
//! Enum shaders.
|
||||
int CShaderEnum::EnumShaders()
|
||||
{
|
||||
IRenderer *renderer = GetIEditor()->GetSystem()->GetIRenderer();
|
||||
if (!renderer)
|
||||
return 0;
|
||||
|
||||
if (m_bEnumerated)
|
||||
return m_shaders.size();
|
||||
|
||||
m_bEnumerated = true;
|
||||
|
||||
int numShaders = 0;
|
||||
|
||||
m_shaders.reserve( 100 );
|
||||
//! Enumerate Shaders.
|
||||
for (int type = 0; type < 2; type++)
|
||||
{
|
||||
int numFiles = (INT_PTR)renderer->EF_Query( EFQ_NUMEFFILES0+type );
|
||||
string *files = (string *)renderer->EF_Query( EFQ_EFFILENAMES0+type );
|
||||
for (int i = 0; i < numFiles; i++)
|
||||
{
|
||||
// for each effect file, get list of shaders inside.
|
||||
char **EfNames = renderer->EF_GetShadersForFile( files[i].c_str(),type );
|
||||
if (EfNames)
|
||||
{
|
||||
int j = 0;
|
||||
while (EfNames[j])
|
||||
{
|
||||
ShaderDesc sd;
|
||||
sd.name = EfNames[j];
|
||||
sd.file = files[i].c_str();
|
||||
m_shaders.push_back( sd );
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
std::sort( m_shaders.begin(),m_shaders.end(),ShaderLess );
|
||||
return m_shaders.size();
|
||||
}
|
||||
Reference in New Issue
Block a user