/* YUY2:y2,u,y1,v
UYVY:v,y1,u,y2 */
static const gchar *text_shader_YUY2_UYVY_opengl =
- "#extension GL_ARB_texture_rectangle : enable\n"
- "uniform sampler2DRect tex;\n"
+ "uniform sampler2D tex;\n"
+ "uniform float width;\n"
RGB_TO_YUV_COEFFICIENTS
"void main(void) {\n"
" vec3 rgb1, rgb2;\n"
" float fx,fy,y1,y2,u,v;\n"
" fx = gl_TexCoord[0].x;\n"
" fy = gl_TexCoord[0].y;\n"
- " rgb1=texture2DRect(tex,vec2(fx*2.0,fy)).rgb;\n"
- " rgb2=texture2DRect(tex,vec2(fx*2.0+1.0,fy)).rgb;\n"
+ " rgb1=texture2D(tex,vec2(fx*2.0,fy)).rgb;\n"
+ " rgb2=texture2D(tex,vec2(fx*2.0+1.0/width,fy)).rgb;\n"
" y1=dot(rgb1, ycoeff);\n"
" y2=dot(rgb2, ycoeff);\n"
" u=dot(rgb1, ucoeff);\n"
"}\n";
static const gchar *text_shader_I420_YV12_opengl =
- "#extension GL_ARB_texture_rectangle : enable\n"
- "uniform sampler2DRect tex;\n"
+ "uniform sampler2D tex;\n"
"uniform float w, h;\n"
RGB_TO_YUV_COEFFICIENTS
"void main(void) {\n"
" float y,u,v;\n"
" vec2 nxy=gl_TexCoord[0].xy;\n"
" vec2 nxy2=nxy*2.0;\n"
- " rgb1=texture2DRect(tex,nxy).rgb;\n"
- " rgb2=texture2DRect(tex,nxy2).rgb;\n"
+ " rgb1=texture2D(tex,nxy).rgb;\n"
+ " rgb2=texture2D(tex,nxy2).rgb;\n"
" y=dot(rgb1, ycoeff);\n"
" u=dot(rgb2, ucoeff);\n"
" v=dot(rgb2, vcoeff);\n"
"}\n";
static const gchar *text_shader_AYUV_opengl =
- "#extension GL_ARB_texture_rectangle : enable\n"
- "uniform sampler2DRect tex;\n"
+ "uniform sampler2D tex;\n"
RGB_TO_YUV_COEFFICIENTS
"void main(void) {\n"
" vec3 rgb;\n"
" float y,u,v;\n"
" vec2 nxy=gl_TexCoord[0].xy;\n"
- " rgb=texture2DRect(tex,nxy).rgb;\n"
+ " rgb=texture2D(tex,nxy).rgb;\n"
" y=dot(rgb, ycoeff);\n"
" u=dot(rgb, ucoeff);\n"
" v=dot(rgb, vcoeff);\n"
/* setup a first texture to render to */
gl->GenTextures (1, &download->out_texture[0]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, download->out_texture[0]);
- gl->TexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
+ gl->BindTexture (GL_TEXTURE_2D, download->out_texture[0]);
+ gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8,
out_width, out_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_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);
/* attach the first texture to the FBO to renderer to */
gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_RECTANGLE_ARB, download->out_texture[0], 0);
+ GL_TEXTURE_2D, download->out_texture[0], 0);
if (v_format == GST_VIDEO_FORMAT_I420 ||
v_format == GST_VIDEO_FORMAT_YV12) {
/* setup a second texture to render to */
gl->GenTextures (1, &download->out_texture[1]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, download->out_texture[1]);
- gl->TexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
+ gl->BindTexture (GL_TEXTURE_2D, download->out_texture[1]);
+ gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8,
out_width, out_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
- GL_LINEAR);
- glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
/* attach the second texture to the FBO to renderer to */
gl->FramebufferTexture2D (GL_FRAMEBUFFER,
- GL_COLOR_ATTACHMENT1, GL_TEXTURE_RECTANGLE_ARB,
- download->out_texture[1], 0);
+ GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, download->out_texture[1], 0);
/* setup a third texture to render to */
gl->GenTextures (1, &download->out_texture[2]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, download->out_texture[2]);
- gl->TexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
+ gl->BindTexture (GL_TEXTURE_2D, download->out_texture[2]);
+ gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8,
out_width, out_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_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);
/* attach the third texture to the FBO to renderer to */
gl->FramebufferTexture2D (GL_FRAMEBUFFER,
- GL_COLOR_ATTACHMENT2, GL_TEXTURE_RECTANGLE_ARB,
- download->out_texture[2], 0);
+ GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, download->out_texture[2], 0);
}
/* attach the depth render buffer to the FBO */
gst_gl_context_clear_shader (context);
- gl->Enable (GL_TEXTURE_RECTANGLE_ARB);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, download->in_texture);
+ gl->Enable (GL_TEXTURE_2D);
+ gl->BindTexture (GL_TEXTURE_2D, download->in_texture);
v_format = GST_VIDEO_INFO_FORMAT (&download->info);
switch (v_format) {
case GST_VIDEO_FORMAT_RGBA:
case GST_VIDEO_FORMAT_RGBx:
- gl->GetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA,
+ gl->GetTexImage (GL_TEXTURE_2D, 0, GL_RGBA,
GL_UNSIGNED_BYTE, download->data[0]);
break;
case GST_VIDEO_FORMAT_xRGB:
case GST_VIDEO_FORMAT_ARGB:
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- gl->GetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_BGRA,
+ gl->GetTexImage (GL_TEXTURE_2D, 0, GL_BGRA,
GL_UNSIGNED_INT_8_8_8_8, download->data[0]);
#else
- gl->GetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_BGRA,
+ gl->GetTexImage (GL_TEXTURE_2D, 0, GL_BGRA,
GL_UNSIGNED_INT_8_8_8_8_REV, download->data[0]);
#endif /* G_BYTE_ORDER */
break;
case GST_VIDEO_FORMAT_BGRx:
case GST_VIDEO_FORMAT_BGRA:
- gl->GetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_BGRA,
+ gl->GetTexImage (GL_TEXTURE_2D, 0, GL_BGRA,
GL_UNSIGNED_BYTE, download->data[0]);
break;
case GST_VIDEO_FORMAT_xBGR:
case GST_VIDEO_FORMAT_ABGR:
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- gl->GetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA,
+ gl->GetTexImage (GL_TEXTURE_2D, 0, GL_RGBA,
GL_UNSIGNED_INT_8_8_8_8, download->data[0]);
#else
- glGetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA,
+ glGetTexImage (GL_TEXTURE_2D, 0, GL_RGBA,
GL_UNSIGNED_INT_8_8_8_8_REV, download->data[0]);
#endif /* G_BYTE_ORDER */
break;
case GST_VIDEO_FORMAT_RGB:
- gl->GetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGB,
+ gl->GetTexImage (GL_TEXTURE_2D, 0, GL_RGB,
GL_UNSIGNED_BYTE, download->data[0]);
break;
case GST_VIDEO_FORMAT_BGR:
- gl->GetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_BGR,
+ gl->GetTexImage (GL_TEXTURE_2D, 0, GL_BGR,
GL_UNSIGNED_BYTE, download->data[0]);
break;
default:
break;
}
- gl->Disable (GL_TEXTURE_RECTANGLE_ARB);
+ gl->Disable (GL_TEXTURE_2D);
}
#endif
gl->ActiveTexture (GL_TEXTURE0);
gst_gl_shader_set_uniform_1i (download->shader, "tex", 0);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, download->in_texture);
+ gl->BindTexture (GL_TEXTURE_2D, download->in_texture);
gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
-1.0f, 1.0f,
1.0f, 1.0f
};
- gfloat texcoords[8] = { out_width, 0.0,
+ gfloat texcoords[8] = { 1.0, 0.0,
0.0, 0.0,
- 0.0, out_height,
- out_width, out_height
+ 0.0, 1.0,
+ 1.0, 1.0
};
gl = context->gl_vtable;
gl->ActiveTexture (GL_TEXTURE0);
gst_gl_shader_set_uniform_1i (download->shader, "tex", 0);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, download->in_texture);
+ gst_gl_shader_set_uniform_1f (download->shader, "width", out_width);
+ gl->BindTexture (GL_TEXTURE_2D, download->in_texture);
}
break;
gst_gl_shader_set_uniform_1i (download->shader, "tex", 0);
gst_gl_shader_set_uniform_1f (download->shader, "w", (gfloat) out_width);
gst_gl_shader_set_uniform_1f (download->shader, "h", (gfloat) out_height);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, download->in_texture);
+ gl->BindTexture (GL_TEXTURE_2D, download->in_texture);
}
break;
*/
gl->UseProgramObject (0);
- gl->Disable (GL_TEXTURE_RECTANGLE_ARB);
+ gl->Disable (GL_TEXTURE_2D);
gl->MatrixMode (GL_PROJECTION);
gl->PopMatrix ();
gl->MatrixMode (GL_MODELVIEW);
gl->ActiveTexture (GL_TEXTURE0);
gst_gl_shader_set_uniform_1i (download->shader, "tex", 0);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, download->in_texture);
+ gl->BindTexture (GL_TEXTURE_2D, download->in_texture);
}
break;
gst_gl_shader_set_uniform_1i (download->shader, "tex", 0);
gst_gl_shader_set_uniform_1f (download->shader, "w", (gfloat) out_width);
gst_gl_shader_set_uniform_1f (download->shader, "h", (gfloat) out_height);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, download->in_texture);
+ gl->BindTexture (GL_TEXTURE_2D, download->in_texture);
}
break;
#if GST_GL_HAVE_OPENGL
static const char *frag_AYUV_opengl = {
- "#extension GL_ARB_texture_rectangle : enable\n"
- "uniform sampler2DRect tex;\n"
+ "uniform sampler2D tex;\n"
"uniform vec2 tex_scale0;\n"
"uniform vec2 tex_scale1;\n"
"uniform vec2 tex_scale2;\n"
"void main(void) {\n"
" float r,g,b;\n"
" vec3 yuv;\n"
- " yuv = texture2DRect(tex, gl_TexCoord[0].xy * tex_scale0).gba;\n"
+ " yuv = texture2D(tex, gl_TexCoord[0].xy * tex_scale0).gba;\n"
" yuv += offset;\n"
" r = dot(yuv, rcoeff);\n"
" g = dot(yuv, gcoeff);\n"
/** YUV to RGB conversion */
static const char *frag_PLANAR_YUV_opengl = {
- "#extension GL_ARB_texture_rectangle : enable\n"
- "uniform sampler2DRect Ytex,Utex,Vtex;\n"
+ "uniform sampler2D Ytex,Utex,Vtex;\n"
"uniform vec2 tex_scale0;\n"
"uniform vec2 tex_scale1;\n"
"uniform vec2 tex_scale2;\n"
"void main(void) {\n"
" float r,g,b;\n"
" vec3 yuv;\n"
- " yuv.x=texture2DRect(Ytex, gl_TexCoord[0].xy * tex_scale0).r;\n"
- " yuv.y=texture2DRect(Utex, gl_TexCoord[0].xy * tex_scale1).r;\n"
- " yuv.z=texture2DRect(Vtex, gl_TexCoord[0].xy * tex_scale2).r;\n"
+ " yuv.x=texture2D(Ytex, gl_TexCoord[0].xy * tex_scale0).r;\n"
+ " yuv.y=texture2D(Utex, gl_TexCoord[0].xy * tex_scale1).r;\n"
+ " yuv.z=texture2D(Vtex, gl_TexCoord[0].xy * tex_scale2).r;\n"
" yuv += offset;\n"
" r = dot(yuv, rcoeff);\n"
" g = dot(yuv, gcoeff);\n"
/** NV12/NV21 to RGB conversion */
static const char *frag_NV12_NV21_opengl = {
- "#extension GL_ARB_texture_rectangle : enable\n"
- "uniform sampler2DRect Ytex,UVtex;\n"
+ "uniform sampler2D Ytex,UVtex;\n"
"uniform vec2 tex_scale0;\n"
"uniform vec2 tex_scale1;\n"
"uniform vec2 tex_scale2;\n"
"void main(void) {\n\n"
" float r,g,b;\n"
" vec3 yuv;\n"
- " yuv.x = texture2DRect(Ytex, gl_TexCoord[0].xy * tex_scale0).r;\n"
- " yuv.yz = texture2DRect(UVtex, gl_TexCoord[0].xy * tex_scale1).%c%c;\n"
+ " yuv.x = texture2D(Ytex, gl_TexCoord[0].xy * tex_scale0).r;\n"
+ " yuv.yz = texture2D(UVtex, gl_TexCoord[0].xy * tex_scale1).%c%c;\n"
" yuv += offset;\n"
" r = dot(yuv, rcoeff);\n"
" g = dot(yuv, gcoeff);\n"
/* Channel reordering for XYZ <-> ZYX conversion */
static const char *frag_REORDER_opengl = {
- "#extension GL_ARB_texture_rectangle : enable\n"
- "uniform sampler2DRect tex;\n"
+ "uniform sampler2D tex;\n"
"uniform vec2 tex_scale0;\n"
"uniform vec2 tex_scale1;\n"
"uniform vec2 tex_scale2;\n"
"void main(void)\n"
"{\n"
- " vec4 t = texture2DRect(tex, gl_TexCoord[0].xy);\n"
+ " vec4 t = texture2D(tex, gl_TexCoord[0].xy);\n"
" gl_FragColor = vec4(t.%c, t.%c, t.%c, 1.0);\n"
"}"
};
/* Direct fragments copy with stride-scaling */
static const char *frag_COPY_opengl = {
- "#extension GL_ARB_texture_rectangle : enable\n"
- "uniform sampler2DRect tex;\n"
+ "uniform sampler2D tex;\n"
"uniform vec2 tex_scale0;\n"
"uniform vec2 tex_scale1;\n"
"uniform vec2 tex_scale2;\n"
"void main(void)\n"
"{\n"
- " vec4 t = texture2DRect(tex, gl_TexCoord[0].xy);\n"
+ " vec4 t = texture2D(tex, gl_TexCoord[0].xy);\n"
" gl_FragColor = vec4(t.rgb, 1.0);\n"
"}\n"
};
/* YUY2:r,g,a
UYVY:a,b,r */
static const gchar *frag_YUY2_UYVY_opengl =
- "#extension GL_ARB_texture_rectangle : enable\n"
- "uniform sampler2DRect Ytex, UVtex;\n"
+ "uniform sampler2D Ytex, UVtex;\n"
"uniform vec2 tex_scale0;\n"
"uniform vec2 tex_scale1;\n"
"uniform vec2 tex_scale2;\n"
"void main(void) {\n"
" float fx, fy, y, u, v, r, g, b;\n"
" vec3 yuv;\n"
- " yuv.x = texture2DRect(Ytex, gl_TexCoord[0].xy * tex_scale0).%c;\n"
- " yuv.y = texture2DRect(UVtex, gl_TexCoord[0].xy * tex_scale1).%c;\n"
- " yuv.z = texture2DRect(UVtex, gl_TexCoord[0].xy * tex_scale2).%c;\n"
+ " yuv.x = texture2D(Ytex, gl_TexCoord[0].xy * tex_scale0).%c;\n"
+ " yuv.y = texture2D(UVtex, gl_TexCoord[0].xy * tex_scale1).%c;\n"
+ " yuv.z = texture2D(UVtex, gl_TexCoord[0].xy * tex_scale2).%c;\n"
" yuv += offset;\n"
" r = dot(yuv, rcoeff);\n"
" g = dot(yuv, gcoeff);\n"
/* a fake texture is attached to the upload FBO (cannot init without it) */
gl->GenTextures (1, &fake_texture);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, fake_texture);
- gl->TexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, out_width, out_height,
+ gl->BindTexture (GL_TEXTURE_2D, fake_texture);
+ gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, out_width, out_height,
0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_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);
/* attach the texture to the FBO to renderer to */
gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_RECTANGLE_ARB, fake_texture, 0);
+ GL_TEXTURE_2D, fake_texture, 0);
/* attach the depth render buffer to the FBO */
gl->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
tex[1].internal_format = GL_RGBA8;
tex[1].format = GL_BGRA;
tex[1].type = GL_UNSIGNED_INT_8_8_8_8;
- tex[1].width = in_width;
+ tex[1].width = GST_ROUND_UP_2 (in_width) / 2;
tex[1].height = in_height;
break;
case GST_VIDEO_FORMAT_UYVY:
tex[1].internal_format = GL_RGBA8;
tex[1].format = GL_BGRA;
tex[1].type = GL_UNSIGNED_INT_8_8_8_8_REV;
- tex[1].width = in_width;
+ tex[1].width = GST_ROUND_UP_2 (in_width) / 2;
tex[1].height = in_height;
break;
case GST_VIDEO_FORMAT_NV12:
tex[1].internal_format = GL_LUMINANCE_ALPHA;
tex[1].format = GL_LUMINANCE_ALPHA;
tex[1].type = GL_UNSIGNED_BYTE;
- tex[1].width = in_width / 2;
- tex[1].height = in_height / 2;
+ tex[1].width = GST_ROUND_UP_2 (in_width) / 2;
+ tex[1].height = GST_ROUND_UP_2 (in_height) / 2;
break;
case GST_VIDEO_FORMAT_Y444:
tex[0].internal_format = GL_LUMINANCE;
for (i = 0; i < upload->priv->n_textures; i++) {
gl->GenTextures (1, &upload->in_texture[i]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[i]);
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[i]);
- gl->TexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, tex[i].internal_format,
+ gl->TexImage2D (GL_TEXTURE_2D, 0, tex[i].internal_format,
tex[i].width, tex[i].height, 0, tex[i].format, tex[i].type, NULL);
}
in_height = upload->in_height;
v_format = GST_VIDEO_INFO_FORMAT (&upload->info);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[0]);
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[0]);
switch (v_format) {
case GST_VIDEO_FORMAT_RGB:
case GST_VIDEO_FORMAT_BGR:
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, in_width, in_height,
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, in_width, in_height,
GL_RGB, GL_UNSIGNED_BYTE, upload->data[0]);
break;
case GST_VIDEO_FORMAT_RGBx:
case GST_VIDEO_FORMAT_AYUV:
case GST_VIDEO_FORMAT_xBGR:
case GST_VIDEO_FORMAT_ABGR:
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, in_width, in_height,
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, in_width, in_height,
GL_RGBA, GL_UNSIGNED_BYTE, upload->data[0]);
break;
case GST_VIDEO_FORMAT_YUY2:
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, in_width,
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, in_width,
in_height, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, upload->data[0]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[1]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[1]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
GST_ROUND_UP_2 (in_width) / 2, in_height,
GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, upload->data[0]);
break;
case GST_VIDEO_FORMAT_UYVY:
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, in_width,
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, in_width,
in_height, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, upload->data[0]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[1]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[1]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
GST_ROUND_UP_2 (in_width) / 2, in_height,
GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, upload->data[0]);
break;
case GST_VIDEO_FORMAT_NV12:
case GST_VIDEO_FORMAT_NV21:
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, in_width, in_height,
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, in_width, in_height,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[0]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[1]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[1]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
in_width / 2, in_height / 2,
GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, upload->data[1]);
break;
case GST_VIDEO_FORMAT_I420:
{
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, in_width, in_height,
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, in_width, in_height,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[0]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[1]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[1]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
GST_ROUND_UP_2 (in_width) / 2, GST_ROUND_UP_2 (in_height) / 2,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[1]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[2]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[2]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
GST_ROUND_UP_2 (in_width) / 2, GST_ROUND_UP_2 (in_height) / 2,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[2]);
}
break;
case GST_VIDEO_FORMAT_YV12: /* same as I420 except plane 1+2 swapped */
{
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, in_width, in_height,
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, in_width, in_height,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[0]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[2]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[2]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
GST_ROUND_UP_2 (in_width) / 2, GST_ROUND_UP_2 (in_height) / 2,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[1]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[1]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[1]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
GST_ROUND_UP_2 (in_width) / 2, GST_ROUND_UP_2 (in_height) / 2,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[2]);
}
break;
case GST_VIDEO_FORMAT_Y444:
{
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, in_width, in_height,
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, in_width, in_height,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[0]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[1]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[1]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
in_width, in_height, GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[1]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[2]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[2]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
in_width, in_height, GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[2]);
}
break;
case GST_VIDEO_FORMAT_Y42B:
{
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, in_width, in_height,
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, in_width, in_height,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[0]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[1]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[1]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
GST_ROUND_UP_2 (in_width) / 2, in_height,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[1]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[2]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[2]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
GST_ROUND_UP_2 (in_width) / 2, in_height,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[2]);
}
break;
case GST_VIDEO_FORMAT_Y41B:
{
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, in_width, in_height,
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, in_width, in_height,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[0]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[1]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[1]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
GST_ROUND_UP_4 (in_width) / 4, in_height,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[1]);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[2]);
- gl->TexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0,
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[2]);
+ gl->TexSubImage2D (GL_TEXTURE_2D, 0, 0, 0,
GST_ROUND_UP_4 (in_width) / 4, in_height,
GL_LUMINANCE, GL_UNSIGNED_BYTE, upload->data[2]);
}
/* make sure no texture is in use in our opengl context
* in case we want to use the upload texture in an other opengl context
*/
- glBindTexture (GL_TEXTURE_RECTANGLE_ARB, 0);
+ glBindTexture (GL_TEXTURE_2D, 0);
return TRUE;
}
GstGLFuncs *gl;
GstVideoFormat v_format;
guint out_width, out_height;
- guint in_width = upload->in_width;
- guint in_height = upload->in_height;
char *texnames[GST_VIDEO_MAX_PLANES];
gint i;
gfloat tex_scaling[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
-1.0f, 1.0f,
1.0f, 1.0f
};
- GLfloat texcoords[8] = { in_width, 0,
- 0, 0,
- 0, in_height,
- in_width, in_height
+ GLfloat texcoords[8] = { 1.0f, 0.0f,
+ 0.0f, 0.0f,
+ 0.0f, 1.0f,
+ 1.0f, 1.0f
};
gl = context->gl_vtable;
gl->BindFramebuffer (GL_FRAMEBUFFER, upload->fbo);
/* setup a texture to render to */
- gl->Enable (GL_TEXTURE_RECTANGLE_ARB);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->out_texture);
+ gl->Enable (GL_TEXTURE_2D);
+ gl->BindTexture (GL_TEXTURE_2D, upload->out_texture);
/* attach the texture to the FBO to renderer to */
gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_RECTANGLE_ARB, upload->out_texture, 0);
+ GL_TEXTURE_2D, upload->out_texture, 0);
gst_gl_context_clear_shader (context);
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();
- gl->Enable (GL_TEXTURE_RECTANGLE_ARB);
+ gl->Enable (GL_TEXTURE_2D);
for (i = upload->priv->n_textures - 1; i >= 0; i--) {
gl->ActiveTexture (GL_TEXTURE0 + i);
gst_gl_shader_set_uniform_1i (upload->shader, texnames[i], i);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[i]);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE);
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[i]);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_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->EnableClientState (GL_VERTEX_ARRAY);
/* we are done with the shader */
gst_gl_context_clear_shader (context);
- gl->Disable (GL_TEXTURE_RECTANGLE_ARB);
+ gl->Disable (GL_TEXTURE_2D);
gl->MatrixMode (GL_PROJECTION);
gl->PopMatrix ();
gl->BindFramebuffer (GL_FRAMEBUFFER, upload->fbo);
/* setup a texture to render to */
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->out_texture);
+ gl->BindTexture (GL_TEXTURE_2D, upload->out_texture);
/* attach the texture to the FBO to renderer to */
gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_RECTANGLE_ARB, upload->out_texture, 0);
+ GL_TEXTURE_2D, upload->out_texture, 0);
gst_gl_context_clear_shader (context);
case GST_VIDEO_FORMAT_NV21:
texnames[0] = "Ytex";
texnames[1] = "UVtex";
- tex_scaling[2] = tex_scaling[3] = 0.5;
case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_UYVY:
texnames[0] = "Ytex";
texnames[1] = "UVtex";
- tex_scaling[2] = tex_scaling[4] = 0.5;
break;
case GST_VIDEO_FORMAT_I420:
case GST_VIDEO_FORMAT_YV12:
texnames[0] = "Ytex";
texnames[1] = "Utex";
texnames[2] = "Vtex";
- if (v_format == GST_VIDEO_FORMAT_I420
- || v_format == GST_VIDEO_FORMAT_YV12)
- tex_scaling[2] = tex_scaling[3] = tex_scaling[4] = tex_scaling[5] = 0.5;
- else if (v_format == GST_VIDEO_FORMAT_Y42B)
- tex_scaling[2] = tex_scaling[4] = 0.5;
- else if (v_format == GST_VIDEO_FORMAT_Y41B)
- tex_scaling[2] = tex_scaling[4] = 0.25;
break;
case GST_VIDEO_FORMAT_AYUV:
texnames[0] = "tex";
gl->ActiveTexture (GL_TEXTURE0 + i);
gst_gl_shader_set_uniform_1i (upload->shader, texnames[i], i);
- gl->BindTexture (GL_TEXTURE_RECTANGLE_ARB, upload->in_texture[i]);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
- GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE);
+ gl->BindTexture (GL_TEXTURE_2D, upload->in_texture[i]);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_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->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);