如何使这个简单的 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 核心配置文件中工作? 的相关文章

  • 简单的线框格式?

    我正在寻找一种用于线框模型的简单文件格式 我知道 VRML u3D 等 但这些对于我的需求来说似乎很重要 我的标准是 必须有明确的规格 要么是开放的 要么是非常完善 记录的 我只需要 想要 简单的模型 顶点和边 我不想处理面孔或物体 如果格
  • 将绝对路径和相对路径组合起来得到新的绝对路径

    我正在编写一个程序 其中一个组件必须能够采用给定的路径 例如 help index html or help 和基于该位置的相对路径 例如 otherpage index html or sub dir of help or help2 h
  • OpenGL 着色器不与着色器程序链接

    我正在尝试使用 GLFW GLEW 添加着色器 我收到一个错误 指出着色器已加载 但它们没有有效的对象代码 这是我用于加载着色器的代码 class SHADER public void LoadShaders const char vert
  • lnk1104:无法打开“LIBC.lib”链接

    使用 GLee 将着色器写入我的 OpenGL 项目并编译后 我收到了错误LNK1104 cannot open file LIBC lib 我尝试按照其他人的建议添加它并忽略它 但没有解决问题 有没有其他方法可以解决我错过的这个问题 以下
  • 如何使用json传递opentracing数据

    我的 API 网关启动一个跟踪器和一个用于验证电子邮件的范围 然后它传递给user service用于验证 我想通过这个span详情至user service作为 json 对象并启动另一个span as a tracer start sp
  • Eclipse 标记 OpenGL 函数无法解析

    我尝试在 Eclipse C C 中使用一些 OpenGL 函数 一些 标准 函数如 GlClear 可以被 eclipse 识别 而其他函数如 glBindBuffer 和 glEnableVertexAttribArray 则不能 它们
  • 如何通过模板中的变量访问对象字段?

    我有一个嵌套循环 columns columns range dx dataList range c columns index dx c end end dataList是orm模型数组 和ID Title字段 那么columns is
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • 使用cgo时的多重定义

    package main int add int a int b return a b import C import fmt func main func Test1 fmt Println C add 1 3 export Test2
  • Golang标志:忽略丢失的标志并解析多个重复的标志

    我是 Golang 新手 一直无法使用 flag 找到这个问题的解决方案 如何使用 flag 以便我的程序可以处理此类调用 其中 term 标志可能出现可变次数 包括 0 次 myprogram f flag1 myprogram f fl
  • 在 Go 中使用互斥锁

    我想了解互斥体是如何工作的 据我目前的理解 它是为了进行原子操作并同步对某些数据的访问 我在这里构建了一个队列数据结构的示例 https github com arnauddri algorithms blob master data st
  • 我想在后端验证来自 golang 前端的时区

    前端在注册期间发送时区以及其他用户详细信息 我需要在时区上放置一个验证器来进行 api 测试 时区数据的格式为 GMT 10 00 Hawaii GMT 08 00 Pacific Time US amp Canada 我所做的是定义数组中
  • 使用 C# 截取任何外部应用程序的屏幕截图

    我们有一个 C WPF 应用程序 我们想要在其中截取我们启动的任意应用程序的屏幕截图 即 我们可以引用我们启动的进程 应用程序可能已最小化或位于其他窗口后面 但我们仍然只需要单个应用程序的图像 而不是重叠像素 我知道使用 BitBlt 或的
  • 在 Go 中跟踪 HTTP 请求时指定超时

    我知道通过执行以下操作来指定 HTTP 请求超时的常用方法 httpClient http Client Timeout time Duration 5 time Second 但是 我似乎不知道在跟踪 HTTP 请求时如何执行相同的操作
  • 为什么OpenGL使用float而不是double? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么奇数的切片容量与偶数的切片行为不同

    我注意到 当容量为奇数时 切片的容量会以不同的方式表现 更具体地说 当向切片添加元素时 切片的容量为doubled当原始容量为偶数时 但当原容量为奇数时 容量为增加一 然后加倍 例子 s make int 28 28 s append s
  • 为什么结构中“[0]byte”的位置很重要?

    0 byte在golang中不应该占用任何内存空间 但这两个结构体的大小不同 type bar2 struct A int 0 byte type bar3 struct 0 byte A int 那么为什么这个位置 0 byte这里重要吗
  • 是否可以获取有关 Golang 中调用者函数的信息?

    是否可以获取有关 Golang 中调用者函数的信息 例如 如果我有 func foo Do something func main foo 我怎样才能得到那个foo已被呼叫来自main 我可以用其他语言实现这一点 例如在 C 中我只需要使用
  • 我怎么知道我的所有 goroutine 确实正在使用 golang 的同步包等待一个条件

    我有一个应用程序 我正在创建多个 goroutine 来同时执行某个任务 所有工作协程都会等待条件 事件发生 一旦事件被触发 它们就会开始执行 创建完所有goroutines后 主线程在发送广播信号之前应该知道所有goroutines确实处
  • 为什么拥有单独的投影矩阵但结合模型和视图矩阵会有好处?

    当您学习 3D 编程时 您会被告知用 3 个变换矩阵来思考是最简单的 模型矩阵 该矩阵对于每个模型都是独立的 它根据需要旋转和缩放对象 最后将其移动到 3D 世界中的最终位置 模型矩阵将模型坐标转换为世界坐标 视图矩阵 对于大量对象 如果不

随机推荐

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

    帮助我 我想完成此代码并使用 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程序作为这