CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
CeresEngine::ShaderCompiler::Generator Class Referenceabstract

#include <CeresEngine/Material/ShaderCompiler/Backend/Generator.hpp>

Inheritance diagram for CeresEngine::ShaderCompiler::Generator:
CeresEngine::ShaderCompiler::VisitorTracker CeresEngine::ShaderCompiler::Visitor CeresEngine::ShaderCompiler::GLSLGenerator

Classes

struct  WritePrefix
 Prefix text that can be written in front of the text of the next "Write"/"WriteLn" call. More...
 

Public Member Functions

 Generator (Log *log)
 
bool generateCode (Program &program, const ShaderInput &inputDesc, const ShaderOutput &outputDesc, Log *log=nullptr)
 

Protected Member Functions

virtual void generateCodePrimary (Program &program, const ShaderInput &inputDesc, const ShaderOutput &outputDesc)=0
 
void error (const String &msg, const AST *ast=nullptr, bool breakWithException=true)
 
void warning (const String &msg, const AST *ast=nullptr)
 
void beginLn ()
 
void endLn ()
 
void beginAlignedLines ()
 
void endAlignedLines ()
 
void separator ()
 
void writeScopeOpen (bool compact=false, bool endWithSemicolon=false, bool useBraces=true)
 
void writeScopeClose ()
 
void writeScopeContinue ()
 
bool isOpenLine () const
 
void write (const String &text)
 
void writeLn (const String &text)
 
void incrementIndent ()
 
void decrementIndent ()
 
void pushOptions (const CodeWriter::Options &options)
 
void popOptions ()
 
void pushWritePrefix (const String &text)
 
void popWritePrefix (const String &text="")
 
bool isTopWritePrefix () const
 
void blank ()
 
String getTimePoint () const
 
ProgramgetProgram () const
 
ShaderTarget getShaderTarget () const
 
bool isWarningEnabled (UInt32 flags) const
 
bool isVertexShader () const
 
bool isTessControlShader () const
 
bool isTessEvaluationShader () const
 
bool isGeometryShader () const
 
bool isFragmentShader () const
 
bool isComputeShader () const
 
- Protected Member Functions inherited from CeresEngine::ShaderCompiler::VisitorTracker
bool isInsideGlobalScope () const
 
void pushFunctionDeclaration (FunctionDeclaration *funcDeclaration)
 
void popFunctionDeclaration ()
 
bool isInsideFunctionDeclaration () const
 
bool isInsideEntryPoint () const
 
bool isInsideSecondaryEntryPoint () const
 
FunctionDeclarationgetActiveFunctionDeclaration () const
 
StructDeclarationgetActiveFunctionStructDeclaration () const
 
void pushCallExpression (CallExpression *callExpression)
 
void popCallExpression ()
 
CallExpressiongetActiveCallExpression () const
 
void pushLValueExpression (Expression *expression)
 
void popLValueExpression ()
 
ExpressiongetActiveLValueExpression () const
 
void pushStructDeclaration (StructDeclaration *structDeclaration)
 
void popStructDeclaration ()
 
bool isInsideStructDeclaration () const
 
StructDeclarationgetActiveStructDeclaration () const
 
const Vector< StructDeclaration * > & getStructDeclarationStack () const
 
void pushUniformBufferDeclaration (UniformBufferDeclaration *uniformBufferDeclaration)
 
void popUniformBufferDeclaration ()
 
bool isInsideUniformBufferDeclaration () const
 
const Vector< UniformBufferDeclaration * > & getUniformBufferDeclarationStack () const
 
void pushVarDeclarationStatement (VarDeclarationStatement *varDeclarationStatement)
 
void popVarDeclarationStatement ()
 
bool isInsideVarDeclarationStatement () const
 
VarDeclarationStatementgetActiveVarDeclarationStatement () const
 
- Protected Member Functions inherited from CeresEngine::ShaderCompiler::Visitor
template<typename T >
void visit (const T &ast, void *args=nullptr)
 
template<typename T >
void visit (const Vector< T > &astList, void *args=nullptr)
 
virtual ~Visitor ()=default
 
virtual void visitProgram (Program *ast, void *args)
 
virtual void visitCodeBlock (CodeBlock *ast, void *args)
 
virtual void visitAttribute (Attribute *ast, void *args)
 
virtual void visitSwitchCase (SwitchCase *ast, void *args)
 
virtual void visitSamplerValue (SamplerValue *ast, void *args)
 
virtual void visitRegister (Register *ast, void *args)
 
virtual void visitPackOffset (PackOffset *ast, void *args)
 
virtual void visitArrayDimension (ArrayDimension *ast, void *args)
 
virtual void visitTypeSpecifier (TypeSpecifier *ast, void *args)
 
virtual void visitVarDeclaration (VarDeclaration *ast, void *args)
 
virtual void visitBufferDeclaration (BufferDeclaration *ast, void *args)
 
virtual void visitSamplerDeclaration (SamplerDeclaration *ast, void *args)
 
virtual void visitStructDeclaration (StructDeclaration *ast, void *args)
 
virtual void visitAliasDeclaration (AliasDeclaration *ast, void *args)
 
virtual void visitFunctionDeclaration (FunctionDeclaration *ast, void *args)
 
virtual void visitUniformBufferDeclaration (UniformBufferDeclaration *ast, void *args)
 
virtual void visitBufferDeclarationStatement (BufferDeclarationStatement *ast, void *args)
 
virtual void visitSamplerDeclarationStatement (SamplerDeclarationStatement *ast, void *args)
 
virtual void visitVarDeclarationStatement (VarDeclarationStatement *ast, void *args)
 
virtual void visitAliasDeclarationStatement (AliasDeclarationStatement *ast, void *args)
 
virtual void visitBasicDeclarationStatement (BasicDeclarationStatement *ast, void *args)
 
virtual void visitNullStatement (NullStatement *ast, void *args)
 
virtual void visitCodeBlockStatement (CodeBlockStatement *ast, void *args)
 
virtual void visitForLoopStatement (ForLoopStatement *ast, void *args)
 
virtual void visitWhileLoopStatement (WhileLoopStatement *ast, void *args)
 
virtual void visitDoWhileLoopStatement (DoWhileLoopStatement *ast, void *args)
 
virtual void visitIfStatement (IfStatement *ast, void *args)
 
virtual void visitElseStatement (ElseStatement *ast, void *args)
 
virtual void visitSwitchStatement (SwitchStatement *ast, void *args)
 
virtual void visitExpressionStatement (ExpressionStatement *ast, void *args)
 
virtual void visitReturnStatement (ReturnStatement *ast, void *args)
 
virtual void visitCtrlTransferStatement (CtrlTransferStatement *ast, void *args)
 
virtual void visitLayoutStatement (LayoutStatement *ast, void *args)
 
virtual void visitNullExpression (NullExpression *ast, void *args)
 
virtual void visitSequenceExpression (SequenceExpression *ast, void *args)
 
virtual void visitLiteralExpression (LiteralExpression *ast, void *args)
 
virtual void visitTypeSpecifierExpression (TypeSpecifierExpression *ast, void *args)
 
virtual void visitTernaryExpression (TernaryExpression *ast, void *args)
 
virtual void visitBinaryExpression (BinaryExpression *ast, void *args)
 
virtual void visitUnaryExpression (UnaryExpression *ast, void *args)
 
virtual void visitPostUnaryExpression (PostUnaryExpression *ast, void *args)
 
virtual void visitCallExpression (CallExpression *ast, void *args)
 
virtual void visitBracketExpression (BracketExpression *ast, void *args)
 
virtual void visitAssignExpression (AssignExpression *ast, void *args)
 
virtual void visitObjectExpression (ObjectExpression *ast, void *args)
 
virtual void visitArrayExpression (ArrayExpression *ast, void *args)
 
virtual void visitCastExpression (CastExpression *ast, void *args)
 
virtual void visitInitializerExpression (InitializerExpression *ast, void *args)
 

Private Member Functions

void flushWritePrefixes ()
 

Private Attributes

CodeWriter mWriter
 
ReportHandler mReportHandler
 
ProgrammProgram = nullptr
 
ShaderTarget mShaderTarget = ShaderTarget::VertexShader
 
RawFlags mWarnings
 
bool mAllowBlanks = true
 
bool mAllowLineSeparation = true
 
Vector< WritePrefixmWritePrefixStack
 

Constructor & Destructor Documentation

◆ Generator()

CeresEngine::ShaderCompiler::Generator::Generator ( Log log)

Member Function Documentation

◆ beginAlignedLines()

void CeresEngine::ShaderCompiler::Generator::beginAlignedLines ( )
protected

◆ beginLn()

void CeresEngine::ShaderCompiler::Generator::beginLn ( )
protected

◆ blank()

void CeresEngine::ShaderCompiler::Generator::blank ( )
protected

◆ decrementIndent()

void CeresEngine::ShaderCompiler::Generator::decrementIndent ( )
protected

◆ endAlignedLines()

void CeresEngine::ShaderCompiler::Generator::endAlignedLines ( )
protected

◆ endLn()

void CeresEngine::ShaderCompiler::Generator::endLn ( )
protected

◆ error()

void CeresEngine::ShaderCompiler::Generator::error ( const String msg,
const AST ast = nullptr,
bool  breakWithException = true 
)
protected

◆ flushWritePrefixes()

void CeresEngine::ShaderCompiler::Generator::flushWritePrefixes ( )
private

◆ generateCode()

bool CeresEngine::ShaderCompiler::Generator::generateCode ( Program program,
const ShaderInput inputDesc,
const ShaderOutput outputDesc,
Log log = nullptr 
)

◆ generateCodePrimary()

virtual void CeresEngine::ShaderCompiler::Generator::generateCodePrimary ( Program program,
const ShaderInput inputDesc,
const ShaderOutput outputDesc 
)
protectedpure virtual

◆ getProgram()

Program * CeresEngine::ShaderCompiler::Generator::getProgram ( ) const
inlineprotected

◆ getShaderTarget()

ShaderTarget CeresEngine::ShaderCompiler::Generator::getShaderTarget ( ) const
inlineprotected

◆ getTimePoint()

String CeresEngine::ShaderCompiler::Generator::getTimePoint ( ) const
protected

◆ incrementIndent()

void CeresEngine::ShaderCompiler::Generator::incrementIndent ( )
protected

◆ isComputeShader()

bool CeresEngine::ShaderCompiler::Generator::isComputeShader ( ) const
protected

◆ isFragmentShader()

bool CeresEngine::ShaderCompiler::Generator::isFragmentShader ( ) const
protected

◆ isGeometryShader()

bool CeresEngine::ShaderCompiler::Generator::isGeometryShader ( ) const
protected

◆ isOpenLine()

bool CeresEngine::ShaderCompiler::Generator::isOpenLine ( ) const
protected

◆ isTessControlShader()

bool CeresEngine::ShaderCompiler::Generator::isTessControlShader ( ) const
protected

◆ isTessEvaluationShader()

bool CeresEngine::ShaderCompiler::Generator::isTessEvaluationShader ( ) const
protected

◆ isTopWritePrefix()

bool CeresEngine::ShaderCompiler::Generator::isTopWritePrefix ( ) const
protected

◆ isVertexShader()

bool CeresEngine::ShaderCompiler::Generator::isVertexShader ( ) const
protected

◆ isWarningEnabled()

bool CeresEngine::ShaderCompiler::Generator::isWarningEnabled ( UInt32  flags) const
protected

◆ popOptions()

void CeresEngine::ShaderCompiler::Generator::popOptions ( )
protected

◆ popWritePrefix()

void CeresEngine::ShaderCompiler::Generator::popWritePrefix ( const String text = "")
protected

◆ pushOptions()

void CeresEngine::ShaderCompiler::Generator::pushOptions ( const CodeWriter::Options options)
protected

◆ pushWritePrefix()

void CeresEngine::ShaderCompiler::Generator::pushWritePrefix ( const String text)
protected

◆ separator()

void CeresEngine::ShaderCompiler::Generator::separator ( )
protected

◆ warning()

void CeresEngine::ShaderCompiler::Generator::warning ( const String msg,
const AST ast = nullptr 
)
protected

◆ write()

void CeresEngine::ShaderCompiler::Generator::write ( const String text)
protected

◆ writeLn()

void CeresEngine::ShaderCompiler::Generator::writeLn ( const String text)
protected

◆ writeScopeClose()

void CeresEngine::ShaderCompiler::Generator::writeScopeClose ( )
protected

◆ writeScopeContinue()

void CeresEngine::ShaderCompiler::Generator::writeScopeContinue ( )
protected

◆ writeScopeOpen()

void CeresEngine::ShaderCompiler::Generator::writeScopeOpen ( bool  compact = false,
bool  endWithSemicolon = false,
bool  useBraces = true 
)
protected

Member Data Documentation

◆ mAllowBlanks

bool CeresEngine::ShaderCompiler::Generator::mAllowBlanks = true
private

◆ mAllowLineSeparation

bool CeresEngine::ShaderCompiler::Generator::mAllowLineSeparation = true
private

◆ mProgram

Program* CeresEngine::ShaderCompiler::Generator::mProgram = nullptr
private

◆ mReportHandler

ReportHandler CeresEngine::ShaderCompiler::Generator::mReportHandler
private

◆ mShaderTarget

ShaderTarget CeresEngine::ShaderCompiler::Generator::mShaderTarget = ShaderTarget::VertexShader
private

◆ mWarnings

RawFlags CeresEngine::ShaderCompiler::Generator::mWarnings
private

◆ mWritePrefixStack

Vector<WritePrefix> CeresEngine::ShaderCompiler::Generator::mWritePrefixStack
private

◆ mWriter

CodeWriter CeresEngine::ShaderCompiler::Generator::mWriter
private

The documentation for this class was generated from the following file: