28 #include <osg/buffered_value>
29 #include <osg/ref_ptr>
30 #include <osg/Uniform>
32 #include <osg/StateAttribute>
69 virtual void setThreadSafeRefUnref(
bool threadSafe);
72 virtual void compileGLObjects(
osg::State& state)
const;
75 virtual void resizeGLObjectBuffers(
unsigned int maxSize);
80 virtual void releaseGLObjects(
osg::State* state=0)
const;
87 bool addShader(
Shader* shader );
89 unsigned int getNumShaders()
const {
return static_cast<unsigned int>(_shaderList.size()); }
96 bool removeShader(
Shader* shader );
99 void setParameter( GLenum pname, GLint value );
100 GLint getParameter( GLenum pname )
const;
103 void setComputeGroups( GLint numGroupsX, GLint numGroupsY, GLint numGroupsZ );
104 void getComputeGroups( GLint& numGroupsX, GLint& numGroupsY, GLint& numGroupsZ )
const;
107 void addBindAttribLocation(
const std::string& name, GLuint index );
110 void removeBindAttribLocation(
const std::string& name );
113 void addBindFragDataLocation(
const std::string& name, GLuint index );
116 void removeBindFragDataLocation(
const std::string& name );
122 void addBindUniformBlock(
const std::string& name, GLuint index);
125 void removeBindUniformBlock(
const std::string& name);
130 for(std::vector<std::string>::iterator i=_feedbackout.begin(); i!=_feedbackout.end(); i++)
132 if (*i == name) {_feedbackout.erase(i);
break; }
139 _feedbackout.push_back(outname);
180 void allocate(
unsigned int size);
183 void assign(
unsigned int size,
const unsigned char* data);
192 unsigned int getSize()
const {
return static_cast<unsigned int>(_data.size()); }
195 unsigned char*
getData() {
return _data.empty() ? 0 : &(_data.front()); }
198 const unsigned char*
getData()
const {
return _data.empty() ? 0 : &(_data.front()); }
226 bool isFixedFunction()
const;
229 bool getGlProgramInfoLog(
unsigned int contextID, std::string& log)
const;
234 static void deleteGlProgram(
unsigned int contextID, GLuint program);
238 static void flushDeletedGlPrograms(
unsigned int contextID,
double currentTime,
double& availableTime);
244 static void discardDeletedGlPrograms(
unsigned int contextID);
248 ActiveVarInfo( GLint loc, GLenum
type, GLint size ) : _location(loc), _type(type), _size(size) {}
261 : _index(index), _size(size)
293 virtual bool validateProgram();
296 virtual bool getInfoLog( std::string& infoLog )
const;
309 virtual void useProgram()
const;
313 _lastAppliedUniformList.clear();
319 GLint location = getUniformLocation(uniform.
getNameID());
322 const Uniform* lastAppliedUniform = _lastAppliedUniformList[location].first.
get();
323 if (lastAppliedUniform != &uniform)
326 uniform.
apply(_extensions.get(),location);
327 _lastAppliedUniformList[location].first = &uniform;
330 else if (_lastAppliedUniformList[location].second != uniform.
getModifiedCount())
333 uniform.
apply(_extensions.get(),location);
334 _lastAppliedUniformList[location].first = &uniform;
343 inline GLint
getUniformLocation(
unsigned int uniformNameID )
const { ActiveUniformMap::const_iterator itr = _uniformInfoMap.find(uniformNameID);
return (itr!=_uniformInfoMap.end()) ? itr->second._location : -1; }
355 inline GLint
getAttribLocation(
const std::string& name )
const { ActiveVarInfoMap::const_iterator itr = _attribInfoMap.find(name);
return (itr!=_attribInfoMap.end()) ? itr->second._location : -1; }
359 _shadersToAttach.push_back(shader);
364 _shadersToDetach.push_back(shader);
425 void addShaderToAttach(
Shader* shader);
426 void addShaderToDetach(
Shader* shader);
427 bool getGlProgramInfoLog(std::string& log)
const;
ShaderDefines & getShaderDefines()
void apply(const Uniform &uniform) const
PerContextPrograms _perContextPrograms
std::vector< ref_ptr< Shader > > ShaderList
unsigned int getNumTransformFeedBackVaryings() const
GLint getAttribLocation(const std::string &name) const
std::vector< unsigned char > _data
const ShaderDefines & getShaderDefines() const
std::map< std::string, ActiveVarInfo > ActiveVarInfoMap
ShaderList _shadersToDetach
osg::buffered_value< osg::ref_ptr< ProgramObjects > > _pcpList
std::vector< osg::ref_ptr< PerContextProgram > > PerContextPrograms
const Shader * getShader(unsigned int i) const
ActiveVarInfo(GLint loc, GLenum type, GLint size)
const ActiveUniformMap & getActiveUniforms() const
std::set< std::string > ShaderDefines
const std::string & getTransformFeedBackVarying(unsigned int i) const
void setDefineString(const std::string &defStr)
const UniformBlockMap & getUniformBlocks() const
GLint _geometryOutputType
const ActiveVarInfoMap & getActiveAttribs() const
LastAppliedUniformList _lastAppliedUniformList
void resetAppliedUniforms() const
bool loadedBinary() const
FragDataBindingList _fragDataBindingList
unsigned int getSize() const
std::map< unsigned int, UniformModifiedCountPair > LastAppliedUniformList
osg::ref_ptr< GLExtensions > _extensions
void setShaderDefines(const ShaderDefines &shaderDefs)
#define META_Object(library, name)
ProgramBinary * getProgramBinary()
std::map< std::string, UniformBlockInfo > UniformBlockMap
void setProgramBinary(ProgramBinary *programBinary)
GLint _geometryVerticesOut
ActiveVarInfoMap _attribInfoMap
void addShaderToAttach(Shader *shader)
ActiveUniformMap _uniformInfoMap
ShaderDefines _shaderDefines
const ProgramBinary * getProgramBinary() const
GLint getUniformLocation(unsigned int uniformNameID) const
std::vector< std::string > _feedbackout
osg::ref_ptr< ProgramBinary > _programBinary
void removeTransformFeedBackVarying(const std::string &name)
UniformBlockMap _uniformBlockMap
const UniformBlockBindingList & getUniformBlockBindingList() const
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
#define META_StateAttribute(library, name, type)
void setFormat(GLenum format)
Shader * getShader(unsigned int i)
UniformBlockBindingList _uniformBlockBindingList
const std::string & getDefineString() const
unsigned int getNumShaders() const
std::pair< osg::ref_ptr< const osg::Uniform >, unsigned int > UniformModifiedCountPair
ShaderList _shadersToAttach
std::map< std::string, GLuint > AttribBindingList
void addTransformFeedBackVarying(const std::string &outname)
const unsigned char * getData() const
void addShaderToDetach(Shader *shader)
GLenum getTransformFeedBackMode() const
const FragDataBindingList & getFragDataBindingList() const
GLint getUniformLocation(const std::string &uniformName) const
const AttribBindingList & getAttribBindingList() const
void setTransformFeedBackMode(GLenum e)
const osg::Program * getProgram() const
std::map< std::string, GLuint > FragDataBindingList
AttribBindingList _attribBindingList
const unsigned int _contextID
unsigned char * getData()
std::vector< ref_ptr< Shader > > ShaderList
std::map< std::string, GLuint > UniformBlockBindingList
std::map< unsigned int, ActiveVarInfo > ActiveUniformMap
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum format