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