Files
davinci2/source/shaders/standard/dll_main.cpp
T
2025-12-03 23:38:08 +08:00

89 lines
2.7 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_show_texture.h"
#include "fs_debug_texture_coordinates.h"
#include "fs_debug_geometry_normal.h"
#include "fs_classic_phong.h"
#include "fs_pbr_gltf.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 , false));
registerVertexShader(new StandardVertexShader(false , false , true));
registerVertexShader(new StandardVertexShader(false , true , false));
registerVertexShader(new StandardVertexShader(false , true , true));
registerVertexShader(new StandardVertexShader(true , false , false));
registerVertexShader(new StandardVertexShader(true , false , true));
registerVertexShader(new StandardVertexShader(true , true , false));
registerVertexShader(new StandardVertexShader(true , true , true));
registerFragementShader(new DebugFragementShader_SolidColor());
registerFragementShader(new DebugFragementShader_ShowTexture());
registerFragementShader(new DebugFragementShader_TextureCoordinates());
registerFragementShader(new DebugFragementShader_GeometryNormal());
registerFragementShader(new ClassicFragementShader_Phong());
registerFragementShader(new PbrFragementShader_GLTF());
}
~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;
}
}