片段着色器输出的数量
Number of fragment shader outputs
OpenGL 是否提供 API 以获得片段着色器输出的数量?
我找到了 glBindFragDataLocation
、glBindFragDataLocationIndexed
、glGetFragDataIndex
和 glGetFragDataLocation
等函数,但所有这些函数都是为了设置 FragData 的索引或位置而设计的名字.
我想我正在寻找类似 glGetProgram(handle, GL_NUM_FRAGDATA, &i)
的东西。有什么想法吗?
获取制服数量和属性非常相似API:
glGetProgramiv(handle, GL_ACTIVE_UNIFORMS, &numUniforms)
glGetProgramiv(handle, GL_ACTIVE_ATTRIBUTES, &numAttribs)
提前致谢。
API 关于程序接口的部分正是您要查找的内容:
int num_frag_outputs; //Where GL will write the number of outputs
glGetProgramInterfaceiv(program_handle, GL_PROGRAM_OUTPUT,
GL_ACTIVE_RESOURCES, &num_frag_outputs);
//Now you can query for the names and indices of the outputs
for (int i = 0; i < num_frag_outs; i++)
{
int identifier_length;
char identifier[128]; //Where GL will write the variable name
glGetProgramResourceName(program_handle, GL_PROGRAM_OUTPUT,
i, 128, &identifier_length, identifier);
if (identifier_length > 128) {
//If this happens then the variable name had more than 128 characters
//You will need to query again with an array of size identifier_length
}
unsigned int output_index = glGetProgramResourceIndex(program_handle,
GL_PROGRAM_OUTPUT, identifier);
//Use output_index to bind data to the parameter called identifier
}
您使用 GL_PROGRAM_OUTPUT 指定您想要最终着色器阶段的输出。使用其他值,您可以查询其他程序接口以查找来自其他阶段的着色器输出。查看 OpenGL 4.5 规范的第 7.3.1 节了解更多信息。
OpenGL 是否提供 API 以获得片段着色器输出的数量?
我找到了 glBindFragDataLocation
、glBindFragDataLocationIndexed
、glGetFragDataIndex
和 glGetFragDataLocation
等函数,但所有这些函数都是为了设置 FragData 的索引或位置而设计的名字.
我想我正在寻找类似 glGetProgram(handle, GL_NUM_FRAGDATA, &i)
的东西。有什么想法吗?
获取制服数量和属性非常相似API:
glGetProgramiv(handle, GL_ACTIVE_UNIFORMS, &numUniforms)
glGetProgramiv(handle, GL_ACTIVE_ATTRIBUTES, &numAttribs)
提前致谢。
API 关于程序接口的部分正是您要查找的内容:
int num_frag_outputs; //Where GL will write the number of outputs
glGetProgramInterfaceiv(program_handle, GL_PROGRAM_OUTPUT,
GL_ACTIVE_RESOURCES, &num_frag_outputs);
//Now you can query for the names and indices of the outputs
for (int i = 0; i < num_frag_outs; i++)
{
int identifier_length;
char identifier[128]; //Where GL will write the variable name
glGetProgramResourceName(program_handle, GL_PROGRAM_OUTPUT,
i, 128, &identifier_length, identifier);
if (identifier_length > 128) {
//If this happens then the variable name had more than 128 characters
//You will need to query again with an array of size identifier_length
}
unsigned int output_index = glGetProgramResourceIndex(program_handle,
GL_PROGRAM_OUTPUT, identifier);
//Use output_index to bind data to the parameter called identifier
}
您使用 GL_PROGRAM_OUTPUT 指定您想要最终着色器阶段的输出。使用其他值,您可以查询其他程序接口以查找来自其他阶段的着色器输出。查看 OpenGL 4.5 规范的第 7.3.1 节了解更多信息。