如何在C++中将<glad/glad.h>包含到多个头文件中?

问题描述 投票:0回答:2

我有一个使用 opengl 的 C++ 项目。我有 main.cpp 处理 openGL 初始化、创建窗口和类似的东西。 我想创建一个类,在其中我可以将一些纹理外包到着色器中。 但是当我尝试使用包含在任何其他类标头中的shader.h 或glad.h 标头时,我收到错误:

致命错误 C1189:#error:OpenGL 标头已包含,删除 这包括,很高兴已经提供了

如果我在 main.cpp 中执行所有逻辑,一切都很好,只有在尝试在除 main.cpp 之外的任何地方使用 openGL 函数时才会出现问题

main.cpp:

#include <glad/glad.h> // generated from https://glad.dav1d.de
#include "shader.h"

int main()
{
     ... //Do OpenGL Staff
}

着色器.h:

#ifndef SHADER_H
#define SHADER_H

#include <glad/glad.h>
#include <glm/glm.hpp>


class Shader
{
public:
    unsigned int ID;
...//some Shader definition staff
}
#endif

现在我想要外部类“Maze.h”将其地图加载到opengl纹理内,就像那样:

class Maze
{
public:
    ...//some maze-relate staff
    void LoadMazeToGL(Shader* shader)
   {
        // load and create a texture 
        // -------------------------
        glGenTextures(1, &screenTex1);
        glBindTexture(GL_TEXTURE_1D, screenTex1);
        // set the texture wrapping parameters
        glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);   // set texture wrapping to GL_REPEAT (default wrapping method)
        glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        // set texture filtering parameters
        glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

        GLint curMapId = glGetUniformLocation(shader->ID, "shaderInternalVarName");
        glUniform1i(curMapId, 2); // Texture unit 2 is for current map.

        ... //define and fill tex1data using Maze private information
    
        glActiveTexture(GL_TEXTURE0 + 2);
        glBindTexture(GL_TEXTURE_1D, screenTex1);
        glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, MazeIntegerSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex1data);
    
    }
}
c++ opengl header-files
2个回答
0
投票

要检查此类问题,请使用 GCC/g++ 的 -E 标志或编译器的替代方案。这输出预处理器的结果(因此包含等)。然后您可以查看生成的文件并查找双重包含。您可能只是忘记了某个地方的包含守卫:)


0
投票

所以我也遇到了这样的问题,我只是将glad.c文件添加到我的项目中

在 Visual Studio 中,在解决方案资源管理器中右键单击您的项目。 选择“添加”->“现有项目...” 导航到下载 GLAD 文件的目录并选择glad.c。

© www.soinside.com 2019 - 2024. All rights reserved.