Reflection: Fix #977: Expose getBinding(), use in new getUniformBinding().

This commit is contained in:
John Kessenich 2017-07-20 16:44:17 -06:00
parent 0e392aa92e
commit a2b71902e2
3 changed files with 12 additions and 11 deletions

View File

@ -1836,6 +1836,7 @@ const char* TProgram::getUniformName(int index) const { return reflection
const char* TProgram::getUniformBlockName(int index) const { return reflection->getUniformBlock(index).name.c_str(); } const char* TProgram::getUniformBlockName(int index) const { return reflection->getUniformBlock(index).name.c_str(); }
int TProgram::getUniformBlockSize(int index) const { return reflection->getUniformBlock(index).size; } int TProgram::getUniformBlockSize(int index) const { return reflection->getUniformBlock(index).size; }
int TProgram::getUniformIndex(const char* name) const { return reflection->getIndex(name); } int TProgram::getUniformIndex(const char* name) const { return reflection->getIndex(name); }
int TProgram::getUniformBinding(int index) const { return reflection->getUniform(index).getBinding(); }
int TProgram::getUniformBlockIndex(int index) const { return reflection->getUniform(index).index; } int TProgram::getUniformBlockIndex(int index) const { return reflection->getUniform(index).index; }
int TProgram::getUniformBlockCounterIndex(int index) const { return reflection->getUniformBlock(index).counterIndex; } int TProgram::getUniformBlockCounterIndex(int index) const { return reflection->getUniformBlock(index).counterIndex; }
int TProgram::getUniformType(int index) const { return reflection->getUniform(index).glDefineType; } int TProgram::getUniformType(int index) const { return reflection->getUniform(index).glDefineType; }

View File

@ -59,7 +59,15 @@ public:
name(pName), offset(pOffset), name(pName), offset(pOffset),
glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1), type(pType.clone()) { } glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1), type(pType.clone()) { }
void dump() const { const TType* const getType() const { return type; }
int getBinding() const
{
if (type == nullptr || !type->getQualifier().hasBinding())
return -1;
return type->getQualifier().layoutBinding;
}
void dump() const
{
printf("%s: offset %d, type %x, size %d, index %d, binding %d", printf("%s: offset %d, type %x, size %d, index %d, binding %d",
name.c_str(), offset, glDefineType, size, index, getBinding() ); name.c_str(), offset, glDefineType, size, index, getBinding() );
@ -68,8 +76,7 @@ public:
printf("\n"); printf("\n");
} }
static TObjectReflection badReflection() { return TObjectReflection(); }
const TType* const getType() const { return type; }
TString name; TString name;
int offset; int offset;
@ -78,15 +85,7 @@ public:
int index; int index;
int counterIndex; int counterIndex;
static TObjectReflection badReflection() { return TObjectReflection(); }
protected: protected:
int getBinding() const {
if (type == nullptr || type->getQualifier().layoutBinding == TQualifier::layoutBindingEnd)
return -1;
return type->getQualifier().layoutBinding;
}
TObjectReflection() : offset(-1), glDefineType(-1), size(-1), index(-1), type(nullptr) { } TObjectReflection() : offset(-1), glDefineType(-1), size(-1), index(-1), type(nullptr) { }
const TType* type; const TType* type;

View File

@ -619,6 +619,7 @@ public:
const char* getUniformBlockName(int blockIndex) const; // can be used for glGetActiveUniformBlockName() const char* getUniformBlockName(int blockIndex) const; // can be used for glGetActiveUniformBlockName()
int getUniformBlockSize(int blockIndex) const; // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE) int getUniformBlockSize(int blockIndex) const; // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE)
int getUniformIndex(const char* name) const; // can be used for glGetUniformIndices() int getUniformIndex(const char* name) const; // can be used for glGetUniformIndices()
int getUniformBinding(int index) const; // returns the binding number
int getUniformBlockIndex(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX) int getUniformBlockIndex(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
int getUniformBlockCounterIndex(int index) const; // returns block index of associated counter. int getUniformBlockCounterIndex(int index) const; // returns block index of associated counter.
int getUniformType(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE) int getUniformType(int index) const; // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)