glCreateShader(GL_VERTEX_SHADER);访问冲突执行位置

我正在尝试绘制一些文本,并且在尝试为文本创建着色器程序时,从GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);

收到执行位置错误的访问冲突

出现问题的主要功能开始

int main(int argc,char **argv) {
    //GLTtext* text = gltCreateText();
    //gltSetText(text,"ElectroCraft");

    //GLFWwindow* window;
    int width = 860,height = 490;
    if (!glfwInit()) {
        printf("failed to init glfw");
        return -1;
    }
    glutInit(&argc,argv);
    window = glfwCreateWindow(width,height,"ElectroCraft",NULL,NULL);
    glfwMakeContextCurrent(window);
    if (!window) {
        printf("failed to start window");
        glfwTerminate();
        return -1;
    }
    /*if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }*/
    //build and compile shader program
    //-----------------------------------
    //vertex shader
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader,1,&vertexShaderSource,NULL);
    glCompileShader(vertexShader);
    //check for shader compile errors
    int success;
    char infoLog[512];
    glGetShaderiv(vertexShader,GL_COMPILE_STATUS,&success);
    if (!success) {
        glGetShaderInfoLog(vertexShader,512,infoLog);
        std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
    }
    //fragment shader
    int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader,&fragmentShaderSource,NULL);
    glCompileShader(fragmentShader);
    //check for shader compile errors
    glGetShaderiv(fragmentShader,&success);
    if (!success) {
        glGetShaderInfoLog(fragmentShader,infoLog);
        std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
    }
    // link shaders
    int shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram,vertexShader);
    glAttachShader(shaderProgram,fragmentShader);
    glLinkProgram(shaderProgram);
    //check for liunking errors
    glGetProgramiv(shaderProgram,GL_LINK_STATUS,&success);
    if (!success) {
        glGetProgramInfoLog(shaderProgram,infoLog);
        std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
    }
...

全部包含,因为这可能也是问题所在:

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <GL/freeglut.h>
#include <map>
#include <GL/GL.h>
#include <stdio.h>
#include <string>
#include <glm\glm.hpp>
#include <iostream>
#include <ft2build.h>
//#include <glad.h>
#include FT_FREETYPE_H
using namespace std;

我可能会遇到这个问题,因为我可能没有提供正确的参数或其他内容。

do11223 回答:glCreateShader(GL_VERTEX_SHADER);访问冲突执行位置

您已包含glew,但尚未初始化。

在访问任何GL功能之前,请插入以下代码:

GLenum err = glewInit();
if (GLEW_OK != err)
{
   /* Problem: glewInit failed,something is seriously wrong. */
   std::cerr << "Error: " << glewGetErrorString(err) << std::endl;
   ...
}
std::cerr << "Status: Using GLEW " << glewGetString(GLEW_VERSION) << std::endl;

参考:GLEW Basics

本文链接:https://www.f2er.com/3167248.html

大家都在问