Metal
- Metal與OpenGL的區(qū)別
OpenGL ES的渲染代碼可以抽象為Render Targets的設(shè)定朋凉,Shaders綁定,設(shè)置Vertex Buffers缕碎、Uniforms和Textures切心,最后調(diào)用Draws指令。
glBindFramebuffer(GL_FRAMEBUFFER, myFramebuffer);
glUseProgram(myProgram);
glBindBuffer(GL_ARRAY_BUFFER, myVertexBuffer);
glBindBuffer(GL_UNIFORM_BUFFER, myUniforms);
glBindTexture(GL_TEXTURE_2D, myColorTexture);
glDrawArrays(GL_TRIANGLES, 0, numVertices);
[圖片上傳失敗...(image-f3ca44-1657608039143)]
再看Metal的渲染代碼: Render Targets設(shè)定 是創(chuàng)建encoder渤涌; Shaders綁定 是設(shè)置pipelineState佩谣; 設(shè)置Vertex Buffers、Uniforms和Textures 是setVertexBuffer和setFragmentBuffer实蓬; 調(diào)用Draws指令 是drawPrimitives茸俭; 最后需要再調(diào)用一次endEncoding。
encoder = [commandBuffer renderCommandEncoderWithDescriptor:descriptor]; [encoder setPipelineState:myPipeline];
[encoder setVertexBuffer:myVertexData offset:0 atIndex:0];
[encoder setVertexBuffer:myUniforms offset:0 atIndex:1];
[encoder setFragmentBuffer:myUniforms offset:0 atIndex:1];
[encoder setFragmentTexture:myColorTexture atIndex:0];
[encoder drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:0 vertexCount:numVertices];
[encoder endEncoding];
[圖片上傳失敗...(image-2bff2b-1657608039143)]