浅谈Three.js源码-render之WebGLShader.js

/**
 * @author mrdoob / http://mrdoob.com/
 */
/*
* 此脚本为创建着色器并进行编译的相关脚本。着色器(shader)分为顶点着色器和片元着色器,
* 这里送上一篇大神写的详解吧,链接:http://blog.csdn.net/lufy_legend/article/details/38342919。
*
* 2.*/
function addLineNumbers( string ) {//以换行符为标志对字符串加行号并换行的方法

   var lines = string.split( '\n' );

   for ( var i = 0; i < lines.length; i ++ ) {

      lines[ i ] = ( i + 1 ) + ': ' + lines[ i ];

   }

   return lines.join( '\n' );

}
//gl为WebGL上下文,
//type的取值有两个:gl.VERTEX_SHADER(顶点着色器)和gl.FRAGMENT_SHADER(片源着色器)
//string为着色器中运行的代码
function WebGLShader( gl, type, string ) {

   var shader = gl.createShader( type );//创建着色器

   gl.shaderSource( shader, string );//将运行的代码与着色器进行绑定
   gl.compileShader( shader );//对着色器代码进行编译

   if ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {//如果编译失败,则直接弹出错误提示

      console.error( 'THREE.WebGLShader: Shader couldn\'t compile.' );

   }

   if ( gl.getShaderInfoLog( shader ) !== '' ) {//如果编译过程报错,则打印错误信息

      console.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );

   }

   // --enable-privileged-webgl-extension
   // console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );

   return shader;

}


export { WebGLShader };
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值