Posts

【C++ OpenGL ES 2.0编程笔记】9: 使用RenderMonkey编写预览shader代码

27 Jan 2016

作者是现在对相关知识理解还不是很深入,后续会不断完善。因此文中内容仅供参考,具体的知识点请以OpenGL的官方文档为准

前言

本文介绍了如何使用AMD的RenderMonkey开发工具编写shader代码,并预览效果。 RenderMonkey现在的版本是1.8.2, 已经好久不更新了。AMD官方已经说明不再对其惊醒维护了。 ...

阅读全文 ...


使用宏来作为C++单元测试开关

27 Jan 2016

#前言 本文介绍了如何使用宏来控制C++单元测试的开启和关闭,本文的单元测试工具指的是google的C++测试框架gtest。 gtest目前最新的稳定release版本是1.7,关于gtest的介绍请移步gtest的主页,它的编译安装和使用都很简单,你可以直接把gtest的源码copy到自己项目里来使用,也可以使用header+静态库的方式集成到项目中。入门的话建议从它源码仓库里自带的测试用例看起,模仿着这些sample写用例可以快速上手。本文不对具体使用方法做介绍。

当单元测试变多的时候遇到的麻烦

我对gtest使用比较多的特性是基本的TEST测试,典型的用法像下面的代码这样:
#include <iostream>
#include "gtest/gtest.h"

using namespace std;

TEST(TempTest, Test1)
{
    cout << "============== Test1 ================" << endl;

    int i = 4 * 5;
    EXPECT_EQ(20, i);           // 20 == i
    EXPECT_NE(21, i);           // 21 != i

    EXPECT_TRUE(20 == i);
    EXPECT_FALSE(21 == i);

    cout << i << endl;          // 输出这么多行是在模拟复杂测试的时候,测试用例的输出可能会很多。
    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
}


TEST(TempTest, Test2)
{
    cout << "============== Test2 ================" << endl;

    int i = 20 * 5;
    EXPECT_GT(101, i);      // 101 > i
    EXPECT_LT(99, i);       // 99 < i

    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
}

TEST(TempTest, Test3)
{
    cout << "============== Test3 ================" << endl;

    int i = 2 * 5;
    EXPECT_GT(1, i);        // 1 > i ?  will not pass.

    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
    cout << i << endl;
}

int main(int argc, char** argv) 
{
	testing::InitGoogleTest(&argc, argv);
	return RUN_ALL_TESTS();
}
...

阅读全文 ...


【个人吐槽慎入】:别纠结于`工具`,感谢Windows

25 Jan 2016

吐槽端由

最近又看到几篇文章里的各路程序豪杰描述自己的工作流,OS X + Terminal(zsh) + Vim + Emacs,Linux……,这又让我想到“Windows坑人论,真正的程序员都是Linux的”那一系列的讨论。确实很少看到有人描述自己在Windows上的工作流,难道我们每天使用Windows的开发者就该觉得自己很low吗? 呵呵。 说实话,我前两年刚接触Linux系的操作系统时,感受到它那强大的气场之后,确实有过很长时间,在心底里看低Windows,也几乎很肯定自己的技术生涯迟早会走向Linux系。有过几年编程经验和对程序员这个职位的了解之后,我只想对那时候的自己说这句话: “呵呵”。 就跟编程语言只是个工具一样,操作系统和开发工具也是个工具。工具的职责在于能辅助人搞定他的目标,如果你追求做事效率,那么就该使用专业的工具来做专业的事情,我如果写Windows桌面程序,那么使用VS+VA插件无疑是一个好的选择,VS的强大调试能力和VA的代码补全、重构、代码导航等功能会极大提升我的效率。如果对代码编写要求较高,可以装个VsVim插件,或者在Vim或Emacs里编辑代码,然后回到VS里进行调试。如果我写Linux服务器程序,那也要选择适合Linux环境的服务器开发的专业工具。在完成我的目标的过程中,真正有意义的是我对问题的正确认识和解决问题的思路,在我完成任务之后没人会在意我用的是什么工具,关键的是我能按时正确的完成任务。 这篇文章是为了提醒自己,别在工具上花费过多精力,在正确的时间做正确的事。同时要表达一下对Windows的感恩,因为它带我走进程序的世界,它能让我一个编程菜鸟对编程这件事情产生兴趣和信心,感谢给Windows上写出优秀软件的程序精英们,Total Commander, VS, Vim, Emacs, Mingw, Cygwin, Eclipse, Intellij Idea, PyCharm, Cocos2d-x….. 你们让我的程序生活丰富多彩,让我节省下很多时间来学习新东西,享受技术生活。 ...

阅读全文 ...


【cocos2d-x 3.x 学习与应用总结】4: 使用cocos compile编译apk

24 Jan 2016

#前言 本文总结了在windows上使用cocos compile命令编译cocos2d-x安卓apk的基本用法,以及记录一个使用NDK-r9d(gcc 4.8)编译C++11的hash_map遇到的一个问题: error: invalid use of incomplete type 'struct std::hash<MessageType>'

cocos compile 基本用法, 编译debug版本的cpp-tests.

从2.x到3.x,cocos的辅助工具做的越来越完善了,2.x刚开始的时候编译apk是比较费劲的,除了最基本的安装JDK, NDK, Android SDK, Ant还要装cygwin,自己配环境变量,执行打包脚本等等。我最近使用的是cocos2d-x官方的github仓库中的默认v3分支最新代码(3.10), 以编译cpp-tests工程为android apk为例,使用最新的打包方式:cocos compile. ...

阅读全文 ...


为什么用命令行工具进行的提交没有在github主页上显示出来?

22 Jan 2016

#前言 本文介绍了如何解决使用命令行工具进行的提交没有在github个人主页上显示出来的问题。 如果不希望听那么多废话,请直接通过目录跳转到解决方法部分。

问题描述, 为了不让你的粉丝离开你,让自己“绿起来”

经常使用github的人大概都知道,在你的个人资料主页贡献图(Your Profile Contributions)上,记录着你使用github的贡献行为。你今天有“贡献”,那么代表今天的那个小格子就会变成绿色,否则就是一个空白。下图是一个例子: contri_diagram.jpg ...

阅读全文 ...