前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >看得让人DT的GLSL

看得让人DT的GLSL

作者头像
逍遥剑客
发布2018-05-23 15:42:46
6850
发布2018-05-23 15:42:46
举报

GLES2.0封装到shader和vbo结合的部分, 蒙了

vertex layout(或叫vertex declaration)要一个一个element的绑定到一个shader变量上(GL叫attribute), 也就是相当于HLSL的VS_INPUT结构体吧.

问题是, GLSL里没有"semantic", 然后问题就来了

举个例子:

一个简单的顶点结构:

  1. struct Vertex  
  2. {  
  3.     float3 position;  
  4.     float3 normal;  
  5.     float2 uv;  
  6. }  

在DX中可以通过指定vetex declaration来绑定到指定寄存器, HLSL里通过语义来标明当前输入变量是对应哪个寄存器的:

  1. struct VS_INPUT  
  2. {  
  3.     float3 position : POSITION;  
  4.     float3 normal   : NORMAL;  
  5.     float2 uv       : TEXCOORD;  
  6. }  

但是对于GLSL, 它没有vertex declaration这么个东西! 怪不得大家都用CG...无奈手机上用不了CG, 还是要面对这个问题.

起初我是设想的把每种vertex element对应一个固定的attribute名, 如a_position0, a_normal0, a_color1之类, 然后用程序自动绑定. 写shader的时候只能使用程序里规定的attribute名字. 写到glBindAttribLocation时, 问题又来了:

glBindAttribLocation之后要glLinkProgram才有效果~

也就是说, 每个effect(vs + ps)要在link之前把所有参数全部手动绑定一遍. 但对于vertex layout来说不太现实. 难道还要自己用XML定义一下所有参数? 昏倒

想来想去, 好像只有OGRE有用GLSL, 查了一下, 我原本想的没有错, 它也是用固定attribute名来绑定element的:

代码语言:javascript
复制
//  a  builtin              custom attrib name 
// ---------------------------------------------- 
//  0  gl_Vertex            vertex 
//  1  n/a                  blendWeights         
//  2  gl_Normal            normal 
//  3  gl_Color             colour 
//  4  gl_SecondaryColor    secondary_colour 
//  5  gl_FogCoord          fog_coord 
//  7  n/a                  blendIndices 
//  8  gl_MultiTexCoord0    uv0 
//  9  gl_MultiTexCoord1    uv1 
//  10 gl_MultiTexCoord2    uv2 
//  11 gl_MultiTexCoord3    uv3 
//  12 gl_MultiTexCoord4    uv4 
//  13 gl_MultiTexCoord5    uv5 
//  14 gl_MultiTexCoord6    uv6, tangent 
//  15 gl_MultiTexCoord7    uv7, binormal 

 但是它没有在乎vertexlayout究竟是什么样的, 一鼓脑的全绑定上了

这样的话, glEnableVertexAttribArray的index就需要映射一下了...

嗯...shader里多声明几个不使用的变量冒似没有什么问题, 就这么干了~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2009年10月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档