如何使这个简单的 OpenGL 代码(在“宽松”的 3.3 和 4.2 配置文件中工作)在严格的 3.2 和 4.2 核心配置文件中工作?

2024-01-08

我有一些 3D 代码,我注意到它们不会在严格的核心配置文件中呈现,但在“正常”(未明确请求仅作为核心)配置文件上下文中正常。为了隔离这个问题,我编写了最简单的 OpenGL 程序,仅绘制一个三角形和一个矩形:

我已经发布了OpenGL程序作为这里的要点 http://gist.github.com/3950516.

随着使用StrictCoreProfile当变量设置为 false 时,程序不会向控制台输出任何错误消息,并根据上面的屏幕截图绘制一个四边形和一个三角形,无论是在 Intel HD OpenGL 3.3 上还是在具有 OpenGL 4.2 的 GeForce 上。

However, with 使用StrictCoreProfile设置为true,它清除背景颜色但不绘制三边形和四边形,控制台输出是这样的:

GLCONN: OpenGL 3.2.0 @ NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2 (GLSL: 1.50 NVIDIA via Cg compiler)
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step '(post loop)': GL_INVALID_OPERATION
EXIT

...如果请求 4.2 严格核心配置文件而不是 3.2,则会出现同样的问题。适用于 3 个不同的 nvidia GPU,因此我认为我没有正确遵守严格的核心配置文件。我做错了什么,我该如何解决这个问题?

请注意,您将找不到glEnableVertexAttribArray调用上面的要点,因为它是在 glutil 包内 http://github.com/go3d/go-util/blob/master/gl/shaders.go#L58我正在导入——但这确实被称为要点的最后一步编译着色器() func.


您没有创建/绑定顶点数组对象 https://www.opengl.org/wiki/Vertex_Specification#Vertex_Array_Object with glGenVertexArrays() https://www.opengl.org/wiki/GLAPI/glGenVertexArrays and glBindVertexArray() https://www.opengl.org/wiki/GLAPI/glBindVertexArray。 VAO 封装了一堆顶点属性状态,包括启用了哪些属性、详细的每个属性信息等。在最初引入该功能时,它们是可选的,但根据 10.4 节,现在在严格/核心上下文中需要它们。OpenGL核心规范 https://www.opengl.org/documentation/current_version/:

任何命令都会生成 INVALID_OPERATION 错误 当没有绑定顶点数组时,修改、绘制或查询顶点数组状态。 这发生在初始 GL 状态中,并且可能是 BindVertexArray 的结果或 DeleteVertexArrays 的副作用而发生。

下面是如何使用 VAO 的一个非常粗略的示例:

// At initialization time:
GLuint vao = 0;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
// Set up your vertex attribute state:
//  - glBindBuffer(GL_ARRAY_BUFFER,...);
//  - glEnableVertexAttribArray(...);
//  - glVertexAttribPointer(...);
//  - etc. -- Refer to OpenGL docs to see what is/isn't included in the VAO!
glBindVertexArray(0); // unbinds vao

// At draw time:
glBindVertexArray(vao); // automatically sets up previously-bound vertex attribute state
glDrawArrays(...);
glBindVertexArray(0); // unbinds vao
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使这个简单的 OpenGL 代码(在“宽松”的 3.3 和 4.2 配置文件中工作)在严格的 3.2 和 4.2 核心配置文件中工作? 的相关文章

  • Bash脚本无法执行Go命令

    我正在尝试编写一个 bash 脚本来自动在不同的目录中运行 go get install 相关部分在这里 cd web go get cd web go install cd services go get cd services go i
  • Windows 上的 OpenGL SDK

    我正在尝试编写一个 OpenGL 应用程序 因此我安装了 Windows 7 SDK 然而 它似乎是OpenGL 1 1 define GL VERSION 1 1 1 如何找到我安装的 OpenGL 版本 dll 以及在哪里可以找到较新的
  • vscode 中的调试不会在断点处停止,调试器启动时显示“无法找到文件...”

    乌班图 vscode 1 62 1 去1 17 3 vscode go 扩展 v0 29 0 深入研究 v1 7 1 我是 vscode 和 Go 的新手 我有多年在 Eclipse 中调试 Java 应用程序的经验 我构建了一个小型多模块
  • 使用顶点缓冲区对象 (VBO) 渲染 Kinect 点云

    我正在尝试制作一个动态点云可视化工具 使用 Kinect 传感器每帧更新这些点 为了抓取帧 我使用 OpenCV 和 GLUT 来显示 OpenCV API 对于点 xyz 位置返回 640 x 480 float 对于 rgb 颜色数据返
  • Shader的功能参数表现

    我试图了解如何在着色器语言中实现传递参数 我读过几篇文章和文档 但仍然有一些疑问 特别是我试图理解与C 函数调用 特别强调性能 之间略有差异HLSL Cg and GLSL但我猜下划线的实现非常相似 到目前为止我所理解的 除非另有说明 函数
  • OpenGL 与 OpenCL,选择哪个以及为什么?

    哪些功能使 OpenCL 能够独特地选择 OpenGL 和 GLSL 进行计算 尽管有与图形相关的术语和不实用的数据类型 OpenGL 是否有任何真正的警告 例如 可以通过使用其他纹理将 a 渲染到纹理来完成并行函数评估 减少操作可以通过迭
  • 进行亚像素平移时,2D 纹理会扭曲

    我想知道一个理论推理为什么这是可能的 几何体的平移与纹理映射有何关系 我只能在进行子像素平移时注意到这种效果 如果通过整个像素平移 纹理看起来很好 我正在使用正交投影 GL CLAMP TO EDGE GL NEAREST 片段着色器是hi
  • 给定方法值,获取接收者对象

    Go 有没有办法从方法值获取接收者对象 例如有没有这样的MagicFunc这将使以下程序输出字符串my info来自底层 Foo 实例 package main import fmt type Foo struct A string fun
  • 共享来自单独命令/进程的属性

    我提供带有多个命令和子命令的命令行工具 我使用cobra https github com spf13 cobra命令行 我有两个单独的命令首先是前提条件e 给其他人 例如第一个命令是通过创建临时文件夹并验证某些文件来首选环境 第二个命令应
  • 我们如何在 Golang 中组合多个错误字符串?

    我是 golang 新手 我的应用程序需要在循环中返回多个错误 稍后需要组合并作为单个错误字符串返回 我无法使用字符串函数来组合错误消息 在返回之前可以使用什么方法将这些错误合并为一个错误 package main import fmt s
  • 无法通过键获取 Gorilla 会话值

    我无法通过这种方式从会话中获取价值 它是nil session initSession r valWithOutType session Values key 完整代码 package main import fmt github com
  • nsq 无法通过连接到 nsqlookupd 来消费消息

    我尝试使用 docker compose 来运行 nsq docker compose yml如下 version 3 services nsqlookupd image nsqio nsq command nsqlookupd ports
  • 完全删除使用“go get”安装的软件包?

    我正在使用 Go 1 13 1 最新版本 我正在尝试完全删除我安装的软件包go get来自 GitHub 这go clean i
  • OpenGL 新手: glutMouseFunc

    我试图在单击鼠标后更改球体位置 但在使用 glutMouseFunc 中的 x 和 y 时它不起作用 以下是代码 include stdafx h include
  • Go 无法推断赋值中的类型:“non-name on left side of :=”

    该片段按预期工作play golang org p VuCl OKMav http play golang org p VuCl OKMav i 10 next 11 prev i i next 然而这个几乎相同的片段给出了non name
  • Gorm 总是返回带有 nil 值的结构

    我正在使用 Gorm 构建 Go Web API 作为 Amazon RDS 中 Postgresql 数据库的 ORM 问题是 Gorm 总是返回一片结构 其值全部为零 尽管数据库已经填充了数据 切片中的结构体数量是否合适取决于LIMIT
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u
  • 使用覆盖率信息测试 Go 中的 os.Exit 场景 (coveralls.io/Goveralls)

    这个问题 如何在 Go 中测试 os exit 场景 https stackoverflow com questions 26225513 how to test os exit scenarios in go 以及其中得票最高的答案 列出
  • sRGB 纹理。它是否正确?

    我最近阅读了一些有关 sRGB 格式以及它们如何允许硬件自动对典型显示器执行色彩校正的文章 作为我阅读的一部分 我发现您可以使用普通纹理和返回结果上的 pow 函数来模拟此步骤 无论如何 我想问两个问题 因为我以前从未使用过此功能 首先 有
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 如何保存文本编辑中的文本

    帮助我 我想完成此代码并使用 Qt Widgets 从 PyQt5 中的文本编辑器保存文本文件 Q 文件对话框 get 保存文件名 帮我 我想在文本编辑器中写入文本并保存它 但我不知道如何完成 Save File 功能 Code from
  • 有 2 个未决意图的警报管理器只有 1 个有效?

    我设置了 2 个闹钟 一个用于通知 另一个用于执行一些任务 我的问题是 似乎只有一个警报起作用 通知服务 第一个警报设置 另一个警报永远不会响起 这是我的代码 Intent myIntent1 new Intent getApplicati
  • QWidget 用于显示带有小图片的文本(图标/表情符号)

    这样的小部件存在吗 我可以根据以下内容编写自己的小部件QLabels 和布局类似于http qt project org doc qt 5 qtwidgets layouts flowlayout example html http qt
  • 业力 - 找不到插件

    我正在尝试使用 karma 运行 js 测试用例 但总是出现插件未找到错误 有趣的是同一个配置文件 对我的其他同事来说工作得很好 这是日志 karma start karma conf js 04 10 2016 17 51 24 755
  • IsUnique=Yes 时唯一键和索引有什么区别?

    我有一个带有主键的表 但我希望约束另外两列 以便保证两者的组合始终是唯一的 一个愚蠢的例子 在 BOOKS 表中 IBAN 列是主键 但 Title 和 Author 列的组合也应该始终是唯一的 在 SQL Server Managemen
  • 从 ClientModelValidationContext 访问完整的 html 字段属性

    我有一个自定义验证属性 我正在将其从 asp net 转移到 asn net core 这是一个简单的 requiredif 属性 实现了 IClientModelValidator public class RequiredIfAttri
  • 为什么 std::string 没有隐式转换为 bool

    在 C 中是否有原因std string不是隐式转换为bool 例如 std string s if s s in not empty 与其他语言一样 例如 python 我认为使用它很乏味empty method 这大概could现在需要
  • 如何使用数组公式引用先前的匹配记录?

    我有一个项目电子表格 项目经理在每个月有一些活动的情况下输入每个项目的当前进度状态 因此 A B 和 C 列已填充 我需要能够使用 arrayformula 计算出 D 列 请注意 2019 年 6 月没有 项目 1 的活动 记录 我想我首
  • Scala - 如何将路径列表解析为 JSON 格式的目录结构

    我正在尝试创建一个嵌套目录结构 json 给定 scala 中的文件路径列表 例如 如果我有这样的路径列表 val a List a b c d e f runid1 a b c d e f runid2 a b c d e g runid
  • Linux 容器上的 Azure Function 的 Docker 问题 - 函数缺失导致函数运行时出现 404

    这个问题是这个问题的延续 在 Linux 容器上触发 Azure 函数 HTTP 函数不起作用 404 https stackoverflow com questions 61567697 azure function http trigg
  • SQL/VBA:如何按从每月第一天以外的一天开始的会计年度进行分组

    我正在尝试 使用 MS Access 按会计年度对一些数据进行分组 该会计年度可能与日历年度不同 如果每个会计年度总是从给定月份的第一天开始 那么解决方案很简单 可以简单地使用如下 if 语句 FY IIf Month orderdate
  • 使用 Handlebars 重复查找

    给定一个对象数组 我想使用嵌套对象的一个 属性来查找 Handlebars 中关联对象的各种属性 在此示例中 我想显示每所大学的学生列表 以及每个学生所属院系的信息 我的代码有效 但嵌套查找非常重复 lookup lookup majors
  • 检测脚本的位置而不是调用它的页面

    我想知道是否可以以某种方式找到脚本的位置而不是调用它的页面 例如如果页面是http xxx yyy com a htm http xxx yyy com a htm 然后我写了 location href 我得到了那个位置而不是http a
  • 从 C++ 访问 QML 对象

    以下是将 QML 文档加载到 C 中的代码 QmlDocument qml QmlDocument create asset main qml parent this Create root object for the UI Abstra
  • SelectionStart 和 SelectionEnd 对于文本区域意味着什么?

    我遇到了以下代码片段 将 Enter 插入到按下 ctrl Enter 的文本区域中的文本中 txtChatMessage keydown MessageTextOnKeyEnter function MessageTextOnKeyEnt
  • Swift 中的懒惰

    Why is lazy这里用的 extension SequenceType func mapSome u transform Generator Element gt U gt U var result U for case let x
  • 在haskell中剖析java类文件

    我今年早些时候刚刚开始学习 Haskell 语言 并且正在开发一个项目 该项目输入一个 java 类文件 即 FileName1 class 并剖析该文件以打印出以下内容 类文件定义的类名 类的方法数量 它们的名称和类型 我做了一些研究 发
  • C# 数据库应用程序并发

    我曾经用 C 编写过一个多用户应用程序 使用 SQL Server 2005 Express 作为后端 我有一个订单集合 为了使用此类 您需要实例化它并调用 Load CustomerCode 方法 以便使用指定客户的订单填充集合 我的问题
  • Vb.Net 属性语法

    我问过我的同事 甚至试图在互联网上查找这个问题 但我一直无法得到答案 有什么区别 Public Property Name As String and Public Property Name As String 在属性名称后面添加 有什么
  • 如何使这个简单的 OpenGL 代码(在“宽松”的 3.3 和 4.2 配置文件中工作)在严格的 3.2 和 4.2 核心配置文件中工作?

    我有一些 3D 代码 我注意到它们不会在严格的核心配置文件中呈现 但在 正常 未明确请求仅作为核心 配置文件上下文中正常 为了隔离这个问题 我编写了最简单的 OpenGL 程序 仅绘制一个三角形和一个矩形 我已经发布了OpenGL程序作为这