“当前顶点声明不包含当前顶点着色器所需的所有元素。缺少TextureCoordinate0。”
当我尝试使用spriteFont在屏幕上绘制我的FPS时出现此错误,在我调用spriteBatch.End()的行上
我的效果甚至不使用纹理坐标。 但我找到了问题的根源,而不是如何修复它。 我有一个单独的线程来构建几何(LOD算法),不知怎的,这似乎是我遇到问题的原因。 如果我将它设置为非线程并且每帧更新我的网格,我不会收到错误。 而且,如果我保持多线程,但不尝试在屏幕上绘制文本,它工作正常。 我不能两者兼顾。
为了使它更奇怪,它实际上编译并运行了一点点。但总是崩溃。 我在构建网格的方法中放置一个Thread.Sleep,以便它不经常发生,我看到我让这个线程睡眠越多,它被调用的越多,它在崩溃之前平均运行的时间就越长。 如果它睡眠1000毫秒,它可能运行一分钟。如果它睡眠10ms,它甚至不会在崩溃之前显示一帧。这让我相信它与在网格构建线程上执行的某一行代码有关,同时您在屏幕上绘制文本。
似乎我在绘制文本时可能需要锁定一些内容,但我不知道。 有什么想法吗?
答案 0 :(得分:3)
我的信息来自GDC 2008的演示文稿“Understanding XNA Framework Performance”。它说:
- GraphicsDevice有点线程安全
- 一次无法从多个线程渲染
- 可以在另一个线程呈现
时创建资源和SetData
- ContentManager不是线程安全的
- 确定有多个实例,但每个线程只有一个
我的猜测是你在某个地方违反了其中一条规则。或者你正在修改一个缓冲区,用于渲染而没有适当的锁定。