現在、C++とGLFWを用いてOpenGLのプログラムを書いているのですが、
ただ簡単な描画をするだけのプログラムなのにCPUの負荷があまりにも大きく
(Core i5 2.0GHzで100%になってします)使い物になりません。
ネットで調べるとglfwSwapBuffersという
関数が悪さをしているらしいのですが
スリープの関数で一時的に動きを止めても
glFinishという関数を用いても
負荷が大きいです。
一体どのような対策を行えば良いのでしょうか?
よろしくお願いします
#include <iostream> #include <GLFW/glfw3.h> int main() { if (glfwInit() == GL_FALSE) { std::cerr << "Can't initilize GLFW" << std::endl; return 1; } //glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); //glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); //glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); GLFWwindow *const window = glfwCreateWindow(640, 480, "SAMPLE", NULL, NULL); if (window == nullptr) { std::cerr << "Can't create GLFW window." << std::endl; glfwTerminate(); return 1; } glfwMakeContextCurrent(window); glClearColor(0.0f, 0.5f, 0.0f, 0.0f); while (glfwWindowShouldClose(window) == GL_FALSE) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLE_STRIP); glVertex3f(0.0f, 0.0f, 0.0f); glColor4d(1, 0, 0, 0.5); glVertex3d(-1, 0, 0); glVertex3d(1, 0, 0); glVertex3d(0, 0.87, 0); glColor4d(0, 1, 0, 0.5); glVertex3d(0, 0, 1.67); glEnd(); glfwSwapBuffers(window); glfwWaitEvents(); } glfwTerminate(); }
追記 回答を元にやってみたのですが、それでも10%程のCPUの負担があります。
タスクマネージャを開くとexeそのものにCPU負担は1%以下と負担がかかっておらず、他の部分でCPUの負担があるようです。
OSはWindows 10 64bit、開発環境はVisual studio 2015、コンパイル環境はx64のDebugです
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/09 12:09