标签:ati 分层 text 执行 open vat 增加 raw 切片
1、使用glDrawArraysInstanced与glDrawElementsInstanced这类的函数使用gl_InstanceID进行不同变化的实例化,实质上是使用一批顶点数据执行多次整个渲染管线,如果启用细分可能给GPU增加潜在(为啥是潜在?不是直接的吗,还有啥东东没有get到)负担。几何实例化,可以节省几何着色器之前的流程,这两种实例化可以同时使用。在shader中通过invocations布局限定符来指定执行次数,内建变量gl_InvocationID代表着执行索引,支持的最大值通过GL_MAX_GEOMETRY_SHADER_INVOCATIONS来获取,不小于32
layout (triangles, incovations = 4) in;
2、多视口使用的内建变量gl_ViewportIndex,对窗口进行指定参数后的分割。当程序存在几何着色器时它们会被存储到gl_ViewportIndex对应的数组中去(gl_ViewportIndex只是数组对应的索引而已,当要使用第二个视口是执行gl_ViewportIndex = 1后进行数据操作即可),不存在是使用第一个视口信息。
void glViewportIndexedf(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h)
void glViewportIndexedfv(GLuint index, const GLfloat* values)
void glDepthRangeIndexed(GLuint index, GLclampd n, GLclampd f)//指定窗口z坐标的范围,近平面与远平面
void glViewportArrayv(GLuint first, GLsizei count, const GLfloat* values)
void glDepthRangeArrayv(GLuint first, GLsizei count, const GLdouble* values)
3、视口多重剪切
void glScissorIndexed(GLuint index, GLint x, GLint y, GLsizei width, GLsizei height)
viod glScissorIndexedv(GLuint index, const GLint* values)
void glScissorArrayv(GLuint first, GLsizei count, const GLint* values)
4、分层渲染
渲染帧缓冲时,可以使用2D数组纹理作为颜色附件然后使用geometry shader渲染到数组中的一个切片上。使用帧缓冲的分层附件有一个限制,所有附件都必须分层且同层换成的附件必须相同的文理类型。那么对于2D纹理数组与cube map纹理需要同时使用的情况下就无能为力了。因此可以使用3D纹理数组在glFramebufferTextureLayer的帮助下完成工作,此时需要向内建变量gl_Layer写入需要写入数据的切片索引。
需要注意的是,在OpenGL4.3前,如果想在片元着色器中使用gl_ViewportIndex 与 gl_Layer需要自行定传递。
标签:ati 分层 text 执行 open vat 增加 raw 切片
原文地址:https://www.cnblogs.com/haihuahuang/p/12442684.html