mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-02 21:27:48 -04:00
TVScreenAnalog: removed usage of std::shared_ptr
This commit is contained in:
parent
ae3ce79cf2
commit
ba642e8fab
@ -113,7 +113,7 @@ private:
|
|||||||
|
|
||||||
//*************** ATV PARAMETERS ***************
|
//*************** ATV PARAMETERS ***************
|
||||||
TVScreenAnalog *m_registeredTVScreen;
|
TVScreenAnalog *m_registeredTVScreen;
|
||||||
std::shared_ptr<TVScreenAnalogBuffer> m_tvScreenBuffer;
|
TVScreenAnalogBuffer *m_tvScreenBuffer;
|
||||||
|
|
||||||
//int m_intNumberSamplePerLine;
|
//int m_intNumberSamplePerLine;
|
||||||
int m_numberSamplesPerHTop; //!< number of samples per horizontal synchronization pulse (pulse in ultra-black) - integer value
|
int m_numberSamplesPerHTop; //!< number of samples per horizontal synchronization pulse (pulse in ultra-black) - integer value
|
||||||
|
@ -65,24 +65,47 @@ static const char* fragmentShaderSource =
|
|||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
TVScreenAnalog::TVScreenAnalog(QWidget *parent)
|
TVScreenAnalog::TVScreenAnalog(QWidget *parent)
|
||||||
: QGLWidget(parent)
|
: QGLWidget(parent),
|
||||||
|
m_shader(nullptr),
|
||||||
|
m_imageTexture(nullptr),
|
||||||
|
m_lineShiftsTexture(nullptr)
|
||||||
{
|
{
|
||||||
m_isDataChanged = false;
|
m_isDataChanged = false;
|
||||||
m_frontBuffer = std::make_shared<TVScreenAnalogBuffer>(5, 1);
|
m_frontBuffer = new TVScreenAnalogBuffer(5, 1);
|
||||||
m_backBuffer = std::make_shared<TVScreenAnalogBuffer>(5, 1);
|
m_backBuffer = new TVScreenAnalogBuffer(5, 1);
|
||||||
|
|
||||||
connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(tick()));
|
connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(tick()));
|
||||||
m_updateTimer.start(40); // capped at 25 FPS
|
m_updateTimer.start(40); // capped at 25 FPS
|
||||||
}
|
}
|
||||||
|
|
||||||
void TVScreenAnalog::cleanup()
|
TVScreenAnalog::~TVScreenAnalog()
|
||||||
{
|
{
|
||||||
m_shader = nullptr;
|
delete m_backBuffer;
|
||||||
m_imageTexture = nullptr;
|
delete m_frontBuffer;
|
||||||
m_lineShiftsTexture = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<TVScreenAnalogBuffer> TVScreenAnalog::getBackBuffer()
|
void TVScreenAnalog::cleanup()
|
||||||
|
{
|
||||||
|
if (m_shader)
|
||||||
|
{
|
||||||
|
delete m_shader;
|
||||||
|
m_shader = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_imageTexture)
|
||||||
|
{
|
||||||
|
delete m_imageTexture;
|
||||||
|
m_imageTexture = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_lineShiftsTexture)
|
||||||
|
{
|
||||||
|
delete m_lineShiftsTexture;
|
||||||
|
m_lineShiftsTexture = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TVScreenAnalogBuffer *TVScreenAnalog::getBackBuffer()
|
||||||
{
|
{
|
||||||
return m_backBuffer;
|
return m_backBuffer;
|
||||||
}
|
}
|
||||||
@ -95,8 +118,10 @@ void TVScreenAnalog::resizeTVScreen(int intCols, int intRows)
|
|||||||
QMutexLocker lock(&m_buffersMutex);
|
QMutexLocker lock(&m_buffersMutex);
|
||||||
if (m_frontBuffer->getWidth() != colsAdj || m_frontBuffer->getHeight() != intRows)
|
if (m_frontBuffer->getWidth() != colsAdj || m_frontBuffer->getHeight() != intRows)
|
||||||
{
|
{
|
||||||
m_frontBuffer = std::make_shared<TVScreenAnalogBuffer>(colsAdj, intRows);
|
delete m_backBuffer;
|
||||||
m_backBuffer = std::make_shared<TVScreenAnalogBuffer>(colsAdj, intRows);
|
delete m_frontBuffer;
|
||||||
|
m_frontBuffer = new TVScreenAnalogBuffer(colsAdj, intRows);
|
||||||
|
m_backBuffer = new TVScreenAnalogBuffer(colsAdj, intRows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,29 +137,29 @@ void TVScreenAnalog::initializeGL()
|
|||||||
connect(QOpenGLContext::currentContext(), &QOpenGLContext::aboutToBeDestroyed,
|
connect(QOpenGLContext::currentContext(), &QOpenGLContext::aboutToBeDestroyed,
|
||||||
this, &TVScreenAnalog::cleanup); // TODO: when migrating to QOpenGLWidget
|
this, &TVScreenAnalog::cleanup); // TODO: when migrating to QOpenGLWidget
|
||||||
|
|
||||||
m_shader = std::make_shared<QOpenGLShaderProgram>(this);
|
m_shader = new QOpenGLShaderProgram(this);
|
||||||
|
|
||||||
if (!m_shader->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource))
|
if (!m_shader->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource))
|
||||||
{
|
{
|
||||||
qWarning()
|
qWarning()
|
||||||
<< "TVScreenAnalog::initializeGL: error in vertex shader:"
|
<< "TVScreenAnalog::initializeGL: error in vertex shader:"
|
||||||
<< m_shader->log();
|
<< m_shader->log();
|
||||||
m_shader = nullptr;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_shader->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource))
|
if (!m_shader->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource))
|
||||||
{
|
{
|
||||||
qWarning()
|
qWarning()
|
||||||
<< "TVScreenAnalog::initializeGL: error in fragment shader:"
|
<< "TVScreenAnalog::initializeGL: error in fragment shader:"
|
||||||
<< m_shader->log();
|
<< m_shader->log();
|
||||||
m_shader = nullptr;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_shader->link())
|
if (!m_shader->link())
|
||||||
{
|
{
|
||||||
qWarning()
|
qWarning()
|
||||||
<< "TVScreenAnalog::initializeGL: error linking shader:"
|
<< "TVScreenAnalog::initializeGL: error linking shader:"
|
||||||
<< m_shader->log();
|
<< m_shader->log();
|
||||||
m_shader = nullptr;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,10 +173,10 @@ void TVScreenAnalog::initializeGL()
|
|||||||
m_texelHeightLoc = m_shader->uniformLocation("tlh");
|
m_texelHeightLoc = m_shader->uniformLocation("tlh");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TVScreenAnalog::initializeTextures(std::shared_ptr<TVScreenAnalogBuffer> buffer)
|
void TVScreenAnalog::initializeTextures(TVScreenAnalogBuffer *buffer)
|
||||||
{
|
{
|
||||||
m_imageTexture = std::make_shared<QOpenGLTexture>(QOpenGLTexture::Target2D);
|
m_imageTexture = new QOpenGLTexture(QOpenGLTexture::Target2D);
|
||||||
m_lineShiftsTexture = std::make_shared<QOpenGLTexture>(QOpenGLTexture::Target2D);
|
m_lineShiftsTexture = new QOpenGLTexture(QOpenGLTexture::Target2D);
|
||||||
m_imageTexture->setSize(buffer->getWidth(), buffer->getHeight());
|
m_imageTexture->setSize(buffer->getWidth(), buffer->getHeight());
|
||||||
m_lineShiftsTexture->setSize(1, buffer->getHeight());
|
m_lineShiftsTexture->setSize(1, buffer->getHeight());
|
||||||
m_imageTexture->setFormat(QOpenGLTexture::RGBA8_UNorm);
|
m_imageTexture->setFormat(QOpenGLTexture::RGBA8_UNorm);
|
||||||
@ -171,7 +196,7 @@ void TVScreenAnalog::initializeTextures(std::shared_ptr<TVScreenAnalogBuffer> bu
|
|||||||
m_lineShiftsTexture->setWrapMode(QOpenGLTexture::DirectionT, QOpenGLTexture::ClampToEdge);
|
m_lineShiftsTexture->setWrapMode(QOpenGLTexture::DirectionT, QOpenGLTexture::ClampToEdge);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<TVScreenAnalogBuffer> TVScreenAnalog::swapBuffers()
|
TVScreenAnalogBuffer *TVScreenAnalog::swapBuffers()
|
||||||
{
|
{
|
||||||
QMutexLocker lock(&m_buffersMutex);
|
QMutexLocker lock(&m_buffersMutex);
|
||||||
std::swap(m_frontBuffer, m_backBuffer);
|
std::swap(m_frontBuffer, m_backBuffer);
|
||||||
@ -198,7 +223,7 @@ void TVScreenAnalog::paintGL()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<TVScreenAnalogBuffer> buffer = m_frontBuffer;
|
TVScreenAnalogBuffer *buffer = m_frontBuffer;
|
||||||
|
|
||||||
if (!m_imageTexture ||
|
if (!m_imageTexture ||
|
||||||
m_imageTexture->width() != buffer->getWidth() ||
|
m_imageTexture->width() != buffer->getWidth() ||
|
||||||
@ -256,4 +281,4 @@ void TVScreenAnalog::paintGL()
|
|||||||
glDisableVertexAttribArray(m_texCoordAttribIndex);
|
glDisableVertexAttribArray(m_texCoordAttribIndex);
|
||||||
|
|
||||||
m_shader->release();
|
m_shader->release();
|
||||||
}
|
}
|
||||||
|
@ -25,9 +25,6 @@
|
|||||||
|
|
||||||
#include "export.h"
|
#include "export.h"
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QGLWidget>
|
#include <QGLWidget>
|
||||||
@ -129,22 +126,23 @@ class SDRGUI_API TVScreenAnalog : public QGLWidget, protected QOpenGLFunctions
|
|||||||
int m_texCoordAttribIndex;
|
int m_texCoordAttribIndex;
|
||||||
|
|
||||||
QMutex m_buffersMutex;
|
QMutex m_buffersMutex;
|
||||||
std::shared_ptr<TVScreenAnalogBuffer> m_frontBuffer;
|
TVScreenAnalogBuffer *m_frontBuffer;
|
||||||
std::shared_ptr<TVScreenAnalogBuffer> m_backBuffer;
|
TVScreenAnalogBuffer *m_backBuffer;
|
||||||
|
|
||||||
std::shared_ptr<QOpenGLShaderProgram> m_shader;
|
QOpenGLShaderProgram *m_shader;
|
||||||
std::shared_ptr<QOpenGLTexture> m_imageTexture;
|
QOpenGLTexture *m_imageTexture;
|
||||||
std::shared_ptr<QOpenGLTexture> m_lineShiftsTexture;
|
QOpenGLTexture *m_lineShiftsTexture;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TVScreenAnalog(QWidget *parent);
|
TVScreenAnalog(QWidget *parent);
|
||||||
|
~TVScreenAnalog();
|
||||||
|
|
||||||
std::shared_ptr<TVScreenAnalogBuffer> getBackBuffer();
|
TVScreenAnalogBuffer *getBackBuffer();
|
||||||
std::shared_ptr<TVScreenAnalogBuffer> swapBuffers();
|
TVScreenAnalogBuffer *swapBuffers();
|
||||||
void resizeTVScreen(int intCols, int intRows);
|
void resizeTVScreen(int intCols, int intRows);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initializeTextures(std::shared_ptr<TVScreenAnalogBuffer> buffer);
|
void initializeTextures(TVScreenAnalogBuffer *buffer);
|
||||||
void initializeGL() override;
|
void initializeGL() override;
|
||||||
void paintGL() override;
|
void paintGL() override;
|
||||||
void resizeGL(int width, int height);
|
void resizeGL(int width, int height);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user