Subversion Repositories Kolibri OS

Rev

Rev 4502 | Rev 4523 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4502 Rev 4517
Line 5... Line 5...
5
 
5
 
6
#include "render.h"
6
#include "render.h"
7
#include 
7
#include 
Line -... Line 8...
-
 
8
#include 
Line 8... Line 9...
8
#include 
9
 
9
 
10
void create_mask(struct render *render);
10
 
11
 
Line 240... Line 241...
240
    if(glGetError() != GL_NO_ERROR)
241
    if(glGetError() != GL_NO_ERROR)
241
       goto err7;
242
       goto err7;
Line 242... Line 243...
242
 
243
 
Line -... Line 244...
-
 
244
    glBindTexture(GL_TEXTURE_2D, 0);
-
 
245
 
243
    glBindTexture(GL_TEXTURE_2D, 0);
246
    create_mask(render);
244
 
247
 
245
    glGenFramebuffers(1, &render->framebuffer);
248
    glGenFramebuffers(1, &render->framebuffer);
Line 246... Line 249...
246
    if(glGetError() != GL_NO_ERROR)
249
    if(glGetError() != GL_NO_ERROR)
Line 324... Line 327...
324
        free(info);
327
        free(info);
325
    }
328
    }
Line 326... Line 329...
326
 
329
 
Line -... Line 330...
-
 
330
    render->sampler = glGetUniformLocation(render->blit_prog,"sampler");
-
 
331
 
-
 
332
    glUseProgram(render->blit_prog);
-
 
333
    glUniform1i(render->sampler, 0);
-
 
334
 
-
 
335
    glVertexAttribPointer(0, 2, GL_FLOAT,GL_FALSE, 2 * sizeof(float),render->vertices);
-
 
336
    glEnableVertexAttribArray(0);
-
 
337
 
-
 
338
    glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float),render->texcoords);
327
    render->sampler = glGetUniformLocation(render->blit_prog,"sampler");
339
    glEnableVertexAttribArray(1);
Line 328... Line 340...
328
 
340
 
Line 329... Line 341...
329
    eglMakeCurrent(dpy, surface, surface, context);
341
    eglMakeCurrent(dpy, surface, surface, context);
Line 356... Line 368...
356
    return NULL;
368
    return NULL;
357
};
369
};
Line -... Line 370...
-
 
370
 
-
 
371
 
-
 
372
 
-
 
373
 
-
 
374
void create_mask(struct render *render)
-
 
375
{
-
 
376
    static EGLint attrib[] =
-
 
377
    {
-
 
378
        EGL_GL_TEXTURE_LEVEL_KHR, 0,
-
 
379
        EGL_NONE
-
 
380
    };
-
 
381
    struct drm_i915_gem_mmap mmap_arg;
-
 
382
    EGLint handle, stride;
-
 
383
    int pitch;
-
 
384
    void *data;
-
 
385
 
-
 
386
    glGenTextures(1, &render->tx_mask);
-
 
387
    if(glGetError() != GL_NO_ERROR)
-
 
388
       goto err1;
-
 
389
 
-
 
390
    glBindTexture(GL_TEXTURE_2D, render->tx_mask);
-
 
391
    if(glGetError() != GL_NO_ERROR)
-
 
392
       goto err2;
-
 
393
 
-
 
394
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
-
 
395
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
-
 
396
 
-
 
397
    pitch = (render->width+3) & -4;
-
 
398
 
-
 
399
    data = user_alloc(pitch*render->height);
-
 
400
 
-
 
401
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, render->width, render->height, 0,
-
 
402
                 GL_RED,GL_UNSIGNED_BYTE, data);
-
 
403
 
-
 
404
    user_free(data);
-
 
405
 
-
 
406
    if(glGetError() != GL_NO_ERROR)
-
 
407
       goto err2;
-
 
408
 
-
 
409
    render->mask = eglCreateImageKHR(render->dpy, render->context,
-
 
410
                                     EGL_GL_TEXTURE_2D_KHR,(EGLClientBuffer)render->tx_mask,attrib);
-
 
411
 
-
 
412
    if(render->mask == EGL_NO_IMAGE_KHR)
-
 
413
        goto err2;
-
 
414
 
-
 
415
    if(!eglExportDRMImageMESA(render->dpy, render->mask, NULL, &handle, &stride))
-
 
416
        goto err3;
-
 
417
 
-
 
418
    glBindTexture(GL_TEXTURE_2D, 0);
-
 
419
 
-
 
420
    mmap_arg.handle = handle;
-
 
421
    mmap_arg.offset = 0;
-
 
422
    mmap_arg.size = stride * render->height;
-
 
423
    if (drm_ioctl(render->fd, DRM_IOCTL_I915_GEM_MMAP, &mmap_arg))
-
 
424
    {
-
 
425
        printf("%s: failed to mmap image %p handle=%d, %d bytes, into CPU domain\n",
-
 
426
               __FUNCTION__, render->mask, handle, stride*render->height);
-
 
427
        goto err3;
-
 
428
    }
-
 
429
 
-
 
430
    render->mask_buffer = (void *)(uintptr_t)mmap_arg.addr_ptr;
-
 
431
 
-
 
432
    printf("%s: mmap image %p handle=%d, %d bytes to %p\n",
-
 
433
           __FUNCTION__, render->mask, handle, stride*render->height, render->mask_buffer);
-
 
434
 
-
 
435
    return;
-
 
436
 
-
 
437
err3:
-
 
438
    eglDestroyImageKHR(render->dpy, render->mask);
-
 
439
err2:
-
 
440
    glBindTexture(GL_TEXTURE_2D, 0);