#include <QtGui>
#include "simpleudpvisual.h"
#include <iostream>
using namespace std;
simpleUdpVisual::simpleUdpVisual(int w, int h, int bs)
{
data = NULL;
height = h;
width = w;
buff_size = bs;
socket.connectToHost(QHostAddress("127.0.0.1"),41414);
if (socket.waitForConnected(1000)) cout << "Connected" << endl;
else cout << "Cant connect" << endl;
data = (unsigned char*) malloc(w*h*sizeof(unsigned char)*3);
socket.setReadBufferSize(buff_size);
connect(&socket,SIGNAL(readyRead()),this,SLOT(readData()));
//setFixedSize(w,h);
}
void simpleUdpVisual::readData()
{
static int writed = 0;
static int frm = 0;
int size = width*height*3;
int recv;
while(socket.bytesAvailable()>0)
{
if (writed+socket.bytesAvailable()>size)
{
writed = 0;
repaint();
}
recv = socket.read( (char*) data+writed ,buff_size );
writed+= recv;
}
}
void simpleUdpVisual::newData(unsigned char * d)
{
data = d;
repaint();
}
void simpleUdpVisual::initializeGL()
{
qglClearColor(Qt::red);
glEnable (GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}
void simpleUdpVisual::resizeGL(int width, int height)
{
}
void simpleUdpVisual::paintGL()
{
if (data!=NULL)
{
glMatrixMode (GL_MODELVIEW);
glPushMatrix ();
glLoadIdentity ();
glMatrixMode (GL_PROJECTION);
glPushMatrix ();
glLoadIdentity ();
glTexImage2D ( GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f( -1.0, 1.0);
glTexCoord2f(1.0f, 0.0f); glVertex2f( 1.0, 1.0);
glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0, -1.0);
glTexCoord2f(0.0f, 1.0f); glVertex2f( -1.0, -1.0);
glEnd();
glFlush();
}
}
simpleUdpVisual::~simpleUdpVisual()
{
}