以画点方式画2D矩形,减少数据传输量

2017年11月14日 由 admin 留言 »

主要思想是以画点模式绘图,在一个顶点数据下保存left,top,right,bottom四个数据。在Geometry shader中转换成Triangle Strip。

Vertex Shader
#version 330 core

uniform mat4 ModelViewProjectionMatrix;
layout(location=0) in vec4 Vertex;
void main()
{
vec4 lt=vec4(Vertex.xy,vec2(0,1));
vec4 rb=vec4(Vertex.zw,vec2(0,1));

vec4 lt_fin=lt*ModelViewProjectionMatrix;
vec4 rb_fin=rb*ModelViewProjectionMatrix;

gl_Position=vec4(lt_fin.xy,rb_fin.xy);
}

Geometry Shader
#version 330 core

layout (points) in;
layout (triangle_strip,max_vertices=4) out;

void main()
{
vec2 lt=gl_in[0].gl_Position.xy;
vec2 rb=gl_in[0].gl_Position.zw;

gl_Position=vec4(lt, vec2(0,1));EmitVertex();
gl_Position=vec4(lt.x,rb.y, vec2(0,1));EmitVertex();
gl_Position=vec4(rb.x,lt.y, vec2(0,1));EmitVertex();
gl_Position=vec4(rb, vec2(0,1));EmitVertex();

EndPrimitive();
}

广告位

评论已关闭.