Quantcast
Channel: QtWebEngine
Viewing all articles
Browse latest Browse all 13965

Render the texture by QGLWidget without showing the widget

$
0
0
Using openGL to do some image processing, the first experiment is convert the color image to gray, everything are fine, but I don’t want to show the widget. If I don’t call “show()” the QGLWidget would not begin to render the texture Could I render the texture without showing the widget? Is QGLWidget a right tool to do that? part of the codes #include <QDebug>   #include "toGray.hpp"   toGray::toGray(std::string const &vertex_file, std::string const &fragment_file, QWidget *parent)     :basicGLWidget(vertex_file, fragment_file, parent) //read shaders, compile them, allocate VBO { }   void toGray::initializeVertexBuffer() {     std::vector<GLfloat> const vertex{         -1.0f,  1.0f, 0.0f, 1.0f,         1.0f,  1.0f, 0.0f, 1.0f,         -1.0f, -1.0f, 0.0f, 1.0f,         1.0f, 1.0f, 0.0f, 1.0f,         1.0f, -1.0f, 0.0f, 1.0f,         -1.0f, -1.0f, 0.0f, 1.0f,     };       initializeVertexBufferImpl(vertex); //copy the data into QOpenGLBuffer       QImage img(":/simpleGPGPU/images/emili.jpg");     texture_addr_ = bindTexture(img);     resize(img.width(), img.height());       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); }   void toGray::paintGL() {     qglClearColor(Qt::white);     glClear(GL_COLOR_BUFFER_BIT);       program_.bind();     bind_buffer();     program_.enableAttributeArray("qt_Vertex");     program_.setAttributeBuffer( "qt_Vertex", GL_FLOAT, 0, 4);       glActiveTexture(GL_TEXTURE0);     glBindTexture(GL_TEXTURE_2D, texture_addr_);       glDrawArrays(GL_TRIANGLES, 0, get_buffer(0).size());       program_.disableAttributeArray("qt_Vertex");     program_.release();     glActiveTexture(0);     release_buffer(); } vertex shader attribute highp vec4 qt_Vertex; varying highp vec2 qt_TexCoord0;   void main(void) {         gl_Position =  qt_Vertex;     qt_TexCoord0 = (qt_Vertex.xy + vec2(1.0)) * 0.5; } fragment shader uniform sampler2D source; varying highp vec2 qt_TexCoord0;   vec3 toGray(vec3 rgb) {     return vec3(rgb.r * 0.299 + rgb.g * 0.587 + rgb.b * 0.114); }   void main(void) {             vec3 gray = toGray(texture2D(source, qt_TexCoord0).rgb);     gl_FragColor = vec4(gray, 0.0); }

Viewing all articles
Browse latest Browse all 13965

Latest Images

Trending Articles



Latest Images