83 lines
2.4 KiB
C++
83 lines
2.4 KiB
C++
#include "dv_config.h"
|
|
#include "shader/dvc_shader_interface.h"
|
|
|
|
#include "vs_standard.h"
|
|
#include "fs_debug_solid_color.h"
|
|
#include "fs_debug_base_color.h"
|
|
#include "fs_debug_normal_texture.h"
|
|
#include "fs_debug_texture_coordinates.h"
|
|
#include "fs_debug_geometry_normal.h"
|
|
|
|
class StandardShaderInterface : public davinci::ShaderFileInterface
|
|
{
|
|
public:
|
|
virtual davinci::VertexShaderInterface* getVertexShader(const char* szName)
|
|
{
|
|
auto it = m_vertexShaderMap.find(szName);
|
|
if (it != m_vertexShaderMap.end()) return it->second;
|
|
return nullptr;
|
|
}
|
|
|
|
virtual davinci::PixelShaderInterface* getPixelShader(const char* szName)
|
|
{
|
|
auto it = m_fragementShaderMap.find(szName);
|
|
if (it != m_fragementShaderMap.end()) return it->second;
|
|
return nullptr;
|
|
}
|
|
|
|
public:
|
|
StandardShaderInterface()
|
|
{
|
|
registerVertexShader(new StandardVertexShader<false , false>());
|
|
registerVertexShader(new StandardVertexShader<true , false>());
|
|
registerVertexShader(new StandardVertexShader<false , true>());
|
|
registerVertexShader(new StandardVertexShader<true , true>());
|
|
|
|
registerFragementShader(new DebugFragementShader_SolidColor());
|
|
registerFragementShader(new DebugFragementShader_BaseColor());
|
|
registerFragementShader(new DebugFragementShader_NormalTexture());
|
|
registerFragementShader(new DebugFragementShader_TextureCoordinates());
|
|
registerFragementShader(new DebugFragementShader_GeometryNormal());
|
|
}
|
|
|
|
~StandardShaderInterface()
|
|
{
|
|
for (auto it = m_vertexShaderMap.begin(); it != m_vertexShaderMap.end(); ++it)
|
|
{
|
|
delete it->second;
|
|
}
|
|
m_vertexShaderMap.clear();
|
|
|
|
for (auto it = m_fragementShaderMap.begin(); it != m_fragementShaderMap.end(); ++it)
|
|
{
|
|
delete it->second;
|
|
}
|
|
m_fragementShaderMap.clear();
|
|
}
|
|
|
|
private:
|
|
void registerVertexShader(davinci::VertexShaderInterface* vertexShader)
|
|
{
|
|
m_vertexShaderMap.insert(std::make_pair(vertexShader->getName(), vertexShader));
|
|
}
|
|
void registerFragementShader(davinci::PixelShaderInterface* fragementShader)
|
|
{
|
|
m_fragementShaderMap.insert(std::make_pair(fragementShader->getName(), fragementShader));
|
|
}
|
|
|
|
private:
|
|
std::map<std::string, davinci::VertexShaderInterface*> m_vertexShaderMap;
|
|
std::map<std::string, davinci::PixelShaderInterface*> m_fragementShaderMap;
|
|
};
|
|
|
|
extern "C"
|
|
{
|
|
|
|
__declspec(dllexport) davinci::ShaderFileInterface* ShaderFileInterface()
|
|
{
|
|
static StandardShaderInterface theInterface;
|
|
return &theInterface;
|
|
}
|
|
|
|
}
|