资源简介
qt opengl(after ver2.1) 渲染 nv12 qt opengl(after ver2.1) 渲染 nv12 qt opengl(after ver2.1) 渲染 nv12
代码片段和文件信息
#include
#include
#include
Gl_widget::Gl_widget(int width int height const QString& path QWidget* parent)
:QGLWidget(QGLFormat(QGL::SampleBuffers) parent)
video_width(width)
video_height(height)
y_texture(0)
uv_texture(0)
y_data(0)
uv_data(0)
file(path)
timer(this)
program(this)
{
setFocusPolicy(Qt::StrongFocus);
y_data = new unsigned char[(width*height*3)>>1];
uv_data = y_data+(width*height);
file.open(QIODevice::ReadOnly);
}
Gl_widget::~Gl_widget()
{
file.close();
glDeleteTextures(1 &y_texture);
glDeleteTextures(1 &uv_texture);
uv_data = 0;
delete [] y_data;
y_data = 0;
}
void Gl_widget::initializeGL()
{
qDebug() << program.addShaderFromSourceCode(QGLShader::Fragment
“uniform sampler2D y_texture;\n“
“uniform sampler2D uv_texture;\n“
“void main(void)\n“
“{\n“
“ float y u v red green blue;\n“
“ y = texture2D(y_texture gl_TexCoord[0].st).r ;\n“
“ y = 1.1643 * (y - 0.0625);\n“
“ u = texture2D(uv_texture gl_TexCoord[0].st).r - 0.5;\n“
“ v = texture2D(uv_texture gl_TexCoord[0].st).a - 0.5;\n“
“ red = y+1.5958*v;\n“
“ green = y-0.39173*u-0.81290*v;\n“
“ blue = y+2.017*u;\n“
“ gl_FragColor = vec4(red green blue 1.0);\n“
“}“);
qDebug() << program.link();
qDebug() << program.bind();
glGenTextures(1 &y_texture);
glGenTextures(1 &uv_texture);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D y_texture);
glTexParameterf(GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_NEAREST);
glTexEnvf(GL_TEXTURE_ENVGL_TEXTURE_ENV_MODEGL_DECAL);
glTexImage2D(GL_TEXTURE_2D 0 GL_LUMINANCE video_width video_height 0 GL_LUMINANCE GL_UNSIGNED_BYTE y_data);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D uv_texture);
glTexParameterf(GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_NEAREST);
glTexEnvf(GL_TEXTURE_ENVGL_TEXTURE_ENV_MODEGL_DECAL);
glTexImage2D(GL_TEXTURE_2D 0 GL_LUMINANCE_ALPHA video_width>>1 video_height>>1 0 GL_LUMINANCE_ALPHA GL_UNSIGNED_BYTE uv_data);
program.setUniformValue(“y_texture“ 0);
program.setUniformValue(“uv_texture“ 1);
connect(&timer SIGNAL(timeout()) this SLOT(on_timeout()));
timer.setInterval(25);
timer.start();
}
void Gl_widget::paintGL()
{
file.read((char*)y_data (video_width*video_height*3)>>1);
glActiveTexture(GL_TEXTURE0);
glTexSubImage2D(GL_TEXTURE_2D 0 0 0 video_width video_height GL_LUMINANCE GL_UNSIGNED_BYTE y_data);
glActiveTexture(GL_TEXTURE1);
glTexSubImage2D(GL_TEXTURE_2D 0 0 0 video_width>>1 video_height>>1 GL_LUMINANCE_ALPHA GL_UNSIGNED_BYTE uv_data);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-09-27 16:48 nv12_shader\
文件 3605 2017-09-25 15:40 nv12_shader\gl_widget.cpp
文件 673 2017-09-25 15:40 nv12_shader\gl_widget.h
文件 280 2017-09-27 15:53 nv12_shader\main.cpp
文件 280 2017-09-27 15:53 nv12_shader\main.cpp~
文件 4320000 2017-09-25 15:40 nv12_shader\test_yuv420p_320x180.yuv
文件 3110400 2017-09-25 15:42 nv12_shader\videotestsrc_1920x1080.nv12
文件 363 2017-09-25 15:40 nv12_shader\yuv_shader.pro
文件 44458 2017-09-25 15:40 nv12_shader\yuv_shader.pro.user
文件 315 2017-09-25 15:40 nv12_shader\yuv_window.cpp
文件 347 2017-09-25 15:40 nv12_shader\yuv_window.h
文件 433 2017-09-25 15:40 nv12_shader\yuv_window.ui
相关资源
- 3D Helicopter
- 计算机图形大作业opengl-物联网.rar
- OpenGL安装包.zip
- 海康摄像机Linux64SDK下QT预览实现
- QT 半透明窗口 面板
- qt下的modbus Tcp通讯程序
- OpenGl读取obj格式文件
- QT自定义窗口 自由拖动 自定义标题
- OpenGL Shading Language (3rd Edition)
- VC实现OpenGL三维绘图
- qt 中英文切换
- Qt之控件双击重命名操作
- 车辆保险管理系统
- QT实现SFTP
- OpenGL_Nehe(NeHe中文教程)pdf+源码
- qt下超强绘图控件 QCustomPlot
- OpenGL配置文件
- OpenGL安装包
- OPENGL读取obj模型_visual stdio2015
- opengl + glfw _glad 实现天空盒
- Simulating planar reflection using two-pass re
- Qt放大镜
- qt视频播放器
- OpenGL球体绘制与球体贴图
- qt文件管理
- Qt写的遗传算法加画图程序
- QT 登录界面 仿QQ
- 使用OpenGL绘制Bezier曲线
- OpenGL卡通人脸绘制
- Qt实现电力组态软件
评论
共有 条评论