您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
4. XTexture初始化并完成GLVideoView的调用~1
发布时间:2021-06-10 21:25:05编辑:雪饮阅读()
對於質地,我們需要有創建和初始化,於是乎在cpp/XTexture.h中聲明這兩個:
#define XPLAY_XTEXTURE_H
class XTexture
{
public:
static XTexture *Create();
virtual bool Init(void *win) = 0;
};
#endif //XPLAY_XTEXTURE_H
對於視頻視圖接口我們需要有渲染、設置渲染還有就是視圖更新,所以cpp/IVideoView.h:
這樣聲明之後,同樣也要進行實現,實現于cpp/IVideoView.cpp:
當然這裏只實現了更新的方法,對於另外兩個方法,我們還要在cpp/GLVideoView.h中聲明:
畢竟這裏的設計稍微有那麽一點點冗餘。同時實現的話,就在cpp/GLVideoView.cpp:
那麽現在可以編譯運行了?
#include "XLog.h"
#include <thread>
using namespace std;
void XSleep(int mis)
{
chrono::milliseconds du(mis);
this_thread::sleep_for(du);
}
//启动线程
void XThread::Start()
{
isExit = false;
thread th(&XThread::ThreadMain,this);
th.detach();
}
void XThread::ThreadMain()
{
isRuning = true;
XLOGI("线程函数进入");
Main();
XLOGI("线程函数退出");
isRuning = false;
}
//通过控制isExit安全停止线程(不一定成功)
void XThread::Stop()
{XLOGI("Stop 停止线程begin!");
isExit = true;
for(int i = 0; i < 200; i++)
{
if(!isRuning)
{
XLOGI("Stop 停止线程成功!");
return;
}
XSleep(1);
}
XLOGI("Stop 停止线程超时!");
}
#define XPLAY_IVIDEOVIEW_H
#include "XData.h"
class IVideoView
{
public:
virtual void SetRender(void *win) = 0;
virtual void Render(XData data) = 0;
virtual void Update(XData data);
};
#endif //XPLAY_IVIDEOVIEW_H
void IVideoView::Update(XData data)
{
this->Render(data);
}
#define XPLAY_GLVIDEOVIEW_H
#include "XData.h"
class XTexture;
class GLVideoView {
public:
virtual void SetRender(void *win);
virtual void Render(XData data);
protected:
void *view = 0;
XTexture *txt = 0;
};
#endif //XPLAY_GLVIDEOVIEW_H
#include "XTexture.h"
void GLVideoView::SetRender(void *win)
{
view = win;
}
void GLVideoView::Render(XData data)
{
if(!view) return;
if(!txt)
{
txt = XTexture::Create();
txt->Init(view);
}
}
关键字词:XTexture
相关文章
-
无相关信息