bool initTexture()
	{
		gli::texture2d Texture(gli::load_dds((getDataDirectory() + TEXTURE_DIFFUSE).c_str()));
		gli::gl GL;
		gli::gl::format const Format = GL.translate(Texture.format());

		glGenTextures(texture::MAX, TextureName);
		glActiveTexture(GL_TEXTURE0);
		glBindTexture(GL_TEXTURE_2D, TextureName[texture::DIFFUSE]);
		for(std::size_t Level = 0; Level < Texture.levels(); ++Level)
		{
			glTexImage2D(GL_TEXTURE_2D, GLint(Level),
				Format.Internal,
				GLsizei(Texture[Level].extent().x), GLsizei(Texture[Level].extent().y),
				0,
				Format.External, Format.Type,
				Texture[Level].data());
		}
		glBindTexture(GL_TEXTURE_2D, 0);

		glBindTexture(GL_TEXTURE_RENDERBUFFER_NV, TextureName[texture::COLOR]);
		glTexRenderbufferNV(GL_TEXTURE_RENDERBUFFER_NV, RenderbufferName[renderbuffer::COLOR]);
		glBindTexture(GL_TEXTURE_RENDERBUFFER_NV, 0);

		return this->checkError("initTexture");
	}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_NVExplicitMultisample_glTexRenderbufferNV(JNIEnv *__env, jclass clazz, jint target, jint renderbuffer) {
    glTexRenderbufferNVPROC glTexRenderbufferNV = (glTexRenderbufferNVPROC)tlsGetFunction(1919);
    UNUSED_PARAM(clazz)
    glTexRenderbufferNV(target, renderbuffer);
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_NVExplicitMultisample_nglTexRenderbufferNV(JNIEnv *env, jclass clazz, jint target, jint renderbuffer, jlong function_pointer) {
	glTexRenderbufferNVPROC glTexRenderbufferNV = (glTexRenderbufferNVPROC)((intptr_t)function_pointer);
	glTexRenderbufferNV(target, renderbuffer);
}