Rev 4526 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4526 | Rev 4768 | ||
---|---|---|---|
Line 74... | Line 74... | ||
74 | printf("Failed to compile %s: %s\n", |
74 | printf("Failed to compile %s: %s\n", |
75 | type == GL_FRAGMENT_SHADER ? "FS" : "VS",info); |
75 | type == GL_FRAGMENT_SHADER ? "FS" : "VS",info); |
76 | printf("Program source:\n%s", source); |
76 | printf("Program source:\n%s", source); |
77 | printf("GLSL compile failure\n"); |
77 | printf("GLSL compile failure\n"); |
78 | free(info); |
78 | free(info); |
79 | glDeleteProgram(shader); |
79 | glDeleteShader(shader); |
80 | shader = 0; |
80 | shader = 0; |
81 | } |
81 | } |
82 | err: |
82 | err: |
83 | return shader; |
83 | return shader; |
84 | } |
84 | } |
Line 323... | Line 323... | ||
323 | 323 | ||
324 | glGetProgramInfoLog(render->blit_prog, size, NULL, info); |
324 | glGetProgramInfoLog(render->blit_prog, size, NULL, info); |
325 | printf("Failed to link: %s\n", info); |
325 | printf("Failed to link: %s\n", info); |
326 | printf("GLSL link failure\n"); |
326 | printf("GLSL link failure\n"); |
- | 327 | free(info); |
|
327 | free(info); |
328 | goto err12; |
Line 328... | Line 329... | ||
328 | } |
329 | } |
329 | 330 | ||
Line 363... | Line 364... | ||
363 | 364 | ||
Line 364... | Line 365... | ||
364 | eglMakeCurrent(dpy, surface, surface, context); |
365 | eglMakeCurrent(dpy, surface, surface, context); |
Line -... | Line 366... | ||
- | 366 | ||
- | 367 | return render; |
|
365 | 368 | ||
366 | return render; |
369 | err12: |
367 | 370 | glDeleteShader(fs_shader); |
|
368 | err11: |
371 | err11: |
369 | glDeleteShader(vs_shader); |
372 | glDeleteShader(vs_shader); |
Line 390... | Line 393... | ||
390 | err: |
393 | err: |
391 | return NULL; |
394 | return NULL; |
392 | }; |
395 | }; |
Line 393... | Line -... | ||
393 | - | ||
394 | - | ||
395 | 396 | ||
396 | 397 | ||
397 | void create_mask(struct render *render) |
398 | void create_mask(struct render *render) |
- | 399 | { |
|
398 | { |
400 | struct drm_i915_gem_create create; |
Line 399... | Line 401... | ||
399 | struct drm_i915_gem_create create; |
401 | struct drm_gem_close close; |
400 | struct drm_gem_flink flink; |
402 | struct drm_gem_flink flink; |
401 | 403 | ||
402 | struct drm_i915_gem_mmap mmap_arg; |
404 | struct drm_i915_gem_mmap mmap_arg; |
403 | EGLint handle, stride; |
405 | EGLint handle, stride; |
404 | int winw, winh, pitch; |
406 | int winw, winh, pitch; |
405 | void *data; |
407 | void *data; |
Line 406... | Line -... | ||
406 | int ret; |
- | |
407 | GLuint mask_handle, mask_name; |
408 | int ret; |
408 | EGLImageKHR mask_image; |
409 | GLuint mask_handle, mask_name; |
409 | 410 | EGLImageKHR mask_image; |
|
Line 410... | Line 411... | ||
410 | 411 | ||
411 | glGenTextures(1, &render->tx_mask); |
412 | glGenTextures(1, &render->tx_mask); |
412 | if(glGetError() != GL_NO_ERROR) |
413 | if(glGetError() != GL_NO_ERROR) |
Line 413... | Line -... | ||
413 | return; |
- | |
414 | 414 | return; |
|
Line 415... | Line 415... | ||
415 | glBindTexture(GL_TEXTURE_2D, render->tx_mask); |
415 | |
416 | if(glGetError() != GL_NO_ERROR) |
416 | glBindTexture(GL_TEXTURE_2D, render->tx_mask); |
417 | goto err1; |
417 | if(glGetError() != GL_NO_ERROR) |
418 | 418 | goto err1; |
|
419 | 419 | ||
Line -... | Line 420... | ||
- | 420 | pitch = (render->width+15) & ~15; |
|
420 | pitch = (render->width+15) & ~15; |
421 | |
421 | 422 | create.size = pitch *render->height; |
|
422 | create.size = pitch *render->height; |
423 | create.handle = 0; |
423 | create.handle = 0; |
424 | ret = drm_ioctl(render->fd, DRM_IOCTL_I915_GEM_CREATE, &create); |
Line 424... | Line -... | ||
424 | ret = drm_ioctl(render->fd, DRM_IOCTL_I915_GEM_CREATE, &create); |
- | |
425 | if(ret != 0) |
425 | if(ret != 0) |
Line 426... | Line 426... | ||
426 | goto err1; |
426 | goto err1; |
Line 427... | Line 427... | ||
427 | 427 | ||
Line 449... | Line 449... | ||
449 | attribs[3] = render->height; |
449 | attribs[3] = render->height; |
450 | attribs[5] = pitch; |
450 | attribs[5] = pitch; |
Line 451... | Line 451... | ||
451 | 451 | ||
452 | mask_image = eglCreateImageKHR(render->dpy, render->context, EGL_DRM_BUFFER_MESA, |
452 | mask_image = eglCreateImageKHR(render->dpy, render->context, EGL_DRM_BUFFER_MESA, |
453 | (void *) (uintptr_t)mask_name, attribs); |
- | |
454 | 453 | (void *) (uintptr_t)mask_name, attribs); |
|
455 | printf("create mask image %p\n", mask_image); |
- | |
- | 454 | printf("create mask image %p\n", mask_image); |
|
- | 455 | if(mask_image == NULL) |
|
Line 456... | Line 456... | ||
456 | 456 | goto err2 |
|
457 | 457 | ||
Line 458... | Line 458... | ||
458 | glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); |
458 | glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); |
Line 459... | Line 459... | ||
459 | glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); |
459 | glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); |
460 | 460 | ||
Line 461... | Line 461... | ||
461 | glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, mask_image); |
461 | glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, mask_image); |
Line 462... | Line 462... | ||
462 | 462 | ||
463 | if(glGetError() != GL_NO_ERROR) |
463 | if(glGetError() != GL_NO_ERROR) |
Line 481... | Line 481... | ||
481 | render->mask_image = mask_image; |
481 | render->mask_image = mask_image; |
Line 482... | Line 482... | ||
482 | 482 | ||
Line 483... | Line 483... | ||
483 | return; |
483 | return; |
484 | 484 | ||
485 | err3: |
485 | err3: |
- | 486 | eglDestroyImageKHR(render->dpy, mask_image); |
|
- | 487 | err2: |
|
486 | // eglDestroyImageKHR(render->dpy, render->mask); |
488 | close.handle = mask_handle; |
487 | err2: |
489 | (void)drm_ioctl(fd, DRM_IOCTL_GEM_CLOSE, &close); |
488 | glBindTexture(GL_TEXTURE_2D, 0); |
490 | glBindTexture(GL_TEXTURE_2D, 0); |
489 | err1: |
491 | err1: |