#include <QtWidgets>
#include <stdlib.h>
#include <stdio.h>
#include "threadtime.h"
#include "threadgl.h"
#include "threaddraw.h"
#include "glwidget.h"
#include "window.h"
Window::Window(char *strFormal, char *strTime, char *strNum)
{
m_nLoop = 0;
m_bEndFlag = true;
m_nFlag = RGBA;
m_nTime = 10;
m_nPth = 5;
m_type = 1;
if(strFormal != NULL && strTime != NULL && strNum != NULL)
{
if(strcmp(strFormal, "RGBA") == 0)
{
m_nFlag = RGBA;
}
if(strcmp(strFormal, "YUY2") == 0)
{
m_nFlag = YUY2;
}
m_nTime = atoi(strTime);
m_nPth = atoi(strNum);
}
else
{
m_nFlag = WRONG;
m_nTime = WRONG;
m_nPth = WRONG;
}
ReadImageOne();
QGridLayout *mainLayout = new QGridLayout;
m_glWidgets = new GLWidget(m_nPth, 0, 0);
mainLayout -> addWidget(m_glWidgets, 0, 0); //first call initresizeGL
setLayout(mainLayout);
setWindowTitle(tr("test"));
m_pTime = new ThreadTime(0);
m_pDraw = new ThreadDraw(0);
for(int i = 0; i < m_nPth; i++)
{
m_pcopyGl[i] = new ThreadGl(0);
m_pcopyGl[i] -> glInit(i, m_glWidgets, m_pImage, m_nFlag);
m_pcopyGl[i] -> start();
}
m_pTime -> StartTime(m_nTime, m_pDraw, m_glWidgets, m_pcopyGl, m_nPth);
m_pDraw -> DrawInit(m_glWidgets);
m_pTime -> start();
m_pDraw -> start();
}
void Window::ReadImageOne()
{
if(m_nFlag == RGBA)
{
DrawRgb();
}
else if(m_nFlag == YUY2)
{
DrawYuv();
}
else
{
printf("order woring\n");
exit(1);
}
}
void Window::DrawRgb()
{
m_pImage = (uchar*)malloc(1920 * 1080 * 4);
if(m_pImage == NULL)
{
return;
}
memset(m_pImage, 0, 1920 * 1080 *4);
int i, j;
uchar cRed, cGreen, cBlue;
for(i = 0; i < 1080; i++)
{
for(j = 0; j < 1920; j++)
{
if(0 <j && j < 320)
{
cRed = 220;
cGreen = 20;
cBlue = 60;
}
if(320 < j && j < 640)
{
cRed = 139;
cGreen = 0;
cBlue = 139;
}
if(640 < j && j < 960)
{
cRed = 65;
cGreen = 105;
cBlue = 225;
}
if(960 < j && j < 1280)
{
cRed = 0;
cGreen = 255;
cBlue = 127;
}
if(1280 < j && j < 1600)
{
cRed = 255;
cGreen = 215;
cBlue = 0;
}
if(1600 < j && j < 1920)
{
cRed = 210;
cGreen = 105;
cBlue = 30;
}
*(m_pImage + i * 1920 * 4 + j * 4 + 0) = cRed;
*(m_pImage + i * 1920 * 4 + j * 4 + 1) = cGreen;
*(m_pImage + i * 1920 * 4 + j * 4 + 2) = cBlue;
*(m_pImage + i * 1920 * 4 + j * 4 + 3) = 255;
}
}
}
void Window::DrawYuv()
{
m_pImage = (uchar*)malloc(1920 * 1080 * 2);
if(m_pImage == NULL)
{
return;
}
memset(m_pImage, 0, 1920 * 1080 * 2);
/* int i, j;
uchar cA;
for(i = 0; i < 1080; i++)
{
for(j = 0; j < 1920; j++)
{
if(0 <j && j < 320)
{
cA = 128;
}
if(320 < j && j < 640)
{
cA = 0;
}
if(640 < j && j < 960)
{
cA = 128;
}
if(960 < j && j < 1280)
{
cA = 0;
}
if(1280 < j && j < 1600)
{
cA = 128;
}
if(1600 < j && j < 1920)
{
cA = 0;
}
*(m_pImage + i * 1920 * 2 + j * 2 + 0) = cA;
*(m_pImage + i * 1920 * 2 + j * 2 + 1) = 255;
}
}
*/
FILE* pFile = fopen("/home/zkb/d7/build-testv3-Desktop_Qt_5_0_2_GCC_64bit-Debug/test-mmap.yuv", "rb");
if(pFile == NULL)
{
qDebug("file open fail!\n");
return;
}
int readSucced = fread(m_pImage, sizeof(uchar), 1920 * 1080 * 2, pFile);
if(readSucced == 0)
{
printf("file end!\n");
}
qDebug("readSucced%d\n", readSucced);
fclose(pFile);
}
没有合适的资源?快使用搜索试试~ 我知道了~
QT+OPENGL 多线程测试
共31个文件
cpp:11个
o:11个
h:5个
3星 · 超过75%的资源 需积分: 49 151 下载量 190 浏览量
2014-07-23
17:17:26
上传
评论 3
收藏 977KB RAR 举报
温馨提示
本人原创,浅显易懂,QT+OPENGL多线程,采用2D纹理贴图的方式,多线程进行纹理拷贝和渲染。
资源推荐
资源详情
资源评论
收起资源包目录
QT OPENGL.rar (31个子文件)
QT+OPENGL
MyGlTest
glwidget.h 894B
MyGlTest.pro.user 32KB
threadtime.h 520B
threadgl.cpp 823B
window.h 835B
threadtime.cpp 899B
MyGlTest.pro 499B
glwidget.cpp 3KB
threaddraw.cpp 587B
window.cpp 4KB
threaddraw.h 397B
main.cpp 454B
threadgl.h 514B
build-MyGlTest-Desktop_Qt_5_0_2_GCC_64bit-Debug
moc_threadgl.cpp 4KB
moc_window.cpp 2KB
moc_window.o 213KB
Makefile 117KB
moc_threadtime.cpp 4KB
window.o 543KB
moc_threadtime.o 200KB
glwidget.o 639KB
MyGlTest 1.16MB
moc_glwidget.o 280KB
moc_threadgl.o 205KB
threadgl.o 202KB
threaddraw.o 202KB
threadtime.o 203KB
moc_threaddraw.cpp 4KB
main.o 199KB
moc_glwidget.cpp 4KB
moc_threaddraw.o 204KB
共 31 条
- 1
资源评论
- hshy1227302015-12-21没有多少帮助
- zfz62385642015-09-30没有真正实现多线程的效果!!
- antkillerfarm2015-06-02这个代码不是真正的OpenGL多线程。 分析文章见: http://antkillerfarm.github.io/technology/2015/06/02/qt.htmlRobotZKB2015-06-03那你可以把makeCurrent()给注释掉,你看下。因为当初把makeCurrent()注释掉发现报错是线程上下文不一致。这说明线程的上下文确实切换了。RobotZKB2015-06-03写这个代码的时候,一年前写的,那个时候我大学刚刚毕业。RobotZKB2015-06-03我看到我以前写的代码想哭,我以前也是搞高科技的东西,现在沦落到QSS,qt designed的WIDOWS的贴图的.RobotZKB2015-06-03多少OPENGL的东西也要到了。。。RobotZKB2015-06-03我发现以前的我,比我现在厉害多了。。。我特么现在就会QSS贴图了。大腿你们招人不?带我一个RobotZKB2015-06-03其实我一开始用的是LINUX的系统API的方式,后来看到QT的线程类就换了,得我在看看,现在的我做QT界面贴图了。。。
RobotZKB
- 粉丝: 8
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功