Hello,
I am trying to send an EGLImageKHR
object which is created from a render buffer from one device to another device .I am trying to use QT Tcp socket/server implementation to send the EGLImageKhr
object but could not manage it successfully. So The sender code part is as the following:
if (SenderSocket != NULL)
{
//qDebug() << "func " << __FUNCTION__ << "line" << __LINE__;
QByteArray data;
data.append(reinterpret_cast<const char*>(mImage),size);
//data.append(reinterpret_cast<QByteArray *>(mImage));
QDataStream out(&data, QIODevice::WriteOnly);
out.setDevice(SenderSocket);
out << data;
//qDebug() << "func " << __FUNCTION__ << "line" << __LINE__;
//qDebug() << "func " << __FUNCTION__ << "line" << __LINE__ << "data size" << data.size();
}
and client part to import the EGLImageKHR
is as the following:
QByteArray recievedData;
in.startTransaction();
in >> recievedData;
if (!in.commitTransaction())
return;
//qDebug() << "Received data size" << recievedData.size();
const unsigned char *data = reinterpret_cast<const unsigned char*>(recievedData.constData());
int size = recievedData.size();
mData = new unsigned char [size];
memcpy((void*)mData,data,size);
if (!mData)
{
return;
}
GLuint renderBuffer;
GLuint frameBuffer;
int mWinWidth = mwindow->width();
int mWinHeight = mwindow->height();
int rowPack;
glGetIntegerv(GL_PACK_ALIGNMENT, &rowPack);
glGenRenderbuffers( 1, &renderBuffer );
glBindRenderbuffer( GL_RENDERBUFFER, renderBuffer);
glEGLImageTargetRenderbufferStorageOES(GL_RENDERBUFFER, (void*)(mData));
if (glGetError()==GL_NO_ERROR)
{
qDebug() << "glEGLImageTargetRenderbufferStorageOES buff is OK" << glGetError();
}
else
{
qDebug() << "glEGLImageTargetRenderbufferStorageOES buff error is " << glGetError();
fprintf(stderr, "failed to create glEGLImageTargetRenderbufferStorageOES: %s\n", get_gl_error());
}
glBindRenderbuffer(GL_RENDERBUFFER, 0);
glGenFramebuffers( 1, &frameBuffer );
glBindFramebuffer( GL_FRAMEBUFFER, frameBuffer);
glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderBuffer);
if( glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
{
qDebug() << "KHR Framebuffer error is " << glGetError();
fprintf(stderr, "failed to create framebuffer: %s\n", get_gl_error());
}
else
{
qDebug() << "KHR Framebuffer is OK" << glGetError();
}
glBindFramebuffer( GL_FRAMEBUFFER, mwindow->openglContext()->defaultFramebufferObject() );
// Test part
int* buffer = new int[ mWinWidth * mWinHeight * 3 ];
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels( 0, 0, mWinWidth, mWinHeight, GL_BGR, GL_UNSIGNED_BYTE, buffer );
FILE *out = fopen("tga_file", "w");
short TGAhead[] = {0, 2, 0, 0, 0, 0, 640, 480, 24};
fwrite(&TGAhead, sizeof(TGAhead), 1, out);
fwrite(buffer, mWinWidth * mWinHeight*3, 1, out);
fflush(out);
fclose(out);
delete[] buffer;
glDeleteRenderbuffers(1,&renderBuffer);
renderBuffer = 0;
glDeleteFramebuffers(1,&frameBuffer);
frameBuffer = 0;
glPixelStorei(GL_PACK_ALIGNMENT, rowPack);
delete mData;
mData = NULL;
All the time I got error from glEGLImageTargetRenderbufferStorageOES
and there is no error from glGetError()
function.
So most probably I am doing something wrong while sending/processing the EGLImageKHR
.Could you please check and lemme know how to fix it ?
Regards