摘要: 最近在Android平台上写NDK程序,使用OpenGL ES(注意:这里是OpenGL ES 1.0和1.1版本),发现程序在运行过程中出现如下错误:
通过log,在android的源码中的\frameworks\base\opengl\libs\EGL\目录下有Loader.cpp文件,通过这 个文件我们可以发现,我们的OpenGL的调用都是通过加载实现了OpenGL ES的dll,然后在该dll中查找我们调用的接口,如果接口没有找到,EGL就会打印出log,如上所示。
阅读全文
摘要: OpenGL中的Frame Buffer Object(FBO)扩展,被推荐用于把数据渲染到纹理对像。相对于其它同类技术,如数据拷贝或交换缓冲区等,使用FBO技术会更高效并且更容易实现。
FBO一个最常见的应用就是:渲染到纹理(render to texture),通过这项技术可以实现发光效果,环境映射,阴影映射等很炫的效果。
在OpenGL渲染管线中,几何数据和纹理最终都是以2d像素绘制到屏幕上。最后一步的渲染目标在OpenGL渲染管线中被称为帧缓存(frame buffer)。帧缓存是颜色缓存、深度缓存、模板缓存、累积缓存的集合。默认情况下, OpenGL使用的帧缓存是由窗体系统创建和管理的。
在OpenGL扩展中,GL_EXT_framebuffer_object扩展提供了一个创建额外帧缓存对象(FBO)的接口。这个帧缓存的创建和控制完全是由OpenGL完成的,有别于窗体系统创建的默认的帧缓存。与系统默认的帧缓存类似,一个FBO也是颜色缓存、深度缓存、模板缓存的集合(FBO不包括累积缓存),然后OpenGL程序就可以把渲染重定向到FBO
阅读全文
摘要: 如果对象需要进行有意义的(non-trival)初始化,考虑使用明确的init()的方法来进行初始化操作。因为如果在构造函数中进行有意义的初始化操作,一旦这些操作失败,对象将进入不确定的状态。symbian编程中广泛使用一种称为“两阶段构造法”的方法来解决这个问题,值得借鉴。
阅读全文