着色器和效果——1.6 用户定义函数

原创 2004年04月20日 23:17:00

1.6 用户定义函数

阅读此文表明您已同意文末的声明

HLSL中的函数有下例属性:

n        函数使用类似C++的语法

n        参数总是按值传递

n        递归不被支持

n        函数总是inline

此外,函数还加上了一些用于其上的额外的关键字。例如,考虑一个写在HLSL中的下面这个函数:

bool foo(in const bool b,   // input bool

         out int r1,        // output int

         inout float r2)    // input/output float

{

     if( b )               // test input value

     {

          r1 = 5;          // output a value through r1

     }

     else

     {

          r1 = 1;          // output a value through r1

     }

 

     // since r2 is inout we can use it as an input

     // value and also output a value through it

     r2 = r2 * r2 * r2;

 

     return true;

}

函数几乎和C++函数是一样的,除了inoutinout关键字:

n        in——指定型参argument,特指传递给实参的变量)应该在函数开始前被拷贝给实参。传入参数不必强制指定,因为实参默认是in的。例如,下面两段是等价的:

float square(in float x)

{

     return x * x;

}

也可以不强制指定in

float square(float x)

{

     return x * x;

}

n        out——指定实参应该在函数返回时被拷贝给型参。这样可以通过参数返回值。out关键字是必须的,因为HLSL不允许传递一个引用或一个指针。我们要注意:如果实参标记为out,在函数开始前,型参就不拷贝给实参。换句话说,out实参仅可以被用于输出数据——它不能用于输入。

void square(in float x, out float y)

{

     y = x * x;

}

这里,我们输入了要被乘方的数x,并且通过参数y返回了x的乘方。

n        inout——这是一个指示实参既用于输入又用于输出的快捷方法。如果要使用实参同时用作输入和输出,就指定inout

void square(inout float x)

{

     x = x * x;

}

这里,我们输入了要被乘方的数x,同时又通过x返回了的x的乘方。

 

[声明]:本文译自Frank Luna的《Introduction to 3D Game Programming with DirectX 9.0》,限于译者水平,文中难免错漏之处,欢迎各位网友批评指正;本文仅用于学习交流与参考用途,不得用于任何形式的商业用途;如需转载需事先征得作者本人和译者的同意,保持文章的完整性,并注明作者、译者和出处,对于违反以上条款造成的后果,译者对此不负任何责任。我的邮箱地址是Raymond_King123@hotmail.com,欢迎热爱3D图形和游戏,并有一定图形编程经验的朋友来信交流。

 

HLSL像素着色器

像素着色器替代了固定渲染管线的 多纹理化 阶段 实现步骤: 1.编写和编译像素着色器文件 2.创建像素着色器 3.设置像素着色器 //文本文件代码 //-----------------------...
  • lunweiwangxi3
  • lunweiwangxi3
  • 2015年04月03日 15:05
  • 767

Sql 中用户定义函数

一.用户定义函数可以接受参数,执行操作并
  • htwindows
  • htwindows
  • 2014年06月12日 23:38
  • 685

glsl着色器(c语言)

#include #include #include #include "readtext.h" #ifdef __APPLE__ #include #else #define FREEG...
  • lelieven
  • lelieven
  • 2014年02月12日 11:28
  • 1030

预定义着色器预处理宏

预定义着色器预处理宏         编译着色器程序时,Unity 会定义几个预处理宏。 目标平台 SHADER_API_OPENGL - 桌面 OpenGL ...
  • cexgiant
  • cexgiant
  • 2016年09月19日 09:25
  • 489

使用计算着色器(Compute Shader)模拟粒子效果【OpenGL】【GLSL】

效果如图:关键代码及注释如下:C++ 代码void initialize() { // 计算着色器 GLuint compute_shader = buildShader( &compute_...
  • panda1234lee
  • panda1234lee
  • 2017年04月23日 17:29
  • 1674

cocos2d-x与着色器设计--入门篇(游云凌天原创)

着色器(Shader)应用与计算机图形学领域,指一组提供计算机图形资源在渲染时执行的指令。 随着手机应用以及移动端游戏这几年的发展,着色器设计凭借着自身的灵活性以及适应性,越来越多的被移动端开发者所接...
  • danjinxiangsi
  • danjinxiangsi
  • 2015年02月26日 07:41
  • 2778

opengl编程一(使用着色器)

openglopengl简介gl是一套图形编程API,是图形应用开发的工业标准接口,每个平台都有相应的实现。可视化的操作系统都提供了图形编程接口,通常这一系列的接口作为操作系统的一个系统服务,为客户提...
  • beautyleaf
  • beautyleaf
  • 2016年07月07日 14:25
  • 4018

OpenGL 着色器基础

Instagram,Snapchat,Photoshop。 所有这些应用都是用来做图像处理的。图像处理可以简单到把一张照片转换为灰度图,也可以复杂到是分析一个视频,并在人群中找到某个特定的人。尽...
  • coloriy
  • coloriy
  • 2017年12月11日 09:43
  • 100

Unity3D 编写顶点和片元着色器( ShaderLab )

ShaderLab 着色器不仅仅包括“硬件着色器”。这些着色器做很多事情。它们描述在材质检视器 (Material Inspector) 中显示的属性,容纳用于不同图形硬件的多种着色器实现,配置固定函...
  • andyhebear
  • andyhebear
  • 2015年07月30日 15:03
  • 1818

用户自定义函数

UDF的定义 定义:和存储过程很类似,用户自定义函数是一组有序的T-SQL语句,这些语句被预先优化和编译,并且昨晚一个单元进行调用。Upf和存储过程的主要区别在于结果的返回方式,为了能支持多种不同的返...
  • LUOCHENLONG
  • LUOCHENLONG
  • 2016年09月24日 17:11
  • 691
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:着色器和效果——1.6 用户定义函数
举报原因:
原因补充:

(最多只允许输入30个字)