mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 13:11:20 -05:00 
			
		
		
		
	TVScreenAnalog: removed usage of std::shared_ptr
This commit is contained in:
		
							parent
							
								
									ae3ce79cf2
								
							
						
					
					
						commit
						ba642e8fab
					
				@ -113,7 +113,7 @@ private:
 | 
			
		||||
 | 
			
		||||
    //*************** ATV PARAMETERS  ***************
 | 
			
		||||
    TVScreenAnalog *m_registeredTVScreen;
 | 
			
		||||
	std::shared_ptr<TVScreenAnalogBuffer> m_tvScreenBuffer;
 | 
			
		||||
	TVScreenAnalogBuffer *m_tvScreenBuffer;
 | 
			
		||||
 | 
			
		||||
    //int m_intNumberSamplePerLine;
 | 
			
		||||
    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";
 | 
			
		||||
 | 
			
		||||
TVScreenAnalog::TVScreenAnalog(QWidget *parent)
 | 
			
		||||
	: QGLWidget(parent)
 | 
			
		||||
	: QGLWidget(parent),
 | 
			
		||||
	m_shader(nullptr),
 | 
			
		||||
	m_imageTexture(nullptr),
 | 
			
		||||
	m_lineShiftsTexture(nullptr)
 | 
			
		||||
{
 | 
			
		||||
	m_isDataChanged = false;
 | 
			
		||||
	m_frontBuffer = std::make_shared<TVScreenAnalogBuffer>(5, 1);
 | 
			
		||||
	m_backBuffer = std::make_shared<TVScreenAnalogBuffer>(5, 1);
 | 
			
		||||
	m_frontBuffer = new TVScreenAnalogBuffer(5, 1);
 | 
			
		||||
	m_backBuffer = new TVScreenAnalogBuffer(5, 1);
 | 
			
		||||
 | 
			
		||||
	connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(tick()));
 | 
			
		||||
	m_updateTimer.start(40); // capped at 25 FPS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TVScreenAnalog::cleanup()
 | 
			
		||||
TVScreenAnalog::~TVScreenAnalog()
 | 
			
		||||
{
 | 
			
		||||
	m_shader = nullptr;
 | 
			
		||||
	m_imageTexture = nullptr;
 | 
			
		||||
	m_lineShiftsTexture = nullptr;
 | 
			
		||||
	delete m_backBuffer;
 | 
			
		||||
	delete m_frontBuffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
}
 | 
			
		||||
@ -95,8 +118,10 @@ void TVScreenAnalog::resizeTVScreen(int intCols, int intRows)
 | 
			
		||||
	QMutexLocker lock(&m_buffersMutex);
 | 
			
		||||
	if (m_frontBuffer->getWidth() != colsAdj || m_frontBuffer->getHeight() != intRows)
 | 
			
		||||
	{
 | 
			
		||||
		m_frontBuffer = std::make_shared<TVScreenAnalogBuffer>(colsAdj, intRows);
 | 
			
		||||
		m_backBuffer = std::make_shared<TVScreenAnalogBuffer>(colsAdj, intRows);
 | 
			
		||||
		delete m_backBuffer;
 | 
			
		||||
		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,
 | 
			
		||||
		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))
 | 
			
		||||
	{
 | 
			
		||||
		qWarning()
 | 
			
		||||
			<< "TVScreenAnalog::initializeGL: error in vertex shader:"
 | 
			
		||||
			<< m_shader->log();
 | 
			
		||||
		m_shader = nullptr;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!m_shader->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource))
 | 
			
		||||
	{
 | 
			
		||||
		qWarning()
 | 
			
		||||
			<< "TVScreenAnalog::initializeGL: error in fragment shader:"
 | 
			
		||||
			<< m_shader->log();
 | 
			
		||||
		m_shader = nullptr;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!m_shader->link())
 | 
			
		||||
	{
 | 
			
		||||
		qWarning()
 | 
			
		||||
			<< "TVScreenAnalog::initializeGL: error linking shader:"
 | 
			
		||||
			<< m_shader->log();
 | 
			
		||||
		m_shader = nullptr;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -148,10 +173,10 @@ void TVScreenAnalog::initializeGL()
 | 
			
		||||
	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_lineShiftsTexture = std::make_shared<QOpenGLTexture>(QOpenGLTexture::Target2D);
 | 
			
		||||
	m_imageTexture = new QOpenGLTexture(QOpenGLTexture::Target2D);
 | 
			
		||||
	m_lineShiftsTexture = new QOpenGLTexture(QOpenGLTexture::Target2D);
 | 
			
		||||
	m_imageTexture->setSize(buffer->getWidth(), buffer->getHeight());
 | 
			
		||||
	m_lineShiftsTexture->setSize(1, buffer->getHeight());
 | 
			
		||||
	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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::shared_ptr<TVScreenAnalogBuffer> TVScreenAnalog::swapBuffers()
 | 
			
		||||
TVScreenAnalogBuffer *TVScreenAnalog::swapBuffers()
 | 
			
		||||
{
 | 
			
		||||
	QMutexLocker lock(&m_buffersMutex);
 | 
			
		||||
	std::swap(m_frontBuffer, m_backBuffer);
 | 
			
		||||
@ -198,7 +223,7 @@ void TVScreenAnalog::paintGL()
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	std::shared_ptr<TVScreenAnalogBuffer> buffer = m_frontBuffer;
 | 
			
		||||
	TVScreenAnalogBuffer *buffer = m_frontBuffer;
 | 
			
		||||
 | 
			
		||||
	if (!m_imageTexture ||
 | 
			
		||||
		m_imageTexture->width() != buffer->getWidth() ||
 | 
			
		||||
@ -256,4 +281,4 @@ void TVScreenAnalog::paintGL()
 | 
			
		||||
	glDisableVertexAttribArray(m_texCoordAttribIndex);
 | 
			
		||||
 | 
			
		||||
	m_shader->release();
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -25,9 +25,6 @@
 | 
			
		||||
 | 
			
		||||
#include "export.h"
 | 
			
		||||
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
 | 
			
		||||
#include <QMutex>
 | 
			
		||||
#include <QTimer>
 | 
			
		||||
#include <QGLWidget>
 | 
			
		||||
@ -129,22 +126,23 @@ class SDRGUI_API TVScreenAnalog : public QGLWidget, protected QOpenGLFunctions
 | 
			
		||||
	int m_texCoordAttribIndex;
 | 
			
		||||
 | 
			
		||||
	QMutex m_buffersMutex;
 | 
			
		||||
	std::shared_ptr<TVScreenAnalogBuffer> m_frontBuffer;
 | 
			
		||||
	std::shared_ptr<TVScreenAnalogBuffer> m_backBuffer;
 | 
			
		||||
	TVScreenAnalogBuffer *m_frontBuffer;
 | 
			
		||||
	TVScreenAnalogBuffer *m_backBuffer;
 | 
			
		||||
 | 
			
		||||
	std::shared_ptr<QOpenGLShaderProgram> m_shader;
 | 
			
		||||
	std::shared_ptr<QOpenGLTexture> m_imageTexture;
 | 
			
		||||
	std::shared_ptr<QOpenGLTexture> m_lineShiftsTexture;
 | 
			
		||||
	QOpenGLShaderProgram *m_shader;
 | 
			
		||||
	QOpenGLTexture *m_imageTexture;
 | 
			
		||||
	QOpenGLTexture *m_lineShiftsTexture;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	TVScreenAnalog(QWidget *parent);
 | 
			
		||||
	~TVScreenAnalog();
 | 
			
		||||
 | 
			
		||||
	std::shared_ptr<TVScreenAnalogBuffer> getBackBuffer();
 | 
			
		||||
	std::shared_ptr<TVScreenAnalogBuffer> swapBuffers();
 | 
			
		||||
	TVScreenAnalogBuffer *getBackBuffer();
 | 
			
		||||
	TVScreenAnalogBuffer *swapBuffers();
 | 
			
		||||
	void resizeTVScreen(int intCols, int intRows);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	void initializeTextures(std::shared_ptr<TVScreenAnalogBuffer> buffer);
 | 
			
		||||
	void initializeTextures(TVScreenAnalogBuffer *buffer);
 | 
			
		||||
	void initializeGL() override;
 | 
			
		||||
	void paintGL() override;
 | 
			
		||||
	void resizeGL(int width, int height);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user