From f3e522262b2d51d6c400cdfa7d46295e9f50901e Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 17 Feb 2009 22:59:53 +0000 Subject: [PATCH] removed knowledge of domain types from parser, removed process() from Node, added a global refptr object, took parse(fileName) out of Scene class git-svn-id: svn://anubis/fart/trunk@123 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- main/Scene.cc | 7 +++++++ main/Scene.h | 5 ++--- parser/nodes.h | 8 -------- parser/parser.h | 7 +++++++ parser/parser.yy | 9 +++------ 5 files changed, 19 insertions(+), 17 deletions(-) diff --git a/main/Scene.cc b/main/Scene.cc index 6e3c9d7..58a318b 100644 --- a/main/Scene.cc +++ b/main/Scene.cc @@ -13,6 +13,9 @@ #include "shapes/Shape.h" #include "PointLight.h" #include "Lighting.h" + +#include "parser/nodes.h" + using namespace std; Scene::Scene(const map & options, @@ -116,6 +119,10 @@ void Scene::load(const char * filename) m_lights.push_back(light); } +void parse(refptr node) +{ +} + void Scene::render() { if (m_verbose) diff --git a/main/Scene.h b/main/Scene.h index a0aa43d..877d7c6 100644 --- a/main/Scene.h +++ b/main/Scene.h @@ -11,6 +11,7 @@ #include "util/Color.h" #include "shapes/Shape.h" #include "Light.h" +#include "parser/nodes.h" #define SCENE_MAX_TRANSPARENT_HITS 8 #define SCENE_TRANSPARENCY_THRESHOLD 0.01 @@ -39,15 +40,13 @@ class Scene void setAmbientLight(const Color & al) { m_ambient_light = al; } Transform & getTransform() { return m_transform; } - friend int yyparse(); - protected: /* private methods */ void load(const char * filename); void renderPixel(int x, int y, unsigned char * pixel); Color traceRay(const Ray & ray); std::vector getRayHits(const Ray & ray); - int parse(const char * fileName); + void parse(refptr node); /* rendering parameters */ int m_width; diff --git a/parser/nodes.h b/parser/nodes.h index b8f3620..e15f9b0 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -4,8 +4,6 @@ #include "util/refptr.h" #include "util/Vector.h" -#include "main/Material.h" -#include "main/Scene.h" #include class Node @@ -15,13 +13,7 @@ class Node void addChild(refptr child) { m_children.push_back(child); } void addChildren(refptr other); - virtual void process(refptr scene) {} - virtual int getInteger() { return 0; } - virtual refptr getMaterial() - { - return refptr(NULL); - } virtual double getNumber() { return 0.0; } virtual refptr getVector() { diff --git a/parser/parser.h b/parser/parser.h index 9c42d4f..cab34eb 100644 --- a/parser/parser.h +++ b/parser/parser.h @@ -2,6 +2,13 @@ #ifndef PARSER_H #define PARSER_H PARSER_H +#include "nodes.h" +#include "util/refptr.h" + #define YYSTYPE refptr +extern YYSTYPE parsed_scene_node; + +int parse(const char * fileName); + #endif diff --git a/parser/parser.yy b/parser/parser.yy index d899714..6789493 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -3,11 +3,8 @@ #include #include -#include "main/Scene.h" -#include "main/Material.h" #include "util/Vector.h" #include "util/refptr.h" -#include "shapes/Shape.h" /* includes all shape types */ #include "nodes.h" #include "parser.h" using namespace std; @@ -26,7 +23,7 @@ int yywrap() return 1; } -static Scene * g_scene; +refptr parsed_scene_node; %} @@ -91,6 +88,7 @@ static Scene * g_scene; scene: SCENE LCURLY scene_items RCURLY { $$ = new SceneNode(); $$->addChildren($3); + parsed_scene_node = $$; } ; @@ -389,9 +387,8 @@ vector: LESS number COMMA number COMMA number GREATER { %% -int Scene::parse(const char * fileName) +int parse(const char * fileName) { - g_scene = this; yyin = fopen(fileName, "r"); if (yyin == NULL) {