Compiler - Viewport instruction
This commit is contained in:
parent
cdf883c3cd
commit
91f363ee06
6 changed files with 20 additions and 6 deletions
|
@ -59,6 +59,7 @@ enum E_OpType
|
||||||
OP_USE_PROGRAM ,
|
OP_USE_PROGRAM ,
|
||||||
OP_USE_TEXTURE ,
|
OP_USE_TEXTURE ,
|
||||||
OP_UNIFORMS ,
|
OP_UNIFORMS ,
|
||||||
|
OP_VIEWPORT ,
|
||||||
//
|
//
|
||||||
OP_FULLSCREEN ,
|
OP_FULLSCREEN ,
|
||||||
OP_CLEAR ,
|
OP_CLEAR ,
|
||||||
|
|
2
opast.cc
2
opast.cc
|
@ -274,7 +274,7 @@ A_Node* opast::ASTVisitorBrowser(
|
||||||
auto c = child;
|
auto c = child;
|
||||||
for ( int i = 0 ; i < 4 ; i ++ ) {
|
for ( int i = 0 ; i < 4 ; i ++ ) {
|
||||||
T_ViewportInstrNode::E_Parameter p{
|
T_ViewportInstrNode::E_Parameter p{
|
||||||
T_ViewportInstrNode::E_Parameter( i ) };
|
T_ViewportInstrNode::E_Parameter( 3 - i ) };
|
||||||
if ( n.hasParameter( p ) ) {
|
if ( n.hasParameter( p ) ) {
|
||||||
if ( c == 0 ) {
|
if ( c == 0 ) {
|
||||||
return &n.parameter( p );
|
return &n.parameter( p );
|
||||||
|
|
14
opast.hh
14
opast.hh
|
@ -1148,7 +1148,7 @@ class T_ViewportInstrNode : public A_InstructionNode
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
P_ExpressionNode parameters_[ 4 ];
|
P_ArgumentNode parameters_[ 4 ];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
T_ViewportInstrNode( T_InstrListNode& parent ) noexcept
|
T_ViewportInstrNode( T_InstrListNode& parent ) noexcept
|
||||||
|
@ -1156,11 +1156,17 @@ class T_ViewportInstrNode : public A_InstructionNode
|
||||||
E_InstrRestriction::INIT )
|
E_InstrRestriction::INIT )
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void setParameter( const E_Parameter p , P_ExpressionNode height ) noexcept
|
void setParameter( const E_Parameter p , P_ExpressionNode value ) noexcept
|
||||||
{ parameters_[ int( p ) ] = std::move( height ); }
|
{
|
||||||
|
if ( value ) {
|
||||||
|
parameters_[ int( p ) ] = NewOwned< T_ArgumentNode >(
|
||||||
|
*this , std::move( value ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool hasParameter( const E_Parameter p ) const noexcept
|
bool hasParameter( const E_Parameter p ) const noexcept
|
||||||
{ return bool( parameters_[ int( p ) ] ); }
|
{ return bool( parameters_[ int( p ) ] ); }
|
||||||
A_ExpressionNode& parameter( const E_Parameter p ) const noexcept
|
T_ArgumentNode& parameter( const E_Parameter p ) const noexcept
|
||||||
{ return *parameters_[ int( p ) ]; }
|
{ return *parameters_[ int( p ) ]; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -543,6 +543,12 @@ bool T_CompilerImpl_::compileNode(
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case A_Node::OP_VIEWPORT:
|
||||||
|
if ( exit ) {
|
||||||
|
addInstruction( OP_VIEWPORT , node.location( ) );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
//- RENDERING -------------------------------------------------------------------------
|
//- RENDERING -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -1787,7 +1787,7 @@ M_INSTR_( Viewport )
|
||||||
|
|
||||||
for ( auto i = 1u ; i < 5 ; i ++ ) {
|
for ( auto i = 1u ; i < 5 ; i ++ ) {
|
||||||
T_ViewportInstrNode::E_Parameter p{
|
T_ViewportInstrNode::E_Parameter p{
|
||||||
T_ViewportInstrNode::E_Parameter( i ) };
|
T_ViewportInstrNode::E_Parameter( i - 1 ) };
|
||||||
if ( input.size( ) < i ) {
|
if ( input.size( ) < i ) {
|
||||||
T_StringBuilder sb;
|
T_StringBuilder sb;
|
||||||
sb << "missing ";
|
sb << "missing ";
|
||||||
|
|
1
ops.cc
1
ops.cc
|
@ -131,6 +131,7 @@ static T_KeyValueTable< E_OpType , T_OpInfo > OpInfoTable_{ ([]() {
|
||||||
infos.add( E_OpType::OP_USE_PROGRAM , T_OpInfo{ "use-program" , 0 , OpStackMain{ -1 } } );
|
infos.add( E_OpType::OP_USE_PROGRAM , T_OpInfo{ "use-program" , 0 , OpStackMain{ -1 } } );
|
||||||
infos.add( E_OpType::OP_USE_TEXTURE , T_OpInfo{ "use-texture" , 1 , OpStackMain{ -2 } } );
|
infos.add( E_OpType::OP_USE_TEXTURE , T_OpInfo{ "use-texture" , 1 , OpStackMain{ -2 } } );
|
||||||
infos.add( E_OpType::OP_UNIFORMS , T_OpInfo{ "uniforms" , 2 , OpStackMain{ -2 } } );
|
infos.add( E_OpType::OP_UNIFORMS , T_OpInfo{ "uniforms" , 2 , OpStackMain{ -2 } } );
|
||||||
|
infos.add( E_OpType::OP_VIEWPORT , T_OpInfo{ "viewport" , 0 , OpStackMain{ -4 } } );
|
||||||
//
|
//
|
||||||
infos.add( E_OpType::OP_FULLSCREEN , T_OpInfo{ "fullscreen" } );
|
infos.add( E_OpType::OP_FULLSCREEN , T_OpInfo{ "fullscreen" } );
|
||||||
infos.add( E_OpType::OP_CLEAR , T_OpInfo{ "clear" , 0 , OpStackMain{ -4 } } );
|
infos.add( E_OpType::OP_CLEAR , T_OpInfo{ "clear" , 0 , OpStackMain{ -4 } } );
|
||||||
|
|
Loading…
Reference in a new issue