opengl
Programma Introspezione
Ricerca…
introduzione
Un certo numero di funzioni degli oggetti del programma può essere recuperato tramite l'API del programma.
Informazioni sugli attributi del vertice
Le informazioni sugli attributi dei vertici possono essere recuperate con la funzione OGL glGetProgram ei parametri GL_ACTIVE_ATTRIBUTES
e GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
.
La posizione di un attributo shader attivo può essere determinata dalla funzione OGL glGetAttribLocation , dall'indice dell'attributo.
GLuint shaderProg = ...;
std::map< std::string, GLint > attributeLocation;
GLint maxAttribLen, nAttribs;
glGetProgramiv( shaderProg, GL_ACTIVE_ATTRIBUTES, &nAttribs );
glGetProgramiv( shaderProg, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &maxAttribLen
GLint written, size;
GLenum type;
std::vector< GLchar >attrName( maxAttribLen );
for( int attribInx = 0; attribInx < nAttribs; attribInx++ )
{
glGetActiveAttrib( shaderProg, attribInx, maxAttribLen, &written, &size, &type, &attrName[0] );
attributeLocation[attrName] = glGetAttribLocation( shaderProg, attrName.data() );
}
Informazioni uniformi
Le informazioni sulle uniformi attive in un programma possono essere recuperate con la funzione OGL glGetProgram ei parametri GL_ACTIVE_UNIFORMS
e GL_ACTIVE_UNIFORM_MAX_LENGTH
.
La posizione di una variabile uniforme shader attiva può essere determinata dalla funzione OGL glGetActiveUniform , dall'indice dell'attributo.
GLuint shaderProg = ...;
std::map< std::string, GLint > unifomLocation;
GLint maxUniformLen, nUniforms;
glGetProgramiv( shaderProg, GL_ACTIVE_UNIFORMS, &nUniforms );
glGetProgramiv( shaderProg, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxUniformLen );
GLint written, size;
GLenum type;
std::vector< GLchar >uniformName( maxUniformLen );
for( int uniformInx = 0; uniformInx < nUniforms; uniformInx++ )
{
glGetActiveUniform( shaderProg, uniformInx, maxUniformLen, &written, &size, &type, &uniformName[0] );
unifomLocation[uniformName] = glGetUniformLocation( shaderProg, uniformName.data() );
}
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow