原文来自安卓教程网android.662p.com,转载时请注明文章的来源:http://android.662p.com/thread-5245-1-1.html

[概述]  
   
NDK开发中, 最常见的脚本式语言应该就是 GLSL(OpenGL Shading Language) , 此类语言(一般情况下)不能以单个代码文件形式编写(并不以文件形式直接参与编译), 而是需要先以字符串形式完成编码, 然后通过开发语言接口的调用来完成工作. 就这种形式的编码, 个人是挺不喜欢的, 一来不易书写, 容易笔误, 二来不易阅读.

下面以GLSL为例.

[常规方法]  
余不赘言, 直接上代码 
// 定义GLSL
const char *demo_glsl =
        "// TODO 定义变量1"
        "// TODO 定义变量2"
        "// TODO 定义变量3"
        "void main(void) {"
        "    // TODO 进行运算"
        "}";
// TODO 将 GLSL 输入到 GL 的接口

[改进方法]

[ol] 
  新建.glsl文件, 并以C/C++形式编辑, 勿需以字符串形式编辑, 见Snippet-1;  
  编辑Android.mk, 主要是通过sh脚本来重新输出.glsl, 并以.glslh作为后缀名, 见Snippet-2;  
  在主要代码里通过include来调用.glslh, 见Snippet-3.
   
[/ol]    
// Snippet-1
// demo.glsl
// TODO 定义变量1
// TODO 定义变量2
// TODO 定义变量3
void main(void) {
  // TODO 进行运算
}  // Snippet-2
// Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
$(shell $(LOCAL_PATH)/prebuild.sh demo.glsl $(LOCAL_PATH) $(LOCAL_PATH))
//--- END OF Android.mk ---
// prebuild.sh
#!/bin/sh
mkdir -p $3
cat $2/$1 | sed -e 's|^.*$|"&\\n"|' > $3/$1h
//--- END OF prebuild.sh --- // Snippet-3
// demo.cpp
// 定义GLSL
const char demo_glsl={
    #include "demo.glslh"
}; 
  [最后的话]
从本质上来讲, 两种方法其实是一致的, 只不过是修改了输入的形式. 记得经典Objective-C(橙子)的那本书有一章就讲过: 通过间接的方法, 任何事情都可以完成. 或许会有人觉得这是多此一举, 但我们从另外一个角度来看的话, 或许是一件提高工作效率的事情, 尤其是在当下辅助工具颇丰的环境下, 比如语法高亮标记工具. 当然这种方法不只限于GLSL, 只要你想.

详细说明:http://android.662p.com/thread-5245-1-1.html

NDK中, 如何提高脚本式语言的可读性的更多相关文章

  1. Spring3: 在Bean定义中使用EL-表达式语言

    5.4.1  xml风格的配置 SpEL支持在Bean定义时注入,默认使用“#{SpEL表达式}”表示,其中“#root”根对象默认可以认为是ApplicationContext,只有Applicat ...

  2. 在C++代码中调用L脚本语言

    L脚本语言同意被其他编程语言调用.如C++,非常easy.仅仅要在宿主语言中载入L脚本引擎的动态库 直接调用这两个函数就能够了 extern "C" int __stdcall S ...

  3. 1.5 Linux中大量使用脚本语言,而不是C语言!

    说到在 Linux 下的编程,很多人会想到用C语言,Linux 的内核.shell.基础命令程序,也的确是用C语言编写的,这首先证明了一点,C语言很强很通用. 到目前为止,C语言依然垄断着计算机工业中 ...

  4. C++中嵌入Lua脚本环境搭建

    第一步(环境准备工作): 工具: ●LuaForWindows_v5.1.4-46.exe傻瓜式安装. 作用:此工具可以在windows环境下编译运行Lua脚本程序.安装完成后会有两个图标:Lua和S ...

  5. php中一些提高性能的技巧

    php中一些提高性能的技巧 tags:php性能 提高性能 php中的@ php的静态 引言:php作为一种脚本语言,本身的性能上肯定是不如c++或者java的.拥有简单易学的特性的同时,性能提升的空 ...

  6. linux c程序中获取shell脚本输出的实现方法

    linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...

  7. 基于lua的网页脚本开发语言cgilua(转)

    这里为大家介绍基于lua脚本实现的网页开发语言,cgilua 介绍 cgilua使用Lua是一个用于创建动态网页的服务器端脚本语言.纯LUA脚本和LUA页(LP)的支持,cgilua.Lua脚本是一个 ...

  8. Loadrunner11中webservice协议脚本总结

    Loadrunner11中webservice协议脚本总结 简介     webservices协议是建立可交互操作的分布式应用程序的新平台,它通过一系列的标准和协议来保证程序之间的动态连接,其中最基 ...

  9. linux C程序中获取shell脚本输出(如获取system命令输出)

    转载自 http://blog.csdn.net/hjxhjh/article/details/7909518 1. 前言 Unix 界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些 ...

随机推荐

  1. Java 中队列的使用

    刚才看见群里的一个朋友在问队列的使用,确实在现实的写代码中非常少使用队列的,反正我是从来没使用过.仅仅是学数据结构的时候学过. 以下是我写的一个小样例,希望有不足之处请提出改正.O(∩_∩)O~ 看代 ...

  2. USACO prefix TrieTree + DP

    /* ID:kevin_s1 PROG:prefix LANG:C++ */ #include <iostream> #include <cstdio> #include &l ...

  3. xtrabackup进行物理备份、恢复、在线克隆从库、在线重做主从

    http://www.lai18.com/content/4733997.html 注:图片来自<深入浅出MySQL 数据库开发 优化与管理维护 第2版> 物理备份和恢复 1.冷备份:停掉 ...

  4. MS509Team----------------Cknife

    http://www.ms509.com/ http://www.freebuf.com/sectool/98681.html 中国蚁剑

  5. Computer Science Theory for the Information Age-6: 学习理论——VC定理的证明

    VC定理的证明 本文讨论VC理论的证明,其主要内容就是证明VC理论的两个定理,所以内容非常的枯燥,但对于充实一下自己的理论知识也是有帮助的.另外,VC理论属于比较难也比较抽象的知识,所以我总结的这些证 ...

  6. php上传常见文件类型对应的$_FILES["file"]["type"](转)

    php上传常见文件类型对应的$_FILES["file"]["type"] from:http://hi.baidu.com/7book/item/374971 ...

  7. 搭建属于自己的wiki

    1.开源wiki mediawiki http://www.mediawiki.org/wiki/MediaWiki 2. 开发文档 http://www.mediawiki.org/wiki/Man ...

  8. 小白日记32:kali渗透测试之Web渗透-扫描工具-QWASP_ZAP

    扫描工具-QWASP_ZAP 十大安全工具之一,集成性工具,功能完善,而且强大.既可做主动扫描,也可做截断代理.开源免费跨平台,简单易用,体验相对混乱,但在主动扫描方面,相对占优.[kali集成] # ...

  9. Sequence用堆排序

    Description Given m sequences, each contains n non-negative integer. Now we may select one number fr ...

  10. Tick and Tick

    The three hands of the clock are rotating every second and meeting each other many times everyday. F ...