From 7a0442a388a381dc17cc23ca09e590a9b5a33d42 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 28 Jun 2007 09:51:47 +0000 Subject: [PATCH] From Nikolaus Hanekamp, added support for osg::Multisample --- src/osgPlugins/ive/CMakeLists.txt | 1 + src/osgPlugins/ive/DataInputStream.cpp | 6 +++ src/osgPlugins/ive/DataOutputStream.cpp | 5 +++ src/osgPlugins/ive/Multisample.cpp | 57 +++++++++++++++++++++++++ src/osgPlugins/ive/Multisample.h | 15 +++++++ src/osgPlugins/ive/ReadWrite.h | 1 + 6 files changed, 85 insertions(+) create mode 100644 src/osgPlugins/ive/Multisample.cpp create mode 100644 src/osgPlugins/ive/Multisample.h diff --git a/src/osgPlugins/ive/CMakeLists.txt b/src/osgPlugins/ive/CMakeLists.txt index 7674a9640..2d678e459 100644 --- a/src/osgPlugins/ive/CMakeLists.txt +++ b/src/osgPlugins/ive/CMakeLists.txt @@ -55,6 +55,7 @@ Material.cpp MatrixTransform.cpp MultiSwitch.cpp MultiTextureControl.cpp +Multisample.cpp Node.cpp Object.cpp OccluderNode.cpp diff --git a/src/osgPlugins/ive/DataInputStream.cpp b/src/osgPlugins/ive/DataInputStream.cpp index e33645ecf..514be005f 100644 --- a/src/osgPlugins/ive/DataInputStream.cpp +++ b/src/osgPlugins/ive/DataInputStream.cpp @@ -50,6 +50,8 @@ #include "Scissor.h" #include "Image.h" #include "PointSprite.h" +#include "Multisample.h" + #include "Group.h" #include "MatrixTransform.h" @@ -1087,6 +1089,10 @@ osg::StateAttribute* DataInputStream::readStateAttribute() attribute = new osg::PointSprite(); ((ive::PointSprite*)(attribute))->read(this); } + else if(attributeID == IVEMULTISAMPLE){ + attribute = new osg::Multisample(); + ((ive::Multisample*)(attribute))->read(this); + } else if(attributeID == IVESTENCIL){ attribute = new osg::Stencil(); ((ive::Stencil*)(attribute))->read(this); diff --git a/src/osgPlugins/ive/DataOutputStream.cpp b/src/osgPlugins/ive/DataOutputStream.cpp index 49b168e13..53d52d131 100644 --- a/src/osgPlugins/ive/DataOutputStream.cpp +++ b/src/osgPlugins/ive/DataOutputStream.cpp @@ -53,6 +53,7 @@ #include "Scissor.h" #include "Image.h" #include "PointSprite.h" +#include "Multisample.h" #include "Group.h" #include "MatrixTransform.h" @@ -771,6 +772,10 @@ void DataOutputStream::writeStateAttribute(const osg::StateAttribute* attribute) else if(dynamic_cast(attribute)){ ((ive::PointSprite*)(attribute))->write(this); } + // This is a Multisample + else if(dynamic_cast(attribute)){ + ((ive::Multisample*)(attribute))->write(this); + } else{ std::string className = attribute->className(); diff --git a/src/osgPlugins/ive/Multisample.cpp b/src/osgPlugins/ive/Multisample.cpp new file mode 100644 index 000000000..d15909edf --- /dev/null +++ b/src/osgPlugins/ive/Multisample.cpp @@ -0,0 +1,57 @@ +/********************************************************************** + * + * FILE: Multisample.cpp + * + * DESCRIPTION: Read/Write osg::Multisample in binary format to disk. + * + * CREATED BY: Nikolaus Hanekamp + * + * + * HISTORY: Created 15.06.2007 + * + **********************************************************************/ + +#include "Exception.h" +#include "Multisample.h" +#include "Object.h" + +using namespace ive; + +void Multisample::write(DataOutputStream* out){ + // Write CullFace's identification. + out->writeInt(IVEMULTISAMPLE); + // If the osg class is inherited by any other class we should also write this to file. + osg::Object* obj = dynamic_cast(this); + if(obj){ + ((ive::Object*)(obj))->write(out); + } + else + throw Exception("Multisample::write(): Could not cast this osg::Multisample to an osg::Object."); + // Write Multisample's properties. + out->writeFloat(getCoverage()); + out->writeBool(getInvert()); + out->writeInt(getHint()); +} + +void Multisample::read(DataInputStream* in){ + // Peek on Multisample's identification. + int id = in->peekInt(); + if(id == IVEMULTISAMPLE){ + // Read Multisample's identification. + id = in->readInt(); + // If the osg class is inherited by any other class we should also read this from file. + osg::Object* obj = dynamic_cast(this); + if(obj){ + ((ive::Object*)(obj))->read(in); + } + else + throw Exception("Multisample::read(): Could not cast this osg::Multisample to an osg::Object."); + // Read Multisample's properties + setCoverage(in->readFloat()); + setInvert(in->readBool()); + setHint((Mode) in->readInt()); + } + else{ + throw Exception("Multisample::read(): Expected Multisample identification."); + } +} diff --git a/src/osgPlugins/ive/Multisample.h b/src/osgPlugins/ive/Multisample.h new file mode 100644 index 000000000..0ea45775a --- /dev/null +++ b/src/osgPlugins/ive/Multisample.h @@ -0,0 +1,15 @@ +#ifndef IVE_MULTISAMPLE +#define IVE_MULTISAMPLE 1 + +#include +#include "ReadWrite.h" + +namespace ive{ +class Multisample : public osg::Multisample, public ReadWrite { +public: + void write(DataOutputStream* out); + void read(DataInputStream* in); +}; +} + +#endif // IVE_VERTEX_PROGRAM diff --git a/src/osgPlugins/ive/ReadWrite.h b/src/osgPlugins/ive/ReadWrite.h index 48fe7cf6f..073868b21 100644 --- a/src/osgPlugins/ive/ReadWrite.h +++ b/src/osgPlugins/ive/ReadWrite.h @@ -81,6 +81,7 @@ namespace ive { #define IVEPOLYGONMODE 0x00001129 #define IVETEXTURERECTANGLE 0x00001130 #define IVEPOINTSPRITE 0x00001131 +#define IVEMULTISAMPLE 0x00001132 // Drawables #define IVEDRAWABLE 0x00001000