91 unsigned int getNumShaders()
const {
return static_cast<unsigned int>(_shaderList.size()); }
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);
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()); }
233 ActiveVarInfo( GLint loc, GLenum type, GLint size ) : _location(loc), _type(type), _size(size) {}
246 : _index(index), _size(size)
298 _lastAppliedUniformList.clear();
304 GLint location = getUniformLocation(uniform.
getNameID());
307 const Uniform* lastAppliedUniform = _lastAppliedUniformList[location].first.
get();
308 if (lastAppliedUniform != &uniform)
311 uniform.
apply(_extensions.get(),location);
312 _lastAppliedUniformList[location].first = &uniform;
315 else if (_lastAppliedUniformList[location].second != uniform.
getModifiedCount())
318 uniform.
apply(_extensions.get(),location);
319 _lastAppliedUniformList[location].first = &uniform;
328 inline GLint
getUniformLocation(
unsigned int uniformNameID )
const { ActiveUniformMap::const_iterator itr = _uniformInfoMap.find(uniformNameID);
return (itr!=_uniformInfoMap.end()) ? itr->second._location : -1; }
340 inline GLint
getAttribLocation(
const std::string& name )
const { ActiveVarInfoMap::const_iterator itr = _attribInfoMap.find(name);
return (itr!=_attribInfoMap.end()) ? itr->second._location : -1; }
344 _shadersToAttach.push_back(shader);
349 _shadersToDetach.push_back(shader);
#define GL_INVALID_INDEX
Definition GLDefines:320
@ SHALLOW_COPY
Definition CopyOp:47
Definition osg/Program:264
bool _needsLink
Definition osg/Program:368
PerContextProgram(const Program *program, unsigned int contextID, GLuint programHandle=0)
void addShaderToDetach(Shader *shader)
Definition osg/Program:347
bool isLinked() const
Definition osg/Program:280
UniformBlockMap _uniformBlockMap
Definition osg/Program:381
void apply(const Uniform &uniform) const
Definition osg/Program:302
const std::string & getDefineString() const
Definition osg/Program:274
std::vector< ref_ptr< Shader > > ShaderList
Definition osg/Program:387
virtual bool getInfoLog(std::string &infoLog) const
void setDefineString(const std::string &defStr)
Definition osg/Program:273
GLint getAttribLocation(const std::string &name) const
Definition osg/Program:340
bool _loadedBinary
Definition osg/Program:372
std::string _defineStr
Definition osg/Program:365
LastAppliedUniformList _lastAppliedUniformList
Definition osg/Program:385
std::map< unsigned int, UniformModifiedCountPair > LastAppliedUniformList
Definition osg/Program:384
virtual ~PerContextProgram()
virtual void useProgram() const
void resetAppliedUniforms() const
Definition osg/Program:296
virtual ProgramBinary * compileProgramBinary(osg::State &state)
std::pair< osg::ref_ptr< const osg::Uniform >, unsigned int > UniformModifiedCountPair
Definition osg/Program:383
osg::ref_ptr< GLExtensions > _extensions
Definition osg/Program:359
bool _isLinked
Definition osg/Program:370
ActiveVarInfoMap _attribInfoMap
Definition osg/Program:380
GLint getUniformLocation(const std::string &uniformName) const
Definition osg/Program:338
const unsigned int _contextID
Definition osg/Program:374
bool needsLink() const
Definition osg/Program:279
bool _ownsProgramHandle
Definition osg/Program:377
const UniformBlockMap & getUniformBlocks() const
Definition osg/Program:327
ShaderList _shadersToAttach
Definition osg/Program:389
const ActiveUniformMap & getActiveUniforms() const
Definition osg/Program:325
virtual bool validateProgram()
const osg::Program * getProgram() const
Definition osg/Program:271
GLuint _glProgramHandle
Definition osg/Program:362
void addShaderToAttach(Shader *shader)
Definition osg/Program:342
GLint getUniformLocation(unsigned int uniformNameID) const
Definition osg/Program:328
ActiveUniformMap _uniformInfoMap
Definition osg/Program:379
const Program * _program
Definition osg/Program:357
ShaderList _shadersToDetach
Definition osg/Program:388
bool loadedBinary() const
Definition osg/Program:284
const ActiveVarInfoMap & getActiveAttribs() const
Definition osg/Program:326
GLuint getHandle() const
Definition osg/Program:269
virtual void linkProgram(osg::State &state)
Definition osg/Program:169
unsigned char * getData()
Definition osg/Program:195
GLenum _format
Definition osg/Program:202
GLenum getFormat() const
Definition osg/Program:189
void assign(unsigned int size, const unsigned char *data)
void setFormat(GLenum format)
Definition osg/Program:186
ProgramBinary(const ProgramBinary &rhs, const osg::CopyOp ©op=osg::CopyOp::SHALLOW_COPY)
unsigned int getSize() const
Definition osg/Program:192
void allocate(unsigned int size)
const unsigned char * getData() const
Definition osg/Program:198
std::vector< unsigned char > _data
Definition osg/Program:201
META_Object(osg, ProgramBinary)
Definition osg/Program:52
unsigned int getNumShaders() const
Definition osg/Program:91
std::map< std::string, GLuint > UniformBlockBindingList
Definition osg/Program:219
Shader * getShader(unsigned int i)
Definition osg/Program:93
virtual void apply(osg::State &state) const
void addTransformFeedBackVarying(const std::string &outname)
Definition osg/Program:137
ShaderDefines & getShaderDefines()
Definition osg/Program:156
GLint _geometryOutputType
Definition osg/Program:436
osg::ref_ptr< ProgramBinary > _programBinary
Definition osg/Program:431
virtual void releaseGLObjects(osg::State *state=0) const
std::map< std::string, GLuint > FragDataBindingList
Definition osg/Program:218
bool addShader(const ref_ptr< T > &shader)
Definition osg/Program:89
std::map< std::string, GLuint > AttribBindingList
Definition osg/Program:217
GLenum getTransformFeedBackMode() const
Definition osg/Program:152
void addBindFragDataLocation(const std::string &name, GLuint index)
GLenum _feedbackmode
Definition osg/Program:439
const ShaderDefines & getShaderDefines() const
Definition osg/Program:157
UniformBlockBindingList _uniformBlockBindingList
Definition osg/Program:426
virtual int compare(const osg::StateAttribute &sa) const
ShaderList _shaderList
Definition osg/Program:429
std::vector< ref_ptr< Shader > > ShaderList
Definition osg/Program:428
bool isFixedFunction() const
virtual void setThreadSafeRefUnref(bool threadSafe)
Program(const Program &rhs, const osg::CopyOp ©op=osg::CopyOp::SHALLOW_COPY)
const Shader * getShader(unsigned int i) const
Definition osg/Program:94
const std::string & getTransformFeedBackVarying(unsigned int i) const
Definition osg/Program:146
void removeBindAttribLocation(const std::string &name)
AttribBindingList _attribBindingList
Definition osg/Program:424
bool addShader(Shader *shader)
void removeBindFragDataLocation(const std::string &name)
void addBindUniformBlock(const std::string &name, GLuint index)
GLint _geometryInputType
Definition osg/Program:435
FragDataBindingList _fragDataBindingList
Definition osg/Program:425
unsigned int getNumTransformFeedBackVaryings() const
Definition osg/Program:143
std::vector< std::string > _feedbackout
Definition osg/Program:440
void setTransformFeedBackMode(GLenum e)
Definition osg/Program:149
ProgramBinary * getProgramBinary()
Definition osg/Program:212
void removeBindUniformBlock(const std::string &name)
std::map< std::string, ActiveVarInfo > ActiveVarInfoMap
Definition osg/Program:239
bool removeShader(Shader *shader)
void removeTransformFeedBackVarying(const std::string &name)
Definition osg/Program:128
PerContextProgram * getPCP(State &state) const
virtual void resizeGLObjectBuffers(unsigned int maxSize)
void setProgramBinary(ProgramBinary *programBinary)
Definition osg/Program:209
GLint getParameter(GLenum pname) const
const ProgramBinary * getProgramBinary() const
Definition osg/Program:215
const UniformBlockBindingList & getUniformBlockBindingList() const
Definition osg/Program:223
osg::buffered_value< osg::ref_ptr< ProgramObjects > > _pcpList
Definition osg/Program:423
bool removeShader(const ref_ptr< T > &shader)
Definition osg/Program:100
void setParameter(GLenum pname, GLint value)
void addBindAttribLocation(const std::string &name, GLuint index)
virtual void compileGLObjects(osg::State &state) const
GLint _geometryVerticesOut
Definition osg/Program:434
META_StateAttribute(osg, Program, PROGRAM)
std::map< unsigned int, ActiveVarInfo > ActiveUniformMap
Definition osg/Program:238
const AttribBindingList & getAttribBindingList() const
Definition osg/Program:221
const FragDataBindingList & getFragDataBindingList() const
Definition osg/Program:222
void setShaderDefines(const ShaderDefines &shaderDefs)
Definition osg/Program:155
std::map< std::string, UniformBlockInfo > UniformBlockMap
Definition osg/Program:252
bool getGlProgramInfoLog(unsigned int contextID, std::string &log) const
ShaderDefines _shaderDefines
Definition osg/Program:442
Definition StateAttribute:77
Definition buffered_value:27
T * get() const
Definition ref_ptr:117
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
std::set< std::string > ShaderDefines
Definition Shader:37
#define OSG_EXPORT
Definition osg/Export:39
Definition osg/Program:231
ActiveVarInfo(GLint loc, GLenum type, GLint size)
Definition osg/Program:233
GLint _location
Definition osg/Program:234
ActiveVarInfo()
Definition osg/Program:232
GLint _size
Definition osg/Program:236
GLenum _type
Definition osg/Program:235
Definition osg/Program:398
PerContextProgram * getPCP(const std::string &defineStr) const
PerContextPrograms _perContextPrograms
Definition osg/Program:405
std::vector< osg::ref_ptr< PerContextProgram > > PerContextPrograms
Definition osg/Program:399
bool getGlProgramInfoLog(std::string &log) const
void addShaderToAttach(Shader *shader)
unsigned int _contextID
Definition osg/Program:403
ProgramObjects(const Program *program, unsigned int contextID)
void addShaderToDetach(Shader *shader)
const Program * _program
Definition osg/Program:404
PerContextProgram * createPerContextProgram(const std::string &defineStr)