学习Metal: Hello, Triangle
文章目录
学习3D的API, 比如OpenGL, DirectX, 做的第一个渲染总会是三角形. 所以, 我们也来看下如何用Metal来渲染一个三角形.
扩展MyMetalView
我们给上次帖子中的MyMetalView增加几个成员函数待用.
|
|
准备顶点
我们在屏幕中间画一个三角形, 三个顶点的数据放在vertexData里面.
并且生成了一个MTLBuffer, vertexBuffer.
|
|
Metal Shader
我们需要写一个最基本的shader来渲染.
|
|
我们在后面再详细讨论Metal Shader.
|
|
为了便于编辑shader内容, 我们将shader放入变量shaderStr中. 通过上面代码就获得了一个带有我们自定义的MTLRenderPipelineState.
渲染
接下来渲染.
|
|
一点感慨
在写这个三角形的demo的时候, 走了一点弯路, 感觉写对了, 三角形却怎么都渲染不出来. 翻来覆去的比较代码, 没有一点头绪.
这时我把MyMetalView搬到一个空白的Xcode工程中进行调试, 点了一下"Capture GPU frame", 马上打开了一片新天地. 在GPU运行堆栈, 看到Geometry的顶点数据异常. 然后反过来看顶点数据初始化的时候, vertexData 声明成了 initVertex的局部变量. 这样导致渲染的时候, vertexData就变成了未定义的值了. 顺利解决问题.
想到学习OpenGL的时候, 一旦渲染出错, 真是一筹莫展. Metal借助Xcode这种一点即用的GPU调试功能, 一定会对我们掌握3D渲染大有裨益.
同样代码也都托管在github上. https://github.com/young40/LearnMetal . 欢迎star, 感谢!
文章作者 杨世玲
上次更新 2018-07-14