Init_EvasGL(width, height);
}
+#if defined(NDEBUG)
+#define GL_CHECK_HELPER(code, msg) \
+ ((code), false)
+#else
+static GLenum g_gl_err;
+#define GL_CHECK_HELPER(code, msg) \
+ (((void)(code), ((g_gl_err = evas_gl_api_->glGetError()) == GL_NO_ERROR)) ? false : \
+ ((LOG(ERROR) << "GL Error: " << g_gl_err << " " << msg), true))
+#endif
+
+#define GL_CHECK(code) GL_CHECK_HELPER(code, "")
+#define GL_CHECK_STATUS(msg) GL_CHECK_HELPER(1, msg)
+
RenderWidgetHostViewEfl::~RenderWidgetHostViewEfl() {
if (im_context_)
delete im_context_;
if (context_factory_)
delete context_factory_;
+
+ if (evas_gl_api_)
+ GL_CHECK(evas_gl_api_->glDeleteProgram(program_id_));
}
gfx::Point RenderWidgetHostViewEfl::ConvertPointInViewPix(gfx::Point point) {
" gl_FragColor = texture2D( s_texture, v_texCoord );\n"
"} \n";
-#if defined(NDEBUG)
-#define GL_CHECK_HELPER(code, msg) \
- ((code), false)
-#else
-static GLenum g_gl_err;
-#define GL_CHECK_HELPER(code, msg) \
- (((void)(code), ((g_gl_err = evas_gl_api_->glGetError()) == GL_NO_ERROR)) ? false : \
- ((LOG(ERROR) << "GL Error: " << g_gl_err << " " << msg), true))
-#endif
-
-#define GL_CHECK(code) GL_CHECK_HELPER(code, "")
-#define GL_CHECK_STATUS(msg) GL_CHECK_HELPER(1, msg)
-
static void GLCheckProgramHelper(Evas_GL_API* api, GLuint program,
const char* file, int line) {
GLint status;
api->glGetProgramInfoLog(program, buf_length, &length, log.get());
LOG(ERROR) << "GL program link failed in: " << file << ":" << line
<< ": " << log.get();
+ api->glDeleteProgram(program);
}
}
api->glGetShaderInfoLog(shader, buf_length, &length, log.get());
LOG(ERROR) << "GL shader compile failed in " << file << ":" << line
<< ": " << log.get();
+ api->glDeleteShader(shader);
}
}
GL_CHECK(evas_gl_api_->glAttachShader(program_id_, fragmentShader));
GL_CHECK(evas_gl_api_->glLinkProgram(program_id_));
GLCheckProgram(evas_gl_api_, program_id_);
+ GL_CHECK(evas_gl_api_->glDetachShader(program_id_, vertexShader));
+ GL_CHECK(evas_gl_api_->glDetachShader(program_id_, fragmentShader));
+ GL_CHECK(evas_gl_api_->glDeleteShader(vertexShader));
+ GL_CHECK(evas_gl_api_->glDeleteShader(fragmentShader));
GL_CHECK(position_attrib_ = evas_gl_api_->glGetAttribLocation(program_id_, "a_position"));
GL_CHECK(texcoord_attrib_ = evas_gl_api_->glGetAttribLocation(program_id_, "a_texCoord"));