opengl
プログラムイントロスペクション
サーチ…
前書き
プログラムオブジェクトのいくつかの機能は、プログラムAPIを通して取り出すことができます。
頂点属性情報
頂点属性に関する情報は、OGL関数glGetProgramとパラメータGL_ACTIVE_ATTRIBUTES
およびGL_ACTIVE_ATTRIBUTE_MAX_LENGTH
使用して取得できます。
アクティブなシェーダアトリビュートの位置は、OGL関数glGetAttribLocationによって、アトリビュートのインデックスによって決定することができます。
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() );
}
統一情報
プログラム内のアクティブユニフォームに関する情報は、OGL関数glGetProgramとパラメータGL_ACTIVE_UNIFORMS
およびGL_ACTIVE_UNIFORM_MAX_LENGTH
使用して取得できます。
アクティブなシェーダーユニフォーム変数の位置は、OGL関数glGetActiveUniformによって、属性のインデックスによって決定できます。
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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow