c++ - 为什么这个 OpenGL Shader 分段在调用 glCreateShader 时会出错?

标签 c++ opengl glsl shader vertex-shader

我正在尝试学习如何编写 OpenGL 着色器。为什么这段代码在我的机器上运行时会段错误? (我使用的是 Ubuntu 10.04,我将其命名为 shader.cpp。)

#include <GL/glut.h>
#include <iostream>
using namespace std;

int
main (int argc, char **argv)
{
  GLuint myVertexShader = glCreateShader(GL_VERTEX_SHADER);
  return 0;
}

我正在使用以下 Makefile 编译它:

CC=g++
CFLAGS=-c -Wall -DGL_GLEXT_PROTOTYPES
LDFLAGS= -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm
SOURCES=shader.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=shader

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

clean:
    rm -rf *o $(EXECUTABLE)

check-syntax:
    $(CC) -o nul -S ${CHK_SOURCES}

这似乎是调用 glCreateShader 的行上的段错误。我没有找到这个问题的根源。我是初学者。谢谢!

注意:这段代码代表的是我第一次尝试使用 OpenGL 编写一个简单的着色器。如果一切都错了,请随时发布一些工作代码。我真正想要的是获得可以编译和运行的东西。

最佳答案

您不能凭空创建着色器。它必须使用有效的 RenderContext 当前创建。事实上,在没有当前 RenderContext 的情况下,在 OpenGL 中可以做的事情非常少。 (创建 RenderContext 留给读者作为练习)

另一件需要考虑的事情是您机器上的 GL 驱动程序可能不支持着色器。仅仅因为函数符号 resolve 并不意味着它可以完成。这是您需要 RC 的部分原因——因此 GL 运行时可以确定 RC 面向的硬件支持哪些功能。

http://www.opengl.org/wiki/Detecting_the_Shader_Model

关于c++ - 为什么这个 OpenGL Shader 分段在调用 glCreateShader 时会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5724578/

相关文章:

c++ - 使用DrawEllipse(GDI+)绘制手写笔画点

c++ - 使用 BubbleSort 对数组进行排序

opengl - 像素化 UV 坐标时是否可以解决舍入问题?

3d - 非方阵在计算机图形学中如何使用?

c++ - 使用 Boost::asio::async_send_to 发送加密数据时出错

c++ - 是否有一个类存储另一个类所需信息的设计模式,例如它的构造?

c++ - 警告 : Variable cannot be bound (it either doesn't exist or has been optimized away)

opengl - 概念 : what is the use of glDrawBuffer and glDrawBuffers?

c++ - 在体素引擎中创建 block 网格很慢

c++ - 如何正确添加状态栏?