]> git.tdb.fi Git - libs/gl.git/commitdiff
Refactor statement creation in DepthRangeConverter into a function
authorMikko Rasa <tdb@tdb.fi>
Mon, 10 Oct 2022 11:47:41 +0000 (14:47 +0300)
committerMikko Rasa <tdb@tdb.fi>
Mon, 10 Oct 2022 11:47:41 +0000 (14:47 +0300)
source/glsl/finalize.cpp
source/glsl/finalize.h

index 469cb92daba088493168f82f55e47a4b5938dccd..e4d61ad13d87719bab032874c744ca6a7e959b59 100644 (file)
@@ -260,6 +260,44 @@ void DepthRangeConverter::apply(Stage &stage, const Features &features)
        stage.content.visit(*this);
 }
 
+NodePtr<Statement> DepthRangeConverter::create_conversion_statement()
+{
+       VariableReference *position = new VariableReference;
+       position->name = "gl_Position";
+
+       MemberAccess *z = new MemberAccess;
+       z->left = position;
+       z->member = "z";
+
+       Literal *scale = new Literal;
+       scale->token = "2.0";
+       scale->value = 2.0f;
+
+       BinaryExpression *multiply = new BinaryExpression;
+       multiply->oper = &Operator::get_operator("*", Operator::BINARY);
+       multiply->left = z;
+       multiply->right = scale;
+
+       MemberAccess *w = new MemberAccess;
+       w->left = position->clone();
+       w->member = "w";
+
+       BinaryExpression *subtract = new BinaryExpression;
+       subtract->oper = &Operator::get_operator("-", Operator::BINARY);
+       subtract->left = multiply;
+       subtract->right = w;
+
+       Assignment *assign = new Assignment;
+       assign->oper = &Operator::get_operator("=", Operator::BINARY);
+       assign->left = z->clone();
+       assign->right = subtract;
+
+       ExpressionStatement *statement = new ExpressionStatement;
+       statement->expression = assign;
+
+       return statement;
+}
+
 void DepthRangeConverter::visit(VariableReference &var)
 {
        const StructDeclaration *strct = dynamic_cast<const StructDeclaration *>(var.type);
@@ -296,42 +334,7 @@ void DepthRangeConverter::visit(FunctionDeclaration &func)
        TraversingVisitor::visit(func);
 
        if(func.definition==&func && func.name=="main" && !r_position_z_assigned)
-       {
-               VariableReference *position = new VariableReference;
-               position->name = "gl_Position";
-
-               MemberAccess *z = new MemberAccess;
-               z->left = position;
-               z->member = "z";
-
-               Literal *scale = new Literal;
-               scale->token = "2.0";
-               scale->value = 2.0f;
-
-               BinaryExpression *multiply = new BinaryExpression;
-               multiply->oper = &Operator::get_operator("*", Operator::BINARY);
-               multiply->left = z;
-               multiply->right = scale;
-
-               MemberAccess *w = new MemberAccess;
-               w->left = position->clone();
-               w->member = "w";
-
-               BinaryExpression *subtract = new BinaryExpression;
-               subtract->oper = &Operator::get_operator("-", Operator::BINARY);
-               subtract->left = multiply;
-               subtract->right = w;
-
-               Assignment *assign = new Assignment;
-               assign->oper = &Operator::get_operator("=", Operator::BINARY);
-               assign->left = z->clone();
-               assign->right = subtract;
-
-               ExpressionStatement *statement = new ExpressionStatement;
-               statement->expression = assign;
-
-               func.body.body.push_back(statement);
-       }
+               func.body.body.push_back_nocopy(create_conversion_statement());
 }
 
 
index 4fc2e1b00c42806768e0aca28b9166eb2284939b..510f3987010e9488071c1e0702bdcf647c360639 100644 (file)
@@ -75,6 +75,8 @@ public:
        void apply(Stage &, const Features &);
 
 private:
+       NodePtr<Statement> create_conversion_statement();
+
        virtual void visit(VariableReference &);
        virtual void visit(MemberAccess &);
        virtual void visit(Swizzle &);