示例#1
0
enum piglit_result
draw(Display *dpy)
{
    pthread_t draw_thread, load_thread;
    void *draw_ret, *load_ret;
    int ret, i;
    GLXContext my_ctx;

    my_ctx = piglit_get_glx_context_share(dpy, visinfo, NULL);
    draw_ctx = piglit_get_glx_context_share(dpy, visinfo, my_ctx);
    load_ctx = piglit_get_glx_context_share(dpy, visinfo, my_ctx);

    ret = glXMakeCurrent(dpy, draw_win, my_ctx);
    assert(ret);
    piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);

    glEnable(GL_TEXTURE_2D);

    for (i = 0; i < ARRAY_SIZE(texture); ++i) {
        glGenTextures(1, &texture[i].id);
        texture[i].color = -1;
        texture[i].user = NONE;
        glBindTexture(GL_TEXTURE_2D, texture[i].id);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
        GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
        GL_NEAREST);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_width, tex_height,
        0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
    }
    texture[0].user = DRAW;
    texture[1].user = LOAD;

    pthread_mutex_init(&mutex, NULL);

    pthread_create(&draw_thread, NULL, draw_func, NULL);
    pthread_create(&load_thread, NULL, load_func, NULL);

    ret = pthread_join(draw_thread, &draw_ret);
    assert(ret == 0);
    ret = pthread_join(load_thread, &load_ret);
    assert(ret == 0);

    pthread_mutex_destroy(&mutex);

    glXDestroyContext(dpy, load_ctx);
    glXDestroyContext(dpy, draw_ctx);
    glXDestroyContext(dpy, my_ctx);

    return draw_ret && load_ret ? PIGLIT_PASS : PIGLIT_FAIL;
}
示例#2
0
GLXContext
piglit_get_glx_context(Display *dpy, XVisualInfo *visinfo)
{
	return piglit_get_glx_context_share(dpy, visinfo, NULL);
}