Project

General

Profile

SO3Engine
SO3RtssCustom.h
Go to the documentation of this file.
1/*
2-----------------------------------------------------------------------------
3This source file is part of OpenSpace3D
4For the latest info, see http://www.openspace3d.com
5
6Copyright (c) 2023 I-maginer
7
8This program is free software; you can redistribute it and/or modify it under
9the terms of the GNU Lesser General Public License as published by the Free Software
10Foundation; either version 2 of the License, or (at your option) any later
11version.
12
13This program is distributed in the hope that it will be useful, but WITHOUT
14ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
16
17You should have received a copy of the GNU Lesser General Public License along with
18this program; if not, write to the Free Software Foundation, Inc., 59 Temple
19Place - Suite 330, Boston, MA 02111-1307, USA, or go to
20http://www.gnu.org/copyleft/lesser.txt
21
22-----------------------------------------------------------------------------
23*/
24
32#ifndef __SO3RTSS_CUSTOM_H__
33#define __SO3RTSS_CUSTOM_H__
34
36#include "SO3Renderer/SO3Root.h"
37#include "OgreShaderPrecompiledHeaders.h"
38
39//From Ogre::RTShader::LayeredBlending
40namespace SO3
41{
42 extern const Ogre::String SRS_ADV_COOK_TORRANCE_LIGHTING;
43 class AdvancedCookTorranceLighting : public Ogre::RTShader::SubRenderState
44 {
45 public:
47
48 const Ogre::String& getType() const override;
49
50 int getExecutionOrder() const override { return Ogre::RTShader::FFP_LIGHTING; }
51
52 void copyFrom(const Ogre::RTShader::SubRenderState& rhs) override;
53
54 bool preAddToRenderState(const Ogre::RTShader::RenderState* renderState, Ogre::Pass* srcPass, Ogre::Pass* dstPass) override;
55
59 const Ogre::String& getMetalRoughnessMapName() const { return mMetalRoughnessMapName; }
60
61 bool setParameter(const Ogre::String& name, const Ogre::String& value) override;
62
63 bool createCpuSubPrograms(Ogre::RTShader::ProgramSet* programSet) override;
64
65 private:
66 Ogre::String mMetalRoughnessMapName;
67 bool mUseOcclusion;
68 int mLightCount;
69 uint8 mMRMapSamplerIndex;
70 Ogre::int8 mLtcLUT1SamplerIndex;
71 };
72
73 class AdvancedCookTorranceLightingFactory : public Ogre::RTShader::SubRenderStateFactory
74 {
75 public:
76 const Ogre::String& getType() const override;
77
78 Ogre::RTShader::SubRenderState* createInstance(Ogre::ScriptCompiler* compiler, Ogre::PropertyAbstractNode* prop, Ogre::Pass* pass,
79 Ogre::RTShader::SGScriptTranslator* translator) override;
80 void writeInstance(Ogre::MaterialSerializer* ser, Ogre::RTShader::SubRenderState* subRenderState, Ogre::Pass* srcPass, Ogre::Pass* dstPass) override;
81
82 protected:
83 Ogre::RTShader::SubRenderState* createInstanceImpl() override;
84 };
85
86}
87
88#endif
librairies include
void writeInstance(Ogre::MaterialSerializer *ser, Ogre::RTShader::SubRenderState *subRenderState, Ogre::Pass *srcPass, Ogre::Pass *dstPass) override
const Ogre::String & getType() const override
Ogre::RTShader::SubRenderState * createInstance(Ogre::ScriptCompiler *compiler, Ogre::PropertyAbstractNode *prop, Ogre::Pass *pass, Ogre::RTShader::SGScriptTranslator *translator) override
Ogre::RTShader::SubRenderState * createInstanceImpl() override
const Ogre::String & getType() const override
bool createCpuSubPrograms(Ogre::RTShader::ProgramSet *programSet) override
const Ogre::String & getMetalRoughnessMapName() const
bool preAddToRenderState(const Ogre::RTShader::RenderState *renderState, Ogre::Pass *srcPass, Ogre::Pass *dstPass) override
void copyFrom(const Ogre::RTShader::SubRenderState &rhs) override
bool setParameter(const Ogre::String &name, const Ogre::String &value) override
int getExecutionOrder() const override
const Ogre::String SRS_ADV_COOK_TORRANCE_LIGHTING