热重装glsl着色器

时间:2014-10-23 13:25:45

标签: c++ macos opengl glsl

我花了很多时间调整着色器,我想快速重新加载着色器而不重新编译我的程序。在OpenGL 4.1中热重新加载着色器的官方方法是什么?

这是我目前的(非功能性)方法:

创建一个程序管道,为每个着色器创建一个可分离的程序(现在它只是一个顶点和一个片段)并在管道中使用它。将制服加载到需要它的每个程序中(有没有办法模仿着色器共享的一个统一的旧样式?)

glGenProgramPipelines(1, &programPipeline);
glBindProgramPipeline(programPipeline);   //is this necessary?

auto handle = glCreateShader(type);
const char* src = source.c_str();
glShaderSource(handle, 1, &src, NULL);
glCompileShader(handle);

program[idx] = glCreateProgram();
__glewProgramParameteri(program[idx], GL_PROGRAM_SEPARABLE, GL_TRUE); //xcode auto corrected this for me 
glAttachShader(program[idx], handle);
glLinkProgram(program[idx]);
glDetachShader(program[idx], handle);

glUseProgramStages(programPipeline, shaderStage,
                   program[idx]);

我坚持的部分是如何处理属性。它失败了" GL_INVALID_OPERATION"当我尝试在正常的不可分离程序中启用顶点属性数组时,它可以正常工作。在尝试启用顶点属性数组之前,我已经生成并绑定了一个vao并获得了attrib位置。我发现的在线资源只提到了与可分离程序相关的制服,但没有涉及属性。它们甚至可以用于可分离的程序吗?会有什么替代方案?

0 个答案:

没有答案