| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #include "WidgetGL1.h"
- #include <gl/gl.h>
- #include <qopenglext.h>
- #include "spdlog/spdlog.h"
- WidgetGL1::WidgetGL1(QWidget *parent)
- {
- }
- WidgetGL1::~WidgetGL1()
- {
- }
- void WidgetGL1::initializeGL()
- {
- /* 初始化OpenGL函数 */
- initializeOpenGLFunctions();
- /* 顶点输入 */
- float vertices[] = {
- -0.5f, -0.5f, 0.0f,
- 0.5f, -0.5f, 0.0f,
- 0.0f, 0.5f, 0.0f
- };
- /* 顶点缓冲对象 */
- GLuint VBO;
- glGenBuffers(1, &VBO);
- /* 将VBO绑定到缓冲对象上(其实是用于激活这个VBO对象,可以对这个对象进行操作了)
- 说明:OpenGL的对象操作都要依赖OpenGL提供的函数,有很多对象类型,这里将VBO绑定在 GL_ARRAY_BUFFER 上,就像放在了对应的操作台上,之后就可以对这个对象进行
- 操作,后续的一切对 GL_ARRAY_BUFFER 的操作就是对VBO的操作 */
- glBindBuffer(GL_ARRAY_BUFFER, VBO);
- /* 将数据拷贝到VBO中 */
- glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
- /* 顶点着色器 */
- const char* vertexShaderSource = R"(
- #version 330 core
- layout (location = 0) in vec3 aPos;
- void main()
- {
- gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
- }
- )";
- /* 创建顶点着色器对象 */
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- /* 加载顶点着色器源码 */
- glShaderSource(vertexShader, 1, &vertexShaderSource, nullptr);
- /* 编译着色器 */
- glCompileShader(vertexShader);
- printOpenGLCompileError(vertexShader);
- }
- void WidgetGL1::resizeGL(int w, int h)
- {
- }
- void WidgetGL1::paintGL()
- {
- }
- /* 打印编译错误 */
- void WidgetGL1::printOpenGLCompileError(GLuint errorCode)
- {
- int sucess;
- char infoLog[512];
- glGetShaderiv(errorCode, GL_COMPILE_STATUS, &sucess);
- if (!sucess)
- {
- glGetShaderInfoLog(errorCode, 512, nullptr, infoLog);
- SPDLOG_ERROR("OpenGL编译错误: {}", infoLog);
- }
- }
|