PDA

View Full Version : create texture from PNG raw pixel



saman_artorious
09-18-2013, 04:22 AM
I want to create a texture when I receive a byte array. This byte array is converted first to QImage and after I bind it to the texture. When I run the program, it shows it for a second and then it jumps out. Do you know why?



This is where I receive the byte array:


void GlWidget::pixmapCatchFromForm(QByteArray bytes)
{
QImage image((const uchar* )bytes.constData(), glWidth, glHeight, QImage::Format_ARGB32);
texture = bindTexture(image);
qDebug() << texture; // returns 1
}


and here I render:


void GlWidget::paintGL()
{
//! [5]
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

QMatrix4x4 mMatrix;
QMatrix4x4 vMatrix;

QMatrix4x4 cameraTransformation;
cameraTransformation.rotate(alpha, 0, 1, 0);
cameraTransformation.rotate(beta, 1, 0, 0);

QVector3D cameraPosition = cameraTransformation * QVector3D(0, 0, distance);
QVector3D cameraUpDirection = cameraTransformation * QVector3D(0, 1, 0);

vMatrix.lookAt(cameraPosition, QVector3D(0, 0, 0), cameraUpDirection);

//! [6]
shaderProgram.bind();

shaderProgram.setUniformValue("mvpMatrix", pMatrix * vMatrix * mMatrix);

shaderProgram.setUniformValue("texture", 0);

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
glActiveTexture(0);

shaderProgram.setAttributeArray("vertex", vertices.constData());
shaderProgram.enableAttributeArray("vertex");

shaderProgram.setAttributeArray("textureCoordinate", textureCoordinates.constData());
shaderProgram.enableAttributeArray("textureCoordinate");

glDrawArrays(GL_TRIANGLES, 0, vertices.size());

shaderProgram.disableAttributeArray("vertex");

shaderProgram.disableAttributeArray("textureCoordinate");

shaderProgram.release();
}

carsten neumann
09-18-2013, 04:02 PM
Does the program exit normally or does it crash? If the latter, have you run it under a debugger to determine where the crash occurs? Do you check for OpenGL errors?