3.OpenCLの利用
美顔、ステッカー、フィルターおよびメークアップ効果の実現にOpenGLの利用が必要です。
3.1 OpenGLの初期化
inline bool InitGL() {
glfwSetErrorCallback(PrintglfwError);
bool bGLInited = false;
if (!window) {
try {
int err = 0;
#ifdef WIN32
if (opengl_check()) {
#endif
err = glfwInit();
if (!err) {
throw "OpenGL: fail to create window context!";
}
// Create a offscream mode window and its OpenGL context
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
window = glfwCreateWindow(10, 10, "hello", NULL, NULL);
#ifdef WIN32
}
#endif
if (!window) {
#ifdef WIN32
MesaOpenGL();
#else
throw "OpenGL: fail to init glfw";
#endif
}
else {
// Make the window's context current
glfwMakeContextCurrent(window);
#ifdef WIN32
err = gl3wInit();
if (err != GL3W_OK) {
MesaOpenGL();
}
#else
glewExperimental = GL_TRUE;
err = glewInit();
if (err != GLEW_OK) {
throw "OpenGL: fail to init glew\n";
}
#endif
}
const unsigned char* glVer = glGetString(GL_VERSION);
const unsigned char* glslVer = glGetString(GL_SHADING_LANGUAGE_VERSION);
float OpenglVersion = 0.f, GLSLVersion = 0.f;
StringTo((char*)glVer, OpenglVersion);
StringTo((char*)glslVer, GLSLVersion);
fprintf(stdout, "Renderer: %s\n", glGetString(GL_RENDERER));
fprintf(stdout, "OpenGL version supported %s\n", glGetString(GL_VERSION));
fprintf(stdout, "OpenGLSL version supported %s\n",
glGetString(GL_SHADING_LANGUAGE_VERSION));
if (OpenglVersion <2.1f || GLSLVersion < 1.2f) {
throw "OpenGL version is too old, we only support above opengl2.1 and glsl1.2.0";
}
bGLInited = true;
}
catch (std::exception &e){
fprintf(stderr, "%s\n", e.what());
}
catch (const char* e){
fprintf(stderr, "%s\n", e);
}
catch (...) {
return false;
} }
else {
GLFWwindow* curCtx = glfwGetCurrentContext();
if (!curCtx)
glfwMakeContextCurrent(window);
bGLInited = true;
}
return bGLInited;
}
3.2 OpenGLレンダリング効果の利用
3.2.1 テクスチャバンディング
3.2.2 エフェクトレンダリング
3.3 OpenGLのクローズ
Last updated