GLSL着色器类帧速率问题
GLSL shader class framerate issues
VC++2010、SDL、OpenGL、GLSL
我正在研究这个类,作为一种在着色器之间快速轻松切换的方法。它似乎工作正常(功能方面(,但在实现后帧速率严重下降(从60下降到40(。希望你们能给我指明正确的方向。
以下是我目前所拥有的:
namespace SL {
struct Shader_Manager {
struct shader_vect {
GLuint shader_type;
GLuint shader_handle;
char * filename;
};
struct search_vect
{
std::string target;
bool operator()(const shader_vect& vect) const
{
return vect.filename == target;
}
};
GLuint prog;
std::vector <shader_vect> shader_list;
GLuint vertex_shader;
GLuint fragment_shader;
Shader_Manager() {
prog = glCreateProgram();
};
~Shader_Manager() {};
void load(char * filename, int type) {
shader_vect shader;
shader.filename = filename;
shader.shader_type = type;
shader.shader_handle = glCreateShader(type);
char * fs = textFileRead(filename);
const char * vv = fs;
glShaderSource(shader.shader_handle, 1, &vv, NULL);
free(fs);
glCompileShader(shader.shader_handle);
shader_list.push_back(shader);
}
void use(char * filename) {
search_vect search;
search.target = filename;
std::vector<shader_vect>::iterator it =
std::find_if(shader_list.begin(), shader_list.end(), search);
glAttachShader(prog, it->shader_handle);
glLinkProgram(prog);
glUseProgram(prog);
}
void end() {
glLinkProgram(0);
glUseProgram(0);
}
};
} // namespace SL
在我的主要功能中,我这样使用它:
SL::Shader_Manager SLManager;
SLManager.load("shader.frag", GL_FRAGMENT_SHADER);
在我正在做的游戏循环中:
SLManager.use("shader.frag");
makeSphere();
SLManager.end();
我没有适当地腾出一些资源吗?任何帮助都将不胜感激,谢谢!
每次切换时链接程序都是错误的。您应该创建尽可能多的程序,所有着色器对象,然后链接您需要的所有内容。然后只需在交换机上调用glUseProgram
(可能有一个调试模式,该模式会调用glGet(GL_CURRENT_PROGRAM)
并对不必要的交换机发出警报,因为这些交换机本质上是错误
您不应该在每次循环迭代中不断链接/使用着色器。只有当你需要从一个切换到另一个时才这样做。
SLManager.use("shader.frag");
loop {
makeSphere();
}
SLManager.end();
此外,不要使用字符串来引用着色器。创建对象并将其传递给管理器。
相关文章:
- 使用专用显卡进行 OpenGL 渲染时帧速率较低
- 在打开多个其他窗口时使用全屏窗口时帧速率非常低
- 如何在IQualProp::get_AvgFrameRate中重置帧速率?
- 如何在不同的线程中保持一定的帧速率
- 根据帧速率缩放/缩小数字
- 将Kinect v2帧速率(rgb、深度、骨架)设置为每秒25帧
- 直接显示返回错误的帧速率 FPS
- SDL 帧速率上限实施
- 在 OpenGL 中,在保持良好帧速率的同时,VBO 中有多少个顶点的好目标是什么
- 视频流控制帧速率x264
- 使用C (Linux)更改BlueFox3相机的流帧速率
- EDSDK 捕获高帧速率
- OPENCV C 多线程以改善帧速率
- SDL 2.0 中是否内置了帧速率上限
- OpenGL:在立方体内部时帧速率直线下降
- 使用背景扣除MOG2时,帧速率下降
- 设置帧速率?这是个好主意吗
- 快板帧速率问题
- 游戏循环帧速率控制问题
- GLSL着色器类帧速率问题