简体   繁体   English

如何使用glew在Qt 5.7中绘制OpenGL几何

[英]how to draw OpenGL geometry in Qt 5.7 using glew

I am trying to render a triangle in a QGLWidget (Qt5.7) but by some reason, I am unable to show the triangle on screen, only the blue background is showed. 我试图在QGLWidget(Qt5.7)中渲染三角形,但是由于某种原因,我无法在屏幕上显示三角形,仅显示蓝色背景。

myapp.pro file: myapp.pro文件:

QT += core gui opengl

CONFIG += c++11

TARGET = myapp
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

INCLUDEPATH += ../../libs/glew/include

SOURCES += main.cpp \
    ../../libs/glew/src/glew.c \
    glwindow.cpp

HEADERS += \
    ../../libs/glew/include/GL/glew.h \
    glwindow.h

This is the main function: 这是主要功能:

#include <QApplication>
#include <glwindow.h>

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  glwindow v;
  v.show();
  return app.exec();
}

The window header: 窗口标题:

#include <QtOpenGL/QGLWidget>

class glwindow : public QGLWidget
{
public:
  glwindow();
protected:
  void initializeGL() override;
  void paintGL() override;
};

The cpp file: cpp文件:

#include <GL/glew.h>
#include <glwindow.h>

GLfloat vertices[] = {
  +0.0f, +1.0f,
  -1.0f, -1.0f,
  +1.0f, -1.0f
};

glwindow::glwindow()
{}

void setupGeometry()
{
  GLuint buffer_id;
  glGenBuffers(1, &buffer_id);
  glBindBuffer(GL_ARRAY_BUFFER, buffer_id);
  glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  glEnableVertexAttribArray(0);
  glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
}

void glwindow::initializeGL()
{
  glewInit();
  setupGeometry();
}

void glwindow::paintGL()
{
  glClearColor(0.0, 0.0, 1.0, 1.0);
  glClear(GL_COLOR_BUFFER_BIT);

  glDrawArrays(GL_TRIANGLES, 0, 3);
}

Update 1: Added the shader code: 更新1:添加了着色器代码:

const GLchar *vs = "#version 150 // Specify which version of GLSL we are using."
                 "in  vec2 in_Position;"
                 "void main() "
                 "{"
                 "    gl_Position = vec4(in_Position.x, in_Position.y, 0.5, 1.0);"
                 "}";
const GLchar *fs = "#version 150 // Specify which version of GLSL we are using."
                 "precision highp float; // Video card drivers require this line to function properly"
                 "out vec4 fragColor;"
                 "void main()"
                 "{"
                 "    fragColor = vec4(1.0,1.0,1.0,1.0); //Set colour of each fragment to WHITE"
                 "}";

The function that setup shader is: 设置着色器的功能是:

void checkShader(GLuint ID)
{
  GLint compile_status = 0;
  glGetShaderiv(ID, GL_COMPILE_STATUS, &compile_status);
  if(compile_status != GL_TRUE)
    {
      GLint info_length;
      GLsizei buffer_size;
      glGetShaderiv(ID, GL_INFO_LOG_LENGTH, &info_length);
      GLchar *message = new GLchar[info_length];
      glGetShaderInfoLog(ID, info_length, &buffer_size, message);
      delete[] message;
    }
}

void initShader()
{
  GLuint program_id;
  GLuint vs_id, fs_id;

  vs_id = glCreateShader(GL_VERTEX_SHADER);
  fs_id = glCreateShader(GL_FRAGMENT_SHADER);

  const char *adapter[1];
  adapter[0] = vs;
  glShaderSource(vs_id, 1, adapter, 0);
  adapter[1] = fs;
  glShaderSource(fs_id, 1, adapter, 0);

  glCompileShader(vs_id);
  checkShader(vs_id);

  glCompileShader(fs_id);
  checkShader(fs_id);

  program_id = glCreateProgram();
  glAttachShader(program_id, vs_id);
  glAttachShader(program_id, fs_id);

  glLinkProgram(program_id);
  glUseProgram(program_id);
}

So, the init function is changed to 因此,init函数更改为

void glview::initializeGL()
{
  glewInit();
  initGeometry();
  initShader();
}

The shader initialization is failed with error message : (GLchar *) 0x7efe21 \\":1(10): error: GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES\\n\\" 着色器初始化失败,并显示以下错误消息: (GLchar *)0x7efe21 \\ :: 1(10):错误:不支持GLSL 1.50。支持的版本为:1.10、1.20、1.30、1.00 ES和3.00 ES \\ n \\”

Qt 5.7 only supports to glsl 1.3.0. Qt 5.7仅支持glsl 1.3.0。 So if ppl want to use glsl 4.3, try glfw or SDL. 因此,如果ppl要使用glsl 4.3,请尝试使用glfw或SDL。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM