最佳实践:多次使用相同的着色器

时间:2015-07-27 15:14:24

标签: opengl

我想知道多次重复使用同一个着色器的最佳方法是什么。 我有不同的对象使用相同的着色器。是否可以编译&再次为每个对象链接相同的着色器,或者我应该更好地编译/链接一次?

问题是:OpenGL是否缓存已编译的着色器,还是会再次编译?

如何链接:我应该多次为不同的对象使用一个程序,还是可以用相同的着色器重新编译多个程序?

/** Option 1: Using same equal shaders multiple times **/
int vertexShader1 = loadShader(GL_VERTEX_SHADER, vertexShaderCode);
int vertexShader2 = loadShader(GL_VERTEX_SHADER, vertexShaderCode);
int vertexShader3 = loadShader(GL_VERTEX_SHADER, vertexShaderCode);

int program1 = glCreateProgram();
int program2 = glCreateProgram();
int program3 = glCreateProgram();

glAttachShader(program1, vertexShader1);
glAttachShader(program2, vertexShader2);
glAttachShader(program3, vertexShader3);

glLinkProgram(program1);
glLinkProgram(program2);
glLinkProgram(program3);



/** Option 2: Using same shader multiple times **/
int vertexShader = loadShader(GL_VERTEX_SHADER, vertexShaderCode);
int program1 = glCreateProgram();
int program2 = glCreateProgram();
int program3 = glCreateProgram();

glAttachShader(program1, vertexShader);
glAttachShader(program2, vertexShader);
glAttachShader(program3, vertexShader);

glLinkProgram(program1);
glLinkProgram(program2);
glLinkProgram(program3);



/** Option 3: Reuse program **/
int vertexShader = loadShader(GL_VERTEX_SHADER, vertexShaderCode);

int program = glCreateProgram();

glAttachShader(program, vertexShader);

glLinkProgram(program);

1 个答案:

答案 0 :(得分:1)

如有疑问:尽量减少对象数量并重复使用。切换着色器正在缓解OpenGL中更昂贵的操作,并且依赖驱动程序进行重复数据删除是不好的做法。