为了账号安全,请及时绑定邮箱和手机立即绑定

当我的主循环等待通道滴答作响并传递事件时,OpenGl似乎卡住了

当我的主循环等待通道滴答作响并传递事件时,OpenGl似乎卡住了

Go
偶然的你 2021-05-20 22:02:36
我写了一个简单的Go程序。它的目标是使用OpenGl在屏幕上旋转一个三角形。编辑:主循环似乎是负责任的,OpenGl很好,但是我在goroutine和/或通道上做错了什么。请参阅这篇文章的底部。我正在适当地更改此问题的标题。该程序几乎可以正常工作。它结结巴巴,在应有的旋转与仅刷新两个OpenGl缓冲区而没有绘制任何内容之间交替。我尝试渲染的帧中约有三分之二无声地失败了,我也不明白为什么。这不取决于我的帧频。无论我以50 FPS还是1 FPS更新,我都会得到一系列混乱的框架,然后是一系列较短的工作框架。我不认为我要求OpenGl工作太快(glFinish()无论如何我都会打电话)。我开始实验,发现一个奇怪的行为。我使用glGetUniformLocation的第一步,我的新的旋转矩阵发送到顶点缓冲区。我注意到,如果我glGetUniformLocation要告诉我在哪里可以找到"dummy",明暗器中显然不存在的参数,则它并不总是按预期返回-1;它有时返回0。那个哑属性不负责这个问题,它只是一种症状。我在每次OpenGl调用后都检查glGetError,它们总是返回NO_ERROR。我在这里粘贴我的代码。我希望我可以缩短它的时间。我的真实代码在每次调用OpenGl之后都会检查glError,并且还会查看0个缓冲区或-1个位置。这个版本比较轻。 func main在顶部,紧跟着我的循环,它负责旋转。我的问题可能来自于OpenGl在主Goroutine中,该主Goroutine在等待通道传递滴答声或SDL事件时会阻塞。我不知道,我很困惑。从glGetUniformLocation更改标题通常会返回0,而不是-1,这对于OpenGl不存在的属性似乎卡住了,而我的主循环等待通道滴答作响并传递事件。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信