为什么在使用GLFW时不需要加载着色器?

史蒂夫

根据我正在阅读的书,最新版本的OpenGL需要顶点着色器和片段着色器,如果未提供它们,则渲染将无法正常进行。

我使用的是GLFW库(3.0.4),在旋转三角形“ Hello World”类型示例中,没有代码用这些着色器加载GPU。我找不到任何能说明GLFW是否提供默认着色器的信息。

以下是我要参考的示例代码。glColor3f()可能涉及到的呼叫

另外,我注意到OpenGL.org文档似乎根本没有列出glColor*()为什么是这样?

#include "GLFW\glfw3.h"

static void error_callback(int error, const char* description)
{
    fputs(description, stderr);
}
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}
int main(void)
{
    GLFWwindow* window;
    glfwSetErrorCallback(error_callback);
    if (!glfwInit())
        exit(EXIT_FAILURE);
    window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        exit(EXIT_FAILURE);
    }

    glfwMakeContextCurrent(window);

    glfwSetKeyCallback(window, key_callback);
    while (!glfwWindowShouldClose(window))
    {
        float ratio;
        int width, height;
        glfwGetFramebufferSize(window, &width, &height);
        ratio = width / (float)height;

        glViewport(0, 0, width, height);
        glClear(GL_COLOR_BUFFER_BIT);

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(-ratio, ratio, -1.f, 1.f, 1.f, -1.f);

        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glRotatef((float)glfwGetTime() * 50.f, 0.f, 0.f, 1.f);

        glBegin(GL_TRIANGLES);
        glColor3f(1.f, 0.f, 0.f);
        glVertex3f(-0.6f, -0.4f, 0.f);
        glColor3f(0.f, 1.f, 0.f);
        glVertex3f(0.6f, -0.4f, 0.f);
        glColor3f(0.f, 0.f, 1.f);
        glVertex3f(0.f, 0.6f, 0.f);
        glEnd();

        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwDestroyWindow(window);
    glfwTerminate();
    exit(EXIT_SUCCESS);
}
棘轮怪胎

glBeginglEnd指示您使用即时模式,也就是使用先于着色器的固定功能管道。该管道也已过时,并已从4.0+核心配置文件中删除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在使用着色器时出现黑屏?

Phong着色器中不需要的透明度-GLSL

为什么不需要staticmethod装饰器?

为什么for循环不需要可变的迭代器?

为什么链接器正在寻找不需要的库

为什么在结束“循环”时“中断”不需要分号?

为什么执行AsyncTask时不需要捕获TimeoutException?

为什么在使用__syncthreads时我们不需要使用volatile变量

为什么在rc.local中使用sudo时不需要密码?

为什么在Linq表达式中使用String.contains时,不需要括号?

在EF Core中使用Include(或ThenInclude)时,为什么不需要指定类型?

为什么我的“ubuntu”用户在使用 sudo 时不需要密码

使用.net代码更新cshtml文件时,为什么不需要编译?

为什么返回表达式在不需要时使用分号?

为什么在使用 JUnit 编写测试类时不需要扩展 TestCase?

为什么在使用 Mongoose 时不需要 index.js 中的 MongoDB 常量?

为什么节点使用不需要导入?

为什么我有时需要使用JSON.stringify而有时不需要

不需要时使用super有什么害处吗?

为什么使用OpenGL编译顶点着色器时出现着色器编译器错误#143,#160和#216?

为什么不需要开玩笑?

为什么“ typeof”不需要括号?

* ngFor为什么不需要括号?

为什么在包含标准库中的头文件时不需要向编译器传递相应的源文件?

为什么编译器需要.java后缀,但解释器不需要.class后缀?

OpenGL glfw无法使用着色器绘制点

为什么在使用BeautifulSoup刮擦表格标题以删除不需要的HTML时不能使用“ .text”

为什么使用路由器出口访问其他模块的组件不需要添加导出

为什么在python中使用Apply Map函数替换标头名称中不需要的字符时出现错误