gpt4 book ai didi

c - OpenGL 着色器编译代码位于何处?

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:33 25 4
gpt4 key购买 nike

我怀疑我的 opengl 头文件中可能缺少代码,或者我的编译无法查询和加载与着色器编译相关的代码。我正在使用 Simple DirectMedia Layer,我可以编写和运行所有 OpenGL 代码短片——直到我使用着色器。我有一个 friend 也有同样的问题。当我使用着色器时,我收到了很多未声明的语句:

$ make
cc -c -o proceduralTexture.o proceduralTexture.c
proceduralTexture.c: In function 'PrintShaderLog':
proceduralTexture.c:60:22: error: 'GL_INFO_LOG_LENGTH' undeclared (first use in
this function)
glGetShaderiv(obj,GL_INFO_LOG_LENGTH,&len);
^
proceduralTexture.c:60:22: note: each undeclared identifier is reported only onc
e for each function it appears in
proceduralTexture.c:70:22: error: 'GL_COMPILE_STATUS' undeclared (first use in t
his function)
glGetShaderiv(obj,GL_COMPILE_STATUS,&len);
^
proceduralTexture.c: In function 'PrintProgramLog':
proceduralTexture.c:76:23: error: 'GL_INFO_LOG_LENGTH' undeclared (first use in
this function)
glGetProgramiv(obj,GL_INFO_LOG_LENGTH,&len);
^
proceduralTexture.c:85:23: error: 'GL_LINK_STATUS' undeclared (first use in this
function)
glGetProgramiv(obj,GL_LINK_STATUS,&len);
^
proceduralTexture.c: In function 'SDL_main':
proceduralTexture.c:430:34: error: 'GL_FRAGMENT_SHADER' undeclared (first use in
this function)
_procShader = glCreateShader(GL_FRAGMENT_SHADER);
^
proceduralTexture.c:438:34: error: 'GL_VERTEX_SHADER' undeclared (first use in t
his function)
_vertShader = glCreateShader(GL_VERTEX_SHADER);
^
make: *** [proceduralTexture.o] Error 1

我有 OpenGL 4.2 版。我在 proceduralTexture.c 中包含的文件是:

#include <stdio.h>
#include <math.h>
#include "SDL/SDL.h"
#include <GL/gl.h>
#include <GL/glu.h>

我的 makefile 看起来像这样:

proceduralTexture: proceduralTexture.o
# Windows
gcc -Wall -O3 -o $@ $^ -lopengl32 -lmingw32 -lSDLmain -lSDL -lSDL_mixer -lz

我错过了什么?

最佳答案

What am I missing?

在大多数操作系统中,OpenGL 的应用程序二进制接口(interface) (ABI) 仅适用于 1.1 或 1.2 版本,并且必须在运行时加载版本之后的所有内容。这称为扩展机制

MacOS X 除外,其中可用的 OpenGL 版本直接由操作系统版本决定,OpenGL 框架已经满足该特定版本的所有需求。

获得现代 OpenGL 功能的最简单方法是使用扩展加载器包装器。不幸的是,最受欢迎的 (GLEW) 仍然没有完美地涵盖核心配置文件(您必须启用实验性功能)。不过,要让着色器正常工作就足够了。

所以我建议转到 The GLEW homepage 首先阅读所有文档,然后下载 GLEW (不要为预构建的二进制库版本而烦恼)将源添加到您的项目中并使用它进行静态构建.在您创建 OpenGL 上下文后调用 glewInit(),并且应该覆盖它。

关于c - OpenGL 着色器编译代码位于何处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21642184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com