From Mike Weiblen,
"updates for GLSL core integration: Code compiles and runs on win32. Basic functionality of Program and Shader in place. Program derived from StateAttribute. Uniform value propagation is not yet functional (in development) Includes some patches by Nathan Cournia. includes example testcase to demo use of new classes."
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2005 Robert Osfield
|
||||
* Copyright (C) 2003-2005 3Dlabs Inc. Ltd.
|
||||
* Copyright (C) 2004-2005 Nathan Cournia
|
||||
*
|
||||
* This application is open source and may be redistributed and/or modified
|
||||
* freely and without restriction, both in commericial and non commericial
|
||||
@@ -11,7 +12,7 @@
|
||||
*/
|
||||
|
||||
/* file: include/osg/Program
|
||||
* author: Mike Weiblen 2005-02-20
|
||||
* author: Mike Weiblen 2005-03-23
|
||||
*/
|
||||
|
||||
// NOTICE: This code is CLOSED during construction and/or renovation!
|
||||
@@ -24,22 +25,20 @@
|
||||
#ifndef OSG_PROGRAM
|
||||
#define OSG_PROGRAM 1
|
||||
|
||||
#include <osg/buffered_value>
|
||||
#include <osg/ref_ptr>
|
||||
#include <osg/Vec2>
|
||||
#include <osg/Vec3>
|
||||
#include <osg/Vec4>
|
||||
#include <osg/Referenced>
|
||||
#include <osg/GL>
|
||||
#include <osg/Uniform>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <osg/buffered_value>
|
||||
#include <osg/ref_ptr>
|
||||
#include <osg/Referenced>
|
||||
#include <osg/GL>
|
||||
#include <osg/Uniform>
|
||||
#include <osg/StateAttribute>
|
||||
|
||||
namespace osg {
|
||||
|
||||
class State;
|
||||
class Shader;
|
||||
|
||||
class SG_EXPORT GL2Extensions : public osg::Referenced
|
||||
{
|
||||
@@ -293,13 +292,6 @@ class SG_EXPORT GL2Extensions : public osg::Referenced
|
||||
void* _glGetHandleARB;
|
||||
};
|
||||
|
||||
class Program;
|
||||
typedef osg::ref_ptr<Program> ProgramPtr;
|
||||
|
||||
class Shader;
|
||||
typedef osg::ref_ptr<Shader> ShaderPtr;
|
||||
typedef std::vector< ShaderPtr > ShaderList;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
/** osg::Program is an application-level abstraction of an OpenGL glProgram.
|
||||
* It is an osg::StateAttribute that, when applied, will activate a
|
||||
@@ -307,12 +299,12 @@ typedef std::vector< ShaderPtr > ShaderList;
|
||||
* osg::Shaders containing the actual shader source code are
|
||||
* attached to a Program, which will then manage the compilation,
|
||||
* linking, and activation of the GLSL program.
|
||||
* Program will automatically manage per-context instancing of the
|
||||
* OpenGL objects, if that is necessary for a particular display
|
||||
* osg::Program will automatically manage per-context instancing of the
|
||||
* OpenGL glPrograms, if that is necessary for a particular display
|
||||
* configuration.
|
||||
*/
|
||||
|
||||
class SG_EXPORT Program : public osg::Object
|
||||
class SG_EXPORT Program : public osg::StateAttribute
|
||||
{
|
||||
public:
|
||||
Program();
|
||||
@@ -320,10 +312,10 @@ class SG_EXPORT Program : public osg::Object
|
||||
/** Copy constructor using CopyOp to manage deep vs shallow copy.*/
|
||||
Program(const Program& rhs, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
|
||||
|
||||
META_Object(osg, Program);
|
||||
META_StateAttribute(osg, Program, PROGRAM);
|
||||
|
||||
/** return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs.*/
|
||||
virtual int compare(const osg::Program& sa) const;
|
||||
virtual int compare(const osg::StateAttribute& sa) const;
|
||||
|
||||
/** If enabled, activate our program in the GL pipeline,
|
||||
* performing any rebuild operations that might be pending. */
|
||||
@@ -336,30 +328,30 @@ class SG_EXPORT Program : public osg::Object
|
||||
State object pointer NULL.*/
|
||||
virtual void releaseGLObjects(osg::State* state=0) const;
|
||||
|
||||
// data access methods.
|
||||
|
||||
/** Mark us as "dirty" and in need of relinking. */
|
||||
/** Mark our PCSOs as needing relink */
|
||||
void dirtyProgram();
|
||||
|
||||
/** Mark our attached Shaders as "dirty" and in need of recompilation. */
|
||||
void dirtyShaders();
|
||||
/** Attach an osg::Shader to this osg::Program.
|
||||
* Mark Program as needing relink. Return true for success */
|
||||
bool addShader( Shader* shader );
|
||||
|
||||
/** Attach a Shader to this Program */
|
||||
void addShader( Shader* shader );
|
||||
/** Remove osg::Shader from this osg::Program.
|
||||
* Mark Program as needing relink. Return true for success */
|
||||
bool removeShader( Shader* shader );
|
||||
|
||||
/** Mark internal GL glProgram for deletion.
|
||||
* Deletion requests are queued until they can be executed
|
||||
* in the proper GL context. */
|
||||
static void deleteProgram(unsigned int contextID, GLuint program);
|
||||
/** */
|
||||
void bindAttribLocation( GLuint index, const char* name );
|
||||
|
||||
/** flush all the cached glPrograms which need to be deleted
|
||||
* in the OpenGL context related to contextID.*/
|
||||
static void flushDeletedGlslObjects(unsigned int contextID,double currentTime, double& availableTime);
|
||||
/** Return true if this Program represents "fixed-functionality" rendering */
|
||||
bool isFixedFunction() const;
|
||||
|
||||
/** An annotation/comment for use by the application */
|
||||
void setComment( const std::string& comment ) { _comment = comment; }
|
||||
void setComment( const char* comment ) { _comment = comment; }
|
||||
const std::string& getComment() const { return _comment; }
|
||||
/** Query InfoLog from a glProgram */
|
||||
void getGlProgramInfoLog(unsigned int contextID, std::string& log) const;
|
||||
|
||||
/** A name for use by the application */
|
||||
void setName( const std::string& name ) { _name = name; }
|
||||
void setName( const char* name ) { _name = name; }
|
||||
const std::string& getName() const { return _name; }
|
||||
|
||||
/** should Uniform values be tested to avoid redundant setting? */
|
||||
void setAvoidRedundantUniformSetting( bool flag ) { _avoidRedundantUniformSetting = flag; }
|
||||
@@ -367,6 +359,15 @@ class SG_EXPORT Program : public osg::Object
|
||||
|
||||
// TODO glBindAttribLocation
|
||||
|
||||
/** Mark internal glProgram for deletion.
|
||||
* Deletion requests are queued until they can be executed
|
||||
* in the proper GL context. */
|
||||
static void deleteGlProgram(unsigned int contextID, GLuint program);
|
||||
|
||||
/** flush all the cached glPrograms which need to be deleted
|
||||
* in the OpenGL context related to contextID.*/
|
||||
static void flushDeletedGlPrograms(unsigned int contextID,double currentTime, double& availableTime);
|
||||
|
||||
|
||||
protected:
|
||||
/** An OSG-internal encapsulation of glProgram's active uniforms */
|
||||
@@ -389,25 +390,26 @@ class SG_EXPORT Program : public osg::Object
|
||||
|
||||
|
||||
protected:
|
||||
/** PCPO is an OSG-internal encapsulation of glPrograms per-GL context. */
|
||||
class PerContextProgObj : public osg::Referenced
|
||||
/** PerContextProgram (PCP) is an OSG-internal encapsulation of glPrograms per-GL context. */
|
||||
class PerContextProgram : public osg::Referenced
|
||||
{
|
||||
public:
|
||||
PerContextProgObj(const Program* program, unsigned int contextID);
|
||||
PerContextProgObj(const PerContextProgObj& rhs);
|
||||
PerContextProgram(const Program* program, unsigned int contextID);
|
||||
|
||||
const GLuint getHandle() {return _glProgramHandle;}
|
||||
GLuint getHandle() const {return _glProgramHandle;}
|
||||
|
||||
bool isDirty() const {return _dirty;}
|
||||
void markAsDirty();
|
||||
void requestLink();
|
||||
void linkProgram();
|
||||
bool needsLink() const {return _needsLink;}
|
||||
bool isLinked() const {return _isLinked;}
|
||||
void getInfoLog( std::string& infoLog ) const;
|
||||
|
||||
void useProgram() const;
|
||||
|
||||
void applyUniforms( osg::State& state ) const;
|
||||
|
||||
protected: /*methods*/
|
||||
PerContextProgObj();
|
||||
~PerContextProgObj();
|
||||
~PerContextProgram();
|
||||
|
||||
protected: /*data*/
|
||||
/** Pointer to our parent Program */
|
||||
@@ -416,30 +418,36 @@ class SG_EXPORT Program : public osg::Object
|
||||
osg::ref_ptr<GL2Extensions> _extensions;
|
||||
/** Handle to the actual OpenGL glProgram */
|
||||
GLuint _glProgramHandle;
|
||||
/** Do we need to be linked? */
|
||||
bool _dirty;
|
||||
/** Queue of UniformValues awaiting assignment */
|
||||
/** Does our glProgram need to be linked? */
|
||||
bool _needsLink;
|
||||
/** Is our glProgram successfully linked? */
|
||||
bool _isLinked;
|
||||
const unsigned int _contextID;
|
||||
/** List of PCPO's active uniforms */
|
||||
/** List of PCP's active uniforms */
|
||||
ActiveUniformList _activeUniformList;
|
||||
|
||||
private:
|
||||
PerContextProgram(); // disallowed
|
||||
PerContextProgram(const PerContextProgram&); // disallowed
|
||||
PerContextProgram& operator=(const PerContextProgram&); // disallowed
|
||||
};
|
||||
|
||||
protected: /*methods*/
|
||||
virtual ~Program();
|
||||
/** Get the PCPO for a particular GL context */
|
||||
PerContextProgObj* getPCPO(unsigned int contextID) const;
|
||||
/** Get the PCP for a particular GL context */
|
||||
PerContextProgram* getPCP(unsigned int contextID) const;
|
||||
|
||||
protected: /*data*/
|
||||
bool _avoidRedundantUniformSetting;
|
||||
std::string _comment;
|
||||
std::string _name;
|
||||
typedef std::vector< ref_ptr<Shader> > ShaderList;
|
||||
ShaderList _shaderList;
|
||||
mutable osg::buffered_value< osg::ref_ptr<PerContextProgObj> > _pcpoList;
|
||||
mutable osg::buffered_value< osg::ref_ptr<PerContextProgram> > _pcpList;
|
||||
|
||||
private:
|
||||
const Program& operator=(const Program&);
|
||||
Program& operator=(const Program&); // disallowed
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2005 Robert Osfield
|
||||
* Copyright (C) 2003-2005 3Dlabs Inc. Ltd.
|
||||
* Copyright (C) 2004-2005 Nathan Cournia
|
||||
*
|
||||
* This application is open source and may be redistributed and/or modified
|
||||
* freely and without restriction, both in commericial and non commericial
|
||||
@@ -10,8 +11,8 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
/* file: include/osg/Program
|
||||
* author: Mike Weiblen 2005-02-20
|
||||
/* file: include/osg/Shader
|
||||
* author: Mike Weiblen 2005-03-23
|
||||
*/
|
||||
|
||||
// NOTICE: This code is CLOSED during construction and/or renovation!
|
||||
@@ -24,6 +25,9 @@
|
||||
#ifndef OSG_SHADER
|
||||
#define OSG_SHADER 1
|
||||
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
||||
#include <osg/Program>
|
||||
|
||||
namespace osg {
|
||||
@@ -32,7 +36,7 @@ namespace osg {
|
||||
/** osg::Shader is an application-level abstraction of an OpenGL glShader.
|
||||
* It is a container to load the shader source code text and manage its
|
||||
* compilation.
|
||||
* A Shader may be attached to more than one osg::Program.
|
||||
* An osg::Shader may be attached to more than one osg::Program.
|
||||
* Shader will automatically manage per-context instancing of the
|
||||
* internal objects, if that is necessary for a particular display
|
||||
* configuration.
|
||||
@@ -44,7 +48,7 @@ class SG_EXPORT Shader : public osg::Object
|
||||
|
||||
enum Type {
|
||||
VERTEX = GL_VERTEX_SHADER,
|
||||
FRAGMENT = GL_FRAGMENT_SHADER,
|
||||
FRAGMENT = GL_FRAGMENT_SHADER
|
||||
};
|
||||
|
||||
Shader( Type type, const char* sourceText = 0 );
|
||||
@@ -52,6 +56,8 @@ class SG_EXPORT Shader : public osg::Object
|
||||
/** Copy constructor using CopyOp to manage deep vs shallow copy.*/
|
||||
Shader(const Shader& rhs, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
|
||||
|
||||
META_Object(osg, Shader); // see note in Shader.cpp Shader()
|
||||
|
||||
int compare(const Shader& rhs) const;
|
||||
|
||||
// data access methods.
|
||||
@@ -71,80 +77,97 @@ class SG_EXPORT Shader : public osg::Object
|
||||
/** Get the Shader type as a descriptive string. */
|
||||
const char* getTypename() const;
|
||||
|
||||
/** Mark us as "dirty" and in need of recompilation */
|
||||
/** Mark our PCSs as needing recompilation.
|
||||
* Also mark Programs that depend on us as needing relink */
|
||||
void dirtyShader();
|
||||
|
||||
/** Mark internal GL glShader for deletion.
|
||||
* Deletion requests are queued until they can be executed
|
||||
* in the proper GL context. */
|
||||
static void deleteShader(unsigned int contextID, GLuint shader);
|
||||
|
||||
/** Perform a recompilation of all our PCSOs */
|
||||
/** If needed, compile the PCS's glShader */
|
||||
void compileShader(unsigned int contextID) const;
|
||||
|
||||
/** For a given GL context, attach a glShader to a glProgram */
|
||||
void attachShader(unsigned int contextID, GLuint program) const;
|
||||
|
||||
/** An annotation/comment for use by the application */
|
||||
void setComment( const std::string& comment ) { _comment = comment; }
|
||||
void setComment( const char* comment ) { _comment = comment; }
|
||||
const std::string& getComment() const { return _comment; };
|
||||
/** Query InfoLog from a glShader */
|
||||
void getGlShaderInfoLog(unsigned int contextID, std::string& log) const;
|
||||
|
||||
/** A name for use by the application */
|
||||
void setName( const std::string& name ) { _name = name; }
|
||||
void setName( const char* name ) { _name = name; }
|
||||
const std::string& getName() const { return _name; };
|
||||
|
||||
/** Mark internal glShader for deletion.
|
||||
* Deletion requests are queued tuntil they can be executed
|
||||
* in the proper GL context. */
|
||||
static void deleteGlShader(unsigned int contextID, GLuint shader);
|
||||
|
||||
/** flush all the cached glShaders which need to be deleted
|
||||
* in the OpenGL context related to contextID.*/
|
||||
static void flushDeletedGlShaders(unsigned int contextID,double currentTime, double& availableTime);
|
||||
|
||||
protected:
|
||||
/** PCSO is an OSG-internal encapsulation of glShader per-GL context. */
|
||||
class PerContextShaderObj : public osg::Referenced
|
||||
/** PerContextShader (PCS) is an OSG-internal encapsulation of glShader per-GL context. */
|
||||
class PerContextShader : public osg::Referenced
|
||||
{
|
||||
public:
|
||||
PerContextShaderObj(const Shader* shader, unsigned int contextID);
|
||||
PerContextShaderObj(const PerContextShaderObj& rhs);
|
||||
PerContextShader(const Shader* shader, unsigned int contextID);
|
||||
|
||||
const GLuint getHandle() {return _glShaderHandle;}
|
||||
GLuint getHandle() const {return _glShaderHandle;}
|
||||
|
||||
bool isDirty() const {return _dirty;}
|
||||
void markAsDirty() {_dirty = true; }
|
||||
void requestCompile();
|
||||
void compileShader();
|
||||
void getInfoLog( std::string& infoLog ) const;
|
||||
|
||||
/** Attach our glShader to a glProgram */
|
||||
void attachShader(GLuint program) const;
|
||||
|
||||
/** Detach our glShader from a glProgram */
|
||||
void detachShader(GLuint program) const;
|
||||
|
||||
protected: /*methods*/
|
||||
PerContextShaderObj();
|
||||
~PerContextShaderObj();
|
||||
~PerContextShader();
|
||||
|
||||
protected: /*data*/
|
||||
/** Pointer to our parent Shader */
|
||||
/** Pointer to our parent osg::Shader */
|
||||
const Shader* _shader;
|
||||
/** Pointer to this context's extension functions. */
|
||||
osg::ref_ptr<GL2Extensions> _extensions;
|
||||
osg::ref_ptr<osg::GL2Extensions> _extensions;
|
||||
/** Handle to the actual glShader. */
|
||||
GLuint _glShaderHandle;
|
||||
/** Do we need to be recompiled? */
|
||||
bool _dirty;
|
||||
/** Does our glShader need to be recompiled? */
|
||||
bool _needsCompile;
|
||||
/** Is our glShader successfully compiled? */
|
||||
bool _isCompiled;
|
||||
const unsigned int _contextID;
|
||||
|
||||
private:
|
||||
PerContextShader(); // disallowed
|
||||
PerContextShader(const PerContextShader&); // disallowed
|
||||
PerContextShader& operator=(const PerContextShader&); // disallowed
|
||||
};
|
||||
|
||||
protected: /*methods*/
|
||||
Shader(); // undesired, temporarily required by META_Object.
|
||||
virtual ~Shader();
|
||||
PerContextShaderObj* getPCSO(unsigned int contextID) const;
|
||||
|
||||
friend void Program::addShader( Shader* shader ); // to access addProgObjRef()
|
||||
void addProgObjRef( Program* program );
|
||||
PerContextShader* getPCS(unsigned int contextID) const;
|
||||
|
||||
friend class Program;
|
||||
bool addProgramRef( Program* program );
|
||||
bool removeProgramRef( Program* program );
|
||||
|
||||
protected: /*data*/
|
||||
const Type _type;
|
||||
std::string _comment;
|
||||
std::string _name;
|
||||
std::string _shaderSource;
|
||||
/** list of Programs that this Shader is attached to */
|
||||
std::vector< ProgramPtr > _programList;
|
||||
mutable osg::buffered_value< osg::ref_ptr<PerContextShaderObj> > _pcsoList;
|
||||
/** osg::Programs that this osg::Shader is attached to */
|
||||
typedef std::set< Program* > ProgramSet;
|
||||
ProgramSet _programSet;
|
||||
mutable osg::buffered_value< osg::ref_ptr<PerContextShader> > _pcsList;
|
||||
|
||||
private:
|
||||
Shader(); // disallowed
|
||||
Shader& operator=(const Shader&); // disallowed
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -184,6 +184,9 @@ class SG_EXPORT StateAttribute : public Object
|
||||
|
||||
// osgNVParse
|
||||
OSGNVPARSE_PROGRAM_PARSER,
|
||||
|
||||
/// core GLSL support
|
||||
PROGRAM
|
||||
};
|
||||
|
||||
/** Simple pairing between an attribute type and the member within that attribute type group.*/
|
||||
|
||||
@@ -259,31 +259,31 @@ class SG_EXPORT StateSet : public Object
|
||||
|
||||
|
||||
|
||||
/** Simple pairing between an attribute and its override flag.*/
|
||||
/** Simple pairing between a Uniform and its override flag.*/
|
||||
typedef std::pair<ref_ptr<Uniform>,StateAttribute::OverrideValue> RefUniformPair;
|
||||
|
||||
/** a container to map <StateAttribyte::Types,Member> to their respective RefAttributePair.*/
|
||||
/** a container to map Uniform name to its respective RefUniformPair.*/
|
||||
typedef std::map<std::string,RefUniformPair> UniformList;
|
||||
|
||||
/** Set this StateSet to contain specified uniform and override flag.*/
|
||||
void setUniform(Uniform* uniform, StateAttribute::OverrideValue value=StateAttribute::OFF);
|
||||
void addUniform(Uniform* uniform, StateAttribute::OverrideValue value=StateAttribute::ON);
|
||||
|
||||
/** remove uniform of specified name from StateSet.*/
|
||||
void removeUniform(const std::string& name);
|
||||
|
||||
/** remove attribute from StateSet.*/
|
||||
void removeUniform(Uniform* attribute);
|
||||
/** remove Uniform from StateSet.*/
|
||||
void removeUniform(Uniform* uniform);
|
||||
|
||||
/** Get Uniform for specified name.
|
||||
* Returns NULL if no matching uniform is contained within StateSet.*/
|
||||
* Returns NULL if no matching Uniform is contained within StateSet.*/
|
||||
Uniform* getUniform(const std::string& name);
|
||||
|
||||
/** Get const Uniform for specified name.
|
||||
* Returns NULL if no matching uniform is contained within StateSet.*/
|
||||
* Returns NULL if no matching Uniform is contained within StateSet.*/
|
||||
const Uniform* getUniform(const std::string& name) const;
|
||||
|
||||
/** Get specified RefUniformPair for specified type.
|
||||
* Returns NULL if no type is contained within StateSet.*/
|
||||
/** Get specified RefUniformPair for specified Uniform name.
|
||||
* Returns NULL if no Uniform is contained within StateSet.*/
|
||||
const RefUniformPair* getUniformPair(const std::string& name) const;
|
||||
|
||||
/** set the list of all Uniforms contained in this StateSet.*/
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
|
||||
/* file: include/osg/Uniform
|
||||
* author: Mike Weiblen 2005-02-20
|
||||
* author: Mike Weiblen 2005-03-23
|
||||
*/
|
||||
|
||||
// NOTICE: This code is CLOSED during construction and/or renovation!
|
||||
@@ -190,13 +190,13 @@ class SG_EXPORT Uniform : public Object
|
||||
//TODO void set( const osg::Matrix3& m3 );
|
||||
void set( const osg::Matrix& m4 );
|
||||
void set( int i );
|
||||
//TODO void set( int i0, int i1 );
|
||||
//TODO void set( int i0, int i1, int i2 );
|
||||
//TODO void set( int i0, int i1, int i2, int i3 );
|
||||
//TODO void set( bool b );
|
||||
//TODO void set( bool b0, bool b1 );
|
||||
//TODO void set( bool b0, bool b1, bool b2 );
|
||||
//TODO void set( bool b0, bool b1, bool b2, bool b3 );
|
||||
void set( int i0, int i1 );
|
||||
void set( int i0, int i1, int i2 );
|
||||
void set( int i0, int i1, int i2, int i3 );
|
||||
void set( bool b );
|
||||
void set( bool b0, bool b1 );
|
||||
void set( bool b0, bool b1, bool b2 );
|
||||
void set( bool b0, bool b1, bool b2, bool b3 );
|
||||
|
||||
|
||||
protected:
|
||||
@@ -231,21 +231,21 @@ class SG_EXPORT Uniform : public Object
|
||||
Uniform( const char* name, Value::Type type );
|
||||
|
||||
/** convenient construction w/ assignment */
|
||||
Uniform( const char* name, float f );
|
||||
explicit Uniform( const char* name, float f );
|
||||
explicit Uniform( const char* name, int i );
|
||||
explicit Uniform( const char* name, bool b );
|
||||
Uniform( const char* name, const osg::Vec2& v2 );
|
||||
Uniform( const char* name, const osg::Vec3& v3 );
|
||||
Uniform( const char* name, const osg::Vec4& v4 );
|
||||
//TODO Uniform( const char* name, const osg::Matrix2& m2 );
|
||||
//TODO Uniform( const char* name, const osg::Matrix3& m3 );
|
||||
Uniform( const char* name, const osg::Matrix& m4 );
|
||||
Uniform( const char* name, int i );
|
||||
//TODO Uniform( const char* name, int i0, int i1 );
|
||||
//TODO Uniform( const char* name, int i0, int i1, int i2 );
|
||||
//TODO Uniform( const char* name, int i0, int i1, int i2, int i3 );
|
||||
//TODO Uniform( const char* name, bool b );
|
||||
//TODO Uniform( const char* name, bool b0, bool b1 );
|
||||
//TODO Uniform( const char* name, bool b0, bool b1, bool b2 );
|
||||
//TODO Uniform( const char* name, bool b0, bool b1, bool b2, bool b3 );
|
||||
Uniform( const char* name, int i0, int i1 );
|
||||
Uniform( const char* name, int i0, int i1, int i2 );
|
||||
Uniform( const char* name, int i0, int i1, int i2, int i3 );
|
||||
Uniform( const char* name, bool b0, bool b1 );
|
||||
Uniform( const char* name, bool b0, bool b1, bool b2 );
|
||||
Uniform( const char* name, bool b0, bool b1, bool b2, bool b3 );
|
||||
|
||||
/** Copy constructor using CopyOp to manage deep vs shallow copy. */
|
||||
Uniform(const Uniform& gu,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
|
||||
@@ -268,20 +268,20 @@ class SG_EXPORT Uniform : public Object
|
||||
|
||||
/** assignment */
|
||||
bool set( float f );
|
||||
bool set( int i );
|
||||
bool set( bool b );
|
||||
bool set( const osg::Vec2& v2 );
|
||||
bool set( const osg::Vec3& v3 );
|
||||
bool set( const osg::Vec4& v4 );
|
||||
//TODO bool set( const osg::Matrix2& m2 );
|
||||
//TODO bool set( const osg::Matrix3& m3 );
|
||||
bool set( const osg::Matrix& m4 );
|
||||
bool set( int i );
|
||||
//TODO bool set( int i0, int i1 );
|
||||
//TODO bool set( int i0, int i1, int i2 );
|
||||
//TODO bool set( int i0, int i1, int i2, int i3 );
|
||||
//TODO bool set( bool b );
|
||||
//TODO bool set( bool b0, bool b1 );
|
||||
//TODO bool set( bool b0, bool b1, bool b2 );
|
||||
//TODO bool set( bool b0, bool b1, bool b2, bool b3 );
|
||||
bool set( int i0, int i1 );
|
||||
bool set( int i0, int i1, int i2 );
|
||||
bool set( int i0, int i1, int i2, int i3 );
|
||||
bool set( bool b0, bool b1 );
|
||||
bool set( bool b0, bool b1, bool b2 );
|
||||
bool set( bool b0, bool b1, bool b2, bool b3 );
|
||||
|
||||
protected:
|
||||
virtual ~Uniform() {}
|
||||
|
||||
Reference in New Issue
Block a user