mirror of
https://github.com/Almamu/linux-wallpaperengine.git
synced 2025-09-14 13:56:48 +08:00
83 lines
2.4 KiB
C++
83 lines
2.4 KiB
C++
#include <fstream>
|
|
#include <string>
|
|
#include <utility>
|
|
|
|
// shader compiler
|
|
#include <WallpaperEngine/Core/Objects/Effects/Constants/CShaderConstantFloat.h>
|
|
#include <WallpaperEngine/Core/Objects/Effects/Constants/CShaderConstantInteger.h>
|
|
#include <WallpaperEngine/Core/Objects/Effects/Constants/CShaderConstantVector4.h>
|
|
#include <WallpaperEngine/Render/Shaders/CShader.h>
|
|
#include <regex>
|
|
|
|
#include "WallpaperEngine/Render/Shaders/Variables/CShaderVariable.h"
|
|
|
|
#include "CGLSLContext.h"
|
|
|
|
using namespace WallpaperEngine::Core;
|
|
using namespace WallpaperEngine::Assets;
|
|
|
|
namespace WallpaperEngine::Render::Shaders {
|
|
CShader::CShader (
|
|
std::shared_ptr<const CContainer> container, std::string filename, const std::map<std::string, int>& combos,
|
|
const std::map<int, std::string>& textures, const std::map<std::string, const CShaderConstant*>& constants
|
|
) :
|
|
m_file (std::move (filename)),
|
|
m_combos (combos),
|
|
m_passTextures (textures),
|
|
m_vertex (
|
|
CGLSLContext::UnitType_Vertex, filename, container->readVertexShader (filename),
|
|
container, constants, textures, combos),
|
|
m_fragment (
|
|
CGLSLContext::UnitType_Fragment, filename, container->readFragmentShader (filename),
|
|
container, constants, textures, combos) {
|
|
// link shaders between them
|
|
this->m_vertex.linkToUnit (&this->m_fragment);
|
|
this->m_fragment.linkToUnit (&this->m_vertex);
|
|
}
|
|
|
|
|
|
const std::string& CShader::vertex () {
|
|
return this->m_vertex.compile ();
|
|
}
|
|
|
|
const std::string& CShader::fragment () {
|
|
return this->m_fragment.compile ();
|
|
}
|
|
|
|
const CShaderUnit& CShader::getVertex () const {
|
|
return this->m_vertex;
|
|
}
|
|
|
|
const CShaderUnit& CShader::getFragment () const {
|
|
return this->m_fragment;
|
|
}
|
|
|
|
const std::map<std::string, int>& CShader::getCombos () const {
|
|
return this->m_combos;
|
|
}
|
|
|
|
CShader::ParameterSearchResult CShader::findParameter (const std::string& name) {
|
|
Variables::CShaderVariable* vertex = nullptr;
|
|
Variables::CShaderVariable* fragment = nullptr;
|
|
|
|
for (const auto& cur : this->m_vertex.getParameters ()) {
|
|
if (cur->getIdentifierName () == name) {
|
|
vertex = cur;
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (const auto& cur : this->m_fragment.getParameters()) {
|
|
if (cur->getIdentifierName () == name) {
|
|
fragment = cur;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return {
|
|
.vertex = vertex,
|
|
.fragment = fragment,
|
|
};
|
|
}
|
|
} // namespace WallpaperEngine::Render::Shaders
|