int main(int argc, char const *argv[]) { GLFWwindow* window; glfwSetErrorCallback(error_callback); if(!glfwInit()) return EXIT_FAILURE; #if defined(__APPLE_CC__) 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); #else glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); #endif window = glfwCreateWindow(800, 800, "cg-lab", NULL, NULL); if(!window) { glfwTerminate(); exit(EXIT_FAILURE); } glfwMakeContextCurrent(window); #if defined(_MSC_VER) glewExperimental = true; if (glewInit() != GL_NO_ERROR) { glfwTerminate(); exit(EXIT_FAILURE); } #endif glfwSetKeyCallback(window, key_callback); initialize_shader(); check(__LINE__); initialize_vao(); check(__LINE__); initialize_texture(); check(__LINE__); while(!glfwWindowShouldClose(window)) { draw(window); check(__LINE__); glfwSwapBuffers(window); glfwPollEvents(); } destroy_vao(); check(__LINE__); destroy_shader(); check(__LINE__); destroy_texture(); check(__LINE__); glfwDestroyWindow(window); glfwTerminate(); return EXIT_SUCCESS; }
void renderer::destroy() { destroy_texture(m_deftexset_ID); for (uint l_ID = m_textures.first_ID(); l_ID != bad_ID; l_ID = m_textures.next_ID(l_ID)) { destroy_texture(l_ID); } for (uint l_ID = m_meshes.first_ID(); l_ID != bad_ID; l_ID = m_meshes.next_ID(l_ID)) { destroy_mesh(l_ID); } m_video.kill(m_vformat_ID); m_video.kill(m_memreader_ID); m_video.kill(m_vbuffer_ID); m_video.kill(m_vshader_ID); m_video.kill(m_pshader_ID); m_video.kill(m_vbufset_ID); m_video.kill(m_states_ID); }
static int reinit(struct gl_hwdec *hw, int w, int h) { struct priv *p = hw->priv; GL *gl = hw->mpgl->gl; VAStatus status; destroy_texture(hw); gl->GenTextures(1, &p->gl_texture); gl->BindTexture(GL_TEXTURE_2D, p->gl_texture); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); gl->BindTexture(GL_TEXTURE_2D, 0); status = vaCreateSurfaceGLX(p->display, GL_TEXTURE_2D, p->gl_texture, &p->vaglx_surface); return check_va_status(status, "vaCreateSurfaceGLX()") ? 0 : -1; }
static int reinit(struct gl_hwdec *hw, struct mp_image_params *params) { struct priv *p = hw->priv; GL *gl = hw->gl; destroy_texture(hw); params->imgfmt = hw->driver->imgfmt; gl->GenTextures(1, &p->gl_texture); gl->BindTexture(GL_TEXTURE_2D, p->gl_texture); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); gl->BindTexture(GL_TEXTURE_2D, 0); p->pixmap = XCreatePixmap(p->xdisplay, RootWindow(p->xdisplay, DefaultScreen(p->xdisplay)), params->w, params->h, 24); if (!p->pixmap) { MP_FATAL(hw, "could not create pixmap\n"); return -1; } int attribs[] = { GLX_TEXTURE_TARGET_EXT, GLX_TEXTURE_2D_EXT, GLX_TEXTURE_FORMAT_EXT, GLX_TEXTURE_FORMAT_RGB_EXT, GLX_MIPMAP_TEXTURE_EXT, False, None, }; p->glxpixmap = glXCreatePixmap(p->xdisplay, p->fbc, p->pixmap, attribs); gl->BindTexture(GL_TEXTURE_2D, p->gl_texture); p->glXBindTexImage(p->xdisplay, p->glxpixmap, GLX_FRONT_EXT, NULL); gl->BindTexture(GL_TEXTURE_2D, 0); return 0; }
static int reinit(struct gl_hwdec *hw, const struct mp_image_params *params) { struct priv *p = hw->priv; GL *gl = hw->mpgl->gl; VAStatus status; destroy_texture(hw); gl->GenTextures(1, &p->gl_texture); gl->BindTexture(GL_TEXTURE_2D, p->gl_texture); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, params->w, params->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); gl->BindTexture(GL_TEXTURE_2D, 0); va_lock(p->ctx); status = vaCreateSurfaceGLX(p->display, GL_TEXTURE_2D, p->gl_texture, &p->vaglx_surface); va_unlock(p->ctx); return CHECK_VA_STATUS(p, "vaCreateSurfaceGLX()") ? 0 : -1; }
void destroy_OGL() { destroy_shader(fragShader); destroy_shader(vertexShader); destroy_program(program); clear_attribute(vertPosAttrib); clear_attribute(texCoordAttrib); clear_uniform(colorUni); clear_uniform(diffuseSamplerUni); destroy_texture(whiteTexture); free(whiteTexture); free(program); free(fragShader); free(vertexShader); free(vertPosAttrib); free(texCoordAttrib); free(colorUni); free(diffuseSamplerUni); }
static void destroy(struct gl_hwdec *hw) { struct priv *p = hw->priv; destroy_texture(hw); va_destroy(p->ctx); }
HImage::~HImage() { destroy_texture(); }