Rev 4517 | Rev 4525 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4517 | Rev 4523 | ||
---|---|---|---|
Line 87... | Line 87... | ||
87 | struct render* create_render(EGLDisplay dpy, EGLSurface surface, int dx, int dy) |
87 | struct render* create_render(EGLDisplay dpy, EGLSurface surface, int dx, int dy) |
88 | { |
88 | { |
89 | const char *vs_src = |
89 | const char *vs_src = |
90 | "attribute vec4 v_position;\n" |
90 | "attribute vec4 v_position;\n" |
91 | "attribute vec4 v_texcoord0;\n" |
91 | "attribute vec4 v_texcoord0;\n" |
- | 92 | "attribute vec4 v_texcoord1;\n" |
|
92 | "varying vec2 source_texture;\n" |
93 | "varying vec2 source_texture;\n" |
- | 94 | "varying vec2 mask_texture;\n" |
|
93 | "void main()\n" |
95 | "void main()\n" |
94 | "{\n" |
96 | "{\n" |
95 | " gl_Position = v_position;\n" |
97 | " gl_Position = v_position;\n" |
96 | " source_texture = v_texcoord0.xy;\n" |
98 | " source_texture = v_texcoord0.xy;\n" |
- | 99 | " mask_texture = v_texcoord1.xy;\n" |
|
97 | "}\n"; |
100 | "}\n"; |
Line 98... | Line 101... | ||
98 | 101 | ||
99 | const char *fs_src = |
- | |
100 | // "precision mediump float;\n" |
102 | const char *fs_src = |
- | 103 | "varying vec2 source_texture;\n" |
|
101 | "varying vec2 source_texture;\n" |
104 | "varying vec2 mask_texture;\n" |
- | 105 | "uniform sampler2D sampler_src;\n" |
|
102 | "uniform sampler2D sampler;\n" |
106 | "uniform sampler2D sampler_mask;\n" |
103 | "void main()\n" |
107 | "void main()\n" |
104 | "{\n" |
108 | "{\n" |
105 | " vec3 cg = texture2D(sampler, source_texture).rgb;\n" |
109 | " float ca = texture2D(sampler_mask, mask_texture).r;\n" |
106 | " gl_FragColor = vec4(cg.r,cg.g,cg.b,1.0);\n" |
110 | " gl_FragColor = vec4(texture2D(sampler_src, source_texture).rgb, ca);\n" |
- | 111 | "}\n"; |
|
107 | "}\n"; |
112 | |
108 | EGLint config_attribs[14]; |
113 | EGLint config_attribs[14]; |
109 | EGLConfig config; |
114 | EGLConfig config; |
Line 110... | Line 115... | ||
110 | EGLint num_configs; |
115 | EGLint num_configs; |
Line 308... | Line 313... | ||
308 | 313 | ||
309 | glAttachShader(render->blit_prog, vs_shader); |
314 | glAttachShader(render->blit_prog, vs_shader); |
310 | glAttachShader(render->blit_prog, fs_shader); |
315 | glAttachShader(render->blit_prog, fs_shader); |
311 | glBindAttribLocation(render->blit_prog, 0, "v_position"); |
316 | glBindAttribLocation(render->blit_prog, 0, "v_position"); |
- | 317 | glBindAttribLocation(render->blit_prog, 1, "v_texcoord0"); |
|
Line 312... | Line 318... | ||
312 | glBindAttribLocation(render->blit_prog, 1, "v_texcoord0"); |
318 | glBindAttribLocation(render->blit_prog, 2, "v_texcoord1"); |
313 | 319 | ||
314 | glLinkProgram(render->blit_prog); |
320 | glLinkProgram(render->blit_prog); |
315 | glGetProgramiv(render->blit_prog, GL_LINK_STATUS, &ret); |
321 | glGetProgramiv(render->blit_prog, GL_LINK_STATUS, &ret); |
Line 325... | Line 331... | ||
325 | printf("Failed to link: %s\n", info); |
331 | printf("Failed to link: %s\n", info); |
326 | printf("GLSL link failure\n"); |
332 | printf("GLSL link failure\n"); |
327 | free(info); |
333 | free(info); |
328 | } |
334 | } |
Line 329... | Line 335... | ||
329 | 335 | ||
- | 336 | render->sampler = glGetUniformLocation(render->blit_prog,"sampler_src"); |
|
Line 330... | Line 337... | ||
330 | render->sampler = glGetUniformLocation(render->blit_prog,"sampler"); |
337 | render->sm_mask = glGetUniformLocation(render->blit_prog,"sampler_mask"); |
331 | 338 | ||
- | 339 | glUseProgram(render->blit_prog); |
|
Line 332... | Line 340... | ||
332 | glUseProgram(render->blit_prog); |
340 | glUniform1i(render->sampler, 0); |
333 | glUniform1i(render->sampler, 0); |
341 | glUniform1i(render->sm_mask, 1); |
Line 334... | Line 342... | ||
334 | 342 | ||
335 | glVertexAttribPointer(0, 2, GL_FLOAT,GL_FALSE, 2 * sizeof(float),render->vertices); |
343 | glVertexAttribPointer(0, 2, GL_FLOAT,GL_FALSE, 2 * sizeof(float),render->vertices); |
Line -... | Line 344... | ||
- | 344 | glEnableVertexAttribArray(0); |
|
- | 345 | ||
- | 346 | glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float),render->tc_src); |
|
- | 347 | glEnableVertexAttribArray(1); |
|
- | 348 | ||
- | 349 | glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float),render->tc_mask); |
|
- | 350 | glEnableVertexAttribArray(2); |
|
- | 351 | ||
- | 352 | glEnable(GL_BLEND); |
|
- | 353 | glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); |
|
- | 354 | ||
- | 355 | glActiveTexture(GL_TEXTURE1); |
|
- | 356 | glBindTexture(GL_TEXTURE_2D, render->tx_mask); |
|
- | 357 | glTexParameteri(GL_TEXTURE_2D, |
|
- | 358 | GL_TEXTURE_MIN_FILTER, |
|
336 | glEnableVertexAttribArray(0); |
359 | GL_NEAREST); |
Line 337... | Line 360... | ||
337 | 360 | glTexParameteri(GL_TEXTURE_2D, |
|
Line 338... | Line 361... | ||
338 | glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float),render->texcoords); |
361 | GL_TEXTURE_MAG_FILTER, |
Line 376... | Line 399... | ||
376 | static EGLint attrib[] = |
399 | static EGLint attrib[] = |
377 | { |
400 | { |
378 | EGL_GL_TEXTURE_LEVEL_KHR, 0, |
401 | EGL_GL_TEXTURE_LEVEL_KHR, 0, |
379 | EGL_NONE |
402 | EGL_NONE |
380 | }; |
403 | }; |
381 | struct drm_i915_gem_mmap mmap_arg; |
404 | struct drm_i915_gem_mmap_gtt mmap_arg; |
382 | EGLint handle, stride; |
405 | EGLint handle, stride; |
383 | int pitch; |
406 | int winw, winh, pitch; |
384 | void *data; |
407 | void *data; |
Line 385... | Line 408... | ||
385 | 408 | ||
386 | glGenTextures(1, &render->tx_mask); |
409 | glGenTextures(1, &render->tx_mask); |
387 | if(glGetError() != GL_NO_ERROR) |
410 | if(glGetError() != GL_NO_ERROR) |
Line 392... | Line 415... | ||
392 | goto err2; |
415 | goto err2; |
Line 393... | Line 416... | ||
393 | 416 | ||
394 | glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); |
417 | glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); |
Line -... | Line 418... | ||
- | 418 | glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); |
|
- | 419 | ||
- | 420 | winw = render->width+10; |
|
395 | glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); |
421 | winh = render->height+20+5; |
- | 422 | ||
- | 423 | pitch = (winw+3) & -4; |
|
Line 396... | Line 424... | ||
396 | 424 | ||
Line 397... | Line 425... | ||
397 | pitch = (render->width+3) & -4; |
425 | data = user_alloc(pitch * winh); |
398 | 426 | ||
Line 399... | Line 427... | ||
399 | data = user_alloc(pitch*render->height); |
427 | memset(data, 0x20, pitch * winh); |
Line 400... | Line 428... | ||
400 | 428 | ||
Line 417... | Line 445... | ||
417 | 445 | ||
Line 418... | Line 446... | ||
418 | glBindTexture(GL_TEXTURE_2D, 0); |
446 | glBindTexture(GL_TEXTURE_2D, 0); |
419 | 447 | ||
420 | mmap_arg.handle = handle; |
448 | mmap_arg.handle = handle; |
421 | mmap_arg.offset = 0; |
449 | mmap_arg.offset = 0; |
422 | mmap_arg.size = stride * render->height; |
450 | // mmap_arg.size = stride * winh; |
423 | if (drm_ioctl(render->fd, DRM_IOCTL_I915_GEM_MMAP, &mmap_arg)) |
451 | if (drm_ioctl(render->fd, DRM_IOCTL_I915_GEM_MMAP_GTT, &mmap_arg)) |
424 | { |
452 | { |
425 | printf("%s: failed to mmap image %p handle=%d, %d bytes, into CPU domain\n", |
453 | printf("%s: failed to mmap image %p handle=%d, %d bytes, into CPU domain\n", |
426 | __FUNCTION__, render->mask, handle, stride*render->height); |
454 | __FUNCTION__, render->mask, handle, stride*winh); |
Line 427... | Line 455... | ||
427 | goto err3; |
455 | goto err3; |
- | 456 | } |
|
Line 428... | Line 457... | ||
428 | } |
457 | |
429 | 458 | render->mask_buffer = (void *)(uintptr_t)mmap_arg.offset; |
|
Line 430... | Line 459... | ||
430 | render->mask_buffer = (void *)(uintptr_t)mmap_arg.addr_ptr; |
459 | render->mask_handle = handle; |
Line 431... | Line 460... | ||
431 | 460 | ||
432 | printf("%s: mmap image %p handle=%d, %d bytes to %p\n", |
461 | printf("%s: mmap image %p handle=%d, stride %d %d bytes to %p\n", |